pax_global_header00006660000000000000000000000064141426544720014523gustar00rootroot0000000000000052 comment=860965237a746e481071a656377633f84dfb388b zip4j-2.9.1/000077500000000000000000000000001414265447200125745ustar00rootroot00000000000000zip4j-2.9.1/.gitignore000066400000000000000000000000371414265447200145640ustar00rootroot00000000000000.idea/ target/ *.iml .DS_Store zip4j-2.9.1/.travis.yml000066400000000000000000000003601414265447200147040ustar00rootroot00000000000000language: java before_script: - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash trigger-android-build.sh ${CIRCLE_CI_TOKEN} || travis_terminate 1; fi' script: - travis_wait 45 mvn clean verify cache: directories: - $HOME/.m2 zip4j-2.9.1/LICENSE000066400000000000000000000261351414265447200136100ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. zip4j-2.9.1/README.md000066400000000000000000000654371414265447200140720ustar00rootroot00000000000000[![javadoc](https://javadoc.io/badge2/net.lingala.zip4j/zip4j/javadoc.svg)](https://javadoc.io/doc/net.lingala.zip4j/zip4j) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.lingala.zip4j/zip4j/badge.svg)](https://maven-badges.herokuapp.com/maven-central/net.lingala.zip4j/zip4j) [![Build Status](https://travis-ci.com/srikanth-lingala/zip4j.svg?branch=master)](https://travis-ci.com/srikanth-lingala/zip4j) [![Android Build Status](https://circleci.com/gh/srikanth-lingala/zip4j-android-test.svg?style=svg)](https://circleci.com/gh/srikanth-lingala/zip4j-android-test) [![Known Vulnerabilities](https://snyk.io//test/github/srikanth-lingala/zip4j/badge.svg?targetFile=pom.xml)](https://snyk.io//test/github/srikanth-lingala/zip4j?targetFile=pom.xml) Zip4j - A Java library for zip files / streams ========================= ## Thank you for rating Zip4j as the best Java library for zip files [[1][1], [2][2], [3][3], [4][4]]. It has encouraged me to bring this project to life again after a gap of several years. I tried to add some of the important features that were requested over this time, and also made the API much more neater. The newer version (> 2.0.0) now supports streams, which was understandably, one of the most requested feature. If you have any feedback, bugs to report, feature requests, etc, please open an issue here on GitHub. I will try to address them as soon as I can. I also monitor the tag `zip4j` on [Stack Overflow][10]. ## About Zip4j is the most comprehensive Java library for zip files or streams. As of this writing, it is the only Java library which has support for zip encryption, apart from several other features. It tries to make handling zip files/streams a lot more easier. No more clunky boiler plate code with input streams and output streams. As you can see in the usage section below, working with zip files can now even be a single line of code, compared to [this][5]. I mean no offense to the Java's built-in zip support. In fact, this library depends on Java's built-in zip code and it would have been significantly more ~~complicated~~ challenging if I had to write compression logic as well. But lets be honest, working with zip files or streams can be a lot of boiler plate code. The main goal of this library is to provide a simple API for all usual actions of a zip file or streams by doing the heavy lifting within the library and not have developers worry about having to deal with streams, etc. Apart from usability, another important goal of this library is to provide support for as many zip features as possible, which brings me to: ## Features * Create, Add, Extract, Update, Remove files from a zip file * Support for streams (ZipInputStream and ZipOutputStream) * Read/Write password protected zip files and streams * Support for both AES and zip standard encryption methods * Support for Zip64 format * Store (No Compression) and Deflate compression method * Create or extract files from split zip files (Ex: z01, z02,...zip) * Support for Unicode file names and comments in zip * Progress Monitor - for integration into apps and user facing applications ## Background Zip4j was started by me (Srikanth Reddy Lingala) back in 2008/2009, when I realized the lack of support for majority of zip format features in Java. And also working with zip files was, as mentioned several times above, a lot of boiler plate code, having to deal with streams (worse still, it was back in the days when there was no try-with-resources in Java). There was also no comprehensive library which supports zip features. So, I decided to write one, and approximately after a year, the first version was out. The response was truly overwhelming, and I got a lot of support right from the next day of release. It was not put on GitHub as git/GitHub was not as popular as it is now. Code was hosted on my website, as, guess what, a zip file :). And unfortunately, after a year or two after the initial release, life got busy and I was not able to support Zip4j as much as I wanted to. But the overwhelming encouragement I got over the years made me start working on Zip4j once again, and makes me support Zip4j as much as I can. ## Requirements JDK 7 or later* * Zip4j is written on JDK 8, as some of the features (NIO) that Zip4j supports requires features available only in JDK 8. However, considering the fact that Zip4j is widely used in Android, and to support older versions of Android, Zip4j supports JDK 7 as well. In cases where the feature/class from JDK 8 is missing, Zip4j falls back to the features available in JDK 7. In other words, when running on JDK 7, not all features will be supported. ## Maven ```xml net.lingala.zip4j zip4j 2.9.0 ``` Please check the latest version number on [Maven Central][6]. ## Usage ### Creating a zip file with single file in it / Adding single file to an existing zip ```java new ZipFile("filename.zip").addFile("filename.ext"); ```    Or ```java new ZipFile("filename.zip").addFile(new File("filename.ext")); ``` ### Creating a zip file with multiple files / Adding multiple files to an existing zip ```java new ZipFile("filename.zip").addFiles(Arrays.asList(new File("first_file"), new File("second_file"))); ``` ### Creating a zip file by adding a folder to it / Adding a folder to an existing zip ```java new ZipFile("filename.zip").addFolder(new File("/users/some_user/folder_to_add")); ``` Since v2.6, it is possible to exclude certain files when adding a folder to zip by using an ExcludeFileFilter ```java ExcludeFileFilter excludeFileFilter = filesToExclude::contains; ZipParameters zipParameters = new ZipParameters(); zipParameters.setExcludeFileFilter(excludeFileFilter); new ZipFile("filename.zip").addFolder(new File("/users/some_user/folder_to_add"), zipParameters); ``` ### Creating a zip file from stream / Adding a stream to an existing zip ```java new ZipFile("filename.zip").addStream(inputStream, new ZipParameters()); ``` Passing in `new ZipParameters()`, as in the above example, will make Zip4j use default zip parameters. Please look at [ZipParameters][7] to see the default configuration. ### Creating a zip file of compression method STORE / Adding entries to zip file of compression method STORE By default Zip4j uses Deflate compression algorithm to compress files. However, if you would like to not use any compression (called STORE compression), you can do so as shown in the example below: ```java ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); new ZipFile("filename.zip").addFile("fileToAdd", zipParameters); ``` You can similarly pass in zip parameters to all the other examples to create a zip file of STORE compression. ### Creating a password protected zip file / Adding files to an existing zip with password protection ##### AES encryption ```java ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); // Below line is optional. AES 256 is used by default. You can override it to use AES 128. AES 192 is supported only for extracting. zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); List filesToAdd = Arrays.asList( new File("somefile"), new File("someotherfile") ); ZipFile zipFile = new ZipFile("filename.zip", "password".toCharArray()); zipFile.addFiles(filesToAdd, zipParameters); ``` ##### Zip standard encryption Instead of AES, replace `zipParameters.setEncryptionMethod(EncryptionMethod.AES);` with `zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD);`. You can omit the line to set AES key strength. As the name suggests, this is only applicable for AES encryption. In all the above examples, you can similarly pass in zip parameters with appropriate password configuration to create a password protected zip file. ### Creating a split zip file If you want to split the zip file over several files when the size exceeds a particular limit, you can do so like this: ```java List filesToAdd = Arrays.asList( new File("somefile"), new File("someotherfile") ); ZipFile zipFile = new ZipFile("filename.zip"); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, 10485760); // using 10MB in this example ``` Passing in `new ZipParameters()`, as in the above example, will make Zip4j use default zip parameters. Please look at [ZipParameters][7] to see the default configuration. Zip file format specifies a minimum of 65536 bytes (64KB) as a minimum length for split files. Zip4j will throw an exception if anything less than this value is specified. To create a split zip with password protection, pass in appropriate ZipParameters as shown in the example below: ```java ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); List filesToAdd = Arrays.asList( new File("somefile"), new File("someotherfile") ); ZipFile zipFile = new ZipFile("filename.zip", "password".toCharArray()); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, 10485760); // using 10MB in this example ``` ### Zip64 format Zip64 is a zip feature which allows support for zip files when the size of the zip file exceeds the maximum that can be stored in 4 bytes (i.e., greater than 4,294,967,295 bytes). Traditionally, zip headers have a provision of 4 bytes to store for file sizes. But with growing file sizes compared to a few decades back, zip file format extended support of file sizes which extends 4 bytes by adding additional headers which uses 8 bytes for file sizes (compressed and uncompressed file sizes). This feature is known as Zip64. Zip4j will automatically make a zip file with Zip64 format and add appropriate headers, when it detects the zip file to be crossing this file size limit. You do not have to explicitly specify any flag for Zip4j to use this feature. ### Extracting all files from a zip ```java new ZipFile("filename.zip").extractAll("/destination_directory"); ``` ### Extracting all files from a password protected zip ```java new ZipFile("filename.zip", "password".toCharArray()).extractAll("/destination_directory"); ``` ### Extracting a single file from zip ```java new ZipFile("filename.zip").extractFile("fileNameInZip.txt", "/destination_directory"); ``` ### Extracting a folder from zip (since v2.6.0) ```java new ZipFile("filename.zip").extractFile("folderNameInZip/", "/destination_directory"); ``` ### Extracting a single file from zip which is password protected ```java new ZipFile("filename.zip", "password".toCharArray()).extractFile("fileNameInZip.txt", "/destination_directory"); ``` Since v2.6.0: If the file name represents a directory, Zip4j will extract all files in the zip that are part of this directory. ### Extracting a single file from zip and giving it a new file name Below example will extract the file `fileNameInZip.txt` from the zip file to the output directory `/destination_directory` and will give the file the name `newfileName.txt`. Without the third parameter of the new file name, the same name as the file in the zip will be used, which in this case is `fileNameInZip.txt`. If the file being extracted is a directory, `newFileName` parameter will be used as the directory name. ```java new ZipFile("filename.zip", "password".toCharArray()).extractFile("fileNameInZip.txt", "/destination_directory", "newfileName.txt"); ``` ### Get an input stream for an entry in a zip file ```java ZipFile zipFile = new ZipFile("filename.zip"); FileHeader fileHeader = zipFile.getFileHeader("entry_name_in_zip.txt"); InputStream inputStream = zipFile.getInputStream(fileHeader); ``` You can now use this input stream to read content from it/write content to an output stream. Please note that the entry/file name is relative to the directory it is in. If `entry_name_in_zip.txt` is in a folder called "root_folder" in the zip, then you have to use `zipFile.getFileHeader("root_folder/entry_name_in_zip.txt");`. ### Remove a file/entry from a zip file ```java new ZipFile("filename.zip").removeFile("fileNameInZipToRemove"); ``` If `fileNameInZipToRemove` represents a folder all the files and folders under this folder will be removed as well (this is valid since v2.5.0 of Zip4j. All prior versions remove just the single entry even if it is a folder). Please note that the file name is relative the root folder in zip. That is, if the file you want to remove exists in a folder called "folder1", which in-turn exists in a folder called "root-folder", removing this file from zip has to be done as below: ```java new ZipFile("filename.zip").removeFile("root-folder/folder1/fileNameInZipToRemove"); ``` If you want to be sure that the file you want to remove exists in zip file or if you don't want to deal with file names as string when using the `removeFile` API, you can use the other overloaded method which takes in a `FileHeader`: ```java ZipFile zipFile = new ZipFile("someZip.zip"); FileHeader fileHeader = zipFile.getFileHeader("fileNameInZipToRemove"); if (fileHeader == null) { // file does not exist } zipFile.removeFile(fileHeader); ``` Since v2.5.0 of Zip4j, it is possible to remove multiple files and folders from a zip file. You can now pass in a list as shown in the code below: ```java ZipFile zipFile = new ZipFile("someZip.zip"); List filesToRemove = Arrays.asList("file1.txt", "file2.txt", "some-folder/", "some-new-folder-1/somefile.pdf"); zipFile.removeFiles(filesToRemove); ``` The above code will remove `file1.txt`, `file2.txt`, all files and folders under `some-folder` (including `some-folder`) and just the entry `somefile.pdf` in folder `some-new-folder-1`. All other files and folders are kept intact in the zip file. ### Rename entries in the zip file There are three ways to rename an entry in a zip file with Zip4j. One way is to pass in a file header and the new file name: ```java ZipFile zipFile = new ZipFile("sample.zip"); FileHeader fileHeader = zipFile.getFileHeader("entry-to-be-changed.pdf"); zipFile.renameFile(fileHeader, "new-file-name.pdf"); ``` Second way is to pass in just the file name to be changed (instead of the file header), and the new file name. ```java new ZipFile("filename.zip").renameFile("entry-to-be-changed.pdf", "new-file-name.pdf"); ``` It is also possible to change multiple file names at once. In this case you have to use a map, with the key of the entry in the map being the entry to be changed, and the value of the map being the new file name: ```java Map fileNamesMap = new HashMap<>(); fileNamesMap.put("firstFile.txt", "newFileFirst.txt"); fileNamesMap.put("secondFile.pdf", "newSecondFile.pdf"); fileNamesMap.put("some-folder/thirdFile.bin", "some-folder/newThirdFile.bin"); new ZipFile("filename.zip").renameFile("entry-to-be-changed.pdf", "new-file-name.pdf"); ``` To modify an entry name which is inside a folder, the new file name should contain the complete parent path as well. For example, if an entry by the name `some-entry.pdf` is in the folder `some-folder/some-sub-folder/`, to modify this entry name to `some-new-entry.pdf`: ```java new ZipFile("filename.zip").renameFile("some-folder/some-sub-folder/some-entry.pdf", "some-folder/some-sub-folder/new-entry.pdf"); ``` If the parent path is missing, then the file will be put at the root of the zip file. In the below example, after the file is renamed, `some-new-entry.pdf` will exist at the root of the zip file instead of at `some-folder/some-sub-folder/`: ```java new ZipFile("filename.zip").renameFile("some-folder/some-sub-folder/some-entry.pdf", "some-new-entry.pdf"); ``` This also gives the flexibility to "move" the entry to a different folder. The below example will move the `some-entry.pdf` from `some-folder/some-sub-folder/` to `folder-to-be-moved-to/sub-folder/` and the file will also be renamed to `new-entry.pdf`. To just move the file, use the same file name instead of a new file name. ```java new ZipFile("filename.zip").renameFile("some-folder/some-sub-folder/some-entry.pdf", "folder-to-be-moved-to/sub-folder/new-entry.pdf"); ``` If the entry being modified is a directory, all entries that are part of that directory will be renamed so that all of them have the new folder name as parent. In zip format, all entry names under a directory will contain the full name as their file name. For example if there is an entry by the name `filename.txt` inside a directory `directoryName`, the file name for the entry will be `directoryName/filename.txt`. And if the name of the directory has now been changed to `newDirectoryName`, the entry under it will also be changed to `newDirectoryName/filename.txt`, so when the zip file is extracted, `filename.txt` will be under `newDirectoryName`. Zip file format does not allow modifying split zip files, and Zip4j will throw an exception if an attempt is made to rename files in a split zip file. ### Merging split zip files into a single zip This is the reverse of creating a split zip file, that is, this feature will merge a zip file which is split across several files into a single zip file: ```java new ZipFile("split_zip_file.zip").mergeSplitFiles(new File("merged_zip_file.zip")); ``` This method will throw an exception if the split zip file (in this case `split_zip_file.zip`) is not a split zip file. ### List all files in a zip ```java List fileHeaders = new ZipFile("zipfile.zip").getFileHeaders(); fileHeaders.stream().forEach(fileHeader -> System.out.println(fileHeader.getFileName())); ``` You can get all other information from the `FileHeader` object corresponding to each file/entry in the zip. ### Check if a zip file is password protected ```java new ZipFile("encrypted_zip_file.zip").isEncrypted(); ``` ### Check if a zip file is a split zip file ```java new ZipFile("split_zip_file.zip").isSplitArchive(); ``` ### Set comment for a zip file ```java new ZipFile("some_zip_file.zip").setComment("Some comment"); ``` ### Remove comment of a zip file ```java new ZipFile("some_zip_file.zip").setComment(""); ``` ### Get comment of a zip file ```java new ZipFile("some_zip_file.zip").getComment(); ``` ### Check if a zip file is valid Note: This will only check for the validity of the headers and not the validity of each entry in the zip file. ```java new ZipFile("valid_zip_file.zip").isValidZipFile(); ``` ## Working with streams ### Adding entries with ZipOutputStream ```java import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; public class ZipOutputStreamExample { public void zipOutputStreamExample(File outputZipFile, List filesToAdd, char[] password, CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength) throws IOException { ZipParameters zipParameters = buildZipParameters(compressionMethod, encrypt, encryptionMethod, aesKeyStrength); byte[] buff = new byte[4096]; int readLen; try(ZipOutputStream zos = initializeZipOutputStream(outputZipFile, encrypt, password)) { for (File fileToAdd : filesToAdd) { // Entry size has to be set if you want to add entries of STORE compression method (no compression) // This is not required for deflate compression if (zipParameters.getCompressionMethod() == CompressionMethod.STORE) { zipParameters.setEntrySize(fileToAdd.length()); } zipParameters.setFileNameInZip(fileToAdd.getName()); zos.putNextEntry(zipParameters); try(InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(buff)) != -1) { zos.write(buff, 0, readLen); } } zos.closeEntry(); } } } private ZipOutputStream initializeZipOutputStream(File outputZipFile, boolean encrypt, char[] password) throws IOException { FileOutputStream fos = new FileOutputStream(outputZipFile); if (encrypt) { return new ZipOutputStream(fos, password); } return new ZipOutputStream(fos); } private ZipParameters buildZipParameters(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength) { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(compressionMethod); zipParameters.setEncryptionMethod(encryptionMethod); zipParameters.setAesKeyStrength(aesKeyStrength); zipParameters.setEncryptFiles(encrypt); return zipParameters; } } ``` ### Extract files with ZipInputStream ```java import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.LocalFileHeader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class ZipInputStreamExample { public void extractWithZipInputStream(File zipFile, char[] password) throws IOException { LocalFileHeader localFileHeader; int readLen; byte[] readBuffer = new byte[4096]; InputStream inputStream = new FileInputStream(zipFile); try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, password)) { while ((localFileHeader = zipInputStream.getNextEntry()) != null) { File extractedFile = new File(localFileHeader.getFileName()); try (OutputStream outputStream = new FileOutputStream(extractedFile)) { while ((readLen = zipInputStream.read(readBuffer)) != -1) { outputStream.write(readBuffer, 0, readLen); } } } } } } ``` ## Working with Progress Monitor ProgressMonitor makes it easier for applications (especially user facing) to integrate Zip4j. It is useful to show progress (example: updating a progress bar, displaying the current action, show file name being worked on, etc.). To use ProgressMonitor, you have to set `ZipFile.setRunInThread(true)`. This will make any actions being done on the zip file to run in a background thread. You can then access ProgressMonitor `Zipfile.getProgressMonitor()` and get details of the current action being done along with the percentage work done, etc. Below is an example: ```java ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); zipFile.setRunInThread(true); zipFile.addFolder(new File("/some/folder")); while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) { System.out.println("Percentage done: " + progressMonitor.getPercentDone()); System.out.println("Current file: " + progressMonitor.getFileName()); System.out.println("Current task: " + progressMonitor.getCurrentTask()); Thread.sleep(100); } if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) { System.out.println("Successfully added folder to zip"); } else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) { System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage()); } else if (progressMonitor.getResult().equals(ProgressMonitor.Result.CANCELLED)) { System.out.println("Task cancelled"); } ``` Note that in the above example, `addFolder()` will almost immediately return back the control to the caller. The client code can then perform a loop until the state gets back to "Ready" as shown in the above example. Similarly, ProgressMonitor can be used with other actions like, `addFiles`, `removeFiles` and `extractFiles`. ## Contribution It is hard to find as much free time as I used to have when I first started Zip4j back in 2009. I would highly appreciate any support I can get for this project. You can fork this project, and send me pull requests for any bug fixes, issues mentioned here or new features. If you need any support in understanding the code or zip specification, just drop me a mail and I will help you as best as I can. (See FAQ for my email address.) ## FAQ 1. **Why do I have to pass in password as char array and not as a string?** [That's why][8] 2. **How can I contact you?** srikanth.mailbox@gmail.com 3. **Are unicode file names supported?** Yes, unicode file names (UTF-8) are supported as specified by the zip format specification. Zip4j will use UTF-8 file name and file comment encoding when creating a zip file. When extracting a zip file, Zip4j will only use UTF-8 encoding, only if the appropriate header flag is set as specified by zip file format specification. If this flag is not set, Zip4j will use CP437 encoding which only supports extended ASCII characters. 4. **Where can I find zip file format specification?** [Here][9] 5. **Why are there so many changes in version 2.x compared to 1.x?** Because when version 1.x was written back in 2009, Zip4j was badly in need of a face-lift and code modernization. Also, my coding standards have improved over the years (or at least that's what I like to think). Although I am proud of the work I did with Zip4j back in 2009, some parts of the code make me feel like hiding my face in shame. One such example is the usage of `ArrayList` instead of `List`. API and code should look much neater now. And also, Zip4j now supports a minimum of JRE 8, as compared to JRE 5 with 1.x, which obviously will bring some nice features that I can make use of. (For example: no more explicitly closing the streams all over the code). If you still feel like something can be improved (and I am pretty sure that there are things to be improved), please let me know by opening an issue here or writing to me (my email address is in point #2 above). 6. **What are the licensing conditions for older releases of Zip4j?** All releases of Zip4j, from version 1.0, are licensed under Apache License 2.0 [1]: https://stackoverflow.com/questions/9324933/what-is-a-good-java-library-to-zip-unzip-files [2]: https://stackoverflow.com/questions/5362364/java-library-to-work-with-zip-files [3]: https://stackoverflow.com/questions/166340/recommendations-on-a-free-library-to-be-used-for-zipping-files [4]: https://stackoverflow.com/questions/18201279/file-compression-library-for-java/18201553 [5]: https://www.baeldung.com/java-compress-and-uncompress [6]: https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j [7]: https://javadoc.io/doc/net.lingala.zip4j/zip4j/latest/net/lingala/zip4j/model/ZipParameters.html#ZipParameters-- [8]: https://www.baeldung.com/java-storing-passwords [9]: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT [10]: https://stackoverflow.com/questions/tagged/zip4j zip4j-2.9.1/pom.xml000066400000000000000000000157561414265447200141270ustar00rootroot00000000000000 4.0.0 net.lingala.zip4j zip4j 2.9.1-SNAPSHOT Zip4j Zip4j - A Java library for zip files and streams https://github.com/srikanth-lingala/zip4j git@github.com:srikanth-lingala/zip4j.git Srikanth Reddy Lingala srikanth.mailbox@gmail.com Apache License, Version 2.0 https://www.apache.org/licenses/LICENSE-2.0.txt 1.7 1.7 4.13.1 1.18.8 2.9.1 2.28.2 2.0.2 UTF-8 ossrh https://oss.sonatype.org/content/repositories/snapshots ossrh https://oss.sonatype.org/service/local/staging/deploy/maven2/ junit junit ${junit.version} test org.assertj assertj-core ${assertj.version} test org.mockito mockito-core ${mockito.version} test org.powermock powermock-module-junit4 ${powermock.version} test org.powermock powermock-api-mockito2 ${powermock.version} test disable-java8-doclint [1.8,) -Xdoclint:none src/main/java org.apache.maven.plugins maven-compiler-plugin 1.7 1.7 org.apache.maven.plugins maven-failsafe-plugin 3.0.0-M3 integration-test verify org.apache.maven.plugins maven-source-plugin 2.2.1 attach-sources deploy jar-no-fork org.apache.maven.plugins maven-javadoc-plugin 2.9.1 attach-javadocs deploy jar org.apache.maven.plugins maven-gpg-plugin 1.5 sign-artifacts deploy sign org.sonatype.plugins nexus-staging-maven-plugin 1.6.8 true ossrh https://oss.sonatype.org/ true org.apache.felix maven-bundle-plugin true net.lingala.zip4j.* bundle-manifest package bundle zip4j-2.9.1/src/000077500000000000000000000000001414265447200133635ustar00rootroot00000000000000zip4j-2.9.1/src/main/000077500000000000000000000000001414265447200143075ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/000077500000000000000000000000001414265447200152305ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/000077500000000000000000000000001414265447200160165ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/000077500000000000000000000000001414265447200174255ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/000077500000000000000000000000001414265447200204655ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/ZipFile.java000077500000000000000000001327201414265447200227020ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderReader; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.io.inputstream.NumberedSplitRandomAccessFile; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.UnzipParameters; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.AddFilesToZipTask; import net.lingala.zip4j.tasks.AddFilesToZipTask.AddFilesToZipTaskParameters; import net.lingala.zip4j.tasks.AddFolderToZipTask; import net.lingala.zip4j.tasks.AddFolderToZipTask.AddFolderToZipTaskParameters; import net.lingala.zip4j.tasks.AddStreamToZipTask; import net.lingala.zip4j.tasks.AddStreamToZipTask.AddStreamToZipTaskParameters; import net.lingala.zip4j.tasks.AsyncZipTask; import net.lingala.zip4j.tasks.ExtractAllFilesTask; import net.lingala.zip4j.tasks.ExtractAllFilesTask.ExtractAllFilesTaskParameters; import net.lingala.zip4j.tasks.ExtractFileTask; import net.lingala.zip4j.tasks.ExtractFileTask.ExtractFileTaskParameters; import net.lingala.zip4j.tasks.MergeSplitZipFileTask; import net.lingala.zip4j.tasks.MergeSplitZipFileTask.MergeSplitZipFileTaskParameters; import net.lingala.zip4j.tasks.RemoveFilesFromZipTask; import net.lingala.zip4j.tasks.RemoveFilesFromZipTask.RemoveFilesFromZipTaskParameters; import net.lingala.zip4j.tasks.RenameFilesTask; import net.lingala.zip4j.tasks.RenameFilesTask.RenameFilesTaskParameters; import net.lingala.zip4j.tasks.SetCommentTask; import net.lingala.zip4j.tasks.SetCommentTask.SetCommentTaskTaskParameters; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import net.lingala.zip4j.util.Zip4jUtil; import java.io.Closeable; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; import static net.lingala.zip4j.util.FileUtils.isNumberedSplitFile; import static net.lingala.zip4j.util.InternalZipConstants.CHARSET_UTF_8; import static net.lingala.zip4j.util.InternalZipConstants.MIN_BUFF_SIZE; import static net.lingala.zip4j.util.UnzipUtil.createZipInputStream; import static net.lingala.zip4j.util.Zip4jUtil.isStringNotNullAndNotEmpty; /** * Base class to handle zip files. Some of the operations supported * in this class are:
*
    *
  • Create Zip File
  • *
  • Add files to zip file
  • *
  • Add folder to zip file
  • *
  • Extract files from zip files
  • *
  • Remove files from zip file
  • *
*/ public class ZipFile implements Closeable { private File zipFile; private ZipModel zipModel; private boolean isEncrypted; private ProgressMonitor progressMonitor; private boolean runInThread; private char[] password; private HeaderWriter headerWriter = new HeaderWriter(); private Charset charset = null; private ThreadFactory threadFactory; private ExecutorService executorService; private int bufferSize = InternalZipConstants.BUFF_SIZE; private List openInputStreams = new ArrayList<>(); /** * Creates a new ZipFile instance with the zip file at the location specified in zipFile. * This constructor does not yet create a zip file if it does not exist. Creation happens when adding files * to this ZipFile instance * @param zipFile */ public ZipFile(String zipFile) { this(new File(zipFile), null); } /** * Creates a new ZipFile instance with the zip file at the location specified in zipFile. * Input password will be used for any zip operations like adding files or extracting files. * This constructor does not yet create a zip file if it does not exist. Creation happens when adding files * to this ZipFile instance * @param zipFile */ public ZipFile(String zipFile, char[] password) { this(new File(zipFile), password); } /** * Creates a new Zip File Object with the input file. * If the zip file does not exist, it is not created at this point. * * @param zipFile file reference to the zip file * @throws IllegalArgumentException when zip file parameter is null */ public ZipFile(File zipFile) { this(zipFile, null); } /** * Creates a new Zip File Object with the input file. * If the zip file does not exist, it is not created at this point. * * @param zipFile file reference to the zip file * @param password password to use for the zip file * @throws IllegalArgumentException when zip file parameter is null */ public ZipFile(File zipFile, char[] password) { if (zipFile == null) { throw new IllegalArgumentException("input zip file parameter is null"); } this.zipFile = zipFile; this.password = password; this.runInThread = false; this.progressMonitor = new ProgressMonitor(); } /** * Creates a zip file and adds the list of source file(s) to the zip file. If the zip file * exists then this method throws an exception. Parameters such as compression type, etc * can be set in the input parameters. While the method addFile/addFiles also creates the * zip file if it does not exist, the main functionality of this method is to create a split * zip file. To create a split zip file, set the splitArchive parameter to true with a valid * splitLength. Split Length has to be more than 65536 bytes * * @param filesToAdd - File to be added to the zip file * @param parameters - zip parameters for this file list * @param splitArchive - if archive has to be split or not * @param splitLength - if archive has to be split, then length in bytes at which it has to be split * @throws ZipException */ public void createSplitZipFile(List filesToAdd, ZipParameters parameters, boolean splitArchive, long splitLength) throws ZipException { if (zipFile.exists()) { throw new ZipException("zip file: " + zipFile + " already exists. To add files to existing zip file use addFile method"); } if (filesToAdd == null || filesToAdd.size() == 0) { throw new ZipException("input file List is null, cannot create zip file"); } createNewZipModel(); zipModel.setSplitArchive(splitArchive); zipModel.setSplitLength(splitLength); new AddFilesToZipTask(zipModel, password, headerWriter, buildAsyncParameters()).execute( new AddFilesToZipTaskParameters(filesToAdd, parameters, buildConfig())); } /** * Creates a zip file and adds the files/folders from the specified folder to the zip file. * This method does the same functionality as in addFolder method except that this method * can also create split zip files when adding a folder. To create a split zip file, set the * splitArchive parameter to true and specify the splitLength. Split length has to be more than * or equal to 65536 bytes. Note that this method throws an exception if the zip file already * exists. * * @param folderToAdd * @param parameters * @param splitArchive * @param splitLength * @throws ZipException */ public void createSplitZipFileFromFolder(File folderToAdd, ZipParameters parameters, boolean splitArchive, long splitLength) throws ZipException { if (folderToAdd == null) { throw new ZipException("folderToAdd is null, cannot create zip file from folder"); } if (parameters == null) { throw new ZipException("input parameters are null, cannot create zip file from folder"); } if (zipFile.exists()) { throw new ZipException("zip file: " + zipFile + " already exists. To add files to existing zip file use addFolder method"); } createNewZipModel(); zipModel.setSplitArchive(splitArchive); if (splitArchive) { zipModel.setSplitLength(splitLength); } addFolder(folderToAdd, parameters, false); } /** * Adds input source file to the zip file with default zip parameters. If zip file does not exist, * this method creates a new zip file. * * @param fileToAdd - File with path to be added to the zip file * @throws ZipException */ public void addFile(String fileToAdd) throws ZipException { addFile(fileToAdd, new ZipParameters()); } /** * Adds input source file to the zip file with provided zip parameters. If zip file does not exist, * this method creates a new zip file. * * @param fileToAdd - File with path to be added to the zip file * @param zipParameters - parameters for the entry to be added to zip * @throws ZipException */ public void addFile(String fileToAdd, ZipParameters zipParameters) throws ZipException { if (!isStringNotNullAndNotEmpty(fileToAdd)) { throw new ZipException("file to add is null or empty"); } addFiles(Collections.singletonList(new File(fileToAdd)), zipParameters); } /** * Adds input source file to the zip file with default zip parameters. If zip file does not exist, * this method creates a new zip file. * * @param fileToAdd - File to be added to the zip file * @throws ZipException */ public void addFile(File fileToAdd) throws ZipException { addFiles(Collections.singletonList(fileToAdd), new ZipParameters()); } /** * Adds input source file to the zip file. If zip file does not exist, * this method creates a new zip file. Parameters such as compression type, etc * can be set in the input parameters. * * @param fileToAdd - File to be added to the zip file * @param parameters - zip parameters for this file * @throws ZipException */ public void addFile(File fileToAdd, ZipParameters parameters) throws ZipException { addFiles(Collections.singletonList(fileToAdd), parameters); } /** * Adds the list of input files to the zip file with default zip parameters. If zip file does not exist, * this method creates a new zip file. * * @param filesToAdd * @throws ZipException */ public void addFiles(List filesToAdd) throws ZipException { addFiles(filesToAdd, new ZipParameters()); } /** * Adds the list of input files to the zip file. If zip file does not exist, then * this method creates a new zip file. Parameters such as compression type, etc * can be set in the input parameters. * * @param filesToAdd * @param parameters * @throws ZipException */ public void addFiles(List filesToAdd, ZipParameters parameters) throws ZipException { if (filesToAdd == null || filesToAdd.size() == 0) { throw new ZipException("input file List is null or empty"); } if (parameters == null) { throw new ZipException("input parameters are null"); } readZipInfo(); if (zipModel == null) { throw new ZipException("internal error: zip model is null"); } if (zipFile.exists() && zipModel.isSplitArchive()) { throw new ZipException("Zip file already exists. Zip file format does not allow updating split/spanned files"); } new AddFilesToZipTask(zipModel, password, headerWriter, buildAsyncParameters()).execute( new AddFilesToZipTaskParameters(filesToAdd, parameters, buildConfig())); } /** * Adds the folder in the given file object to the zip file with default zip parameters. If zip file does not exist, * then a new zip file is created. If input folder is invalid then an exception * is thrown. * * @param folderToAdd * @throws ZipException */ public void addFolder(File folderToAdd) throws ZipException { addFolder(folderToAdd, new ZipParameters()); } /** * Adds the folder in the given file object to the zip file. If zip file does not exist, * then a new zip file is created. If input folder is invalid then an exception * is thrown. Zip parameters for the files in the folder to be added can be set in * the input parameters * * @param folderToAdd * @param zipParameters * @throws ZipException */ public void addFolder(File folderToAdd, ZipParameters zipParameters) throws ZipException { if (folderToAdd == null) { throw new ZipException("input path is null, cannot add folder to zip file"); } if (!folderToAdd.exists()) { throw new ZipException("folder does not exist"); } if (!folderToAdd.isDirectory()) { throw new ZipException("input folder is not a directory"); } if (!folderToAdd.canRead()) { throw new ZipException("cannot read input folder"); } if (zipParameters == null) { throw new ZipException("input parameters are null, cannot add folder to zip file"); } addFolder(folderToAdd, zipParameters, true); } /** * Internal method to add a folder to the zip file. * * @param folderToAdd * @param zipParameters * @param checkSplitArchive * @throws ZipException */ private void addFolder(File folderToAdd, ZipParameters zipParameters, boolean checkSplitArchive) throws ZipException { readZipInfo(); if (zipModel == null) { throw new ZipException("internal error: zip model is null"); } if (checkSplitArchive) { if (zipModel.isSplitArchive()) { throw new ZipException("This is a split archive. Zip file format does not allow updating split/spanned files"); } } new AddFolderToZipTask(zipModel, password, headerWriter, buildAsyncParameters()).execute( new AddFolderToZipTaskParameters(folderToAdd, zipParameters, buildConfig())); } /** * Creates a new entry in the zip file and adds the content of the input stream to the * zip file. ZipParameters.isSourceExternalStream and ZipParameters.fileNameInZip have to be * set before in the input parameters. If the file name ends with / or \, this method treats the * content as a directory. Setting the flag ProgressMonitor.setRunInThread to true will have * no effect for this method and hence this method cannot be used to add content to zip in * thread mode * * @param inputStream * @param parameters * @throws ZipException */ public void addStream(InputStream inputStream, ZipParameters parameters) throws ZipException { if (inputStream == null) { throw new ZipException("inputstream is null, cannot add file to zip"); } if (parameters == null) { throw new ZipException("zip parameters are null"); } this.setRunInThread(false); readZipInfo(); if (zipModel == null) { throw new ZipException("internal error: zip model is null"); } if (zipFile.exists() && zipModel.isSplitArchive()) { throw new ZipException("Zip file already exists. Zip file format does not allow updating split/spanned files"); } new AddStreamToZipTask(zipModel, password, headerWriter, buildAsyncParameters()).execute( new AddStreamToZipTaskParameters(inputStream, parameters, buildConfig())); } /** * Extracts all the files in the given zip file to the input destination path. * If zip file does not exist or destination path is invalid then an * exception is thrown. * * @param destinationPath path to which the entries of the zip are to be extracted * @throws ZipException when an issue occurs during extraction */ public void extractAll(String destinationPath) throws ZipException { extractAll(destinationPath, new UnzipParameters()); } /** * Extracts all entries in the zip file to the destination path considering the options defined in * UnzipParameters * * @param destinationPath path to which the entries of the zip are to be extracted * @param unzipParameters parameters to be considered during extraction * @throws ZipException when an issue occurs during extraction */ public void extractAll(String destinationPath, UnzipParameters unzipParameters) throws ZipException { if (!isStringNotNullAndNotEmpty(destinationPath)) { throw new ZipException("output path is null or invalid"); } if (!Zip4jUtil.createDirectoryIfNotExists(new File(destinationPath))) { throw new ZipException("invalid output path"); } if (zipModel == null) { readZipInfo(); } // Throw an exception if zipModel is still null if (zipModel == null) { throw new ZipException("Internal error occurred when extracting zip file"); } new ExtractAllFilesTask(zipModel, password, unzipParameters, buildAsyncParameters()).execute( new ExtractAllFilesTaskParameters(destinationPath, buildConfig())); } /** * Extracts a specific file from the zip file to the destination path. * If destination path is invalid, then this method throws an exception. *

* If fileHeader is a directory, this method extracts all files under this directory * * @param fileHeader file header corresponding to the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @throws ZipException when an issue occurs during extraction */ public void extractFile(FileHeader fileHeader, String destinationPath) throws ZipException { extractFile(fileHeader, destinationPath, null, new UnzipParameters()); } /** * Extracts a specific file from the zip file to the destination path. * If destination path is invalid, then this method throws an exception. *

* If fileHeader is a directory, this method extracts all files under this directory * * @param fileHeader file header corresponding to the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @param unzipParameters any parameters that have to be considered during extraction * @throws ZipException when an issue occurs during extraction */ public void extractFile(FileHeader fileHeader, String destinationPath, UnzipParameters unzipParameters) throws ZipException { extractFile(fileHeader, destinationPath, null, unzipParameters); } /** * Extracts a specific file from the zip file to the destination path. * If destination path is invalid, then this method throws an exception. *

* If newFileName is not null or empty, newly created file name will be replaced by * the value in newFileName. If this value is null, then the file name will be the * value in FileHeader.getFileName. If file being extract is a directory, the directory name * will be replaced with the newFileName *

* If fileHeader is a directory, this method extracts all files under this directory. *

* Any parameters that have to be considered during extraction can be passed in through unzipParameters * * @param fileHeader file header corresponding to the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @param newFileName if not null, this will be the name given to the file upon extraction * @param unzipParameters any parameters that have to be considered during extraction * @throws ZipException when an issue occurs during extraction */ public void extractFile(FileHeader fileHeader, String destinationPath, String newFileName, UnzipParameters unzipParameters) throws ZipException { if (fileHeader == null) { throw new ZipException("input file header is null, cannot extract file"); } extractFile(fileHeader.getFileName(), destinationPath, newFileName, unzipParameters); } /** * Extracts a specific file from the zip file to the destination path. * This method first finds the necessary file header from the input file name. *

* File name is relative file name in the zip file. For example if a zip file contains * a file "a.txt", then to extract this file, input file name has to be "a.txt". Another * example is if there is a file "b.txt" in a folder "abc" in the zip file, then the * input file name has to be abc/b.txt *

* If fileHeader is a directory, this method extracts all files under this directory. *

* Throws an exception of type {@link ZipException.Type#FILE_NOT_FOUND} if file header could not be found for the given file name. * Throws an exception if the destination path is invalid. * * @param fileName name of the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @throws ZipException when an issue occurs during extraction */ public void extractFile(String fileName, String destinationPath) throws ZipException { extractFile(fileName, destinationPath, null, new UnzipParameters()); } /** * Extracts a specific file from the zip file to the destination path. * This method first finds the necessary file header from the input file name. *

* File name is relative file name in the zip file. For example if a zip file contains * a file "a.txt", then to extract this file, input file name has to be "a.txt". Another * example is if there is a file "b.txt" in a folder "abc" in the zip file, then the * input file name has to be abc/b.txt *

* If fileHeader is a directory, this method extracts all files under this directory. *

* Any parameters that have to be considered during extraction can be passed in through unzipParameters *

* Throws an exception of type {@link ZipException.Type#FILE_NOT_FOUND} if file header could not be found for the given file name. * Throws an exception if the destination path is invalid. * * @param fileName name of the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @param unzipParameters any parameters that have to be considered during extraction * @throws ZipException when an issue occurs during extraction */ public void extractFile(String fileName, String destinationPath, UnzipParameters unzipParameters) throws ZipException { extractFile(fileName, destinationPath, null, unzipParameters); } /** * Extracts a specific file from the zip file to the destination path. * This method first finds the necessary file header from the input file name. *

* File name is relative file name in the zip file. For example if a zip file contains * a file "a.txt", then to extract this file, input file name has to be "a.txt". Another * example is if there is a file "b.txt" in a folder "abc" in the zip file, then the * input file name has to be abc/b.txt *

* If newFileName is not null or empty, newly created file name will be replaced by * the value in newFileName. If this value is null, then the file name will be the * value in FileHeader.getFileName. If file being extract is a directory, the directory name * will be replaced with the newFileName *

* If fileHeader is a directory, this method extracts all files under this directory. *

* Throws an exception of type {@link ZipException.Type#FILE_NOT_FOUND} if file header could not be found for the given file name. * Throws an exception if the destination path is invalid. * * @param fileName name of the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @param newFileName if not null, this will be the name given to the file upon extraction * @throws ZipException when an issue occurs during extraction */ public void extractFile(String fileName, String destinationPath, String newFileName) throws ZipException { extractFile(fileName, destinationPath, newFileName, new UnzipParameters()); } /** * Extracts a specific file from the zip file to the destination path. * If destination path is invalid, then this method throws an exception. *

* If newFileName is not null or empty, newly created file name will be replaced by * the value in newFileName. If this value is null, then the file name will be the * value in FileHeader.getFileName. If file being extract is a directory, the directory name * will be replaced with the newFileName *

* If fileHeader is a directory, this method extracts all files under this directory. * * @param fileHeader file header corresponding to the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @param newFileName if not null, this will be the name given to the file upon extraction * @throws ZipException when an issue occurs during extraction */ public void extractFile(FileHeader fileHeader, String destinationPath, String newFileName) throws ZipException { extractFile(fileHeader, destinationPath, newFileName, new UnzipParameters()); } /** * Extracts a specific file from the zip file to the destination path. * This method first finds the necessary file header from the input file name. *

* File name is relative file name in the zip file. For example if a zip file contains * a file "a.txt", then to extract this file, input file name has to be "a.txt". Another * example is if there is a file "b.txt" in a folder "abc" in the zip file, then the * input file name has to be abc/b.txt *

* If newFileName is not null or empty, newly created file name will be replaced by * the value in newFileName. If this value is null, then the file name will be the * value in FileHeader.getFileName. If file being extract is a directory, the directory name * will be replaced with the newFileName *

* If fileHeader is a directory, this method extracts all files under this directory. *

* Any parameters that have to be considered during extraction can be passed in through unzipParameters *

* Throws an exception of type {@link ZipException.Type#FILE_NOT_FOUND} if file header could not be found for the * given file name. * Throws an exception if the destination path is invalid. * * @param fileName name of the entry which has to be extracted * @param destinationPath path to which the entries of the zip are to be extracted * @param newFileName if not null, this will be the name given to the file upon extraction * @param unzipParameters any parameters that have to be considered during extraction * @throws ZipException when an issue occurs during extraction */ public void extractFile(String fileName, String destinationPath, String newFileName, UnzipParameters unzipParameters) throws ZipException { if (!isStringNotNullAndNotEmpty(fileName)) { throw new ZipException("file to extract is null or empty, cannot extract file"); } if (!isStringNotNullAndNotEmpty(destinationPath)) { throw new ZipException("destination path is empty or null, cannot extract file"); } if (unzipParameters == null) { unzipParameters = new UnzipParameters(); } readZipInfo(); new ExtractFileTask(zipModel, password, unzipParameters, buildAsyncParameters()).execute( new ExtractFileTaskParameters(destinationPath, fileName, newFileName, buildConfig())); } /** * Returns the list of file headers in the zip file. Returns an empty list if the zip file does not exist. * * @return list of file headers * @throws ZipException */ public List getFileHeaders() throws ZipException { readZipInfo(); if (zipModel == null || zipModel.getCentralDirectory() == null) { return Collections.emptyList(); } return zipModel.getCentralDirectory().getFileHeaders(); } /** * Returns FileHeader if a file header with the given fileHeader * string exists in the zip model: If not returns null * * @param fileName * @return FileHeader * @throws ZipException */ public FileHeader getFileHeader(String fileName) throws ZipException { if (!isStringNotNullAndNotEmpty(fileName)) { throw new ZipException("input file name is emtpy or null, cannot get FileHeader"); } readZipInfo(); if (zipModel == null || zipModel.getCentralDirectory() == null) { return null; } return HeaderUtil.getFileHeader(zipModel, fileName); } /** * Checks to see if the zip file is encrypted * * @return true if encrypted, false if not * @throws ZipException */ public boolean isEncrypted() throws ZipException { if (zipModel == null) { readZipInfo(); if (zipModel == null) { throw new ZipException("Zip Model is null"); } } if (zipModel.getCentralDirectory() == null || zipModel.getCentralDirectory().getFileHeaders() == null) { throw new ZipException("invalid zip file"); } for (FileHeader fileHeader : zipModel.getCentralDirectory().getFileHeaders()) { if (fileHeader != null) { if (fileHeader.isEncrypted()) { isEncrypted = true; break; } } } return isEncrypted; } /** * Checks if the zip file is a split archive * * @return true if split archive, false if not * @throws ZipException */ public boolean isSplitArchive() throws ZipException { if (zipModel == null) { readZipInfo(); if (zipModel == null) { throw new ZipException("Zip Model is null"); } } return zipModel.isSplitArchive(); } /** * Removes the file provided in the input file header from the zip file. * * If zip file is a split zip file, then this method throws an exception as * zip specification does not allow for updating split zip archives. * * If this file header is a directory, all files and directories * under this directory will be removed as well. * * @param fileHeader * @throws ZipException */ public void removeFile(FileHeader fileHeader) throws ZipException { if (fileHeader == null) { throw new ZipException("input file header is null, cannot remove file"); } removeFile(fileHeader.getFileName()); } /** * Removes the file provided in the input parameters from the zip file. * This method first finds the file header and then removes the file. * * If file does not exist, then this method throws an exception. * * If zip file is a split zip file, then this method throws an exception as * zip specification does not allow for updating split zip archives. * * If the entry representing this file name is a directory, all files and directories * under this directory will be removed as well. * * @param fileName * @throws ZipException */ public void removeFile(String fileName) throws ZipException { if (!isStringNotNullAndNotEmpty(fileName)) { throw new ZipException("file name is empty or null, cannot remove file"); } removeFiles(Collections.singletonList(fileName)); } /** * Removes all files from the zip file that match the names in the input list. * * If any of the file is a directory, all the files and directories under this directory * will be removed as well * * If zip file is a split zip file, then this method throws an exception as * zip specification does not allow for updating split zip archives. * * @param fileNames * @throws ZipException */ public void removeFiles(List fileNames) throws ZipException { if (fileNames == null) { throw new ZipException("fileNames list is null"); } if (fileNames.isEmpty()) { return; } if (zipModel == null) { readZipInfo(); } if (zipModel.isSplitArchive()) { throw new ZipException("Zip file format does not allow updating split/spanned files"); } new RemoveFilesFromZipTask(zipModel, headerWriter, buildAsyncParameters()).execute( new RemoveFilesFromZipTaskParameters(fileNames, buildConfig())); } /** * Renames file name of the entry represented by file header. If the file name in the input file header does not * match any entry in the zip file, the zip file will not be modified. * * If the file header is a folder in the zip file, all sub-files and sub-folders in the zip file will also be renamed. * * Zip file format does not allow modifying a split zip file. Therefore if the zip file being dealt with is a split * zip file, this method throws an exception * * @param fileHeader file header to be changed * @param newFileName the file name that has to be changed to * @throws ZipException if fileHeader is null or newFileName is null or empty or if the zip file is a split file */ public void renameFile(FileHeader fileHeader, String newFileName) throws ZipException { if (fileHeader == null) { throw new ZipException("File header is null"); } renameFile(fileHeader.getFileName(), newFileName); } /** * Renames file name of the entry represented by input fileNameToRename. If there is no entry in the zip file matching * the file name as in fileNameToRename, the zip file will not be modified. * * If the entry with fileNameToRename is a folder in the zip file, all sub-files and sub-folders in the zip file will * also be renamed. For a folder, the fileNameToRename has to end with zip file separator "/". For example, if a * folder name "some-folder-name" has to be modified to "new-folder-name", then value of fileNameToRename should be * "some-folder-name/". If newFileName does not end with a separator, zip4j will add a separator. * * Zip file format does not allow modifying a split zip file. Therefore if the zip file being dealt with is a split * zip file, this method throws an exception * * @param fileNameToRename file name in the zip that has to be renamed * @param newFileName the file name that has to be changed to * @throws ZipException if fileNameToRename is empty or newFileName is empty or if the zip file is a split file */ public void renameFile(String fileNameToRename, String newFileName) throws ZipException { if (!Zip4jUtil.isStringNotNullAndNotEmpty(fileNameToRename)) { throw new ZipException("file name to be changed is null or empty"); } if (!Zip4jUtil.isStringNotNullAndNotEmpty(newFileName)) { throw new ZipException("newFileName is null or empty"); } renameFiles(Collections.singletonMap(fileNameToRename, newFileName)); } /** * Renames all the entries in the zip file that match the keys in the map to their corresponding values in the map. If * there are no entries matching any of the keys from the map, the zip file is not modified. * * If any of the entry in the map represents a folder, all files and folders will be renamed so that their parent * represents the renamed folder. * * Zip file format does not allow modifying a split zip file. Therefore if the zip file being dealt with is a split * zip file, this method throws an exception * * @param fileNamesMap map of file names that have to be changed with values in the map being the name to be changed to * @throws ZipException if map is null or if the zip file is a split file */ public void renameFiles(Map fileNamesMap) throws ZipException { if (fileNamesMap == null) { throw new ZipException("fileNamesMap is null"); } if (fileNamesMap.size() == 0) { return; } readZipInfo(); if (zipModel.isSplitArchive()) { throw new ZipException("Zip file format does not allow updating split/spanned files"); } AsyncZipTask.AsyncTaskParameters asyncTaskParameters = buildAsyncParameters(); new RenameFilesTask(zipModel, headerWriter, new RawIO(), asyncTaskParameters).execute( new RenameFilesTaskParameters(fileNamesMap, buildConfig())); } /** * Merges split zip files into a single zip file without the need to extract the * files in the archive * * @param outputZipFile * @throws ZipException */ public void mergeSplitFiles(File outputZipFile) throws ZipException { if (outputZipFile == null) { throw new ZipException("outputZipFile is null, cannot merge split files"); } if (outputZipFile.exists()) { throw new ZipException("output Zip File already exists"); } readZipInfo(); if (this.zipModel == null) { throw new ZipException("zip model is null, corrupt zip file?"); } new MergeSplitZipFileTask(zipModel, buildAsyncParameters()).execute( new MergeSplitZipFileTaskParameters(outputZipFile, buildConfig())); } /** * Sets comment for the Zip file * * @param comment * @throws ZipException */ public void setComment(String comment) throws ZipException { if (comment == null) { throw new ZipException("input comment is null, cannot update zip file"); } if (!zipFile.exists()) { throw new ZipException("zip file does not exist, cannot set comment for zip file"); } readZipInfo(); if (zipModel == null) { throw new ZipException("zipModel is null, cannot update zip file"); } if (zipModel.getEndOfCentralDirectoryRecord() == null) { throw new ZipException("end of central directory is null, cannot set comment"); } new SetCommentTask(zipModel, buildAsyncParameters()).execute( new SetCommentTaskTaskParameters(comment, buildConfig())); } /** * Returns the comment set for the Zip file * * @return String * @throws ZipException */ public String getComment() throws ZipException { if (!zipFile.exists()) { throw new ZipException("zip file does not exist, cannot read comment"); } readZipInfo(); if (zipModel == null) { throw new ZipException("zip model is null, cannot read comment"); } if (zipModel.getEndOfCentralDirectoryRecord() == null) { throw new ZipException("end of central directory record is null, cannot read comment"); } return zipModel.getEndOfCentralDirectoryRecord().getComment(); } /** * Returns an input stream for reading the contents of the Zip file corresponding * to the input FileHeader. Throws an exception if the FileHeader does not exist * in the ZipFile * * @param fileHeader * @return ZipInputStream * @throws ZipException */ public ZipInputStream getInputStream(FileHeader fileHeader) throws IOException { if (fileHeader == null) { throw new ZipException("FileHeader is null, cannot get InputStream"); } readZipInfo(); if (zipModel == null) { throw new ZipException("zip model is null, cannot get inputstream"); } ZipInputStream zipInputStream = createZipInputStream(zipModel, fileHeader, password); openInputStreams.add(zipInputStream); return zipInputStream; } /** * Checks to see if the input zip file is a valid zip file. This method * will try to read zip headers. If headers are read successfully, this * method returns true else false. * * Since v2.7.0: if the zip file is a split zip file, this method also checks to see if * all the split files of the zip exists. * * @return boolean - true if a valid zip file, i.e, zip4j is able to read the * zip headers, and in case of a split zip file, all split files of the zip exists; false otherwise * * @since 1.2.3 */ public boolean isValidZipFile() { if (!zipFile.exists()) { return false; } try { readZipInfo(); if (zipModel.isSplitArchive() && !verifyAllSplitFilesOfZipExists(getSplitZipFiles())) { return false; } return true; } catch (Exception e) { return false; } } /** * Returns the full file path+names of all split zip files * in an ArrayList. For example: If a split zip file(abc.zip) has a 10 split parts * this method returns an array list with path + "abc.z01", path + "abc.z02", etc. * Returns null if the zip file does not exist * * @return List of Split zip Files * @throws ZipException */ public List getSplitZipFiles() throws ZipException { readZipInfo(); return FileUtils.getSplitZipFiles(zipModel); } /** * Closes any open streams that were open by an instance of this class. * * @throws IOException when the underlying input stream throws an exception when trying to close it */ @Override public void close() throws IOException { for (InputStream inputStream : openInputStreams) { inputStream.close(); } openInputStreams.clear(); } /** * Sets a password to be used for the zip file. Will override if a password supplied via ZipFile constructor * @param password - char array of the password to be used */ public void setPassword(char[] password) { this.password = password; } /** * Returns the size of the buffer used to read streams * * @return size of the buffer used to read streams */ public int getBufferSize() { return bufferSize; } /** * Sets the size of buffer that should be used when reading streams. This size cannot be less than the value defined * in InternalZipConstants.MIN_BUFF_SIZE * * @param bufferSize size of the buffer that should be used when reading streams * @throws IllegalArgumentException if bufferSize is less than value configured in InternalZipConstants.MIN_BUFF_SIZE */ public void setBufferSize(int bufferSize) { if (bufferSize < MIN_BUFF_SIZE) { throw new IllegalArgumentException("Buffer size cannot be less than " + MIN_BUFF_SIZE + " bytes"); } this.bufferSize = bufferSize; } /** * Reads the zip header information for this zip file. If the zip file * does not exist, it creates an empty zip model.

* Note: This method does not read local file header information * * @throws ZipException */ private void readZipInfo() throws ZipException { if (zipModel != null) { return; } if (!zipFile.exists()) { createNewZipModel(); return; } if (!zipFile.canRead()) { throw new ZipException("no read access for the input zip file"); } try (RandomAccessFile randomAccessFile = initializeRandomAccessFileForHeaderReading()) { HeaderReader headerReader = new HeaderReader(); zipModel = headerReader.readAllHeaders(randomAccessFile, buildConfig()); zipModel.setZipFile(zipFile); } catch (ZipException e) { throw e; } catch (IOException e) { throw new ZipException(e); } } private void createNewZipModel() { zipModel = new ZipModel(); zipModel.setZipFile(zipFile); } private RandomAccessFile initializeRandomAccessFileForHeaderReading() throws IOException { if (isNumberedSplitFile(zipFile)) { File[] allSplitFiles = FileUtils.getAllSortedNumberedSplitFiles(zipFile); NumberedSplitRandomAccessFile numberedSplitRandomAccessFile = new NumberedSplitRandomAccessFile(zipFile, RandomAccessFileMode.READ.getValue(), allSplitFiles); numberedSplitRandomAccessFile.openLastSplitFileForReading(); return numberedSplitRandomAccessFile; } return new RandomAccessFile(zipFile, RandomAccessFileMode.READ.getValue()); } private AsyncZipTask.AsyncTaskParameters buildAsyncParameters() { if (runInThread) { if (threadFactory == null) { threadFactory = Executors.defaultThreadFactory(); } executorService = Executors.newSingleThreadExecutor(threadFactory); } return new AsyncZipTask.AsyncTaskParameters(executorService, runInThread, progressMonitor); } private boolean verifyAllSplitFilesOfZipExists(List allSplitFiles) { for (File splitFile : allSplitFiles) { if (!splitFile.exists()) { return false; } } return true; } public ProgressMonitor getProgressMonitor() { return progressMonitor; } public boolean isRunInThread() { return runInThread; } public void setRunInThread(boolean runInThread) { this.runInThread = runInThread; } public File getFile() { return zipFile; } /** * Returns user defined charset that was set by setCharset() method. If no charset was explicitly defined * (by calling setCharset()), this method returns the default charset which zip4j uses, which is utf-8. * * @return user-defined charset or utf-8 if no charset explicitly set */ public Charset getCharset() { if (charset == null) { return CHARSET_UTF_8; } return charset; } /** * Sets the charset to be used for encoding file names and comments * * @param charset charset to use to encode file names and comments * @throws IllegalArgumentException if charset is null */ public void setCharset(Charset charset) throws IllegalArgumentException { if(charset == null) { throw new IllegalArgumentException("charset cannot be null"); } this.charset = charset; } public void setThreadFactory(ThreadFactory threadFactory) { this.threadFactory = threadFactory; } public ExecutorService getExecutorService() { return executorService; } @Override public String toString() { return zipFile.toString(); } private Zip4jConfig buildConfig() { return new Zip4jConfig(charset, bufferSize); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/000077500000000000000000000000001414265447200220055ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/AESDecrypter.java000077500000000000000000000062771414265447200251610ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto; import net.lingala.zip4j.crypto.PBKDF2.MacBasedPRF; import net.lingala.zip4j.crypto.engine.AESEngine; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.enums.AesKeyStrength; import java.util.Arrays; import static net.lingala.zip4j.crypto.AesCipherUtil.prepareBuffAESIVBytes; import static net.lingala.zip4j.exception.ZipException.Type.WRONG_PASSWORD; import static net.lingala.zip4j.util.InternalZipConstants.AES_BLOCK_SIZE; /** * AES Decrypter supports AE-1 and AE-2 decryption for AES-CTR with 128, 192, or 256 Key Strength */ public class AESDecrypter implements Decrypter { private AESEngine aesEngine; private MacBasedPRF mac; private int nonce = 1; private byte[] iv; private byte[] counterBlock; public AESDecrypter(AESExtraDataRecord aesExtraDataRecord, char[] password, byte[] salt, byte[] passwordVerifier) throws ZipException { iv = new byte[AES_BLOCK_SIZE]; counterBlock = new byte[AES_BLOCK_SIZE]; init(salt, passwordVerifier, password, aesExtraDataRecord); } private void init(byte[] salt, byte[] passwordVerifier, char[] password, AESExtraDataRecord aesExtraDataRecord) throws ZipException { if (password == null || password.length <= 0) { throw new ZipException("empty or null password provided for AES decryption", WRONG_PASSWORD); } final AesKeyStrength aesKeyStrength = aesExtraDataRecord.getAesKeyStrength(); final byte[] derivedKey = AesCipherUtil.derivePasswordBasedKey(salt, password, aesKeyStrength); final byte[] derivedPasswordVerifier = AesCipherUtil.derivePasswordVerifier(derivedKey, aesKeyStrength); if (!Arrays.equals(passwordVerifier, derivedPasswordVerifier)) { throw new ZipException("Wrong Password", ZipException.Type.WRONG_PASSWORD); } aesEngine = AesCipherUtil.getAESEngine(derivedKey, aesKeyStrength); mac = AesCipherUtil.getMacBasedPRF(derivedKey, aesKeyStrength); } @Override public int decryptData(byte[] buff, int start, int len) throws ZipException { for (int j = start; j < (start + len); j += AES_BLOCK_SIZE) { int loopCount = (j + AES_BLOCK_SIZE <= (start + len)) ? AES_BLOCK_SIZE : ((start + len) - j); mac.update(buff, j, loopCount); prepareBuffAESIVBytes(iv, nonce); aesEngine.processBlock(iv, counterBlock); for (int k = 0; k < loopCount; k++) { buff[j + k] = (byte) (buff[j + k] ^ counterBlock[k]); } nonce++; } return len; } public byte[] getCalculatedAuthenticationBytes() { return mac.doFinal(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/AESEncrypter.java000066400000000000000000000114361414265447200251610ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto; import net.lingala.zip4j.crypto.PBKDF2.MacBasedPRF; import net.lingala.zip4j.crypto.engine.AESEngine; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.enums.AesKeyStrength; import java.security.SecureRandom; import static net.lingala.zip4j.crypto.AesCipherUtil.derivePasswordBasedKey; import static net.lingala.zip4j.crypto.AesCipherUtil.derivePasswordVerifier; import static net.lingala.zip4j.crypto.AesCipherUtil.getAESEngine; import static net.lingala.zip4j.crypto.AesCipherUtil.getMacBasedPRF; import static net.lingala.zip4j.crypto.AesCipherUtil.prepareBuffAESIVBytes; import static net.lingala.zip4j.util.InternalZipConstants.AES_BLOCK_SIZE; /** * AES Encrypter supports AE-1 and AE-2 encryption using AES-CTR with either 128 or 256 Key Strength */ public class AESEncrypter implements Encrypter { private AESEngine aesEngine; private MacBasedPRF mac; private final SecureRandom random = new SecureRandom(); private boolean finished; private int nonce = 1; private int loopCount = 0; private final byte[] iv; private final byte[] counterBlock; private byte[] derivedPasswordVerifier; private byte[] saltBytes; public AESEncrypter(char[] password, AesKeyStrength aesKeyStrength) throws ZipException { if (password == null || password.length == 0) { throw new ZipException("input password is empty or null"); } if (aesKeyStrength != AesKeyStrength.KEY_STRENGTH_128 && aesKeyStrength != AesKeyStrength.KEY_STRENGTH_256) { throw new ZipException("Invalid AES key strength"); } this.finished = false; counterBlock = new byte[AES_BLOCK_SIZE]; iv = new byte[AES_BLOCK_SIZE]; init(password, aesKeyStrength); } private void init(char[] password, AesKeyStrength aesKeyStrength) throws ZipException { saltBytes = generateSalt(aesKeyStrength.getSaltLength()); byte[] derivedKey = derivePasswordBasedKey(saltBytes, password, aesKeyStrength); derivedPasswordVerifier = derivePasswordVerifier(derivedKey, aesKeyStrength); aesEngine = getAESEngine(derivedKey, aesKeyStrength); mac = getMacBasedPRF(derivedKey, aesKeyStrength); } public int encryptData(byte[] buff) throws ZipException { if (buff == null) { throw new ZipException("input bytes are null, cannot perform AES encryption"); } return encryptData(buff, 0, buff.length); } public int encryptData(byte[] buff, int start, int len) throws ZipException { if (finished) { // A non 16 byte block has already been passed to encrypter // non 16 byte block should be the last block of compressed data in AES encryption // any more encryption will lead to corruption of data throw new ZipException("AES Encrypter is in finished state (A non 16 byte block has already been passed to encrypter)"); } if (len % 16 != 0) { this.finished = true; } for (int j = start; j < (start + len); j += AES_BLOCK_SIZE) { loopCount = (j + AES_BLOCK_SIZE <= (start + len)) ? AES_BLOCK_SIZE : ((start + len) - j); prepareBuffAESIVBytes(iv, nonce); aesEngine.processBlock(iv, counterBlock); for (int k = 0; k < loopCount; k++) { buff[j + k] = (byte) (buff[j + k] ^ counterBlock[k]); } mac.update(buff, j, loopCount); nonce++; } return len; } private byte[] generateSalt(int size) throws ZipException { if (size != 8 && size != 16) { throw new ZipException("invalid salt size, cannot generate salt"); } int rounds; if (size == 8) { rounds = 2; } else { rounds = 4; } byte[] salt = new byte[size]; for (int j = 0; j < rounds; j++) { int i = random.nextInt(); salt[j * 4] = (byte) (i >> 24); salt[1 + j * 4] = (byte) (i >> 16); salt[2 + j * 4] = (byte) (i >> 8); salt[3 + j * 4] = (byte) i; } return salt; } public byte[] getFinalMac() { byte[] rawMacBytes = mac.doFinal(); byte[] macBytes = new byte[10]; System.arraycopy(rawMacBytes, 0, macBytes, 0, 10); return macBytes; } public byte[] getDerivedPasswordVerifier() { return derivedPasswordVerifier; } public byte[] getSaltBytes() { return saltBytes; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/AesCipherUtil.java000066400000000000000000000102451414265447200253530ustar00rootroot00000000000000package net.lingala.zip4j.crypto; import net.lingala.zip4j.crypto.PBKDF2.MacBasedPRF; import net.lingala.zip4j.crypto.PBKDF2.PBKDF2Engine; import net.lingala.zip4j.crypto.PBKDF2.PBKDF2Parameters; import net.lingala.zip4j.crypto.engine.AESEngine; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.enums.AesKeyStrength; import static net.lingala.zip4j.util.InternalZipConstants.AES_HASH_CHARSET; import static net.lingala.zip4j.util.InternalZipConstants.AES_HASH_ITERATIONS; import static net.lingala.zip4j.util.InternalZipConstants.AES_MAC_ALGORITHM; import static net.lingala.zip4j.util.InternalZipConstants.AES_PASSWORD_VERIFIER_LENGTH; public class AesCipherUtil { private static final int START_INDEX = 0; /** * Derive Password-Based Key for AES according to AE-1 and AE-2 Specifications * * @param salt Salt used for PBKDF2 * @param password Password used for PBKDF2 containing characters matching ISO-8859-1 character set * @param aesKeyStrength Requested AES Key and MAC Strength * @return Derived Password-Based Key * @throws ZipException Thrown when Derived Key is not valid */ public static byte[] derivePasswordBasedKey(final byte[] salt, final char[] password, final AesKeyStrength aesKeyStrength) throws ZipException { final PBKDF2Parameters parameters = new PBKDF2Parameters(AES_MAC_ALGORITHM, AES_HASH_CHARSET, salt, AES_HASH_ITERATIONS); final PBKDF2Engine engine = new PBKDF2Engine(parameters); final int keyLength = aesKeyStrength.getKeyLength(); final int macLength = aesKeyStrength.getMacLength(); final int derivedKeyLength = keyLength + macLength + AES_PASSWORD_VERIFIER_LENGTH; final byte[] derivedKey = engine.deriveKey(password, derivedKeyLength); if (derivedKey != null && derivedKey.length == derivedKeyLength) { return derivedKey; } else { final String message = String.format("Derived Key invalid for Key Length [%d] MAC Length [%d]", keyLength, macLength); throw new ZipException(message); } } /** * Derive Password Verifier using Derived Key and requested AES Key Strength * * @param derivedKey Derived Key * @param aesKeyStrength AES Key Strength * @return Derived Password Verifier */ public static byte[] derivePasswordVerifier(final byte[] derivedKey, final AesKeyStrength aesKeyStrength) { byte[] derivedPasswordVerifier = new byte[AES_PASSWORD_VERIFIER_LENGTH]; final int keyMacLength = aesKeyStrength.getKeyLength() + aesKeyStrength.getMacLength(); System.arraycopy(derivedKey, keyMacLength, derivedPasswordVerifier, START_INDEX, AES_PASSWORD_VERIFIER_LENGTH); return derivedPasswordVerifier; } /** * Get MAC-Based PRF using default HMAC Algorithm defined in AE-1 and AE-2 Specification * * @param derivedKey Derived Key * @param aesKeyStrength AES Key Strength * @return Initialized MAC-Based PRF */ public static MacBasedPRF getMacBasedPRF(final byte[] derivedKey, final AesKeyStrength aesKeyStrength) { final int macLength = aesKeyStrength.getMacLength(); final byte[] macKey = new byte[macLength]; System.arraycopy(derivedKey, aesKeyStrength.getKeyLength(), macKey, START_INDEX, macLength); final MacBasedPRF macBasedPRF = new MacBasedPRF(AES_MAC_ALGORITHM); macBasedPRF.init(macKey); return macBasedPRF; } /** * Get AES Engine using derived key and requested AES Key Strength * * @param derivedKey Derived Key * @param aesKeyStrength AES Key Strength * @return AES Engine configured with AES Key * @throws ZipException Thrown on AESEngine initialization failures */ public static AESEngine getAESEngine(final byte[] derivedKey, final AesKeyStrength aesKeyStrength) throws ZipException { final int keyLength = aesKeyStrength.getKeyLength(); final byte[] aesKey = new byte[keyLength]; System.arraycopy(derivedKey, START_INDEX, aesKey, START_INDEX, keyLength); return new AESEngine(aesKey); } public static void prepareBuffAESIVBytes(byte[] buff, int nonce) { buff[0] = (byte) nonce; buff[1] = (byte) (nonce >> 8); buff[2] = (byte) (nonce >> 16); buff[3] = (byte) (nonce >> 24); for (int i = 4; i <= 15; i++) { buff[i] = 0; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/Decrypter.java000077500000000000000000000014621414265447200246170ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto; import net.lingala.zip4j.exception.ZipException; public interface Decrypter { int decryptData(byte[] buff, int start, int len) throws ZipException; } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/Encrypter.java000077500000000000000000000015511414265447200246300ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto; import net.lingala.zip4j.exception.ZipException; public interface Encrypter { int encryptData(byte[] buff) throws ZipException; int encryptData(byte[] buff, int start, int len) throws ZipException; } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/000077500000000000000000000000001414265447200227155ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/BinTools.java000077500000000000000000000040401414265447200253120ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.PBKDF2; /* * Source referred from Matthias Gartner's PKCS#5 implementation - * see http://rtner.de/software/PBKDF2.html */ class BinTools { public static final String hex = "0123456789ABCDEF"; public static String bin2hex(final byte[] b) { if (b == null) { return ""; } StringBuffer sb = new StringBuffer(2 * b.length); for (int i = 0; i < b.length; i++) { int v = (256 + b[i]) % 256; sb.append(hex.charAt((v / 16) & 15)); sb.append(hex.charAt((v % 16) & 15)); } return sb.toString(); } public static byte[] hex2bin(final String s) { String m = s; if (s == null) { // Allow empty input string. m = ""; } else if (s.length() % 2 != 0) { // Assume leading zero for odd string length m = "0" + s; } byte r[] = new byte[m.length() / 2]; for (int i = 0, n = 0; i < m.length(); n++) { char h = m.charAt(i++); char l = m.charAt(i++); r[n] = (byte) (hex2bin(h) * 16 + hex2bin(l)); } return r; } public static int hex2bin(char c) { if (c >= '0' && c <= '9') { return (c - '0'); } if (c >= 'A' && c <= 'F') { return (c - 'A' + 10); } if (c >= 'a' && c <= 'f') { return (c - 'a' + 10); } throw new IllegalArgumentException("Input string may only contain hex digits, but found '" + c + "'"); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/MacBasedPRF.java000077500000000000000000000040141414265447200255710ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.PBKDF2; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /* * Source referred from Matthias Gartner's PKCS#5 implementation - * see http://rtner.de/software/PBKDF2.html */ public class MacBasedPRF implements PRF { private Mac mac; private int hLen; private String macAlgorithm; public MacBasedPRF(String macAlgorithm) { this.macAlgorithm = macAlgorithm; try { mac = Mac.getInstance(macAlgorithm); hLen = mac.getMacLength(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } public byte[] doFinal(byte[] M) { return mac.doFinal(M); } public byte[] doFinal() { return mac.doFinal(); } public int getHLen() { return hLen; } public void init(byte[] P) { try { mac.init(new SecretKeySpec(P, macAlgorithm)); } catch (InvalidKeyException e) { throw new RuntimeException(e); } } public void update(byte[] U) { try { mac.update(U); } catch (IllegalStateException e) { throw new RuntimeException(e); } } public void update(byte[] U, int start, int len) { try { mac.update(U, start, len); } catch (IllegalStateException e) { throw new RuntimeException(e); } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine.java000077500000000000000000000101741414265447200256240ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.PBKDF2; import static net.lingala.zip4j.util.Zip4jUtil.convertCharArrayToByteArray; /* * Source referred from Matthias Gartner's PKCS#5 implementation - * see http://rtner.de/software/PBKDF2.html */ public class PBKDF2Engine { private PBKDF2Parameters parameters; private PRF prf; public PBKDF2Engine(PBKDF2Parameters parameters) { this(parameters, null); } public PBKDF2Engine(PBKDF2Parameters parameters, PRF prf) { this.parameters = parameters; this.prf = prf; } public byte[] deriveKey(char[] inputPassword) { return deriveKey(inputPassword, 0); } public byte[] deriveKey(char[] inputPassword, int dkLen) { byte p[]; if (inputPassword == null) { throw new NullPointerException(); } p = convertCharArrayToByteArray(inputPassword); assertPRF(p); if (dkLen == 0) { dkLen = prf.getHLen(); } return PBKDF2(prf, parameters.getSalt(), parameters.getIterationCount(), dkLen); } public boolean verifyKey(char[] inputPassword) { byte[] referenceKey = getParameters().getDerivedKey(); if (referenceKey == null || referenceKey.length == 0) { return false; } byte[] inputKey = deriveKey(inputPassword, referenceKey.length); if (inputKey == null || inputKey.length != referenceKey.length) { return false; } for (int i = 0; i < inputKey.length; i++) { if (inputKey[i] != referenceKey[i]) { return false; } } return true; } private void assertPRF(byte[] P) { if (prf == null) { prf = new MacBasedPRF(parameters.getHashAlgorithm()); } prf.init(P); } public PRF getPseudoRandomFunction() { return prf; } private byte[] PBKDF2(PRF prf, byte[] S, int c, int dkLen) { if (S == null) { S = new byte[0]; } int hLen = prf.getHLen(); int l = ceil(dkLen, hLen); int r = dkLen - (l - 1) * hLen; byte T[] = new byte[l * hLen]; int ti_offset = 0; for (int i = 1; i <= l; i++) { _F(T, ti_offset, prf, S, c, i); ti_offset += hLen; } if (r < hLen) { // Incomplete last block byte DK[] = new byte[dkLen]; System.arraycopy(T, 0, DK, 0, dkLen); return DK; } return T; } private int ceil(int a, int b) { int m = 0; if (a % b > 0) { m = 1; } return a / b + m; } private void _F(byte[] dest, int offset, PRF prf, byte[] S, int c, int blockIndex) { int hLen = prf.getHLen(); byte U_r[] = new byte[hLen]; // U0 = S || INT (i); byte U_i[] = new byte[S.length + 4]; System.arraycopy(S, 0, U_i, 0, S.length); INT(U_i, S.length, blockIndex); for (int i = 0; i < c; i++) { U_i = prf.doFinal(U_i); xor(U_r, U_i); } System.arraycopy(U_r, 0, dest, offset, hLen); } private void xor(byte[] dest, byte[] src) { for (int i = 0; i < dest.length; i++) { dest[i] ^= src[i]; } } protected void INT(byte[] dest, int offset, int i) { dest[offset] = (byte) (i / (256 * 256 * 256)); dest[offset + 1] = (byte) (i / (256 * 256)); dest[offset + 2] = (byte) (i / (256)); dest[offset + 3] = (byte) (i); } public PBKDF2Parameters getParameters() { return parameters; } public void setParameters(PBKDF2Parameters parameters) { this.parameters = parameters; } public void setPseudoRandomFunction(PRF prf) { this.prf = prf; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/PBKDF2HexFormatter.java000077500000000000000000000027651414265447200270360ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.PBKDF2; /* * Source referred from Matthias Gartner's PKCS#5 implementation - * see http://rtner.de/software/PBKDF2.html */ class PBKDF2HexFormatter { public boolean fromString(PBKDF2Parameters p, String s) { if (p == null || s == null) { return true; } String[] pSplit = s.split(":"); if (pSplit.length != 3) { return true; } byte salt[] = BinTools.hex2bin(pSplit[0]); int iterationCount = Integer.parseInt(pSplit[1]); byte bDK[] = BinTools.hex2bin(pSplit[2]); p.setSalt(salt); p.setIterationCount(iterationCount); p.setDerivedKey(bDK); return false; } public String toString(PBKDF2Parameters p) { String s = BinTools.bin2hex(p.getSalt()) + ":" + String.valueOf(p.getIterationCount()) + ":" + BinTools.bin2hex(p.getDerivedKey()); return s; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters.java000077500000000000000000000046601414265447200265250ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.PBKDF2; /* * Source referred from Matthias Gartner's PKCS#5 implementation - * see http://rtner.de/software/PBKDF2.html */ public class PBKDF2Parameters { protected byte[] salt; protected int iterationCount; protected String hashAlgorithm; protected String hashCharset; protected byte[] derivedKey; public PBKDF2Parameters() { this.hashAlgorithm = null; this.hashCharset = "UTF-8"; this.salt = null; this.iterationCount = 1000; this.derivedKey = null; } public PBKDF2Parameters(String hashAlgorithm, String hashCharset, byte[] salt, int iterationCount) { this(hashAlgorithm, hashCharset, salt, iterationCount, null); } public PBKDF2Parameters(String hashAlgorithm, String hashCharset, byte[] salt, int iterationCount, byte[] derivedKey) { this.hashAlgorithm = hashAlgorithm; this.hashCharset = hashCharset; this.salt = salt; this.iterationCount = iterationCount; this.derivedKey = derivedKey; } public int getIterationCount() { return iterationCount; } public void setIterationCount(int iterationCount) { this.iterationCount = iterationCount; } public byte[] getSalt() { return salt; } public void setSalt(byte[] salt) { this.salt = salt; } public byte[] getDerivedKey() { return derivedKey; } public void setDerivedKey(byte[] derivedKey) { this.derivedKey = derivedKey; } public String getHashAlgorithm() { return hashAlgorithm; } public void setHashAlgorithm(String hashAlgorithm) { this.hashAlgorithm = hashAlgorithm; } public String getHashCharset() { return hashCharset; } public void setHashCharset(String hashCharset) { this.hashCharset = hashCharset; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/PBKDF2/PRF.java000077500000000000000000000015641414265447200242200ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.PBKDF2; /* * Source referred from Matthias Gartner's PKCS#5 implementation - * see http://rtner.de/software/PBKDF2.html */ interface PRF { void init(byte[] P); byte[] doFinal(byte[] M); int getHLen(); } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/StandardDecrypter.java000077500000000000000000000050321414265447200262750ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto; import net.lingala.zip4j.crypto.engine.ZipCryptoEngine; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.util.InternalZipConstants; import static net.lingala.zip4j.util.InternalZipConstants.STD_DEC_HDR_SIZE; public class StandardDecrypter implements Decrypter { private ZipCryptoEngine zipCryptoEngine; public StandardDecrypter(char[] password, long crc, long lastModifiedFileTime, byte[] headerBytes) throws ZipException { this.zipCryptoEngine = new ZipCryptoEngine(); init(headerBytes, password, lastModifiedFileTime, crc); } public int decryptData(byte[] buff, int start, int len) throws ZipException { if (start < 0 || len < 0) { throw new ZipException("one of the input parameters were null in standard decrypt data"); } for (int i = start; i < start + len; i++) { int val = buff[i] & 0xff; val = (val ^ zipCryptoEngine.decryptByte()) & 0xff; zipCryptoEngine.updateKeys((byte) val); buff[i] = (byte) val; } return len; } private void init(byte[] headerBytes, char[] password, long lastModifiedFileTime, long crc) throws ZipException { if (password == null || password.length <= 0) { throw new ZipException("Wrong password!", ZipException.Type.WRONG_PASSWORD); } zipCryptoEngine.initKeys(password); int result = headerBytes[0]; for (int i = 0; i < STD_DEC_HDR_SIZE; i++) { if (i + 1 == InternalZipConstants.STD_DEC_HDR_SIZE) { byte verificationByte = (byte) (result ^ zipCryptoEngine.decryptByte()); if (verificationByte != (byte) (crc >> 24) && verificationByte != (byte) (lastModifiedFileTime >> 8)) { throw new ZipException("Wrong password!", ZipException.Type.WRONG_PASSWORD); } } zipCryptoEngine.updateKeys((byte) (result ^ zipCryptoEngine.decryptByte())); if (i + 1 != STD_DEC_HDR_SIZE) { result = headerBytes[i + 1]; } } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/StandardEncrypter.java000077500000000000000000000051731414265447200263150ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto; import net.lingala.zip4j.crypto.engine.ZipCryptoEngine; import net.lingala.zip4j.exception.ZipException; import java.security.SecureRandom; import static net.lingala.zip4j.util.InternalZipConstants.STD_DEC_HDR_SIZE; public class StandardEncrypter implements Encrypter { private final ZipCryptoEngine zipCryptoEngine = new ZipCryptoEngine(); private byte[] headerBytes; public StandardEncrypter(char[] password, long key) throws ZipException { init(password, key); } private void init(char[] password, long key) throws ZipException { if (password == null || password.length <= 0) { throw new ZipException("input password is null or empty, cannot initialize standard encrypter"); } zipCryptoEngine.initKeys(password); headerBytes = generateRandomBytes(); // Initialize again since the generated bytes were encrypted. zipCryptoEngine.initKeys(password); headerBytes[STD_DEC_HDR_SIZE - 1] = (byte) ((key >>> 24)); headerBytes[STD_DEC_HDR_SIZE - 2] = (byte) ((key >>> 16)); encryptData(headerBytes); } public int encryptData(byte[] buff) throws ZipException { if (buff == null) { throw new NullPointerException(); } return encryptData(buff, 0, buff.length); } public int encryptData(byte[] buff, int start, int len) throws ZipException { if (len < 0) { throw new ZipException("invalid length specified to decrpyt data"); } for (int i = start; i < start + len; i++) { buff[i] = encryptByte(buff[i]); } return len; } protected byte encryptByte(byte val) { byte temp_val = (byte) (val ^ zipCryptoEngine.decryptByte() & 0xff); zipCryptoEngine.updateKeys(val); return temp_val; } protected byte[] generateRandomBytes() { byte[] buff = new byte[STD_DEC_HDR_SIZE]; SecureRandom random = new SecureRandom(); for (int i = 0; i < buff.length; i++) { buff[i] = encryptByte((byte) random.nextInt(256)); } return buff; } public byte[] getHeaderBytes() { return headerBytes; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/engine/000077500000000000000000000000001414265447200232525ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/engine/AESEngine.java000077500000000000000000000333561414265447200256700ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.engine; import net.lingala.zip4j.exception.ZipException; import static net.lingala.zip4j.util.InternalZipConstants.AES_BLOCK_SIZE; /** * Core Engine for AES Encryption * * @author Srikanth Reddy Lingala */ public class AESEngine { private int rounds; private int[][] workingKey = null; private int C0, C1, C2, C3; public AESEngine(byte[] key) throws ZipException { init(key); } private void init(byte[] key) throws ZipException { workingKey = generateWorkingKey(key); } private int[][] generateWorkingKey(byte[] key) throws ZipException { int kc = key.length / 4; int t; if (((kc != 4) && (kc != 6) && (kc != 8)) || ((kc * 4) != key.length)) { throw new ZipException("invalid key length (not 128/192/256)"); } rounds = kc + 6; int[][] W = new int[rounds + 1][4]; t = 0; int i = 0; while (i < key.length) { W[t >> 2][t & 3] = (key[i] & 0xff) | ((key[i + 1] & 0xff) << 8) | ((key[i + 2] & 0xff) << 16) | (key[i + 3] << 24); i += 4; t++; } int k = (rounds + 1) << 2; for (i = kc; (i < k); i++) { int temp = W[(i - 1) >> 2][(i - 1) & 3]; if ((i % kc) == 0) { temp = subWord(shift(temp, 8)) ^ rcon[(i / kc) - 1]; } else if ((kc > 6) && ((i % kc) == 4)) { temp = subWord(temp); } W[i >> 2][i & 3] = W[(i - kc) >> 2][(i - kc) & 3] ^ temp; } return W; } public int processBlock(byte[] in, byte[] out) throws ZipException { return processBlock(in, 0, out, 0); } public int processBlock(byte[] in, int inOff, byte[] out, int outOff) throws ZipException { if (workingKey == null) { throw new ZipException("AES engine not initialised"); } if ((inOff + (32 / 2)) > in.length) { throw new ZipException("input buffer too short"); } if ((outOff + (32 / 2)) > out.length) { throw new ZipException("output buffer too short"); } stateIn(in, inOff); encryptBlock(workingKey); stateOut(out, outOff); return AES_BLOCK_SIZE; } private void stateIn(byte[] bytes, int off) { int index = off; C0 = (bytes[index++] & 0xff); C0 |= (bytes[index++] & 0xff) << 8; C0 |= (bytes[index++] & 0xff) << 16; C0 |= bytes[index++] << 24; C1 = (bytes[index++] & 0xff); C1 |= (bytes[index++] & 0xff) << 8; C1 |= (bytes[index++] & 0xff) << 16; C1 |= bytes[index++] << 24; C2 = (bytes[index++] & 0xff); C2 |= (bytes[index++] & 0xff) << 8; C2 |= (bytes[index++] & 0xff) << 16; C2 |= bytes[index++] << 24; C3 = (bytes[index++] & 0xff); C3 |= (bytes[index++] & 0xff) << 8; C3 |= (bytes[index++] & 0xff) << 16; C3 |= bytes[index++] << 24; } private void stateOut(byte[] bytes, int off) { int index = off; bytes[index++] = (byte) C0; bytes[index++] = (byte) (C0 >> 8); bytes[index++] = (byte) (C0 >> 16); bytes[index++] = (byte) (C0 >> 24); bytes[index++] = (byte) C1; bytes[index++] = (byte) (C1 >> 8); bytes[index++] = (byte) (C1 >> 16); bytes[index++] = (byte) (C1 >> 24); bytes[index++] = (byte) C2; bytes[index++] = (byte) (C2 >> 8); bytes[index++] = (byte) (C2 >> 16); bytes[index++] = (byte) (C2 >> 24); bytes[index++] = (byte) C3; bytes[index++] = (byte) (C3 >> 8); bytes[index++] = (byte) (C3 >> 16); bytes[index++] = (byte) (C3 >> 24); } private void encryptBlock(int[][] KW) { int r, r0, r1, r2, r3; C0 ^= KW[0][0]; C1 ^= KW[0][1]; C2 ^= KW[0][2]; C3 ^= KW[0][3]; r = 1; while (r < rounds - 1) { r0 = T0[C0 & 255] ^ shift(T0[(C1 >> 8) & 255], 24) ^ shift(T0[(C2 >> 16) & 255], 16) ^ shift(T0[(C3 >> 24) & 255], 8) ^ KW[r][0]; r1 = T0[C1 & 255] ^ shift(T0[(C2 >> 8) & 255], 24) ^ shift(T0[(C3 >> 16) & 255], 16) ^ shift(T0[(C0 >> 24) & 255], 8) ^ KW[r][1]; r2 = T0[C2 & 255] ^ shift(T0[(C3 >> 8) & 255], 24) ^ shift(T0[(C0 >> 16) & 255], 16) ^ shift(T0[(C1 >> 24) & 255], 8) ^ KW[r][2]; r3 = T0[C3 & 255] ^ shift(T0[(C0 >> 8) & 255], 24) ^ shift(T0[(C1 >> 16) & 255], 16) ^ shift(T0[(C2 >> 24) & 255], 8) ^ KW[r++][3]; C0 = T0[r0 & 255] ^ shift(T0[(r1 >> 8) & 255], 24) ^ shift(T0[(r2 >> 16) & 255], 16) ^ shift(T0[(r3 >> 24) & 255], 8) ^ KW[r][0]; C1 = T0[r1 & 255] ^ shift(T0[(r2 >> 8) & 255], 24) ^ shift(T0[(r3 >> 16) & 255], 16) ^ shift(T0[(r0 >> 24) & 255], 8) ^ KW[r][1]; C2 = T0[r2 & 255] ^ shift(T0[(r3 >> 8) & 255], 24) ^ shift(T0[(r0 >> 16) & 255], 16) ^ shift(T0[(r1 >> 24) & 255], 8) ^ KW[r][2]; C3 = T0[r3 & 255] ^ shift(T0[(r0 >> 8) & 255], 24) ^ shift(T0[(r1 >> 16) & 255], 16) ^ shift(T0[(r2 >> 24) & 255], 8) ^ KW[r++][3]; } r0 = T0[C0 & 255] ^ shift(T0[(C1 >> 8) & 255], 24) ^ shift(T0[(C2 >> 16) & 255], 16) ^ shift(T0[(C3 >> 24) & 255], 8) ^ KW[r][0]; r1 = T0[C1 & 255] ^ shift(T0[(C2 >> 8) & 255], 24) ^ shift(T0[(C3 >> 16) & 255], 16) ^ shift(T0[(C0 >> 24) & 255], 8) ^ KW[r][1]; r2 = T0[C2 & 255] ^ shift(T0[(C3 >> 8) & 255], 24) ^ shift(T0[(C0 >> 16) & 255], 16) ^ shift(T0[(C1 >> 24) & 255], 8) ^ KW[r][2]; r3 = T0[C3 & 255] ^ shift(T0[(C0 >> 8) & 255], 24) ^ shift(T0[(C1 >> 16) & 255], 16) ^ shift(T0[(C2 >> 24) & 255], 8) ^ KW[r++][3]; C0 = (S[r0 & 255] & 255) ^ ((S[(r1 >> 8) & 255] & 255) << 8) ^ ((S[(r2 >> 16) & 255] & 255) << 16) ^ (S[(r3 >> 24) & 255] << 24) ^ KW[r][0]; C1 = (S[r1 & 255] & 255) ^ ((S[(r2 >> 8) & 255] & 255) << 8) ^ ((S[(r3 >> 16) & 255] & 255) << 16) ^ (S[(r0 >> 24) & 255] << 24) ^ KW[r][1]; C2 = (S[r2 & 255] & 255) ^ ((S[(r3 >> 8) & 255] & 255) << 8) ^ ((S[(r0 >> 16) & 255] & 255) << 16) ^ (S[(r1 >> 24) & 255] << 24) ^ KW[r][2]; C3 = (S[r3 & 255] & 255) ^ ((S[(r0 >> 8) & 255] & 255) << 8) ^ ((S[(r1 >> 16) & 255] & 255) << 16) ^ (S[(r2 >> 24) & 255] << 24) ^ KW[r][3]; } private int shift(int r, int shift) { return (r >>> shift) | (r << -shift); } private int subWord(int x) { return (S[x & 255] & 255 | ((S[(x >> 8) & 255] & 255) << 8) | ((S[(x >> 16) & 255] & 255) << 16) | S[(x >> 24) & 255] << 24); } private static final byte[] S = { (byte) 99, (byte) 124, (byte) 119, (byte) 123, (byte) 242, (byte) 107, (byte) 111, (byte) 197, (byte) 48, (byte) 1, (byte) 103, (byte) 43, (byte) 254, (byte) 215, (byte) 171, (byte) 118, (byte) 202, (byte) 130, (byte) 201, (byte) 125, (byte) 250, (byte) 89, (byte) 71, (byte) 240, (byte) 173, (byte) 212, (byte) 162, (byte) 175, (byte) 156, (byte) 164, (byte) 114, (byte) 192, (byte) 183, (byte) 253, (byte) 147, (byte) 38, (byte) 54, (byte) 63, (byte) 247, (byte) 204, (byte) 52, (byte) 165, (byte) 229, (byte) 241, (byte) 113, (byte) 216, (byte) 49, (byte) 21, (byte) 4, (byte) 199, (byte) 35, (byte) 195, (byte) 24, (byte) 150, (byte) 5, (byte) 154, (byte) 7, (byte) 18, (byte) 128, (byte) 226, (byte) 235, (byte) 39, (byte) 178, (byte) 117, (byte) 9, (byte) 131, (byte) 44, (byte) 26, (byte) 27, (byte) 110, (byte) 90, (byte) 160, (byte) 82, (byte) 59, (byte) 214, (byte) 179, (byte) 41, (byte) 227, (byte) 47, (byte) 132, (byte) 83, (byte) 209, (byte) 0, (byte) 237, (byte) 32, (byte) 252, (byte) 177, (byte) 91, (byte) 106, (byte) 203, (byte) 190, (byte) 57, (byte) 74, (byte) 76, (byte) 88, (byte) 207, (byte) 208, (byte) 239, (byte) 170, (byte) 251, (byte) 67, (byte) 77, (byte) 51, (byte) 133, (byte) 69, (byte) 249, (byte) 2, (byte) 127, (byte) 80, (byte) 60, (byte) 159, (byte) 168, (byte) 81, (byte) 163, (byte) 64, (byte) 143, (byte) 146, (byte) 157, (byte) 56, (byte) 245, (byte) 188, (byte) 182, (byte) 218, (byte) 33, (byte) 16, (byte) 255, (byte) 243, (byte) 210, (byte) 205, (byte) 12, (byte) 19, (byte) 236, (byte) 95, (byte) 151, (byte) 68, (byte) 23, (byte) 196, (byte) 167, (byte) 126, (byte) 61, (byte) 100, (byte) 93, (byte) 25, (byte) 115, (byte) 96, (byte) 129, (byte) 79, (byte) 220, (byte) 34, (byte) 42, (byte) 144, (byte) 136, (byte) 70, (byte) 238, (byte) 184, (byte) 20, (byte) 222, (byte) 94, (byte) 11, (byte) 219, (byte) 224, (byte) 50, (byte) 58, (byte) 10, (byte) 73, (byte) 6, (byte) 36, (byte) 92, (byte) 194, (byte) 211, (byte) 172, (byte) 98, (byte) 145, (byte) 149, (byte) 228, (byte) 121, (byte) 231, (byte) 200, (byte) 55, (byte) 109, (byte) 141, (byte) 213, (byte) 78, (byte) 169, (byte) 108, (byte) 86, (byte) 244, (byte) 234, (byte) 101, (byte) 122, (byte) 174, (byte) 8, (byte) 186, (byte) 120, (byte) 37, (byte) 46, (byte) 28, (byte) 166, (byte) 180, (byte) 198, (byte) 232, (byte) 221, (byte) 116, (byte) 31, (byte) 75, (byte) 189, (byte) 139, (byte) 138, (byte) 112, (byte) 62, (byte) 181, (byte) 102, (byte) 72, (byte) 3, (byte) 246, (byte) 14, (byte) 97, (byte) 53, (byte) 87, (byte) 185, (byte) 134, (byte) 193, (byte) 29, (byte) 158, (byte) 225, (byte) 248, (byte) 152, (byte) 17, (byte) 105, (byte) 217, (byte) 142, (byte) 148, (byte) 155, (byte) 30, (byte) 135, (byte) 233, (byte) 206, (byte) 85, (byte) 40, (byte) 223, (byte) 140, (byte) 161, (byte) 137, (byte) 13, (byte) 191, (byte) 230, (byte) 66, (byte) 104, (byte) 65, (byte) 153, (byte) 45, (byte) 15, (byte) 176, (byte) 84, (byte) 187, (byte) 22, }; private static final int[] rcon = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91}; private static final int[] T0 = { 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f, 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c}; } zip4j-2.9.1/src/main/java/net/lingala/zip4j/crypto/engine/ZipCryptoEngine.java000077500000000000000000000034021414265447200272100ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.crypto.engine; import static net.lingala.zip4j.util.Zip4jUtil.convertCharArrayToByteArray; public class ZipCryptoEngine { private final int[] keys = new int[3]; private static final int[] CRC_TABLE = new int[256]; static { for (int i = 0; i < 256; i++) { int r = i; for (int j = 0; j < 8; j++) { if ((r & 1) == 1) { r = (r >>> 1) ^ 0xedb88320; } else { r >>>= 1; } } CRC_TABLE[i] = r; } } public void initKeys(char[] password) { keys[0] = 305419896; keys[1] = 591751049; keys[2] = 878082192; byte[] bytes = convertCharArrayToByteArray(password); for (byte b : bytes) { updateKeys((byte) (b & 0xff)); } } public void updateKeys(byte charAt) { keys[0] = crc32(keys[0], charAt); keys[1] += keys[0] & 0xff; keys[1] = keys[1] * 134775813 + 1; keys[2] = crc32(keys[2], (byte) (keys[1] >> 24)); } private int crc32(int oldCrc, byte charAt) { return ((oldCrc >>> 8) ^ CRC_TABLE[(oldCrc ^ charAt) & 0xff]); } public byte decryptByte() { int temp = keys[2] | 2; return (byte) ((temp * (temp ^ 1)) >>> 8); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/exception/000077500000000000000000000000001414265447200224635ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/exception/ZipException.java000077500000000000000000000030641414265447200257550ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.exception; import java.io.IOException; public class ZipException extends IOException { private static final long serialVersionUID = 1L; private Type type = Type.UNKNOWN; public ZipException(String message) { super(message); } public ZipException(Exception rootException) { super(rootException); } public ZipException(String message, Exception rootException) { super(message, rootException); } public ZipException(String message, Type type) { super(message); this.type = type; } public ZipException(String message, Throwable throwable, Type type) { super(message, throwable); this.type = type; } public Type getType() { return type; } public enum Type { WRONG_PASSWORD, TASK_CANCELLED_EXCEPTION, CHECKSUM_MISMATCH, UNKNOWN_COMPRESSION_METHOD, FILE_NOT_FOUND, UNSUPPORTED_ENCRYPTION, UNKNOWN } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/000077500000000000000000000000001414265447200221005ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/FileHeaderFactory.java000066400000000000000000000200731414265447200262650ustar00rootroot00000000000000package net.lingala.zip4j.headers; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.CompressionLevel; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import net.lingala.zip4j.util.Zip4jUtil; import java.nio.charset.Charset; import static net.lingala.zip4j.util.BitUtils.setBit; import static net.lingala.zip4j.util.BitUtils.unsetBit; import static net.lingala.zip4j.util.FileUtils.isZipEntryDirectory; import static net.lingala.zip4j.util.ZipVersionUtils.determineVersionMadeBy; import static net.lingala.zip4j.util.ZipVersionUtils.determineVersionNeededToExtract; public class FileHeaderFactory { public FileHeader generateFileHeader(ZipParameters zipParameters, boolean isSplitZip, int currentDiskNumberStart, Charset charset, RawIO rawIO) throws ZipException { FileHeader fileHeader = new FileHeader(); fileHeader.setSignature(HeaderSignature.CENTRAL_DIRECTORY); fileHeader.setVersionMadeBy(determineVersionMadeBy(zipParameters, rawIO)); fileHeader.setVersionNeededToExtract(determineVersionNeededToExtract(zipParameters).getCode()); if (zipParameters.isEncryptFiles() && zipParameters.getEncryptionMethod() == EncryptionMethod.AES) { fileHeader.setCompressionMethod(CompressionMethod.AES_INTERNAL_ONLY); fileHeader.setAesExtraDataRecord(generateAESExtraDataRecord(zipParameters)); fileHeader.setExtraFieldLength(fileHeader.getExtraFieldLength() + InternalZipConstants.AES_EXTRA_DATA_RECORD_SIZE); } else { fileHeader.setCompressionMethod(zipParameters.getCompressionMethod()); } if (zipParameters.isEncryptFiles()) { if (zipParameters.getEncryptionMethod() == null || zipParameters.getEncryptionMethod() == EncryptionMethod.NONE) { throw new ZipException("Encryption method has to be set when encryptFiles flag is set in zip parameters"); } fileHeader.setEncrypted(true); fileHeader.setEncryptionMethod(zipParameters.getEncryptionMethod()); } String fileName = validateAndGetFileName(zipParameters.getFileNameInZip()); fileHeader.setFileName(fileName); fileHeader.setFileNameLength(determineFileNameLength(fileName, charset)); fileHeader.setDiskNumberStart(isSplitZip ? currentDiskNumberStart : 0); if (zipParameters.getLastModifiedFileTime() > 0) { fileHeader.setLastModifiedTime(Zip4jUtil.epochToExtendedDosTime(zipParameters.getLastModifiedFileTime())); } else { fileHeader.setLastModifiedTime(Zip4jUtil.epochToExtendedDosTime(System.currentTimeMillis())); } boolean isDirectory = isZipEntryDirectory(fileName); fileHeader.setDirectory(isDirectory); fileHeader.setExternalFileAttributes(FileUtils.getDefaultFileAttributes(isDirectory)); if (zipParameters.isWriteExtendedLocalFileHeader() && zipParameters.getEntrySize() == -1) { fileHeader.setUncompressedSize(0); } else { fileHeader.setUncompressedSize(zipParameters.getEntrySize()); } if (zipParameters.isEncryptFiles() && zipParameters.getEncryptionMethod() == EncryptionMethod.ZIP_STANDARD) { fileHeader.setCrc(zipParameters.getEntryCRC()); } fileHeader.setGeneralPurposeFlag(determineGeneralPurposeBitFlag(fileHeader.isEncrypted(), zipParameters, charset)); fileHeader.setDataDescriptorExists(zipParameters.isWriteExtendedLocalFileHeader()); fileHeader.setFileComment(zipParameters.getFileComment()); return fileHeader; } public LocalFileHeader generateLocalFileHeader(FileHeader fileHeader) { LocalFileHeader localFileHeader = new LocalFileHeader(); localFileHeader.setSignature(HeaderSignature.LOCAL_FILE_HEADER); localFileHeader.setVersionNeededToExtract(fileHeader.getVersionNeededToExtract()); localFileHeader.setCompressionMethod(fileHeader.getCompressionMethod()); localFileHeader.setLastModifiedTime(fileHeader.getLastModifiedTime()); localFileHeader.setUncompressedSize(fileHeader.getUncompressedSize()); localFileHeader.setFileNameLength(fileHeader.getFileNameLength()); localFileHeader.setFileName(fileHeader.getFileName()); localFileHeader.setEncrypted(fileHeader.isEncrypted()); localFileHeader.setEncryptionMethod(fileHeader.getEncryptionMethod()); localFileHeader.setAesExtraDataRecord(fileHeader.getAesExtraDataRecord()); localFileHeader.setCrc(fileHeader.getCrc()); localFileHeader.setCompressedSize(fileHeader.getCompressedSize()); localFileHeader.setGeneralPurposeFlag(fileHeader.getGeneralPurposeFlag().clone()); localFileHeader.setDataDescriptorExists(fileHeader.isDataDescriptorExists()); localFileHeader.setExtraFieldLength(fileHeader.getExtraFieldLength()); return localFileHeader; } private byte[] determineGeneralPurposeBitFlag(boolean isEncrypted, ZipParameters zipParameters, Charset charset) { byte[] generalPurposeBitFlag = new byte[2]; generalPurposeBitFlag[0] = generateFirstGeneralPurposeByte(isEncrypted, zipParameters); if(charset == null || InternalZipConstants.CHARSET_UTF_8.equals(charset)) { // set 3rd bit which corresponds to utf-8 file name charset generalPurposeBitFlag[1] = setBit(generalPurposeBitFlag[1], 3); } return generalPurposeBitFlag; } private byte generateFirstGeneralPurposeByte(boolean isEncrypted, ZipParameters zipParameters) { byte firstByte = 0; if (isEncrypted) { firstByte = setBit(firstByte, 0); } if (CompressionMethod.DEFLATE.equals(zipParameters.getCompressionMethod())) { if (CompressionLevel.NORMAL.equals(zipParameters.getCompressionLevel())) { firstByte = unsetBit(firstByte, 1); firstByte = unsetBit(firstByte, 2); } else if (CompressionLevel.MAXIMUM.equals(zipParameters.getCompressionLevel())) { firstByte = setBit(firstByte, 1); firstByte = unsetBit(firstByte, 2); } else if (CompressionLevel.FAST.equals(zipParameters.getCompressionLevel())) { firstByte = unsetBit(firstByte, 1); firstByte = setBit(firstByte, 2); } else if (CompressionLevel.FASTEST.equals(zipParameters.getCompressionLevel()) || CompressionLevel.ULTRA.equals(zipParameters.getCompressionLevel())) { firstByte = setBit(firstByte, 1); firstByte = setBit(firstByte, 2); } } if (zipParameters.isWriteExtendedLocalFileHeader()) { firstByte = setBit(firstByte, 3); } return firstByte; } private String validateAndGetFileName(String fileNameInZip) throws ZipException { if (!Zip4jUtil.isStringNotNullAndNotEmpty(fileNameInZip)) { throw new ZipException("fileNameInZip is null or empty"); } return fileNameInZip; } private AESExtraDataRecord generateAESExtraDataRecord(ZipParameters parameters) throws ZipException { AESExtraDataRecord aesExtraDataRecord = new AESExtraDataRecord(); if (parameters.getAesVersion() != null) { aesExtraDataRecord.setAesVersion(parameters.getAesVersion()); } if (parameters.getAesKeyStrength() == AesKeyStrength.KEY_STRENGTH_128) { aesExtraDataRecord.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128); } else if (parameters.getAesKeyStrength() == AesKeyStrength.KEY_STRENGTH_192) { aesExtraDataRecord.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_192); } else if (parameters.getAesKeyStrength() == AesKeyStrength.KEY_STRENGTH_256) { aesExtraDataRecord.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); } else { throw new ZipException("invalid AES key strength"); } aesExtraDataRecord.setCompressionMethod(parameters.getCompressionMethod()); return aesExtraDataRecord; } private int determineFileNameLength(String fileName, Charset charset) { return HeaderUtil.getBytesFromString(fileName, charset).length; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/HeaderReader.java000077500000000000000000000751071414265447200252730ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.headers; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.inputstream.NumberedSplitRandomAccessFile; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.CentralDirectory; import net.lingala.zip4j.model.DataDescriptor; import net.lingala.zip4j.model.DigitalSignature; import net.lingala.zip4j.model.EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.ExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryLocator; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.Zip64ExtendedInfo; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.RawIO; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static net.lingala.zip4j.headers.HeaderUtil.decodeStringWithCharset; import static net.lingala.zip4j.util.BitUtils.isBitSet; import static net.lingala.zip4j.util.InternalZipConstants.ENDHDR; import static net.lingala.zip4j.util.InternalZipConstants.MAX_COMMENT_SIZE; import static net.lingala.zip4j.util.InternalZipConstants.ZIP4J_DEFAULT_CHARSET; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_64_SIZE_LIMIT; import static net.lingala.zip4j.util.Zip4jUtil.readFully; /** * Helper class to read header information for the zip file */ public class HeaderReader { private ZipModel zipModel; private final RawIO rawIO = new RawIO(); private final byte[] intBuff = new byte[4]; public ZipModel readAllHeaders(RandomAccessFile zip4jRaf, Zip4jConfig zip4jConfig) throws IOException { if (zip4jRaf.length() < ENDHDR) { throw new ZipException("Zip file size less than minimum expected zip file size. " + "Probably not a zip file or a corrupted zip file"); } zipModel = new ZipModel(); try { zipModel.setEndOfCentralDirectoryRecord(readEndOfCentralDirectoryRecord(zip4jRaf, rawIO, zip4jConfig)); } catch (ZipException e) { throw e; } catch (IOException e) { e.printStackTrace(); throw new ZipException("Zip headers not found. Probably not a zip file or a corrupted zip file", e); } if (zipModel.getEndOfCentralDirectoryRecord().getTotalNumberOfEntriesInCentralDirectory() == 0) { return zipModel; } // If file is Zip64 format, Zip64 headers have to be read before reading central directory zipModel.setZip64EndOfCentralDirectoryLocator(readZip64EndOfCentralDirectoryLocator(zip4jRaf, rawIO, zipModel.getEndOfCentralDirectoryRecord().getOffsetOfEndOfCentralDirectory())); if (zipModel.isZip64Format()) { zipModel.setZip64EndOfCentralDirectoryRecord(readZip64EndCentralDirRec(zip4jRaf, rawIO)); if (zipModel.getZip64EndOfCentralDirectoryRecord() != null && zipModel.getZip64EndOfCentralDirectoryRecord().getNumberOfThisDisk() > 0) { zipModel.setSplitArchive(true); } else { zipModel.setSplitArchive(false); } } zipModel.setCentralDirectory(readCentralDirectory(zip4jRaf, rawIO, zip4jConfig.getCharset())); return zipModel; } private EndOfCentralDirectoryRecord readEndOfCentralDirectoryRecord(RandomAccessFile zip4jRaf, RawIO rawIO, Zip4jConfig zip4jConfig) throws IOException { long offsetEndOfCentralDirectory = locateOffsetOfEndOfCentralDirectory(zip4jRaf); seekInCurrentPart(zip4jRaf, offsetEndOfCentralDirectory + 4); EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = new EndOfCentralDirectoryRecord(); endOfCentralDirectoryRecord.setSignature(HeaderSignature.END_OF_CENTRAL_DIRECTORY); endOfCentralDirectoryRecord.setNumberOfThisDisk(rawIO.readShortLittleEndian(zip4jRaf)); endOfCentralDirectoryRecord.setNumberOfThisDiskStartOfCentralDir(rawIO.readShortLittleEndian(zip4jRaf)); endOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( rawIO.readShortLittleEndian(zip4jRaf)); endOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectory(rawIO.readShortLittleEndian(zip4jRaf)); endOfCentralDirectoryRecord.setSizeOfCentralDirectory(rawIO.readIntLittleEndian(zip4jRaf)); endOfCentralDirectoryRecord.setOffsetOfEndOfCentralDirectory(offsetEndOfCentralDirectory); zip4jRaf.readFully(intBuff); endOfCentralDirectoryRecord.setOffsetOfStartOfCentralDirectory(rawIO.readLongLittleEndian(intBuff, 0)); int commentLength = rawIO.readShortLittleEndian(zip4jRaf); endOfCentralDirectoryRecord.setComment(readZipComment(zip4jRaf, commentLength, zip4jConfig.getCharset())); zipModel.setSplitArchive(endOfCentralDirectoryRecord.getNumberOfThisDisk() > 0); return endOfCentralDirectoryRecord; } private CentralDirectory readCentralDirectory(RandomAccessFile zip4jRaf, RawIO rawIO, Charset charset) throws IOException { CentralDirectory centralDirectory = new CentralDirectory(); List fileHeaders = new ArrayList<>(); long offSetStartCentralDir = HeaderUtil.getOffsetStartOfCentralDirectory(zipModel); long centralDirEntryCount = getNumberOfEntriesInCentralDirectory(zipModel); zip4jRaf.seek(offSetStartCentralDir); byte[] shortBuff = new byte[2]; byte[] intBuff = new byte[4]; for (int i = 0; i < centralDirEntryCount; i++) { FileHeader fileHeader = new FileHeader(); if (rawIO.readIntLittleEndian(zip4jRaf) != HeaderSignature.CENTRAL_DIRECTORY.getValue()) { throw new ZipException("Expected central directory entry not found (#" + (i + 1) + ")"); } fileHeader.setSignature(HeaderSignature.CENTRAL_DIRECTORY); fileHeader.setVersionMadeBy(rawIO.readShortLittleEndian(zip4jRaf)); fileHeader.setVersionNeededToExtract(rawIO.readShortLittleEndian(zip4jRaf)); byte[] generalPurposeFlags = new byte[2]; zip4jRaf.readFully(generalPurposeFlags); fileHeader.setEncrypted(isBitSet(generalPurposeFlags[0], 0)); fileHeader.setDataDescriptorExists(isBitSet(generalPurposeFlags[0], 3)); fileHeader.setFileNameUTF8Encoded(isBitSet(generalPurposeFlags[1], 3)); fileHeader.setGeneralPurposeFlag(generalPurposeFlags.clone()); fileHeader.setCompressionMethod(CompressionMethod.getCompressionMethodFromCode(rawIO.readShortLittleEndian( zip4jRaf))); fileHeader.setLastModifiedTime(rawIO.readIntLittleEndian(zip4jRaf)); zip4jRaf.readFully(intBuff); fileHeader.setCrc(rawIO.readLongLittleEndian(intBuff, 0)); fileHeader.setCompressedSize(rawIO.readLongLittleEndian(zip4jRaf, 4)); fileHeader.setUncompressedSize(rawIO.readLongLittleEndian(zip4jRaf, 4)); int fileNameLength = rawIO.readShortLittleEndian(zip4jRaf); fileHeader.setFileNameLength(fileNameLength); fileHeader.setExtraFieldLength(rawIO.readShortLittleEndian(zip4jRaf)); int fileCommentLength = rawIO.readShortLittleEndian(zip4jRaf); fileHeader.setFileCommentLength(fileCommentLength); fileHeader.setDiskNumberStart(rawIO.readShortLittleEndian(zip4jRaf)); zip4jRaf.readFully(shortBuff); fileHeader.setInternalFileAttributes(shortBuff.clone()); zip4jRaf.readFully(intBuff); fileHeader.setExternalFileAttributes(intBuff.clone()); zip4jRaf.readFully(intBuff); fileHeader.setOffsetLocalHeader(rawIO.readLongLittleEndian(intBuff, 0)); if (fileNameLength > 0) { byte[] fileNameBuff = new byte[fileNameLength]; zip4jRaf.readFully(fileNameBuff); String fileName = decodeStringWithCharset(fileNameBuff, fileHeader.isFileNameUTF8Encoded(), charset); fileHeader.setFileName(fileName); } else { fileHeader.setFileName(null); } fileHeader.setDirectory(isDirectory(fileHeader.getExternalFileAttributes(), fileHeader.getFileName())); readExtraDataRecords(zip4jRaf, fileHeader); readZip64ExtendedInfo(fileHeader, rawIO); readAesExtraDataRecord(fileHeader, rawIO); if (fileCommentLength > 0) { byte[] fileCommentBuff = new byte[fileCommentLength]; zip4jRaf.readFully(fileCommentBuff); fileHeader.setFileComment(decodeStringWithCharset(fileCommentBuff, fileHeader.isFileNameUTF8Encoded(), charset)); } if (fileHeader.isEncrypted()) { if (fileHeader.getAesExtraDataRecord() != null) { fileHeader.setEncryptionMethod(EncryptionMethod.AES); } else { fileHeader.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); } } fileHeaders.add(fileHeader); } centralDirectory.setFileHeaders(fileHeaders); DigitalSignature digitalSignature = new DigitalSignature(); if (rawIO.readIntLittleEndian(zip4jRaf) == HeaderSignature.DIGITAL_SIGNATURE.getValue()) { digitalSignature.setSignature(HeaderSignature.DIGITAL_SIGNATURE); digitalSignature.setSizeOfData(rawIO.readShortLittleEndian(zip4jRaf)); if (digitalSignature.getSizeOfData() > 0) { byte[] signatureDataBuff = new byte[digitalSignature.getSizeOfData()]; zip4jRaf.readFully(signatureDataBuff); digitalSignature.setSignatureData(new String(signatureDataBuff)); } } return centralDirectory; } private void readExtraDataRecords(RandomAccessFile zip4jRaf, FileHeader fileHeader) throws IOException { int extraFieldLength = fileHeader.getExtraFieldLength(); if (extraFieldLength <= 0) { return; } fileHeader.setExtraDataRecords(readExtraDataRecords(zip4jRaf, extraFieldLength)); } private void readExtraDataRecords(InputStream inputStream, LocalFileHeader localFileHeader) throws IOException { int extraFieldLength = localFileHeader.getExtraFieldLength(); if (extraFieldLength <= 0) { return; } localFileHeader.setExtraDataRecords(readExtraDataRecords(inputStream, extraFieldLength)); } private List readExtraDataRecords(RandomAccessFile zip4jRaf, int extraFieldLength) throws IOException { if (extraFieldLength < 4) { if (extraFieldLength > 0) { zip4jRaf.skipBytes(extraFieldLength); } return null; } byte[] extraFieldBuf = new byte[extraFieldLength]; zip4jRaf.read(extraFieldBuf); try { return parseExtraDataRecords(extraFieldBuf, extraFieldLength); } catch (Exception e) { // Ignore any errors when parsing extra data records return Collections.emptyList(); } } private List readExtraDataRecords(InputStream inputStream, int extraFieldLength) throws IOException { if (extraFieldLength < 4) { if (extraFieldLength > 0) { inputStream.skip(extraFieldLength); } return null; } byte[] extraFieldBuf = new byte[extraFieldLength]; readFully(inputStream, extraFieldBuf); try { return parseExtraDataRecords(extraFieldBuf, extraFieldLength); } catch (Exception e) { // Ignore any errors when parsing extra data records return Collections.emptyList(); } } private List parseExtraDataRecords(byte[] extraFieldBuf, int extraFieldLength) { int counter = 0; List extraDataRecords = new ArrayList<>(); while (counter < extraFieldLength) { ExtraDataRecord extraDataRecord = new ExtraDataRecord(); int header = rawIO.readShortLittleEndian(extraFieldBuf, counter); extraDataRecord.setHeader(header); counter += 2; int sizeOfRec = rawIO.readShortLittleEndian(extraFieldBuf, counter); extraDataRecord.setSizeOfData(sizeOfRec); counter += 2; if (sizeOfRec > 0) { byte[] data = new byte[sizeOfRec]; System.arraycopy(extraFieldBuf, counter, data, 0, sizeOfRec); extraDataRecord.setData(data); } counter += sizeOfRec; extraDataRecords.add(extraDataRecord); } return extraDataRecords.size() > 0 ? extraDataRecords : null; } private Zip64EndOfCentralDirectoryLocator readZip64EndOfCentralDirectoryLocator(RandomAccessFile zip4jRaf, RawIO rawIO, long offsetEndOfCentralDirectoryRecord) throws IOException { Zip64EndOfCentralDirectoryLocator zip64EndOfCentralDirectoryLocator = new Zip64EndOfCentralDirectoryLocator(); setFilePointerToReadZip64EndCentralDirLoc(zip4jRaf, offsetEndOfCentralDirectoryRecord); int signature = rawIO.readIntLittleEndian(zip4jRaf); if (signature == HeaderSignature.ZIP64_END_CENTRAL_DIRECTORY_LOCATOR.getValue()) { zipModel.setZip64Format(true); zip64EndOfCentralDirectoryLocator.setSignature(HeaderSignature.ZIP64_END_CENTRAL_DIRECTORY_LOCATOR); } else { zipModel.setZip64Format(false); return null; } zip64EndOfCentralDirectoryLocator.setNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord( rawIO.readIntLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryLocator.setOffsetZip64EndOfCentralDirectoryRecord( rawIO.readLongLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryLocator.setTotalNumberOfDiscs(rawIO.readIntLittleEndian(zip4jRaf)); return zip64EndOfCentralDirectoryLocator; } private Zip64EndOfCentralDirectoryRecord readZip64EndCentralDirRec(RandomAccessFile zip4jRaf, RawIO rawIO) throws IOException { if (zipModel.getZip64EndOfCentralDirectoryLocator() == null) { throw new ZipException("invalid zip64 end of central directory locator"); } long offSetStartOfZip64CentralDir = zipModel.getZip64EndOfCentralDirectoryLocator() .getOffsetZip64EndOfCentralDirectoryRecord(); if (offSetStartOfZip64CentralDir < 0) { throw new ZipException("invalid offset for start of end of central directory record"); } zip4jRaf.seek(offSetStartOfZip64CentralDir); Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = new Zip64EndOfCentralDirectoryRecord(); int signature = rawIO.readIntLittleEndian(zip4jRaf); if (signature != HeaderSignature.ZIP64_END_CENTRAL_DIRECTORY_RECORD.getValue()) { throw new ZipException("invalid signature for zip64 end of central directory record"); } zip64EndOfCentralDirectoryRecord.setSignature(HeaderSignature.ZIP64_END_CENTRAL_DIRECTORY_RECORD); zip64EndOfCentralDirectoryRecord.setSizeOfZip64EndCentralDirectoryRecord(rawIO.readLongLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setVersionMadeBy(rawIO.readShortLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setVersionNeededToExtract(rawIO.readShortLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setNumberOfThisDisk(rawIO.readIntLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setNumberOfThisDiskStartOfCentralDirectory(rawIO.readIntLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( rawIO.readLongLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectory(rawIO.readLongLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setSizeOfCentralDirectory(rawIO.readLongLittleEndian(zip4jRaf)); zip64EndOfCentralDirectoryRecord.setOffsetStartCentralDirectoryWRTStartDiskNumber( rawIO.readLongLittleEndian(zip4jRaf)); //zip64 extensible data sector //44 is the size of fixed variables in this record long extDataSecSize = zip64EndOfCentralDirectoryRecord.getSizeOfZip64EndCentralDirectoryRecord() - 44; if (extDataSecSize > 0) { byte[] extDataSecRecBuf = new byte[(int) extDataSecSize]; zip4jRaf.readFully(extDataSecRecBuf); zip64EndOfCentralDirectoryRecord.setExtensibleDataSector(extDataSecRecBuf); } return zip64EndOfCentralDirectoryRecord; } private void readZip64ExtendedInfo(FileHeader fileHeader, RawIO rawIO) { if (fileHeader.getExtraDataRecords() == null || fileHeader.getExtraDataRecords().size() <= 0) { return; } Zip64ExtendedInfo zip64ExtendedInfo = readZip64ExtendedInfo(fileHeader.getExtraDataRecords(), rawIO, fileHeader.getUncompressedSize(), fileHeader.getCompressedSize(), fileHeader.getOffsetLocalHeader(), fileHeader.getDiskNumberStart()); if (zip64ExtendedInfo == null) { return; } fileHeader.setZip64ExtendedInfo(zip64ExtendedInfo); if (zip64ExtendedInfo.getUncompressedSize() != -1) { fileHeader.setUncompressedSize(zip64ExtendedInfo.getUncompressedSize()); } if (zip64ExtendedInfo.getCompressedSize() != -1) { fileHeader.setCompressedSize(zip64ExtendedInfo.getCompressedSize()); } if (zip64ExtendedInfo.getOffsetLocalHeader() != -1) { fileHeader.setOffsetLocalHeader(zip64ExtendedInfo.getOffsetLocalHeader()); } if (zip64ExtendedInfo.getDiskNumberStart() != -1) { fileHeader.setDiskNumberStart(zip64ExtendedInfo.getDiskNumberStart()); } } private void readZip64ExtendedInfo(LocalFileHeader localFileHeader, RawIO rawIO) throws ZipException { if (localFileHeader == null) { throw new ZipException("file header is null in reading Zip64 Extended Info"); } if (localFileHeader.getExtraDataRecords() == null || localFileHeader.getExtraDataRecords().size() <= 0) { return; } Zip64ExtendedInfo zip64ExtendedInfo = readZip64ExtendedInfo(localFileHeader.getExtraDataRecords(), rawIO, localFileHeader.getUncompressedSize(), localFileHeader.getCompressedSize(), 0, 0); if (zip64ExtendedInfo == null) { return; } localFileHeader.setZip64ExtendedInfo(zip64ExtendedInfo); if (zip64ExtendedInfo.getUncompressedSize() != -1) { localFileHeader.setUncompressedSize(zip64ExtendedInfo.getUncompressedSize()); } if (zip64ExtendedInfo.getCompressedSize() != -1) { localFileHeader.setCompressedSize(zip64ExtendedInfo.getCompressedSize()); } } private Zip64ExtendedInfo readZip64ExtendedInfo(List extraDataRecords, RawIO rawIO, long uncompressedSize, long compressedSize, long offsetLocalHeader, int diskNumberStart) { for (ExtraDataRecord extraDataRecord : extraDataRecords) { if (extraDataRecord == null) { continue; } if (HeaderSignature.ZIP64_EXTRA_FIELD_SIGNATURE.getValue() == extraDataRecord.getHeader()) { Zip64ExtendedInfo zip64ExtendedInfo = new Zip64ExtendedInfo(); byte[] extraData = extraDataRecord.getData(); if (extraDataRecord.getSizeOfData() <= 0) { return null; } int counter = 0; if (counter < extraDataRecord.getSizeOfData() && uncompressedSize == ZIP_64_SIZE_LIMIT) { zip64ExtendedInfo.setUncompressedSize(rawIO.readLongLittleEndian(extraData, counter)); counter += 8; } if (counter < extraDataRecord.getSizeOfData() && compressedSize == ZIP_64_SIZE_LIMIT) { zip64ExtendedInfo.setCompressedSize(rawIO.readLongLittleEndian(extraData, counter)); counter += 8; } if (counter < extraDataRecord.getSizeOfData() && offsetLocalHeader == ZIP_64_SIZE_LIMIT) { zip64ExtendedInfo.setOffsetLocalHeader(rawIO.readLongLittleEndian(extraData, counter)); counter += 8; } if (counter < extraDataRecord.getSizeOfData() && diskNumberStart == ZIP_64_NUMBER_OF_ENTRIES_LIMIT) { zip64ExtendedInfo.setDiskNumberStart(rawIO.readIntLittleEndian(extraData, counter)); } return zip64ExtendedInfo; } } return null; } private void setFilePointerToReadZip64EndCentralDirLoc(RandomAccessFile zip4jRaf, long offsetEndOfCentralDirectoryRecord) throws IOException { // Now the file pointer is at the end of signature of Central Dir Rec // Seek back with the following values // 4 -> total number of disks // 8 -> relative offset of the zip64 end of central directory record // 4 -> number of the disk with the start of the zip64 end of central directory // 4 -> zip64 end of central dir locator signature // Refer to Appnote for more information seekInCurrentPart(zip4jRaf, offsetEndOfCentralDirectoryRecord - 4 - 8 - 4 - 4); } public LocalFileHeader readLocalFileHeader(InputStream inputStream, Charset charset) throws IOException { LocalFileHeader localFileHeader = new LocalFileHeader(); byte[] intBuff = new byte[4]; //signature int sig = rawIO.readIntLittleEndian(inputStream); if (sig == HeaderSignature.TEMPORARY_SPANNING_MARKER.getValue()) { sig = rawIO.readIntLittleEndian(inputStream); } if (sig != HeaderSignature.LOCAL_FILE_HEADER.getValue()) { return null; } localFileHeader.setSignature(HeaderSignature.LOCAL_FILE_HEADER); localFileHeader.setVersionNeededToExtract(rawIO.readShortLittleEndian(inputStream)); byte[] generalPurposeFlags = new byte[2]; if (readFully(inputStream, generalPurposeFlags) != 2) { throw new ZipException("Could not read enough bytes for generalPurposeFlags"); } localFileHeader.setEncrypted(isBitSet(generalPurposeFlags[0], 0)); localFileHeader.setDataDescriptorExists(isBitSet(generalPurposeFlags[0], 3)); localFileHeader.setFileNameUTF8Encoded(isBitSet(generalPurposeFlags[1], 3)); localFileHeader.setGeneralPurposeFlag(generalPurposeFlags.clone()); localFileHeader.setCompressionMethod(CompressionMethod.getCompressionMethodFromCode( rawIO.readShortLittleEndian(inputStream))); localFileHeader.setLastModifiedTime(rawIO.readIntLittleEndian(inputStream)); readFully(inputStream, intBuff); localFileHeader.setCrc(rawIO.readLongLittleEndian(intBuff, 0)); localFileHeader.setCompressedSize(rawIO.readLongLittleEndian(inputStream, 4)); localFileHeader.setUncompressedSize(rawIO.readLongLittleEndian(inputStream, 4)); int fileNameLength = rawIO.readShortLittleEndian(inputStream); localFileHeader.setFileNameLength(fileNameLength); localFileHeader.setExtraFieldLength(rawIO.readShortLittleEndian(inputStream)); if (fileNameLength > 0) { byte[] fileNameBuf = new byte[fileNameLength]; readFully(inputStream, fileNameBuf); String fileName = decodeStringWithCharset(fileNameBuf, localFileHeader.isFileNameUTF8Encoded(), charset); localFileHeader.setFileName(fileName); localFileHeader.setDirectory(fileName.endsWith("/") || fileName.endsWith("\\")); } else { localFileHeader.setFileName(null); } readExtraDataRecords(inputStream, localFileHeader); readZip64ExtendedInfo(localFileHeader, rawIO); readAesExtraDataRecord(localFileHeader, rawIO); if (localFileHeader.isEncrypted()) { if (localFileHeader.getEncryptionMethod() == EncryptionMethod.AES) { //Do nothing } else { if (isBitSet(localFileHeader.getGeneralPurposeFlag()[0], 6)) { localFileHeader.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD_VARIANT_STRONG); } else { localFileHeader.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); } } } return localFileHeader; } public DataDescriptor readDataDescriptor(InputStream inputStream, boolean isZip64Format) throws IOException { DataDescriptor dataDescriptor = new DataDescriptor(); byte[] intBuff = new byte[4]; readFully(inputStream, intBuff); long sigOrCrc = rawIO.readLongLittleEndian(intBuff, 0); //According to zip specification, presence of extra data record header signature is optional. //If this signature is present, read it and read the next 4 bytes for crc //If signature not present, assign the read 4 bytes for crc if (sigOrCrc == HeaderSignature.EXTRA_DATA_RECORD.getValue()) { dataDescriptor.setSignature(HeaderSignature.EXTRA_DATA_RECORD); readFully(inputStream, intBuff); dataDescriptor.setCrc(rawIO.readLongLittleEndian(intBuff, 0)); } else { dataDescriptor.setCrc(sigOrCrc); } if (isZip64Format) { dataDescriptor.setCompressedSize(rawIO.readLongLittleEndian(inputStream)); dataDescriptor.setUncompressedSize(rawIO.readLongLittleEndian(inputStream)); } else { dataDescriptor.setCompressedSize(rawIO.readIntLittleEndian(inputStream)); dataDescriptor.setUncompressedSize(rawIO.readIntLittleEndian(inputStream)); } return dataDescriptor; } private void readAesExtraDataRecord(FileHeader fileHeader, RawIO rawIO) throws ZipException { if (fileHeader.getExtraDataRecords() == null || fileHeader.getExtraDataRecords().size() <= 0) { return; } AESExtraDataRecord aesExtraDataRecord = readAesExtraDataRecord(fileHeader.getExtraDataRecords(), rawIO); if (aesExtraDataRecord != null) { fileHeader.setAesExtraDataRecord(aesExtraDataRecord); fileHeader.setEncryptionMethod(EncryptionMethod.AES); } } private void readAesExtraDataRecord(LocalFileHeader localFileHeader, RawIO rawIO) throws ZipException { if (localFileHeader.getExtraDataRecords() == null || localFileHeader.getExtraDataRecords().size() <= 0) { return; } AESExtraDataRecord aesExtraDataRecord = readAesExtraDataRecord(localFileHeader.getExtraDataRecords(), rawIO); if (aesExtraDataRecord != null) { localFileHeader.setAesExtraDataRecord(aesExtraDataRecord); localFileHeader.setEncryptionMethod(EncryptionMethod.AES); } } private AESExtraDataRecord readAesExtraDataRecord(List extraDataRecords, RawIO rawIO) throws ZipException { if (extraDataRecords == null) { return null; } for (ExtraDataRecord extraDataRecord : extraDataRecords) { if (extraDataRecord == null) { continue; } if (extraDataRecord.getHeader() == HeaderSignature.AES_EXTRA_DATA_RECORD.getValue()) { if (extraDataRecord.getData() == null) { throw new ZipException("corrupt AES extra data records"); } AESExtraDataRecord aesExtraDataRecord = new AESExtraDataRecord(); aesExtraDataRecord.setSignature(HeaderSignature.AES_EXTRA_DATA_RECORD); aesExtraDataRecord.setDataSize(extraDataRecord.getSizeOfData()); byte[] aesData = extraDataRecord.getData(); aesExtraDataRecord.setAesVersion(AesVersion.getFromVersionNumber(rawIO.readShortLittleEndian(aesData, 0))); byte[] vendorIDBytes = new byte[2]; System.arraycopy(aesData, 2, vendorIDBytes, 0, 2); aesExtraDataRecord.setVendorID(new String(vendorIDBytes)); aesExtraDataRecord.setAesKeyStrength(AesKeyStrength.getAesKeyStrengthFromRawCode(aesData[4] & 0xFF)); aesExtraDataRecord.setCompressionMethod( CompressionMethod.getCompressionMethodFromCode(rawIO.readShortLittleEndian(aesData, 5))); return aesExtraDataRecord; } } return null; } private long getNumberOfEntriesInCentralDirectory(ZipModel zipModel) { if (zipModel.isZip64Format()) { return zipModel.getZip64EndOfCentralDirectoryRecord().getTotalNumberOfEntriesInCentralDirectory(); } return zipModel.getEndOfCentralDirectoryRecord().getTotalNumberOfEntriesInCentralDirectory(); } private long locateOffsetOfEndOfCentralDirectory(RandomAccessFile randomAccessFile) throws IOException { long zipFileSize = randomAccessFile.length(); if (zipFileSize < ENDHDR) { throw new ZipException("Zip file size less than size of zip headers. Probably not a zip file."); } seekInCurrentPart(randomAccessFile, zipFileSize - ENDHDR); if (rawIO.readIntLittleEndian(randomAccessFile) == HeaderSignature.END_OF_CENTRAL_DIRECTORY.getValue()) { return zipFileSize - ENDHDR; } return locateOffsetOfEndOfCentralDirectoryByReverseSeek(randomAccessFile); } private long locateOffsetOfEndOfCentralDirectoryByReverseSeek(RandomAccessFile randomAccessFile) throws IOException { long currentFilePointer = randomAccessFile.length() - ENDHDR; // reverse seek for a maximum of MAX_COMMENT_SIZE bytes long numberOfBytesToRead = randomAccessFile.length() < MAX_COMMENT_SIZE ? randomAccessFile.length() : MAX_COMMENT_SIZE; while (numberOfBytesToRead > 0 && currentFilePointer > 0){ seekInCurrentPart(randomAccessFile, --currentFilePointer); if (rawIO.readIntLittleEndian(randomAccessFile) == HeaderSignature.END_OF_CENTRAL_DIRECTORY.getValue()) { return currentFilePointer; } numberOfBytesToRead--; }; throw new ZipException("Zip headers not found. Probably not a zip file"); } private void seekInCurrentPart(RandomAccessFile randomAccessFile, long pos) throws IOException { if (randomAccessFile instanceof NumberedSplitRandomAccessFile) { ((NumberedSplitRandomAccessFile) randomAccessFile).seekInCurrentPart(pos); } else { randomAccessFile.seek(pos); } } private String readZipComment(RandomAccessFile raf, int commentLength, Charset charset) { if (commentLength <= 0) { return null; } try { byte[] commentBuf = new byte[commentLength]; raf.readFully(commentBuf); return decodeStringWithCharset(commentBuf, false, charset != null ? charset : ZIP4J_DEFAULT_CHARSET); } catch (IOException e) { // Ignore any exception and set comment to null if comment cannot be read return null; } } public boolean isDirectory(byte[] externalFileAttributes, String fileName) { // first check if DOS attributes are set (lower order bytes from external attributes). If yes, check if the 4th bit // which represents a directory is set. If UNIX attributes are set (higher order two bytes), check for the 6th bit // in 4th byte which represents a directory flag. if (externalFileAttributes[0] != 0 && isBitSet(externalFileAttributes[0], 4)) { return true; } else if (externalFileAttributes[3] != 0 && isBitSet(externalFileAttributes[3], 6)) { return true; } return fileName != null && (fileName.endsWith("/") || fileName.endsWith("\\")); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/HeaderSignature.java000066400000000000000000000013501414265447200260140ustar00rootroot00000000000000package net.lingala.zip4j.headers; public enum HeaderSignature { LOCAL_FILE_HEADER(0x04034b50L), // "PK\003\004" EXTRA_DATA_RECORD(0x08074b50L), // "PK\007\008" CENTRAL_DIRECTORY(0x02014b50L), // "PK\001\002" END_OF_CENTRAL_DIRECTORY(0x06054b50L), // "PK\005\006" TEMPORARY_SPANNING_MARKER(0x30304b50L), // See APPNOTE.TXT 8.5.4 DIGITAL_SIGNATURE(0x05054b50L), ARCEXTDATREC(0x08064b50L), SPLIT_ZIP(0x08074b50L), ZIP64_END_CENTRAL_DIRECTORY_LOCATOR(0x07064b50L), ZIP64_END_CENTRAL_DIRECTORY_RECORD(0x06064b50), ZIP64_EXTRA_FIELD_SIGNATURE(0x0001), AES_EXTRA_DATA_RECORD(0x9901); private long value; HeaderSignature(long value) { this.value = value; } public long getValue() { return value; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/HeaderUtil.java000066400000000000000000000104151414265447200247720ustar00rootroot00000000000000package net.lingala.zip4j.headers; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.util.InternalZipConstants; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import static net.lingala.zip4j.util.InternalZipConstants.ZIP4J_DEFAULT_CHARSET; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_STANDARD_CHARSET_NAME; import static net.lingala.zip4j.util.Zip4jUtil.isStringNotNullAndNotEmpty; public class HeaderUtil { public static FileHeader getFileHeader(ZipModel zipModel, String fileName) throws ZipException { FileHeader fileHeader = getFileHeaderWithExactMatch(zipModel, fileName); if (fileHeader == null) { fileName = fileName.replaceAll("\\\\", "/"); fileHeader = getFileHeaderWithExactMatch(zipModel, fileName); if (fileHeader == null) { fileName = fileName.replaceAll("/", "\\\\"); fileHeader = getFileHeaderWithExactMatch(zipModel, fileName); } } return fileHeader; } public static String decodeStringWithCharset(byte[] data, boolean isUtf8Encoded, Charset charset) { if (charset != null) { return new String(data, charset); } if (isUtf8Encoded) { return new String(data, InternalZipConstants.CHARSET_UTF_8); } try { return new String(data, ZIP_STANDARD_CHARSET_NAME); } catch (UnsupportedEncodingException e) { return new String(data); } } public static byte[] getBytesFromString(String string, Charset charset) { if (charset == null) { return string.getBytes(ZIP4J_DEFAULT_CHARSET); } return string.getBytes(charset); } public static long getOffsetStartOfCentralDirectory(ZipModel zipModel) { if (zipModel.isZip64Format()) { return zipModel.getZip64EndOfCentralDirectoryRecord().getOffsetStartCentralDirectoryWRTStartDiskNumber(); } return zipModel.getEndOfCentralDirectoryRecord().getOffsetOfStartOfCentralDirectory(); } public static List getFileHeadersUnderDirectory(List allFileHeaders, String fileName) { List fileHeadersUnderDirectory = new ArrayList<>(); for (FileHeader fileHeader : allFileHeaders) { if (fileHeader.getFileName().startsWith(fileName)) { fileHeadersUnderDirectory.add(fileHeader); } } return fileHeadersUnderDirectory; } public static long getTotalUncompressedSizeOfAllFileHeaders(List fileHeaders) { long totalUncompressedSize = 0; for (FileHeader fileHeader : fileHeaders) { if (fileHeader.getZip64ExtendedInfo() != null && fileHeader.getZip64ExtendedInfo().getUncompressedSize() > 0) { totalUncompressedSize += fileHeader.getZip64ExtendedInfo().getUncompressedSize(); } else { totalUncompressedSize += fileHeader.getUncompressedSize(); } } return totalUncompressedSize; } private static FileHeader getFileHeaderWithExactMatch(ZipModel zipModel, String fileName) throws ZipException { if (zipModel == null) { throw new ZipException("zip model is null, cannot determine file header with exact match for fileName: " + fileName); } if (!isStringNotNullAndNotEmpty(fileName)) { throw new ZipException("file name is null, cannot determine file header with exact match for fileName: " + fileName); } if (zipModel.getCentralDirectory() == null) { throw new ZipException("central directory is null, cannot determine file header with exact match for fileName: " + fileName); } if (zipModel.getCentralDirectory().getFileHeaders() == null) { throw new ZipException("file Headers are null, cannot determine file header with exact match for fileName: " + fileName); } if (zipModel.getCentralDirectory().getFileHeaders().size() == 0) { return null; } for (FileHeader fileHeader : zipModel.getCentralDirectory().getFileHeaders()) { String fileNameForHdr = fileHeader.getFileName(); if (!isStringNotNullAndNotEmpty(fileNameForHdr)) { continue; } if (fileName.equalsIgnoreCase(fileNameForHdr)) { return fileHeader; } } return null; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/HeaderWriter.java000077500000000000000000001030411414265447200253320ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.headers; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.outputstream.CountingOutputStream; import net.lingala.zip4j.io.outputstream.OutputStreamWithSplitZipSupport; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.ExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryLocator; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.Charset; import java.util.List; import static net.lingala.zip4j.headers.HeaderUtil.getBytesFromString; import static net.lingala.zip4j.util.FileUtils.getZipFileNameWithoutExtension; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_64_SIZE_LIMIT; import static net.lingala.zip4j.util.Zip4jUtil.isStringNotNullAndNotEmpty; public class HeaderWriter { private static final short ZIP64_EXTRA_DATA_RECORD_SIZE_LFH = 16; private static final short ZIP64_EXTRA_DATA_RECORD_SIZE_FH = 28; private static final short AES_EXTRA_DATA_RECORD_SIZE = 11; private final RawIO rawIO = new RawIO(); private final byte[] longBuff = new byte[8]; private final byte[] intBuff = new byte[4]; public void writeLocalFileHeader(ZipModel zipModel, LocalFileHeader localFileHeader, OutputStream outputStream, Charset charset) throws IOException { try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { rawIO.writeIntLittleEndian(byteArrayOutputStream, (int) localFileHeader.getSignature().getValue()); rawIO.writeShortLittleEndian(byteArrayOutputStream, localFileHeader.getVersionNeededToExtract()); byteArrayOutputStream.write(localFileHeader.getGeneralPurposeFlag()); rawIO.writeShortLittleEndian(byteArrayOutputStream, localFileHeader.getCompressionMethod().getCode()); rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getLastModifiedTime()); byteArrayOutputStream.write(longBuff, 0, 4); rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getCrc()); byteArrayOutputStream.write(longBuff, 0, 4); boolean writeZip64Header = localFileHeader.getCompressedSize() >= ZIP_64_SIZE_LIMIT || localFileHeader.getUncompressedSize() >= ZIP_64_SIZE_LIMIT; if (writeZip64Header) { rawIO.writeLongLittleEndian(longBuff, 0, ZIP_64_SIZE_LIMIT); //Set the uncompressed size to ZipConstants.ZIP_64_SIZE_LIMIT as //these values will be stored in Zip64 extra record byteArrayOutputStream.write(longBuff, 0, 4); byteArrayOutputStream.write(longBuff, 0, 4); zipModel.setZip64Format(true); localFileHeader.setWriteCompressedSizeInZip64ExtraRecord(true); } else { rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getCompressedSize()); byteArrayOutputStream.write(longBuff, 0, 4); rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getUncompressedSize()); byteArrayOutputStream.write(longBuff, 0, 4); localFileHeader.setWriteCompressedSizeInZip64ExtraRecord(false); } byte[] fileNameBytes = new byte[0]; if (isStringNotNullAndNotEmpty(localFileHeader.getFileName())) { fileNameBytes = getBytesFromString(localFileHeader.getFileName(), charset); } rawIO.writeShortLittleEndian(byteArrayOutputStream, fileNameBytes.length); int extraFieldLength = 0; if (writeZip64Header) { extraFieldLength += ZIP64_EXTRA_DATA_RECORD_SIZE_LFH + 4; // 4 for signature + size of record } if (localFileHeader.getAesExtraDataRecord() != null) { extraFieldLength += AES_EXTRA_DATA_RECORD_SIZE; } rawIO.writeShortLittleEndian(byteArrayOutputStream, extraFieldLength); if (fileNameBytes.length > 0) { byteArrayOutputStream.write(fileNameBytes); } //Zip64 should be the first extra data record that should be written //This is NOT according to any specification but if this is changed //corresponding logic for updateLocalFileHeader for compressed size //has to be modified as well if (writeZip64Header) { rawIO.writeShortLittleEndian(byteArrayOutputStream, (int) HeaderSignature.ZIP64_EXTRA_FIELD_SIGNATURE.getValue()); rawIO.writeShortLittleEndian(byteArrayOutputStream, ZIP64_EXTRA_DATA_RECORD_SIZE_LFH); rawIO.writeLongLittleEndian(byteArrayOutputStream, localFileHeader.getUncompressedSize()); rawIO.writeLongLittleEndian(byteArrayOutputStream, localFileHeader.getCompressedSize()); } if (localFileHeader.getAesExtraDataRecord() != null) { AESExtraDataRecord aesExtraDataRecord = localFileHeader.getAesExtraDataRecord(); rawIO.writeShortLittleEndian(byteArrayOutputStream, (int) aesExtraDataRecord.getSignature().getValue()); rawIO.writeShortLittleEndian(byteArrayOutputStream, aesExtraDataRecord.getDataSize()); rawIO.writeShortLittleEndian(byteArrayOutputStream, aesExtraDataRecord.getAesVersion().getVersionNumber()); byteArrayOutputStream.write(aesExtraDataRecord.getVendorID().getBytes()); byte[] aesStrengthBytes = new byte[1]; aesStrengthBytes[0] = (byte) aesExtraDataRecord.getAesKeyStrength().getRawCode(); byteArrayOutputStream.write(aesStrengthBytes); rawIO.writeShortLittleEndian(byteArrayOutputStream, aesExtraDataRecord.getCompressionMethod().getCode()); } outputStream.write(byteArrayOutputStream.toByteArray()); } } public void writeExtendedLocalHeader(LocalFileHeader localFileHeader, OutputStream outputStream) throws IOException { if (localFileHeader == null || outputStream == null) { throw new ZipException("input parameters is null, cannot write extended local header"); } try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { rawIO.writeIntLittleEndian(byteArrayOutputStream, (int) HeaderSignature.EXTRA_DATA_RECORD.getValue()); rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getCrc()); byteArrayOutputStream.write(longBuff, 0, 4); if (localFileHeader.isWriteCompressedSizeInZip64ExtraRecord()) { rawIO.writeLongLittleEndian(byteArrayOutputStream, localFileHeader.getCompressedSize()); rawIO.writeLongLittleEndian(byteArrayOutputStream, localFileHeader.getUncompressedSize()); } else { rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getCompressedSize()); byteArrayOutputStream.write(longBuff, 0, 4); rawIO.writeLongLittleEndian(longBuff, 0, localFileHeader.getUncompressedSize()); byteArrayOutputStream.write(longBuff, 0, 4); } outputStream.write(byteArrayOutputStream.toByteArray()); } } public void finalizeZipFile(ZipModel zipModel, OutputStream outputStream, Charset charset) throws IOException { if (zipModel == null || outputStream == null) { throw new ZipException("input parameters is null, cannot finalize zip file"); } try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { processHeaderData(zipModel, outputStream); long offsetCentralDir = getOffsetOfCentralDirectory(zipModel); writeCentralDirectory(zipModel, byteArrayOutputStream, rawIO, charset); int sizeOfCentralDir = byteArrayOutputStream.size(); if (zipModel.isZip64Format() || offsetCentralDir >= InternalZipConstants.ZIP_64_SIZE_LIMIT || zipModel.getCentralDirectory().getFileHeaders().size() >= InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT) { if (zipModel.getZip64EndOfCentralDirectoryRecord() == null) { zipModel.setZip64EndOfCentralDirectoryRecord(new Zip64EndOfCentralDirectoryRecord()); } if (zipModel.getZip64EndOfCentralDirectoryLocator() == null) { zipModel.setZip64EndOfCentralDirectoryLocator(new Zip64EndOfCentralDirectoryLocator()); } zipModel.getZip64EndOfCentralDirectoryLocator().setOffsetZip64EndOfCentralDirectoryRecord(offsetCentralDir + sizeOfCentralDir); if (isSplitZipFile(outputStream)) { int currentSplitFileCounter = getCurrentSplitFileCounter(outputStream); zipModel.getZip64EndOfCentralDirectoryLocator().setNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord( currentSplitFileCounter); zipModel.getZip64EndOfCentralDirectoryLocator().setTotalNumberOfDiscs(currentSplitFileCounter + 1); } else { zipModel.getZip64EndOfCentralDirectoryLocator().setNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord(0); zipModel.getZip64EndOfCentralDirectoryLocator().setTotalNumberOfDiscs(1); } Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = buildZip64EndOfCentralDirectoryRecord(zipModel, sizeOfCentralDir, offsetCentralDir); zipModel.setZip64EndOfCentralDirectoryRecord(zip64EndOfCentralDirectoryRecord); writeZip64EndOfCentralDirectoryRecord(zip64EndOfCentralDirectoryRecord, byteArrayOutputStream,rawIO); writeZip64EndOfCentralDirectoryLocator(zipModel.getZip64EndOfCentralDirectoryLocator(), byteArrayOutputStream, rawIO); } writeEndOfCentralDirectoryRecord(zipModel, sizeOfCentralDir, offsetCentralDir, byteArrayOutputStream, rawIO, charset); writeZipHeaderBytes(zipModel, outputStream, byteArrayOutputStream.toByteArray(), charset); } } public void finalizeZipFileWithoutValidations(ZipModel zipModel, OutputStream outputStream, Charset charset) throws IOException { if (zipModel == null || outputStream == null) { throw new ZipException("input parameters is null, cannot finalize zip file without validations"); } try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { long offsetCentralDir = zipModel.getEndOfCentralDirectoryRecord().getOffsetOfStartOfCentralDirectory(); writeCentralDirectory(zipModel, byteArrayOutputStream, rawIO, charset); int sizeOfCentralDir = byteArrayOutputStream.size(); if (zipModel.isZip64Format() || offsetCentralDir >= InternalZipConstants.ZIP_64_SIZE_LIMIT || zipModel.getCentralDirectory().getFileHeaders().size() >= InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT) { if (zipModel.getZip64EndOfCentralDirectoryRecord() == null) { zipModel.setZip64EndOfCentralDirectoryRecord(new Zip64EndOfCentralDirectoryRecord()); } if (zipModel.getZip64EndOfCentralDirectoryLocator() == null) { zipModel.setZip64EndOfCentralDirectoryLocator(new Zip64EndOfCentralDirectoryLocator()); } zipModel.getZip64EndOfCentralDirectoryLocator().setOffsetZip64EndOfCentralDirectoryRecord(offsetCentralDir + sizeOfCentralDir); Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = buildZip64EndOfCentralDirectoryRecord(zipModel, sizeOfCentralDir, offsetCentralDir); zipModel.setZip64EndOfCentralDirectoryRecord(zip64EndOfCentralDirectoryRecord); writeZip64EndOfCentralDirectoryRecord(zip64EndOfCentralDirectoryRecord, byteArrayOutputStream,rawIO); writeZip64EndOfCentralDirectoryLocator(zipModel.getZip64EndOfCentralDirectoryLocator(), byteArrayOutputStream, rawIO); } writeEndOfCentralDirectoryRecord(zipModel, sizeOfCentralDir, offsetCentralDir, byteArrayOutputStream, rawIO, charset); writeZipHeaderBytes(zipModel, outputStream, byteArrayOutputStream.toByteArray(), charset); } } public void updateLocalFileHeader(FileHeader fileHeader, ZipModel zipModel, SplitOutputStream outputStream) throws IOException { if (fileHeader == null || zipModel == null) { throw new ZipException("invalid input parameters, cannot update local file header"); } boolean closeFlag = false; SplitOutputStream currOutputStream; if (fileHeader.getDiskNumberStart() != outputStream.getCurrentSplitFileCounter()) { String parentFile = zipModel.getZipFile().getParent(); String fileNameWithoutExt = getZipFileNameWithoutExtension(zipModel.getZipFile().getName()); String fileName = ""; if (parentFile != null) { fileName = parentFile + System.getProperty("file.separator"); } if (fileHeader.getDiskNumberStart() < 9) { fileName += fileNameWithoutExt + ".z0" + (fileHeader.getDiskNumberStart() + 1); } else { fileName += fileNameWithoutExt + ".z" + (fileHeader.getDiskNumberStart() + 1); } currOutputStream = new SplitOutputStream(new File(fileName)); closeFlag = true; } else { currOutputStream = outputStream; } long currOffset = currOutputStream.getFilePointer(); currOutputStream.seek(fileHeader.getOffsetLocalHeader() + InternalZipConstants.UPDATE_LFH_CRC); rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getCrc()); currOutputStream.write(longBuff, 0, 4); updateFileSizesInLocalFileHeader(currOutputStream, fileHeader); if (closeFlag) { currOutputStream.close(); } else { outputStream.seek(currOffset); } } private void updateFileSizesInLocalFileHeader(SplitOutputStream outputStream, FileHeader fileHeader) throws IOException { if (fileHeader.getUncompressedSize() >= ZIP_64_SIZE_LIMIT) { rawIO.writeLongLittleEndian(longBuff, 0, ZIP_64_SIZE_LIMIT); outputStream.write(longBuff, 0, 4); outputStream.write(longBuff, 0, 4); //2 - file name length //2 - extra field length //variable - file name which can be determined by fileNameLength //2 - Zip64 signature //2 - size of zip64 data //8 - uncompressed size //8 - compressed size int zip64CompressedSizeOffset = 2 + 2 + fileHeader.getFileNameLength() + 2 + 2; if (outputStream.skipBytes(zip64CompressedSizeOffset) != zip64CompressedSizeOffset) { throw new ZipException("Unable to skip " + zip64CompressedSizeOffset + " bytes to update LFH"); } rawIO.writeLongLittleEndian(outputStream, fileHeader.getUncompressedSize()); rawIO.writeLongLittleEndian(outputStream, fileHeader.getCompressedSize()); } else { rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getCompressedSize()); outputStream.write(longBuff, 0, 4); rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getUncompressedSize()); outputStream.write(longBuff, 0, 4); } } private boolean isSplitZipFile(OutputStream outputStream) { if (outputStream instanceof SplitOutputStream) { return ((SplitOutputStream) outputStream).isSplitZipFile(); } else if (outputStream instanceof CountingOutputStream) { return ((CountingOutputStream) outputStream).isSplitZipFile(); } return false; } private int getCurrentSplitFileCounter(OutputStream outputStream) { if (outputStream instanceof SplitOutputStream) { return ((SplitOutputStream) outputStream).getCurrentSplitFileCounter(); } return ((CountingOutputStream) outputStream).getCurrentSplitFileCounter(); } private void writeZipHeaderBytes(ZipModel zipModel, OutputStream outputStream, byte[] buff, Charset charset) throws IOException { if (buff == null) { throw new ZipException("invalid buff to write as zip headers"); } if (outputStream instanceof CountingOutputStream) { if (((CountingOutputStream) outputStream).checkBuffSizeAndStartNextSplitFile(buff.length)) { finalizeZipFile(zipModel, outputStream, charset); return; } } outputStream.write(buff); } private void processHeaderData(ZipModel zipModel, OutputStream outputStream) throws IOException { int currentSplitFileCounter = 0; if (outputStream instanceof OutputStreamWithSplitZipSupport) { zipModel.getEndOfCentralDirectoryRecord().setOffsetOfStartOfCentralDirectory( ((OutputStreamWithSplitZipSupport) outputStream).getFilePointer()); currentSplitFileCounter = ((OutputStreamWithSplitZipSupport) outputStream).getCurrentSplitFileCounter(); } if (zipModel.isZip64Format()) { if (zipModel.getZip64EndOfCentralDirectoryRecord() == null) { zipModel.setZip64EndOfCentralDirectoryRecord(new Zip64EndOfCentralDirectoryRecord()); } if (zipModel.getZip64EndOfCentralDirectoryLocator() == null) { zipModel.setZip64EndOfCentralDirectoryLocator(new Zip64EndOfCentralDirectoryLocator()); } zipModel.getZip64EndOfCentralDirectoryRecord().setOffsetStartCentralDirectoryWRTStartDiskNumber( zipModel.getEndOfCentralDirectoryRecord().getOffsetOfStartOfCentralDirectory()); zipModel.getZip64EndOfCentralDirectoryLocator().setNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord( currentSplitFileCounter); zipModel.getZip64EndOfCentralDirectoryLocator().setTotalNumberOfDiscs(currentSplitFileCounter + 1); } zipModel.getEndOfCentralDirectoryRecord().setNumberOfThisDisk(currentSplitFileCounter); zipModel.getEndOfCentralDirectoryRecord().setNumberOfThisDiskStartOfCentralDir(currentSplitFileCounter); } private void writeCentralDirectory(ZipModel zipModel, ByteArrayOutputStream byteArrayOutputStream, RawIO rawIO, Charset charset) throws ZipException { if (zipModel.getCentralDirectory() == null || zipModel.getCentralDirectory().getFileHeaders() == null || zipModel.getCentralDirectory().getFileHeaders().size() <= 0) { return; } for (FileHeader fileHeader: zipModel.getCentralDirectory().getFileHeaders()) { writeFileHeader(zipModel, fileHeader, byteArrayOutputStream, rawIO, charset); } } private void writeFileHeader(ZipModel zipModel, FileHeader fileHeader, ByteArrayOutputStream byteArrayOutputStream, RawIO rawIO, Charset charset) throws ZipException { if (fileHeader == null) { throw new ZipException("input parameters is null, cannot write local file header"); } try { final byte[] emptyShortByte = {0, 0}; boolean writeZip64ExtendedInfo = isZip64Entry(fileHeader); rawIO.writeIntLittleEndian(byteArrayOutputStream, (int) fileHeader.getSignature().getValue()); rawIO.writeShortLittleEndian(byteArrayOutputStream, fileHeader.getVersionMadeBy()); rawIO.writeShortLittleEndian(byteArrayOutputStream, fileHeader.getVersionNeededToExtract()); byteArrayOutputStream.write(fileHeader.getGeneralPurposeFlag()); rawIO.writeShortLittleEndian(byteArrayOutputStream, fileHeader.getCompressionMethod().getCode()); rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getLastModifiedTime()); byteArrayOutputStream.write(longBuff, 0, 4); rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getCrc()); byteArrayOutputStream.write(longBuff, 0, 4); if (writeZip64ExtendedInfo) { rawIO.writeLongLittleEndian(longBuff, 0, ZIP_64_SIZE_LIMIT); byteArrayOutputStream.write(longBuff, 0, 4); byteArrayOutputStream.write(longBuff, 0, 4); zipModel.setZip64Format(true); } else { rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getCompressedSize()); byteArrayOutputStream.write(longBuff, 0, 4); rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getUncompressedSize()); byteArrayOutputStream.write(longBuff, 0, 4); } byte[] fileNameBytes = new byte[0]; if (isStringNotNullAndNotEmpty(fileHeader.getFileName())) { fileNameBytes = getBytesFromString(fileHeader.getFileName(), charset); } rawIO.writeShortLittleEndian(byteArrayOutputStream, fileNameBytes.length); //Compute offset bytes before extra field is written for Zip64 compatibility //NOTE: this data is not written now, but written at a later point byte[] offsetLocalHeaderBytes = new byte[4]; if (writeZip64ExtendedInfo) { rawIO.writeLongLittleEndian(longBuff, 0, ZIP_64_SIZE_LIMIT); System.arraycopy(longBuff, 0, offsetLocalHeaderBytes, 0, 4); } else { rawIO.writeLongLittleEndian(longBuff, 0, fileHeader.getOffsetLocalHeader()); System.arraycopy(longBuff, 0, offsetLocalHeaderBytes, 0, 4); } int extraFieldLength = calculateExtraDataRecordsSize(fileHeader, writeZip64ExtendedInfo); rawIO.writeShortLittleEndian(byteArrayOutputStream, extraFieldLength); String fileComment = fileHeader.getFileComment(); byte[] fileCommentBytes = new byte[0]; if (isStringNotNullAndNotEmpty(fileComment)) { fileCommentBytes = getBytesFromString(fileComment, charset); } rawIO.writeShortLittleEndian(byteArrayOutputStream, fileCommentBytes.length); if (writeZip64ExtendedInfo) { rawIO.writeIntLittleEndian(intBuff, 0, ZIP_64_NUMBER_OF_ENTRIES_LIMIT); byteArrayOutputStream.write(intBuff, 0, 2); } else { rawIO.writeShortLittleEndian(byteArrayOutputStream, fileHeader.getDiskNumberStart()); } byteArrayOutputStream.write(emptyShortByte); //External file attributes byteArrayOutputStream.write(fileHeader.getExternalFileAttributes()); //offset local header - this data is computed above byteArrayOutputStream.write(offsetLocalHeaderBytes); if (fileNameBytes.length > 0) { byteArrayOutputStream.write(fileNameBytes); } if (writeZip64ExtendedInfo) { zipModel.setZip64Format(true); //Zip64 header rawIO.writeShortLittleEndian(byteArrayOutputStream, (int) HeaderSignature.ZIP64_EXTRA_FIELD_SIGNATURE.getValue()); //size of data rawIO.writeShortLittleEndian(byteArrayOutputStream, ZIP64_EXTRA_DATA_RECORD_SIZE_FH); rawIO.writeLongLittleEndian(byteArrayOutputStream, fileHeader.getUncompressedSize()); rawIO.writeLongLittleEndian(byteArrayOutputStream, fileHeader.getCompressedSize()); rawIO.writeLongLittleEndian(byteArrayOutputStream, fileHeader.getOffsetLocalHeader()); rawIO.writeIntLittleEndian(byteArrayOutputStream, fileHeader.getDiskNumberStart()); } if (fileHeader.getAesExtraDataRecord() != null) { AESExtraDataRecord aesExtraDataRecord = fileHeader.getAesExtraDataRecord(); rawIO.writeShortLittleEndian(byteArrayOutputStream, (int) aesExtraDataRecord.getSignature().getValue()); rawIO.writeShortLittleEndian(byteArrayOutputStream, aesExtraDataRecord.getDataSize()); rawIO.writeShortLittleEndian(byteArrayOutputStream, aesExtraDataRecord.getAesVersion().getVersionNumber()); byteArrayOutputStream.write(aesExtraDataRecord.getVendorID().getBytes()); byte[] aesStrengthBytes = new byte[1]; aesStrengthBytes[0] = (byte) aesExtraDataRecord.getAesKeyStrength().getRawCode(); byteArrayOutputStream.write(aesStrengthBytes); rawIO.writeShortLittleEndian(byteArrayOutputStream, aesExtraDataRecord.getCompressionMethod().getCode()); } writeRemainingExtraDataRecordsIfPresent(fileHeader, byteArrayOutputStream); if (fileCommentBytes.length > 0) { byteArrayOutputStream.write(fileCommentBytes); } } catch (Exception e) { throw new ZipException(e); } } private int calculateExtraDataRecordsSize(FileHeader fileHeader, boolean writeZip64ExtendedInfo) { int extraFieldLength = 0; if (writeZip64ExtendedInfo) { extraFieldLength += ZIP64_EXTRA_DATA_RECORD_SIZE_FH + 4; // 4 for signature + size of record } if (fileHeader.getAesExtraDataRecord() != null) { extraFieldLength += AES_EXTRA_DATA_RECORD_SIZE; } if (fileHeader.getExtraDataRecords() != null) { for (ExtraDataRecord extraDataRecord : fileHeader.getExtraDataRecords()) { if (extraDataRecord.getHeader() == HeaderSignature.AES_EXTRA_DATA_RECORD.getValue() || extraDataRecord.getHeader() == HeaderSignature.ZIP64_EXTRA_FIELD_SIGNATURE.getValue()) { continue; } extraFieldLength += 4 + extraDataRecord.getSizeOfData(); // 4 = 2 for header + 2 for size of data } } return extraFieldLength; } private void writeRemainingExtraDataRecordsIfPresent(FileHeader fileHeader, OutputStream outputStream) throws IOException { if (fileHeader.getExtraDataRecords() == null || fileHeader.getExtraDataRecords().size() == 0) { return; } for (ExtraDataRecord extraDataRecord : fileHeader.getExtraDataRecords()) { if (extraDataRecord.getHeader() == HeaderSignature.AES_EXTRA_DATA_RECORD.getValue() || extraDataRecord.getHeader() == HeaderSignature.ZIP64_EXTRA_FIELD_SIGNATURE.getValue()) { continue; } rawIO.writeShortLittleEndian(outputStream, (int) extraDataRecord.getHeader()); rawIO.writeShortLittleEndian(outputStream, extraDataRecord.getSizeOfData()); if (extraDataRecord.getSizeOfData() > 0 && extraDataRecord.getData() != null) { outputStream.write(extraDataRecord.getData()); } } } private void writeZip64EndOfCentralDirectoryRecord(Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord, ByteArrayOutputStream byteArrayOutputStream, RawIO rawIO) throws IOException { rawIO.writeIntLittleEndian(byteArrayOutputStream, (int) zip64EndOfCentralDirectoryRecord.getSignature().getValue()); rawIO.writeLongLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getSizeOfZip64EndCentralDirectoryRecord()); rawIO.writeShortLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getVersionMadeBy()); rawIO.writeShortLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getVersionNeededToExtract()); rawIO.writeIntLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getNumberOfThisDisk()); rawIO.writeIntLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getNumberOfThisDiskStartOfCentralDirectory()); rawIO.writeLongLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectoryOnThisDisk()); rawIO.writeLongLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectory()); rawIO.writeLongLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getSizeOfCentralDirectory()); rawIO.writeLongLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryRecord.getOffsetStartCentralDirectoryWRTStartDiskNumber()); } private void writeZip64EndOfCentralDirectoryLocator(Zip64EndOfCentralDirectoryLocator zip64EndOfCentralDirectoryLocator, ByteArrayOutputStream byteArrayOutputStream, RawIO rawIO) throws IOException { rawIO.writeIntLittleEndian(byteArrayOutputStream, (int) HeaderSignature.ZIP64_END_CENTRAL_DIRECTORY_LOCATOR.getValue()); rawIO.writeIntLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryLocator.getNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord()); rawIO.writeLongLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryLocator.getOffsetZip64EndOfCentralDirectoryRecord()); rawIO.writeIntLittleEndian(byteArrayOutputStream, zip64EndOfCentralDirectoryLocator.getTotalNumberOfDiscs()); } private void writeEndOfCentralDirectoryRecord(ZipModel zipModel, int sizeOfCentralDir, long offsetCentralDir, ByteArrayOutputStream byteArrayOutputStream, RawIO rawIO, Charset charset) throws IOException { byte[] longByte = new byte[8]; rawIO.writeIntLittleEndian(byteArrayOutputStream, (int) HeaderSignature.END_OF_CENTRAL_DIRECTORY.getValue()); rawIO.writeShortLittleEndian(byteArrayOutputStream, zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()); rawIO.writeShortLittleEndian(byteArrayOutputStream, zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDiskStartOfCentralDir()); long numEntries = zipModel.getCentralDirectory().getFileHeaders().size(); long numEntriesOnThisDisk = numEntries; if (zipModel.isSplitArchive()) { numEntriesOnThisDisk = countNumberOfFileHeaderEntriesOnDisk(zipModel.getCentralDirectory().getFileHeaders(), zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()); } if (numEntriesOnThisDisk > InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT) { numEntriesOnThisDisk = InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT; } rawIO.writeShortLittleEndian(byteArrayOutputStream, (int) numEntriesOnThisDisk); if (numEntries > InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT) { numEntries = InternalZipConstants.ZIP_64_NUMBER_OF_ENTRIES_LIMIT; } rawIO.writeShortLittleEndian(byteArrayOutputStream, (int) numEntries); rawIO.writeIntLittleEndian(byteArrayOutputStream, sizeOfCentralDir); if (offsetCentralDir > ZIP_64_SIZE_LIMIT) { rawIO.writeLongLittleEndian(longByte, 0, ZIP_64_SIZE_LIMIT); byteArrayOutputStream.write(longByte, 0, 4); } else { rawIO.writeLongLittleEndian(longByte, 0, offsetCentralDir); byteArrayOutputStream.write(longByte, 0, 4); } String comment = zipModel.getEndOfCentralDirectoryRecord().getComment(); if (isStringNotNullAndNotEmpty(comment)) { byte[] commentBytes = getBytesFromString(comment, charset); rawIO.writeShortLittleEndian(byteArrayOutputStream, commentBytes.length); byteArrayOutputStream.write(commentBytes); } else { rawIO.writeShortLittleEndian(byteArrayOutputStream, 0); } } private long countNumberOfFileHeaderEntriesOnDisk(List fileHeaders, int numOfDisk) throws ZipException { if (fileHeaders == null) { throw new ZipException("file headers are null, cannot calculate number of entries on this disk"); } int noEntries = 0; for (FileHeader fileHeader : fileHeaders) { if (fileHeader.getDiskNumberStart() == numOfDisk) { noEntries++; } } return noEntries; } private boolean isZip64Entry(FileHeader fileHeader) { return fileHeader.getCompressedSize() >= ZIP_64_SIZE_LIMIT || fileHeader.getUncompressedSize() >= ZIP_64_SIZE_LIMIT || fileHeader.getOffsetLocalHeader() >= ZIP_64_SIZE_LIMIT || fileHeader.getDiskNumberStart() >= ZIP_64_NUMBER_OF_ENTRIES_LIMIT; } private long getOffsetOfCentralDirectory(ZipModel zipModel) { if (zipModel.isZip64Format() && zipModel.getZip64EndOfCentralDirectoryRecord() != null && zipModel.getZip64EndOfCentralDirectoryRecord().getOffsetStartCentralDirectoryWRTStartDiskNumber() != -1) { return zipModel.getZip64EndOfCentralDirectoryRecord().getOffsetStartCentralDirectoryWRTStartDiskNumber(); } return zipModel.getEndOfCentralDirectoryRecord().getOffsetOfStartOfCentralDirectory(); } private Zip64EndOfCentralDirectoryRecord buildZip64EndOfCentralDirectoryRecord(ZipModel zipModel, int sizeOfCentralDir, long offsetCentralDir) throws ZipException { Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = new Zip64EndOfCentralDirectoryRecord(); zip64EndOfCentralDirectoryRecord.setSignature(HeaderSignature.ZIP64_END_CENTRAL_DIRECTORY_RECORD); zip64EndOfCentralDirectoryRecord.setSizeOfZip64EndCentralDirectoryRecord(44); if (zipModel.getCentralDirectory() != null && zipModel.getCentralDirectory().getFileHeaders() != null && zipModel.getCentralDirectory().getFileHeaders().size() > 0) { FileHeader firstFileHeader = zipModel.getCentralDirectory().getFileHeaders().get(0); zip64EndOfCentralDirectoryRecord.setVersionMadeBy(firstFileHeader.getVersionMadeBy()); zip64EndOfCentralDirectoryRecord.setVersionNeededToExtract(firstFileHeader.getVersionNeededToExtract()); } zip64EndOfCentralDirectoryRecord.setNumberOfThisDisk(zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()); zip64EndOfCentralDirectoryRecord.setNumberOfThisDiskStartOfCentralDirectory(zipModel.getEndOfCentralDirectoryRecord() .getNumberOfThisDiskStartOfCentralDir()); long numEntries = zipModel.getCentralDirectory().getFileHeaders().size(); long numEntriesOnThisDisk = numEntries; if (zipModel.isSplitArchive()) { numEntriesOnThisDisk = countNumberOfFileHeaderEntriesOnDisk(zipModel.getCentralDirectory().getFileHeaders(), zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()); } zip64EndOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectoryOnThisDisk(numEntriesOnThisDisk); zip64EndOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectory(numEntries); zip64EndOfCentralDirectoryRecord.setSizeOfCentralDirectory(sizeOfCentralDir); zip64EndOfCentralDirectoryRecord.setOffsetStartCentralDirectoryWRTStartDiskNumber(offsetCentralDir); return zip64EndOfCentralDirectoryRecord; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/VersionMadeBy.java000066400000000000000000000004221414265447200254500ustar00rootroot00000000000000package net.lingala.zip4j.headers; public enum VersionMadeBy { SPECIFICATION_VERSION((byte) 51), WINDOWS((byte) 0), UNIX((byte) 3); private final byte code; VersionMadeBy(byte code) { this.code = code; } public byte getCode() { return code; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/headers/VersionNeededToExtract.java000066400000000000000000000004511414265447200273330ustar00rootroot00000000000000package net.lingala.zip4j.headers; public enum VersionNeededToExtract { DEFAULT(10), DEFLATE_COMPRESSED(20), ZIP_64_FORMAT(45), AES_ENCRYPTED(51); private final int code; VersionNeededToExtract(int code) { this.code = code; } public int getCode() { return code; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/000077500000000000000000000000001414265447200210745ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/000077500000000000000000000000001414265447200234475ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/AesCipherInputStream.java000066400000000000000000000143541414265447200303600ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.crypto.AESDecrypter; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.Zip4jUtil; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import static net.lingala.zip4j.util.InternalZipConstants.AES_AUTH_LENGTH; import static net.lingala.zip4j.util.Zip4jUtil.readFully; class AesCipherInputStream extends CipherInputStream { private byte[] singleByteBuffer = new byte[1]; private byte[] aes16ByteBlock = new byte[16]; private int aes16ByteBlockPointer = 0; private int remainingAes16ByteBlockLength = 0; private int lengthToRead = 0; private int offsetWithAesBlock = 0; private int bytesCopiedInThisIteration = 0; private int lengthToCopyInThisIteration = 0; private int aes16ByteBlockReadLength = 0; public AesCipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeader localFileHeader, char[] password, int bufferSize) throws IOException { super(zipEntryInputStream, localFileHeader, password, bufferSize); } @Override protected AESDecrypter initializeDecrypter(LocalFileHeader localFileHeader, char[] password) throws IOException { return new AESDecrypter(localFileHeader.getAesExtraDataRecord(), password, getSalt(localFileHeader), getPasswordVerifier()); } @Override public int read() throws IOException { int readLen = read(singleByteBuffer); if (readLen == -1) { return -1; } return singleByteBuffer[0]; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { lengthToRead = len; offsetWithAesBlock = off; bytesCopiedInThisIteration = 0; if (remainingAes16ByteBlockLength != 0) { copyBytesFromBuffer(b, offsetWithAesBlock); if (bytesCopiedInThisIteration == len) { return bytesCopiedInThisIteration; } } if (lengthToRead < 16) { aes16ByteBlockReadLength = super.read(aes16ByteBlock, 0, aes16ByteBlock.length); aes16ByteBlockPointer = 0; if (aes16ByteBlockReadLength == -1) { remainingAes16ByteBlockLength = 0; if (bytesCopiedInThisIteration > 0) { return bytesCopiedInThisIteration; } return -1; } remainingAes16ByteBlockLength = aes16ByteBlockReadLength; copyBytesFromBuffer(b, offsetWithAesBlock); if (bytesCopiedInThisIteration == len) { return bytesCopiedInThisIteration; } } int readLen = super.read(b, offsetWithAesBlock, (lengthToRead - lengthToRead %16)); if (readLen == -1) { if (bytesCopiedInThisIteration > 0) { return bytesCopiedInThisIteration; } else { return -1; } } else { return readLen + bytesCopiedInThisIteration; } } private void copyBytesFromBuffer(byte[] b, int off) { lengthToCopyInThisIteration = lengthToRead < remainingAes16ByteBlockLength ? lengthToRead : remainingAes16ByteBlockLength; System.arraycopy(aes16ByteBlock, aes16ByteBlockPointer, b, off, lengthToCopyInThisIteration); incrementAesByteBlockPointer(lengthToCopyInThisIteration); decrementRemainingAesBytesLength(lengthToCopyInThisIteration); bytesCopiedInThisIteration += lengthToCopyInThisIteration; lengthToRead -= lengthToCopyInThisIteration; offsetWithAesBlock += lengthToCopyInThisIteration; } @Override protected void endOfEntryReached(InputStream inputStream) throws IOException { verifyContent(readStoredMac(inputStream)); } private void verifyContent(byte[] storedMac) throws IOException { if (getLocalFileHeader().isDataDescriptorExists() && CompressionMethod.DEFLATE.equals(Zip4jUtil.getCompressionMethod(getLocalFileHeader()))) { // Skip content verification in case of Deflate compression and if data descriptor exists. // In this case, we do not know the exact size of compressed data before hand and it is possible that we read // and pass more than required data into inflater, thereby corrupting the aes mac bytes. // See usage of PushBackInputStream in the project for how this push back of data is done // Unfortunately, in this case we cannot perform a content verification and have to skip return; } byte[] calculatedMac = getDecrypter().getCalculatedAuthenticationBytes(); byte[] first10BytesOfCalculatedMac = new byte[AES_AUTH_LENGTH]; System.arraycopy(calculatedMac, 0, first10BytesOfCalculatedMac, 0, InternalZipConstants.AES_AUTH_LENGTH); if (!Arrays.equals(storedMac, first10BytesOfCalculatedMac)) { throw new IOException("Reached end of data for this entry, but aes verification failed"); } } protected byte[] readStoredMac(InputStream inputStream) throws IOException { byte[] storedMac = new byte[AES_AUTH_LENGTH]; int readLen = readFully(inputStream, storedMac); if (readLen != AES_AUTH_LENGTH) { throw new ZipException("Invalid AES Mac bytes. Could not read sufficient data"); } return storedMac; } private byte[] getSalt(LocalFileHeader localFileHeader) throws IOException { if (localFileHeader.getAesExtraDataRecord() == null) { throw new IOException("invalid aes extra data record"); } AESExtraDataRecord aesExtraDataRecord = localFileHeader.getAesExtraDataRecord(); byte[] saltBytes = new byte[aesExtraDataRecord.getAesKeyStrength().getSaltLength()]; readRaw(saltBytes); return saltBytes; } private byte[] getPasswordVerifier() throws IOException { byte[] pvBytes = new byte[2]; readRaw(pvBytes); return pvBytes; } private void incrementAesByteBlockPointer(int incrementBy) { aes16ByteBlockPointer += incrementBy; if (aes16ByteBlockPointer >= 15) { aes16ByteBlockPointer = 15; } } private void decrementRemainingAesBytesLength(int decrementBy) { remainingAes16ByteBlockLength -= decrementBy; if (remainingAes16ByteBlockLength <= 0) { remainingAes16ByteBlockLength = 0; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/CipherInputStream.java000066400000000000000000000052121414265447200277200ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.crypto.Decrypter; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.util.Zip4jUtil; import java.io.IOException; import java.io.InputStream; import static net.lingala.zip4j.util.Zip4jUtil.readFully; abstract class CipherInputStream extends InputStream { private ZipEntryInputStream zipEntryInputStream; private T decrypter; private byte[] lastReadRawDataCache; private byte[] singleByteBuffer = new byte[1]; private LocalFileHeader localFileHeader; public CipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeader localFileHeader, char[] password, int bufferSize) throws IOException { this.zipEntryInputStream = zipEntryInputStream; this.decrypter = initializeDecrypter(localFileHeader, password); this.localFileHeader = localFileHeader; if (Zip4jUtil.getCompressionMethod(localFileHeader).equals(CompressionMethod.DEFLATE)) { lastReadRawDataCache = new byte[bufferSize]; } } @Override public int read() throws IOException { int readLen = read(singleByteBuffer); if (readLen == -1) { return -1; } return singleByteBuffer[0] & 0xff; } @Override public int read(byte[] b) throws IOException { return this.read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { int readLen = readFully(zipEntryInputStream, b, off, len); if (readLen > 0) { cacheRawData(b, readLen); decrypter.decryptData(b, off, readLen); } return readLen; } @Override public void close() throws IOException { zipEntryInputStream.close(); } public byte[] getLastReadRawDataCache() { return lastReadRawDataCache; } protected int readRaw(byte[] b) throws IOException { return zipEntryInputStream.readRawFully(b); } private void cacheRawData(byte[] b, int len) { if (lastReadRawDataCache != null) { System.arraycopy(b, 0, lastReadRawDataCache, 0, len); } } public T getDecrypter() { return decrypter; } protected void endOfEntryReached(InputStream inputStream) throws IOException { // is optional but useful for AES } protected long getNumberOfBytesReadForThisEntry() { return zipEntryInputStream.getNumberOfBytesRead(); } public LocalFileHeader getLocalFileHeader() { return localFileHeader; } protected abstract T initializeDecrypter(LocalFileHeader localFileHeader, char[] password) throws IOException, ZipException; } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/DecompressedInputStream.java000066400000000000000000000024301414265447200311220ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; abstract class DecompressedInputStream extends InputStream { private CipherInputStream cipherInputStream; protected byte[] oneByteBuffer = new byte[1]; public DecompressedInputStream(CipherInputStream cipherInputStream) { this.cipherInputStream = cipherInputStream; } @Override public int read() throws IOException { int readLen = read(oneByteBuffer); if (readLen == -1) { return -1; } return oneByteBuffer[0]; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { return cipherInputStream.read(b, off, len); } @Override public void close() throws IOException { cipherInputStream.close(); } public void endOfEntryReached(InputStream inputStream) throws IOException { cipherInputStream.endOfEntryReached(inputStream); } public void pushBackInputStreamIfNecessary(PushbackInputStream pushbackInputStream) throws IOException { // Do nothing by default } protected byte[] getLastReadRawDataCache() { return cipherInputStream.getLastReadRawDataCache(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/InflaterInputStream.java000066400000000000000000000042241414265447200302540ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import java.util.zip.DataFormatException; import java.util.zip.Inflater; public class InflaterInputStream extends DecompressedInputStream { private Inflater inflater; private byte[] buff; private byte[] singleByteBuffer = new byte[1]; private int len; public InflaterInputStream(CipherInputStream cipherInputStream, int bufferSize) { super(cipherInputStream); this.inflater = new Inflater(true); buff = new byte[bufferSize]; } @Override public int read() throws IOException { int readLen = read(singleByteBuffer); if (readLen == -1) { return -1; } return singleByteBuffer[0]; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { try { int n; while ((n = inflater.inflate(b, off, len)) == 0) { if (inflater.finished() || inflater.needsDictionary()) { return -1; } if (inflater.needsInput()) { fill(); } } return n; } catch (DataFormatException e) { throw new IOException(e); } } @Override public void endOfEntryReached(InputStream inputStream) throws IOException { if (inflater != null) { inflater.end(); inflater = null; } super.endOfEntryReached(inputStream); } @Override public void pushBackInputStreamIfNecessary(PushbackInputStream pushbackInputStream) throws IOException { int n = inflater.getRemaining(); if (n > 0) { byte[] rawDataCache = getLastReadRawDataCache(); pushbackInputStream.unread(rawDataCache, len - n, n); } } @Override public void close() throws IOException { if (inflater != null) { inflater.end(); } super.close(); } private void fill() throws IOException { len = super.read(buff, 0, buff.length); if (len == -1) { throw new EOFException("Unexpected end of input stream"); } inflater.setInput(buff, 0, len); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/NoCipherInputStream.java000066400000000000000000000014131414265447200302140ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.crypto.Decrypter; import net.lingala.zip4j.model.LocalFileHeader; import java.io.IOException; class NoCipherInputStream extends CipherInputStream { public NoCipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeader localFileHeader, char[] password, int bufferSize) throws IOException { super(zipEntryInputStream, localFileHeader, password, bufferSize); } @Override protected Decrypter initializeDecrypter(LocalFileHeader localFileHeader, char[] password) { return new NoDecrypter(); } static class NoDecrypter implements Decrypter { @Override public int decryptData(byte[] buff, int start, int len) { return len; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/NumberedSplitInputStream.java000066400000000000000000000017601414265447200312670ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import static net.lingala.zip4j.util.FileUtils.getNextNumberedSplitFileCounterAsExtension; /** * A split input stream for zip file split with 7-zip. They end with .zip.001, .zip.002, etc */ public class NumberedSplitInputStream extends SplitInputStream { public NumberedSplitInputStream(File zipFile, boolean isSplitZipArchive, int lastSplitZipFileNumber) throws FileNotFoundException { super(zipFile, isSplitZipArchive, lastSplitZipFileNumber); } @Override protected File getNextSplitFile(int zipFileIndex) throws IOException { String currZipFileNameWithPath = zipFile.getCanonicalPath(); String fileNameWithPathAndWithoutExtension = currZipFileNameWithPath.substring(0, currZipFileNameWithPath.lastIndexOf(".")); return new File(fileNameWithPathAndWithoutExtension + getNextNumberedSplitFileCounterAsExtension(zipFileIndex)); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/NumberedSplitRandomAccessFile.java000066400000000000000000000121241414265447200321520ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.util.FileUtils; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; /** * A RandomAccessFile which reads files split with 7-zip format (.z001, .z002, etc) as a single file making it easier * for calling methods to deal with opening appropriate split file to read */ public class NumberedSplitRandomAccessFile extends RandomAccessFile { private long splitLength; private File[] allSortedSplitFiles; private RandomAccessFile randomAccessFile; private byte[] singleByteBuffer = new byte[1]; private int currentOpenSplitFileCounter = 0; private String rwMode; public NumberedSplitRandomAccessFile(String name, String mode) throws IOException { this(new File(name), mode); } public NumberedSplitRandomAccessFile(File file, String mode) throws IOException { this(file, mode, FileUtils.getAllSortedNumberedSplitFiles(file)); } public NumberedSplitRandomAccessFile(File file, String mode, File[] allSortedSplitFiles) throws IOException { super(file, mode); // A (dirty) hack to be able to open any split file without relying on the Parent class // For that the parent handle is closed, and a new RandomAccessFile is initiated // This makes it possible for this class to still extend RandomAccessFile and be able to open any split file // without calling code having to worry about opening a split file. Code using this class can read the // split files as if it were one file. zip4j uses RandomAccessFile in a lot of places. This hack allows to deal // with split files with RandomAccessFile without having to modify a lot of code, especially for a feature // that will not be used most often super.close(); if (RandomAccessFileMode.WRITE.getValue().equals(mode)) { throw new IllegalArgumentException("write mode is not allowed for NumberedSplitRandomAccessFile"); } assertAllSplitFilesExist(allSortedSplitFiles); this.randomAccessFile = new RandomAccessFile(file, mode); this.allSortedSplitFiles = allSortedSplitFiles; this.splitLength = file.length(); this.rwMode = mode; } @Override public int read() throws IOException { int readLen = read(singleByteBuffer); if (readLen == -1) { return -1; } return singleByteBuffer[0] & 0xff; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { int readLen = randomAccessFile.read(b, off, len); if (readLen == -1) { if (currentOpenSplitFileCounter == allSortedSplitFiles.length - 1) { return -1; } openRandomAccessFileForIndex(currentOpenSplitFileCounter + 1); return read(b, off, len); } return readLen; } @Override public void write(int b) throws IOException { throw new UnsupportedOperationException(); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } @Override public void write(byte[] b, int off, int len) throws IOException { throw new UnsupportedOperationException(); } @Override public void seek(long pos) throws IOException { int splitPartOfPosition = (int) (pos / splitLength); if (splitPartOfPosition != currentOpenSplitFileCounter) { openRandomAccessFileForIndex(splitPartOfPosition); } randomAccessFile.seek(pos - (splitPartOfPosition * splitLength)); } @Override public long getFilePointer() throws IOException { return randomAccessFile.getFilePointer(); } @Override public long length() throws IOException { return randomAccessFile.length(); } public void seekInCurrentPart(long pos) throws IOException { randomAccessFile.seek(pos); } public void openLastSplitFileForReading() throws IOException { openRandomAccessFileForIndex(allSortedSplitFiles.length - 1); } private void openRandomAccessFileForIndex(int splitCounter) throws IOException { if (currentOpenSplitFileCounter == splitCounter) { return; } if (splitCounter > allSortedSplitFiles.length - 1) { throw new IOException("split counter greater than number of split files"); } if (randomAccessFile != null) { randomAccessFile.close(); } randomAccessFile = new RandomAccessFile(allSortedSplitFiles[splitCounter], rwMode); currentOpenSplitFileCounter = splitCounter; } private void assertAllSplitFilesExist(File[] allSortedSplitFiles) throws IOException { int splitCounter = 1; for (File splitFile : allSortedSplitFiles) { String fileExtension = FileUtils.getFileExtension(splitFile); try { if (splitCounter != Integer.parseInt(fileExtension)) { throw new IOException("Split file number " + splitCounter + " does not exist"); } splitCounter++; } catch (NumberFormatException e) { throw new IOException("Split file extension not in expected format. Found: " + fileExtension + " expected of format: .001, .002, etc"); } } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/SplitInputStream.java000066400000000000000000000052571414265447200276120ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; public abstract class SplitInputStream extends InputStream { protected RandomAccessFile randomAccessFile; protected File zipFile; private boolean isSplitZipArchive; private int currentSplitFileCounter = 0; private byte[] singleByteArray = new byte[1]; public SplitInputStream(File zipFile, boolean isSplitZipArchive, int lastSplitZipFileNumber) throws FileNotFoundException { this.randomAccessFile = new RandomAccessFile(zipFile, RandomAccessFileMode.READ.getValue()); this.zipFile = zipFile; this.isSplitZipArchive = isSplitZipArchive; if (isSplitZipArchive) { currentSplitFileCounter = lastSplitZipFileNumber; } } @Override public int read() throws IOException { int readLen = read(singleByteArray); if (readLen == -1) { return -1; } return singleByteArray[0]; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { int readLen = randomAccessFile.read(b, off, len); if ((readLen != len || readLen == -1) && isSplitZipArchive) { openRandomAccessFileForIndex(currentSplitFileCounter + 1); currentSplitFileCounter++; if (readLen < 0) readLen = 0; int newlyRead = randomAccessFile.read(b, readLen, len - readLen); if (newlyRead > 0) readLen += newlyRead; } return readLen; } public void prepareExtractionForFileHeader(FileHeader fileHeader) throws IOException { if (isSplitZipArchive && (currentSplitFileCounter != fileHeader.getDiskNumberStart())) { openRandomAccessFileForIndex(fileHeader.getDiskNumberStart()); currentSplitFileCounter = fileHeader.getDiskNumberStart(); } randomAccessFile.seek(fileHeader.getOffsetLocalHeader()); } protected void openRandomAccessFileForIndex(int zipFileIndex) throws IOException { File nextSplitFile = getNextSplitFile(zipFileIndex); if (!nextSplitFile.exists()) { throw new FileNotFoundException("zip split file does not exist: " + nextSplitFile); } randomAccessFile.close(); randomAccessFile = new RandomAccessFile(nextSplitFile, RandomAccessFileMode.READ.getValue()); } protected abstract File getNextSplitFile(int zipFileIndex) throws IOException; @Override public void close() throws IOException { if (randomAccessFile != null) { randomAccessFile.close(); } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/StoreInputStream.java000066400000000000000000000003121414265447200275760ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; class StoreInputStream extends DecompressedInputStream { public StoreInputStream(CipherInputStream cipherInputStream) { super(cipherInputStream); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/ZipEntryInputStream.java000066400000000000000000000043761414265447200303040ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import java.io.IOException; import java.io.InputStream; class ZipEntryInputStream extends InputStream { private static final int MAX_RAW_READ_FULLY_RETRY_ATTEMPTS = 15; private InputStream inputStream; private long numberOfBytesRead = 0; private byte[] singleByteArray = new byte[1]; private long compressedSize; public ZipEntryInputStream(InputStream inputStream, long compressedSize) { this.inputStream = inputStream; this.compressedSize = compressedSize; } @Override public int read() throws IOException { int readLen = read(singleByteArray); if (readLen == -1) { return -1; } return singleByteArray[0]; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { if (compressedSize != -1) { if (numberOfBytesRead >= compressedSize) { return -1; } if (len > compressedSize - numberOfBytesRead) { len = (int) (compressedSize - numberOfBytesRead); } } int readLen = inputStream.read(b, off, len); if (readLen > 0) { numberOfBytesRead += readLen; } return readLen; } public int readRawFully(byte[] b) throws IOException { int readLen = inputStream.read(b); if (readLen != b.length) { readLen = readUntilBufferIsFull(b, readLen); if (readLen != b.length) { throw new IOException("Cannot read fully into byte buffer"); } } return readLen; } private int readUntilBufferIsFull(byte[] b, int readLength) throws IOException { int remainingLength = b.length - readLength; int loopReadLength = 0; int retryAttempt = 0; while (readLength < b.length && loopReadLength != -1 && retryAttempt < MAX_RAW_READ_FULLY_RETRY_ATTEMPTS) { loopReadLength += inputStream.read(b, readLength, remainingLength); if (loopReadLength > 0) { readLength += loopReadLength; remainingLength -= loopReadLength; } retryAttempt++; } return readLength; } @Override public void close() throws IOException { inputStream.close(); } public long getNumberOfBytesRead() { return numberOfBytesRead; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/ZipInputStream.java000077500000000000000000000340221414265447200272540ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.io.inputstream; import static net.lingala.zip4j.util.InternalZipConstants.MIN_BUFF_SIZE; import static net.lingala.zip4j.util.Zip4jUtil.getCompressionMethod; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderReader; import net.lingala.zip4j.headers.HeaderSignature; import net.lingala.zip4j.model.DataDescriptor; import net.lingala.zip4j.model.ExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.PasswordCallback; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import java.nio.charset.Charset; import java.util.List; import java.util.zip.CRC32; public class ZipInputStream extends InputStream { private PushbackInputStream inputStream; private DecompressedInputStream decompressedInputStream; private HeaderReader headerReader = new HeaderReader(); private char[] password; private PasswordCallback passwordCallback; private LocalFileHeader localFileHeader; private CRC32 crc32 = new CRC32(); private byte[] endOfEntryBuffer; private boolean canSkipExtendedLocalFileHeader = false; private Zip4jConfig zip4jConfig; private boolean streamClosed = false; private boolean entryEOFReached = false; public ZipInputStream(InputStream inputStream) { this(inputStream, (char[]) null, (Charset) null); } public ZipInputStream(InputStream inputStream, Charset charset) { this(inputStream, (char[]) null, charset); } public ZipInputStream(InputStream inputStream, char[] password) { this(inputStream, password, (Charset) null); } public ZipInputStream(InputStream inputStream, PasswordCallback passwordCallback) { this(inputStream, passwordCallback, (Charset) null); } public ZipInputStream(InputStream inputStream, char[] password, Charset charset) { this(inputStream, password, new Zip4jConfig(charset, InternalZipConstants.BUFF_SIZE)); } public ZipInputStream(InputStream inputStream, PasswordCallback passwordCallback, Charset charset) { this(inputStream, passwordCallback, new Zip4jConfig(charset, InternalZipConstants.BUFF_SIZE)); } public ZipInputStream(InputStream inputStream, char[] password, Zip4jConfig zip4jConfig) { this(inputStream, password, null, zip4jConfig); } public ZipInputStream(InputStream inputStream, PasswordCallback passwordCallback, Zip4jConfig zip4jConfig) { this(inputStream, null, passwordCallback, zip4jConfig); } private ZipInputStream(InputStream inputStream, char[] password, PasswordCallback passwordCallback, Zip4jConfig zip4jConfig) { if (zip4jConfig.getBufferSize() < InternalZipConstants.MIN_BUFF_SIZE) { throw new IllegalArgumentException("Buffer size cannot be less than " + MIN_BUFF_SIZE + " bytes"); } this.inputStream = new PushbackInputStream(inputStream, zip4jConfig.getBufferSize()); this.password = password; this.passwordCallback = passwordCallback; this.zip4jConfig = zip4jConfig; } public LocalFileHeader getNextEntry() throws IOException { return getNextEntry(null, true); } public LocalFileHeader getNextEntry(FileHeader fileHeader, boolean readUntilEndOfCurrentEntryIfOpen) throws IOException { if (localFileHeader != null && readUntilEndOfCurrentEntryIfOpen) { readUntilEndOfEntry(); } localFileHeader = headerReader.readLocalFileHeader(inputStream, zip4jConfig.getCharset()); if (localFileHeader == null) { return null; } if (localFileHeader.isEncrypted() && password == null && passwordCallback != null) { setPassword(passwordCallback.getPassword()); } verifyLocalFileHeader(localFileHeader); crc32.reset(); if (fileHeader != null) { localFileHeader.setCrc(fileHeader.getCrc()); localFileHeader.setCompressedSize(fileHeader.getCompressedSize()); localFileHeader.setUncompressedSize(fileHeader.getUncompressedSize()); // file header's directory flag is more reliable than local file header's directory flag as file header has // additional external file attributes which has a directory flag defined. In local file header, the only way // to determine if an entry is directory is to check if the file name has a trailing forward slash "/" localFileHeader.setDirectory(fileHeader.isDirectory()); canSkipExtendedLocalFileHeader = true; } else { canSkipExtendedLocalFileHeader = false; } this.decompressedInputStream = initializeEntryInputStream(localFileHeader); this.entryEOFReached = false; return localFileHeader; } @Override public int read() throws IOException { byte[] b = new byte[1]; int readLen = read(b); if (readLen == -1) { return -1; } return b[0] & 0xff; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { if (streamClosed) { throw new IOException("Stream closed"); } if (len < 0) { throw new IllegalArgumentException("Negative read length"); } if (len == 0) { return 0; } if (localFileHeader == null) { // localfileheader can be null when end of compressed data is reached. If null check is missing, read method will // throw a NPE when end of compressed data is reached and read is called again. return -1; } try { int readLen = decompressedInputStream.read(b, off, len); if (readLen == -1) { endOfCompressedDataReached(); } else { crc32.update(b, off, readLen); } return readLen; } catch (IOException e) { if (isEncryptionMethodZipStandard(localFileHeader)) { throw new ZipException(e.getMessage(), e.getCause(), ZipException.Type.WRONG_PASSWORD); } throw e; } } @Override public void close() throws IOException { if (streamClosed) { return; } if (decompressedInputStream != null) { decompressedInputStream.close(); } this.streamClosed = true; } @Override public int available() throws IOException { assertStreamOpen(); return entryEOFReached ? 0 : 1; } /** * Sets the password for the inputstream. This password will be used for any subsequent encrypted entries that will be * read from this stream. If this method is called when an entry is being read, it has no effect on the read action * of the current entry, and the password will take effect from any subsequent entry reads. * * @param password Password to be used for reading of entries from the zip input stream */ public void setPassword(char[] password) { this.password = password; } private void endOfCompressedDataReached() throws IOException { //With inflater, without knowing the compressed or uncompressed size, we over read necessary data //In such cases, we have to push back the inputstream to the end of data decompressedInputStream.pushBackInputStreamIfNecessary(inputStream); //First signal the end of data for this entry so that ciphers can read any header data if applicable decompressedInputStream.endOfEntryReached(inputStream); readExtendedLocalFileHeaderIfPresent(); verifyCrc(); resetFields(); this.entryEOFReached = true; } private DecompressedInputStream initializeEntryInputStream(LocalFileHeader localFileHeader) throws IOException { ZipEntryInputStream zipEntryInputStream = new ZipEntryInputStream(inputStream, getCompressedSize(localFileHeader)); CipherInputStream cipherInputStream = initializeCipherInputStream(zipEntryInputStream, localFileHeader); return initializeDecompressorForThisEntry(cipherInputStream, localFileHeader); } private CipherInputStream initializeCipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeader localFileHeader) throws IOException { if (!localFileHeader.isEncrypted()) { return new NoCipherInputStream(zipEntryInputStream, localFileHeader, password, zip4jConfig.getBufferSize()); } if (localFileHeader.getEncryptionMethod() == EncryptionMethod.AES) { return new AesCipherInputStream(zipEntryInputStream, localFileHeader, password, zip4jConfig.getBufferSize()); } else if (localFileHeader.getEncryptionMethod() == EncryptionMethod.ZIP_STANDARD) { return new ZipStandardCipherInputStream(zipEntryInputStream, localFileHeader, password, zip4jConfig.getBufferSize()); } else { final String message = String.format("Entry [%s] Strong Encryption not supported", localFileHeader.getFileName()); throw new ZipException(message, ZipException.Type.UNSUPPORTED_ENCRYPTION); } } private DecompressedInputStream initializeDecompressorForThisEntry(CipherInputStream cipherInputStream, LocalFileHeader localFileHeader) { CompressionMethod compressionMethod = getCompressionMethod(localFileHeader); if (compressionMethod == CompressionMethod.DEFLATE) { return new InflaterInputStream(cipherInputStream, zip4jConfig.getBufferSize()); } return new StoreInputStream(cipherInputStream); } private void readExtendedLocalFileHeaderIfPresent() throws IOException { if (!localFileHeader.isDataDescriptorExists() || canSkipExtendedLocalFileHeader) { return; } DataDescriptor dataDescriptor = headerReader.readDataDescriptor(inputStream, checkIfZip64ExtraDataRecordPresentInLFH(localFileHeader.getExtraDataRecords())); localFileHeader.setCompressedSize(dataDescriptor.getCompressedSize()); localFileHeader.setUncompressedSize(dataDescriptor.getUncompressedSize()); localFileHeader.setCrc(dataDescriptor.getCrc()); } private void verifyLocalFileHeader(LocalFileHeader localFileHeader) throws IOException { if (!isEntryDirectory(localFileHeader.getFileName()) && localFileHeader.getCompressionMethod() == CompressionMethod.STORE && localFileHeader.getUncompressedSize() < 0) { throw new IOException("Invalid local file header for: " + localFileHeader.getFileName() + ". Uncompressed size has to be set for entry of compression type store which is not a directory"); } } private boolean checkIfZip64ExtraDataRecordPresentInLFH(List extraDataRecords) { if (extraDataRecords == null) { return false; } for (ExtraDataRecord extraDataRecord : extraDataRecords) { if (extraDataRecord.getHeader() == HeaderSignature.ZIP64_EXTRA_FIELD_SIGNATURE.getValue()) { return true; } } return false; } private void verifyCrc() throws IOException { if (localFileHeader.getEncryptionMethod() == EncryptionMethod.AES && localFileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.TWO)) { // Verification will be done in this case by AesCipherInputStream return; } if (localFileHeader.getCrc() != crc32.getValue()) { ZipException.Type exceptionType = ZipException.Type.CHECKSUM_MISMATCH; if (isEncryptionMethodZipStandard(localFileHeader)) { exceptionType = ZipException.Type.WRONG_PASSWORD; } throw new ZipException("Reached end of entry, but crc verification failed for " + localFileHeader.getFileName(), exceptionType); } } private void resetFields() { localFileHeader = null; crc32.reset(); } private boolean isEntryDirectory(String entryName) { return entryName.endsWith("/") || entryName.endsWith("\\"); } private long getCompressedSize(LocalFileHeader localFileHeader) { if (getCompressionMethod(localFileHeader).equals(CompressionMethod.STORE)) { return localFileHeader.getUncompressedSize(); } if (localFileHeader.isDataDescriptorExists() && !canSkipExtendedLocalFileHeader) { return -1; } return localFileHeader.getCompressedSize() - getEncryptionHeaderSize(localFileHeader); } private int getEncryptionHeaderSize(LocalFileHeader localFileHeader) { if (!localFileHeader.isEncrypted()) { return 0; } if (localFileHeader.getEncryptionMethod().equals(EncryptionMethod.AES)) { return InternalZipConstants.AES_AUTH_LENGTH + InternalZipConstants.AES_PASSWORD_VERIFIER_LENGTH + localFileHeader.getAesExtraDataRecord().getAesKeyStrength().getSaltLength(); } else if (localFileHeader.getEncryptionMethod().equals(EncryptionMethod.ZIP_STANDARD)) { return InternalZipConstants.STD_DEC_HDR_SIZE; } else { return 0; } } private void readUntilEndOfEntry() throws IOException { if ((localFileHeader.isDirectory() || localFileHeader.getCompressedSize() == 0) && !localFileHeader.isDataDescriptorExists()) { return; } if (endOfEntryBuffer == null) { endOfEntryBuffer = new byte[512]; } //noinspection StatementWithEmptyBody while (read(endOfEntryBuffer) != -1); this.entryEOFReached = true; } private boolean isEncryptionMethodZipStandard(LocalFileHeader localFileHeader) { return localFileHeader.isEncrypted() && EncryptionMethod.ZIP_STANDARD.equals(localFileHeader.getEncryptionMethod()); } private void assertStreamOpen() throws IOException { if (streamClosed) { throw new IOException("Stream closed"); } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/ZipStandardCipherInputStream.java000066400000000000000000000020731414265447200320660ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.crypto.StandardDecrypter; import net.lingala.zip4j.model.LocalFileHeader; import java.io.IOException; import static net.lingala.zip4j.util.InternalZipConstants.STD_DEC_HDR_SIZE; class ZipStandardCipherInputStream extends CipherInputStream { public ZipStandardCipherInputStream(ZipEntryInputStream zipEntryInputStream, LocalFileHeader localFileHeader, char[] password, int bufferSize) throws IOException { super(zipEntryInputStream, localFileHeader, password, bufferSize); } @Override protected StandardDecrypter initializeDecrypter(LocalFileHeader localFileHeader, char[] password) throws IOException { return new StandardDecrypter(password, localFileHeader.getCrc(), localFileHeader.getLastModifiedTime(), getStandardDecrypterHeaderBytes()); } private byte[] getStandardDecrypterHeaderBytes() throws IOException { byte[] headerBytes = new byte[STD_DEC_HDR_SIZE]; readRaw(headerBytes); return headerBytes; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/inputstream/ZipStandardSplitInputStream.java000066400000000000000000000021221414265447200317420ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; /** * A split input stream for zip file split as per zip specification. They end with .z01, .z02... .zip */ public class ZipStandardSplitInputStream extends SplitInputStream { private int lastSplitZipFileNumber; public ZipStandardSplitInputStream(File zipFile, boolean isSplitZipArchive, int lastSplitZipFileNumber) throws FileNotFoundException { super(zipFile, isSplitZipArchive, lastSplitZipFileNumber); this.lastSplitZipFileNumber = lastSplitZipFileNumber; } @Override protected File getNextSplitFile(int zipFileIndex) throws IOException { if (zipFileIndex == lastSplitZipFileNumber) { return zipFile; } String currZipFileNameWithPath = zipFile.getCanonicalPath(); String extensionSubString = ".z0"; if (zipFileIndex >= 9) { extensionSubString = ".z"; } return new File(currZipFileNameWithPath.substring(0, currZipFileNameWithPath.lastIndexOf(".")) + extensionSubString + (zipFileIndex + 1)); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/000077500000000000000000000000001414265447200236505ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/AesCipherOutputStream.java000066400000000000000000000046531414265447200307630ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.crypto.AESEncrypter; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import java.io.IOException; import java.io.OutputStream; import static net.lingala.zip4j.util.InternalZipConstants.AES_BLOCK_SIZE; class AesCipherOutputStream extends CipherOutputStream { private byte[] pendingBuffer = new byte[AES_BLOCK_SIZE]; private int pendingBufferLength = 0; public AesCipherOutputStream(ZipEntryOutputStream outputStream, ZipParameters zipParameters, char[] password) throws IOException, ZipException { super(outputStream, zipParameters, password); } @Override protected AESEncrypter initializeEncrypter(OutputStream outputStream, ZipParameters zipParameters, char[] password) throws IOException, ZipException { AESEncrypter encrypter = new AESEncrypter(password, zipParameters.getAesKeyStrength()); writeAesEncryptionHeaderData(encrypter); return encrypter; } private void writeAesEncryptionHeaderData(AESEncrypter encrypter) throws IOException { writeHeaders(encrypter.getSaltBytes()); writeHeaders(encrypter.getDerivedPasswordVerifier()); } @Override public void write(int b) throws IOException { write(new byte[] {(byte) b}); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } @Override public void write(byte[] b, int off, int len) throws IOException { if (len >= (AES_BLOCK_SIZE - pendingBufferLength)) { System.arraycopy(b, off, pendingBuffer, pendingBufferLength, (AES_BLOCK_SIZE - pendingBufferLength)); super.write(pendingBuffer, 0, pendingBuffer.length); off = (AES_BLOCK_SIZE - pendingBufferLength); len = len - off; pendingBufferLength = 0; } else { System.arraycopy(b, off, pendingBuffer, pendingBufferLength, len); pendingBufferLength += len; return; } if (len != 0 && len % 16 != 0) { System.arraycopy(b, (len + off) - (len % 16), pendingBuffer, 0, len % 16); pendingBufferLength = len % 16; len = len - pendingBufferLength; } super.write(b, off, len); } @Override public void closeEntry() throws IOException { if (this.pendingBufferLength != 0) { super.write(pendingBuffer, 0, pendingBufferLength); pendingBufferLength = 0; } writeHeaders(getEncrypter().getFinalMac()); super.closeEntry(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/CipherOutputStream.java000077500000000000000000000044061414265447200303310ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.crypto.Encrypter; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import java.io.IOException; import java.io.OutputStream; abstract class CipherOutputStream extends OutputStream { private ZipEntryOutputStream zipEntryOutputStream; private T encrypter; public CipherOutputStream(ZipEntryOutputStream zipEntryOutputStream, ZipParameters zipParameters, char[] password) throws IOException, ZipException { this.zipEntryOutputStream = zipEntryOutputStream; this.encrypter = initializeEncrypter(zipEntryOutputStream, zipParameters, password); } @Override public void write(int b) throws IOException { zipEntryOutputStream.write(b); } @Override public void write(byte[] b) throws IOException { zipEntryOutputStream.write(b); } @Override public void write(byte[] b, int off, int len) throws IOException { encrypter.encryptData(b, off, len); zipEntryOutputStream.write(b, off, len); } public void writeHeaders(byte[] b) throws IOException { zipEntryOutputStream.write(b); } public void closeEntry() throws IOException { zipEntryOutputStream.closeEntry(); } @Override public void close() throws IOException { zipEntryOutputStream.close(); } public long getNumberOfBytesWrittenForThisEntry() { return zipEntryOutputStream.getNumberOfBytesWrittenForThisEntry(); } protected T getEncrypter() { return encrypter; } protected abstract T initializeEncrypter(OutputStream outputStream, ZipParameters zipParameters, char[] password) throws IOException, ZipException; } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/CompressedOutputStream.java000066400000000000000000000017011414265447200312130ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import java.io.IOException; import java.io.OutputStream; abstract class CompressedOutputStream extends OutputStream { private CipherOutputStream cipherOutputStream; public CompressedOutputStream(CipherOutputStream cipherOutputStream) { this.cipherOutputStream = cipherOutputStream; } @Override public void write(int b) throws IOException { write(new byte[] {(byte) b}); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } @Override public void write(byte[] b, int off, int len) throws IOException { cipherOutputStream.write(b, off, len); } protected void closeEntry() throws IOException { cipherOutputStream.closeEntry(); } @Override public void close() throws IOException { cipherOutputStream.close(); } public long getCompressedSize() { return cipherOutputStream.getNumberOfBytesWrittenForThisEntry(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/CountingOutputStream.java000066400000000000000000000043631414265447200307040ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.exception.ZipException; import java.io.IOException; import java.io.OutputStream; public class CountingOutputStream extends OutputStream implements OutputStreamWithSplitZipSupport { private OutputStream outputStream; private long numberOfBytesWritten = 0; public CountingOutputStream(OutputStream outputStream) { this.outputStream = outputStream; } @Override public void write(int b) throws IOException { write(new byte[] {(byte) b}); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } @Override public void write(byte[] b, int off, int len) throws IOException { outputStream.write(b, off, len); numberOfBytesWritten += len; } @Override public int getCurrentSplitFileCounter() { if (isSplitZipFile()) { return ((SplitOutputStream) outputStream).getCurrentSplitFileCounter(); } return 0; } public long getOffsetForNextEntry() throws IOException { if (outputStream instanceof SplitOutputStream) { return ((SplitOutputStream) outputStream).getFilePointer(); } return numberOfBytesWritten; } public long getSplitLength() { if (isSplitZipFile()) { return ((SplitOutputStream) outputStream).getSplitLength(); } return 0; } public boolean isSplitZipFile() { return outputStream instanceof SplitOutputStream && ((SplitOutputStream)outputStream).isSplitZipFile(); } public long getNumberOfBytesWritten() throws IOException { if (outputStream instanceof SplitOutputStream) { return ((SplitOutputStream) outputStream).getFilePointer(); } return numberOfBytesWritten; } public boolean checkBuffSizeAndStartNextSplitFile(int bufferSize) throws ZipException { if (!isSplitZipFile()) { return false; } return ((SplitOutputStream)outputStream).checkBufferSizeAndStartNextSplitFile(bufferSize); } @Override public long getFilePointer() throws IOException { if (outputStream instanceof SplitOutputStream) { return ((SplitOutputStream) outputStream).getFilePointer(); } return numberOfBytesWritten; } @Override public void close() throws IOException { outputStream.close(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/DeflaterOutputStream.java000077500000000000000000000035631414265447200306500ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.model.enums.CompressionLevel; import java.io.IOException; import java.util.zip.Deflater; class DeflaterOutputStream extends CompressedOutputStream { private byte[] buff; protected Deflater deflater; public DeflaterOutputStream(CipherOutputStream cipherOutputStream, CompressionLevel compressionLevel, int bufferSize) { super(cipherOutputStream); deflater = new Deflater(compressionLevel.getLevel(), true); buff = new byte[bufferSize]; } public void write(byte[] b) throws IOException { write(b, 0, b.length); } public void write(int bval) throws IOException { byte[] b = new byte[1]; b[0] = (byte) bval; write(b, 0, 1); } public void write(byte[] buf, int off, int len) throws IOException { deflater.setInput(buf, off, len); while (!deflater.needsInput()) { deflate(); } } private void deflate() throws IOException { int len = deflater.deflate(buff, 0, buff.length); if (len > 0) { super.write(buff, 0, len); } } public void closeEntry() throws IOException { if (!deflater.finished()) { deflater.finish(); while (!deflater.finished()) { deflate(); } } deflater.end(); super.closeEntry(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/NoCipherOutputStream.java000066400000000000000000000017271414265447200306260ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.crypto.Encrypter; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import java.io.IOException; import java.io.OutputStream; class NoCipherOutputStream extends CipherOutputStream { public NoCipherOutputStream(ZipEntryOutputStream zipEntryOutputStream, ZipParameters zipParameters, char[] password) throws IOException, ZipException { super(zipEntryOutputStream, zipParameters, password); } @Override protected NoEncrypter initializeEncrypter(OutputStream outputStream, ZipParameters zipParameters, char[] password) { return new NoEncrypter(); } static class NoEncrypter implements Encrypter { @Override public int encryptData(byte[] buff) { return encryptData(buff, 0, buff.length); } @Override public int encryptData(byte[] buff, int start, int len) { return len; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/OutputStreamWithSplitZipSupport.java000066400000000000000000000003201414265447200331120ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import java.io.IOException; public interface OutputStreamWithSplitZipSupport { long getFilePointer() throws IOException; int getCurrentSplitFileCounter(); } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/SplitOutputStream.java000077500000000000000000000145301414265447200302110ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderSignature; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.util.RawIO; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import static net.lingala.zip4j.util.FileUtils.getZipFileNameWithoutExtension; import static net.lingala.zip4j.util.InternalZipConstants.MIN_SPLIT_LENGTH; public class SplitOutputStream extends OutputStream implements OutputStreamWithSplitZipSupport { private RandomAccessFile raf; private long splitLength; private File zipFile; private int currSplitFileCounter; private long bytesWrittenForThisPart; private RawIO rawIO = new RawIO(); public SplitOutputStream(File file) throws FileNotFoundException, ZipException { this(file, -1); } public SplitOutputStream(File file, long splitLength) throws FileNotFoundException, ZipException { if (splitLength >= 0 && splitLength < MIN_SPLIT_LENGTH) { throw new ZipException("split length less than minimum allowed split length of " + MIN_SPLIT_LENGTH + " Bytes"); } this.raf = new RandomAccessFile(file, RandomAccessFileMode.WRITE.getValue()); this.splitLength = splitLength; this.zipFile = file; this.currSplitFileCounter = 0; this.bytesWrittenForThisPart = 0; } public void write(int b) throws IOException { write(new byte[] {(byte) b}); } public void write(byte[] b) throws IOException { write(b, 0, b.length); } public void write(byte[] b, int off, int len) throws IOException { if (len <= 0) { return; } if (splitLength == -1) { raf.write(b, off, len); bytesWrittenForThisPart += len; return; } if (bytesWrittenForThisPart >= splitLength) { startNextSplitFile(); raf.write(b, off, len); bytesWrittenForThisPart = len; } else if (bytesWrittenForThisPart + len > splitLength) { if (isHeaderData(b)) { startNextSplitFile(); raf.write(b, off, len); bytesWrittenForThisPart = len; } else { raf.write(b, off, (int) (splitLength - bytesWrittenForThisPart)); startNextSplitFile(); raf.write(b, off + (int) (splitLength - bytesWrittenForThisPart), (int) (len - (splitLength - bytesWrittenForThisPart))); bytesWrittenForThisPart = len - (splitLength - bytesWrittenForThisPart); } } else { raf.write(b, off, len); bytesWrittenForThisPart += len; } } private void startNextSplitFile() throws IOException { String zipFileWithoutExt = getZipFileNameWithoutExtension(zipFile.getName()); String zipFileName = zipFile.getAbsolutePath(); String parentPath = (zipFile.getParent() == null) ? "" : zipFile.getParent() + System.getProperty("file.separator"); String fileExtension = ".z0" + (currSplitFileCounter + 1); if (currSplitFileCounter >= 9) { fileExtension = ".z" + (currSplitFileCounter + 1); } File currSplitFile = new File(parentPath + zipFileWithoutExt + fileExtension); raf.close(); if (currSplitFile.exists()) { throw new IOException("split file: " + currSplitFile.getName() + " already exists in the current directory, cannot rename this file"); } if (!zipFile.renameTo(currSplitFile)) { throw new IOException("cannot rename newly created split file"); } zipFile = new File(zipFileName); raf = new RandomAccessFile(zipFile, RandomAccessFileMode.WRITE.getValue()); currSplitFileCounter++; } private boolean isHeaderData(byte[] buff) { int signature = rawIO.readIntLittleEndian(buff); for (HeaderSignature headerSignature : HeaderSignature.values()) { //Ignore split signature if (headerSignature != HeaderSignature.SPLIT_ZIP && headerSignature.getValue() == signature) { return true; } } return false; } /** * Checks if the buffer size is sufficient for the current split file. If not * a new split file will be started. * * @param bufferSize * @return true if a new split file was started else false * @throws ZipException */ public boolean checkBufferSizeAndStartNextSplitFile(int bufferSize) throws ZipException { if (bufferSize < 0) { throw new ZipException("negative buffersize for checkBufferSizeAndStartNextSplitFile"); } if (!isBufferSizeFitForCurrSplitFile(bufferSize)) { try { startNextSplitFile(); bytesWrittenForThisPart = 0; return true; } catch (IOException e) { throw new ZipException(e); } } return false; } /** * Checks if the given buffer size will be fit in the current split file. * If this output stream is a non-split file, then this method always returns true * * @param bufferSize * @return true if the buffer size is fit in the current split file or else false. */ private boolean isBufferSizeFitForCurrSplitFile(int bufferSize) { if (splitLength >= MIN_SPLIT_LENGTH) { return (bytesWrittenForThisPart + bufferSize <= splitLength); } else { //Non split zip -- return true return true; } } public void seek(long pos) throws IOException { raf.seek(pos); } public int skipBytes(int n) throws IOException { return raf.skipBytes(n); } public void close() throws IOException { raf.close(); } @Override public long getFilePointer() throws IOException { return raf.getFilePointer(); } public boolean isSplitZipFile() { return splitLength != -1; } public long getSplitLength() { return splitLength; } @Override public int getCurrentSplitFileCounter() { return currSplitFileCounter; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/StoreOutputStream.java000066400000000000000000000003201414265447200301770ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; class StoreOutputStream extends CompressedOutputStream { public StoreOutputStream(CipherOutputStream cipherOutputStream) { super(cipherOutputStream); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/ZipEntryOutputStream.java000066400000000000000000000022751414265447200307020ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import java.io.IOException; import java.io.OutputStream; class ZipEntryOutputStream extends OutputStream { private long numberOfBytesWrittenForThisEntry = 0; private OutputStream outputStream; private boolean entryClosed; public ZipEntryOutputStream(OutputStream outputStream) { this.outputStream = outputStream; entryClosed = false; } @Override public void write(int b) throws IOException { write(new byte[] {(byte) b}); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } @Override public void write(byte[] b, int off, int len) throws IOException { if (entryClosed) { throw new IllegalStateException("ZipEntryOutputStream is closed"); } outputStream.write(b, off, len); numberOfBytesWrittenForThisEntry += len; } public void closeEntry() throws IOException { entryClosed = true; } public long getNumberOfBytesWrittenForThisEntry() { return numberOfBytesWrittenForThisEntry; } @Override public void close() throws IOException { // Do nothing // Do not close the outputstream yet. This will be closed by countingOutputStream } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/ZipOutputStream.java000077500000000000000000000231131414265447200276550ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.FileHeaderFactory; import net.lingala.zip4j.headers.HeaderSignature; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.Charset; import java.util.zip.CRC32; import static net.lingala.zip4j.util.FileUtils.isZipEntryDirectory; import static net.lingala.zip4j.util.InternalZipConstants.BUFF_SIZE; import static net.lingala.zip4j.util.InternalZipConstants.MIN_BUFF_SIZE; public class ZipOutputStream extends OutputStream { private CountingOutputStream countingOutputStream; private char[] password; private ZipModel zipModel; private CompressedOutputStream compressedOutputStream; private FileHeader fileHeader; private LocalFileHeader localFileHeader; private FileHeaderFactory fileHeaderFactory = new FileHeaderFactory(); private HeaderWriter headerWriter = new HeaderWriter(); private CRC32 crc32 = new CRC32(); private RawIO rawIO = new RawIO(); private long uncompressedSizeForThisEntry = 0; private Zip4jConfig zip4jConfig; private boolean streamClosed; private boolean entryClosed = true; public ZipOutputStream(OutputStream outputStream) throws IOException { this(outputStream, null, null); } public ZipOutputStream(OutputStream outputStream, Charset charset) throws IOException { this(outputStream, null, charset); } public ZipOutputStream(OutputStream outputStream, char[] password) throws IOException { this(outputStream, password, null); } public ZipOutputStream(OutputStream outputStream, char[] password, Charset charset) throws IOException { this(outputStream, password, new Zip4jConfig(charset, BUFF_SIZE), new ZipModel()); } public ZipOutputStream(OutputStream outputStream, char[] password, Zip4jConfig zip4jConfig, ZipModel zipModel) throws IOException { if (zip4jConfig.getBufferSize() < InternalZipConstants.MIN_BUFF_SIZE) { throw new IllegalArgumentException("Buffer size cannot be less than " + MIN_BUFF_SIZE + " bytes"); } this.countingOutputStream = new CountingOutputStream(outputStream); this.password = password; this.zip4jConfig = zip4jConfig; this.zipModel = initializeZipModel(zipModel, countingOutputStream); this.streamClosed = false; writeSplitZipHeaderIfApplicable(); } public void putNextEntry(ZipParameters zipParameters) throws IOException { verifyZipParameters(zipParameters); ZipParameters clonedZipParameters = new ZipParameters(zipParameters); if (isZipEntryDirectory(zipParameters.getFileNameInZip())) { clonedZipParameters.setWriteExtendedLocalFileHeader(false); clonedZipParameters.setCompressionMethod(CompressionMethod.STORE); clonedZipParameters.setEncryptFiles(false); } initializeAndWriteFileHeader(clonedZipParameters); //Initialisation of below compressedOutputStream should happen after writing local file header //because local header data should be written first and then the encryption header data //and below initialisation writes encryption header data compressedOutputStream = initializeCompressedOutputStream(clonedZipParameters); this.entryClosed = false; } public void write(int b) throws IOException { write(new byte[] {(byte)b}); } public void write(byte[] b) throws IOException { write(b, 0, b.length); } public void write(byte[] b, int off, int len) throws IOException { ensureStreamOpen(); crc32.update(b, off, len); compressedOutputStream.write(b, off, len); uncompressedSizeForThisEntry += len; } public FileHeader closeEntry() throws IOException { compressedOutputStream.closeEntry(); long compressedSize = compressedOutputStream.getCompressedSize(); fileHeader.setCompressedSize(compressedSize); localFileHeader.setCompressedSize(compressedSize); fileHeader.setUncompressedSize(uncompressedSizeForThisEntry); localFileHeader.setUncompressedSize(uncompressedSizeForThisEntry); if (writeCrc(fileHeader)) { fileHeader.setCrc(crc32.getValue()); localFileHeader.setCrc(crc32.getValue()); } zipModel.getLocalFileHeaders().add(localFileHeader); zipModel.getCentralDirectory().getFileHeaders().add(fileHeader); if (localFileHeader.isDataDescriptorExists()) { headerWriter.writeExtendedLocalHeader(localFileHeader, countingOutputStream); } reset(); this.entryClosed = true; return fileHeader; } @Override public void close() throws IOException { if (!this.entryClosed) { closeEntry(); } zipModel.getEndOfCentralDirectoryRecord().setOffsetOfStartOfCentralDirectory(countingOutputStream.getNumberOfBytesWritten()); headerWriter.finalizeZipFile(zipModel, countingOutputStream, zip4jConfig.getCharset()); countingOutputStream.close(); this.streamClosed = true; } public void setComment(String comment) throws IOException { ensureStreamOpen(); zipModel.getEndOfCentralDirectoryRecord().setComment(comment); } private void ensureStreamOpen() throws IOException { if (streamClosed) { throw new IOException("Stream is closed"); } } private ZipModel initializeZipModel(ZipModel zipModel, CountingOutputStream countingOutputStream) { if (zipModel == null) { zipModel = new ZipModel(); } if (countingOutputStream.isSplitZipFile()) { zipModel.setSplitArchive(true); zipModel.setSplitLength(countingOutputStream.getSplitLength()); } return zipModel; } private void initializeAndWriteFileHeader(ZipParameters zipParameters) throws IOException { fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, countingOutputStream.isSplitZipFile(), countingOutputStream.getCurrentSplitFileCounter(), zip4jConfig.getCharset(), rawIO); fileHeader.setOffsetLocalHeader(countingOutputStream.getOffsetForNextEntry()); localFileHeader = fileHeaderFactory.generateLocalFileHeader(fileHeader); headerWriter.writeLocalFileHeader(zipModel, localFileHeader, countingOutputStream, zip4jConfig.getCharset()); } private void reset() throws IOException { uncompressedSizeForThisEntry = 0; crc32.reset(); compressedOutputStream.close(); } private void writeSplitZipHeaderIfApplicable() throws IOException { if (!countingOutputStream.isSplitZipFile()) { return; } rawIO.writeIntLittleEndian(countingOutputStream, (int) HeaderSignature.SPLIT_ZIP.getValue()); } private CompressedOutputStream initializeCompressedOutputStream(ZipParameters zipParameters) throws IOException { ZipEntryOutputStream zipEntryOutputStream = new ZipEntryOutputStream(countingOutputStream); CipherOutputStream cipherOutputStream = initializeCipherOutputStream(zipEntryOutputStream, zipParameters); return initializeCompressedOutputStream(cipherOutputStream, zipParameters); } private CipherOutputStream initializeCipherOutputStream(ZipEntryOutputStream zipEntryOutputStream, ZipParameters zipParameters) throws IOException { if (!zipParameters.isEncryptFiles()) { return new NoCipherOutputStream(zipEntryOutputStream, zipParameters, null); } if (password == null || password.length == 0) { throw new ZipException("password not set"); } if (zipParameters.getEncryptionMethod() == EncryptionMethod.AES) { return new AesCipherOutputStream(zipEntryOutputStream, zipParameters, password); } else if (zipParameters.getEncryptionMethod() == EncryptionMethod.ZIP_STANDARD) { return new ZipStandardCipherOutputStream(zipEntryOutputStream, zipParameters, password); } else if (zipParameters.getEncryptionMethod() == EncryptionMethod.ZIP_STANDARD_VARIANT_STRONG) { throw new ZipException(EncryptionMethod.ZIP_STANDARD_VARIANT_STRONG + " encryption method is not supported"); } else { throw new ZipException("Invalid encryption method"); } } private CompressedOutputStream initializeCompressedOutputStream(CipherOutputStream cipherOutputStream, ZipParameters zipParameters) { if (zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE) { return new DeflaterOutputStream(cipherOutputStream, zipParameters.getCompressionLevel(), zip4jConfig.getBufferSize()); } return new StoreOutputStream(cipherOutputStream); } private void verifyZipParameters(ZipParameters zipParameters) { if (zipParameters.getCompressionMethod() == CompressionMethod.STORE && zipParameters.getEntrySize() < 0 && !isZipEntryDirectory(zipParameters.getFileNameInZip()) && zipParameters.isWriteExtendedLocalFileHeader()) { throw new IllegalArgumentException("uncompressed size should be set for zip entries of compression type store"); } } private boolean writeCrc(FileHeader fileHeader) { boolean isAesEncrypted = fileHeader.isEncrypted() && fileHeader.getEncryptionMethod().equals(EncryptionMethod.AES); if (!isAesEncrypted) { return true; } return fileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.ONE); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/io/outputstream/ZipStandardCipherOutputStream.java000066400000000000000000000030161414265447200324660ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.crypto.StandardEncrypter; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jUtil; import java.io.IOException; import java.io.OutputStream; class ZipStandardCipherOutputStream extends CipherOutputStream { public ZipStandardCipherOutputStream(ZipEntryOutputStream outputStream, ZipParameters zipParameters, char[] password) throws IOException { super(outputStream, zipParameters, password); } @Override protected StandardEncrypter initializeEncrypter(OutputStream outputStream, ZipParameters zipParameters, char[] password) throws IOException { long key = getEncryptionKey(zipParameters); StandardEncrypter encrypter = new StandardEncrypter(password, key); writeHeaders(encrypter.getHeaderBytes()); return encrypter; } @Override public void write(int b) throws IOException { write(new byte[] {(byte) b}); } @Override public void write(byte[] b) throws IOException { write(b, 0, b.length); } @Override public void write(byte[] b, int off, int len) throws IOException { super.write(b, off, len); } private long getEncryptionKey(ZipParameters zipParameters) { if (zipParameters.isWriteExtendedLocalFileHeader()) { long dosTime = Zip4jUtil.epochToExtendedDosTime(zipParameters.getLastModifiedFileTime()); return (dosTime & 0x0000ffff) << 16; } return zipParameters.getEntryCRC(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/000077500000000000000000000000001414265447200215655ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/AESExtraDataRecord.java000077500000000000000000000042001414265447200257740ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import net.lingala.zip4j.headers.HeaderSignature; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; public class AESExtraDataRecord extends ZipHeader { private int dataSize; private AesVersion aesVersion; private String vendorID; private AesKeyStrength aesKeyStrength; private CompressionMethod compressionMethod; public AESExtraDataRecord() { setSignature(HeaderSignature.AES_EXTRA_DATA_RECORD); dataSize = 7; aesVersion = AesVersion.TWO; vendorID = "AE"; aesKeyStrength = AesKeyStrength.KEY_STRENGTH_256; compressionMethod = CompressionMethod.DEFLATE; } public int getDataSize() { return dataSize; } public void setDataSize(int dataSize) { this.dataSize = dataSize; } public AesVersion getAesVersion() { return aesVersion; } public void setAesVersion(AesVersion aesVersion) { this.aesVersion = aesVersion; } public String getVendorID() { return vendorID; } public void setVendorID(String vendorID) { this.vendorID = vendorID; } public AesKeyStrength getAesKeyStrength() { return aesKeyStrength; } public void setAesKeyStrength(AesKeyStrength aesKeyStrength) { this.aesKeyStrength = aesKeyStrength; } public CompressionMethod getCompressionMethod() { return compressionMethod; } public void setCompressionMethod(CompressionMethod compressionMethod) { this.compressionMethod = compressionMethod; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/AbstractFileHeader.java000066400000000000000000000110571414265447200261100ustar00rootroot00000000000000package net.lingala.zip4j.model; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.Zip4jUtil; import java.util.List; public abstract class AbstractFileHeader extends ZipHeader { private int versionNeededToExtract; private byte[] generalPurposeFlag; private CompressionMethod compressionMethod; private long lastModifiedTime; private long crc = 0; private long compressedSize = 0; private long uncompressedSize = 0; private int fileNameLength; private int extraFieldLength; private String fileName; private boolean isEncrypted; private EncryptionMethod encryptionMethod = EncryptionMethod.NONE; private boolean dataDescriptorExists; private Zip64ExtendedInfo zip64ExtendedInfo; private AESExtraDataRecord aesExtraDataRecord; private boolean fileNameUTF8Encoded; private List extraDataRecords; private boolean isDirectory; public int getVersionNeededToExtract() { return versionNeededToExtract; } public void setVersionNeededToExtract(int versionNeededToExtract) { this.versionNeededToExtract = versionNeededToExtract; } public byte[] getGeneralPurposeFlag() { return generalPurposeFlag; } public void setGeneralPurposeFlag(byte[] generalPurposeFlag) { this.generalPurposeFlag = generalPurposeFlag; } public CompressionMethod getCompressionMethod() { return compressionMethod; } public void setCompressionMethod(CompressionMethod compressionMethod) { this.compressionMethod = compressionMethod; } public long getLastModifiedTime() { return lastModifiedTime; } public void setLastModifiedTime(long lastModifiedTime) { this.lastModifiedTime = lastModifiedTime; } public long getLastModifiedTimeEpoch() { return Zip4jUtil.dosToExtendedEpochTme(lastModifiedTime); } public long getCrc() { return crc; } public void setCrc(long crc) { this.crc = crc; } public long getCompressedSize() { return compressedSize; } public void setCompressedSize(long compressedSize) { this.compressedSize = compressedSize; } public long getUncompressedSize() { return uncompressedSize; } public void setUncompressedSize(long uncompressedSize) { this.uncompressedSize = uncompressedSize; } public int getFileNameLength() { return fileNameLength; } public void setFileNameLength(int fileNameLength) { this.fileNameLength = fileNameLength; } public int getExtraFieldLength() { return extraFieldLength; } public void setExtraFieldLength(int extraFieldLength) { this.extraFieldLength = extraFieldLength; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public boolean isEncrypted() { return isEncrypted; } public void setEncrypted(boolean encrypted) { isEncrypted = encrypted; } public EncryptionMethod getEncryptionMethod() { return encryptionMethod; } public void setEncryptionMethod(EncryptionMethod encryptionMethod) { this.encryptionMethod = encryptionMethod; } public boolean isDataDescriptorExists() { return dataDescriptorExists; } public void setDataDescriptorExists(boolean dataDescriptorExists) { this.dataDescriptorExists = dataDescriptorExists; } public Zip64ExtendedInfo getZip64ExtendedInfo() { return zip64ExtendedInfo; } public void setZip64ExtendedInfo(Zip64ExtendedInfo zip64ExtendedInfo) { this.zip64ExtendedInfo = zip64ExtendedInfo; } public AESExtraDataRecord getAesExtraDataRecord() { return aesExtraDataRecord; } public void setAesExtraDataRecord(AESExtraDataRecord aesExtraDataRecord) { this.aesExtraDataRecord = aesExtraDataRecord; } public boolean isFileNameUTF8Encoded() { return fileNameUTF8Encoded; } public void setFileNameUTF8Encoded(boolean fileNameUTF8Encoded) { this.fileNameUTF8Encoded = fileNameUTF8Encoded; } public List getExtraDataRecords() { return extraDataRecords; } public void setExtraDataRecords(List extraDataRecords) { this.extraDataRecords = extraDataRecords; } public boolean isDirectory() { return isDirectory; } public void setDirectory(boolean directory) { isDirectory = directory; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (!(obj instanceof AbstractFileHeader)) { return false; } return this.getFileName().equals(((AbstractFileHeader) obj).getFileName()); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/ArchiveExtraDataRecord.java000077500000000000000000000022041414265447200267470ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class ArchiveExtraDataRecord extends ZipHeader { private int extraFieldLength; private String extraFieldData; public int getExtraFieldLength() { return extraFieldLength; } public void setExtraFieldLength(int extraFieldLength) { this.extraFieldLength = extraFieldLength; } public String getExtraFieldData() { return extraFieldData; } public void setExtraFieldData(String extraFieldData) { this.extraFieldData = extraFieldData; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/CentralDirectory.java000077500000000000000000000024021414265447200257060ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import java.util.ArrayList; import java.util.List; public class CentralDirectory { private List fileHeaders = new ArrayList<>(); private DigitalSignature digitalSignature = new DigitalSignature(); public List getFileHeaders() { return fileHeaders; } public void setFileHeaders(List fileHeaders) { this.fileHeaders = fileHeaders; } public DigitalSignature getDigitalSignature() { return digitalSignature; } public void setDigitalSignature(DigitalSignature digitalSignature) { this.digitalSignature = digitalSignature; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/DataDescriptor.java000077500000000000000000000023151414265447200253440ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class DataDescriptor extends ZipHeader { private long crc; private long compressedSize; private long uncompressedSize; public long getCrc() { return crc; } public void setCrc(long crc) { this.crc = crc; } public long getCompressedSize() { return compressedSize; } public void setCompressedSize(long compressedSize) { this.compressedSize = compressedSize; } public long getUncompressedSize() { return uncompressedSize; } public void setUncompressedSize(long uncompressedSize) { this.uncompressedSize = uncompressedSize; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/DigitalSignature.java000077500000000000000000000021161414265447200256720ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class DigitalSignature extends ZipHeader { private int sizeOfData; private String signatureData; public int getSizeOfData() { return sizeOfData; } public void setSizeOfData(int sizeOfData) { this.sizeOfData = sizeOfData; } public String getSignatureData() { return signatureData; } public void setSignatureData(String signatureData) { this.signatureData = signatureData; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/EndOfCentralDirectoryRecord.java000077500000000000000000000062631414265447200277720ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import net.lingala.zip4j.headers.HeaderSignature; public class EndOfCentralDirectoryRecord extends ZipHeader { private int numberOfThisDisk; private int numberOfThisDiskStartOfCentralDir; private int totalNumberOfEntriesInCentralDirectoryOnThisDisk; private int totalNumberOfEntriesInCentralDirectory; private int sizeOfCentralDirectory; private long offsetOfStartOfCentralDirectory; private long offsetOfEndOfCentralDirectory; private String comment = ""; public EndOfCentralDirectoryRecord() { setSignature(HeaderSignature.END_OF_CENTRAL_DIRECTORY); } public int getNumberOfThisDisk() { return numberOfThisDisk; } public void setNumberOfThisDisk(int numberOfThisDisk) { this.numberOfThisDisk = numberOfThisDisk; } public int getNumberOfThisDiskStartOfCentralDir() { return numberOfThisDiskStartOfCentralDir; } public void setNumberOfThisDiskStartOfCentralDir(int numberOfThisDiskStartOfCentralDir) { this.numberOfThisDiskStartOfCentralDir = numberOfThisDiskStartOfCentralDir; } public int getTotalNumberOfEntriesInCentralDirectoryOnThisDisk() { return totalNumberOfEntriesInCentralDirectoryOnThisDisk; } public void setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( int totalNumberOfEntriesInCentralDirectoryOnThisDisk) { this.totalNumberOfEntriesInCentralDirectoryOnThisDisk = totalNumberOfEntriesInCentralDirectoryOnThisDisk; } public int getTotalNumberOfEntriesInCentralDirectory() { return totalNumberOfEntriesInCentralDirectory; } public void setTotalNumberOfEntriesInCentralDirectory(int totNoOfEntrisInCentralDir) { this.totalNumberOfEntriesInCentralDirectory = totNoOfEntrisInCentralDir; } public int getSizeOfCentralDirectory() { return sizeOfCentralDirectory; } public void setSizeOfCentralDirectory(int sizeOfCentralDirectory) { this.sizeOfCentralDirectory = sizeOfCentralDirectory; } public long getOffsetOfStartOfCentralDirectory() { return offsetOfStartOfCentralDirectory; } public void setOffsetOfStartOfCentralDirectory(long offSetOfStartOfCentralDir) { this.offsetOfStartOfCentralDirectory = offSetOfStartOfCentralDir; } public long getOffsetOfEndOfCentralDirectory() { return offsetOfEndOfCentralDirectory; } public void setOffsetOfEndOfCentralDirectory(long offsetOfEndOfCentralDirectory) { this.offsetOfEndOfCentralDirectory = offsetOfEndOfCentralDirectory; } public String getComment() { return comment; } public void setComment(String comment) { if (comment != null) { this.comment = comment; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/ExcludeFileFilter.java000066400000000000000000000002041414265447200257630ustar00rootroot00000000000000package net.lingala.zip4j.model; import java.io.File; public interface ExcludeFileFilter { boolean isExcluded(File file); } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/ExtraDataRecord.java000077500000000000000000000022471414265447200254540ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class ExtraDataRecord extends ZipHeader { private long header; private int sizeOfData; private byte[] data; public long getHeader() { return header; } public void setHeader(long header) { this.header = header; } public int getSizeOfData() { return sizeOfData; } public void setSizeOfData(int sizeOfData) { this.sizeOfData = sizeOfData; } public byte[] getData() { return data; } public void setData(byte[] data) { this.data = data; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/FileHeader.java000077500000000000000000000061471414265447200244330ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import net.lingala.zip4j.headers.HeaderSignature; import java.util.Objects; public class FileHeader extends AbstractFileHeader { private int versionMadeBy; private int fileCommentLength = 0; private int diskNumberStart; private byte[] internalFileAttributes; private byte[] externalFileAttributes; private long offsetLocalHeader; private String fileComment; public FileHeader() { setSignature(HeaderSignature.CENTRAL_DIRECTORY); } public int getVersionMadeBy() { return versionMadeBy; } public void setVersionMadeBy(int versionMadeBy) { this.versionMadeBy = versionMadeBy; } public int getFileCommentLength() { return fileCommentLength; } public void setFileCommentLength(int fileCommentLength) { this.fileCommentLength = fileCommentLength; } public int getDiskNumberStart() { return diskNumberStart; } public void setDiskNumberStart(int diskNumberStart) { this.diskNumberStart = diskNumberStart; } public byte[] getInternalFileAttributes() { return internalFileAttributes; } public void setInternalFileAttributes(byte[] internalFileAttributes) { this.internalFileAttributes = internalFileAttributes; } public byte[] getExternalFileAttributes() { return externalFileAttributes; } public void setExternalFileAttributes(byte[] externalFileAttributes) { this.externalFileAttributes = externalFileAttributes; } public long getOffsetLocalHeader() { return offsetLocalHeader; } public void setOffsetLocalHeader(long offsetLocalHeader) { this.offsetLocalHeader = offsetLocalHeader; } public String getFileComment() { return fileComment; } public void setFileComment(String fileComment) { this.fileComment = fileComment; } @Override public String toString() { return getFileName(); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; FileHeader that = (FileHeader) o; return determineOffsetOfLocalFileHeader(this) == determineOffsetOfLocalFileHeader(that); } @Override public int hashCode() { return Objects.hash(getFileName(), determineOffsetOfLocalFileHeader(this)); } private long determineOffsetOfLocalFileHeader(FileHeader fileHeader) { if (fileHeader.getZip64ExtendedInfo() != null) { return fileHeader.getZip64ExtendedInfo().getOffsetLocalHeader(); } return fileHeader.getOffsetLocalHeader(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/LocalFileHeader.java000077500000000000000000000031071414265447200253770ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import net.lingala.zip4j.headers.HeaderSignature; public class LocalFileHeader extends AbstractFileHeader { private byte[] extraField; private long offsetStartOfData; private boolean writeCompressedSizeInZip64ExtraRecord; public LocalFileHeader() { setSignature(HeaderSignature.LOCAL_FILE_HEADER); } public byte[] getExtraField() { return extraField; } public void setExtraField(byte[] extraField) { this.extraField = extraField; } public long getOffsetStartOfData() { return offsetStartOfData; } public void setOffsetStartOfData(long offsetStartOfData) { this.offsetStartOfData = offsetStartOfData; } public boolean isWriteCompressedSizeInZip64ExtraRecord() { return writeCompressedSizeInZip64ExtraRecord; } public void setWriteCompressedSizeInZip64ExtraRecord(boolean writeCompressedSizeInZip64ExtraRecord) { this.writeCompressedSizeInZip64ExtraRecord = writeCompressedSizeInZip64ExtraRecord; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/UnzipParameters.java000066400000000000000000000005061414265447200255620ustar00rootroot00000000000000package net.lingala.zip4j.model; public class UnzipParameters { private boolean extractSymbolicLinks = true; public boolean isExtractSymbolicLinks() { return extractSymbolicLinks; } public void setExtractSymbolicLinks(boolean extractSymbolicLinks) { this.extractSymbolicLinks = extractSymbolicLinks; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/Zip4jConfig.java000066400000000000000000000006221414265447200245560ustar00rootroot00000000000000package net.lingala.zip4j.model; import java.nio.charset.Charset; public class Zip4jConfig { private final Charset charset; private final int bufferSize; public Zip4jConfig(Charset charset, int bufferSize) { this.charset = charset; this.bufferSize = bufferSize; } public Charset getCharset() { return charset; } public int getBufferSize() { return bufferSize; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/Zip64EndOfCentralDirectoryLocator.java000077500000000000000000000033121414265447200310040ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class Zip64EndOfCentralDirectoryLocator extends ZipHeader { private int numberOfDiskStartOfZip64EndOfCentralDirectoryRecord; private long offsetZip64EndOfCentralDirectoryRecord; private int totalNumberOfDiscs; public int getNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord() { return numberOfDiskStartOfZip64EndOfCentralDirectoryRecord; } public void setNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord( int noOfDiskStartOfZip64EndOfCentralDirRec) { this.numberOfDiskStartOfZip64EndOfCentralDirectoryRecord = noOfDiskStartOfZip64EndOfCentralDirRec; } public long getOffsetZip64EndOfCentralDirectoryRecord() { return offsetZip64EndOfCentralDirectoryRecord; } public void setOffsetZip64EndOfCentralDirectoryRecord(long offsetZip64EndOfCentralDirectoryRecord) { this.offsetZip64EndOfCentralDirectoryRecord = offsetZip64EndOfCentralDirectoryRecord; } public int getTotalNumberOfDiscs() { return totalNumberOfDiscs; } public void setTotalNumberOfDiscs(int totNumberOfDiscs) { this.totalNumberOfDiscs = totNumberOfDiscs; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/Zip64EndOfCentralDirectoryRecord.java000077500000000000000000000074041414265447200306250ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class Zip64EndOfCentralDirectoryRecord extends ZipHeader { private long sizeOfZip64EndCentralDirectoryRecord; private int versionMadeBy; private int versionNeededToExtract; private int numberOfThisDisk; private int numberOfThisDiskStartOfCentralDirectory; private long totalNumberOfEntriesInCentralDirectoryOnThisDisk; private long totalNumberOfEntriesInCentralDirectory; private long sizeOfCentralDirectory; private long offsetStartCentralDirectoryWRTStartDiskNumber = -1; private byte[] extensibleDataSector; public long getSizeOfZip64EndCentralDirectoryRecord() { return sizeOfZip64EndCentralDirectoryRecord; } public void setSizeOfZip64EndCentralDirectoryRecord(long sizeOfZip64EndCentralDirectoryRecord) { this.sizeOfZip64EndCentralDirectoryRecord = sizeOfZip64EndCentralDirectoryRecord; } public int getVersionMadeBy() { return versionMadeBy; } public void setVersionMadeBy(int versionMadeBy) { this.versionMadeBy = versionMadeBy; } public int getVersionNeededToExtract() { return versionNeededToExtract; } public void setVersionNeededToExtract(int versionNeededToExtract) { this.versionNeededToExtract = versionNeededToExtract; } public int getNumberOfThisDisk() { return numberOfThisDisk; } public void setNumberOfThisDisk(int numberOfThisDisk) { this.numberOfThisDisk = numberOfThisDisk; } public int getNumberOfThisDiskStartOfCentralDirectory() { return numberOfThisDiskStartOfCentralDirectory; } public void setNumberOfThisDiskStartOfCentralDirectory(int numberOfThisDiskStartOfCentralDirectory) { this.numberOfThisDiskStartOfCentralDirectory = numberOfThisDiskStartOfCentralDirectory; } public long getTotalNumberOfEntriesInCentralDirectoryOnThisDisk() { return totalNumberOfEntriesInCentralDirectoryOnThisDisk; } public void setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( long totalNumberOfEntriesInCentralDirectoryOnThisDisk) { this.totalNumberOfEntriesInCentralDirectoryOnThisDisk = totalNumberOfEntriesInCentralDirectoryOnThisDisk; } public long getTotalNumberOfEntriesInCentralDirectory() { return totalNumberOfEntriesInCentralDirectory; } public void setTotalNumberOfEntriesInCentralDirectory(long totalNumberOfEntriesInCentralDirectory) { this.totalNumberOfEntriesInCentralDirectory = totalNumberOfEntriesInCentralDirectory; } public long getSizeOfCentralDirectory() { return sizeOfCentralDirectory; } public void setSizeOfCentralDirectory(long sizeOfCentralDirectory) { this.sizeOfCentralDirectory = sizeOfCentralDirectory; } public long getOffsetStartCentralDirectoryWRTStartDiskNumber() { return offsetStartCentralDirectoryWRTStartDiskNumber; } public void setOffsetStartCentralDirectoryWRTStartDiskNumber( long offsetStartCentralDirectoryWRTStartDiskNumber) { this.offsetStartCentralDirectoryWRTStartDiskNumber = offsetStartCentralDirectoryWRTStartDiskNumber; } public byte[] getExtensibleDataSector() { return extensibleDataSector; } public void setExtensibleDataSector(byte[] extensibleDataSector) { this.extensibleDataSector = extensibleDataSector; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/Zip64ExtendedInfo.java000077500000000000000000000035311414265447200256460ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; public class Zip64ExtendedInfo extends ZipHeader { private int size; private long compressedSize; private long uncompressedSize; private long offsetLocalHeader; private int diskNumberStart; public Zip64ExtendedInfo() { compressedSize = -1; uncompressedSize = -1; offsetLocalHeader = -1; diskNumberStart = -1; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public long getCompressedSize() { return compressedSize; } public void setCompressedSize(long compressedSize) { this.compressedSize = compressedSize; } public long getUncompressedSize() { return uncompressedSize; } public void setUncompressedSize(long uncompressedSize) { this.uncompressedSize = uncompressedSize; } public long getOffsetLocalHeader() { return offsetLocalHeader; } public void setOffsetLocalHeader(long offsetLocalHeader) { this.offsetLocalHeader = offsetLocalHeader; } public int getDiskNumberStart() { return diskNumberStart; } public void setDiskNumberStart(int diskNumberStart) { this.diskNumberStart = diskNumberStart; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/ZipHeader.java000066400000000000000000000005011414265447200242770ustar00rootroot00000000000000package net.lingala.zip4j.model; import net.lingala.zip4j.headers.HeaderSignature; public abstract class ZipHeader { private HeaderSignature signature; public HeaderSignature getSignature() { return signature; } public void setSignature(HeaderSignature signature) { this.signature = signature; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/ZipModel.java000077500000000000000000000112641414265447200241620ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import java.io.File; import java.util.ArrayList; import java.util.List; public class ZipModel implements Cloneable { private List localFileHeaders = new ArrayList<>(); private List dataDescriptors = new ArrayList<>(); private ArchiveExtraDataRecord archiveExtraDataRecord = new ArchiveExtraDataRecord(); private CentralDirectory centralDirectory = new CentralDirectory(); private EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = new EndOfCentralDirectoryRecord(); private Zip64EndOfCentralDirectoryLocator zip64EndOfCentralDirectoryLocator = new Zip64EndOfCentralDirectoryLocator(); private Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = new Zip64EndOfCentralDirectoryRecord(); private boolean splitArchive; private long splitLength; private File zipFile; private boolean isZip64Format = false; private boolean isNestedZipFile; private long start; private long end; public ZipModel() { splitLength = -1; } public List getLocalFileHeaders() { return localFileHeaders; } public void setLocalFileHeaders(List localFileHeaderList) { this.localFileHeaders = localFileHeaderList; } public List getDataDescriptors() { return dataDescriptors; } public void setDataDescriptors(List dataDescriptors) { this.dataDescriptors = dataDescriptors; } public CentralDirectory getCentralDirectory() { return centralDirectory; } public void setCentralDirectory(CentralDirectory centralDirectory) { this.centralDirectory = centralDirectory; } public EndOfCentralDirectoryRecord getEndOfCentralDirectoryRecord() { return endOfCentralDirectoryRecord; } public void setEndOfCentralDirectoryRecord(EndOfCentralDirectoryRecord endOfCentralDirectoryRecord) { this.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord; } public ArchiveExtraDataRecord getArchiveExtraDataRecord() { return archiveExtraDataRecord; } public void setArchiveExtraDataRecord( ArchiveExtraDataRecord archiveExtraDataRecord) { this.archiveExtraDataRecord = archiveExtraDataRecord; } public boolean isSplitArchive() { return splitArchive; } public void setSplitArchive(boolean splitArchive) { this.splitArchive = splitArchive; } public File getZipFile() { return zipFile; } public void setZipFile(File zipFile) { this.zipFile = zipFile; } public Zip64EndOfCentralDirectoryLocator getZip64EndOfCentralDirectoryLocator() { return zip64EndOfCentralDirectoryLocator; } public void setZip64EndOfCentralDirectoryLocator( Zip64EndOfCentralDirectoryLocator zip64EndOfCentralDirectoryLocator) { this.zip64EndOfCentralDirectoryLocator = zip64EndOfCentralDirectoryLocator; } public Zip64EndOfCentralDirectoryRecord getZip64EndOfCentralDirectoryRecord() { return zip64EndOfCentralDirectoryRecord; } public void setZip64EndOfCentralDirectoryRecord( Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord) { this.zip64EndOfCentralDirectoryRecord = zip64EndOfCentralDirectoryRecord; } public boolean isZip64Format() { return isZip64Format; } public void setZip64Format(boolean isZip64Format) { this.isZip64Format = isZip64Format; } public boolean isNestedZipFile() { return isNestedZipFile; } public void setNestedZipFile(boolean isNestedZipFile) { this.isNestedZipFile = isNestedZipFile; } public long getStart() { return start; } public void setStart(long start) { this.start = start; } public long getEnd() { return end; } public void setEnd(long end) { this.end = end; } public long getSplitLength() { return splitLength; } public void setSplitLength(long splitLength) { this.splitLength = splitLength; } public Object clone() throws CloneNotSupportedException { return super.clone(); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/ZipParameters.java000077500000000000000000000327661414265447200252370ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.model; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionLevel; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; /** * Encapsulates the parameters that that control how Zip4J encodes data */ public class ZipParameters { /** * Indicates the action to take when a symbolic link is added to the ZIP file */ public enum SymbolicLinkAction { /** * Add only the symbolic link itself, not the target file or its contents */ INCLUDE_LINK_ONLY, /** * Add only the target file and its contents, using the filename of the symbolic link */ INCLUDE_LINKED_FILE_ONLY, /** * Add the symbolic link itself and the target file with its original filename and its contents */ INCLUDE_LINK_AND_LINKED_FILE }; private CompressionMethod compressionMethod = CompressionMethod.DEFLATE; private CompressionLevel compressionLevel = CompressionLevel.NORMAL; private boolean encryptFiles = false; private EncryptionMethod encryptionMethod = EncryptionMethod.NONE; private boolean readHiddenFiles = true; private boolean readHiddenFolders = true; private AesKeyStrength aesKeyStrength = AesKeyStrength.KEY_STRENGTH_256; private AesVersion aesVersion = AesVersion.TWO; private boolean includeRootFolder = true; private long entryCRC; private String defaultFolderPath; private String fileNameInZip; private long lastModifiedFileTime = System.currentTimeMillis(); private long entrySize = -1; private boolean writeExtendedLocalFileHeader = true; private boolean overrideExistingFilesInZip = true; private String rootFolderNameInZip; private String fileComment; private SymbolicLinkAction symbolicLinkAction = SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY; private ExcludeFileFilter excludeFileFilter; private boolean unixMode; /** * Create a ZipParameters instance with default values; * CompressionMethod.DEFLATE, CompressionLevel.NORMAL, EncryptionMethod.NONE, * AesKeyStrength.KEY_STRENGTH_256, AesVerson.Two, SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY, * readHiddenFiles is true, readHiddenFolders is true, includeRootInFolder is true, * writeExtendedLocalFileHeader is true, overrideExistingFilesInZip is true */ public ZipParameters() { } /** * Create a clone of given ZipParameters instance * @param zipParameters the ZipParameters instance to clone */ public ZipParameters(ZipParameters zipParameters) { this.compressionMethod = zipParameters.getCompressionMethod(); this.compressionLevel = zipParameters.getCompressionLevel(); this.encryptFiles = zipParameters.isEncryptFiles(); this.encryptionMethod = zipParameters.getEncryptionMethod(); this.readHiddenFiles = zipParameters.isReadHiddenFiles(); this.readHiddenFolders = zipParameters.isReadHiddenFolders(); this.aesKeyStrength = zipParameters.getAesKeyStrength(); this.aesVersion = zipParameters.getAesVersion(); this.includeRootFolder = zipParameters.isIncludeRootFolder(); this.entryCRC = zipParameters.getEntryCRC(); this.defaultFolderPath = zipParameters.getDefaultFolderPath(); this.fileNameInZip = zipParameters.getFileNameInZip(); this.lastModifiedFileTime = zipParameters.getLastModifiedFileTime(); this.entrySize = zipParameters.getEntrySize(); this.writeExtendedLocalFileHeader = zipParameters.isWriteExtendedLocalFileHeader(); this.overrideExistingFilesInZip = zipParameters.isOverrideExistingFilesInZip(); this.rootFolderNameInZip = zipParameters.getRootFolderNameInZip(); this.fileComment = zipParameters.getFileComment(); this.symbolicLinkAction = zipParameters.getSymbolicLinkAction(); this.excludeFileFilter = zipParameters.getExcludeFileFilter(); this.unixMode = zipParameters.isUnixMode(); } /** * Get the compression method specified in this ZipParameters * @return the ZIP compression method */ public CompressionMethod getCompressionMethod() { return compressionMethod; } /** * Set the ZIP compression method * @param compressionMethod the ZIP compression method */ public void setCompressionMethod(CompressionMethod compressionMethod) { this.compressionMethod = compressionMethod; } /** * Test if files files are to be encrypted * @return true if files are to be encrypted */ public boolean isEncryptFiles() { return encryptFiles; } /** * Set the flag indicating that files are to be encrypted * @param encryptFiles if true, files will be encrypted */ public void setEncryptFiles(boolean encryptFiles) { this.encryptFiles = encryptFiles; } /** * Get the encryption method used to encrypt files * @return the encryption method */ public EncryptionMethod getEncryptionMethod() { return encryptionMethod; } /** * Set the encryption method used to encrypt files * @param encryptionMethod the encryption method to be used */ public void setEncryptionMethod(EncryptionMethod encryptionMethod) { this.encryptionMethod = encryptionMethod; } /** * Get the compression level used to compress files * @return the compression level used to compress files */ public CompressionLevel getCompressionLevel() { return compressionLevel; } /** * Set the compression level used to compress files * @param compressionLevel the compression level used to compress files */ public void setCompressionLevel(CompressionLevel compressionLevel) { this.compressionLevel = compressionLevel; } /** * Test if hidden files will be included during folder recursion * * @return true if hidden files will be included when adding folders to the zip */ public boolean isReadHiddenFiles() { return readHiddenFiles; } /** * Indicate if hidden files will be included during folder recursion * * @param readHiddenFiles if true, hidden files will be included when adding folders to the zip */ public void setReadHiddenFiles(boolean readHiddenFiles) { this.readHiddenFiles = readHiddenFiles; } /** * Test if hidden folders will be included during folder recursion * * @return true if hidden folders will be included when adding folders to the zip */ public boolean isReadHiddenFolders() { return readHiddenFolders; } /** * Indicate if hidden folders will be included during folder recursion * @param readHiddenFolders if true, hidden folders will be included when added folders to the zip */ public void setReadHiddenFolders(boolean readHiddenFolders) { this.readHiddenFolders = readHiddenFolders; } public Object clone() throws CloneNotSupportedException { return super.clone(); } /** * Get the key strength of the AES encryption key * @return the key strength of the AES encryption key */ public AesKeyStrength getAesKeyStrength() { return aesKeyStrength; } /** * Set the key strength of the AES encryption key * @param aesKeyStrength the key strength of the AES encryption key */ public void setAesKeyStrength(AesKeyStrength aesKeyStrength) { this.aesKeyStrength = aesKeyStrength; } /** * Get the AES format version used for encryption * @return the AES format version used for encryption */ public AesVersion getAesVersion() { return aesVersion; } /** * Set the AES format version to use for encryption * @param aesVersion the AES format version to use */ public void setAesVersion(AesVersion aesVersion) { this.aesVersion = aesVersion; } /** * Test if the parent folder of the added files will be included in the ZIP * @return true if the parent folder of the added files will be included into the zip */ public boolean isIncludeRootFolder() { return includeRootFolder; } /** * Set the flag to indicate if the parent folder of added files will be included in the ZIP * @param includeRootFolder if true, the parent folder of added files will be included in the ZIP */ public void setIncludeRootFolder(boolean includeRootFolder) { this.includeRootFolder = includeRootFolder; } public long getEntryCRC() { return entryCRC; } public void setEntryCRC(long entryCRC) { this.entryCRC = entryCRC; } public String getDefaultFolderPath() { return defaultFolderPath; } public void setDefaultFolderPath(String defaultFolderPath) { this.defaultFolderPath = defaultFolderPath; } public String getFileNameInZip() { return fileNameInZip; } /** * Set the filename that will be used to include a file into the ZIP file to a different name * that given by the source filename added to the ZIP file. The filenameInZip must * adhere to the ZIP filename specification, including the use of forward slash '/' as the * directory separator, and it must also be a relative file. If the filenameInZip given is not null and * not empty, the value specified by setRootFolderNameInZip() will be ignored. * * @param fileNameInZip the filename to set in the ZIP. Use null or an empty String to set the default behavior */ public void setFileNameInZip(String fileNameInZip) { this.fileNameInZip = fileNameInZip; } /** * Get the last modified time to be used for files written to the ZIP * @return the last modified time in milliseconds since the epoch */ public long getLastModifiedFileTime() { return lastModifiedFileTime; } /** * Set the last modified time recorded in the ZIP file for the added files. If less than 0, * the last modified time is cleared and the current time is used * @param lastModifiedFileTime the last modified time in milliseconds since the epoch */ public void setLastModifiedFileTime(long lastModifiedFileTime) { if (lastModifiedFileTime <= 0) { return; } this.lastModifiedFileTime = lastModifiedFileTime; } public long getEntrySize() { return entrySize; } public void setEntrySize(long entrySize) { this.entrySize = entrySize; } public boolean isWriteExtendedLocalFileHeader() { return writeExtendedLocalFileHeader; } public void setWriteExtendedLocalFileHeader(boolean writeExtendedLocalFileHeader) { this.writeExtendedLocalFileHeader = writeExtendedLocalFileHeader; } public boolean isOverrideExistingFilesInZip() { return overrideExistingFilesInZip; } /** * Set the behavior if a file is added that already exists in the ZIP. * @param overrideExistingFilesInZip if true, remove the existing file in the ZIP; if false do not add the new file */ public void setOverrideExistingFilesInZip(boolean overrideExistingFilesInZip) { this.overrideExistingFilesInZip = overrideExistingFilesInZip; } public String getRootFolderNameInZip() { return rootFolderNameInZip; } /** * Set the folder name that will be prepended to the filename in the ZIP. This value is ignored * if setFileNameInZip() is specified with a non-null, non-empty string. * * @param rootFolderNameInZip the name of the folder to be prepended to the filename * in the ZIP archive */ public void setRootFolderNameInZip(String rootFolderNameInZip) { this.rootFolderNameInZip = rootFolderNameInZip; } /** * Get the file comment * @return the file comment */ public String getFileComment() { return fileComment; } /** * Set the file comment * @param fileComment the file comment */ public void setFileComment(String fileComment) { this.fileComment = fileComment; } /** * Get the behavior when adding a symbolic link * @return the behavior when adding a symbolic link */ public SymbolicLinkAction getSymbolicLinkAction() { return symbolicLinkAction; } /** * Set the behavior when adding a symbolic link * @param symbolicLinkAction the behavior when adding a symbolic link */ public void setSymbolicLinkAction(SymbolicLinkAction symbolicLinkAction) { this.symbolicLinkAction = symbolicLinkAction; } /** * Returns the file exclusion filter that is currently being used when adding files/folders to zip file * @return ExcludeFileFilter */ public ExcludeFileFilter getExcludeFileFilter() { return excludeFileFilter; } /** * Set a filter to exclude any files from the list of files being added to zip. Mostly used when adding a folder * to a zip, and if certain files have to be excluded from adding to the zip file. */ public void setExcludeFileFilter(ExcludeFileFilter excludeFileFilter) { this.excludeFileFilter = excludeFileFilter; } /** * Returns true if zip4j is using unix mode as default. Returns False otherwise. * @return true if zip4j is using unix mode as default, false otherwise */ public boolean isUnixMode() { return unixMode; } /** * When set to true, zip4j uses unix mode as default when generating file headers. * @param unixMode */ public void setUnixMode(boolean unixMode) { this.unixMode = unixMode; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/000077500000000000000000000000001414265447200227145ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/AesKeyStrength.java000066400000000000000000000030261414265447200264600ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; /** * Indicates the AES encryption key length * */ public enum AesKeyStrength { /** * 128-bit AES key length */ KEY_STRENGTH_128(1, 8, 16, 16), /** * 192-bit AES key length */ KEY_STRENGTH_192(2, 12, 24, 24), /** * 256-bit AES key length */ KEY_STRENGTH_256(3, 16, 32, 32); private int rawCode; private int saltLength; private int macLength; private int keyLength; AesKeyStrength(int rawCode, int saltLength, int macLength, int keyLength) { this.rawCode = rawCode; this.saltLength = saltLength; this.macLength = macLength; this.keyLength = keyLength; } /** * Get the code written to the ZIP file * @return the code written the ZIP file */ public int getRawCode() { return rawCode; } public int getSaltLength() { return saltLength; } public int getMacLength() { return macLength; } /** * Get the key length in bytes that this AesKeyStrength represents * @return the key length in bytes */ public int getKeyLength() { return keyLength; } /** * Get a AesKeyStrength given a code from the ZIP file * @param code the code from the ZIP file * @return the AesKeyStrength that represents the given code, or null if the code does not match */ public static AesKeyStrength getAesKeyStrengthFromRawCode(int code) { for (AesKeyStrength aesKeyStrength : values()) { if (aesKeyStrength.getRawCode() == code) { return aesKeyStrength; } } return null; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/AesVersion.java000066400000000000000000000017251414265447200256420ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; /** * Indicates the AES format used */ public enum AesVersion { /** * Version 1 of the AES format */ ONE(1), /** * Version 2 of the AES format */ TWO(2); private int versionNumber; AesVersion(int versionNumber) { this.versionNumber = versionNumber; } /** * Get the AES version number as an integer * @return the AES version number */ public int getVersionNumber() { return versionNumber; } /** * Get the AESVersion instance from an integer AES version number * @return the AESVersion instance for a given version * @throws IllegalArgumentException if an unsupported version is given */ public static AesVersion getFromVersionNumber(int versionNumber) { for (AesVersion aesVersion : values()) { if (aesVersion.versionNumber == versionNumber) { return aesVersion; } } throw new IllegalArgumentException("Unsupported Aes version"); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/CompressionLevel.java000066400000000000000000000020201414265447200270420ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; /** * Indicates the level of compression for the DEFLATE compression method * */ public enum CompressionLevel { /** * Level 1 Deflate compression. Fastest compression. */ FASTEST(1), /** * Level 2 Deflate compression */ FASTER(2), /** * Level 3 Deflate compression */ FAST(3), /** * Level 4 Deflate compression */ MEDIUM_FAST(4), /** * Level 5 Deflate compression. A compromise between speed and compression level. */ NORMAL(5), /** * Level 6 Deflate compression */ HIGHER(6), /** * Level 7 Deflate compression */ MAXIMUM(7), /** * Level 8 Deflate compression */ PRE_ULTRA(8), /** * Level 9 Deflate compression. Highest compression. */ ULTRA(9); private int level; CompressionLevel(int level) { this.level = level; } /** * Get the Deflate compression level (0-9) for this CompressionLevel * @return the deflate compression level */ public int getLevel() { return level; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/CompressionMethod.java000066400000000000000000000023301414265447200272170ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; import net.lingala.zip4j.exception.ZipException; /** * Indicates the algorithm used for compression * */ public enum CompressionMethod { /** * No compression is performed */ STORE(0), /** * The Deflate compression is used. * @see java.util.zip.Deflater */ DEFLATE(8), /** * For internal use in Zip4J */ AES_INTERNAL_ONLY(99); private int code; CompressionMethod(int code) { this.code = code; } /** * Get the code used in the ZIP file for this CompressionMethod * @return the code used in the ZIP file */ public int getCode() { return code; } /** * Get the CompressionMethod for a given ZIP file code * @param code the code for a compression method * @return the CompressionMethod related to the given code * @throws ZipException on unknown code */ public static CompressionMethod getCompressionMethodFromCode(int code) throws ZipException { for (CompressionMethod compressionMethod : values()) { if (compressionMethod.getCode() == code) { return compressionMethod; } } throw new ZipException("Unknown compression method", ZipException.Type.UNKNOWN_COMPRESSION_METHOD); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/EncryptionMethod.java000066400000000000000000000007631414265447200270600ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; /** * Indicates the encryption method used in the ZIP file * */ public enum EncryptionMethod { /** * No encryption is performed */ NONE, /** * Encrypted with the weak ZIP standard algorithm */ ZIP_STANDARD, /** * Encrypted with the stronger ZIP standard algorithm */ ZIP_STANDARD_VARIANT_STRONG, /** * Encrypted with AES, the strongest choice but currently * cannot be expanded in Windows Explorer */ AES } zip4j-2.9.1/src/main/java/net/lingala/zip4j/model/enums/RandomAccessFileMode.java000066400000000000000000000003731414265447200275310ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; public enum RandomAccessFileMode { READ("r"), WRITE("rw"); private String value; RandomAccessFileMode(String value) { this.value = value; } public String getValue() { return value; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/progress/000077500000000000000000000000001414265447200223315ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/progress/ProgressMonitor.java000077500000000000000000000071101414265447200263520ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.progress; /** * If Zip4j is set to run in thread mode, this class helps retrieve current progress */ public class ProgressMonitor { public enum State { READY, BUSY } public enum Result { SUCCESS, WORK_IN_PROGRESS, ERROR, CANCELLED } public enum Task { NONE, ADD_ENTRY, REMOVE_ENTRY, CALCULATE_CRC, EXTRACT_ENTRY, MERGE_ZIP_FILES, SET_COMMENT, RENAME_FILE} private State state; private long totalWork; private long workCompleted; private int percentDone; private Task currentTask; private String fileName; private Result result; private Exception exception; private boolean cancelAllTasks; private boolean pause; public ProgressMonitor() { reset(); } public void updateWorkCompleted(long workCompleted) { this.workCompleted += workCompleted; if (totalWork > 0) { percentDone = (int) ((this.workCompleted * 100 / totalWork)); if (percentDone > 100) { percentDone = 100; } } while (pause) { try { Thread.sleep(150); } catch (InterruptedException e) { //Do nothing } } } public void endProgressMonitor() { result = Result.SUCCESS; percentDone = 100; reset(); } public void endProgressMonitor(Exception e) { result = Result.ERROR; exception = e; reset(); } public void fullReset() { reset(); fileName = null; totalWork = 0; workCompleted = 0; percentDone = 0; } private void reset() { currentTask = Task.NONE; state = State.READY; } public State getState() { return state; } public void setState(State state) { this.state = state; } public long getTotalWork() { return totalWork; } public void setTotalWork(long totalWork) { this.totalWork = totalWork; } public long getWorkCompleted() { return workCompleted; } public int getPercentDone() { return percentDone; } public void setPercentDone(int percentDone) { this.percentDone = percentDone; } public Task getCurrentTask() { return currentTask; } public void setCurrentTask(Task currentTask) { this.currentTask = currentTask; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } public Exception getException() { return exception; } public void setException(Exception exception) { this.exception = exception; } public boolean isCancelAllTasks() { return cancelAllTasks; } public void setCancelAllTasks(boolean cancelAllTasks) { this.cancelAllTasks = cancelAllTasks; } public boolean isPause() { return pause; } public void setPause(boolean pause) { this.pause = pause; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/000077500000000000000000000000001414265447200216125ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AbstractAddFileToZipTask.java000066400000000000000000000303571414265447200272520ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.RemoveFilesFromZipTask.RemoveFilesFromZipTaskParameters; import net.lingala.zip4j.util.BitUtils; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.Zip4jUtil; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static net.lingala.zip4j.headers.HeaderUtil.getFileHeader; import static net.lingala.zip4j.model.ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE; import static net.lingala.zip4j.model.ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY; import static net.lingala.zip4j.model.enums.CompressionMethod.DEFLATE; import static net.lingala.zip4j.model.enums.CompressionMethod.STORE; import static net.lingala.zip4j.model.enums.EncryptionMethod.NONE; import static net.lingala.zip4j.model.enums.EncryptionMethod.ZIP_STANDARD; import static net.lingala.zip4j.progress.ProgressMonitor.Task.ADD_ENTRY; import static net.lingala.zip4j.progress.ProgressMonitor.Task.CALCULATE_CRC; import static net.lingala.zip4j.progress.ProgressMonitor.Task.REMOVE_ENTRY; import static net.lingala.zip4j.util.CrcUtil.computeFileCrc; import static net.lingala.zip4j.util.FileUtils.assertFilesExist; import static net.lingala.zip4j.util.FileUtils.getRelativeFileName; import static net.lingala.zip4j.util.Zip4jUtil.epochToExtendedDosTime; public abstract class AbstractAddFileToZipTask extends AsyncZipTask { private final ZipModel zipModel; private final char[] password; private final HeaderWriter headerWriter; AbstractAddFileToZipTask(ZipModel zipModel, char[] password, HeaderWriter headerWriter, AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); this.zipModel = zipModel; this.password = password; this.headerWriter = headerWriter; } void addFilesToZip(List filesToAdd, ProgressMonitor progressMonitor, ZipParameters zipParameters, Zip4jConfig zip4jConfig) throws IOException { assertFilesExist(filesToAdd, zipParameters.getSymbolicLinkAction()); byte[] readBuff = new byte[zip4jConfig.getBufferSize()]; List updatedFilesToAdd = removeFilesIfExists(filesToAdd, zipParameters, progressMonitor, zip4jConfig); try (SplitOutputStream splitOutputStream = new SplitOutputStream(zipModel.getZipFile(), zipModel.getSplitLength()); ZipOutputStream zipOutputStream = initializeOutputStream(splitOutputStream, zip4jConfig)) { for (File fileToAdd : updatedFilesToAdd) { verifyIfTaskIsCancelled(); ZipParameters clonedZipParameters = cloneAndAdjustZipParameters(zipParameters, fileToAdd, progressMonitor); progressMonitor.setFileName(fileToAdd.getAbsolutePath()); if (FileUtils.isSymbolicLink(fileToAdd)) { if (addSymlink(clonedZipParameters)) { addSymlinkToZip(fileToAdd, zipOutputStream, clonedZipParameters, splitOutputStream); if (INCLUDE_LINK_ONLY.equals(clonedZipParameters.getSymbolicLinkAction())) { continue; } } } addFileToZip(fileToAdd, zipOutputStream, clonedZipParameters, splitOutputStream, progressMonitor, readBuff); } } } private void addSymlinkToZip(File fileToAdd, ZipOutputStream zipOutputStream, ZipParameters zipParameters, SplitOutputStream splitOutputStream) throws IOException { ZipParameters clonedZipParameters = new ZipParameters(zipParameters); clonedZipParameters.setFileNameInZip(replaceFileNameInZip(zipParameters.getFileNameInZip(), fileToAdd.getName())); clonedZipParameters.setEncryptFiles(false); clonedZipParameters.setCompressionMethod(CompressionMethod.STORE); zipOutputStream.putNextEntry(clonedZipParameters); String symLinkTarget = FileUtils.readSymbolicLink(fileToAdd); zipOutputStream.write(symLinkTarget.getBytes()); closeEntry(zipOutputStream, splitOutputStream, fileToAdd, true); } private void addFileToZip(File fileToAdd, ZipOutputStream zipOutputStream, ZipParameters zipParameters, SplitOutputStream splitOutputStream, ProgressMonitor progressMonitor, byte[] readBuff) throws IOException { zipOutputStream.putNextEntry(zipParameters); int readLen; if (fileToAdd.exists() && !fileToAdd.isDirectory()) { try (InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(readBuff)) != -1) { zipOutputStream.write(readBuff, 0, readLen); progressMonitor.updateWorkCompleted(readLen); verifyIfTaskIsCancelled(); } } } closeEntry(zipOutputStream, splitOutputStream, fileToAdd, false); } private void closeEntry(ZipOutputStream zipOutputStream, SplitOutputStream splitOutputStream, File fileToAdd, boolean isSymlink) throws IOException { FileHeader fileHeader = zipOutputStream.closeEntry(); byte[] fileAttributes = FileUtils.getFileAttributes(fileToAdd); if (!isSymlink) { // Unset the symlink byte if the entry being added is a symlink, but the original file is being added fileAttributes[3] = BitUtils.unsetBit(fileAttributes[3], 5); } fileHeader.setExternalFileAttributes(fileAttributes); updateLocalFileHeader(fileHeader, splitOutputStream); } long calculateWorkForFiles(List filesToAdd, ZipParameters zipParameters) throws ZipException { long totalWork = 0; for (File fileToAdd : filesToAdd) { if (!fileToAdd.exists()) { continue; } if (zipParameters.isEncryptFiles() && zipParameters.getEncryptionMethod() == EncryptionMethod.ZIP_STANDARD) { totalWork += (fileToAdd.length() * 2); // for CRC calculation } else { totalWork += fileToAdd.length(); } //If an entry already exists, we have to remove that entry first and then add content again. //In this case, add corresponding work String relativeFileName = getRelativeFileName(fileToAdd, zipParameters); FileHeader fileHeader = getFileHeader(getZipModel(), relativeFileName); if (fileHeader != null) { totalWork += (getZipModel().getZipFile().length() - fileHeader.getCompressedSize()); } } return totalWork; } ZipOutputStream initializeOutputStream(SplitOutputStream splitOutputStream, Zip4jConfig zip4jConfig) throws IOException { if (zipModel.getZipFile().exists()) { splitOutputStream.seek(HeaderUtil.getOffsetStartOfCentralDirectory(zipModel)); } return new ZipOutputStream(splitOutputStream, password, zip4jConfig, zipModel); } void verifyZipParameters(ZipParameters parameters) throws ZipException { if (parameters == null) { throw new ZipException("cannot validate zip parameters"); } if (parameters.getCompressionMethod() != STORE && parameters.getCompressionMethod() != DEFLATE) { throw new ZipException("unsupported compression type"); } if (parameters.isEncryptFiles()) { if (parameters.getEncryptionMethod() == NONE) { throw new ZipException("Encryption method has to be set, when encrypt files flag is set"); } if (password == null || password.length <= 0) { throw new ZipException("input password is empty or null"); } } else { parameters.setEncryptionMethod(NONE); } } void updateLocalFileHeader(FileHeader fileHeader, SplitOutputStream splitOutputStream) throws IOException { headerWriter.updateLocalFileHeader(fileHeader, getZipModel(), splitOutputStream); } private ZipParameters cloneAndAdjustZipParameters(ZipParameters zipParameters, File fileToAdd, ProgressMonitor progressMonitor) throws IOException { ZipParameters clonedZipParameters = new ZipParameters(zipParameters); clonedZipParameters.setLastModifiedFileTime(epochToExtendedDosTime((fileToAdd.lastModified()))); if (fileToAdd.isDirectory()) { clonedZipParameters.setEntrySize(0); } else { clonedZipParameters.setEntrySize(fileToAdd.length()); } clonedZipParameters.setWriteExtendedLocalFileHeader(false); clonedZipParameters.setLastModifiedFileTime(fileToAdd.lastModified()); if (!Zip4jUtil.isStringNotNullAndNotEmpty(zipParameters.getFileNameInZip())) { String relativeFileName = getRelativeFileName(fileToAdd, zipParameters); clonedZipParameters.setFileNameInZip(relativeFileName); } if (fileToAdd.isDirectory()) { clonedZipParameters.setCompressionMethod(CompressionMethod.STORE); clonedZipParameters.setEncryptionMethod(EncryptionMethod.NONE); clonedZipParameters.setEncryptFiles(false); } else { if (clonedZipParameters.isEncryptFiles() && clonedZipParameters.getEncryptionMethod() == ZIP_STANDARD) { progressMonitor.setCurrentTask(CALCULATE_CRC); clonedZipParameters.setEntryCRC(computeFileCrc(fileToAdd, progressMonitor)); progressMonitor.setCurrentTask(ADD_ENTRY); } if (fileToAdd.length() == 0) { clonedZipParameters.setCompressionMethod(CompressionMethod.STORE); } } return clonedZipParameters; } private List removeFilesIfExists(List files, ZipParameters zipParameters, ProgressMonitor progressMonitor, Zip4jConfig zip4jConfig) throws ZipException { List filesToAdd = new ArrayList<>(files); if (!zipModel.getZipFile().exists()) { return filesToAdd; } for (File file : files) { // In some OS it is possible to have empty file names (even without any extension). // Remove such files from list as this might cause incompatibility with the zip file if (!Zip4jUtil.isStringNotNullAndNotEmpty(file.getName())) { filesToAdd.remove(file); } String fileName = getRelativeFileName(file, zipParameters); FileHeader fileHeader = getFileHeader(zipModel, fileName); if (fileHeader != null) { if (zipParameters.isOverrideExistingFilesInZip()) { progressMonitor.setCurrentTask(REMOVE_ENTRY); removeFile(fileHeader, progressMonitor, zip4jConfig); verifyIfTaskIsCancelled(); progressMonitor.setCurrentTask(ADD_ENTRY); } else { filesToAdd.remove(file); } } } return filesToAdd; } void removeFile(FileHeader fileHeader, ProgressMonitor progressMonitor, Zip4jConfig zip4jConfig) throws ZipException { AsyncTaskParameters asyncTaskParameters = new AsyncTaskParameters(null, false, progressMonitor); RemoveFilesFromZipTask removeFilesFromZipTask = new RemoveFilesFromZipTask(zipModel, headerWriter, asyncTaskParameters); RemoveFilesFromZipTaskParameters parameters = new RemoveFilesFromZipTaskParameters( Collections.singletonList(fileHeader.getFileName()), zip4jConfig); removeFilesFromZipTask.execute(parameters); } private String replaceFileNameInZip(String fileInZipWithPath, String newFileName) { if (fileInZipWithPath.contains(InternalZipConstants.ZIP_FILE_SEPARATOR)) { return fileInZipWithPath.substring(0, fileInZipWithPath.lastIndexOf(InternalZipConstants.ZIP_FILE_SEPARATOR) + 1) + newFileName; } return newFileName; } private boolean addSymlink(ZipParameters zipParameters) { return INCLUDE_LINK_ONLY.equals(zipParameters.getSymbolicLinkAction()) || INCLUDE_LINK_AND_LINKED_FILE.equals(zipParameters.getSymbolicLinkAction()); } @Override protected ProgressMonitor.Task getTask() { return ProgressMonitor.Task.ADD_ENTRY; } protected ZipModel getZipModel() { return zipModel; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AbstractExtractFileTask.java000066400000000000000000000144761414265447200272120ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.UnzipParameters; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.util.BitUtils; import net.lingala.zip4j.util.UnzipUtil; import net.lingala.zip4j.util.Zip4jUtil; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import static net.lingala.zip4j.util.InternalZipConstants.FILE_SEPARATOR; public abstract class AbstractExtractFileTask extends AsyncZipTask { private final ZipModel zipModel; private final UnzipParameters unzipParameters; public AbstractExtractFileTask(ZipModel zipModel, UnzipParameters unzipParameters, AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); this.zipModel = zipModel; this.unzipParameters = unzipParameters; } protected void extractFile(ZipInputStream zipInputStream, FileHeader fileHeader, String outputPath, String newFileName, ProgressMonitor progressMonitor, byte[] readBuff) throws IOException { boolean isSymbolicLink = isSymbolicLink(fileHeader); if (isSymbolicLink && !unzipParameters.isExtractSymbolicLinks()) { return; } if (!outputPath.endsWith(FILE_SEPARATOR)) { outputPath += FILE_SEPARATOR; } File outputFile = determineOutputFile(fileHeader, outputPath, newFileName); progressMonitor.setFileName(outputFile.getAbsolutePath()); // make sure no file is extracted outside of the target directory (a.k.a zip slip) String outputCanonicalPath = (new File(outputPath).getCanonicalPath()) + File.separator; if (!outputFile.getCanonicalPath().startsWith(outputCanonicalPath)) { throw new ZipException("illegal file name that breaks out of the target directory: " + fileHeader.getFileName()); } verifyNextEntry(zipInputStream, fileHeader); if (fileHeader.isDirectory()) { if (!outputFile.exists()) { if (!outputFile.mkdirs()) { throw new ZipException("Could not create directory: " + outputFile); } } } else if (isSymbolicLink(fileHeader)) { createSymLink(zipInputStream, fileHeader, outputFile, progressMonitor); } else { checkOutputDirectoryStructure(outputFile); unzipFile(zipInputStream, outputFile, progressMonitor, readBuff); } UnzipUtil.applyFileAttributes(fileHeader, outputFile); } private boolean isSymbolicLink(FileHeader fileHeader) { byte[] externalFileAttributes = fileHeader.getExternalFileAttributes(); if (externalFileAttributes == null || externalFileAttributes.length < 4) { return false; } return BitUtils.isBitSet(externalFileAttributes[3], 5); } private void unzipFile(ZipInputStream inputStream, File outputFile, ProgressMonitor progressMonitor, byte[] buff) throws IOException { int readLength; try (OutputStream outputStream = new FileOutputStream(outputFile)) { while ((readLength = inputStream.read(buff)) != -1) { outputStream.write(buff, 0, readLength); progressMonitor.updateWorkCompleted(readLength); verifyIfTaskIsCancelled(); } } catch (Exception e) { if (outputFile.exists()) { outputFile.delete(); } throw e; } } private void createSymLink(ZipInputStream zipInputStream, FileHeader fileHeader, File outputFile, ProgressMonitor progressMonitor) throws IOException { String symLinkPath = new String(readCompleteEntry(zipInputStream, fileHeader, progressMonitor)); if (!outputFile.getParentFile().exists() && !outputFile.getParentFile().mkdirs()) { throw new ZipException("Could not create parent directories"); } try { Path linkTarget = Paths.get(symLinkPath); Files.createSymbolicLink(outputFile.toPath(), linkTarget); } catch (NoSuchMethodError error) { try (OutputStream outputStream = new FileOutputStream(outputFile)) { outputStream.write(symLinkPath.getBytes()); } } } private byte[] readCompleteEntry(ZipInputStream zipInputStream, FileHeader fileHeader, ProgressMonitor progressMonitor) throws IOException { byte[] b = new byte[(int) fileHeader.getUncompressedSize()]; int readLength = zipInputStream.read(b); if (readLength != b.length) { throw new ZipException("Could not read complete entry"); } progressMonitor.updateWorkCompleted(b.length); return b; } private void verifyNextEntry(ZipInputStream zipInputStream, FileHeader fileHeader) throws IOException { if (BitUtils.isBitSet(fileHeader.getGeneralPurposeFlag()[0], 6)) { throw new ZipException("Entry with name " + fileHeader.getFileName() + " is encrypted with Strong Encryption. " + "Zip4j does not support Strong Encryption, as this is patented."); } LocalFileHeader localFileHeader = zipInputStream.getNextEntry(fileHeader, false); if (localFileHeader == null) { throw new ZipException("Could not read corresponding local file header for file header: " + fileHeader.getFileName()); } if (!fileHeader.getFileName().equals(localFileHeader.getFileName())) { throw new ZipException("File header and local file header mismatch"); } } private void checkOutputDirectoryStructure(File outputFile) throws ZipException { if (!outputFile.getParentFile().exists() && !outputFile.getParentFile().mkdirs()) { throw new ZipException("Unable to create parent directories: " + outputFile.getParentFile()); } } private File determineOutputFile(FileHeader fileHeader, String outputPath, String newFileName) { String outputFileName = fileHeader.getFileName(); if (Zip4jUtil.isStringNotNullAndNotEmpty(newFileName)) { outputFileName = newFileName; } return new File(outputPath + FILE_SEPARATOR + outputFileName); } @Override protected ProgressMonitor.Task getTask() { return ProgressMonitor.Task.EXTRACT_ENTRY; } public ZipModel getZipModel() { return zipModel; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AbstractModifyFileTask.java000066400000000000000000000106141414265447200270150ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.util.FileUtils; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; abstract class AbstractModifyFileTask extends AsyncZipTask { AbstractModifyFileTask(AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); } File getTemporaryFile(String zipPathWithName) { Random random = new Random(); File tmpFile = new File(zipPathWithName + random.nextInt(10000)); while (tmpFile.exists()) { tmpFile = new File(zipPathWithName + random.nextInt(10000)); } return tmpFile; } void updateOffsetsForAllSubsequentFileHeaders(List sortedFileHeaders, ZipModel zipModel, FileHeader fileHeaderModified, long offsetToAdd) throws ZipException { int indexOfFileHeader = getIndexOfFileHeader(sortedFileHeaders, fileHeaderModified); if (indexOfFileHeader == -1) { throw new ZipException("Could not locate modified file header in zipModel"); } for (int i = indexOfFileHeader + 1; i < sortedFileHeaders.size(); i++) { FileHeader fileHeaderToUpdate = sortedFileHeaders.get(i); fileHeaderToUpdate.setOffsetLocalHeader(fileHeaderToUpdate.getOffsetLocalHeader() + offsetToAdd); if (zipModel.isZip64Format() && fileHeaderToUpdate.getZip64ExtendedInfo() != null && fileHeaderToUpdate.getZip64ExtendedInfo().getOffsetLocalHeader() != -1) { fileHeaderToUpdate.getZip64ExtendedInfo().setOffsetLocalHeader( fileHeaderToUpdate.getZip64ExtendedInfo().getOffsetLocalHeader() + offsetToAdd ); } } } void cleanupFile(boolean successFlag, File zipFile, File temporaryZipFile) throws ZipException { if (successFlag) { restoreFileName(zipFile, temporaryZipFile); } else { if (!temporaryZipFile.delete()) { throw new ZipException("Could not delete temporary file"); } } } long copyFile(RandomAccessFile randomAccessFile, OutputStream outputStream, long start, long length, ProgressMonitor progressMonitor, int bufferSize) throws IOException { FileUtils.copyFile(randomAccessFile, outputStream, start, start + length, progressMonitor, bufferSize); return length; } List cloneAndSortFileHeadersByOffset(List allFileHeaders) { List clonedFileHeaders = new ArrayList<>(allFileHeaders); //noinspection Java8ListSort Collections.sort(clonedFileHeaders, new Comparator() { @Override public int compare(FileHeader o1, FileHeader o2) { if (o1.getFileName().equals(o2.getFileName())) { return 0; } return o1.getOffsetLocalHeader() < o2.getOffsetLocalHeader() ? -1 : 1; } }); return clonedFileHeaders; } long getOffsetOfNextEntry(List sortedFileHeaders, FileHeader fileHeader, ZipModel zipModel) throws ZipException { int indexOfFileHeader = getIndexOfFileHeader(sortedFileHeaders, fileHeader); if (indexOfFileHeader == sortedFileHeaders.size() - 1) { return HeaderUtil.getOffsetStartOfCentralDirectory(zipModel); } else { return sortedFileHeaders.get(indexOfFileHeader + 1).getOffsetLocalHeader(); } } private void restoreFileName(File zipFile, File temporaryZipFile) throws ZipException { if (zipFile.delete()) { if (!temporaryZipFile.renameTo(zipFile)) { throw new ZipException("cannot rename modified zip file"); } } else { throw new ZipException("cannot delete old zip file"); } } private int getIndexOfFileHeader(List allFileHeaders, FileHeader fileHeaderForIndex) throws ZipException { for (int i = 0; i < allFileHeaders.size(); i++) { FileHeader fileHeader = allFileHeaders.get(i); if (fileHeader.equals(fileHeaderForIndex)) { return i; } } throw new ZipException("Could not find file header in list of central directory file headers"); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AbstractZipTaskParameters.java000066400000000000000000000004231414265447200275510ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.model.Zip4jConfig; public abstract class AbstractZipTaskParameters { protected Zip4jConfig zip4jConfig; protected AbstractZipTaskParameters(Zip4jConfig zip4jConfig) { this.zip4jConfig = zip4jConfig; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AddFilesToZipTask.java000066400000000000000000000034431414265447200257450ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.AddFilesToZipTask.AddFilesToZipTaskParameters; import java.io.File; import java.io.IOException; import java.util.List; public class AddFilesToZipTask extends AbstractAddFileToZipTask { public AddFilesToZipTask(ZipModel zipModel, char[] password, HeaderWriter headerWriter, AsyncTaskParameters asyncTaskParameters) { super(zipModel, password, headerWriter, asyncTaskParameters); } @Override protected void executeTask(AddFilesToZipTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { verifyZipParameters(taskParameters.zipParameters); addFilesToZip(taskParameters.filesToAdd, progressMonitor, taskParameters.zipParameters, taskParameters.zip4jConfig); } @Override protected long calculateTotalWork(AddFilesToZipTaskParameters taskParameters) throws ZipException { return calculateWorkForFiles(taskParameters.filesToAdd, taskParameters.zipParameters); } @Override protected ProgressMonitor.Task getTask() { return super.getTask(); } public static class AddFilesToZipTaskParameters extends AbstractZipTaskParameters { private final List filesToAdd; private final ZipParameters zipParameters; public AddFilesToZipTaskParameters(List filesToAdd, ZipParameters zipParameters, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.filesToAdd = filesToAdd; this.zipParameters = zipParameters; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AddFolderToZipTask.java000066400000000000000000000064561414265447200261250ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.AddFolderToZipTask.AddFolderToZipTaskParameters; import java.io.File; import java.io.IOException; import java.util.List; import static net.lingala.zip4j.util.FileUtils.getFilesInDirectoryRecursive; public class AddFolderToZipTask extends AbstractAddFileToZipTask { public AddFolderToZipTask(ZipModel zipModel, char[] password, HeaderWriter headerWriter, AsyncTaskParameters asyncTaskParameters) { super(zipModel, password, headerWriter, asyncTaskParameters); } @Override protected void executeTask(AddFolderToZipTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { List filesToAdd = getFilesToAdd(taskParameters); setDefaultFolderPath(taskParameters); addFilesToZip(filesToAdd, progressMonitor, taskParameters.zipParameters, taskParameters.zip4jConfig); } @Override protected long calculateTotalWork(AddFolderToZipTaskParameters taskParameters) throws ZipException { List filesToAdd = getFilesInDirectoryRecursive(taskParameters.folderToAdd, taskParameters.zipParameters.isReadHiddenFiles(), taskParameters.zipParameters.isReadHiddenFolders(), taskParameters.zipParameters.getExcludeFileFilter()); if (taskParameters.zipParameters.isIncludeRootFolder()) { filesToAdd.add(taskParameters.folderToAdd); } return calculateWorkForFiles(filesToAdd, taskParameters.zipParameters); } private void setDefaultFolderPath(AddFolderToZipTaskParameters taskParameters) throws IOException { String rootFolderPath; File folderToAdd = taskParameters.folderToAdd; if (taskParameters.zipParameters.isIncludeRootFolder()) { File parentFile = folderToAdd.getCanonicalFile().getParentFile(); if (parentFile == null) { rootFolderPath = folderToAdd.getCanonicalPath(); } else { rootFolderPath = folderToAdd.getCanonicalFile().getParentFile().getCanonicalPath(); } } else { rootFolderPath = folderToAdd.getCanonicalPath(); } taskParameters.zipParameters.setDefaultFolderPath(rootFolderPath); } private List getFilesToAdd(AddFolderToZipTaskParameters taskParameters) throws ZipException { List filesToAdd = getFilesInDirectoryRecursive(taskParameters.folderToAdd, taskParameters.zipParameters.isReadHiddenFiles(), taskParameters.zipParameters.isReadHiddenFolders(), taskParameters.zipParameters.getExcludeFileFilter()); if (taskParameters.zipParameters.isIncludeRootFolder()) { filesToAdd.add(taskParameters.folderToAdd); } return filesToAdd; } public static class AddFolderToZipTaskParameters extends AbstractZipTaskParameters { private final File folderToAdd; private final ZipParameters zipParameters; public AddFolderToZipTaskParameters(File folderToAdd, ZipParameters zipParameters, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.folderToAdd = folderToAdd; this.zipParameters = zipParameters; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AddStreamToZipTask.java000066400000000000000000000102251414265447200261320ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.AddStreamToZipTask.AddStreamToZipTaskParameters; import net.lingala.zip4j.util.Zip4jUtil; import java.io.IOException; import java.io.InputStream; import static net.lingala.zip4j.util.Zip4jUtil.getCompressionMethod; public class AddStreamToZipTask extends AbstractAddFileToZipTask { public AddStreamToZipTask(ZipModel zipModel, char[] password, HeaderWriter headerWriter, AsyncTaskParameters asyncTaskParameters) { super(zipModel, password, headerWriter, asyncTaskParameters); } @Override protected void executeTask(AddStreamToZipTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { verifyZipParameters(taskParameters.zipParameters); if (!Zip4jUtil.isStringNotNullAndNotEmpty(taskParameters.zipParameters.getFileNameInZip())) { throw new ZipException("fileNameInZip has to be set in zipParameters when adding stream"); } removeFileIfExists(getZipModel(), taskParameters.zip4jConfig, taskParameters.zipParameters.getFileNameInZip(), progressMonitor); // For streams, it is necessary to write extended local file header because of Zip standard encryption. // If we do not write extended local file header, zip standard encryption needs a crc upfront for key, // which cannot be calculated until we read the complete stream. If we use extended local file header, // last modified file time is used, or current system time if not available. taskParameters.zipParameters.setWriteExtendedLocalFileHeader(true); if (taskParameters.zipParameters.getCompressionMethod().equals(CompressionMethod.STORE)) { // Set some random value here. This will be updated again when closing entry taskParameters.zipParameters.setEntrySize(0); } try(SplitOutputStream splitOutputStream = new SplitOutputStream(getZipModel().getZipFile(), getZipModel().getSplitLength()); ZipOutputStream zipOutputStream = initializeOutputStream(splitOutputStream, taskParameters.zip4jConfig)) { byte[] readBuff = new byte[taskParameters.zip4jConfig.getBufferSize()]; int readLen; ZipParameters zipParameters = taskParameters.zipParameters; zipOutputStream.putNextEntry(zipParameters); if (!zipParameters.getFileNameInZip().endsWith("/") && !zipParameters.getFileNameInZip().endsWith("\\")) { while ((readLen = taskParameters.inputStream.read(readBuff)) != -1) { zipOutputStream.write(readBuff, 0, readLen); } } FileHeader fileHeader = zipOutputStream.closeEntry(); if (CompressionMethod.STORE.equals(getCompressionMethod(fileHeader))) { updateLocalFileHeader(fileHeader, splitOutputStream); } } } @Override protected long calculateTotalWork(AddStreamToZipTaskParameters taskParameters) { return 0; } private void removeFileIfExists(ZipModel zipModel, Zip4jConfig zip4jConfig, String fileNameInZip, ProgressMonitor progressMonitor) throws ZipException { FileHeader fileHeader = HeaderUtil.getFileHeader(zipModel, fileNameInZip); if (fileHeader != null) { removeFile(fileHeader, progressMonitor, zip4jConfig); } } public static class AddStreamToZipTaskParameters extends AbstractZipTaskParameters { private final InputStream inputStream; private final ZipParameters zipParameters; public AddStreamToZipTaskParameters(InputStream inputStream, ZipParameters zipParameters, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.inputStream = inputStream; this.zipParameters = zipParameters; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/AsyncZipTask.java000066400000000000000000000062211414265447200250410ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.progress.ProgressMonitor; import java.io.IOException; import java.util.concurrent.ExecutorService; public abstract class AsyncZipTask { private final ProgressMonitor progressMonitor; private final boolean runInThread; private final ExecutorService executorService; public AsyncZipTask(AsyncTaskParameters asyncTaskParameters) { this.progressMonitor = asyncTaskParameters.progressMonitor; this.runInThread = asyncTaskParameters.runInThread; this.executorService = asyncTaskParameters.executorService; } public void execute(final T taskParameters) throws ZipException { if (runInThread && ProgressMonitor.State.BUSY.equals(progressMonitor.getState())) { throw new ZipException("invalid operation - Zip4j is in busy state"); } initProgressMonitor(); if (runInThread) { long totalWorkToBeDone = calculateTotalWork(taskParameters); progressMonitor.setTotalWork(totalWorkToBeDone); executorService.execute(new Runnable() { @Override public void run() { try { AsyncZipTask.this.performTaskWithErrorHandling(taskParameters, progressMonitor); } catch (ZipException e) { //Do nothing. Exception will be passed through progress monitor } finally { executorService.shutdown(); } } }); } else { performTaskWithErrorHandling(taskParameters, progressMonitor); } } private void performTaskWithErrorHandling(T taskParameters, ProgressMonitor progressMonitor) throws ZipException { try { executeTask(taskParameters, progressMonitor); progressMonitor.endProgressMonitor(); } catch (ZipException e) { progressMonitor.endProgressMonitor(e); throw e; } catch (Exception e) { progressMonitor.endProgressMonitor(e); throw new ZipException(e); } } protected void verifyIfTaskIsCancelled() throws ZipException { if (!progressMonitor.isCancelAllTasks()) { return; } progressMonitor.setResult(ProgressMonitor.Result.CANCELLED); progressMonitor.setState(ProgressMonitor.State.READY); throw new ZipException("Task cancelled", ZipException.Type.TASK_CANCELLED_EXCEPTION); } private void initProgressMonitor() { progressMonitor.fullReset(); progressMonitor.setState(ProgressMonitor.State.BUSY); progressMonitor.setCurrentTask(getTask()); } protected abstract void executeTask(T taskParameters, ProgressMonitor progressMonitor) throws IOException; protected abstract long calculateTotalWork(T taskParameters) throws ZipException; protected abstract ProgressMonitor.Task getTask(); public static class AsyncTaskParameters { private final ProgressMonitor progressMonitor; private final boolean runInThread; private final ExecutorService executorService; public AsyncTaskParameters(ExecutorService executorService, boolean runInThread, ProgressMonitor progressMonitor) { this.executorService = executorService; this.runInThread = runInThread; this.progressMonitor = progressMonitor; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/ExtractAllFilesTask.java000066400000000000000000000062411414265447200263310ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.io.inputstream.SplitInputStream; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.UnzipParameters; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.ExtractAllFilesTask.ExtractAllFilesTaskParameters; import net.lingala.zip4j.util.UnzipUtil; import java.io.IOException; import static net.lingala.zip4j.headers.HeaderUtil.getTotalUncompressedSizeOfAllFileHeaders; public class ExtractAllFilesTask extends AbstractExtractFileTask { private final char[] password; private SplitInputStream splitInputStream; public ExtractAllFilesTask(ZipModel zipModel, char[] password, UnzipParameters unzipParameters, AsyncTaskParameters asyncTaskParameters) { super(zipModel, unzipParameters, asyncTaskParameters); this.password = password; } @Override protected void executeTask(ExtractAllFilesTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { try (ZipInputStream zipInputStream = prepareZipInputStream(taskParameters.zip4jConfig)) { for (FileHeader fileHeader : getZipModel().getCentralDirectory().getFileHeaders()) { if (fileHeader.getFileName().startsWith("__MACOSX")) { progressMonitor.updateWorkCompleted(fileHeader.getUncompressedSize()); continue; } splitInputStream.prepareExtractionForFileHeader(fileHeader); byte[] readBuff = new byte[taskParameters.zip4jConfig.getBufferSize()]; extractFile(zipInputStream, fileHeader, taskParameters.outputPath, null, progressMonitor, readBuff); verifyIfTaskIsCancelled(); } } finally { if (splitInputStream != null) { splitInputStream.close(); } } } @Override protected long calculateTotalWork(ExtractAllFilesTaskParameters taskParameters) { return getTotalUncompressedSizeOfAllFileHeaders(getZipModel().getCentralDirectory().getFileHeaders()); } private ZipInputStream prepareZipInputStream(Zip4jConfig zip4jConfig) throws IOException { splitInputStream = UnzipUtil.createSplitInputStream(getZipModel()); FileHeader fileHeader = getFirstFileHeader(getZipModel()); if (fileHeader != null) { splitInputStream.prepareExtractionForFileHeader(fileHeader); } return new ZipInputStream(splitInputStream, password, zip4jConfig); } private FileHeader getFirstFileHeader(ZipModel zipModel) { if (zipModel.getCentralDirectory() == null || zipModel.getCentralDirectory().getFileHeaders() == null || zipModel.getCentralDirectory().getFileHeaders().size() == 0) { return null; } return zipModel.getCentralDirectory().getFileHeaders().get(0); } public static class ExtractAllFilesTaskParameters extends AbstractZipTaskParameters { private final String outputPath; public ExtractAllFilesTaskParameters(String outputPath, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.outputPath = outputPath; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/ExtractFileTask.java000066400000000000000000000110351414265447200255120ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.io.inputstream.SplitInputStream; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.UnzipParameters; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.ExtractFileTask.ExtractFileTaskParameters; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.UnzipUtil; import net.lingala.zip4j.util.Zip4jUtil; import java.io.IOException; import java.util.Collections; import java.util.List; import static net.lingala.zip4j.exception.ZipException.Type.FILE_NOT_FOUND; import static net.lingala.zip4j.headers.HeaderUtil.getFileHeadersUnderDirectory; import static net.lingala.zip4j.headers.HeaderUtil.getTotalUncompressedSizeOfAllFileHeaders; public class ExtractFileTask extends AbstractExtractFileTask { private char[] password; private SplitInputStream splitInputStream; public ExtractFileTask(ZipModel zipModel, char[] password, UnzipParameters unzipParameters, AsyncTaskParameters asyncTaskParameters) { super(zipModel, unzipParameters, asyncTaskParameters); this.password = password; } @Override protected void executeTask(ExtractFileTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { List fileHeadersUnderDirectory = getFileHeadersToExtract(taskParameters.fileToExtract); try(ZipInputStream zipInputStream = createZipInputStream(taskParameters.zip4jConfig)) { byte[] readBuff = new byte[taskParameters.zip4jConfig.getBufferSize()]; for (FileHeader fileHeader : fileHeadersUnderDirectory) { splitInputStream.prepareExtractionForFileHeader(fileHeader); String newFileName = determineNewFileName(taskParameters.newFileName, taskParameters.fileToExtract, fileHeader); extractFile(zipInputStream, fileHeader, taskParameters.outputPath, newFileName, progressMonitor, readBuff); } } finally { if (splitInputStream != null) { splitInputStream.close(); } } } @Override protected long calculateTotalWork(ExtractFileTaskParameters taskParameters) throws ZipException { List fileHeadersUnderDirectory = getFileHeadersToExtract(taskParameters.fileToExtract); return getTotalUncompressedSizeOfAllFileHeaders(fileHeadersUnderDirectory); } private List getFileHeadersToExtract(String fileNameToExtract) throws ZipException { if (!FileUtils.isZipEntryDirectory(fileNameToExtract)) { FileHeader fileHeader = HeaderUtil.getFileHeader(getZipModel(), fileNameToExtract); if (fileHeader == null) { throw new ZipException("No file found with name " + fileNameToExtract + " in zip file", FILE_NOT_FOUND); } return Collections.singletonList(fileHeader); } return getFileHeadersUnderDirectory(getZipModel().getCentralDirectory().getFileHeaders(), fileNameToExtract); } private ZipInputStream createZipInputStream(Zip4jConfig zip4jConfig) throws IOException { splitInputStream = UnzipUtil.createSplitInputStream(getZipModel()); return new ZipInputStream(splitInputStream, password, zip4jConfig); } private String determineNewFileName(String newFileName, String fileNameToExtract, FileHeader fileHeaderBeingExtracted) { if (!Zip4jUtil.isStringNotNullAndNotEmpty(newFileName)) { return newFileName; } if (!FileUtils.isZipEntryDirectory(fileNameToExtract)) { return newFileName; } String fileSeparator = InternalZipConstants.ZIP_FILE_SEPARATOR; if (newFileName.endsWith(InternalZipConstants.ZIP_FILE_SEPARATOR)) { fileSeparator = ""; } return fileHeaderBeingExtracted.getFileName().replaceFirst(fileNameToExtract, newFileName + fileSeparator); } public static class ExtractFileTaskParameters extends AbstractZipTaskParameters { private String outputPath; private String fileToExtract; private String newFileName; public ExtractFileTaskParameters(String outputPath, String fileToExtract, String newFileName, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.outputPath = outputPath; this.fileToExtract = fileToExtract; this.newFileName = newFileName; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/MergeSplitZipFileTask.java000066400000000000000000000204741414265447200266450ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderSignature; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.model.EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryLocator; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.MergeSplitZipFileTask.MergeSplitZipFileTaskParameters; import net.lingala.zip4j.util.RawIO; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; import java.util.List; import static net.lingala.zip4j.util.FileUtils.copyFile; public class MergeSplitZipFileTask extends AsyncZipTask { private final ZipModel zipModel; private final RawIO rawIO = new RawIO(); public MergeSplitZipFileTask(ZipModel zipModel, AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); this.zipModel = zipModel; } @Override protected void executeTask(MergeSplitZipFileTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { if (!zipModel.isSplitArchive()) { ZipException e = new ZipException("archive not a split zip file"); progressMonitor.endProgressMonitor(e); throw e; } try (OutputStream outputStream = new FileOutputStream(taskParameters.outputZipFile)) { long totalBytesWritten = 0; int totalNumberOfSplitFiles = zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk(); if (totalNumberOfSplitFiles <= 0) { throw new ZipException("zip archive not a split zip file"); } int splitSignatureOverhead = 0; for (int i = 0; i <= totalNumberOfSplitFiles; i++) { try (RandomAccessFile randomAccessFile = createSplitZipFileStream(zipModel, i)) { int start = 0; long end = randomAccessFile.length(); if (i == 0) { if (rawIO.readIntLittleEndian(randomAccessFile) == HeaderSignature.SPLIT_ZIP.getValue()) { splitSignatureOverhead = 4; start = 4; } else { randomAccessFile.seek(0); } } if (i == totalNumberOfSplitFiles) { end = zipModel.getEndOfCentralDirectoryRecord().getOffsetOfStartOfCentralDirectory(); } copyFile(randomAccessFile, outputStream, start, end, progressMonitor, taskParameters.zip4jConfig.getBufferSize()); totalBytesWritten += (end - start); updateFileHeaderOffsetsForIndex(zipModel.getCentralDirectory().getFileHeaders(), i == 0 ? 0 : totalBytesWritten, i, splitSignatureOverhead); verifyIfTaskIsCancelled(); } } updateHeadersForMergeSplitFileAction(zipModel, totalBytesWritten, outputStream, taskParameters.zip4jConfig.getCharset()); progressMonitor.endProgressMonitor(); } catch (CloneNotSupportedException e) { throw new ZipException(e); } } @Override protected long calculateTotalWork(MergeSplitZipFileTaskParameters taskParameters) { if (!zipModel.isSplitArchive()) { return 0; } long totalSize = 0; for (int i = 0; i <= zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk(); i++) { totalSize += getNextSplitZipFile(zipModel, i).length(); } return totalSize; } private void updateFileHeaderOffsetsForIndex(List fileHeaders, long offsetToAdd, int index, int splitSignatureOverhead) { for (FileHeader fileHeader : fileHeaders) { if (fileHeader.getDiskNumberStart() == index) { fileHeader.setOffsetLocalHeader(fileHeader.getOffsetLocalHeader() + offsetToAdd - splitSignatureOverhead); fileHeader.setDiskNumberStart(0); } } } private File getNextSplitZipFile(ZipModel zipModel, int partNumber) { if (partNumber == zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()) { return zipModel.getZipFile(); } String splitZipExtension = ".z0"; if (partNumber >= 9) { splitZipExtension = ".z"; } String rootZipFile = zipModel.getZipFile().getPath(); String nextSplitZipFileName = zipModel.getZipFile().getPath().substring(0, rootZipFile.lastIndexOf(".")) + splitZipExtension + (partNumber + 1); return new File(nextSplitZipFileName); } private RandomAccessFile createSplitZipFileStream(ZipModel zipModel, int partNumber) throws FileNotFoundException { File splitFile = getNextSplitZipFile(zipModel, partNumber); return new RandomAccessFile(splitFile, RandomAccessFileMode.READ.getValue()); } private void updateHeadersForMergeSplitFileAction(ZipModel zipModel, long totalBytesWritten, OutputStream outputStream, Charset charset) throws IOException, CloneNotSupportedException { ZipModel newZipModel = (ZipModel) zipModel.clone(); newZipModel.getEndOfCentralDirectoryRecord().setOffsetOfStartOfCentralDirectory(totalBytesWritten); updateSplitZipModel(newZipModel, totalBytesWritten); HeaderWriter headerWriter = new HeaderWriter(); headerWriter.finalizeZipFileWithoutValidations(newZipModel, outputStream, charset); } private void updateSplitZipModel(ZipModel zipModel, long totalFileSize) { zipModel.setSplitArchive(false); updateSplitEndCentralDirectory(zipModel); if (zipModel.isZip64Format()) { updateSplitZip64EndCentralDirLocator(zipModel, totalFileSize); updateSplitZip64EndCentralDirRec(zipModel, totalFileSize); } } private void updateSplitEndCentralDirectory(ZipModel zipModel) { int numberOfFileHeaders = zipModel.getCentralDirectory().getFileHeaders().size(); EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = zipModel.getEndOfCentralDirectoryRecord(); endOfCentralDirectoryRecord.setNumberOfThisDisk(0); endOfCentralDirectoryRecord.setNumberOfThisDiskStartOfCentralDir(0); endOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectory(numberOfFileHeaders); endOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectoryOnThisDisk(numberOfFileHeaders); } private void updateSplitZip64EndCentralDirLocator(ZipModel zipModel, long totalFileSize) { if (zipModel.getZip64EndOfCentralDirectoryLocator() == null) { return; } Zip64EndOfCentralDirectoryLocator zip64EndOfCentralDirectoryLocator = zipModel .getZip64EndOfCentralDirectoryLocator(); zip64EndOfCentralDirectoryLocator.setNumberOfDiskStartOfZip64EndOfCentralDirectoryRecord(0); zip64EndOfCentralDirectoryLocator.setOffsetZip64EndOfCentralDirectoryRecord( zip64EndOfCentralDirectoryLocator.getOffsetZip64EndOfCentralDirectoryRecord() + totalFileSize); zip64EndOfCentralDirectoryLocator.setTotalNumberOfDiscs(1); } private void updateSplitZip64EndCentralDirRec(ZipModel zipModel, long totalFileSize) { if (zipModel.getZip64EndOfCentralDirectoryRecord() == null) { return; } Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = zipModel.getZip64EndOfCentralDirectoryRecord(); zip64EndOfCentralDirectoryRecord.setNumberOfThisDisk(0); zip64EndOfCentralDirectoryRecord.setNumberOfThisDiskStartOfCentralDirectory(0); zip64EndOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( zipModel.getEndOfCentralDirectoryRecord().getTotalNumberOfEntriesInCentralDirectory()); zip64EndOfCentralDirectoryRecord.setOffsetStartCentralDirectoryWRTStartDiskNumber( zip64EndOfCentralDirectoryRecord.getOffsetStartCentralDirectoryWRTStartDiskNumber() + totalFileSize); } @Override protected ProgressMonitor.Task getTask() { return ProgressMonitor.Task.MERGE_ZIP_FILES; } public static class MergeSplitZipFileTaskParameters extends AbstractZipTaskParameters { private File outputZipFile; public MergeSplitZipFileTaskParameters(File outputZipFile, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.outputZipFile = outputZipFile; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/RemoveFilesFromZipTask.java000066400000000000000000000152151414265447200270330ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.model.EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.RemoveFilesFromZipTask.RemoveFilesFromZipTaskParameters; import net.lingala.zip4j.util.InternalZipConstants; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.List; public class RemoveFilesFromZipTask extends AbstractModifyFileTask { private final ZipModel zipModel; private final HeaderWriter headerWriter; public RemoveFilesFromZipTask(ZipModel zipModel, HeaderWriter headerWriter, AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); this.zipModel = zipModel; this.headerWriter = headerWriter; } @Override protected void executeTask(RemoveFilesFromZipTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { if (zipModel.isSplitArchive()) { throw new ZipException("This is a split archive. Zip file format does not allow updating split/spanned files"); } List entriesToRemove = filterNonExistingEntries(taskParameters.filesToRemove); if (entriesToRemove.isEmpty()) { return; } File temporaryZipFile = getTemporaryFile(zipModel.getZipFile().getPath()); boolean successFlag = false; try (SplitOutputStream outputStream = new SplitOutputStream(temporaryZipFile); RandomAccessFile inputStream = new RandomAccessFile(zipModel.getZipFile(), RandomAccessFileMode.READ.getValue())){ long currentFileCopyPointer = 0; List sortedFileHeaders = cloneAndSortFileHeadersByOffset(zipModel.getCentralDirectory().getFileHeaders()); for (FileHeader fileHeader : sortedFileHeaders) { long lengthOfCurrentEntry = getOffsetOfNextEntry(sortedFileHeaders, fileHeader, zipModel) - outputStream.getFilePointer(); if (shouldEntryBeRemoved(fileHeader, entriesToRemove)) { updateHeaders(sortedFileHeaders, fileHeader, lengthOfCurrentEntry); if (!zipModel.getCentralDirectory().getFileHeaders().remove(fileHeader)) { throw new ZipException("Could not remove entry from list of central directory headers"); } currentFileCopyPointer += lengthOfCurrentEntry; } else { // copy complete entry without any changes currentFileCopyPointer += super.copyFile(inputStream, outputStream, currentFileCopyPointer, lengthOfCurrentEntry, progressMonitor, taskParameters.zip4jConfig.getBufferSize()); } verifyIfTaskIsCancelled(); } headerWriter.finalizeZipFile(zipModel, outputStream, taskParameters.zip4jConfig.getCharset()); successFlag = true; } finally { cleanupFile(successFlag, zipModel.getZipFile(), temporaryZipFile); } } @Override protected long calculateTotalWork(RemoveFilesFromZipTaskParameters taskParameters) { return zipModel.getZipFile().length(); } private List filterNonExistingEntries(List filesToRemove) throws ZipException { List filteredFilesToRemove = new ArrayList<>(); for (String fileToRemove : filesToRemove) { if (HeaderUtil.getFileHeader(zipModel, fileToRemove) != null) { filteredFilesToRemove.add(fileToRemove); } } return filteredFilesToRemove; } private boolean shouldEntryBeRemoved(FileHeader fileHeaderToBeChecked, List fileNamesToBeRemoved) { for (String fileNameToBeRemoved : fileNamesToBeRemoved) { // If any of the files to be removed is a directory, check if the fileHeaderToBeChecked is a sub-file or // a sub-directory of that directory if (fileNameToBeRemoved.endsWith(InternalZipConstants.ZIP_FILE_SEPARATOR) && fileHeaderToBeChecked.getFileName().startsWith(fileNameToBeRemoved)) { return true; } else if (fileHeaderToBeChecked.getFileName().equals(fileNameToBeRemoved)) { return true; } } return false; } private void updateHeaders(List sortedFileHeaders, FileHeader fileHeaderThatWasRemoved, long offsetToSubtract) throws ZipException { updateOffsetsForAllSubsequentFileHeaders(sortedFileHeaders, zipModel, fileHeaderThatWasRemoved, negate(offsetToSubtract)); EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = zipModel.getEndOfCentralDirectoryRecord(); endOfCentralDirectoryRecord.setOffsetOfStartOfCentralDirectory( endOfCentralDirectoryRecord.getOffsetOfStartOfCentralDirectory() - offsetToSubtract); endOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectory( endOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectory() - 1); if (endOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectoryOnThisDisk() > 0) { endOfCentralDirectoryRecord.setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( endOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectoryOnThisDisk() - 1); } if (zipModel.isZip64Format()) { zipModel.getZip64EndOfCentralDirectoryRecord().setOffsetStartCentralDirectoryWRTStartDiskNumber( zipModel.getZip64EndOfCentralDirectoryRecord().getOffsetStartCentralDirectoryWRTStartDiskNumber() - offsetToSubtract); zipModel.getZip64EndOfCentralDirectoryRecord().setTotalNumberOfEntriesInCentralDirectoryOnThisDisk( zipModel.getZip64EndOfCentralDirectoryRecord().getTotalNumberOfEntriesInCentralDirectory() - 1); zipModel.getZip64EndOfCentralDirectoryLocator().setOffsetZip64EndOfCentralDirectoryRecord( zipModel.getZip64EndOfCentralDirectoryLocator().getOffsetZip64EndOfCentralDirectoryRecord() - offsetToSubtract); } } private long negate(long val) { if (val == Long.MIN_VALUE) { throw new ArithmeticException("long overflow"); } return -val; } @Override protected ProgressMonitor.Task getTask() { return ProgressMonitor.Task.REMOVE_ENTRY; } public static class RemoveFilesFromZipTaskParameters extends AbstractZipTaskParameters { private final List filesToRemove; public RemoveFilesFromZipTaskParameters(List filesToRemove, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.filesToRemove = filesToRemove; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/RenameFilesTask.java000066400000000000000000000231551414265447200255000ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderUtil; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import net.lingala.zip4j.util.Zip4jUtil; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; import java.util.HashMap; import java.util.List; import java.util.Map; public class RenameFilesTask extends AbstractModifyFileTask { private final ZipModel zipModel; private final HeaderWriter headerWriter; private final RawIO rawIO; public RenameFilesTask(ZipModel zipModel, HeaderWriter headerWriter, RawIO rawIO, AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); this.zipModel = zipModel; this.headerWriter = headerWriter; this.rawIO = rawIO; } @Override protected void executeTask(RenameFilesTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { Map fileNamesMap = filterNonExistingEntriesAndAddSeparatorIfNeeded(taskParameters.fileNamesMap); if (fileNamesMap.size() == 0) { return; } File temporaryFile = getTemporaryFile(zipModel.getZipFile().getPath()); boolean successFlag = false; try(RandomAccessFile inputStream = new RandomAccessFile(zipModel.getZipFile(), RandomAccessFileMode.WRITE.getValue()); SplitOutputStream outputStream = new SplitOutputStream(temporaryFile)) { long currentFileCopyPointer = 0; Charset charset = taskParameters.zip4jConfig.getCharset(); // Maintain a different list to iterate, so that when the file name is changed in the central directory // we still have access to the original file names. If iterating on the original list from central directory, // it might be that a file name has changed because of other file name, ex: if a directory name has to be changed // and the file is part of that directory, by the time the file has to be changed, its name might have changed // when changing the name of the directory. There is some overhead with this approach, but is safer. List sortedFileHeaders = cloneAndSortFileHeadersByOffset(zipModel.getCentralDirectory().getFileHeaders()); for (FileHeader fileHeader : sortedFileHeaders) { Map.Entry fileNameMapForThisEntry = getCorrespondingEntryFromMap(fileHeader, fileNamesMap); progressMonitor.setFileName(fileHeader.getFileName()); long lengthToCopy = getOffsetOfNextEntry(sortedFileHeaders, fileHeader, zipModel) - outputStream.getFilePointer(); if (fileNameMapForThisEntry == null) { // copy complete entry without any changes currentFileCopyPointer += copyFile(inputStream, outputStream, currentFileCopyPointer, lengthToCopy, progressMonitor, taskParameters.zip4jConfig.getBufferSize()); } else { String newFileName = getNewFileName(fileNameMapForThisEntry.getValue(), fileNameMapForThisEntry.getKey(), fileHeader.getFileName()); byte[] newFileNameBytes = HeaderUtil.getBytesFromString(newFileName, charset); int headersOffset = newFileNameBytes.length - fileHeader.getFileNameLength(); currentFileCopyPointer = copyEntryAndChangeFileName(newFileNameBytes, fileHeader, currentFileCopyPointer, lengthToCopy, inputStream, outputStream, progressMonitor, taskParameters.zip4jConfig.getBufferSize()); updateHeadersInZipModel(sortedFileHeaders, fileHeader, newFileName, newFileNameBytes, headersOffset); } verifyIfTaskIsCancelled(); } headerWriter.finalizeZipFile(zipModel, outputStream, charset); successFlag = true; } finally { cleanupFile(successFlag, zipModel.getZipFile(), temporaryFile); } } @Override protected long calculateTotalWork(RenameFilesTaskParameters taskParameters) { return zipModel.getZipFile().length(); } @Override protected ProgressMonitor.Task getTask() { return ProgressMonitor.Task.RENAME_FILE; } private long copyEntryAndChangeFileName(byte[] newFileNameBytes, FileHeader fileHeader, long start, long totalLengthOfEntry, RandomAccessFile inputStream, OutputStream outputStream, ProgressMonitor progressMonitor, int bufferSize) throws IOException { long currentFileCopyPointer = start; currentFileCopyPointer += copyFile(inputStream, outputStream, currentFileCopyPointer, 26, progressMonitor, bufferSize); // 26 is offset until file name length rawIO.writeShortLittleEndian(outputStream, newFileNameBytes.length); currentFileCopyPointer += 2; // length of file name length currentFileCopyPointer += copyFile(inputStream, outputStream, currentFileCopyPointer, 2, progressMonitor, bufferSize); // 2 is for length of extra field length outputStream.write(newFileNameBytes); currentFileCopyPointer += fileHeader.getFileNameLength(); long remainingLengthToCopy = totalLengthOfEntry - (currentFileCopyPointer - start); currentFileCopyPointer += copyFile(inputStream, outputStream, currentFileCopyPointer, remainingLengthToCopy, progressMonitor, bufferSize); return currentFileCopyPointer; } private Map.Entry getCorrespondingEntryFromMap(FileHeader fileHeaderToBeChecked, Map fileNamesMap) { for (Map.Entry fileHeaderToBeRenamed : fileNamesMap.entrySet()) { if (fileHeaderToBeChecked.getFileName().startsWith(fileHeaderToBeRenamed.getKey())) { return fileHeaderToBeRenamed; } } return null; } private void updateHeadersInZipModel(List sortedFileHeaders, FileHeader fileHeader, String newFileName, byte[] newFileNameBytes, int headersOffset) throws ZipException { FileHeader fileHeaderToBeChanged = HeaderUtil.getFileHeader(zipModel, fileHeader.getFileName()); if (fileHeaderToBeChanged == null) { // If this is the case, then the file name in the header that was passed to this method was already changed. // In theory, should never be here. throw new ZipException("could not find any header with name: " + fileHeader.getFileName()); } fileHeaderToBeChanged.setFileName(newFileName); fileHeaderToBeChanged.setFileNameLength(newFileNameBytes.length); updateOffsetsForAllSubsequentFileHeaders(sortedFileHeaders, zipModel, fileHeaderToBeChanged, headersOffset); zipModel.getEndOfCentralDirectoryRecord().setOffsetOfStartOfCentralDirectory( zipModel.getEndOfCentralDirectoryRecord().getOffsetOfStartOfCentralDirectory() + headersOffset); if (zipModel.isZip64Format()) { zipModel.getZip64EndOfCentralDirectoryRecord().setOffsetStartCentralDirectoryWRTStartDiskNumber( zipModel.getZip64EndOfCentralDirectoryRecord().getOffsetStartCentralDirectoryWRTStartDiskNumber() + headersOffset ); zipModel.getZip64EndOfCentralDirectoryLocator().setOffsetZip64EndOfCentralDirectoryRecord( zipModel.getZip64EndOfCentralDirectoryLocator().getOffsetZip64EndOfCentralDirectoryRecord() + headersOffset ); } } private Map filterNonExistingEntriesAndAddSeparatorIfNeeded(Map inputFileNamesMap) throws ZipException { Map fileNamesMapToBeChanged = new HashMap<>(); for (Map.Entry allNamesToBeChanged : inputFileNamesMap.entrySet()) { if (!Zip4jUtil.isStringNotNullAndNotEmpty(allNamesToBeChanged.getKey())) { continue; } FileHeader fileHeaderToBeChanged = HeaderUtil.getFileHeader(zipModel, allNamesToBeChanged.getKey()); if (fileHeaderToBeChanged != null) { if (fileHeaderToBeChanged.isDirectory() && !allNamesToBeChanged.getValue().endsWith(InternalZipConstants.ZIP_FILE_SEPARATOR)) { fileNamesMapToBeChanged.put(allNamesToBeChanged.getKey(), allNamesToBeChanged.getValue() + InternalZipConstants.ZIP_FILE_SEPARATOR); } else { fileNamesMapToBeChanged.put(allNamesToBeChanged.getKey(), allNamesToBeChanged.getValue()); } } } return fileNamesMapToBeChanged; } private String getNewFileName(String newFileName, String oldFileName, String fileNameFromHeaderToBeChanged) throws ZipException { if (fileNameFromHeaderToBeChanged.equals(oldFileName)) { return newFileName; } else if (fileNameFromHeaderToBeChanged.startsWith(oldFileName)) { String fileNameWithoutOldName = fileNameFromHeaderToBeChanged.substring(oldFileName.length()); return newFileName + fileNameWithoutOldName; } // Should never be here. // If here by any chance, it means that the file header was marked as to-be-modified, even when the file names do not // match. Logic in the method getCorrespondingEntryFromMap() has to be checked throw new ZipException("old file name was neither an exact match nor a partial match"); } public static class RenameFilesTaskParameters extends AbstractZipTaskParameters { private final Map fileNamesMap; public RenameFilesTaskParameters(Map fileNamesMap, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.fileNamesMap = fileNamesMap; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/tasks/SetCommentTask.java000066400000000000000000000043341414265447200253620ustar00rootroot00000000000000package net.lingala.zip4j.tasks; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.headers.HeaderWriter; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.model.EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.tasks.SetCommentTask.SetCommentTaskTaskParameters; import java.io.IOException; public class SetCommentTask extends AsyncZipTask { private final ZipModel zipModel; public SetCommentTask(ZipModel zipModel, AsyncTaskParameters asyncTaskParameters) { super(asyncTaskParameters); this.zipModel = zipModel; } @Override protected void executeTask(SetCommentTaskTaskParameters taskParameters, ProgressMonitor progressMonitor) throws IOException { if (taskParameters.comment == null) { throw new ZipException("comment is null, cannot update Zip file with comment"); } EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = zipModel.getEndOfCentralDirectoryRecord(); endOfCentralDirectoryRecord.setComment(taskParameters.comment); try (SplitOutputStream outputStream = new SplitOutputStream(zipModel.getZipFile())) { if (zipModel.isZip64Format()) { outputStream.seek(zipModel.getZip64EndOfCentralDirectoryRecord() .getOffsetStartCentralDirectoryWRTStartDiskNumber()); } else { outputStream.seek(endOfCentralDirectoryRecord.getOffsetOfStartOfCentralDirectory()); } HeaderWriter headerWriter = new HeaderWriter(); headerWriter.finalizeZipFileWithoutValidations(zipModel, outputStream, taskParameters.zip4jConfig.getCharset()); } } @Override protected long calculateTotalWork(SetCommentTaskTaskParameters taskParameters) { return 0; } @Override protected ProgressMonitor.Task getTask() { return ProgressMonitor.Task.SET_COMMENT; } public static class SetCommentTaskTaskParameters extends AbstractZipTaskParameters { private String comment; public SetCommentTaskTaskParameters(String comment, Zip4jConfig zip4jConfig) { super(zip4jConfig); this.comment = comment; } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/000077500000000000000000000000001414265447200214425ustar00rootroot00000000000000zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/BitUtils.java000066400000000000000000000005101414265447200240400ustar00rootroot00000000000000package net.lingala.zip4j.util; public class BitUtils { public static boolean isBitSet(byte b, int pos) { return (b & (1L << pos)) != 0; } public static byte setBit(byte b, int pos) { return (byte) (b | 1 << pos); } public static byte unsetBit(byte b, int pos) { return (byte) (b & ~(1 << pos)); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/CrcUtil.java000077500000000000000000000035761414265447200236700ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.progress.ProgressMonitor; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.CRC32; public class CrcUtil { private static final int BUF_SIZE = 1 << 14; //16384 public static long computeFileCrc(File inputFile, ProgressMonitor progressMonitor) throws IOException { if (inputFile == null || !inputFile.exists() || !inputFile.canRead()) { throw new ZipException("input file is null or does not exist or cannot read. " + "Cannot calculate CRC for the file"); } byte[] buff = new byte[BUF_SIZE]; CRC32 crc32 = new CRC32(); try(InputStream inputStream = new FileInputStream(inputFile)) { int readLen; while ((readLen = inputStream.read(buff)) != -1) { crc32.update(buff, 0, readLen); if (progressMonitor != null) { progressMonitor.updateWorkCompleted(readLen); if (progressMonitor.isCancelAllTasks()) { progressMonitor.setResult(ProgressMonitor.Result.CANCELLED); progressMonitor.setState(ProgressMonitor.State.READY); return 0; } } } return crc32.getValue(); } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/FileUtils.java000066400000000000000000000510201414265447200242030ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ExcludeFileFilter; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.progress.ProgressMonitor; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.attribute.DosFileAttributeView; import java.nio.file.attribute.DosFileAttributes; import java.nio.file.attribute.FileTime; import java.nio.file.attribute.PosixFileAttributeView; import java.nio.file.attribute.PosixFilePermission; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import static java.nio.file.attribute.PosixFilePermission.GROUP_EXECUTE; import static java.nio.file.attribute.PosixFilePermission.GROUP_READ; import static java.nio.file.attribute.PosixFilePermission.GROUP_WRITE; import static java.nio.file.attribute.PosixFilePermission.OTHERS_EXECUTE; import static java.nio.file.attribute.PosixFilePermission.OTHERS_READ; import static java.nio.file.attribute.PosixFilePermission.OTHERS_WRITE; import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; import static net.lingala.zip4j.util.BitUtils.isBitSet; import static net.lingala.zip4j.util.BitUtils.setBit; import static net.lingala.zip4j.util.InternalZipConstants.FILE_SEPARATOR; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_FILE_SEPARATOR; import static net.lingala.zip4j.util.Zip4jUtil.isStringNotNullAndNotEmpty; public class FileUtils { public static final byte[] DEFAULT_POSIX_FILE_ATTRIBUTES = new byte[] {0, 0, -92, -127}; //-rw-r--r-- public static final byte[] DEFAULT_POSIX_FOLDER_ATTRIBUTES = new byte[] {0, 0, -19, 65}; //drwxr-xr-x public static void setFileAttributes(Path file, byte[] fileAttributes) { if (fileAttributes == null || fileAttributes.length == 0) { return; } if (isWindows()) { applyWindowsFileAttributes(file, fileAttributes); } else if (isMac() || isUnix()) { applyPosixFileAttributes(file, fileAttributes); } } public static void setFileLastModifiedTime(Path file, long lastModifiedTime) { if (lastModifiedTime <= 0 || !Files.exists(file)) { return; } try { Files.setLastModifiedTime(file, FileTime.fromMillis(Zip4jUtil.dosToExtendedEpochTme(lastModifiedTime))); } catch (Exception e) { // Ignore } } public static void setFileLastModifiedTimeWithoutNio(File file, long lastModifiedTime) { file.setLastModified(Zip4jUtil.dosToExtendedEpochTme(lastModifiedTime)); } public static byte[] getFileAttributes(File file) { try { if (file == null || (!Files.isSymbolicLink(file.toPath()) && !file.exists())) { return new byte[4]; } Path path = file.toPath(); if (isWindows()) { return getWindowsFileAttributes(path); } else if (isMac() || isUnix()) { return getPosixFileAttributes(path); } else { return new byte[4]; } } catch (NoSuchMethodError e) { return new byte[4]; } } public static List getFilesInDirectoryRecursive(File path, boolean readHiddenFiles, boolean readHiddenFolders) throws ZipException { return getFilesInDirectoryRecursive(path, readHiddenFiles, readHiddenFolders, null); } public static List getFilesInDirectoryRecursive(File path, boolean readHiddenFiles, boolean readHiddenFolders, ExcludeFileFilter excludedFiles) throws ZipException { if (path == null) { throw new ZipException("input path is null, cannot read files in the directory"); } List result = new ArrayList<>(); File[] filesAndDirs = path.listFiles(); if (!path.isDirectory() || !path.canRead() || filesAndDirs == null) { return result; } for (File file : filesAndDirs) { if (excludedFiles != null && excludedFiles.isExcluded(file)) { continue; } if (file.isHidden()) { if (file.isDirectory()) { if (!readHiddenFolders) { continue; } } else if (!readHiddenFiles) { continue; } } result.add(file); if (file.isDirectory()) { result.addAll(getFilesInDirectoryRecursive(file, readHiddenFiles, readHiddenFolders, excludedFiles)); } } return result; } public static String getFileNameWithoutExtension(String fileName) { int pos = fileName.lastIndexOf("."); if (pos == -1) { return fileName; } return fileName.substring(0, pos); } public static String getZipFileNameWithoutExtension(String zipFile) throws ZipException { if (!isStringNotNullAndNotEmpty(zipFile)) { throw new ZipException("zip file name is empty or null, cannot determine zip file name"); } String tmpFileName = zipFile; if (zipFile.contains(System.getProperty("file.separator"))) { tmpFileName = zipFile.substring(zipFile.lastIndexOf(System.getProperty("file.separator")) + 1); } if (tmpFileName.endsWith(".zip")) { tmpFileName = tmpFileName.substring(0, tmpFileName.lastIndexOf(".")); } return tmpFileName; } public static List getSplitZipFiles(ZipModel zipModel) throws ZipException { if (zipModel == null) { throw new ZipException("cannot get split zip files: zipmodel is null"); } if (zipModel.getEndOfCentralDirectoryRecord() == null) { return null; } if (!zipModel.getZipFile().exists()) { throw new ZipException("zip file does not exist"); } List splitZipFiles = new ArrayList<>(); File currZipFile = zipModel.getZipFile(); String partFile; if (!zipModel.isSplitArchive()) { splitZipFiles.add(currZipFile); return splitZipFiles; } int numberOfThisDisk = zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk(); if (numberOfThisDisk == 0) { splitZipFiles.add(currZipFile); return splitZipFiles; } else { for (int i = 0; i <= numberOfThisDisk; i++) { if (i == numberOfThisDisk) { splitZipFiles.add(zipModel.getZipFile()); } else { String fileExt = ".z0"; if (i >= 9) { fileExt = ".z"; } partFile = (currZipFile.getName().contains(".")) ? currZipFile.getPath().substring(0, currZipFile.getPath().lastIndexOf(".")) : currZipFile.getPath(); partFile = partFile + fileExt + (i + 1); splitZipFiles.add(new File(partFile)); } } } return splitZipFiles; } public static String getRelativeFileName(File fileToAdd, ZipParameters zipParameters) throws ZipException { String fileName; try { String fileCanonicalPath = fileToAdd.getCanonicalPath(); if (isStringNotNullAndNotEmpty(zipParameters.getDefaultFolderPath())) { File rootFolderFile = new File(zipParameters.getDefaultFolderPath()); String rootFolderFileRef = rootFolderFile.getCanonicalPath(); if (!rootFolderFileRef.endsWith(FILE_SEPARATOR)) { rootFolderFileRef += FILE_SEPARATOR; } String tmpFileName; if (isSymbolicLink(fileToAdd)) { String rootPath = new File(fileToAdd.getParentFile().getCanonicalFile().getPath() + File.separator + fileToAdd.getCanonicalFile().getName()).getPath(); tmpFileName = rootPath.substring(rootFolderFileRef.length()); } else { tmpFileName = fileCanonicalPath.substring(rootFolderFileRef.length()); } if (tmpFileName.startsWith(System.getProperty("file.separator"))) { tmpFileName = tmpFileName.substring(1); } File tmpFile = new File(fileCanonicalPath); if (tmpFile.isDirectory()) { tmpFileName = tmpFileName.replaceAll("\\\\", ZIP_FILE_SEPARATOR); tmpFileName += ZIP_FILE_SEPARATOR; } else { String bkFileName = tmpFileName.substring(0, tmpFileName.lastIndexOf(tmpFile.getName())); bkFileName = bkFileName.replaceAll("\\\\", ZIP_FILE_SEPARATOR); tmpFileName = bkFileName + getNameOfFileInZip(tmpFile, zipParameters.getFileNameInZip()); } fileName = tmpFileName; } else { File relFile = new File(fileCanonicalPath); fileName = getNameOfFileInZip(relFile, zipParameters.getFileNameInZip()); if (relFile.isDirectory()) { fileName += ZIP_FILE_SEPARATOR; } } } catch (IOException e) { throw new ZipException(e); } String rootFolderNameInZip = zipParameters.getRootFolderNameInZip(); if (Zip4jUtil.isStringNotNullAndNotEmpty(rootFolderNameInZip)) { if (!rootFolderNameInZip.endsWith("\\") && !rootFolderNameInZip.endsWith("/")) { rootFolderNameInZip = rootFolderNameInZip + InternalZipConstants.FILE_SEPARATOR; } rootFolderNameInZip = rootFolderNameInZip.replaceAll("\\\\", ZIP_FILE_SEPARATOR); fileName = rootFolderNameInZip + fileName; } if (!isStringNotNullAndNotEmpty(fileName)) { String errorMessage = "fileName to add to zip is empty or null. fileName: '" + fileName + "' " + "DefaultFolderPath: '" + zipParameters.getDefaultFolderPath() + "' " + "FileNameInZip: " + zipParameters.getFileNameInZip(); if (isSymbolicLink(fileToAdd)) { errorMessage += "isSymlink: true "; } if (Zip4jUtil.isStringNotNullAndNotEmpty(rootFolderNameInZip)) { errorMessage = "rootFolderNameInZip: '" + rootFolderNameInZip + "' "; } throw new ZipException(errorMessage); } return fileName; } private static String getNameOfFileInZip(File fileToAdd, String fileNameInZip) throws IOException { if (isStringNotNullAndNotEmpty(fileNameInZip)) { return fileNameInZip; } if (isSymbolicLink(fileToAdd)) { return fileToAdd.toPath().toRealPath(LinkOption.NOFOLLOW_LINKS).getFileName().toString(); } return fileToAdd.getName(); } public static boolean isZipEntryDirectory(String fileNameInZip) { return fileNameInZip.endsWith("/") || fileNameInZip.endsWith("\\"); } public static void copyFile(RandomAccessFile randomAccessFile, OutputStream outputStream, long start, long end, ProgressMonitor progressMonitor, int bufferSize) throws ZipException { if (start < 0 || end < 0 || start > end) { throw new ZipException("invalid offsets"); } if (start == end) { return; } try { randomAccessFile.seek(start); int readLen; byte[] buff; long bytesRead = 0; long bytesToRead = end - start; if ((end - start) < bufferSize) { buff = new byte[(int) bytesToRead]; } else { buff = new byte[bufferSize]; } while ((readLen = randomAccessFile.read(buff)) != -1) { outputStream.write(buff, 0, readLen); progressMonitor.updateWorkCompleted(readLen); if (progressMonitor.isCancelAllTasks()) { progressMonitor.setResult(ProgressMonitor.Result.CANCELLED); return; } bytesRead += readLen; if (bytesRead == bytesToRead) { break; } else if (bytesRead + buff.length > bytesToRead) { buff = new byte[(int) (bytesToRead - bytesRead)]; } } } catch (IOException e) { throw new ZipException(e); } } public static void assertFilesExist(List files, ZipParameters.SymbolicLinkAction symLinkAction) throws ZipException { for (File file : files) { if (isSymbolicLink(file)) { // If symlink is INCLUDE_LINK_ONLY, and if the above condition is true, it means that the link exists and there // will be no need to check for link existence explicitly, check only for target file existence if required if (symLinkAction.equals(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE) || symLinkAction.equals(ZipParameters.SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY)) { assertSymbolicLinkTargetExists(file); } } else { assertFileExists(file); } } } public static boolean isNumberedSplitFile(File file) { return file.getName().endsWith(InternalZipConstants.SEVEN_ZIP_SPLIT_FILE_EXTENSION_PATTERN); } public static String getFileExtension(File file) { String fileName = file.getName(); if (!fileName.contains(".")) { return ""; } return fileName.substring(fileName.lastIndexOf(".") + 1); } /** * A helper method to retrieve all split files which are of the format split by 7-zip, i.e, .zip.001, .zip.002, etc. * This method also sorts all the files by their split part * @param firstNumberedFile - first split file * @return sorted list of split files. Returns an empty list if no files of that pattern are found in the current directory */ public static File[] getAllSortedNumberedSplitFiles(File firstNumberedFile) { final String zipFileNameWithoutExtension = FileUtils.getFileNameWithoutExtension(firstNumberedFile.getName()); File[] allSplitFiles = firstNumberedFile.getParentFile().listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.startsWith(zipFileNameWithoutExtension + "."); } }); if(allSplitFiles == null) { return new File[0]; } Arrays.sort(allSplitFiles); return allSplitFiles; } public static String getNextNumberedSplitFileCounterAsExtension(int index) { return "." + getExtensionZerosPrefix(index) + (index + 1); } public static boolean isSymbolicLink(File file) { try { return Files.isSymbolicLink(file.toPath()); } catch (Exception | Error e) { return false; } } public static String readSymbolicLink(File file) { try { return Files.readSymbolicLink(file.toPath()).toString(); } catch (Exception | Error e) { return ""; } } public static byte[] getDefaultFileAttributes(boolean isDirectory) { byte[] permissions = new byte[4]; if (isUnix() || isMac()) { if (isDirectory) { System.arraycopy(DEFAULT_POSIX_FOLDER_ATTRIBUTES, 0, permissions, 0, permissions.length); } else { System.arraycopy(DEFAULT_POSIX_FILE_ATTRIBUTES, 0, permissions, 0, permissions.length); } } else if (isWindows() && isDirectory) { permissions[0] = setBit(permissions[0], 4); } return permissions; } public static boolean isWindows() { String os = System.getProperty("os.name").toLowerCase(); return (os.contains("win")); } public static boolean isMac() { String os = System.getProperty("os.name").toLowerCase(); return (os.contains("mac")); } public static boolean isUnix() { String os = System.getProperty("os.name").toLowerCase(); return (os.contains("nux")); } private static String getExtensionZerosPrefix(int index) { if (index < 9) { return "00"; } else if (index < 99) { return "0"; } else { return ""; } } private static void applyWindowsFileAttributes(Path file, byte[] fileAttributes) { if (fileAttributes[0] == 0) { // No file attributes defined in the archive return; } DosFileAttributeView fileAttributeView = Files.getFileAttributeView(file, DosFileAttributeView.class, LinkOption.NOFOLLOW_LINKS); try { fileAttributeView.setReadOnly(isBitSet(fileAttributes[0], 0)); fileAttributeView.setHidden(isBitSet(fileAttributes[0], 1)); fileAttributeView.setSystem(isBitSet(fileAttributes[0], 2)); fileAttributeView.setArchive(isBitSet(fileAttributes[0], 5)); } catch (IOException e) { //Ignore } } private static void applyPosixFileAttributes(Path file, byte[] fileAttributes) { if (fileAttributes[2] == 0 && fileAttributes[3] == 0) { // No file attributes defined return; } try { Set posixFilePermissions = new HashSet<>(); addIfBitSet(fileAttributes[3], 0, posixFilePermissions, PosixFilePermission.OWNER_READ); addIfBitSet(fileAttributes[2], 7, posixFilePermissions, PosixFilePermission.OWNER_WRITE); addIfBitSet(fileAttributes[2], 6, posixFilePermissions, PosixFilePermission.OWNER_EXECUTE); addIfBitSet(fileAttributes[2], 5, posixFilePermissions, PosixFilePermission.GROUP_READ); addIfBitSet(fileAttributes[2], 4, posixFilePermissions, PosixFilePermission.GROUP_WRITE); addIfBitSet(fileAttributes[2], 3, posixFilePermissions, PosixFilePermission.GROUP_EXECUTE); addIfBitSet(fileAttributes[2], 2, posixFilePermissions, PosixFilePermission.OTHERS_READ); addIfBitSet(fileAttributes[2], 1, posixFilePermissions, PosixFilePermission.OTHERS_WRITE); addIfBitSet(fileAttributes[2], 0, posixFilePermissions, PosixFilePermission.OTHERS_EXECUTE); Files.setPosixFilePermissions(file, posixFilePermissions); } catch (IOException e) { // Ignore } } private static byte[] getWindowsFileAttributes(Path file) { byte[] fileAttributes = new byte[4]; try { DosFileAttributeView dosFileAttributeView = Files.getFileAttributeView(file, DosFileAttributeView.class, LinkOption.NOFOLLOW_LINKS); DosFileAttributes dosFileAttributes = dosFileAttributeView.readAttributes(); byte windowsAttribute = 0; windowsAttribute = setBitIfApplicable(dosFileAttributes.isReadOnly(), windowsAttribute, 0); windowsAttribute = setBitIfApplicable(dosFileAttributes.isHidden(), windowsAttribute, 1); windowsAttribute = setBitIfApplicable(dosFileAttributes.isSystem(), windowsAttribute, 2); windowsAttribute = setBitIfApplicable(dosFileAttributes.isDirectory(), windowsAttribute, 4); windowsAttribute = setBitIfApplicable(dosFileAttributes.isArchive(), windowsAttribute, 5); fileAttributes[0] = windowsAttribute; } catch (IOException e) { // ignore } return fileAttributes; } private static void assertFileExists(File file) throws ZipException { if (!file.exists()) { throw new ZipException("File does not exist: " + file); } } private static void assertSymbolicLinkTargetExists(File file) throws ZipException { if (!file.exists()) { throw new ZipException("Symlink target '" + readSymbolicLink(file) + "' does not exist for link '" + file + "'"); } } private static byte[] getPosixFileAttributes(Path file) { byte[] fileAttributes = new byte[4]; try { PosixFileAttributeView posixFileAttributeView = Files.getFileAttributeView(file, PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS); Set posixFilePermissions = posixFileAttributeView.readAttributes().permissions(); fileAttributes[3] = setBitIfApplicable(Files.isRegularFile(file), fileAttributes[3], 7); fileAttributes[3] = setBitIfApplicable(Files.isDirectory(file), fileAttributes[3], 6); fileAttributes[3] = setBitIfApplicable(Files.isSymbolicLink(file), fileAttributes[3], 5); fileAttributes[3] = setBitIfApplicable(posixFilePermissions.contains(OWNER_READ), fileAttributes[3], 0); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(OWNER_WRITE), fileAttributes[2], 7); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(OWNER_EXECUTE), fileAttributes[2], 6); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(GROUP_READ), fileAttributes[2], 5); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(GROUP_WRITE), fileAttributes[2], 4); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(GROUP_EXECUTE), fileAttributes[2], 3); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(OTHERS_READ), fileAttributes[2], 2); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(OTHERS_WRITE), fileAttributes[2], 1); fileAttributes[2] = setBitIfApplicable(posixFilePermissions.contains(OTHERS_EXECUTE), fileAttributes[2], 0); } catch (IOException e) { // Ignore } return fileAttributes; } private static byte setBitIfApplicable(boolean applicable, byte b, int pos) { if (applicable) { b = BitUtils.setBit(b, pos); } return b; } private static void addIfBitSet(byte b, int pos, Set posixFilePermissions, PosixFilePermission posixFilePermissionToAdd) { if (isBitSet(b, pos)) { posixFilePermissions.add(posixFilePermissionToAdd); } } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/InternalZipConstants.java000077500000000000000000000047211414265447200264500ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.util; import java.io.File; import java.nio.charset.Charset; public final class InternalZipConstants { private InternalZipConstants() { } public static final int ENDHDR = 22; // END header size public static final int STD_DEC_HDR_SIZE = 12; public static final int MAX_COMMENT_SIZE = 65536; //AES Constants public static final int AES_AUTH_LENGTH = 10; public static final int AES_BLOCK_SIZE = 16; public static final int AES_EXTRA_DATA_RECORD_SIZE = 11; public static final String AES_MAC_ALGORITHM = "HmacSHA1"; public static final String AES_HASH_CHARSET = "ISO-8859-1"; public static final int AES_HASH_ITERATIONS = 1000; public static final int AES_PASSWORD_VERIFIER_LENGTH = 2; public static final int MIN_SPLIT_LENGTH = 65536; public static final long ZIP_64_SIZE_LIMIT = 4294967295L; public static final int ZIP_64_NUMBER_OF_ENTRIES_LIMIT = 65535; public static final int BUFF_SIZE = 1024 * 4; public static final int MIN_BUFF_SIZE = 512; // Update local file header constants // This value holds the number of bytes to skip from // the offset of start of local header public static final int UPDATE_LFH_CRC = 14; public static final int UPDATE_LFH_COMP_SIZE = 18; public static final int UPDATE_LFH_UNCOMP_SIZE = 22; public static final String FILE_SEPARATOR = File.separator; public static final String ZIP_FILE_SEPARATOR = "/"; public static final int MAX_ALLOWED_ZIP_COMMENT_LENGTH = 0xFFFF; public static final String ZIP_STANDARD_CHARSET_NAME = "Cp437"; // StandardCharset.UTF-8 could have been used below but StandardCharset does not exist in older versions of Android public static final Charset CHARSET_UTF_8 = Charset.forName("UTF-8"); public static final Charset ZIP4J_DEFAULT_CHARSET = CHARSET_UTF_8; public static final String SEVEN_ZIP_SPLIT_FILE_EXTENSION_PATTERN = ".zip.001"; } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/PasswordCallback.java000066400000000000000000000001421414265447200255210ustar00rootroot00000000000000package net.lingala.zip4j.util; public interface PasswordCallback { char[] getPassword(); } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/RawIO.java000077500000000000000000000122741414265447200232770ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.util.Arrays; public class RawIO { private final byte[] shortBuff = new byte[2]; private final byte[] intBuff = new byte[4]; private final byte[] longBuff = new byte[8]; public long readLongLittleEndian(RandomAccessFile randomAccessFile) throws IOException { randomAccessFile.readFully(longBuff); return readLongLittleEndian(longBuff, 0); } public long readLongLittleEndian(RandomAccessFile randomAccessFile, int readLen) throws IOException { resetBytes(longBuff); randomAccessFile.readFully(longBuff, 0, readLen); return readLongLittleEndian(longBuff, 0); } public long readLongLittleEndian(InputStream inputStream) throws IOException { readFully(inputStream, longBuff, longBuff.length); return readLongLittleEndian(longBuff, 0); } public long readLongLittleEndian(InputStream inputStream, int readLen) throws IOException { resetBytes(longBuff); readFully(inputStream, longBuff, readLen); return readLongLittleEndian(longBuff, 0); } public long readLongLittleEndian(byte[] array, int pos) { if (array.length - pos < 8) { resetBytes(longBuff); } System.arraycopy(array, pos, longBuff, 0, array.length < 8 ? array.length - pos : 8); long temp = 0; temp |= longBuff[7] & 0xff; temp <<= 8; temp |= longBuff[6] & 0xff; temp <<= 8; temp |= longBuff[5] & 0xff; temp <<= 8; temp |= longBuff[4] & 0xff; temp <<= 8; temp |= longBuff[3] & 0xff; temp <<= 8; temp |= longBuff[2] & 0xff; temp <<= 8; temp |= longBuff[1] & 0xff; temp <<= 8; temp |= longBuff[0] & 0xff; return temp; } public int readIntLittleEndian(RandomAccessFile randomAccessFile) throws IOException { randomAccessFile.readFully(intBuff); return readIntLittleEndian(intBuff); } public int readIntLittleEndian(InputStream inputStream) throws IOException { readFully(inputStream, intBuff, 4); return readIntLittleEndian(intBuff); } public int readIntLittleEndian(byte[] b) { return readIntLittleEndian(b, 0); } public int readIntLittleEndian(byte[] b, int pos) { return ((b[pos] & 0xff) | (b[1 + pos] & 0xff) << 8) | ((b[2 + pos] & 0xff) | (b[3 + pos] & 0xff) << 8) << 16; } public int readShortLittleEndian(RandomAccessFile randomAccessFile) throws IOException { randomAccessFile.readFully(shortBuff); return readShortLittleEndian(shortBuff, 0); } public int readShortLittleEndian(InputStream inputStream) throws IOException { readFully(inputStream, shortBuff, shortBuff.length); return readShortLittleEndian(shortBuff, 0); } public int readShortLittleEndian(byte[] buff, int position) { return (buff[position] & 0xff) | (buff[1 + position] & 0xff) << 8; } public void writeShortLittleEndian(OutputStream outputStream, int value) throws IOException { writeShortLittleEndian(shortBuff, 0, value); outputStream.write(shortBuff); } public void writeShortLittleEndian(byte[] array, int pos, int value) { array[pos + 1] = (byte) (value >>> 8); array[pos] = (byte) (value & 0xFF); } public void writeIntLittleEndian(OutputStream outputStream, int value) throws IOException { writeIntLittleEndian(intBuff, 0, value); outputStream.write(intBuff); } public void writeIntLittleEndian(byte[] array, int pos, int value) { array[pos + 3] = (byte) (value >>> 24); array[pos + 2] = (byte) (value >>> 16); array[pos + 1] = (byte) (value >>> 8); array[pos] = (byte) (value & 0xFF); } public void writeLongLittleEndian(OutputStream outputStream, long value) throws IOException { writeLongLittleEndian(longBuff, 0, value); outputStream.write(longBuff); } public void writeLongLittleEndian(byte[] array, int pos, long value) { array[pos + 7] = (byte) (value >>> 56); array[pos + 6] = (byte) (value >>> 48); array[pos + 5] = (byte) (value >>> 40); array[pos + 4] = (byte) (value >>> 32); array[pos + 3] = (byte) (value >>> 24); array[pos + 2] = (byte) (value >>> 16); array[pos + 1] = (byte) (value >>> 8); array[pos] = (byte) (value & 0xFF); } private void readFully(InputStream inputStream, byte[] buff, int readLen) throws IOException { int actualReadLength = Zip4jUtil.readFully(inputStream, buff, 0, readLen); if (actualReadLength != readLen) { throw new ZipException("Could not fill buffer"); } } private void resetBytes(byte[] b) { Arrays.fill(b, (byte) 0); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/UnzipUtil.java000077500000000000000000000046171414265447200242630ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.inputstream.NumberedSplitInputStream; import net.lingala.zip4j.io.inputstream.SplitInputStream; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.io.inputstream.ZipStandardSplitInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipModel; import java.io.File; import java.io.IOException; import java.nio.file.Path; import static net.lingala.zip4j.util.FileUtils.setFileAttributes; import static net.lingala.zip4j.util.FileUtils.setFileLastModifiedTime; import static net.lingala.zip4j.util.FileUtils.setFileLastModifiedTimeWithoutNio; public class UnzipUtil { public static ZipInputStream createZipInputStream(ZipModel zipModel, FileHeader fileHeader, char[] password) throws IOException { SplitInputStream splitInputStream = null; try { splitInputStream = createSplitInputStream(zipModel); splitInputStream.prepareExtractionForFileHeader(fileHeader); ZipInputStream zipInputStream = new ZipInputStream(splitInputStream, password); if (zipInputStream.getNextEntry(fileHeader, false) == null) { throw new ZipException("Could not locate local file header for corresponding file header"); } return zipInputStream; } catch (IOException e) { if (splitInputStream != null) { splitInputStream.close(); } throw e; } } public static void applyFileAttributes(FileHeader fileHeader, File file) { try { Path path = file.toPath(); setFileAttributes(path, fileHeader.getExternalFileAttributes()); setFileLastModifiedTime(path, fileHeader.getLastModifiedTime()); } catch (NoSuchMethodError e) { setFileLastModifiedTimeWithoutNio(file, fileHeader.getLastModifiedTime()); } } public static SplitInputStream createSplitInputStream(ZipModel zipModel) throws IOException { File zipFile = zipModel.getZipFile(); if (zipFile.getName().endsWith(InternalZipConstants.SEVEN_ZIP_SPLIT_FILE_EXTENSION_PATTERN)) { return new NumberedSplitInputStream(zipModel.getZipFile(), true, zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()); } return new ZipStandardSplitInputStream(zipModel.getZipFile(), zipModel.isSplitArchive(), zipModel.getEndOfCentralDirectoryRecord().getNumberOfThisDisk()); } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/Zip4jUtil.java000077500000000000000000000137171414265447200241570ustar00rootroot00000000000000/* * Copyright 2010 Srikanth Reddy Lingala * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AbstractFileHeader; import net.lingala.zip4j.model.enums.CompressionMethod; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.util.Calendar; public class Zip4jUtil { private static final long DOSTIME_BEFORE_1980 = (1 << 21) | (1 << 16); private static final int MAX_RAW_READ_FULLY_RETRY_ATTEMPTS = 15; public static boolean isStringNotNullAndNotEmpty(String str) { return str != null && str.trim().length() > 0; } public static boolean createDirectoryIfNotExists(File file) throws ZipException { if (file == null) { throw new ZipException("output path is null"); } if (file.exists()) { if (!file.isDirectory()) { throw new ZipException("output directory is not valid"); } } else { if (!file.mkdirs()) { throw new ZipException("Cannot create output directories"); } } return true; } public static long epochToExtendedDosTime(long time) { if (time < 0) { return DOSTIME_BEFORE_1980; } long dostime = epochToDosTime(time); return (dostime != DOSTIME_BEFORE_1980) ? dostime + ((time % 2000) << 32) : DOSTIME_BEFORE_1980; } private static long epochToDosTime(long time) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(time); int year = cal.get(Calendar.YEAR); if (year < 1980) { return DOSTIME_BEFORE_1980; } return (year - 1980) << 25 | (cal.get(Calendar.MONTH) + 1) << 21 | cal.get(Calendar.DATE) << 16 | cal.get(Calendar.HOUR_OF_DAY) << 11 | cal.get(Calendar.MINUTE) << 5 | cal.get(Calendar.SECOND) >> 1; } public static long dosToExtendedEpochTme(long dosTime) { long time = dosToEpochTime(dosTime); return time + (dosTime >> 32); } private static long dosToEpochTime(long dosTime) { int sec = (int) ((dosTime << 1) & 0x3e); int min = (int) ((dosTime >> 5) & 0x3f); int hrs = (int) ((dosTime >> 11) & 0x1f); int day = (int) ((dosTime >> 16) & 0x1f); int mon = (int) (((dosTime >> 21) & 0xf) - 1); int year = (int) (((dosTime >> 25) & 0x7f) + 1980); Calendar cal = Calendar.getInstance(); cal.set(year, mon, day, hrs, min, sec); cal.set(Calendar.MILLISECOND, 0); return cal.getTime().getTime(); } public static byte[] convertCharArrayToByteArray(char[] charArray) { try { ByteBuffer buf = InternalZipConstants.CHARSET_UTF_8.encode(CharBuffer.wrap(charArray)); byte[] bytes = new byte[buf.limit()]; buf.get(bytes); return bytes; } catch (Exception e) { byte[] bytes = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) { bytes[i] = (byte) charArray[i]; } return bytes; } } public static CompressionMethod getCompressionMethod(AbstractFileHeader localFileHeader) { if (localFileHeader.getCompressionMethod() != CompressionMethod.AES_INTERNAL_ONLY) { return localFileHeader.getCompressionMethod(); } if (localFileHeader.getAesExtraDataRecord() == null) { throw new RuntimeException("AesExtraDataRecord not present in local header for aes encrypted data"); } return localFileHeader.getAesExtraDataRecord().getCompressionMethod(); } public static int readFully(InputStream inputStream, byte[] bufferToReadInto) throws IOException { int readLen = inputStream.read(bufferToReadInto); if (readLen != bufferToReadInto.length) { readLen = readUntilBufferIsFull(inputStream, bufferToReadInto, readLen); if (readLen != bufferToReadInto.length) { throw new IOException("Cannot read fully into byte buffer"); } } return readLen; } public static int readFully(InputStream inputStream, byte[] b, int offset, int length) throws IOException { int numberOfBytesRead = 0; if (offset < 0) { throw new IllegalArgumentException("Negative offset"); } if (length < 0) { throw new IllegalArgumentException("Negative length"); } if (length == 0) { return 0; } if (offset + length > b.length) { throw new IllegalArgumentException("Length greater than buffer size"); } while (numberOfBytesRead != length) { int currentReadLength = inputStream.read(b, offset + numberOfBytesRead, length - numberOfBytesRead); if (currentReadLength == -1) { if (numberOfBytesRead == 0) { return -1; } return numberOfBytesRead; } numberOfBytesRead += currentReadLength; } return numberOfBytesRead; } private static int readUntilBufferIsFull(InputStream inputStream, byte[] bufferToReadInto, int readLength) throws IOException { int remainingLength = bufferToReadInto.length - readLength; int loopReadLength = 0; int retryAttempt = 1; // first attempt is already done before this method is called while (readLength < bufferToReadInto.length && loopReadLength != -1 && retryAttempt < MAX_RAW_READ_FULLY_RETRY_ATTEMPTS) { loopReadLength = inputStream.read(bufferToReadInto, readLength, remainingLength); if (loopReadLength > 0) { readLength += loopReadLength; remainingLength -= loopReadLength; } retryAttempt++; } return readLength; } } zip4j-2.9.1/src/main/java/net/lingala/zip4j/util/ZipVersionUtils.java000066400000000000000000000027551414265447200254470ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.headers.VersionMadeBy; import net.lingala.zip4j.headers.VersionNeededToExtract; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; public class ZipVersionUtils { public static int determineVersionMadeBy(ZipParameters zipParameters, RawIO rawIO) { byte[] versionMadeBy = new byte[2]; versionMadeBy[0] = VersionMadeBy.SPECIFICATION_VERSION.getCode(); versionMadeBy[1] = VersionMadeBy.UNIX.getCode(); if (FileUtils.isWindows() && !zipParameters.isUnixMode()) { // skip setting windows mode if unix mode is forced versionMadeBy[1] = VersionMadeBy.WINDOWS.getCode(); } return rawIO.readShortLittleEndian(versionMadeBy, 0); } public static VersionNeededToExtract determineVersionNeededToExtract(ZipParameters zipParameters) { VersionNeededToExtract versionRequired = VersionNeededToExtract.DEFAULT; if (zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE) { versionRequired = VersionNeededToExtract.DEFLATE_COMPRESSED; } if (zipParameters.getEntrySize() > InternalZipConstants.ZIP_64_SIZE_LIMIT) { versionRequired = VersionNeededToExtract.ZIP_64_FORMAT; } if (zipParameters.isEncryptFiles() && zipParameters.getEncryptionMethod().equals(EncryptionMethod.AES)) { versionRequired = VersionNeededToExtract.AES_ENCRYPTED; } return versionRequired; } } zip4j-2.9.1/src/test/000077500000000000000000000000001414265447200143425ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/000077500000000000000000000000001414265447200152635ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/000077500000000000000000000000001414265447200160515ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/000077500000000000000000000000001414265447200174605ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/000077500000000000000000000000001414265447200205205ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/AbstractIT.java000066400000000000000000000063651414265447200233750ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static org.assertj.core.api.Assertions.assertThat; public abstract class AbstractIT { protected static final char[] PASSWORD = "test123!".toCharArray(); protected static final List FILES_TO_ADD = Arrays.asList( getTestFileFromResources("sample_text1.txt"), getTestFileFromResources("sample_text_large.txt"), getTestFileFromResources("sample.pdf") ); protected static final Charset CHARSET_MS_932 = Charset.forName("Ms932"); protected static final Charset CHARSET_GBK = Charset.forName("GBK"); protected static final Charset CHARSET_CP_949 = Charset.forName("Cp949"); protected File generatedZipFile; protected File outputFolder; @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Before public void before() throws IOException { generatedZipFile = temporaryFolder.newFile("output.zip"); outputFolder = temporaryFolder.newFolder("output"); cleanupDirectory(temporaryFolder.getRoot()); } protected ZipParameters createZipParameters(EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength) { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(encryptionMethod); zipParameters.setAesKeyStrength(aesKeyStrength); return zipParameters; } protected void verifyFileHeadersContainsFiles(List fileHeaders, List fileNames) { for (String fileName : fileNames) { boolean fileFound = false; for (FileHeader fileHeader : fileHeaders) { if (fileHeader.getFileName().equals(fileName)) { fileFound = true; break; } } assertThat(fileFound).as("File with name %s not found in zip file", fileName).isTrue(); } } protected File getTestArchiveFromResources(String archiveName) { return TestUtils.getTestArchiveFromResources(archiveName); } protected void cleanupOutputFolder() { cleanupDirectory(outputFolder); } protected Zip4jConfig buildDefaultConfig() { return buildConfig(null); } protected Zip4jConfig buildConfig(Charset charset) { return new Zip4jConfig(charset, InternalZipConstants.BUFF_SIZE); } protected Zip4jConfig buildConfig(int bufferSize) { return new Zip4jConfig(null, bufferSize); } private void cleanupDirectory(File directory) { File[] allTempFiles = directory.listFiles(); if (allTempFiles == null) { return; } for (File file : allTempFiles) { if (!file.delete()) { throw new RuntimeException("Could not clean up directory. Error deleting file: " + file); } } } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/AddFilesToZipIT.java000066400000000000000000001407701414265447200242720ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.AbstractFileHeader; import net.lingala.zip4j.model.ExcludeFileFilter; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.BitUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import net.lingala.zip4j.util.ZipVersionUtils; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static net.lingala.zip4j.testutils.HeaderVerifier.verifyLocalFileHeaderUncompressedSize; import static net.lingala.zip4j.testutils.TestUtils.getFileNamesOfFiles; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; public class AddFilesToZipIT extends AbstractIT { private RawIO rawIO = new RawIO(); @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testAddFileAsStringParameterThrowsExceptionWhenFileDoesNotExist() throws ZipException { expectedException.expectMessage("File does not exist: somefile.txt"); expectedException.expect(ZipException.class); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile("somefile.txt"); } @Test public void testAddFileAsStringParameterWithoutZipParameterAddsAsDeflate() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("sample.pdf").getPath()); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample.pdf"), CompressionMethod.DEFLATE, null, null); verifyZipVersions(zipFile.getFileHeaders().get(0), new ZipParameters()); } @Test public void testAddFileAsStringWithZipParametersStoreAndStandardEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt").getPath(), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.STORE, EncryptionMethod.ZIP_STANDARD, null); } @Test public void testAddFileAsStringWithZipParametersStoreAndStandardEncryptionAndCharsetCp949() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.setCharset(CHARSET_CP_949); String koreanFileName = "가나다.abc"; zipFile.addFile(TestUtils.getTestFileFromResources(koreanFileName).getPath(), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1, true, CHARSET_CP_949); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(koreanFileName); verifyZipVersions(zipFile.getFileHeaders().get(0), zipParameters); } @Test public void testAddFileThrowsExceptionWhenFileDoesNotExist() throws ZipException { expectedException.expectMessage("File does not exist: somefile.txt"); expectedException.expect(ZipException.class); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(new File("somefile.txt")); } @Test public void testAddFileThrowsExceptionWhenPasswordNotSet() throws ZipException { expectedException.expectMessage("input password is empty or null"); expectedException.expect(ZipException.class); ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"), zipParameters); } @Test public void testAddFileWithoutZipParameterAddsAsDeflate() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("file_PDF_1MB.pdf"), CompressionMethod.DEFLATE, null, null); } @Test public void testAddFileWithZipParametersStoreAndStandardZip() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.STORE, EncryptionMethod.ZIP_STANDARD, null); } @Test public void testAddFileWithZipParametersStoreAndAes128Encryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.STORE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); verifyZipVersions(zipFile.getFileHeaders().get(0), zipParameters); } @Test public void testAddFileWithZipParametersStoreAndAes256Encryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.STORE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); } @Test public void testAddFileRemovesExistingFileNoEncryption() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.DEFLATE, null, null); } @Test public void testAddFileDoesNotOverrideFileIfFlagIsDisabled() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setOverrideExistingFilesInZip(false); zipFile.setPassword(PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.DEFLATE, null, null); } @Test public void testAddFileRemovesExistingFileNoEncryptionSingleFileInZip() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt")); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.STORE, null, null); } @Test public void testAddFileWithDifferentFileNameSetsTheNewFileName() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("/data/newfile.txt"); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getFileHeaders()).hasSize(1); assertThat(zipFile.getFileHeader("/data/newfile.txt")).isNotNull(); assertThat(zipFile.getFileHeader("sample_text_large.txt")).isNull(); zipFile.extractAll(outputFolder.getPath()); } @Test public void testAddFileRemovesExistingFileWithAesEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(1, TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.addFiles(filesToAdd, zipParameters); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size() + 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("file_PDF_1MB.pdf"), CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); } @Test public void testAddFileWithAfterDeflateRemainingBytesTestFile() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setAesVersion(AesVersion.TWO); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("after_deflate_remaining_bytes.bin"), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("after_deflate_remaining_bytes.bin"), CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); } @Test public void testAddFileProgressMonitorThrowsExceptionWhenPerformingActionInBusyState() throws ZipException { expectedException.expectMessage("invalid operation - Zip4j is in busy state"); expectedException.expect(ZipException.class); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.setRunInThread(true); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); progressMonitor.setState(ProgressMonitor.State.BUSY); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); } @Test public void testAddFileWithProgressMonitor() throws IOException, InterruptedException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); boolean percentBetweenZeroAndHundred = false; boolean fileNameSet = false; boolean taskNameSet = false; zipFile.setRunInThread(true); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"), createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256)); while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) { int percentDone = progressMonitor.getPercentDone(); String fileName = progressMonitor.getFileName(); if (percentDone > 0 && percentDone < 100) { percentBetweenZeroAndHundred = true; } if (fileName != null) { assertThat(fileName).contains("file_PDF_1MB.pdf"); fileNameSet = true; } Thread.sleep(10); if (!progressMonitor.getCurrentTask().equals(ProgressMonitor.Task.NONE)) { assertThat(progressMonitor.getCurrentTask()).isEqualTo(ProgressMonitor.Task.ADD_ENTRY); taskNameSet = true; } } assertThat(progressMonitor.getResult()).isEqualTo(ProgressMonitor.Result.SUCCESS); assertThat(progressMonitor.getState().equals(ProgressMonitor.State.READY)); assertThat(progressMonitor.getException()).isNull(); assertThat(percentBetweenZeroAndHundred).isTrue(); assertThat(fileNameSet).isTrue(); assertThat(taskNameSet).isTrue(); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); } @Test public void testAddFilesWithoutParametersWhenZipFileDoesNotExistCreatesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(asList( TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"), TestUtils.getTestFileFromResources("zero_byte_file.txt") )); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 2); verifyZipFileContainsFiles(generatedZipFile, asList("file_PDF_1MB.pdf", "zero_byte_file.txt"), CompressionMethod.DEFLATE, null, null); } @Test public void testAddFilesWhenZipFileDoesNotExistCreatesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(asList( TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"), TestUtils.getTestFileFromResources("sample_text1.txt") ), new ZipParameters()); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 2); verifyZipFileContainsFiles(generatedZipFile, asList("file_PDF_1MB.pdf", "sample_text1.txt"), CompressionMethod.DEFLATE, null, null); } @Test public void testAddFilesWithZeroByteFileWithAes128Encryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(singletonList(TestUtils.getTestFileFromResources("zero_byte_file.txt")), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("zero_byte_file.txt"), CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); } @Test public void testAddFilesWithAes256EncryptionV1() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setAesVersion(AesVersion.ONE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); List fileNames = getFileNamesOfFiles(FILES_TO_ADD); verifyZipFileContainsFiles(generatedZipFile, fileNames, CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, AesVersion.ONE); } @Test public void testAddFilesWithAes256EncryptionV2() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); List fileNames = getFileNamesOfFiles(FILES_TO_ADD); verifyZipFileContainsFiles(generatedZipFile, fileNames, CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); } @Test public void testAddFilesWithZipStandardEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); List fileNames = getFileNamesOfFiles(FILES_TO_ADD); verifyZipFileContainsFiles(generatedZipFile, fileNames, CompressionMethod.DEFLATE, EncryptionMethod.ZIP_STANDARD, null); } @Test public void testAddFilesWhenFilesAlreadyExistsRemovesFiles() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); char[] newPassword = "SOME_OTHER_PASSWORD".toCharArray(); zipFile = new ZipFile(generatedZipFile, newPassword); zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); zipFile.addFiles(FILES_TO_ADD, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, newPassword, outputFolder, FILES_TO_ADD.size()); List fileNames = getFileNamesOfFiles(FILES_TO_ADD); verifyZipFileContainsFiles(generatedZipFile, fileNames, CompressionMethod.DEFLATE, EncryptionMethod.ZIP_STANDARD, null); } @Test public void testAddFilesThrowsExceptionForAES192() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("Invalid AES key strength"); ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_192); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); } @Test public void testAddFilesToSplitZipThrowsException() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(singletonList(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")), new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); expectedException.expect(ZipException.class); expectedException.expectMessage("Zip file already exists. " + "Zip file format does not allow updating split/spanned files"); zipFile.addFiles(singletonList(TestUtils.getTestFileFromResources("sample.pdf"))); } @Test public void testAddFilesWithDifferentEncryptionType() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(singletonList(TestUtils.getTestFileFromResources("sample.pdf")), zipParameters); zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); zipFile.addFiles(singletonList(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 2); } @Test public void testAddFilesWithUtf8Characters() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(asList( TestUtils.getTestFileFromResources("sample.pdf"), TestUtils.getTestFileFromResources("бореиская.txt"), TestUtils.getTestFileFromResources("zero_byte_file.txt"), TestUtils.getTestFileFromResources("sample_text1.txt"), TestUtils.getTestFileFromResources("가나다.abc") ), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 5); List fileNamesThatShouldExistInZip = asList( "sample.pdf", "бореиская.txt", "zero_byte_file.txt", "sample_text1.txt", "가나다.abc" ); verifyZipFileContainsFiles(generatedZipFile, fileNamesThatShouldExistInZip, CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); } @Test public void testAddFilesWithProgressMonitor() throws IOException, InterruptedException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); boolean percentBetweenZeroAndHundred = false; boolean fileNameSet = false; boolean taskNameSet = false; List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.setRunInThread(true); zipFile.addFiles(filesToAdd, createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256)); while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) { int percentDone = progressMonitor.getPercentDone(); String fileName = progressMonitor.getFileName(); if (percentDone > 0 && percentDone < 100) { percentBetweenZeroAndHundred = true; } if (fileName != null) { fileNameSet = true; } Thread.sleep(10); if (!progressMonitor.getCurrentTask().equals(ProgressMonitor.Task.NONE)) { assertThat(progressMonitor.getCurrentTask()).isEqualTo(ProgressMonitor.Task.ADD_ENTRY); taskNameSet = true; } } assertThat(progressMonitor.getResult()).isEqualTo(ProgressMonitor.Result.SUCCESS); assertThat(progressMonitor.getState().equals(ProgressMonitor.State.READY)); assertThat(progressMonitor.getException()).isNull(); assertThat(percentBetweenZeroAndHundred).isTrue(); assertThat(fileNameSet).isTrue(); assertThat(taskNameSet).isTrue(); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 4); } @Test public void testAddFolderWithoutZipParameters() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFolder(TestUtils.getTestFileFromResources("")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 13); List fileHeaders = getFileHeaders(generatedZipFile); verifyAllFilesInZipContainsPath(fileHeaders, "test-files/"); verifyFoldersInZip(fileHeaders, generatedZipFile, null); } @Test public void testAddFolderWithStoreAndAes128() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 13); List fileHeaders = getFileHeaders(generatedZipFile); verifyAllFilesInZipContainsPath(fileHeaders, "test-files/"); verifyFoldersInZip(fileHeaders, generatedZipFile, PASSWORD); } @Test public void testAddFolderWithDeflateAndAes256AndWithoutRootFolder() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setIncludeRootFolder(false); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 12); List fileHeaders = getFileHeaders(generatedZipFile); verifyAllFilesInZipDoesNotContainPath(fileHeaders, "test-files/"); verifyFoldersInZip(fileHeaders, generatedZipFile, PASSWORD); } @Test public void testAddFolderWithRootFolderNameInZipAndWithoutRootFolder() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setIncludeRootFolder(false); zipParameters.setRootFolderNameInZip("root_folder_name"); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); List fileHeaders = getFileHeaders(generatedZipFile); verifyAllFilesInZipContainsPath(fileHeaders, "root_folder_name/"); verifyAllFilesInZipDoesNotContainPath(fileHeaders, "root_folder_name/test-files/"); verifyFoldersInZip(fileHeaders, generatedZipFile, PASSWORD); } @Test public void testAddFolderWithRootFolderNameInZipAndWithRootFolder() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setIncludeRootFolder(true); zipParameters.setRootFolderNameInZip("root_folder_name"); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); List fileHeaders = getFileHeaders(generatedZipFile); verifyAllFilesInZipContainsPath(fileHeaders, "root_folder_name/"); verifyAllFilesInZipContainsPath(fileHeaders, "root_folder_name/test-files/"); verifyFoldersInZip(fileHeaders, generatedZipFile, PASSWORD); } @Test public void testAddFolderWithProgressMonitor() throws IOException, InterruptedException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); boolean percentBetweenZeroAndHundred = false; boolean fileNameSet = false; zipFile.setRunInThread(true); zipFile.addFolder(TestUtils.getTestFileFromResources(""), createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256)); while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) { int percentDone = progressMonitor.getPercentDone(); String fileName = progressMonitor.getFileName(); if (percentDone > 0 && percentDone < 100) { percentBetweenZeroAndHundred = true; } if (fileName != null) { fileNameSet = true; } Thread.sleep(10); } assertThat(progressMonitor.getResult()).isEqualTo(ProgressMonitor.Result.SUCCESS); assertThat(progressMonitor.getState().equals(ProgressMonitor.State.READY)); assertThat(progressMonitor.getException()).isNull(); assertThat(percentBetweenZeroAndHundred).isTrue(); assertThat(fileNameSet).isTrue(); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 13); } @Test public void testAddFolderProgressMonitorThrowsExceptionWhenPerformingActionInBusyState() throws ZipException { expectedException.expectMessage("invalid operation - Zip4j is in busy state"); expectedException.expect(ZipException.class); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.setRunInThread(true); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); progressMonitor.setState(ProgressMonitor.State.BUSY); zipFile.addFile(TestUtils.getTestFileFromResources("")); } @Test public void testAddFolderWithNotNormalizedPath() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters parameters = new ZipParameters(); String folderToAddPath = TestUtils.getTestFileFromResources("").getPath() + InternalZipConstants.FILE_SEPARATOR + ".." + InternalZipConstants.FILE_SEPARATOR + TestUtils.getTestFileFromResources("").getName(); File folderToAdd = new File(folderToAddPath); zipFile.addFolder(folderToAdd, parameters); File fileToAdd = TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"); zipFile.addFile(fileToAdd, parameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 13); } @Test public void testAddFolderWithExcludeFileFilter() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); final List filesToExclude = Arrays.asList( TestUtils.getTestFileFromResources("sample.pdf"), TestUtils.getTestFileFromResources("sample_directory/favicon.ico") ); ZipParameters zipParameters = new ZipParameters(); zipParameters.setIncludeRootFolder(false); zipParameters.setExcludeFileFilter(new ExcludeFileFilter() { @Override public boolean isExcluded(File o) { return filesToExclude.contains(o); } }); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 10); verifyZipFileDoesNotContainFiles(generatedZipFile, Arrays.asList("sample.pdf", "sample_directory/favicon.ico")); } @Test public void testAddStreamToZipThrowsExceptionWhenFileNameIsNull() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); InputStream inputStream = new FileInputStream(TestUtils.getTestFileFromResources("бореиская.txt")); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(null); expectedException.expectMessage("fileNameInZip has to be set in zipParameters when adding stream"); expectedException.expect(ZipException.class); zipFile.addStream(inputStream, zipParameters); } @Test public void testAddStreamToZipThrowsExceptionWhenFileNameIsEmpty() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); InputStream inputStream = new FileInputStream(TestUtils.getTestFileFromResources("бореиская.txt")); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(""); expectedException.expectMessage("fileNameInZip has to be set in zipParameters when adding stream"); expectedException.expect(ZipException.class); zipFile.addStream(inputStream, zipParameters); } @Test public void testAddStreamToZipWithoutEncryptionForNewZipAddsSuccessfully() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("бореиская.txt"); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("бореиская.txt"), CompressionMethod.DEFLATE, null, null); } @Test public void testAddStreamToWithStoreCompressionAndWithoutEncryption() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("бореиская.txt"); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("бореиская.txt"), CompressionMethod.STORE, null, null); zipFile = new ZipFile(generatedZipFile); byte[] generalPurposeBytes = zipFile.getFileHeaders().get(0).getGeneralPurposeFlag(); // assert that extra data record is not present assertThat(BitUtils.isBitSet(generalPurposeBytes[0], 3)).isTrue(); } @Test public void testAddStreamToWithStoreCompressionAndZipStandardEncryption() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("sample_text_large.txt"); ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("sample_text_large.txt"), CompressionMethod.STORE, EncryptionMethod.ZIP_STANDARD, null); zipFile = new ZipFile(generatedZipFile, PASSWORD); byte[] generalPurposeBytes = zipFile.getFileHeaders().get(0).getGeneralPurposeFlag(); // assert that extra data record is not present assertThat(BitUtils.isBitSet(generalPurposeBytes[0], 3)).isTrue(); } @Test public void testAddStreamWithStoreCompressionAndCharset() throws IOException { String koreanFileName = "가나다.abc"; File fileToAdd = TestUtils.getTestFileFromResources(koreanFileName); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.setCharset(CHARSET_CP_949); zipFile.addStream(inputStream, zipParameters); byte[] generalPurposeBytes = zipFile.getFileHeaders().get(0).getGeneralPurposeFlag(); // assert that extra data record is not present assertThat(BitUtils.isBitSet(generalPurposeBytes[1], 3)).isFalse(); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(koreanFileName); } @Test public void testAddStreamWithStoreCompressionAndDefaultCharset() throws IOException { String koreanFileName = "가나다.abc"; File fileToAdd = TestUtils.getTestFileFromResources(koreanFileName); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); byte[] generalPurposeBytes = zipFile.getFileHeaders().get(0).getGeneralPurposeFlag(); // assert that extra data record is not present assertThat(BitUtils.isBitSet(generalPurposeBytes[1], 3)).isTrue(); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(koreanFileName); } @Test public void testAddStreamToZipWithAesEncryptionForNewZipAddsSuccessfully() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("бореиская.txt"); ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 1); verifyZipFileContainsFiles(generatedZipFile, singletonList("бореиская.txt"), CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); verifyLocalFileHeaderUncompressedSize(generatedZipFile, "бореиская.txt", 0); } @Test public void testAddStreamToZipWithoutEncryptionForExistingZipAddsSuccessfully() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("가나다.abc"); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 4); verifyFileIsOf(generatedZipFile, "가나다.abc", CompressionMethod.DEFLATE, EncryptionMethod.NONE, null, null); } @Test public void testAddStreamToZipWithAesEncryptionV2ForExistingZipAddsSuccessfully() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("가나다.abc"); ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 4); verifyFileIsOf(generatedZipFile, "가나다.abc", CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, AesVersion.TWO); } @Test public void testAddStreamToZipWithAesEncryptionV1ForExistingZipAddsSuccessfully() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("가나다.abc"); ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setAesVersion(AesVersion.ONE); zipParameters.setFileNameInZip(fileToAdd.getName()); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD); InputStream inputStream = new FileInputStream(fileToAdd); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 4); verifyFileIsOf(generatedZipFile, "가나다.abc", CompressionMethod.DEFLATE, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, AesVersion.ONE); } @Test public void testAddStreamToZipWithCharsetCp949() throws IOException { String koreanFileName = "가나다.abc"; ZipFile zipFile = new ZipFile(generatedZipFile); File fileToAdd = TestUtils.getTestFileFromResources(koreanFileName); InputStream inputStream = new FileInputStream(fileToAdd); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(fileToAdd.getName()); zipFile.setCharset(CHARSET_CP_949); zipFile.addStream(inputStream, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, true, CHARSET_CP_949); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(koreanFileName); } @Test public void testAddStreamToZipWithSameEntryNameRemovesOldEntry() throws IOException { File fileToAdd = TestUtils.getTestFileFromResources("sample.pdf"); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(fileToAdd); try(InputStream inputStream = new FileInputStream(fileToAdd)) { ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("sample.pdf"); zipFile.addStream(inputStream, zipParameters); } ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); } @Test public void testAddStreamWithStoreCompressionAndAesEncryptionWorksFine() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); File fileToAdd = TestUtils.getTestFileFromResources("sample.pdf"); try(InputStream inputStream = new FileInputStream(fileToAdd)) { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setEncryptFiles(true); zipParameters.setFileNameInZip(fileToAdd.getName()); zipFile.addStream(inputStream, zipParameters); } extractZipFileWithStream(generatedZipFile, PASSWORD); } @Test public void testAddFolderWithCustomBufferSize() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.setBufferSize(16 * 1024); zipFile.addFolder(TestUtils.getTestFileFromResources("")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 13); } private void verifyZipFileContainsFiles(File generatedZipFile, List fileNames, CompressionMethod compressionMethod, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength) throws ZipException { verifyZipFileContainsFiles(generatedZipFile, fileNames, compressionMethod, encryptionMethod, aesKeyStrength, AesVersion.TWO); } private void verifyZipFileContainsFiles(File generatedZipFile, List fileNames, CompressionMethod compressionMethod, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, AesVersion aesVersion) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List fileHeaders = zipFile.getFileHeaders(); verifyFileHeadersContainsFiles(fileHeaders, fileNames); verifyAllFilesAreOf(fileHeaders, compressionMethod, encryptionMethod, aesKeyStrength, aesVersion); } private void verifyZipFileDoesNotContainFiles(File generatedZipFile, List fileNamesNotInZip) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); for (FileHeader fileHeader : zipFile.getFileHeaders()) { for (String fileNameNotInZip : fileNamesNotInZip) { assertThat(fileHeader.getFileName()) .withFailMessage("Expected file " + fileNameNotInZip + " to not be present in zip file") .isNotEqualTo(fileNameNotInZip); } } } private void verifyFoldersInZip(List fileHeaders, File generatedZipFile, char[] password) throws IOException { verifyFoldersInFileHeaders(fileHeaders); verifyFoldersInLocalFileHeaders(generatedZipFile, password); } private void verifyFoldersInFileHeaders(List fileHeaders) { for (FileHeader fileHeader : fileHeaders){ if (fileHeader.isDirectory()) { verifyFolderEntryInZip(fileHeader); } } } private void verifyFoldersInLocalFileHeaders(File generatedZipFile, char[] password) throws IOException { try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(generatedZipFile), password)) { LocalFileHeader localFileHeader; while ((localFileHeader = zipInputStream.getNextEntry()) != null) { if (localFileHeader.isDirectory()) { verifyFolderEntryInZip(localFileHeader); } } } } private void verifyFolderEntryInZip(AbstractFileHeader fileHeader) { assertThat(fileHeader.getCrc()).isZero(); assertThat(fileHeader.getCompressedSize()).isZero(); assertThat(fileHeader.getUncompressedSize()).isZero(); assertThat(fileHeader.getCompressionMethod()).isEqualTo(CompressionMethod.STORE); assertThat(fileHeader.getEncryptionMethod()).isEqualTo(EncryptionMethod.NONE); } private void verifyAllFilesInZipContainsPath(List fileHeaders, String pathToBeChecked) { for (FileHeader fileHeader : fileHeaders) { assertThat(fileHeader.getFileName()).startsWith(pathToBeChecked); } } private void verifyAllFilesInZipDoesNotContainPath(List fileHeaders, String pathToBeChecked) { for (FileHeader fileHeader : fileHeaders) { assertThat(fileHeader.getFileName()).doesNotStartWith(pathToBeChecked); } } private void verifyAllFilesAreOf(List fileHeaders, CompressionMethod compressionMethod, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, AesVersion aesVersion) { for (FileHeader fileHeader : fileHeaders) { if (fileHeader.isDirectory()) { assertThat(fileHeader.getCompressionMethod()).isEqualTo(CompressionMethod.STORE); assertThat(fileHeader.isEncrypted()).isFalse(); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); assertThat(fileHeader.getCrc()).isZero(); } else { CompressionMethod shouldBeCompressionMethod = getShouldBeCompressionMethod( encryptionMethod == EncryptionMethod.AES, compressionMethod, fileHeader.getUncompressedSize()); assertThat(fileHeader.getCompressionMethod()).isEqualTo(shouldBeCompressionMethod); if (encryptionMethod == null) { assertThat(fileHeader.getEncryptionMethod()).isEqualTo(EncryptionMethod.NONE); } else { assertThat(fileHeader.getEncryptionMethod()).isEqualTo(encryptionMethod); } if (encryptionMethod == EncryptionMethod.AES) { verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), aesKeyStrength, aesVersion); if (fileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.TWO)) { assertThat(fileHeader.getCrc()).isZero(); } else { if (fileHeader.getCompressedSize() != 0) { assertThat(fileHeader.getCrc()).isNotZero(); } } } else { assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } } private void verifyFileIsOf(File generatedZipFile, String fileName, CompressionMethod compressionMethod, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, AesVersion aesVersion) throws ZipException { List fileHeaders = getFileHeaders(generatedZipFile); FileHeader fileHeader = getFileHeaderFrom(fileHeaders, fileName); if (encryptionMethod == null || encryptionMethod == EncryptionMethod.NONE) { assertThat(fileHeader.isEncrypted()).isFalse(); assertThat(fileHeader.getEncryptionMethod()).isIn(null, EncryptionMethod.NONE); } else { verifyAllFilesAreOf(singletonList(fileHeader), compressionMethod, encryptionMethod, aesKeyStrength, aesVersion); } } private FileHeader getFileHeaderFrom(List fileHeaders, String fileName) { for (FileHeader fileHeader : fileHeaders) { if (fileHeader.getFileName().equals(fileName)) { return fileHeader; } } fail("Could not find a file header by filename: " + fileName); return null; } private List getFileHeaders(File generatedZipFile) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List fileHeaders = zipFile.getFileHeaders(); assertThat(fileHeaders.size()).isNotZero(); return fileHeaders; } private void verifyAesExtraDataRecord(AESExtraDataRecord aesExtraDataRecord, AesKeyStrength aesKeyStrength, AesVersion aesVersion) { assertThat(aesExtraDataRecord).isNotNull(); assertThat(aesExtraDataRecord.getAesKeyStrength()).isEqualTo(aesKeyStrength); assertThat(aesExtraDataRecord.getAesVersion()).isEqualTo(aesVersion); } private CompressionMethod getShouldBeCompressionMethod(boolean isAesEncrypted, CompressionMethod compressionMethod, long uncompressedSize) { if (isAesEncrypted) { return CompressionMethod.AES_INTERNAL_ONLY; } if (uncompressedSize == 0) { return CompressionMethod.STORE; } return compressionMethod; } private void verifyZipVersions(FileHeader fileHeader, ZipParameters zipParameters) { int versionMadeBy = ZipVersionUtils.determineVersionMadeBy(zipParameters, rawIO); int versionNeededToExtract = ZipVersionUtils.determineVersionNeededToExtract(zipParameters).getCode(); assertThat(fileHeader.getVersionMadeBy()).isEqualTo(versionMadeBy); assertThat(fileHeader.getVersionNeededToExtract()).isEqualTo(versionNeededToExtract); } @SuppressWarnings("StatementWithEmptyBody") private void extractZipFileWithStream(File zipFileToExtract, char[] password) throws IOException { byte[] readBuff = new byte[InternalZipConstants.BUFF_SIZE]; try (ZipInputStream inputStream = new ZipInputStream(new FileInputStream(zipFileToExtract), password)) { while ((inputStream.getNextEntry()) != null) { while (inputStream.read(readBuff) != -1) { } } } } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/CreateZipFileIT.java000066400000000000000000000735361414265447200243240ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.CompressionLevel; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import org.assertj.core.data.Offset; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import static net.lingala.zip4j.testutils.TestUtils.createSymlink; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static net.lingala.zip4j.testutils.ZipFileVerifier.verifyZipFileByExtractingAllFiles; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; /** * Contains Integration tests for create operations of ZipFile */ public class CreateZipFileIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testCreateSplitZipFileNotSplitArchiveWithZipNameAsString() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile.getPath()); zipFile.createSplitZipFile(FILES_TO_ADD, new ZipParameters(), false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size()); } @Test public void testCreateSplitZipFileNotSplitArchiveWithZipNameAsStringAndCharsetCp949() throws IOException { String koreanFileName = "가나다.abc"; ZipFile zipFile = new ZipFile(generatedZipFile.getPath()); List filesToAdd = new ArrayList<>(); filesToAdd.add(getTestFileFromResources(koreanFileName)); zipFile.setCharset(CHARSET_CP_949); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, filesToAdd.size(), true, CHARSET_CP_949); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(koreanFileName); } @Test public void testCreateSplitZipFileNotSplitArchiveWithZipNameAsStringWithAESEncryption256() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile.getPath(), PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifyFileHeadersEncrypted(zipFile.getFileHeaders(), EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, CompressionMethod.DEFLATE); } @Test public void testCreateSplitZipFileNotSplitArchiveWithZipNameAsStringWithAESEncryption128() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile.getPath(), PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifyFileHeadersEncrypted(zipFile.getFileHeaders(), EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, CompressionMethod.DEFLATE); } @Test public void testCreateSplitZipFileNotSplitArchiveWithFile() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(FILES_TO_ADD, new ZipParameters(), false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size()); } @Test public void testCreateSplitZipFileNotSplitArchiveWithFileAndWithAESEncryption256() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile.getPath(), PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifyFileHeadersEncrypted(zipFile.getFileHeaders(), EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, CompressionMethod.DEFLATE); } @Test public void testCreateSplitZipFileNotSplitArchiveWithFileAndWithAESEncryption128() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile.getPath(), PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifyFileHeadersEncrypted(zipFile.getFileHeaders(), EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, CompressionMethod.DEFLATE); } @Test public void testCreateSplitZipFileNotSplitArchiveWithFileAndWithStandardEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile.getPath(), PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, false, -1); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifyFileHeadersEncrypted(zipFile.getFileHeaders(), EncryptionMethod.ZIP_STANDARD, AesKeyStrength.KEY_STRENGTH_128, CompressionMethod.DEFLATE); } @Test public void testCreateSplitZipFileThrowsExceptionWhenSplitSizeLessThanMinimumAllowed() throws ZipException { expectedException.expectMessage("split length less than minimum allowed split length of " + InternalZipConstants.MIN_SPLIT_LENGTH + " Bytes"); expectedException.expect(ZipException.class); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(FILES_TO_ADD, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH - 1); } @Test public void testCreateSplitZipFileStoreAndWithoutEncryption() throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size()); verifySplitZip(generatedZipFile, 2, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileStoreAndStandardZipEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifySplitZip(generatedZipFile, 2, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileStoreAndWithAesEncryptionKeyStrength256() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.createSplitZipFile(FILES_TO_ADD, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); verifySplitZip(generatedZipFile, 2, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileStoreAndWithAesEncryptionKeyStrength128() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size() + 1); verifySplitZip(generatedZipFile, 18, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileDeflateAndWithoutEncryption() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, 716800); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size() + 1); verifySplitZip(generatedZipFile, 2, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileDeflateAndStandardZipEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.DEFLATE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, 512000); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size() + 1); verifySplitZip(generatedZipFile, 2, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileDeflateAndWithAesEncryptionKeyStrength256() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size() + 1); verifySplitZip(generatedZipFile, 15, InternalZipConstants.MIN_SPLIT_LENGTH); } @Test public void testCreateSplitZipFileDeflateAndWithAesEncryptionKeyStrength128() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH + 2000); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size() + 1); verifySplitZip(generatedZipFile, 15, InternalZipConstants.MIN_SPLIT_LENGTH + 2000); } @Test public void testCreateZipFileWithSetPasswordSetter() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile, "WRONG_PASSWORD".toCharArray()); zipFile.setPassword(PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size()); } @Test public void testAddFileWithFileEntryCommentAndUtf8Charset() throws IOException { testCreateZipFileWithFileEntryComment("FILE_COMMET_", StandardCharsets.UTF_8); } @Test public void testAddFileWithFileEntryCommentAndNullCharsetUsesUtf8() throws IOException { testCreateZipFileWithFileEntryComment("FILE_COMMET_", null); } @Test public void testAddFileWithFileEntryCommentAndGBKCharset() throws IOException { testCreateZipFileWithFileEntryComment("测试中文_", Charset.forName("GBK")); } @Test public void testAddingSameFileMultipleTimesResultsInOnlyOneFileInZip() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("renamed-file.pdf"); zipFile.addFile(getTestFileFromResources("sample.pdf"), zipParameters); zipFile.addFile(getTestFileFromResources("sample.pdf"), zipParameters); zipFile.addFile(getTestFileFromResources("sample.pdf"), zipParameters); assertThat(zipFile.getFileHeaders()).hasSize(1); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo("renamed-file.pdf"); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, false); } @Test public void testAddSymlinkWithLinkOnly() throws IOException { File targetFile = getTestFileFromResources("sample.pdf"); File symlink = createSymlink(targetFile, temporaryFolder.getRoot()); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); zipFile.addFile(symlink, zipParameters); assertThat(zipFile.getFileHeaders()).hasSize(1); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(symlink.getName()); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, false); verifyGeneratedSymlink(symlink, targetFile); } @Test public void testAddSymlinkWithLinkedFileOnly() throws IOException { File targetFile = getTestFileFromResources("sample.pdf"); File symlink = createSymlink(targetFile, temporaryFolder.getRoot()); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY); zipFile.addFile(symlink, zipParameters); assertThat(zipFile.getFileHeaders()).hasSize(1); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(targetFile.getName()); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); } @Test public void testAddSymlinkWithLinkAndLinkedFile() throws IOException { File targetFile = getTestFileFromResources("sample.pdf"); File symlink = createSymlink(targetFile, temporaryFolder.getRoot()); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE); zipFile.addFile(symlink, zipParameters); List fileHeaders = zipFile.getFileHeaders(); assertThat(fileHeaders).hasSize(2); assertThat(fileHeaders.get(0).getFileName()).isEqualTo(symlink.getName()); assertThat(fileHeaders.get(1).getFileName()).isEqualTo(targetFile.getName()); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 2, false); verifyGeneratedSymlink(symlink, targetFile); File generatedTargetFile = Paths.get(outputFolder.getAbsolutePath(), targetFile.getName()).toFile(); ZipFileVerifier.verifyFileCrc(targetFile, generatedTargetFile); } @Test public void testAddSymlinksInAFolderWithLinkOnly() throws IOException { File testFolder = createTestFolderWithSymlinks(); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); zipFile.addFolder(testFolder, zipParameters); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 6, false); verifyFileNamesInZip(zipFile, "test-folder/", "test-folder/symlink.link", "test-folder/sub-folder1/", "test-folder/sub-folder1/symlink.link", "test-folder/sub-folder2/", "test-folder/sub-folder2/symlink.link"); } @Test public void testAddSymlinksInAFolderWithLinkedFilesOnly() throws IOException { File testFolder = createTestFolderWithSymlinks(); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY); zipFile.addFolder(testFolder, zipParameters); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 6, false); verifyFileNamesInZip(zipFile, "test-folder/", "test-folder/sample.pdf", "test-folder/sub-folder1/", "test-folder/sub-folder1/file_PDF_1MB.pdf", "test-folder/sub-folder2/", "test-folder/sub-folder2/sample_text_large.txt"); } @Test public void testAddSymlinksInAFolderWithLinkAndLinkedFilesOnly() throws IOException { File testFolder = createTestFolderWithSymlinks(); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE); zipFile.addFolder(testFolder, zipParameters); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 9, false); verifyFileNamesInZip(zipFile, "test-folder/", "test-folder/symlink.link", "test-folder/sample.pdf", "test-folder/sub-folder1/", "test-folder/sub-folder1/symlink.link", "test-folder/sub-folder1/file_PDF_1MB.pdf", "test-folder/sub-folder2/", "test-folder/sub-folder2/sample_text_large.txt", "test-folder/sub-folder2/symlink.link"); } @Test public void testAddSymlinksInAFolderWithLinkAndLinkedFilesOnlyWithoutRootFolder() throws IOException { File testFolder = createTestFolderWithSymlinks(); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setIncludeRootFolder(false); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE); zipFile.addFolder(testFolder, zipParameters); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 8, false); verifyFileNamesInZip(zipFile, "symlink.link", "sample.pdf", "sub-folder1/", "sub-folder1/symlink.link", "sub-folder1/file_PDF_1MB.pdf", "sub-folder2/", "sub-folder2/sample_text_large.txt", "sub-folder2/symlink.link"); } @Test public void testAddSymlinkWithLinkOnlyMissingTarget() throws IOException { File targetFile = Paths.get(temporaryFolder.getRoot().getAbsolutePath(), "foo").toFile(); File symlink = createSymlink(targetFile, temporaryFolder.getRoot()); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); zipFile.addFile(symlink, zipParameters); assertThat(zipFile.getFileHeaders()).hasSize(1); assertThat(zipFile.getFileHeaders().get(0).getFileName()).isEqualTo(symlink.getName()); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, false); verifyGeneratedSymlink(symlink, targetFile); } @Test public void testAddSymlinkWithLinkedFileOnlyMissingTargetThrowsException() throws IOException { testAddSymlinkThrowsExceptionForMissingTarget(ZipParameters.SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY); } @Test public void testAddSymlinkWithLinkAndLinkedFileMissingTargetThrowsException() throws IOException { testAddSymlinkThrowsExceptionForMissingTarget(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE); } @Test public void testAddSymlinksInAFolderWithLinkOnlyMissingTarget() throws IOException { Path testFolderPath = temporaryFolder.newFolder("test-folder").toPath(); Path subFolder1 = Files.createDirectory(Paths.get(testFolderPath.toString(), "sub-folder1")); Path subFolder2 = Files.createDirectory(Paths.get(testFolderPath.toString(), "sub-folder2")); File targetFile = Paths.get(temporaryFolder.getRoot().getAbsolutePath(), "foo").toFile(); createSymlink(targetFile, testFolderPath.toFile()); createSymlink(getTestFileFromResources("file_PDF_1MB.pdf"), subFolder1.toFile()); createSymlink(getTestFileFromResources("sample_text_large.txt"), subFolder2.toFile()); File testFolder = testFolderPath.toFile(); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); zipFile.addFolder(testFolder, zipParameters); verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 6, false); verifyFileNamesInZip(zipFile, "test-folder/", "test-folder/symlink.link", "test-folder/sub-folder1/", "test-folder/sub-folder1/symlink.link", "test-folder/sub-folder2/", "test-folder/sub-folder2/symlink.link"); } @Test public void testEncryptWithZipStrongEncryptionThrowsException() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD_VARIANT_STRONG); zipParameters.setEncryptFiles(true); expectedException.expect(ZipException.class); expectedException.expectMessage("ZIP_STANDARD_VARIANT_STRONG encryption method is not supported"); zipFile.addFiles(FILES_TO_ADD, zipParameters); } @Test public void testCreateZipFileWithFasterCompressionLevel() throws IOException { createZipFileWithCompressionLevel(CompressionLevel.FASTER); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); } @Test public void testCreateZipFileWithMediumFastCompressionLevel() throws IOException { createZipFileWithCompressionLevel(CompressionLevel.MEDIUM_FAST); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); } @Test public void testCreateZipFileWithHigherCompressionLevel() throws IOException { createZipFileWithCompressionLevel(CompressionLevel.HIGHER); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); } @Test public void testCreateZipFileWithPreUltraCompressionLevel() throws IOException { createZipFileWithCompressionLevel(CompressionLevel.PRE_ULTRA); verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); } private void testAddSymlinkThrowsExceptionForMissingTarget(ZipParameters.SymbolicLinkAction symbolicLinkAction) throws IOException { File targetFile = Paths.get(temporaryFolder.getRoot().getAbsolutePath(), "foo").toFile(); File symlink = createSymlink(targetFile, temporaryFolder.getRoot()); ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(symbolicLinkAction); expectedException.expect(ZipException.class); expectedException.expectMessage("Symlink target '" + targetFile + "' does not exist for link '" + symlink + "'"); zipFile.addFile(symlink, zipParameters); } private void testCreateZipFileWithFileEntryComment(String fileCommentPrefix, Charset charset) throws IOException { ZipParameters zipParameters = new ZipParameters(); ZipFile zipFile = initializeZipFileWithCharset(charset); for (int i = 0; i < FILES_TO_ADD.size(); i++) { if (i == 0) { zipParameters.setFileComment(fileCommentPrefix + i); } else { zipParameters.setFileComment(null); } zipFile.addFile(FILES_TO_ADD.get(i), zipParameters); } verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size()); verifyFileEntryComment(fileCommentPrefix, charset); } private void verifySplitZip(File zipFile, int numberOfExpectedSplitFiles, long splitLength) throws ZipException { assertNumberOfSplitFile(zipFile, numberOfExpectedSplitFiles); assertSplitFileSizes(zipFile, numberOfExpectedSplitFiles, splitLength); } private void assertSplitFileSizes(File zipFile, int numberOfExpectedSplitFiles, long splitLength) { for (int i = 0; i < numberOfExpectedSplitFiles - 2; i++) { String zipExtension = ".z0"; if (i >= 9) { zipExtension = ".z"; } String fileNameWithoutExtension = zipFile.getPath().substring(0, zipFile.getPath().lastIndexOf(".zip")); File splitZip = new File(fileNameWithoutExtension + zipExtension + (i + 1)); assertThat(splitZip).exists(); assertThat(splitZip.length()).isCloseTo(splitLength, Offset.offset(1000L)); } } private void assertNumberOfSplitFile(File zipFile, int numberOfExpectedSplitFiles) throws ZipException { File[] allSplitFiles = getAllSplitZipFilesInFolder(zipFile.getParentFile(), FileUtils.getZipFileNameWithoutExtension(zipFile.getName())); assertThat(allSplitFiles.length).as("Number of split files").isEqualTo(numberOfExpectedSplitFiles); } private void verifyFileHeadersEncrypted(List fileHeaders, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, CompressionMethod compressionMethod) { for (FileHeader fileHeader : fileHeaders) { if (fileHeader.isDirectory()) { assertThat(fileHeader.isEncrypted()).isFalse(); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } else { assertThat(fileHeader.isEncrypted()).isTrue(); assertThat(fileHeader.getEncryptionMethod()).isEqualTo(encryptionMethod); if (encryptionMethod == EncryptionMethod.AES) { verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), compressionMethod, aesKeyStrength); } else { assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } } private void verifyAesExtraDataRecord(AESExtraDataRecord aesExtraDataRecord, CompressionMethod compressionMethod, AesKeyStrength aesKeyStrength) { assertThat(aesExtraDataRecord).isNotNull(); assertThat(aesExtraDataRecord.getCompressionMethod()).isEqualTo(compressionMethod); assertThat(aesExtraDataRecord.getAesKeyStrength()).isEqualTo(aesKeyStrength); } private File[] getAllSplitZipFilesInFolder(File folder, final String fileNameWithoutExtension) { FilenameFilter filenameFilter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.contains(fileNameWithoutExtension + "."); } }; return folder.listFiles(filenameFilter); } private void verifyFileEntryComment(String commentPrefix, Charset charset) throws IOException { ZipFile zipFile = initializeZipFileWithCharset(charset); List fileHeaders = zipFile.getFileHeaders(); for (int i = 0; i < fileHeaders.size(); i++) { FileHeader fileHeader = fileHeaders.get(i); if (i == 0) { assertThat(fileHeader.getFileComment()).isEqualTo(commentPrefix + i); } else { assertThat(fileHeader.getFileComment()).isNull(); } } } private ZipFile initializeZipFileWithCharset(Charset charset) { ZipFile zipFile = new ZipFile(generatedZipFile); if (charset != null) { zipFile.setCharset(charset); } return zipFile; } private void verifyGeneratedSymlink(File actualSymlink, File targetFile) throws IOException { File extractedSymlink = Paths.get(outputFolder.getAbsolutePath(), actualSymlink.getName()).toFile(); assertThat(Files.isSymbolicLink(extractedSymlink.toPath())).isTrue(); assertThat(actualSymlink.length()).isEqualTo(extractedSymlink.length()); File generatedTarget = Files.readSymbolicLink(extractedSymlink.toPath()).toFile(); assertThat(generatedTarget).isEqualTo(targetFile); } private File createTestFolderWithSymlinks() throws IOException { Path testFolder = temporaryFolder.newFolder("test-folder").toPath(); Path subFolder1 = Files.createDirectory(Paths.get(testFolder.toString(), "sub-folder1")); Path subFolder2 = Files.createDirectory(Paths.get(testFolder.toString(), "sub-folder2")); createSymlink(getTestFileFromResources("sample.pdf"), testFolder.toFile()); createSymlink(getTestFileFromResources("file_PDF_1MB.pdf"), subFolder1.toFile()); createSymlink(getTestFileFromResources("sample_text_large.txt"), subFolder2.toFile()); return testFolder.toFile(); } private void verifyFileNamesInZip(ZipFile zipFile, String... fileNames) throws ZipException { List fileHeaders = zipFile.getFileHeaders(); for (String fileName : fileNames) { boolean entryFound = false; for (FileHeader fileHeader : fileHeaders) { if (fileHeader.getFileName().equals(fileName)) { entryFound = true; break; } } if (!entryFound) { fail("Could not find entry: " + fileName + " in zip"); } } } private ZipFile createZipFileWithCompressionLevel(CompressionLevel compressionLevel) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionLevel(compressionLevel); zipFile.addFiles(FILES_TO_ADD, zipParameters); return zipFile; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/ExtractZipFileIT.java000066400000000000000000001037141414265447200245230ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.inputstream.ZipInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.UnzipParameters; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.FileUtils; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static net.lingala.zip4j.testutils.TestUtils.getFileNamesOfFiles; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static net.lingala.zip4j.testutils.ZipFileVerifier.verifyZipFileByExtractingAllFiles; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; public class ExtractZipFileIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testExtractAllStoreAndNoEncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllStoreAndZipStandardEncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllStoreAndAes128EncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllStoreAndAes256EncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllDeflateAndNoEncryptionExtractsSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllDeflateAndZipStandardEncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllDeflateAndAes128EncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllDeflateAndAes256EncryptionExtractsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 3); } @Test public void testExtractAllSkipsSymlinksWhenSymlinkExtractionSetToFalse() throws IOException { ZipFile zipFile = createZipFileWithASymlink(createSymlink()); zipFile.extractAll(outputFolder.getPath(), buildUnzipParameters(false)); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 4); } @Test public void testExtractAllExtractsSymlinksWhenSymlinkExtractionSetToTrue() throws IOException { ZipFile zipFile = createZipFileWithASymlink(createSymlink()); zipFile.extractAll(outputFolder.getPath(), buildUnzipParameters(true)); verifyNumberOfFilesInOutputFolder(outputFolder, 5); } @Test public void testExtractFileWithFileHeaderWithAes128() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); FileHeader fileHeader = zipFile.getFileHeader("sample_text_large.txt"); zipFile.extractFile(fileHeader, outputFolder.getPath()); File[] outputFiles = outputFolder.listFiles(); assertThat(outputFiles).hasSize(1); ZipFileVerifier.verifyFileContent(getTestFileFromResources("sample_text_large.txt"), outputFiles[0]); } @Test public void testExtractFileWithFileHeaderWithAes128AndInDirectory() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(getTestFileFromResources(""), zipParameters); FileHeader fileHeader = zipFile.getFileHeader("test-files/öüäöäö/asöäööl"); zipFile.extractFile(fileHeader, outputFolder.getPath()); File outputFile = getFileWithNameFrom(outputFolder, "asöäööl"); ZipFileVerifier.verifyFileContent(getTestFileFromResources("öüäöäö/asöäööl"), outputFile); } @Test public void testExtractFileWithFileHeaderWithAes256AndWithANewFileName() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); String newFileName = "newFileName"; FileHeader fileHeader = zipFile.getFileHeader("sample_text_large.txt"); zipFile.extractFile(fileHeader, outputFolder.getPath(), newFileName); File outputFile = getFileWithNameFrom(outputFolder, newFileName); ZipFileVerifier.verifyFileContent(getTestFileFromResources("sample_text_large.txt"), outputFile); } @Test public void testExtractFileWithFileHeaderDoesNotExtractSymlinkWhenSymlinkExtractionIsNotSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); FileHeader fileHeader = zipFile.getFileHeader(symlink.getName()); zipFile.extractFile(fileHeader, outputFolder.getPath(), buildUnzipParameters(false)); assertThat(outputFolder.listFiles()).isNull(); } @Test public void testExtractFileWithFileHeaderExtractsSymlinkWhenSymlinkExtractionIsSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); FileHeader fileHeader = zipFile.getFileHeader(symlink.getName()); zipFile.extractFile(fileHeader, outputFolder.getPath(), buildUnzipParameters(true)); verifyNumberOfFilesInOutputFolder(outputFolder, 1); assertThat(outputFolder.listFiles()[0].getName()).isEqualTo(symlink.getName()); } @Test public void testExtractFileWithFileHeaderAndNewFileDoesNotExtractSymlinkWhenSymlinkExtractionIsNotSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); FileHeader fileHeader = zipFile.getFileHeader(symlink.getName()); zipFile.extractFile(fileHeader, outputFolder.getPath(), "newFileName", buildUnzipParameters(false)); assertThat(outputFolder.listFiles()).isNull(); } @Test public void testExtractFileWithFileHeaderAndNewFileNameExtractsSymlinkWhenSymlinkExtractionIsSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); FileHeader fileHeader = zipFile.getFileHeader(symlink.getName()); String newFileName = "newName.link"; zipFile.extractFile(fileHeader, outputFolder.getPath(), newFileName, buildUnzipParameters(true)); verifyNumberOfFilesInOutputFolder(outputFolder, 1); assertThat(outputFolder.listFiles()[0].getName()).isEqualTo(newFileName); } @Test public void testExtractFileWithFileNameThrowsExceptionWhenFileNotFound() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD); try { zipFile.extractFile("NOT_EXISTING", outputFolder.getPath()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e).isNotNull(); assertThat(e.getType()).isEqualTo(ZipException.Type.FILE_NOT_FOUND); assertThat(e.getMessage()).isEqualTo("No file found with name NOT_EXISTING in zip file"); } } @Test public void testExtractFileWithFileNameWithZipStandardEncryption() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(getTestFileFromResources(""), zipParameters); zipFile.extractFile("test-files/sample_directory/favicon.ico", outputFolder.getPath()); File outputFile = getFileWithNameFrom(outputFolder, "favicon.ico"); ZipFileVerifier.verifyFileContent(getTestFileFromResources("sample_directory/favicon.ico"), outputFile); } @Test public void testExtractFileWithFileNameWithZipStandardEncryptionAndNewFileName() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(getTestFileFromResources(""), zipParameters); String newFileName = "newFileName"; zipFile.extractFile("test-files/sample_directory/favicon.ico", outputFolder.getPath(), newFileName); File outputFile = getFileWithNameFrom(outputFolder, newFileName); ZipFileVerifier.verifyFileContent(getTestFileFromResources("sample_directory/favicon.ico"), outputFile); } @Test public void testExtractFileWithFileNameDoesNotExtractSymlinkWhenSymlinkExtractionIsNotSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); zipFile.extractFile(symlink.getName(), outputFolder.getPath(), buildUnzipParameters(false)); assertThat(outputFolder.listFiles()).isNull(); } @Test public void testExtractFileWithFileNameExtractsSymlinkWhenSymlinkExtractionIsSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); zipFile.extractFile(symlink.getName(), outputFolder.getPath(), buildUnzipParameters(true)); verifyNumberOfFilesInOutputFolder(outputFolder, 1); assertThat(outputFolder.listFiles()[0].getName()).isEqualTo(symlink.getName()); } @Test public void testExtractFileWithFileNameAndNewFileNameDoesNotExtractSymlinkWhenSymlinkExtractionIsNotSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); zipFile.extractFile(symlink.getName(), outputFolder.getPath(), "newFileName", buildUnzipParameters(false)); assertThat(outputFolder.listFiles()).isNull(); } @Test public void testExtractFileWithFileNameAndNewFileNameExtractsSymlinkWhenSymlinkExtractionIsSet() throws IOException { File symlink = createSymlink(); ZipFile zipFile = createZipFileWithASymlink(symlink); String newFileName = "newName.link"; zipFile.extractFile(symlink.getName(), outputFolder.getPath(), newFileName, buildUnzipParameters(true)); verifyNumberOfFilesInOutputFolder(outputFolder, 1); assertThat(outputFolder.listFiles()[0].getName()).isEqualTo(newFileName); } @Test public void testExtractFilesThrowsExceptionForWrongPasswordForAes() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); try { zipFile = new ZipFile(generatedZipFile, "WRONG_PASSWORD".toCharArray()); zipFile.extractAll(outputFolder.getPath()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e).isNotNull(); assertThat(e.getType()).isEqualTo(ZipException.Type.WRONG_PASSWORD); } } @Test public void testExtractFilesThrowsExceptionForWrongPasswordForZipStandardAndDeflate() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); try { zipFile = new ZipFile(generatedZipFile, "WRONG_PASSWORD".toCharArray()); zipFile.extractAll(outputFolder.getPath()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e).isNotNull(); assertThat(e.getType()).isEqualTo(ZipException.Type.WRONG_PASSWORD); } } @Test public void testExtractFilesThrowsExceptionForWrongPasswordForZipStandardAndStore() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); try { zipFile = new ZipFile(generatedZipFile, "WRONG_PASSWORD".toCharArray()); zipFile.extractAll(outputFolder.getPath()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e).isNotNull(); assertThat(e.getType()).isEqualTo(ZipException.Type.WRONG_PASSWORD); } } @Test public void testExtractFilesForAZipMadeWithZip4jv1AndStoreCompressionWithAES() throws IOException { File zipArchiveToTest = getTestArchiveFromResources("store_compression_made_with_v1.3.3.zip"); verifyZipFileByExtractingAllFiles(zipArchiveToTest, "aaaaaaaa".toCharArray(), outputFolder, 5, false); } @Test public void testExtractFilesForZipFileWhileWithCorruptExtraDataRecordLength() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("corrupt_extra_data_record_length.zip")); zipFile.extractAll(outputFolder.getPath()); assertThat(zipFile.getFileHeaders()).hasSize(44); assertThat(getRegularFilesFromFolder(outputFolder)).hasSize(44); } @Test public void testExtractFilesWithSetPasswordSetter() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile = new ZipFile(generatedZipFile, "WRONG_PASSWORD".toCharArray()); zipFile.setPassword(PASSWORD); zipFile.extractAll(outputFolder.getCanonicalPath()); } @Test public void testExtractZipFileWithMissingExtendedLocalFileHeader() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("missing_exended_local_file_header.zip")); zipFile.extractAll(outputFolder.getPath()); assertThat(zipFile.getFileHeaders()).hasSize(3); assertThat(getRegularFilesFromFolder(outputFolder)).hasSize(3); } @Test public void testExtractZipFileWithZip64ExtraDataRecordWithOnlyFileSizesInIt() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("zip64_with_only_file_sizes.zip"), "Shu1an@2019GTS".toCharArray()); zipFile.extractAll(outputFolder.getPath()); assertThat(zipFile.getFileHeaders()).hasSize(1); assertThat(getRegularFilesFromFolder(outputFolder)).hasSize(1); } @Test public void testExtractZipFileWithChineseCharsetGBK() throws IOException { String expectedFileName = "fff - 副本.txt"; ZipFile zipFile = new ZipFile(getTestArchiveFromResources("testfile_with_chinese_filename_by_7zip.zip")); zipFile.setCharset(CHARSET_GBK); zipFile.extractAll(outputFolder.getPath()); assertThat(zipFile.getFileHeaders()).hasSize(2); @SuppressWarnings("ConstantConditions") List filenameSet = getFileNamesOfFiles(Arrays.asList(outputFolder.listFiles())); assertThat(filenameSet.contains(expectedFileName)).isTrue(); } @Test public void testExtractZipFileWithCheckoutMismatchThrowsExceptionWithType() { try { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("entry_with_checksum_mismatch.zip")); zipFile.extractAll(outputFolder.getPath()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e.getType()).isEqualTo(ZipException.Type.CHECKSUM_MISMATCH); assertThat(e.getMessage()).isEqualTo("Reached end of entry, but crc verification failed for sample_text1.txt"); } } @Test public void testExtractNestedZipFileWithNoEncryptionOnInnerAndOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.NONE, EncryptionMethod.NONE); } @Test public void testExtractNestedZipFileWithNoEncryptionOnInnerAndZipStandardOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.NONE, EncryptionMethod.ZIP_STANDARD); } @Test public void testExtractNestedZipFileWithNoEncryptionOnInnerAndAesdOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.NONE, EncryptionMethod.AES); } @Test public void testExtractNestedZipFileWithZipStandardEncryptionOnInnerAndNoneOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.ZIP_STANDARD, EncryptionMethod.NONE); } @Test public void testExtractNestedZipFileWitAesOnInnerAndNoneOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.AES, EncryptionMethod.NONE); } @Test public void testExtractNestedZipFileWithZipStandardEncryptionOnInnerAndAesOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.ZIP_STANDARD, EncryptionMethod.AES); } @Test public void testExtractNestedZipFileWithAesOnInnerAndZipStandardOuter() throws IOException { testExtractNestedZipFileWithEncrpytion(EncryptionMethod.AES, EncryptionMethod.ZIP_STANDARD); } @Test public void testExtractZipFileLessThanMinimumExpectedZipFileSizeThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("Zip file size less than minimum expected zip file size. " + "Probably not a zip file or a corrupted zip file"); ZipFile zipFile = new ZipFile(getTestArchiveFromResources("invalid_zip_file_size_less_than_22kb.zip")); zipFile.extractAll(temporaryFolder.toString()); } @Test public void testExtractZipFileEmptyZipFileExtractsNone() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("valid_empty_zip_file.zip")); zipFile.extractAll(outputFolder.getPath()); assertThat(outputFolder.listFiles()).isEmpty(); } @Test public void testExtractZipFileCRCError() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("archive_with_invalid_zip64_headers.zip")); zipFile.extractAll(outputFolder.getPath()); assertThat(outputFolder.listFiles()).contains( new File(outputFolder, "index.html"), new File(outputFolder, "images")); } @Test public void testExtractZipFileOf7ZipFormatSplitWithoutEncryption() throws IOException { List filesToAddToZip = new ArrayList<>(FILES_TO_ADD); filesToAddToZip.add(getTestFileFromResources("file_PDF_1MB.pdf")); File firstSplitFile = createZipFileAndSplit(filesToAddToZip, 102400, false, null); verifyZipFileByExtractingAllFiles(firstSplitFile, outputFolder, 4); } @Test public void testExtractZipFileOf7ZipFormatSplitWithAESEncryption() throws IOException { List filesToAddToZip = new ArrayList<>(FILES_TO_ADD); filesToAddToZip.add(getTestFileFromResources("file_PDF_1MB.pdf")); File firstSplitFile = createZipFileAndSplit(filesToAddToZip, 102000, true, EncryptionMethod.AES); verifyZipFileByExtractingAllFiles(firstSplitFile, PASSWORD, outputFolder, 4); } @Test public void testExtractDifferentPasswordsInSameZip() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); addFileToZip(zipFile, "sample.pdf", EncryptionMethod.AES, "password1"); addFileToZip(zipFile, "sample_text1.txt", EncryptionMethod.AES, "password2"); addFileToZip(zipFile, "file_PDF_1MB.pdf", null, null); zipFile.setPassword("password1".toCharArray()); zipFile.extractFile("sample.pdf", outputFolder.getPath()); zipFile.setPassword("password2".toCharArray()); zipFile.extractFile("sample_text1.txt", outputFolder.getPath()); zipFile.setPassword(null); zipFile.extractFile("file_PDF_1MB.pdf", outputFolder.getPath()); } @Test public void testExtractZipFileWithCommentLengthGreaterThanZipFileLength() throws IOException { verifyZipFileByExtractingAllFiles(getTestArchiveFromResources("zip_with_corrupt_comment_length.zip"), outputFolder, 1); } @Test public void testExtractZipFileWithEndOfCentralDirectoryNotAtExpectedPosition() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("end_of_cen_dir_not_at_expected_position.zip")); zipFile.extractAll(outputFolder.getPath()); List outputFiles = FileUtils.getFilesInDirectoryRecursive(outputFolder, true, true); assertThat(outputFiles).hasSize(24); assertThat(zipFile.getFileHeaders()).hasSize(19); } @Test public void testExtractFileHeaderExtractAllFilesIfFileHeaderIsDirectory() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setIncludeRootFolder(false); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); zipFile.extractFile(zipFile.getFileHeader("öüäöäö/"), outputFolder.getPath()); File outputFile = Paths.get(outputFolder.getPath(), "öüäöäö", "asöäööl").toFile(); assertThat(outputFile).exists(); ZipFileVerifier.verifyFileContent(TestUtils.getTestFileFromResources("öüäöäö/asöäööl"), outputFile); } @Test public void testExtractFileHeaderExtractAllFilesIfFileHeaderIsDirectoryAndRenameFile() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setIncludeRootFolder(false); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); zipFile.extractFile(zipFile.getFileHeader("öüäöäö/"), outputFolder.getPath(), "new_folder_name/"); File outputFile = Paths.get(outputFolder.getPath(), "new_folder_name", "asöäööl").toFile(); assertThat(outputFile).exists(); ZipFileVerifier.verifyFileContent(TestUtils.getTestFileFromResources("öüäöäö/asöäööl"), outputFile); } @Test public void testExtractFileWhichIsAFolderExtractsContentsEvenWhenFolderEntryIsNotInZip() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("archive-with-no-dir-entries.zip")); String outputFolderPath = outputFolder.getPath(); zipFile.extractFile("items/", outputFolderPath); List extractedFiles = FileUtils.getFilesInDirectoryRecursive(outputFolder, false, false); assertThat(extractedFiles).isNotEmpty(); assertThat(extractedFiles).hasSize(3); assertThat(extractedFiles).contains( Paths.get(outputFolderPath, "items").toFile(), Paths.get(outputFolderPath, "items/subitems").toFile(), Paths.get(outputFolderPath, "items/subitems/beta.txt").toFile()); } @Test public void testExtractJarFileWithFileHeaderCompressedSize2() throws IOException { extractFile(TestUtils.getTestArchiveFromResources("jar-dir-fh-entry-size-2.jar")); } @Test public void testExtractJarFileWithOnlyFileAndLocalFileHeaderCompressedSize2() throws IOException { extractFile(TestUtils.getTestArchiveFromResources("jar-dir-lfh-and-fh-entry-size-2.jar")); } @Test public void testExtractZipStrongEncryptionThrowsException() throws IOException { ZipFile zipFile = new ZipFile(getTestArchiveFromResources("strong_encrypted.zip"), "12345678".toCharArray()); expectedException.expect(ZipException.class); expectedException.expectMessage("Entry with name test.txt is encrypted with Strong Encryption. " + "Zip4j does not support Strong Encryption, as this is patented."); zipFile.extractAll(outputFolder.getPath()); } @Test public void testExtractAllWithCustomBufferSize() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setIncludeRootFolder(false); zipFile.addFolder(getTestFileFromResources(""), zipParameters); zipFile.setBufferSize(32 * 1024); zipFile.extractAll(outputFolder.getPath()); ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder); verifyNumberOfFilesInOutputFolder(outputFolder, 10); } @Test public void testExtractingZipStandardEncryptedZipOverLoopAlwaysThrowsWrongPasswordTypeException() throws IOException { for (int i = 0; i < 1000; i++) { if (generatedZipFile.exists() && !generatedZipFile.delete()) { throw new RuntimeException("Could not delete test zip file"); } ZipFile zipFile = new ZipFile(generatedZipFile, "password".toCharArray()); addFileToZip(zipFile, "sample.pdf", EncryptionMethod.ZIP_STANDARD, "password"); try { zipFile = new ZipFile(generatedZipFile, "WRONG_password".toCharArray()); zipFile.extractAll(outputFolder.getPath()); } catch (ZipException e) { assertThat(e).isNotNull(); assertThat(e.getType()).isEqualTo(ZipException.Type.WRONG_PASSWORD); } } } @Test public void testExtractZipFileByFileNameWhichTheDirectoryEntryAtTheEndOfCentralDirectoryExtractsSuccessfully() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFolder(getTestFileFromResources("/")); zipFile.extractFile("test-files/", outputFolder.getPath()); zipFile = new ZipFile(generatedZipFile); zipFile.extractFile("test-files/", outputFolder.getPath()); } @Test public void testExtractZipFileThrowsExceptionOfTypeWrongPasswordForNullAesPassword() throws ZipException { testExtractZipFileThrowsExceptionOfTypeWrongPasswordForNullOrEmptyAesPassword(null); } @Test public void testExtractZipFileThrowsExceptionOfTypeWrongPasswordForEmptyAesPassword() throws ZipException { testExtractZipFileThrowsExceptionOfTypeWrongPasswordForNullOrEmptyAesPassword("".toCharArray()); } private void addFileToZip(ZipFile zipFile, String fileName, EncryptionMethod encryptionMethod, String password) throws ZipException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(encryptionMethod != null); zipParameters.setEncryptionMethod(encryptionMethod); if (password != null) { zipFile.setPassword(password.toCharArray()); } zipFile.addFile(getTestFileFromResources(fileName), zipParameters); } private void testExtractNestedZipFileWithEncrpytion(EncryptionMethod innerZipEncryption, EncryptionMethod outerZipEncryption) throws IOException { File innerZipFile = temporaryFolder.newFile("inner.zip"); File outerZipFile = temporaryFolder.newFile("outer.zip"); innerZipFile.delete(); outerZipFile.delete(); createNestedZip(innerZipFile, outerZipFile, innerZipEncryption, outerZipEncryption); verifyNestedZipFile(outerZipFile, FILES_TO_ADD.size()); } private void createNestedZip(File innerSourceZipFile, File outerSourceZipFile, EncryptionMethod innerEncryption, EncryptionMethod outerEncryption) throws ZipException { ZipFile innerZipFile = new ZipFile(innerSourceZipFile, PASSWORD); ZipParameters innerZipParameters = createZipParametersForNestedZip(innerEncryption); innerZipFile.addFiles(FILES_TO_ADD, innerZipParameters); ZipFile outerZipFile = new ZipFile(outerSourceZipFile, PASSWORD); ZipParameters outerZipParameters = createZipParametersForNestedZip(outerEncryption); outerZipFile.addFile(innerSourceZipFile, outerZipParameters); } private void verifyNestedZipFile(File outerZipFileToVerify, int numberOfFilesInNestedZip) throws IOException { ZipFile zipFile = new ZipFile(outerZipFileToVerify, PASSWORD); FileHeader fileHeader = zipFile.getFileHeader("inner.zip"); assertThat(fileHeader).isNotNull(); int actualNumberOfFilesInNestedZip = 0; try(InputStream inputStream = zipFile.getInputStream(fileHeader)) { try(ZipInputStream zipInputStream = new ZipInputStream(inputStream, PASSWORD)) { while (zipInputStream.getNextEntry() != null) { actualNumberOfFilesInNestedZip++; } } } assertThat(actualNumberOfFilesInNestedZip).isEqualTo(numberOfFilesInNestedZip); } private ZipParameters createZipParametersForNestedZip(EncryptionMethod encryptionMethod) { ZipParameters zipParameters = new ZipParameters(); if (encryptionMethod != null && !encryptionMethod.equals(EncryptionMethod.NONE)) { zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(encryptionMethod); } return zipParameters; } private void verifyNumberOfFilesInOutputFolder(File outputFolder, int numberOfExpectedFiles) { assertThat(outputFolder.listFiles()).hasSize(numberOfExpectedFiles); } private File getFileWithNameFrom(File outputFolder, String fileName) throws ZipException { List filesInFolder = FileUtils.getFilesInDirectoryRecursive(outputFolder, true, true); for (File file : filesInFolder) { if (file.getName().equals(fileName)) { return file; } } fail("Could not find a file by name " + fileName); return null; } private File createZipFileAndSplit(List filesToAddToZip, long splitLength, boolean encrypt, EncryptionMethod encryptionMethod) throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(encrypt); zipParameters.setEncryptionMethod(encryptionMethod); zipFile.addFiles(filesToAddToZip, zipParameters); return TestUtils.splitFileWith7ZipFormat(zipFile.getFile(), temporaryFolder.getRoot(), splitLength); } private void extractFile(File fileToExtract) throws IOException { ZipFile zipFile = new ZipFile(fileToExtract); zipFile.extractAll(outputFolder.getPath()); } private ZipFile createZipFileWithASymlink(File symlink) throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setSymbolicLinkAction(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE); zipFile.addFiles(FILES_TO_ADD, zipParameters); zipFile.addFile(symlink, zipParameters); return zipFile; } private UnzipParameters buildUnzipParameters(boolean extractSymlinks) { UnzipParameters unzipParameters = new UnzipParameters(); unzipParameters.setExtractSymbolicLinks(extractSymlinks); return unzipParameters; } private File createSymlink() throws IOException { File targetFile = getTestFileFromResources("file_PDF_1MB.pdf"); return TestUtils.createSymlink(targetFile, temporaryFolder.getRoot()); } private List getRegularFilesFromFolder(File folder) throws ZipException { List filesInFolder = FileUtils.getFilesInDirectoryRecursive(folder, false, false); List regularFiles = new ArrayList<>(); for (File file : filesInFolder) { if (Files.isRegularFile(file.toPath())) { regularFiles.add(file); } } return regularFiles; } private void testExtractZipFileThrowsExceptionOfTypeWrongPasswordForNullOrEmptyAesPassword(char[] password) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); addFileToZip(zipFile, "sample.pdf", EncryptionMethod.AES, new String(PASSWORD)); expectedException.expect(ZipException.class); expectedException.expectMessage("empty or null password provided for AES decryption"); zipFile = new ZipFile(generatedZipFile, password); zipFile.extractAll(outputFolder.getPath()); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/MiscZipFileIT.java000066400000000000000000000645231414265447200240100ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.concurrent.ThreadFactory; import static java.util.Collections.singletonList; import static net.lingala.zip4j.testutils.TestUtils.getFileNamesOfFiles; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; public class MiscZipFileIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testMergeSplitZipFilesMergesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); File mergedZipFile = new File(temporaryFolder.getRoot().getPath() + InternalZipConstants.FILE_SEPARATOR + "merged_zip_file.zip"); zipFile.mergeSplitFiles(mergedZipFile); ZipFileVerifier.verifyZipFileByExtractingAllFiles(mergedZipFile, outputFolder, 4); } @Test public void testMergeSplitZipFilesWithAesEncryptionMergesSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); File mergedZipFile = new File(temporaryFolder.getRoot().getPath() + InternalZipConstants.FILE_SEPARATOR + "merged_zip_file.zip"); zipFile.mergeSplitFiles(mergedZipFile); ZipFileVerifier.verifyZipFileByExtractingAllFiles(mergedZipFile, PASSWORD, outputFolder, 4); } @Test public void testGetFileHeadersReturnsEmptyListForNewZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getFileHeaders()).isEmpty(); } @Test public void testGetFileHeadersReturnsAllHeaders() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); List fileHeaders = zipFile.getFileHeaders(); assertThat(fileHeaders).isNotNull(); assertThat(fileHeaders).hasSize(FILES_TO_ADD.size()); verifyFileHeadersContainsFiles(fileHeaders, getFileNamesOfFiles(FILES_TO_ADD)); } @Test public void testGetFileHeadersReturnsAllHeadersAfterAddingAnotherFile() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.addFile(TestUtils.getTestFileFromResources("бореиская.txt")); List fileHeaders = zipFile.getFileHeaders(); assertThat(fileHeaders).isNotNull(); assertThat(fileHeaders).hasSize(FILES_TO_ADD.size() + 1); List fileNames = getFileNamesOfFiles(FILES_TO_ADD); fileNames.add("бореиская.txt"); verifyFileHeadersContainsFiles(fileHeaders, fileNames); } @Test public void testGetFileHeaderReturnsNullForNewZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getFileHeader("SOME_NAME")).isNull(); } @Test public void testGetFileHeaderReturnsNullWhenFileDoesNotExist() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); assertThat(zipFile.getFileHeader("SOME_NAME")).isNull(); } @Test public void testGetFileHeaderReturnsFileHeaderSuccessfully() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); FileHeader fileHeader = zipFile.getFileHeader("sample_text_large.txt"); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getFileName()).isEqualTo("sample_text_large.txt"); } @Test public void testGetFileHeaderReturnsFileHeaderSuccessfullyAfterAddingNewFile() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); String fileToAdd = "file_PDF_1MB.pdf"; zipFile.addFile(TestUtils.getTestFileFromResources(fileToAdd)); FileHeader fileHeader = zipFile.getFileHeader(fileToAdd); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getFileName()).isEqualTo(fileToAdd); } @Test public void testIsEncryptedReturnsFalseForNewZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.isEncrypted()).isFalse(); } @Test public void testIsEncryptedReturnsFalseForNonEncryptedZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); assertThat(zipFile.isEncrypted()).isFalse(); } @Test public void testIsEncryptedReturnsTrueForStandardZipEncryption() throws ZipException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, null); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); assertThat(zipFile.isEncrypted()).isTrue(); } @Test public void testIsEncryptedReturnsTrueForAesEncryption() throws ZipException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); assertThat(zipFile.isEncrypted()).isTrue(); } @Test public void testIsEncryptedReturnsTrueAfterAddingAnEncryptedFile() throws ZipException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); assertThat(zipFile.isEncrypted()).isTrue(); } @Test public void testIsEncryptedReturnsFalseAfterRemovingAllEncryptedFiles() throws ZipException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text_large.txt"), zipParameters); zipFile.removeFile("sample_text_large.txt"); assertThat(zipFile.isEncrypted()).isFalse(); } @Test public void testIsSplitArchiveReturnsFalseForNewlyCreatedZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.isSplitArchive()).isFalse(); } @Test public void testIsSplitArchiveReturnsFalseForNonSplitZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); assertThat(zipFile.isSplitArchive()).isFalse(); } @Test public void testIsSplitArchiveReturnsTrueForSplitZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); assertThat(zipFile.isSplitArchive()).isTrue(); } @Test public void testIsSplitArchiveReturnsFalseWhenCreatedAsSplitZipButNotSplit() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(FILES_TO_ADD, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.isSplitArchive()).isFalse(); } @Test public void testIsSplitArchiveReturnsFalseForMergedZipFile() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); File mergedZipFile = new File(temporaryFolder.getRoot().getPath() + InternalZipConstants.FILE_SEPARATOR + "merged.zip"); zipFile.mergeSplitFiles(mergedZipFile); zipFile = new ZipFile(mergedZipFile); assertThat(zipFile.isSplitArchive()).isFalse(); } @Test public void testSetComment() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.setComment("SOME_COMMENT"); zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getComment()).isEqualTo("SOME_COMMENT"); } @Test public void testSetCommentWithChineseCharacters() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.setCharset(Charset.forName("GBK")); zipFile.addFiles(FILES_TO_ADD); zipFile.setComment("测试中文"); zipFile = new ZipFile(generatedZipFile); zipFile.setCharset(Charset.forName("GBK")); assertThat(zipFile.getComment()).isEqualTo("测试中文"); } @Test public void testSetCommentWithGermanCharacters() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.setComment("ÄÜÖÖÜSDSDS"); zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getComment()).isEqualTo("ÄÜÖÖÜSDSDS"); } @Test public void testSetCommentForMergedZipRetainsComment() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); String comment = "SOME_COMMENT"; zipFile.setComment(comment); assertThat(zipFile.getComment()).isEqualTo(comment); File mergedZipFile = new File(temporaryFolder.getRoot().getPath() + InternalZipConstants.FILE_SEPARATOR + "merged.zip"); zipFile.mergeSplitFiles(mergedZipFile); zipFile = new ZipFile(mergedZipFile); assertThat(zipFile.getComment()).isEqualTo(comment); } @Test public void testSetCommentWithEmptyStringRemovesComment() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); String comment = "SOME_COMMENT"; zipFile.setComment(comment); assertThat(zipFile.getComment()).isEqualTo(comment); zipFile.setComment(""); assertThat(zipFile.getComment()).isEqualTo(""); //Make sure comment is empty and not null also when a new instance is now created zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getComment()).isEqualTo(""); } @Test public void testGetInputStreamWithoutEncryptionReturnsSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); try (InputStream inputStream = zipFile.getInputStream(zipFile.getFileHeader("sample_text_large.txt"))) { assertThat(inputStream).isNotNull(); verifyInputStream(inputStream, TestUtils.getTestFileFromResources("sample_text_large.txt")); } } @Test public void testGetInputStreamWithAesEncryptionReturnsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD, zipParameters); try (InputStream inputStream = zipFile.getInputStream(zipFile.getFileHeader("sample_text_large.txt"))) { assertThat(inputStream).isNotNull(); verifyInputStream(inputStream, TestUtils.getTestFileFromResources("sample_text_large.txt")); } } @Test public void testGetInputStreamWithAesEncryptionAndSplitFileReturnsSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, zipParameters, true, InternalZipConstants.MIN_SPLIT_LENGTH); try (InputStream inputStream = zipFile.getInputStream(zipFile.getFileHeader("file_PDF_1MB.pdf"))) { assertThat(inputStream).isNotNull(); verifyInputStream(inputStream, TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); } //Check also with a new instance zipFile = new ZipFile(generatedZipFile, PASSWORD); try (InputStream inputStream = zipFile.getInputStream(zipFile.getFileHeader("file_PDF_1MB.pdf"))) { verifyInputStream(inputStream, TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); } } @Test public void testIsValidZipFileReturnsFalseForNonZipFile() { assertThat(new ZipFile(TestUtils.getTestFileFromResources("sample_text_large.txt")).isValidZipFile()).isFalse(); } @Test public void testIsValidZipFileReturnsFalseForNonExistingZip() { assertThat(new ZipFile("DoesNoExist").isValidZipFile()).isFalse(); } @Test public void testIsValidZipFileReturnsTrueForAValidZip() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); assertThat(zipFile.isValidZipFile()).isTrue(); } @Test public void testGetSplitZipFilesReturnsJustZipFileForNonSplit() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); List splitZipFiles = zipFile.getSplitZipFiles(); assertThat(splitZipFiles).hasSize(1); assertThat(splitZipFiles.get(0)).hasName(generatedZipFile.getName()); } @Test public void testGetSplitZipFilesReturnsAllSplitZipFiles() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); List splitZipFiles = zipFile.getSplitZipFiles(); assertThat(splitZipFiles).hasSize(15); verifySplitZipFileNames(splitZipFiles, 15, FileUtils.getZipFileNameWithoutExtension(generatedZipFile.getName())); } @Test public void testRenameZipFileAfterExtractionWithInputStreamSucceeds() throws IOException { new ZipFile(generatedZipFile).addFiles(FILES_TO_ADD); ZipFile zipFile = new ZipFile(generatedZipFile); FileHeader fileHeader = zipFile.getFileHeader("sample_text1.txt"); assertThat(fileHeader).isNotNull(); try(InputStream inputStream = zipFile.getInputStream(fileHeader)) { inputStream.read(new byte[100]); } File newFile = temporaryFolder.newFile("NEW_FILE_NAME.ZIP"); String oldFile = generatedZipFile.getPath(); if(TestUtils.isWindows()) { newFile.delete(); } assertThat(generatedZipFile.renameTo(newFile)).isTrue(); assertThat(new File(oldFile)).doesNotExist(); } @Test public void testZipSlipFix() throws Exception { ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("../../bad.txt"); ZipFile zip = new ZipFile(generatedZipFile); zip.addFile(TestUtils.getTestFileFromResources("sample_text1.txt"), zipParameters); try { zip.extractAll(outputFolder.getAbsolutePath()); fail("zip4j is vulnerable for slip zip"); } catch (ZipException e) { assertThat(e).hasMessageStartingWith("illegal file name that breaks out of the target directory: "); } } @Test public void testZipSlipFixWithFileNameStartingWithParentDirectoryThrowsException() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("../somename.pdf"); zipFile.addFile(FILES_TO_ADD.get(0), zipParameters); expectedException.expectMessage("illegal file name that breaks out of the target directory"); expectedException.expect(ZipException.class); // Important here is that the name of the file in zip ("somename.pdf") should start with the // name of the directory being extracted to ("some"). "somename.pdf" starts with "some". zipFile.extractAll(outputFolder.getPath() + File.separator + "some"); } @Test public void testUnzipFileZipSlipWithNotNormalizedTarget() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFiles(FILES_TO_ADD); zipFile.extractAll(new File(outputFolder.getPath(), ".." + InternalZipConstants.FILE_SEPARATOR + outputFolder.getName()).getAbsolutePath()); } @Test public void testExtractFileDeletesOutputFileWhenWrongPassword() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.ZIP_STANDARD, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text1.txt"), zipParameters); try { zipFile = new ZipFile(generatedZipFile, "WRONG_PASSWORD".toCharArray()); zipFile.extractAll(outputFolder.getCanonicalPath()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(new File(outputFolder.getCanonicalPath() + "sample_text1.txt")).doesNotExist(); assertThat(e.getType()).isEqualTo(ZipException.Type.WRONG_PASSWORD); } } @Test public void testCustomThreadFactory() throws IOException { TestUtils.copyFileToFolder(getTestFileFromResources("file_PDF_1MB.pdf"), temporaryFolder.getRoot(), 1000); final String threadName = "CustomThreadFactoryTest"; ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.setThreadFactory(new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread t = new Thread(threadName); t.setDaemon(false); return t; } }); zipFile.setRunInThread(true); ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipFile.addFolder(temporaryFolder.getRoot(), zipParameters); List zip4jThread = filterForThreadsByName(threadName); assertThat(zip4jThread).hasSize(1); assertThat(zip4jThread.get(0).getName()).isEqualTo(threadName); assertThat(zip4jThread.get(0).isDaemon()).isFalse(); } @Test public void testGetExecutorServiceIsNullWhenNotInThreadMode() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text1.txt")); assertThat(zipFile.getExecutorService()).isNull(); } @Test public void testGetExecutorServiceIsNotNullWhenInThreadMode() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.setRunInThread(true); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text1.txt")); assertThat(zipFile.getExecutorService()).isNotNull(); } @Test public void testFileHeaderLastModifiedTimeEpoch() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); File fileToAdd = TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"); zipFile.addFile(fileToAdd); FileHeader fileHeader = zipFile.getFileHeader("file_PDF_1MB.pdf"); assertThat(fileHeader.getLastModifiedTimeEpoch()).isEqualTo(fileToAdd.lastModified()); } @Test public void testVerifyZipFileForNonSplitZipFileReturnsTrue() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); assertThat(zipFile.isValidZipFile()).isTrue(); } @Test public void testVerifyZipFileForNonZipFileReturnsFalse() throws IOException { ZipFile zipFile = new ZipFile(TestUtils.getTestFileFromResources("sample.pdf")); assertThat(zipFile.isValidZipFile()).isFalse(); } @Test public void testVerifyZipFileForSplitZipFileReturnsTrueWhenAllSplitFilesExists() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(singletonList(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")), new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); assertThat(zipFile.isValidZipFile()).isTrue(); } @Test public void testVerifyZipFileForSplitZipFileReturnsFalseWhenOneSplitFileDoesNotExist() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(singletonList(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")), new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); String firstSplitFileName = zipFile.getFile().getName().replace(".zip", ".z02"); File firstSplitFile = Paths.get(zipFile.getFile().getParentFile().getPath(), firstSplitFileName).toFile(); if (!firstSplitFile.delete()) { throw new RuntimeException("Unable to delete a split file of zip which is a requirement to run this test"); } assertThat(zipFile.isValidZipFile()).isFalse(); } @Test public void testCloseSuccessfullyClosesAllInputStreams() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFile(TestUtils.getTestFileFromResources("after_deflate_remaining_bytes.bin")); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipFile.addFile(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf"), zipParameters); zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); zipFile.addFile(TestUtils.getTestFileFromResources("sample.pdf"), zipParameters); zipParameters.setCompressionMethod(CompressionMethod.DEFLATE); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipFile.addFile(TestUtils.getTestFileFromResources("sample_text1.txt"), zipParameters); List inputStreams = new ArrayList<>(); for (FileHeader fileHeader : zipFile.getFileHeaders()) { inputStreams.add(zipFile.getInputStream(fileHeader)); } zipFile.close(); assertThat(inputStreams).hasSize(4); assertInputStreamsAreClosed(inputStreams); } @Test public void testCloseZipFileByTryWithResourceSuccessfullyClosesAllOpenStreams() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); List inputStreams = new ArrayList<>(); try(ZipFile closeableZipFile = new ZipFile(generatedZipFile)) { for (FileHeader fileHeader : closeableZipFile.getFileHeaders()) { inputStreams.add(closeableZipFile.getInputStream(fileHeader)); } } assertThat(inputStreams).hasSize(3); assertInputStreamsAreClosed(inputStreams); } @Test public void testCloseZipFileMultipleTimesClosesAllStreams() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); List inputStreams = new ArrayList<>(); // First open the inputstreams for (FileHeader fileHeader : zipFile.getFileHeaders()) { inputStreams.add(zipFile.getInputStream(fileHeader)); } // Close it for the first time zipFile.close(); assertInputStreamsAreClosed(inputStreams); //Now open an inputstream again InputStream inputStream = zipFile.getInputStream(zipFile.getFileHeader(FILES_TO_ADD.get(0).getName())); // Closing it now again should close the inputstream as well zipFile.close(); assertInputStreamsAreClosed(Collections.singletonList(inputStream)); } private void assertInputStreamsAreClosed(List inputStreams) { for (InputStream inputStream : inputStreams) { try { //noinspection ResultOfMethodCallIgnored inputStream.read(); fail("Should have thrown an exception"); } catch (IOException e) { assertThat(e.getMessage()).isEqualTo("Stream closed"); } } } private void verifyInputStream(InputStream inputStream, File fileToCompareAgainst) throws IOException { File outputFile = temporaryFolder.newFile(); try (OutputStream outputStream = new FileOutputStream(outputFile)) { byte[] b = new byte[InternalZipConstants.BUFF_SIZE]; int readLen = -1; while ((readLen = inputStream.read(b)) != -1) { outputStream.write(b, 0, readLen); } } ZipFileVerifier.verifyFileContent(fileToCompareAgainst, outputFile); } private void verifySplitZipFileNames(List files, int expectedNumberOfZipFiles, String fileNameWithoutExtension) { assertThat(files).hasSize(expectedNumberOfZipFiles); for (int i = 0; i < expectedNumberOfZipFiles; i++) { File file = files.get(i); String fileExtensionPrefix = ".z0"; if (i >= 9) { fileExtensionPrefix = ".z"; } String expectedFileName = fileNameWithoutExtension + fileExtensionPrefix + (i + 1); if (i == expectedNumberOfZipFiles - 1) { expectedFileName = fileNameWithoutExtension + ".zip"; } assertThat(file).hasName(expectedFileName); } } private List filterForThreadsByName(String threadName) { Set threadSet = Thread.getAllStackTraces().keySet(); List filteredThreads = new ArrayList<>(); for (Thread thread : threadSet) { if (thread.getName().equals(threadName)) { filteredThreads.add(thread); } } return filteredThreads; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/RemoveFilesFromZipIT.java000066400000000000000000000302071414265447200253510ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import static net.lingala.zip4j.testutils.HeaderVerifier.verifyFileHeadersDoesNotExist; import static net.lingala.zip4j.testutils.HeaderVerifier.verifyZipFileDoesNotContainFolders; import static org.assertj.core.api.Assertions.assertThat; public class RemoveFilesFromZipIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testRemoveFileAsFileNameThrowsExceptionForSplitArchive() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("file_PDF_1MB.pdf")); zipFile.createSplitZipFile(filesToAdd, new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); expectedException.expect(ZipException.class); expectedException.expectMessage("Zip file format does not allow updating split/spanned files"); zipFile.removeFile("file_PDF_1MB.pdf"); } @Test public void testRemoveFileAsFileNameDoesNotModifyZipFileWhenFileDoesNotExistInZip() throws IOException { String fileNameToRemove = "SOME_NAME"; ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.removeFile(fileNameToRemove); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size()); } @Test public void testRemoveFileAsFileNameRemovesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.removeFile("sample_text1.txt"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 2); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("sample_text1.txt")); } @Test public void testRemoveFileAsFileNameWithCharsetCp949RemovesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); List filesToAdd = new ArrayList<>(); filesToAdd.add(TestUtils.getTestFileFromResources("가나다.abc")); filesToAdd.add(TestUtils.getTestFileFromResources("sample_text1.txt")); zipFile.setCharset(CHARSET_CP_949); zipFile.addFiles(filesToAdd); zipFile.removeFile("sample_text1.txt"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, true, CHARSET_CP_949); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("sample_text1.txt")); } @Test public void testRemoveFileAsFileNameRemovesSuccessfullyWithFolderNameInPath() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); zipFile.removeFile("test-files/öüäöäö/asöäööl"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 12); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("test-files/öüäöäö/asöäööl")); } @Test public void testRemoveFileAsFileHeaderRemovesSuccessfully() throws IOException { ZipParameters zipParameters = createZipParameters(EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); zipFile.removeFile(zipFile.getFileHeader("test-files/sample_directory/favicon.ico")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 12); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("sample_directory/favicon.ico")); } @Test public void testRemoveFilesRemovesFirstEntrySuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.removeFiles(Collections.singletonList("sample_text1.txt")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size() - 1); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("sample_text1.txt")); } @Test public void testRemoveFilesRemovesLastEntrySuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); zipFile.removeFiles(Collections.singletonList("sample.pdf")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size() - 1); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("sample.pdf")); } @Test public void testRemoveFilesRemovesMultipleEntriesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFiles(FILES_TO_ADD); List filesToRemove = Arrays.asList("sample_text1.txt", "sample.pdf"); zipFile.removeFiles(filesToRemove); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, FILES_TO_ADD.size() - 2); verifyFileHeadersDoesNotExist(zipFile, filesToRemove); } @Test public void testRemoveFilesRemovesMultipleEntriesFromEncryptedZipSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipFile.addFiles(FILES_TO_ADD, zipParameters); List filesToRemove = Arrays.asList("sample_text1.txt", "sample.pdf"); zipFile.removeFiles(filesToRemove); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, FILES_TO_ADD.size() - 2); verifyFileHeadersDoesNotExist(zipFile, filesToRemove); } @Test public void testRemoveFilesRemovesDirectorySuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFolder(TestUtils.getTestFileFromResources("")); zipFile.removeFiles(Collections.singletonList("test-files/öüäöäö/")); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 11); verifyZipFileDoesNotContainFolders(zipFile, Collections.singletonList("test-files/öüäöäö/")); } @Test public void testRemoveFilesRemovesMultipleFilesAndDirectoriesSuccessfully() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFolder(TestUtils.getTestFileFromResources("")); zipFile.removeFiles(Arrays.asList( "test-files/öüäöäö/", "test-files/sample_directory/", "test-files/after_deflate_remaining_bytes.bin", "test-files/бореиская.txt" )); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 7); verifyZipFileDoesNotContainFolders(zipFile, Arrays.asList("test-files/öüäöäö/", "test-files/sample_directory/")); verifyFileHeadersDoesNotExist(zipFile, Arrays.asList("test-files/after_deflate_remaining_bytes.bin", "test-files/бореиская.txt")); } @Test public void testRemoveFilesRemovesSingleEntryFromAFolderInAZip() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.addFolder(TestUtils.getTestFileFromResources("")); List fileToRemove = Collections.singletonList("test-files/öüäöäö/asöäööl"); zipFile.removeFiles(fileToRemove); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 12); verifyFileHeadersDoesNotExist(zipFile, fileToRemove); } @Test public void testRemoveFilesFromZipWithDataDescriptors() throws IOException { TestUtils.createZipFileWithZipOutputStream(generatedZipFile, FILES_TO_ADD); ZipFile zipFile = new ZipFile(generatedZipFile); List filesToRemove = Collections.singletonList("sample_text_large.txt"); zipFile.removeFiles(filesToRemove); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 2); verifyFileHeadersDoesNotExist(zipFile, filesToRemove); } @Test public void testRemoveFirstEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries() throws IOException { testRemoveEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries("test-files/zero_byte_file.txt"); } @Test public void testRemoveLastEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries() throws IOException { testRemoveEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries("test-files/бореиская.txt"); } @Test public void testRemoveMiddleEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries() throws IOException { testRemoveEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries("test-files/file_PDF_1MB.pdf"); } @Test public void testRemoveEntryWithAnotherSimilarNameFromZipRemovesOnlyTheEntryToBeRemoved() throws IOException { File sourceFileToTest = TestUtils.getTestArchiveFromResources("remove_file_with_similar_file_names.zip"); File zipFileUnderTest = new File(temporaryFolder.getRoot().getPath() + InternalZipConstants.FILE_SEPARATOR + sourceFileToTest.getName()); TestUtils.copyFile(sourceFileToTest, zipFileUnderTest); ZipFile zipFile = new ZipFile(zipFileUnderTest); String fileNameToRemove ="a.js"; assertZipFileContainsFileByName(zipFile, fileNameToRemove); zipFile.removeFile("a.js"); assertZipFileDoesNotContainsFileByName(zipFile, fileNameToRemove); assertZipFileDoesNotContainsFileByName(new ZipFile(zipFileUnderTest), fileNameToRemove); } @Test public void testRemoveEntryFromAZipFileWithDuplicateEntriesRemovesSuccessfully() throws IOException { TestUtils.copyFile(TestUtils.getTestArchiveFromResources("zip_with_duplicate_entries.zip"), generatedZipFile); ZipFile zipFile = new ZipFile(generatedZipFile); int actualNumberOfEntries = zipFile.getFileHeaders().size(); zipFile.removeFile("sample.pdf"); zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getFileHeaders().size()).isEqualTo(actualNumberOfEntries - 1); assertZipFileDoesNotContainsFileByName(zipFile, "sample.pdf"); } private void testRemoveEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries( String fileNameToRemove) throws IOException { TestUtils.copyFile(TestUtils.getTestArchiveFromResources("cen_dir_entries_diff_order_as_local_entries.zip"), generatedZipFile); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.removeFile(fileNameToRemove); zipFile = new ZipFile(generatedZipFile); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 12); verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList(fileNameToRemove)); } private void assertZipFileContainsFileByName(ZipFile zipFile, String fileNameToExpect) throws IOException { List fileNamesInZip = getFileNamesFromZip(zipFile); assertThat(fileNamesInZip).contains(fileNameToExpect); } private void assertZipFileDoesNotContainsFileByName(ZipFile zipFile, String fileNameToExpect) throws IOException { List fileNamesInZip = getFileNamesFromZip(zipFile); assertThat(fileNamesInZip).doesNotContain(fileNameToExpect); } private List getFileNamesFromZip(ZipFile zipFile) throws IOException { List fileHeaders = zipFile.getFileHeaders(); assertThat(fileHeaders).isNotEmpty(); List fileNames = new ArrayList<>(); for (FileHeader fileHeader :fileHeaders) { fileNames.add(fileHeader.getFileName()); } return fileNames; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/RenameFilesInZipIT.java000066400000000000000000000353471414265447200250000ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.IOException; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import static net.lingala.zip4j.testutils.HeaderVerifier.verifyFileHeadersDoesNotExist; import static net.lingala.zip4j.testutils.HeaderVerifier.verifyFileHeadersExist; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static org.assertj.core.api.Assertions.assertThat; public class RenameFilesInZipIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testRenameSplitZipFileThrowsException() throws IOException { ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.createSplitZipFile(Collections.singletonList(getTestFileFromResources("file_PDF_1MB.pdf")), new ZipParameters(), true, InternalZipConstants.MIN_SPLIT_LENGTH); expectedException.expect(ZipException.class); expectedException.expectMessage("Zip file format does not allow updating split/spanned files"); zipFile.renameFile("file_PDF_1MB.pdf", "some_name.pdf"); } @Test public void testRenameWithFileHeaderRenamesSuccessfully() throws IOException { ZipFile zipFile = createDefaultZipFile(); zipFile.renameFile(zipFile.getFileHeader("sample.pdf"), "changed.pdf"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, Collections.singletonMap("sample.pdf", "changed.pdf")); } @Test public void testRenameWithFileHeaderRenamesAFolderSuccessfully() throws IOException { ZipFile zipFile = createZipFileWithFolder(); zipFile.renameFile(zipFile.getFileHeader("test-files/sample_directory/"), "test-files/new_directory_name"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 13, false); verifyFileNamesChanged(zipFile, Collections.singletonMap("test-files/sample_directory/", "test-files/new_directory_name/")); } @Test public void testRenameWithFileNameRenamesSuccessfully() throws IOException { ZipFile zipFile = createDefaultZipFile(); zipFile.renameFile("sample_text_large.txt", "changed.txt"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, Collections.singletonMap("sample_text_large.txt", "changed.txt")); } @Test public void testRenameWithFileNameRenamesAFolderSuccessfully() throws IOException { ZipFile zipFile = createZipFileWithFolder(); zipFile.renameFile(zipFile.getFileHeader("test-files/sample_directory/"), "test-files/가나다"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 13, false); verifyFileNamesChanged(zipFile, Collections.singletonMap("test-files/sample_directory/", "test-files/가나다/")); } @Test public void testRenameWithMapWhenNoEntriesExistWithThatNameDoesNotChangeZipFile() throws IOException { ZipFile zipFile = createDefaultZipFile(); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("does_not_exist_1", "does_not_matter_1"); fileNamesMap.put("does_not_exist_2", "does_not_matter_2"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 3); verifyFileHeadersDoesNotExist(zipFile, Arrays.asList("does_not_matter_1", "does_not_matter_2")); } @Test public void testRenameWithMapSingleEntry() throws IOException { ZipFile zipFile = createDefaultZipFile(); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("sample_text_large.txt", "new-name.txt"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapForAllEntriesInZip() throws IOException { ZipFile zipFile = createDefaultZipFile(); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("sample_text1.txt", "new-sample_text1.txt"); fileNamesMap.put("sample_text_large.txt", "new-sample_text_large.txt"); fileNamesMap.put("sample.pdf", "new-sample.pdf"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapRenamesRootFolder() throws IOException { ZipFile zipFile = createZipFileWithFolder(); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("test-files/", "new-test-files/"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 13, false); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapRenamesSubFolder() throws IOException { ZipFile zipFile = createZipFileWithFolder(); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("test-files/sample_directory/", "new-test-files/new_sample_directory/"); zipFile.renameFiles(fileNamesMap); zipFile.extractAll(outputFolder.getPath()); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapForStoreCompressionMethod() throws IOException { ZipFile zipFile = createZipFile(CompressionMethod.STORE, false, null); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("sample_text1.txt", "new-sample_text1.txt"); fileNamesMap.put("sample_text_large.txt", "new-sample_text_large.txt"); fileNamesMap.put("sample.pdf", "new-sample.pdf"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapWithAesEncryption() throws IOException { ZipFile zipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("sample_text1.txt", "new-sample_text1.txt"); fileNamesMap.put("sample_text_large.txt", "new-sample_text_large.txt"); fileNamesMap.put("sample.pdf", "new-sample.pdf"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapWithZipStandardEncryption() throws IOException { ZipFile zipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("sample_text1.txt", "new-sample_text1.txt"); fileNamesMap.put("sample_text_large.txt", "new-sample_text_large.txt"); fileNamesMap.put("sample.pdf", "new-sample.pdf"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, fileNamesMap); } @Test public void testRenameWithMapWithAESEncryptionAndUtf8FileName() throws IOException { ZipFile zipFile = createZipFileWithFolder(CompressionMethod.DEFLATE, true, EncryptionMethod.AES); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("test-files/가나다.abc", "test-files/üßööß.abc"); fileNamesMap.put("test-files/öüäöäö/", "test-files/가나다/"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 13, false); verifyFileNamesChanged(zipFile, fileNamesMap, false); } @Test public void testRenameForZipFileContainingExtraDataRecords() throws IOException { TestUtils.createZipFileWithZipOutputStream(generatedZipFile, FILES_TO_ADD); ZipFile zipFile = new ZipFile(generatedZipFile); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("sample_text_large.txt", "new_file.txt"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 3, false); verifyFileNamesChanged(zipFile, fileNamesMap, false); } @Test public void testRenameWithMapProgressMonitor() throws IOException, InterruptedException { TestUtils.copyFileToFolder(getTestFileFromResources("file_PDF_1MB.pdf"), temporaryFolder.getRoot(), 100); ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ZipParameters zipParameters = buildZipParameters(CompressionMethod.DEFLATE, true, EncryptionMethod.AES); zipParameters.setIncludeRootFolder(false); zipFile.addFolder(temporaryFolder.getRoot(), zipParameters); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("1.pdf", "1_new.pdf"); fileNamesMap.put("25.pdf", "25_new.pdf"); zipFile.setRunInThread(true); ProgressMonitor progressMonitor = zipFile.getProgressMonitor(); zipFile.renameFiles(fileNamesMap); boolean percentBetweenZeroAndHundred = false; boolean fileNameSet = true; while (!progressMonitor.getState().equals(ProgressMonitor.State.READY)) { int percentDone = progressMonitor.getPercentDone(); String fileName = progressMonitor.getFileName(); if (percentDone > 0 && percentDone < 100) { percentBetweenZeroAndHundred = true; } if (fileName != null) { fileNameSet = true; } Thread.sleep(10); } assertThat(progressMonitor.getResult()).isEqualTo(ProgressMonitor.Result.SUCCESS); assertThat(progressMonitor.getState().equals(ProgressMonitor.State.READY)); assertThat(progressMonitor.getException()).isNull(); assertThat(percentBetweenZeroAndHundred).isTrue(); assertThat(fileNameSet).isTrue(); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, 100, false); verifyFileNamesChanged(zipFile, fileNamesMap, false); } @Test public void testRenameFirstEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries() throws IOException { testRenameEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries("test-files/zero_byte_file.txt"); } @Test public void testRenameLastEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries() throws IOException { testRenameEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries("test-files/бореиская.txt"); } @Test public void testRenameMiddleEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries() throws IOException { testRenameEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries("test-files/file_PDF_1MB.pdf"); } private void testRenameEntryFromZipWhichHasCentralDirEntriesInDifferentOrderThanLocalEntries( String fileNameToRename) throws IOException { TestUtils.copyFile(TestUtils.getTestArchiveFromResources("cen_dir_entries_diff_order_as_local_entries.zip"), generatedZipFile); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.renameFile(fileNameToRename, "somename.txt"); zipFile = new ZipFile(generatedZipFile); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 13, false); verifyFileNamesChanged(zipFile, Collections.singletonMap(fileNameToRename, "somename.txt"), false); } private void verifyFileNamesChanged(ZipFile zipFile, Map fileNamesMap) throws IOException { verifyFileNamesChanged(zipFile, fileNamesMap, true); } private void verifyFileNamesChanged(ZipFile zipFile, Map fileNamesMap, boolean verifyFileContent) throws IOException { verifyFileHeadersDoesNotExist(zipFile, fileNamesMap.keySet()); verifyFileHeadersExist(zipFile, fileNamesMap.values()); for (Map.Entry changedFileNameEntry : fileNamesMap.entrySet()) { if (changedFileNameEntry.getValue().endsWith(InternalZipConstants.ZIP_FILE_SEPARATOR)) { List allFileHeaders = zipFile.getFileHeaders(); for (FileHeader fileHeader : allFileHeaders) { assertThat(fileHeader.getFileName()).doesNotStartWith(changedFileNameEntry.getKey()); } } else { if (verifyFileContent) { verifyContentOfChangedFile(changedFileNameEntry.getKey(), changedFileNameEntry.getValue()); } } } } private void verifyContentOfChangedFile(String oldFileName, String newFileName) throws IOException { File sourceFile = getTestFileFromResources(oldFileName); File extractedFile = Paths.get(outputFolder.getAbsolutePath(), newFileName).toFile(); ZipFileVerifier.verifyFileCrc(sourceFile, extractedFile); } private ZipFile createDefaultZipFile() throws ZipException { return createZipFile(CompressionMethod.DEFLATE, false, null); } private ZipFile createZipFile(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ZipParameters zipParameters = buildZipParameters(compressionMethod, encrypt, encryptionMethod); zipFile.addFiles(FILES_TO_ADD, zipParameters); return zipFile; } private ZipFile createZipFileWithFolder() throws ZipException { return createZipFileWithFolder(CompressionMethod.DEFLATE, false, null); } private ZipFile createZipFileWithFolder(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod) throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile, PASSWORD); ZipParameters zipParameters = buildZipParameters(compressionMethod, encrypt, encryptionMethod); zipFile.addFolder(TestUtils.getTestFileFromResources(""), zipParameters); return zipFile; } private ZipParameters buildZipParameters(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod) { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(encrypt); zipParameters.setEncryptionMethod(encryptionMethod); zipParameters.setCompressionMethod(compressionMethod); return zipParameters; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/ZipFileTest.java000066400000000000000000000547021414265447200235750ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.progress.ProgressMonitor; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.util.Collections; import static net.lingala.zip4j.util.InternalZipConstants.MIN_BUFF_SIZE; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; // Tests only failure scenarios. All other tests are covered in the corresponding Integration test public class ZipFileTest { private File sourceZipFile; private ZipFile zipFile; @Rule public ExpectedException expectedException = ExpectedException.none(); @Before public void setup() { sourceZipFile = mockFile(false); zipFile = new ZipFile(sourceZipFile); } @Test public void testZipFileConstructorThrowsIllegalArgumentExceptionWhenFileParameterIsNull() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("input zip file parameter is null"); new ZipFile((File) null); } @Test public void testZipFileConstructorWithPasswordThrowsIllegalArgumentExceptionWhenFileParameterIsNull() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("input zip file parameter is null"); new ZipFile((File) null, "password".toCharArray()); } @Test public void testCreateZipFileThrowsExceptionWhenZipFileExists() throws ZipException { reset(sourceZipFile); when(sourceZipFile.exists()).thenReturn(true); expectedException.expect(ZipException.class); expectedException.expectMessage("zip file: " + sourceZipFile + " already exists. " + "To add files to existing zip file use addFile method"); zipFile.createSplitZipFile(Collections.emptyList(), new ZipParameters(), true, 10000); } @Test public void testCreateZipFileThrowsExceptionWhenFileListIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input file List is null, cannot create zip file"); zipFile.createSplitZipFile(null, new ZipParameters(), true, 10000); } @Test public void testCreateZipFileThrowsExceptionWhenFileListIsEmpty() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input file List is null, cannot create zip file"); zipFile.createSplitZipFile(Collections.emptyList(), new ZipParameters(), true, 10000); } @Test public void testCreateZipFileFromFolderThrowsExceptionWheFolderIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("folderToAdd is null, cannot create zip file from folder"); zipFile.createSplitZipFileFromFolder(null, new ZipParameters(), true, 10000); } @Test public void testCreateZipFileFromFolderThrowsExceptionWhenParametersAreNull() throws ZipException { File folderToAdd = mockFile(true); expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters are null, cannot create zip file from folder"); zipFile.createSplitZipFileFromFolder(folderToAdd, null, true, 10000); } @Test public void testCreateZipFileFromFolderThrowsExceptionWhenZipFileExists() throws ZipException { reset(sourceZipFile); when(sourceZipFile.exists()).thenReturn(true); File folderToAdd = mockFile(true); expectedException.expect(ZipException.class); expectedException.expectMessage("zip file: " + sourceZipFile + " already exists. To add files to existing zip file use addFolder method"); zipFile.createSplitZipFileFromFolder(folderToAdd, new ZipParameters(), true, 10000); } @Test public void testAddFileAsStringThrowsExceptionWhenFileIsNull() throws ZipException { expectedException.expectMessage("file to add is null or empty"); expectedException.expect(ZipException.class); zipFile.addFile((String) null); } @Test public void testAddFileAsStringThrowsExceptionWhenFileIsEmpty() throws ZipException { expectedException.expectMessage("file to add is null or empty"); expectedException.expect(ZipException.class); zipFile.addFile(" "); } @Test public void testAddFileAsStringWithParametersThrowsExceptionWhenFileIsNull() throws ZipException { expectedException.expectMessage("file to add is null or empty"); expectedException.expect(ZipException.class); zipFile.addFile((String) null, new ZipParameters()); } @Test public void testAddFileAsStringWithParametersThrowsExceptionWhenFileIsEmpty() throws ZipException { expectedException.expectMessage("file to add is null or empty"); expectedException.expect(ZipException.class); zipFile.addFile("", new ZipParameters()); } @Test public void testAddFileAsFileThrowsExceptionWhenParametersIsNull() throws ZipException { File fileToAdd = mockFile(true); expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters are null"); zipFile.addFile(fileToAdd, null); } @Test public void testAddFileAsFileThrowsExceptionWhenProgressMonitorStateIsBusy() throws ZipException { File fileToAdd = mockFile(true); zipFile.setRunInThread(true); zipFile.getProgressMonitor().setState(ProgressMonitor.State.BUSY); expectedException.expect(ZipException.class); expectedException.expectMessage("invalid operation - Zip4j is in busy state"); zipFile.addFile(fileToAdd, new ZipParameters()); } @Test public void testAddFilesThrowsExceptionWhenInputFilesIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input file List is null or empty"); zipFile.addFiles(null); } @Test public void testAddFilesThrowsExceptionWhenInputFilesIsEmpty() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input file List is null or empty"); zipFile.addFiles(Collections.emptyList()); } @Test public void testAddFilesThrowsExceptionWhenProgressMonitorStateIsBusy() throws ZipException { zipFile.getProgressMonitor().setState(ProgressMonitor.State.BUSY); zipFile.setRunInThread(true); expectedException.expect(ZipException.class); expectedException.expectMessage("invalid operation - Zip4j is in busy state"); zipFile.addFiles(Collections.singletonList(new File("Some_File"))); } @Test public void testAddFilesWithParametersThrowsExceptionWhenInputFilesIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input file List is null or empty"); zipFile.addFiles(null, new ZipParameters()); } @Test public void testAddFilesWithParametersThrowsExceptionWhenInputFilesIsEmpty() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input file List is null or empty"); zipFile.addFiles(Collections.emptyList(), new ZipParameters()); } @Test public void testAddFilesWithParametersThrowsExceptionWhenParametersAreNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters are null"); zipFile.addFiles(Collections.singletonList(new File("Some_File")), null); } @Test public void testAddFilesWithParametersThrowsExceptionWhenProgressMonitorStateIsBusy() throws ZipException { zipFile.setRunInThread(true); zipFile.getProgressMonitor().setState(ProgressMonitor.State.BUSY); expectedException.expect(ZipException.class); expectedException.expectMessage("invalid operation - Zip4j is in busy state"); zipFile.addFiles(Collections.singletonList(new File("Some_File")), new ZipParameters()); } @Test public void testAddFolderThrowsExceptionWhenFolderIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input path is null, cannot add folder to zip file"); zipFile.addFolder(null); } @Test public void testAddFolderThrowsExceptionWhenFolderDoesNotExist() throws ZipException { File folderToAdd = mockFile(false); expectedException.expect(ZipException.class); expectedException.expectMessage("folder does not exist"); zipFile.addFolder(folderToAdd); } @Test public void testAddFolderThrowsExceptionWhenFolderNotADirectory() throws ZipException { File folderToAdd = mockFile(true); when(folderToAdd.isDirectory()).thenReturn(false); expectedException.expect(ZipException.class); expectedException.expectMessage("input folder is not a directory"); zipFile.addFolder(folderToAdd); } @Test public void testAddFolderThrowsExceptionWhenCannotReadFolder() throws ZipException { File folderToAdd = mockFile(true); when(folderToAdd.isDirectory()).thenReturn(true); when(folderToAdd.canRead()).thenReturn(false); expectedException.expect(ZipException.class); expectedException.expectMessage("cannot read input folder"); zipFile.addFolder(folderToAdd); } @Test public void testAddFolderWithParametersThrowsExceptionWhenFolderIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("input path is null, cannot add folder to zip file"); zipFile.addFolder(null, new ZipParameters()); } @Test public void testAddFolderWithParametersThrowsExceptionWhenFolderDoesNotExist() throws ZipException { File folderToAdd = mockFile(false); expectedException.expect(ZipException.class); expectedException.expectMessage("folder does not exist"); zipFile.addFolder(folderToAdd, new ZipParameters()); } @Test public void testAddFolderWithParametersThrowsExceptionWhenFolderNotADirectory() throws ZipException { File folderToAdd = mockFile(true); when(folderToAdd.isDirectory()).thenReturn(false); expectedException.expect(ZipException.class); expectedException.expectMessage("input folder is not a directory"); zipFile.addFolder(folderToAdd, new ZipParameters()); } @Test public void testAddFolderWithParametersThrowsExceptionWhenCannotReadFolder() throws ZipException { File folderToAdd = mockFile(true); when(folderToAdd.isDirectory()).thenReturn(true); when(folderToAdd.canRead()).thenReturn(false); expectedException.expect(ZipException.class); expectedException.expectMessage("cannot read input folder"); zipFile.addFolder(folderToAdd, new ZipParameters()); } @Test public void testAddFolderWithParametersThrowsExceptionWhenInputParametersAreNull() throws ZipException { File folderToAdd = mockFile(true); when(folderToAdd.isDirectory()).thenReturn(true); when(folderToAdd.canRead()).thenReturn(true); expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters are null, cannot add folder to zip file"); zipFile.addFolder(folderToAdd, null); } @Test public void testAddFolderThrowsExceptionWhenProgressMonitorStateIsBusy() throws ZipException { File folderToAdd = mockFolder(); zipFile.setRunInThread(true); zipFile.getProgressMonitor().setState(ProgressMonitor.State.BUSY); expectedException.expect(ZipException.class); expectedException.expectMessage("invalid operation - Zip4j is in busy state"); zipFile.addFolder(folderToAdd, new ZipParameters()); } @Test public void testAddStreamThrowsExceptionWhenInputStreamIsNull() throws ZipException { expectedException.expectMessage("inputstream is null, cannot add file to zip"); expectedException.expect(ZipException.class); zipFile.addStream(null, new ZipParameters()); } @Test public void testAddStreamThrowsExceptionWhenParametersIsNull() throws ZipException { expectedException.expectMessage("zip parameters are null"); expectedException.expect(ZipException.class); zipFile.addStream(new ByteArrayInputStream(new byte[2]), null); } @Test public void testExtractAllThrowsExceptionWhenDestinationIsNull() throws ZipException { expectedException.expectMessage("output path is null or invalid"); expectedException.expect(ZipException.class); zipFile.extractAll(null); } @Test public void testExtractAllThrowsExceptionWhenDestinationIsEmpty() throws ZipException { expectedException.expectMessage("output path is null or invalid"); expectedException.expect(ZipException.class); zipFile.extractAll(" "); } @Test public void testExtractFileWithFileHeaderWhenFileHeaderIsNullThrowsException() throws ZipException { expectedException.expectMessage("input file header is null, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile((FileHeader) null, "SOME_DESTINATION"); } @Test public void testExtractFileWithFileHeaderWhenDestinationIsNullThrowsException() throws ZipException { expectedException.expectMessage("destination path is empty or null, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile(createFileHeader("SOME_NAME"), null); } @Test public void testExtractFileWithFileHeaderWhenDestinationIsEmptyThrowsException() throws ZipException { expectedException.expectMessage("destination path is empty or null, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile(createFileHeader("SOME_NAME"), ""); } @Test public void testExtractFileWithFileHeaderWhenBusyStateThrowsException() throws ZipException { zipFile.setRunInThread(true); zipFile.getProgressMonitor().setState(ProgressMonitor.State.BUSY); expectedException.expectMessage("invalid operation - Zip4j is in busy state"); expectedException.expect(ZipException.class); zipFile.extractFile(createFileHeader("SOME_NAME"), "SOME_DESTINATION"); } @Test public void testExtractFileWithFileNameThrowsExceptionWhenNameIsNull() throws ZipException { expectedException.expectMessage("file to extract is null or empty, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile((String) null, "SOME_DESTINATION"); } @Test public void testExtractFileWithFileNameThrowsExceptionWhenNameIsEmpty() throws ZipException { expectedException.expectMessage("file to extract is null or empty, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile("", "SOME_DESTINATION"); } @Test public void testExtractFileWithNewFileNameThrowsExceptionWhenNameIsNull() throws ZipException { expectedException.expectMessage("file to extract is null or empty, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile((String) null, "SOME_DESTINATION", "NEW_FILE_NAME"); } @Test public void testExtractFileWithNewFileNameThrowsExceptionWhenNameIsEmpty() throws ZipException { expectedException.expectMessage("file to extract is null or empty, cannot extract file"); expectedException.expect(ZipException.class); zipFile.extractFile("", "SOME_DESTINATION"); } @Test public void testGetFileHeadersReturnsEmptyListWhenZipFileDoesNotExist() throws ZipException { File mockFile = mockFile(false); ZipFile zipFile = new ZipFile(mockFile); assertThat(zipFile.getFileHeaders()).isEmpty(); } @Test public void testGetFileHeaderThrowsExceptionWhenFileNameIsNull() throws ZipException { expectedException.expectMessage("input file name is emtpy or null, cannot get FileHeader"); expectedException.expect(ZipException.class); zipFile.getFileHeader(null); } @Test public void testGetFileHeaderThrowsExceptionWhenFileNameIsEmpty() throws ZipException { expectedException.expectMessage("input file name is emtpy or null, cannot get FileHeader"); expectedException.expect(ZipException.class); zipFile.getFileHeader(""); } @Test public void testRemoveFileWithFileNameThrowsExceptionWhenFileNameIsNull() throws ZipException { expectedException.expectMessage("file name is empty or null, cannot remove file"); expectedException.expect(ZipException.class); zipFile.removeFile((String) null); } @Test public void testRemoveFileWithFileNameThrowsExceptionWhenFileNameIsEmpty() throws ZipException { expectedException.expectMessage("file name is empty or null, cannot remove file"); expectedException.expect(ZipException.class); zipFile.removeFile(""); } @Test public void testRemoveFileWithFileHeaderThrowsExceptionWhenFileNameIsNull() throws ZipException { expectedException.expectMessage("input file header is null, cannot remove file"); expectedException.expect(ZipException.class); zipFile.removeFile((FileHeader) null); } @Test public void testRemoveFilesWithListThrowsExceptionWhenListIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("fileNames list is null"); zipFile.removeFiles(null); } @Test public void testRenameFileWithFileHeaderThrowsExceptionWhenHeaderIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("File header is null"); zipFile.renameFile((FileHeader) null, "somename"); } @Test public void testRenameFileWithFileHeaderThrowsExceptionWhenNewFileNameIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("newFileName is null or empty"); FileHeader fileHeader = new FileHeader(); fileHeader.setFileName("somename"); zipFile.renameFile(fileHeader, null); } @Test public void testRenameFileWithFileHeaderThrowsExceptionWhenNewFileNameIsEmpty() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("newFileName is null or empty"); FileHeader fileHeader = new FileHeader(); fileHeader.setFileName("somename"); zipFile.renameFile(fileHeader, ""); } @Test public void testRenameFileWithFileNameThrowsExceptionWhenFileNameToBeChangedIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("file name to be changed is null or empty"); zipFile.renameFile((String) null, "somename"); } @Test public void testRenameFileWithFileNameThrowsExceptionWhenFileNameToBeChangedIsEmpty() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("file name to be changed is null or empty"); zipFile.renameFile("", "somename"); } @Test public void testRenameFileWithFileNameThrowsExceptionWhenNewFileNameIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("newFileName is null or empty"); zipFile.renameFile("Somename", null); } @Test public void testRenameFileWithFileNameThrowsExceptionWhenNewFileNameIsEmpty() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("newFileName is null or empty"); zipFile.renameFile("Somename", " "); } @Test public void testRenameFileWithMapThrowsExceptionWhenMapIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("fileNamesMap is null"); zipFile.renameFiles(null); } @Test public void testMergeSplitFilesWhenOutputFileIsNullThrowsException() throws ZipException { expectedException.expectMessage("outputZipFile is null, cannot merge split files"); expectedException.expect(ZipException.class); zipFile.mergeSplitFiles(null); } @Test public void testMergeSplitFilesWhenOutputFileDoesAlreadyExistsThrowsException() throws ZipException { expectedException.expectMessage("output Zip File already exists"); expectedException.expect(ZipException.class); File mergedZipFile = mockFile(true); zipFile.mergeSplitFiles(mergedZipFile); } @Test public void testSetCommentWhenCommentIsNullThrowsException() throws ZipException { expectedException.expectMessage("input comment is null, cannot update zip file"); expectedException.expect(ZipException.class); zipFile.setComment(null); } @Test public void testSetCommentWhenZipFileDoesNotExistsThrowsException() throws ZipException { expectedException.expectMessage("zip file does not exist, cannot set comment for zip file"); expectedException.expect(ZipException.class); zipFile.setComment("Some comment"); } @Test public void testGetCommentWhenZipFileDoesNotExistThrowsException() throws ZipException { expectedException.expectMessage("zip file does not exist, cannot read comment"); expectedException.expect(ZipException.class); zipFile.getComment(); } @Test public void testGetInputStreamWhenFileHeaderIsNullThrowsException() throws IOException { expectedException.expectMessage("FileHeader is null, cannot get InputStream"); expectedException.expect(ZipException.class); zipFile.getInputStream(null); } @Test public void testSetRunInThreadSetsFlag() { zipFile.setRunInThread(true); assertThat(zipFile.isRunInThread()).isTrue(); zipFile.setRunInThread(false); assertThat(zipFile.isRunInThread()).isFalse(); } @Test public void testGetFileReturnsValidFile() { assertThat(zipFile.getFile()).isSameAs(sourceZipFile); } @Test public void testToString() { assertThat(zipFile.toString()).isEqualTo("SOME_PATH"); } @Test public void testSetBufferSizeThrowsExceptionWhenSizeLessThanExpected() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Buffer size cannot be less than " + MIN_BUFF_SIZE + " bytes"); zipFile.setBufferSize(MIN_BUFF_SIZE - 1); } private File mockFile(boolean fileExists) { File file = mock(File.class); when(file.exists()).thenReturn(fileExists); when(file.toString()).thenReturn("SOME_PATH"); return file; } private File mockFolder() { File folder = mock(File.class); when(folder.exists()).thenReturn(true); when(folder.toString()).thenReturn("SOME_PATH"); when(folder.isDirectory()).thenReturn(true); when(folder.canRead()).thenReturn(true); return folder; } private FileHeader createFileHeader(String fileName) { FileHeader fileHeader = new FileHeader(); fileHeader.setFileName(fileName); return fileHeader; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/ZipFileZip64IT.java000066400000000000000000000164641414265447200240320ustar00rootroot00000000000000package net.lingala.zip4j; import net.lingala.zip4j.headers.HeaderReader; import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.testutils.HeaderVerifier; import net.lingala.zip4j.testutils.RandomInputStream; import net.lingala.zip4j.testutils.SlowTests; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.testutils.ZipFileVerifier; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Test; import org.junit.experimental.categories.Category; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; @Category(SlowTests.class) public class ZipFileZip64IT extends AbstractIT { private byte[] readBuffer = new byte[2 * InternalZipConstants.BUFF_SIZE]; @Test public void testZip64WithSingleLargeZipEntry() throws IOException { long entrySize = InternalZipConstants.ZIP_64_SIZE_LIMIT + 1; ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); zipParameters.setEntrySize(entrySize); createZip64FileWithEntries(1, entrySize, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, false); verifyZip64HeadersPresent(); cleanupOutputFolder(); ZipFile zipFile = new ZipFile(generatedZipFile); zipFile.renameFile("FILE_0", "NEW_FILE_0"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, false); verifyZip64HeadersPresent(); HeaderVerifier.verifyFileHeadersExist(zipFile, Collections.singletonList("NEW_FILE_0")); HeaderVerifier.verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("FILE_0")); cleanupOutputFolder(); zipFile = new ZipFile(generatedZipFile); zipFile.removeFile("NEW_FILE_0"); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 0, false); HeaderVerifier.verifyFileHeadersDoesNotExist(zipFile, Collections.singletonList("NEW_FILE_0")); } @Test public void testZip64WithCentralDirectoryOffsetGreaterThanZip64Limit() throws IOException { long eachEntrySize = (InternalZipConstants.ZIP_64_SIZE_LIMIT / 2) + 100; ZipParameters zipParameters = new ZipParameters(); zipParameters.setEntrySize(eachEntrySize); createZip64FileWithEntries(3, eachEntrySize, zipParameters); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 3, false); verifyZip64HeadersPresent(); cleanupOutputFolder(); ZipFile zipFile = new ZipFile(generatedZipFile); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("FILE_1", "NEW_FILE_1"); fileNamesMap.put("FILE_2", "NEW_FILE_2"); zipFile.renameFiles(fileNamesMap); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 3, false); verifyZip64HeadersPresent(); HeaderVerifier.verifyFileHeadersExist(zipFile, fileNamesMap.values()); HeaderVerifier.verifyFileHeadersDoesNotExist(zipFile, fileNamesMap.keySet()); cleanupOutputFolder(); zipFile = new ZipFile(generatedZipFile); List filesToRemove = new ArrayList<>(); filesToRemove.add("FILE_0"); filesToRemove.add("NEW_FILE_2"); zipFile.removeFiles(filesToRemove); ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 1, false); HeaderVerifier.verifyFileHeadersDoesNotExist(zipFile, filesToRemove); HeaderVerifier.verifyFileHeadersExist(zipFile, Collections.singleton("NEW_FILE_1")); } @Test public void testZip64WithNumberOfEntriesGreaterThan70k() throws IOException { long eachEntrySize = 100; ZipParameters zipParameters = new ZipParameters(); zipParameters.setEntrySize(eachEntrySize); createZip64FileWithEntries(70000, eachEntrySize, zipParameters); ZipFile zipFile = new ZipFile(generatedZipFile); assertThat(zipFile.getFileHeaders()).hasSize(70000); verifyZip64HeadersPresent(); zipFile = new ZipFile(generatedZipFile); Map fileNamesMap = new HashMap<>(); fileNamesMap.put("FILE_10", "NEW_FILE_10"); fileNamesMap.put("FILE_20", "NEW_FILE_20"); fileNamesMap.put("FILE_30", "NEW_FILE_30"); zipFile.renameFiles(fileNamesMap); verifyZip64HeadersPresent(); HeaderVerifier.verifyFileHeadersExist(zipFile, fileNamesMap.values()); HeaderVerifier.verifyFileHeadersDoesNotExist(zipFile, fileNamesMap.keySet()); zipFile = new ZipFile(generatedZipFile); List filesToRemove = new ArrayList<>(); filesToRemove.add("FILE_0"); filesToRemove.add("NEW_FILE_10"); filesToRemove.add("NEW_FILE_30"); zipFile.removeFiles(filesToRemove); HeaderVerifier.verifyFileHeadersDoesNotExist(zipFile, filesToRemove); } @Test public void testZip64WhenAddingFilesWithNewlyInstantiatedZipFile() throws IOException { testZip64WhenAddingMultipleFiles(true); } @Test public void testZip64WhenAddingFilesWithAlreadyInstantiatedZipFile() throws IOException { testZip64WhenAddingMultipleFiles(false); } private void testZip64WhenAddingMultipleFiles(boolean reinitializeZipFile) throws IOException { File testFileToAdd = TestUtils.generateFileOfSize(temporaryFolder, 1073741824); // 1 GB ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); ZipFile zipFile = new ZipFile(generatedZipFile); for (int i = 0; i < 6; i++) { zipParameters.setFileNameInZip(Integer.toString(i)); if (reinitializeZipFile) { zipFile = new ZipFile(generatedZipFile); } zipFile.addFile(testFileToAdd, zipParameters); } ZipFileVerifier.verifyZipFileByExtractingAllFiles(generatedZipFile, null, outputFolder, 6, false); } private void verifyZip64HeadersPresent() throws IOException { HeaderReader headerReader = new HeaderReader(); ZipModel zipModel = headerReader.readAllHeaders(new RandomAccessFile(generatedZipFile, RandomAccessFileMode.READ.getValue()), buildDefaultConfig()); assertThat(zipModel.getZip64EndOfCentralDirectoryLocator()).isNotNull(); assertThat(zipModel.getZip64EndOfCentralDirectoryRecord()).isNotNull(); assertThat(zipModel.isZip64Format()).isTrue(); } private void createZip64FileWithEntries(int numberOfEntries, long eachEntrySize, ZipParameters zipParameters) throws IOException { int readLen; try(ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(generatedZipFile))) { for (int i = 0; i < numberOfEntries; i++) { zipParameters.setFileNameInZip("FILE_" + i); zipOutputStream.putNextEntry(zipParameters); try(InputStream inputStream = new RandomInputStream(eachEntrySize)) { while ((readLen = inputStream.read(readBuffer)) != -1) { zipOutputStream.write(readBuffer, 0, readLen); } } zipOutputStream.closeEntry(); } } } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/crypto/000077500000000000000000000000001414265447200220405ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/crypto/PBKDF2/000077500000000000000000000000001414265447200227505ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/crypto/PBKDF2/BinToolsTest.java000066400000000000000000000024501414265447200262050ustar00rootroot00000000000000package net.lingala.zip4j.crypto.PBKDF2; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import static org.assertj.core.api.Assertions.assertThat; public class BinToolsTest { @Rule public final ExpectedException expectedException = ExpectedException.none(); @Test public void bin2hexForValidInputReturnsValidHex() { final byte[] b = {(byte) 112}; assertThat(BinTools.bin2hex(b)).isEqualTo("70"); } @Test public void bin2hexForEmptyInputReturnsEmptyString() { assertThat(BinTools.bin2hex(new byte[]{})).isEqualTo(""); } @Test public void bin2hexForNullInputReturnsEmptyString() { assertThat(BinTools.bin2hex(null)).isEqualTo(""); } @Test public void bin2hexForNullInputReturnsEmptyArray() { assertThat(BinTools.hex2bin(null)).isEqualTo(new byte[]{}); } @Test public void hex2binForInvalidInputOutputIllegalArgumentException() { expectedException.expect(IllegalArgumentException.class); BinTools.hex2bin("foo"); } @Test public void hex2binCharacterInputOutputPositive() { assertThat(BinTools.hex2bin('A')).isEqualTo(10); } @Test public void hex2binInvalidInputOutputIllegalArgumentException() { expectedException.expect(IllegalArgumentException.class); BinTools.hex2bin('\u013c'); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/exception/000077500000000000000000000000001414265447200225165ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/exception/ZipExceptionTest.java000066400000000000000000000037041414265447200266460ustar00rootroot00000000000000package net.lingala.zip4j.exception; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class ZipExceptionTest { @Test public void testZipExceptionForErrorMessage() { String message = "SOME_MESSAGE"; ZipException zipException = new ZipException(message); assertThat(zipException.getMessage()).isEqualTo(message); assertThat(zipException.getType()).isEqualTo(ZipException.Type.UNKNOWN); } @Test public void testZipExceptionWithRootException() { String errorMessage = "SOME_MESSAGE"; Exception rootException = new RuntimeException(errorMessage); ZipException zipException = new ZipException(rootException); assertThat(zipException.getCause()).isEqualTo(rootException); assertThat(zipException.getCause().getMessage()).isEqualTo(errorMessage); assertThat(zipException.getType()).isEqualTo(ZipException.Type.UNKNOWN); assertThat(zipException.getMessage()).contains(errorMessage); } @Test public void testZipExceptionWithMessageAndRootException() { String errorMessage = "SOME_MESSAGE"; String rootErrorMessage = "ROOT_ERROR_MESSAGE"; Exception rootException = new RuntimeException(rootErrorMessage); ZipException zipException = new ZipException(errorMessage, rootException); assertThat(zipException.getCause()).isEqualTo(rootException); assertThat(zipException.getCause().getMessage()).isEqualTo(rootErrorMessage); assertThat(zipException.getType()).isEqualTo(ZipException.Type.UNKNOWN); assertThat(zipException.getMessage()).isEqualTo(errorMessage); } @Test public void testZipExceptionWithMessageAndExceptionType() { String errorMessage = "SOME_MESSAGE"; ZipException.Type exceptionType = ZipException.Type.WRONG_PASSWORD; ZipException zipException = new ZipException(errorMessage, exceptionType); assertThat(zipException.getType()).isEqualTo(exceptionType); assertThat(zipException.getMessage()).isEqualTo(errorMessage); } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/headers/000077500000000000000000000000001414265447200221335ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/headers/FileHeaderFactoryTest.java000066400000000000000000000535251414265447200271700ustar00rootroot00000000000000package net.lingala.zip4j.headers; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionLevel; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.nio.charset.Charset; import static net.lingala.zip4j.util.BitUtils.isBitSet; import static net.lingala.zip4j.util.Zip4jUtil.epochToExtendedDosTime; import static org.assertj.core.api.Assertions.assertThat; public class FileHeaderFactoryTest { private static final String ACTUAL_OS = System.getProperty("os.name"); private static final String FILE_NAME_IN_ZIP = "filename.txt"; private static final long ENTRY_CRC = 2323L; private FileHeaderFactory fileHeaderFactory = new FileHeaderFactory(); private RawIO rawIO = new RawIO(); @Rule public ExpectedException expectedException = ExpectedException.none(); @Before public void setup() { System.setProperty("os.name", "linux"); } @After public void cleanup() { System.setProperty("os.name", ACTUAL_OS); } @Test public void testGenerateFileHeaderWithoutFileNameThrowsException() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("fileNameInZip is null or empty"); fileHeaderFactory.generateFileHeader(new ZipParameters(), false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); } @Test public void testGenerateFileHeaderDefaults() throws ZipException { FileHeader fileHeader = fileHeaderFactory.generateFileHeader(generateZipParameters(), false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getCompressionMethod()).isEqualTo(CompressionMethod.DEFLATE); verifyCompressionLevelGridForDeflate(CompressionLevel.NORMAL, fileHeader.getGeneralPurposeFlag()[0]); assertThat(fileHeader.isEncrypted()).isFalse(); assertThat(fileHeader.getEncryptionMethod()).isEqualTo(EncryptionMethod.NONE); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); assertThat(fileHeader.getLastModifiedTime()).isNotZero(); assertThat(fileHeader.getCompressedSize()).isEqualTo(0); assertThat(fileHeader.getUncompressedSize()).isEqualTo(0); } @Test public void testGenerateFileHeaderForStoreWithoutEncryption() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 10, false); } @Test public void testGenerateFileHeaderWhenEncryptingWithoutMethodThrowsException() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("Encryption method has to be set when encryptFiles flag is set in zip parameters"); ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); } @Test public void testGenerateFileHeaderWithStandardEncryption() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 20, false); } @Test public void testGenerateFileHeaderWithAesEncryptionWithNullKeyStrengthThrowsException() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("invalid AES key strength"); ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setAesKeyStrength(null); fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); } @Test public void testGenerateFileHeaderWithAesEncryptionWithoutKeyStrengthUsesDefault() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 51, true); verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_256, CompressionMethod.DEFLATE, AesVersion.TWO); } @Test public void testGenerateFileHeaderWithAesEncryptionWithKeyStrength128() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 51, true); verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_128, CompressionMethod.DEFLATE, AesVersion.TWO); } @Test public void testGenerateFileHeaderWithAesEncryptionWithKeyStrength192() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_192); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 51, true); verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_192, CompressionMethod.DEFLATE, AesVersion.TWO); } @Test public void testGenerateFileHeaderWithAesEncryptionWithKeyStrength256() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 51, true); verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_256, CompressionMethod.DEFLATE, AesVersion.TWO); } @Test public void testGenerateFileHeaderWithAesEncryptionVersionV1() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); zipParameters.setAesVersion(AesVersion.ONE); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 51, true); verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_256, CompressionMethod.DEFLATE, AesVersion.ONE); } @Test public void testGenerateFileHeaderWithAesEncryptionWithNullVersionUsesV2() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); zipParameters.setAesVersion(null); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyFileHeader(fileHeader, zipParameters, false, 0, 51, true); verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_256, CompressionMethod.DEFLATE, AesVersion.TWO); } @Test public void testGenerateFileHeaderWithLastModifiedFileTime() throws ZipException { long lastModifiedFileTime = System.currentTimeMillis(); ZipParameters zipParameters = generateZipParameters(); zipParameters.setLastModifiedFileTime(lastModifiedFileTime); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); assertThat(fileHeader.getLastModifiedTime()).isEqualTo(epochToExtendedDosTime(zipParameters.getLastModifiedFileTime())); } @Test public void testGenerateFileHeaderWithCompressionLeveUltra() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setCompressionLevel(CompressionLevel.ULTRA); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyCompressionLevelGridForDeflate(CompressionLevel.ULTRA, fileHeader.getGeneralPurposeFlag()[0]); } @Test public void testGenerateFileHeaderWithCompressionLevelMaximum() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setCompressionLevel(CompressionLevel.MAXIMUM); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyCompressionLevelGridForDeflate(CompressionLevel.MAXIMUM, fileHeader.getGeneralPurposeFlag()[0]); } @Test public void testGenerateFileHeaderWithCompressionLevelFast() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setCompressionLevel(CompressionLevel.FAST); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyCompressionLevelGridForDeflate(CompressionLevel.FAST, fileHeader.getGeneralPurposeFlag()[0]); } @Test public void testGenerateFileHeaderWithCompressionLevelFastest() throws ZipException { ZipParameters zipParameters = generateZipParameters(); zipParameters.setCompressionLevel(CompressionLevel.FASTEST); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); verifyCompressionLevelGridForDeflate(CompressionLevel.FASTEST, fileHeader.getGeneralPurposeFlag()[0]); } @Test public void testGenerateFileHeaderWithCorrectCharset() throws ZipException { FileHeader fileHeader = fileHeaderFactory.generateFileHeader(generateZipParameters(), false, 0, Charset.forName("Cp949"), rawIO); assertThat(isBitSet(fileHeader.getGeneralPurposeFlag()[1], 3)).isFalse(); } @Test public void testGenerateFileHeaderWithUTF8Charset() throws ZipException { FileHeader fileHeader = fileHeaderFactory.generateFileHeader(generateZipParameters(), false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); assertThat(isBitSet(fileHeader.getGeneralPurposeFlag()[1], 3)).isTrue(); } @Test public void testGenerateLocalFileHeader() { long lastModifiedFileTime = epochToExtendedDosTime(System.currentTimeMillis()); FileHeader fileHeader = generateFileHeader(lastModifiedFileTime); LocalFileHeader localFileHeader = fileHeaderFactory.generateLocalFileHeader(fileHeader); verifyLocalFileHeader(localFileHeader, lastModifiedFileTime); } @Test public void testVersionMadeByWindowsWithUnixModeOff() { changeOsSystemPropertyToWindows(); testVersionMadeBy(generateZipParameters(), 51); } @Test public void testVersionMadeByWindowsWithUnixModeOn() { changeOsSystemPropertyToWindows(); ZipParameters zipParameters = generateZipParameters(); zipParameters.setUnixMode(true); testVersionMadeBy(zipParameters, 819); } @Test public void testVersionMadeByUnix() { changeOsSystemPropertyToUnix(); testVersionMadeBy(generateZipParameters(), 819); } @Test public void testVersionMadeByMac() { changeOsSystemPropertyToMac(); testVersionMadeBy(generateZipParameters(), 819); } private void testVersionMadeBy(ZipParameters zipParameters, int expectedVersionMadeBy) { try { FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); assertThat(fileHeader.getVersionMadeBy()).isEqualTo(expectedVersionMadeBy); } catch (Exception e) { restoreOsSystemProperty(); } } private ZipParameters generateZipParameters() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(FILE_NAME_IN_ZIP); zipParameters.setEntryCRC(ENTRY_CRC); return zipParameters; } private FileHeader generateFileHeader(long lastModifiedFileTime) { FileHeader fileHeader = new FileHeader(); fileHeader.setVersionNeededToExtract(20); fileHeader.setCompressionMethod(CompressionMethod.STORE); fileHeader.setLastModifiedTime(lastModifiedFileTime); fileHeader.setUncompressedSize(1000L); fileHeader.setFileName(FILE_NAME_IN_ZIP); fileHeader.setFileNameLength(FILE_NAME_IN_ZIP.getBytes(InternalZipConstants.CHARSET_UTF_8).length); fileHeader.setEncrypted(true); fileHeader.setEncryptionMethod(EncryptionMethod.AES); fileHeader.setCrc(1231231L); fileHeader.setCompressedSize(23523L); fileHeader.setGeneralPurposeFlag(new byte[] {2, 28}); fileHeader.setDataDescriptorExists(true); fileHeader.setExtraFieldLength(190); return fileHeader; } private void verifyFileHeader(FileHeader fileHeader, ZipParameters zipParameters, boolean isSplitZip, int diskNumberStart, int versionNeededToExtract, boolean aesExtraDataRecordPresent) { assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getSignature()).isEqualTo(HeaderSignature.CENTRAL_DIRECTORY); assertThat(fileHeader.getVersionMadeBy()).isEqualTo(819); assertThat(fileHeader.getVersionNeededToExtract()).isEqualTo(versionNeededToExtract); verifyCompressionMethod(fileHeader, zipParameters); assertThat(fileHeader.isEncrypted()).isEqualTo(zipParameters.isEncryptFiles()); assertThat(fileHeader.getEncryptionMethod()).isEqualTo(zipParameters.isEncryptFiles() ? zipParameters.getEncryptionMethod() : EncryptionMethod.NONE); assertThat(fileHeader.getFileName()).isEqualTo(FILE_NAME_IN_ZIP); assertThat(fileHeader.getFileNameLength()).isEqualTo(FILE_NAME_IN_ZIP.length()); verifyGeneralPurposeBytes(fileHeader.getGeneralPurposeFlag(), zipParameters); assertThat(fileHeader.getDiskNumberStart()).isEqualTo(isSplitZip ? diskNumberStart : 0); verifyLastModifiedFileTime(fileHeader, zipParameters); verifyExternalFileAttributes(fileHeader); assertThat(fileHeader.isDirectory()).isEqualTo(false); if (zipParameters.isWriteExtendedLocalFileHeader()) { assertThat(fileHeader.getUncompressedSize()).isEqualTo(0); } else { assertThat(fileHeader.getUncompressedSize()).isEqualTo(zipParameters.getEntrySize()); } verifyCrc(fileHeader); assertThat(fileHeader.isDataDescriptorExists()).isEqualTo(zipParameters.isWriteExtendedLocalFileHeader()); assertThat(fileHeader.getAesExtraDataRecord() != null).isEqualTo(aesExtraDataRecordPresent); assertThat(fileHeader.getExtraFieldLength()).isEqualTo(aesExtraDataRecordPresent ? InternalZipConstants.AES_EXTRA_DATA_RECORD_SIZE : 0); } private void verifyLocalFileHeader(LocalFileHeader localFileHeader, long lastModifiedFileTime) { assertThat(localFileHeader).isNotNull(); assertThat(localFileHeader.getSignature()).isEqualTo(HeaderSignature.LOCAL_FILE_HEADER); assertThat(localFileHeader.getVersionNeededToExtract()).isEqualTo(20); assertThat(localFileHeader.getCompressionMethod()).isEqualTo(CompressionMethod.STORE); assertThat(localFileHeader.getLastModifiedTime()).isEqualTo(lastModifiedFileTime); assertThat(localFileHeader.getUncompressedSize()).isEqualTo(1000L); assertThat(localFileHeader.getFileName()).isEqualTo(FILE_NAME_IN_ZIP); assertThat(localFileHeader.getFileNameLength()).isEqualTo(FILE_NAME_IN_ZIP.length()); assertThat(localFileHeader.isEncrypted()).isEqualTo(true); assertThat(localFileHeader.getEncryptionMethod()).isEqualTo(EncryptionMethod.AES); assertThat(localFileHeader.getCrc()).isEqualTo(1231231L); assertThat(localFileHeader.getCompressedSize()).isEqualTo(23523L); assertThat(localFileHeader.getGeneralPurposeFlag()).containsExactly(2, 28); assertThat(localFileHeader.isDataDescriptorExists()).isTrue(); assertThat(localFileHeader.getExtraFieldLength()).isEqualTo(190); } private void verifyExternalFileAttributes(FileHeader fileHeader) { if (FileUtils.isUnix() || FileUtils.isMac()) { if (FileUtils.isZipEntryDirectory(fileHeader.getFileName())) { assertThat(fileHeader.getExternalFileAttributes()).isEqualTo(FileUtils.DEFAULT_POSIX_FOLDER_ATTRIBUTES); } else { assertThat(fileHeader.getExternalFileAttributes()).isEqualTo(FileUtils.DEFAULT_POSIX_FILE_ATTRIBUTES); } } else { assertThat(fileHeader.getExternalFileAttributes()).isEqualTo(new byte[4]); } } private void verifyCompressionMethod(FileHeader fileHeader, ZipParameters zipParameters) { if (fileHeader.isEncrypted() && fileHeader.getEncryptionMethod().equals(EncryptionMethod.AES)) { assertThat(fileHeader.getCompressionMethod()).isEqualTo(CompressionMethod.AES_INTERNAL_ONLY); } else { assertThat(fileHeader.getCompressionMethod()).isEqualTo(zipParameters.getCompressionMethod()); } } private void verifyLastModifiedFileTime(FileHeader fileHeader, ZipParameters zipParameters) { if (zipParameters.getLastModifiedFileTime() > 0) { assertThat(fileHeader.getLastModifiedTime()).isEqualTo(epochToExtendedDosTime( zipParameters.getLastModifiedFileTime())); } else { assertThat(fileHeader.getLastModifiedTime()).isGreaterThan(0); } } private void verifyGeneralPurposeBytes(byte[] generalPurposeBytes, ZipParameters zipParameters) { assertThat(generalPurposeBytes).isNotNull(); assertThat(generalPurposeBytes.length).isEqualTo(2); assertThat(isBitSet(generalPurposeBytes[0], 0)).isEqualTo(zipParameters.isEncryptFiles()); if (zipParameters.getCompressionMethod() == CompressionMethod.DEFLATE) { verifyCompressionLevelGridForDeflate(zipParameters.getCompressionLevel(), generalPurposeBytes[0]); } else { assertThat(isBitSet(generalPurposeBytes[0], 1)).isFalse(); assertThat(isBitSet(generalPurposeBytes[0], 2)).isFalse(); } assertThat(isBitSet(generalPurposeBytes[0], 3)).isEqualTo(zipParameters.isWriteExtendedLocalFileHeader()); assertThat(isBitSet(generalPurposeBytes[1], 3)).isTrue(); } private void verifyCompressionLevelGridForDeflate(CompressionLevel compressionLevel, byte firstByteOfGeneralPurposeBytes) { if (CompressionLevel.NORMAL.equals(compressionLevel)) { assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 1)).isFalse(); assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 2)).isFalse(); } else if (CompressionLevel.MAXIMUM.equals(compressionLevel)) { assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 1)).isTrue(); assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 2)).isFalse(); } else if (CompressionLevel.FAST.equals(compressionLevel)) { assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 1)).isFalse(); assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 2)).isTrue(); } else if (CompressionLevel.FASTEST.equals(compressionLevel) || CompressionLevel.ULTRA.equals(compressionLevel)) { assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 1)).isTrue(); assertThat(isBitSet(firstByteOfGeneralPurposeBytes, 2)).isTrue(); } else { throw new RuntimeException("Invalid compression level"); } } private void verifyCrc(FileHeader fileHeader) { if (fileHeader.isEncrypted() && fileHeader.getEncryptionMethod() == EncryptionMethod.ZIP_STANDARD) { assertThat(fileHeader.getCrc()).isEqualTo(ENTRY_CRC); } else { assertThat(fileHeader.getCrc()).isEqualTo(0); } } private void verifyAesExtraDataRecord(AESExtraDataRecord aesExtraDataRecord, AesKeyStrength aesKeyStrength, CompressionMethod compressionMethod, AesVersion aesVersion) { assertThat(aesExtraDataRecord).isNotNull(); assertThat(aesExtraDataRecord.getSignature()).isEqualTo(HeaderSignature.AES_EXTRA_DATA_RECORD); assertThat(aesExtraDataRecord.getDataSize()).isEqualTo(7); assertThat(aesExtraDataRecord.getVendorID()).isEqualTo("AE"); assertThat(aesExtraDataRecord.getCompressionMethod()).isEqualTo(compressionMethod); assertThat(aesExtraDataRecord.getAesVersion()).isEqualTo(aesVersion); assertThat(aesExtraDataRecord.getAesKeyStrength()).isEqualTo(aesKeyStrength); } private void changeOsSystemPropertyToWindows() { System.setProperty("os.name", "windows"); } private void changeOsSystemPropertyToUnix() { System.setProperty("os.name", "nux"); } private void changeOsSystemPropertyToMac() { System.setProperty("os.name", "mac"); } private void restoreOsSystemProperty() { System.setProperty("os.name", ACTUAL_OS); } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/headers/HeaderReaderIT.java000066400000000000000000000463441414265447200255610ustar00rootroot00000000000000package net.lingala.zip4j.headers; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.model.CentralDirectory; import net.lingala.zip4j.model.EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.util.BitUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; public class HeaderReaderIT extends AbstractIT { private static final String FILE_NAME_PREFIX = "FILE_NAME_ÄÜß_"; private static final String END_OF_CENTRAL_DIR_COMMENT = "END_OF_CENTRAL_DIR_COMMENT_ÜÄÖÖÖÄ"; private FileHeaderFactory fileHeaderFactory = new FileHeaderFactory(); private HeaderReader headerReader = new HeaderReader(); private HeaderWriter headerWriter = new HeaderWriter(); private RawIO rawIO = new RawIO(); @Test public void testReadAllHeadersWith10Entries() throws IOException { int numberOfEntries = 10; ZipModel actualZipModel = generateZipHeadersFile(numberOfEntries, EncryptionMethod.NONE); try(RandomAccessFile randomAccessFile = initializeRandomAccessFile(actualZipModel.getZipFile())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10, false); assertThat(readZipModel.getEndOfCentralDirectoryRecord().getComment()).isEmpty(); } } @Test public void testReadAllHeadersWithEndOfCentralDirectoryComment() throws IOException { ZipModel actualZipModel = generateZipModel(1); actualZipModel.getEndOfCentralDirectoryRecord().setComment(END_OF_CENTRAL_DIR_COMMENT); File headersFile = writeZipHeaders(actualZipModel); actualZipModel.setZipFile(headersFile); try(RandomAccessFile randomAccessFile = initializeRandomAccessFile(actualZipModel.getZipFile())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 1, false); EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = readZipModel.getEndOfCentralDirectoryRecord(); assertThat(endOfCentralDirectoryRecord.getComment()).isEqualTo(END_OF_CENTRAL_DIR_COMMENT); } } @Test public void testReadAllWithoutEndOfCentralDirectoryRecordThrowsException() throws IOException { try(RandomAccessFile randomAccessFile = new RandomAccessFile(temporaryFolder.newFile(), RandomAccessFileMode.WRITE.getValue())) { //Create an empty file randomAccessFile.seek(4000); randomAccessFile.write(1); headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e.getMessage()).isEqualTo("Zip headers not found. Probably not a zip file"); } } @Test public void testReadAllWithoutEnoughHeaderDataThrowsException() throws IOException { try(RandomAccessFile randomAccessFile = new RandomAccessFile(temporaryFolder.newFile(), RandomAccessFileMode.WRITE.getValue())) { //Create an empty file randomAccessFile.seek(1000); randomAccessFile.write(1); headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e.getMessage()).isEqualTo("Zip headers not found. Probably not a zip file"); assertThat(e.getCause() instanceof IOException); } } @Test public void testReadAllWithoutFileHeaderSignatureThrowsException() throws IOException { ZipModel actualZipModel = generateZipModel(2); actualZipModel.getCentralDirectory().getFileHeaders().get(1).setSignature(HeaderSignature.DIGITAL_SIGNATURE); File headersFile = writeZipHeaders(actualZipModel); actualZipModel.setZipFile(headersFile); try(RandomAccessFile randomAccessFile = new RandomAccessFile(actualZipModel.getZipFile(), RandomAccessFileMode.READ.getValue())) { headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e.getMessage()).isEqualTo("Expected central directory entry not found (#2)"); } } @Test public void testReadAllWithoutFileNameWritesNull() throws IOException { ZipModel actualZipModel = generateZipModel(1); actualZipModel.getCentralDirectory().getFileHeaders().get(0).setFileName(null); File headersFile = writeZipHeaders(actualZipModel); actualZipModel.setZipFile(headersFile); try(RandomAccessFile randomAccessFile = new RandomAccessFile(actualZipModel.getZipFile(), RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); FileHeader fileHeader = readZipModel.getCentralDirectory().getFileHeaders().get(0); assertThat(fileHeader.getFileName()).isNull(); } } @Test public void testReadAllWithJapaneseCharacters() throws IOException { testWithoutUtf8FileName("公ゃ的年社", "育ざどろめ", true, false); } @Test public void testReadAllWithoutUtf8FlagDecodesWithoutCharsetFlagForJapaneseCharactersMatches() throws IOException { testWithoutUtf8FileName("公ゃ的年社", "育ざどろめ", true, true, InternalZipConstants.CHARSET_UTF_8); } @Test public void testReadAllWithoutUtf8FlagAndWithoutCharsetForJapaneseCharactersDoesNotMatch() throws IOException { testWithoutUtf8FileName("公ゃ的年社", "育ざどろめ", false, true, null); } @Test public void testReadAllWithoutUtf8FlagDecodesWithoutCharsetFlagForEnglishCharactersMatches() throws IOException { testWithoutUtf8FileName("SOME_TEXT", "SOME_COMMENT", true, true); } @Test public void testReadAllWithAesEncryption() throws IOException { ZipModel actualZipModel = generateZipHeadersFile(3, EncryptionMethod.AES); try(RandomAccessFile randomAccessFile = new RandomAccessFile(actualZipModel.getZipFile(), RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); for (FileHeader fileHeader : readZipModel.getCentralDirectory().getFileHeaders()) { assertThat(fileHeader.getAesExtraDataRecord()).isNotNull(); assertThat(fileHeader.getAesExtraDataRecord().getAesKeyStrength()).isEqualTo(AesKeyStrength.KEY_STRENGTH_256); } } } @Test public void testReadAllWithStandardZipEncryption() throws IOException { ZipModel actualZipModel = generateZipHeadersFile(3, EncryptionMethod.ZIP_STANDARD); try(RandomAccessFile randomAccessFile = new RandomAccessFile(actualZipModel.getZipFile(), RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); for (FileHeader fileHeader : readZipModel.getCentralDirectory().getFileHeaders()) { assertThat(fileHeader.isEncrypted()).isTrue(); assertThat(fileHeader.getEncryptionMethod()).isEqualTo(EncryptionMethod.ZIP_STANDARD); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } @Test public void testReadAllZip64Format() throws IOException { ZipModel actualZipModel = generateZipModel(1); long entrySize = InternalZipConstants.ZIP_64_SIZE_LIMIT + 1; actualZipModel.getCentralDirectory().getFileHeaders().get(0).setUncompressedSize(entrySize); actualZipModel.getCentralDirectory().getFileHeaders().get(0).setCompressedSize(entrySize + 100); File headersFile = writeZipHeaders(actualZipModel); actualZipModel.setZipFile(headersFile); try(RandomAccessFile randomAccessFile = new RandomAccessFile(actualZipModel.getZipFile(), RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); assertThat(readZipModel.isZip64Format()).isTrue(); assertThat(readZipModel.getZip64EndOfCentralDirectoryRecord()).isNotNull(); assertThat(readZipModel.getZip64EndOfCentralDirectoryLocator()).isNotNull(); FileHeader fileHeader = actualZipModel.getCentralDirectory().getFileHeaders().get(0); assertThat(fileHeader.getUncompressedSize()).isEqualTo(entrySize); assertThat(fileHeader.getCompressedSize()).isEqualTo(entrySize + 100); } } @Test public void testReadLocalFileHeader() throws IOException { long entrySize = InternalZipConstants.ZIP_64_SIZE_LIMIT + 1; File headerFile = generateAndWriteLocalFileHeader(entrySize, EncryptionMethod.NONE); try(InputStream inputStream = new FileInputStream(headerFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); assertThat(readLocalFileHeader).isNotNull(); assertThat(readLocalFileHeader.getCompressedSize()).isEqualTo(entrySize); assertThat(readLocalFileHeader.getUncompressedSize()).isEqualTo(entrySize); } } @Test public void testReadLocalFileHeaderWithAesEncryption() throws IOException { long entrySize = InternalZipConstants.ZIP_64_SIZE_LIMIT - 1001 ; File headerFile = generateAndWriteLocalFileHeader(entrySize, EncryptionMethod.AES); try(InputStream inputStream = new FileInputStream(headerFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); assertThat(readLocalFileHeader).isNotNull(); assertThat(readLocalFileHeader.getCompressedSize()).isEqualTo(entrySize); assertThat(readLocalFileHeader.getUncompressedSize()).isEqualTo(entrySize); assertThat(readLocalFileHeader.getAesExtraDataRecord()).isNotNull(); assertThat(readLocalFileHeader.getAesExtraDataRecord().getAesKeyStrength()) .isEqualTo(AesKeyStrength.KEY_STRENGTH_256); } } @Test public void testReadLocalFileHeaderWithTemporarySpanningMarker() throws IOException { long entrySize = InternalZipConstants.ZIP_64_SIZE_LIMIT + 1; File headerFile = generateAndWriteLocalFileHeader(HeaderSignature.TEMPORARY_SPANNING_MARKER, entrySize, EncryptionMethod.NONE); try(InputStream inputStream = new FileInputStream(headerFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); assertThat(readLocalFileHeader).isNotNull(); assertThat(readLocalFileHeader.getCompressedSize()).isEqualTo(entrySize); assertThat(readLocalFileHeader.getUncompressedSize()).isEqualTo(entrySize); } } @Test public void testReadDataDescriptorWithSignature() { } private void testWithoutUtf8FileName(String fileName, String entryComment, boolean shouldFileNamesMatch, boolean unsetUtf8Flag) throws IOException { testWithoutUtf8FileName(fileName, entryComment, shouldFileNamesMatch, unsetUtf8Flag, null); } private void testWithoutUtf8FileName(String fileName, String entryComment, boolean shouldFileNamesMatch, boolean unsetUtf8Flag, Charset charsetToUseForReading) throws IOException { ZipModel actualZipModel = generateZipModel(3); FileHeader secondFileHeader = actualZipModel.getCentralDirectory().getFileHeaders().get(1); if (unsetUtf8Flag) { // Unset utf8 flag byte[] generalPurposeBytes = secondFileHeader.getGeneralPurposeFlag(); generalPurposeBytes[1] = BitUtils.unsetBit(generalPurposeBytes[1], 3); secondFileHeader.setGeneralPurposeFlag(generalPurposeBytes); } secondFileHeader.setFileName(fileName); secondFileHeader.setFileComment(entryComment); File headersFile = writeZipHeaders(actualZipModel); actualZipModel.setZipFile(headersFile); try(RandomAccessFile randomAccessFile = new RandomAccessFile(actualZipModel.getZipFile(), RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildConfig(charsetToUseForReading)); FileHeader fileHeader = readZipModel.getCentralDirectory().getFileHeaders().get(1); if (shouldFileNamesMatch) { assertThat(fileHeader.getFileName()).isEqualTo(fileName); assertThat(fileHeader.getFileComment()).isEqualTo(entryComment); } else { assertThat(fileHeader.getFileName()).isNotEqualTo(fileName); assertThat(fileHeader.getFileComment()).isNotEqualTo(entryComment); } assertThat(readZipModel.getCentralDirectory().getFileHeaders().get(0).getFileCommentLength()).isEqualTo(0); assertThat(readZipModel.getCentralDirectory().getFileHeaders().get(0).getFileComment()).isNull(); assertThat(readZipModel.getCentralDirectory().getFileHeaders().get(2).getFileCommentLength()).isEqualTo(0); assertThat(readZipModel.getCentralDirectory().getFileHeaders().get(2).getFileComment()).isNull(); } } private RandomAccessFile initializeRandomAccessFile(File headersFile) throws IOException { return new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue()); } private void verifyZipModel(ZipModel readZipModel, int numberOfExpectedEntries, boolean isZip64) { assertThat(readZipModel).isNotNull(); verifyEndOfCentralDirectory(readZipModel.getEndOfCentralDirectoryRecord(), numberOfExpectedEntries, isZip64); verifyCentralDirectory(readZipModel.getCentralDirectory(), numberOfExpectedEntries); } private void verifyEndOfCentralDirectory(EndOfCentralDirectoryRecord endOfCentralDirectoryRecord, int numberOfEntries, boolean isZip64) { assertThat(endOfCentralDirectoryRecord).isNotNull(); endOfCentralDirectoryRecord.setSignature(HeaderSignature.END_OF_CENTRAL_DIRECTORY); assertThat(endOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectory()).isEqualTo(numberOfEntries); if (!isZip64) { assertThat(endOfCentralDirectoryRecord.getNumberOfThisDisk()).isEqualTo(0); assertThat(endOfCentralDirectoryRecord.getNumberOfThisDiskStartOfCentralDir()).isEqualTo(0); assertThat(endOfCentralDirectoryRecord.getTotalNumberOfEntriesInCentralDirectoryOnThisDisk()) .isEqualTo(numberOfEntries); assertThat(endOfCentralDirectoryRecord.getSizeOfCentralDirectory()).isNotZero(); } } private void verifyCentralDirectory(CentralDirectory centralDirectory, int numberOfExpectedEntries) { assertThat(centralDirectory).isNotNull(); verifyFileHeaders(centralDirectory.getFileHeaders(), numberOfExpectedEntries); } private void verifyFileHeaders(List fileHeaders, int numberOfExpectedEntries) { assertThat(fileHeaders).isNotEmpty(); assertThat(fileHeaders).hasSize(numberOfExpectedEntries); for (int i = 0; i < numberOfExpectedEntries; i++) { String expectedFileName = FILE_NAME_PREFIX + i; FileHeader fileHeader = fileHeaders.get(i); assertThat(fileHeader.getFileName()).isEqualTo(expectedFileName); int expectedFileNameLength = expectedFileName.getBytes(InternalZipConstants.CHARSET_UTF_8).length; assertThat(fileHeader.getFileNameLength()).isEqualTo(expectedFileNameLength); } } private ZipModel generateZipHeadersFile(int numberOfEntries, EncryptionMethod encryptionMethod) throws IOException { ZipModel zipModel = generateZipModel(numberOfEntries, encryptionMethod); File headersFile = writeZipHeaders(zipModel); zipModel.setZipFile(headersFile); return zipModel; } private ZipModel generateZipModel(int numberOfEntries) throws ZipException { return generateZipModel(numberOfEntries, EncryptionMethod.NONE); } private ZipModel generateZipModel(int numberOfEntries, EncryptionMethod encryptionMethod) throws ZipException { ZipParameters zipParameters = generateZipParameters(encryptionMethod); ZipModel zipModel = new ZipModel(); zipModel.getCentralDirectory().setFileHeaders(generateFileHeaders(zipParameters, numberOfEntries)); return zipModel; } private ZipParameters generateZipParameters(EncryptionMethod encryptionMethod) { ZipParameters zipParameters = new ZipParameters(); if (encryptionMethod != null && encryptionMethod != EncryptionMethod.NONE) { zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(encryptionMethod); } return zipParameters; } private List generateFileHeaders(ZipParameters zipParameters, int numberOfEntries) throws ZipException { List fileHeaders = new ArrayList<>(); for (int i = 0; i < numberOfEntries; i++) { zipParameters.setFileNameInZip(FILE_NAME_PREFIX + i); FileHeader fileHeader = fileHeaderFactory.generateFileHeader(zipParameters, false, 0, InternalZipConstants.CHARSET_UTF_8, rawIO); fileHeaders.add(fileHeader); } return fileHeaders; } private LocalFileHeader generateLocalFileHeader(long entrySize, EncryptionMethod encryptionMethod) throws ZipException { List fileHeaders = generateFileHeaders(generateZipParameters(encryptionMethod), 1); LocalFileHeader localFileHeader = fileHeaderFactory.generateLocalFileHeader(fileHeaders.get(0)); localFileHeader.setCompressedSize(entrySize); localFileHeader.setUncompressedSize(entrySize); return localFileHeader; } private File generateAndWriteLocalFileHeader(long entrySize, EncryptionMethod encryptionMethod) throws IOException { return generateAndWriteLocalFileHeader(null, entrySize, encryptionMethod); } private File generateAndWriteLocalFileHeader(HeaderSignature headerSignature, long entrySize, EncryptionMethod encryptionMethod) throws IOException { LocalFileHeader localFileHeader = generateLocalFileHeader(entrySize, encryptionMethod); if (encryptionMethod != null && encryptionMethod != EncryptionMethod.NONE) { localFileHeader.setEncrypted(true); localFileHeader.setEncryptionMethod(encryptionMethod); } ZipModel zipModel = generateZipModel(1); File headerFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headerFile)) { if (headerSignature != null) { final RawIO rawIO = new RawIO(); rawIO.writeIntLittleEndian(outputStream, (int) headerSignature.getValue()); } headerWriter.writeLocalFileHeader(zipModel, localFileHeader, outputStream, InternalZipConstants.CHARSET_UTF_8); } return headerFile; } private File writeZipHeaders(ZipModel zipModel) throws IOException { File headersFile = temporaryFolder.newFile(); try(SplitOutputStream splitOutputStream = new SplitOutputStream(headersFile)) { headerWriter.finalizeZipFile(zipModel, splitOutputStream, InternalZipConstants.CHARSET_UTF_8); return headersFile; } } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/headers/HeaderUtilTest.java000066400000000000000000000261211414265447200256660ustar00rootroot00000000000000package net.lingala.zip4j.headers; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.CentralDirectory; import net.lingala.zip4j.model.EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip64EndOfCentralDirectoryRecord; import net.lingala.zip4j.model.Zip64ExtendedInfo; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class HeaderUtilTest { private static final String FILE_NAME = "test.txt"; @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testGetFileHeaderWithNullZipModelThrowsException() throws ZipException { expectZipException("zip model is null, cannot determine file header with exact match for fileName: " + FILE_NAME); HeaderUtil.getFileHeader(null, FILE_NAME); } @Test public void testGetFileHeaderWithNullFileNameThrowsException() throws ZipException { expectZipException("file name is null, cannot determine file header with exact match for fileName: null"); HeaderUtil.getFileHeader(new ZipModel(), null); } @Test public void testGetFileHeaderWithEmptyFileNameThrowsException() throws ZipException { expectZipException("file name is null, cannot determine file header with exact match for fileName: "); HeaderUtil.getFileHeader(new ZipModel(), ""); } @Test public void testGetFileHeaderWithNullCentralDirectoryThrowsException() throws ZipException { expectZipException("central directory is null, cannot determine file header with exact match for fileName: " + FILE_NAME); ZipModel zipModel = new ZipModel(); zipModel.setCentralDirectory(null); HeaderUtil.getFileHeader(zipModel, FILE_NAME); } @Test public void testGetFileHeaderWithNullFileHeadersThrowsException() throws ZipException { expectedException.expect(ZipException.class); expectZipException("file Headers are null, cannot determine file header with exact match for fileName: " + FILE_NAME); ZipModel zipModel = new ZipModel(); CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(null); zipModel.setCentralDirectory(centralDirectory); HeaderUtil.getFileHeader(zipModel, FILE_NAME); } @Test public void testGetFileHeaderWithEmptyFileHeadersReturnsNull() throws ZipException { ZipModel zipModel = new ZipModel(); CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(Collections.emptyList()); zipModel.setCentralDirectory(centralDirectory); FileHeader fileHeader = HeaderUtil.getFileHeader(zipModel, FILE_NAME); assertThat(fileHeader).isNull(); } @Test public void testGetFileHeaderWithExactMatch() throws ZipException { ZipModel zipModel = new ZipModel(); CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(Arrays.asList( generateFileHeader(null), generateFileHeader(""), generateFileHeader("SOME_OTHER_NAME"), generateFileHeader(FILE_NAME) )); zipModel.setCentralDirectory(centralDirectory); FileHeader fileHeader = HeaderUtil.getFileHeader(zipModel, FILE_NAME); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getFileName()).isEqualTo(FILE_NAME); } @Test public void testGetFileHeaderWithWindowsFileSeparator() throws ZipException { ZipModel zipModel = new ZipModel(); CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(Arrays.asList( generateFileHeader(FILE_NAME), generateFileHeader("SOME_OTHER_NAME\\") )); zipModel.setCentralDirectory(centralDirectory); FileHeader fileHeader = HeaderUtil.getFileHeader(zipModel, "SOME_OTHER_NAME\\"); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getFileName()).isEqualTo("SOME_OTHER_NAME\\"); } @Test public void testGetFileHeaderWithUnixFileSeparator() throws ZipException { ZipModel zipModel = new ZipModel(); CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(Arrays.asList( generateFileHeader(FILE_NAME), generateFileHeader("SOME_OTHER_NAME/") )); zipModel.setCentralDirectory(centralDirectory); FileHeader fileHeader = HeaderUtil.getFileHeader(zipModel, "SOME_OTHER_NAME/"); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getFileName()).isEqualTo("SOME_OTHER_NAME/"); } @Test public void testGetFileHeaderWithoutAMatch() throws ZipException { ZipModel zipModel = new ZipModel(); CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(Arrays.asList( generateFileHeader(FILE_NAME), generateFileHeader("SOME_OTHER_NAME") )); zipModel.setCentralDirectory(centralDirectory); assertThat(HeaderUtil.getFileHeader(zipModel, "SHOULD_NOT_EXIST")).isNull(); } @Test public void testDecodeStringWithCharsetForUtf8() { String utf8StringToEncode = "asdäüöö"; byte[] utf8EncodedBytes = utf8StringToEncode.getBytes(InternalZipConstants.CHARSET_UTF_8); assertThat(HeaderUtil.decodeStringWithCharset(utf8EncodedBytes, true, null)).isEqualTo(utf8StringToEncode); } @Test public void testDecodeStringWithCharsetWithCharsetGBKForChineseString() { String chineseStringToEncode = "写記立要"; byte[] gbkEncodedBytes = chineseStringToEncode.getBytes(Charset.forName("GBK")); String decodedString = HeaderUtil.decodeStringWithCharset(gbkEncodedBytes, false, Charset.forName("GBK")); assertThat(decodedString).isEqualTo(chineseStringToEncode); } @Test public void testDecodeStringWithCharsetWithoutUtf8AndWithEnglishChars() { String plainString = "asdasda234234"; byte[] plainEncodedBytes = plainString.getBytes(); assertThat(HeaderUtil.decodeStringWithCharset(plainEncodedBytes, false, null)).isEqualTo(plainString); } @Test public void testDecodeStringWithCharsetWithISO8859AndFinnishChars() { String finnishString = "asdäüöö"; byte[] plainEncodedBytes = finnishString.getBytes(StandardCharsets.ISO_8859_1); assertThat(HeaderUtil.decodeStringWithCharset(plainEncodedBytes, false, StandardCharsets.ISO_8859_1)).isEqualTo(finnishString); } @Test public void testDecodeStringWithCharsetWithUTF8CharsetAndKoreanChars() { String koreanString = "가나다"; byte[] plainEncodedBytes = koreanString.getBytes(InternalZipConstants.CHARSET_UTF_8); assertThat(HeaderUtil.decodeStringWithCharset(plainEncodedBytes, true, null)).isEqualTo(koreanString); } @Test public void testDecodeStringWithCharsetWithNullCharsetAndEnglishChars() { String englishString = "asdasda234234"; byte[] plainEncodedBytes = englishString.getBytes(); assertThat(HeaderUtil.decodeStringWithCharset(plainEncodedBytes, false, null)).isEqualTo(englishString); } @Test public void testGetFileHeadersUnderDirectoryWhenNotDirectoryReturnsEmptyList() { List allFileHeaders = generateFileHeaderWithFileNames("header", 5); assertThat(HeaderUtil.getFileHeadersUnderDirectory(allFileHeaders, "some_name")).isEmpty(); } @Test public void testGetFileHeadersUnderDirectoryReturnsFileHeadersUnderDirectory() { List allFileHeaders = generateFileHeaderWithFileNames("some_name/header", 5); allFileHeaders.add(generateFileHeader("some_name/")); allFileHeaders.add(generateFileHeader("some_other_name.txt")); List filHeadersUnderDirectory = HeaderUtil.getFileHeadersUnderDirectory(allFileHeaders, "some_name/"); assertThat(filHeadersUnderDirectory).hasSize(6); for (FileHeader fileHeader : filHeadersUnderDirectory) { assertThat(fileHeader) .withFailMessage("file header with name some_other_name.txt should not exist") .isNotEqualTo("some_other_name.txt"); } } @Test public void testGetUncompressedSizeOfAllFileHeaders() { FileHeader fileHeader1 = generateFileHeader("1"); fileHeader1.setUncompressedSize(1000); FileHeader fileHeader2 = generateFileHeader("2"); fileHeader2.setUncompressedSize(2000); FileHeader fileHeader3 = generateFileHeader("3"); Zip64ExtendedInfo zip64ExtendedInfo = new Zip64ExtendedInfo(); zip64ExtendedInfo.setUncompressedSize(3000); fileHeader3.setZip64ExtendedInfo(zip64ExtendedInfo); fileHeader3.setUncompressedSize(0); List fileHeaders = Arrays.asList(fileHeader1, fileHeader2, fileHeader3); assertThat(HeaderUtil.getTotalUncompressedSizeOfAllFileHeaders(fileHeaders)).isEqualTo(6000); } @Test public void testGetOffsetStartOfCentralDirectoryForZip64Format() { long offsetCentralDirectory = InternalZipConstants.ZIP_64_SIZE_LIMIT + 100; ZipModel zipModel = new ZipModel(); zipModel.setZip64Format(true); Zip64EndOfCentralDirectoryRecord zip64EndOfCentralDirectoryRecord = new Zip64EndOfCentralDirectoryRecord(); zip64EndOfCentralDirectoryRecord.setOffsetStartCentralDirectoryWRTStartDiskNumber(offsetCentralDirectory); zipModel.setZip64EndOfCentralDirectoryRecord(zip64EndOfCentralDirectoryRecord); assertThat(HeaderUtil.getOffsetStartOfCentralDirectory(zipModel)).isEqualTo(offsetCentralDirectory); } @Test public void testGetOffsetStartOfCentralDirectoryForNonZip64Format() { long offsetStartOfCentralDirectory = InternalZipConstants.ZIP_64_SIZE_LIMIT - 100; ZipModel zipModel = new ZipModel(); zipModel.setZip64Format(false); EndOfCentralDirectoryRecord endOfCentralDirectoryRecord = new EndOfCentralDirectoryRecord(); endOfCentralDirectoryRecord.setOffsetOfStartOfCentralDirectory(offsetStartOfCentralDirectory); zipModel.setEndOfCentralDirectoryRecord(endOfCentralDirectoryRecord); assertThat(HeaderUtil.getOffsetStartOfCentralDirectory(zipModel)).isEqualTo(offsetStartOfCentralDirectory); } private List generateFileHeaderWithFileNamesWithEmptyAndNullFileNames(String fileNamePrefix, int numberOfEntriesToAdd) { List fileHeaders = generateFileHeaderWithFileNames(fileNamePrefix, numberOfEntriesToAdd); fileHeaders.add(generateFileHeader("")); fileHeaders.add(generateFileHeader(null)); return fileHeaders; } private List generateFileHeaderWithFileNames(String fileNamePrefix, int numberOfEntriesToAdd) { List fileHeaders = new ArrayList<>(); for (int i = 0; i < numberOfEntriesToAdd; i++) { fileHeaders.add(generateFileHeader(fileNamePrefix + i)); } return fileHeaders; } private FileHeader generateFileHeader(String fileName) { FileHeader fileHeader = new FileHeader(); fileHeader.setFileName(fileName); return fileHeader; } private void expectZipException(String message) { expectedException.expectMessage(message); expectedException.expect(ZipException.class); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/headers/HeaderWriterIT.java000066400000000000000000001032621414265447200256240ustar00rootroot00000000000000package net.lingala.zip4j.headers; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.outputstream.CountingOutputStream; import net.lingala.zip4j.io.outputstream.SplitOutputStream; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.CentralDirectory; import net.lingala.zip4j.model.DataDescriptor; import net.lingala.zip4j.model.ExtraDataRecord; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.Zip64ExtendedInfo; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.util.BitUtils; import net.lingala.zip4j.util.InternalZipConstants; import net.lingala.zip4j.util.RawIO; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import static net.lingala.zip4j.util.Zip4jUtil.epochToExtendedDosTime; import static org.assertj.core.api.Assertions.assertThat; public class HeaderWriterIT extends AbstractIT { private static final String FILE_NAME_PREFIX = "FILE_NAME_"; private static final long COMPRESSED_SIZE = 4234L; private static final long UNCOMPRESSED_SIZE = 23423L; private static final long COMPRESSED_SIZE_ZIP64 = InternalZipConstants.ZIP_64_SIZE_LIMIT + 1; private static final long UNCOMPRESSED_SIZE_ZIP64 = InternalZipConstants.ZIP_64_SIZE_LIMIT + 1; private static final int VERSION_MADE_BY = 20; private static final int VERSION_NEEDED_TO_EXTRACT = 20; private static final byte[] EXTERNAL_FILE_ATTRIBUTES = new byte[] {23, 43, 0, 0}; private static final String FILE_COMMENT_PREFIX = "FILE_COMMENT_PREFIX_"; private static final long LAST_MODIFIED_FILE_TIME = epochToExtendedDosTime(System.currentTimeMillis() / 1000); @Rule public ExpectedException expectedException = ExpectedException.none(); private RawIO rawIO = new RawIO(); private HeaderWriter headerWriter = new HeaderWriter(); private HeaderReader headerReader = new HeaderReader(); @Test public void testWriteLocalFileHeaderSimpleLocalFileHeaderSuccessScenario() throws IOException { ZipModel zipModel = createZipModel(10); LocalFileHeader localFileHeaderToWrite = createLocalFileHeader("LFH", COMPRESSED_SIZE, UNCOMPRESSED_SIZE, true); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.writeLocalFileHeader(zipModel, localFileHeaderToWrite, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(InputStream inputStream = new FileInputStream(headersFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); verifyLocalFileHeader(readLocalFileHeader, FILE_NAME_PREFIX + "LFH", COMPRESSED_SIZE, UNCOMPRESSED_SIZE); } } @Test public void testWriteLocalFileHeaderForZip64Format() throws IOException { ZipModel zipModel = createZipModel(10); LocalFileHeader localFileHeaderToWrite = createLocalFileHeader("LFH", COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, true); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.writeLocalFileHeader(zipModel, localFileHeaderToWrite, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(InputStream inputStream = new FileInputStream(headersFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); verifyLocalFileHeader(readLocalFileHeader, FILE_NAME_PREFIX + "LFH", COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64); verifyZip64ExtendedInfo(readLocalFileHeader.getZip64ExtendedInfo(), COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, -1, -1); } verifyEntrySizesIsMaxValueInLFHWhenZip64Format(headersFile); } @Test public void testWriteLocalFileHeaderJapaneseCharactersInFileNameAndWithUtf8FlagShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileName("公ゃ的年社", true, true); } @Test public void testWriteLocalFileHeaderEnglishCharactersInFileNameWithoutUtf8ShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileName("SOME_TEXT", false, true); } @Test public void testWriteLocalFileHeaderJapaneseCharactersInFileNameWithoutUtf8ShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileName("公ゃ的年社", false, true); } @Test public void testWriteLocalFileHeaderJapaneseCharactersInFileNameWithUtf8ShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileName("公ゃ的年社", true, true); } @Test public void testWriteLocalFileHeaderJapaneseCharactersInFileNameWithCharsetMs932ShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileNameAndCharset("公ゃ的年社", false, true, CHARSET_MS_932); } @Test public void testWriteLocalFileHeaderJapaneseCharactersInFileNameWithUTF8CharsetWithUtf8ShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileNameAndCharset("公ゃ的年社", true, true, InternalZipConstants.CHARSET_UTF_8); } @Test public void testWriteLocalFileHeaderJapaneseCharactersInFileNameWithUTF8CharsetWithoutUtf8ShouldMatch() throws IOException { testWriteLocalFileHeaderWithFileNameAndCharset("公ゃ的年社", true, true, InternalZipConstants.CHARSET_UTF_8); } @Test public void testWriteLocalFileHeaderWithAes256v1() throws IOException { testWriteLocalFileHeaderWithAes(AesKeyStrength.KEY_STRENGTH_256, AesVersion.ONE); } @Test public void testWriteLocalFileHeaderWithAes192v1() throws IOException { testWriteLocalFileHeaderWithAes(AesKeyStrength.KEY_STRENGTH_192, AesVersion.ONE); } @Test public void testWriteLocalFileHeaderWithAes128v1() throws IOException { testWriteLocalFileHeaderWithAes(AesKeyStrength.KEY_STRENGTH_128, AesVersion.ONE); } @Test public void testWriteLocalFileHeaderWithAes256v2() throws IOException { testWriteLocalFileHeaderWithAes(AesKeyStrength.KEY_STRENGTH_256, AesVersion.TWO); } @Test public void testWriteLocalFileHeaderWithAes192v2() throws IOException { testWriteLocalFileHeaderWithAes(AesKeyStrength.KEY_STRENGTH_192, AesVersion.TWO); } @Test public void testWriteLocalFileHeaderWithAes128v2() throws IOException { testWriteLocalFileHeaderWithAes(AesKeyStrength.KEY_STRENGTH_128, AesVersion.TWO); } @Test public void testWriteExtendedLocalFileHeaderWhenLocalFileHeaderIsNullThrowsException() throws IOException { expectedException.expectMessage("input parameters is null, cannot write extended local header"); expectedException.expect(ZipException.class); headerWriter.writeExtendedLocalHeader(null, new FileOutputStream(temporaryFolder.newFile())); } @Test public void testWriteExtendedLocalFileHeaderWhenOutputStreamIsNullThrowsException() throws IOException { expectedException.expectMessage("input parameters is null, cannot write extended local header"); expectedException.expect(ZipException.class); headerWriter.writeExtendedLocalHeader(new LocalFileHeader(), null); } @Test public void testWriteExtendedLocalFileHeaderNonZip64FormatWritesSuccessfully() throws IOException { testWriteExtendedLocalFileHeader(COMPRESSED_SIZE + 99, UNCOMPRESSED_SIZE + 423, 2342342L, false); } @Test public void testWriteExtendedLocalFileHeaderZip64FormatWritesSuccessfully() throws IOException { testWriteExtendedLocalFileHeader(COMPRESSED_SIZE_ZIP64 + 99, UNCOMPRESSED_SIZE_ZIP64 + 423, 32452342L, true); } @Test public void testFinalizeZipFileWhenZipModelNullThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters is null, cannot finalize zip file"); headerWriter.finalizeZipFile(null, new FileOutputStream(temporaryFolder.newFile()), InternalZipConstants.CHARSET_UTF_8); } @Test public void testFinalizeZipFileWhenOutputStreamIsNullThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters is null, cannot finalize zip file"); headerWriter.finalizeZipFile(new ZipModel(), null, InternalZipConstants.CHARSET_UTF_8); } @Test public void testFinalizeZipFileForNonZip64Format() throws IOException { ZipModel zipModel = createZipModel(10); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.finalizeZipFile(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10); for (FileHeader fileHeader : readZipModel.getCentralDirectory().getFileHeaders()) { assertThat(fileHeader.getZip64ExtendedInfo()).isNull(); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); assertThat(fileHeader.getExtraFieldLength()).isZero(); } } } @Test public void testFinalizeZipFileWithNullExtraDataWritesSuccessfully() throws IOException { testFinalizeZipFileWhenExtraDataRecordIsNullOrEmpty(null); } @Test public void testFinalizeZipFileWithEmptyExtraDataWritesSuccessfully() throws IOException { testFinalizeZipFileWhenExtraDataRecordIsNullOrEmpty(new byte[0]); } @Test public void testFinalizeZipFileForZip64Format() throws IOException { ZipModel zipModel = createZipModel(10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.finalizeZipFile(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, true); List fileHeaders = readZipModel.getCentralDirectory().getFileHeaders(); for (FileHeader fileHeader : fileHeaders) { verifyZip64ExtendedInfo(fileHeader.getZip64ExtendedInfo(), COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, 0, 0); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } @Test public void testFinalizeZipFileForAes() throws IOException { ZipModel zipModel = createZipModel(10); setFileHeadersAsAesEncrypted(zipModel.getCentralDirectory().getFileHeaders(), AesKeyStrength.KEY_STRENGTH_192); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.finalizeZipFile(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10); for (FileHeader fileHeader : readZipModel.getCentralDirectory().getFileHeaders()) { verifyAesExtraDataRecord(fileHeader.getAesExtraDataRecord(), AesKeyStrength.KEY_STRENGTH_192, AesVersion.TWO); assertThat(fileHeader.getZip64ExtendedInfo()).isNull(); } } } @Test public void testFinalizeZipFileForZip64FormatForSplitFileWithSplitOutputStream() throws IOException { ZipModel zipModel = createZipModel(10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64); zipModel.setZip64EndOfCentralDirectoryRecord(null); zipModel.setZip64EndOfCentralDirectoryLocator(null); File headersFile = temporaryFolder.newFile(); try(SplitOutputStream outputStream = new SplitOutputStream(headersFile, 65536)) { headerWriter.finalizeZipFile(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, true); List fileHeaders = readZipModel.getCentralDirectory().getFileHeaders(); for (FileHeader fileHeader : fileHeaders) { verifyZip64ExtendedInfo(fileHeader.getZip64ExtendedInfo(), COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, 0, 0); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } @Test public void testFinalizeZipFileForZip64FormatForSplitFileWithCountingOutputStream() throws IOException { ZipModel zipModel = createZipModel(10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64); File headersFile = temporaryFolder.newFile(); try(CountingOutputStream outputStream = new CountingOutputStream(new SplitOutputStream(headersFile, 65536))) { headerWriter.finalizeZipFile(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, true); List fileHeaders = readZipModel.getCentralDirectory().getFileHeaders(); for (FileHeader fileHeader : fileHeaders) { verifyZip64ExtendedInfo(fileHeader.getZip64ExtendedInfo(), COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, 0, 0); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } @Test public void testFinalizeZipFileWithoutValidationsWhenZipModelNullThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters is null, cannot finalize zip file"); headerWriter.finalizeZipFileWithoutValidations(null, new FileOutputStream(temporaryFolder.newFile()), null); } @Test public void testFinalizeZipFileWithoutValidationsWhenOutputStreamIsNullThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("input parameters is null, cannot finalize zip file"); headerWriter.finalizeZipFileWithoutValidations(new ZipModel(), null, null); } @Test public void testFinalizeZipFileWithoutValidationsForNonZip64Format() throws IOException { ZipModel zipModel = createZipModel(10); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.finalizeZipFileWithoutValidations(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10); for (FileHeader fileHeader : readZipModel.getCentralDirectory().getFileHeaders()) { assertThat(fileHeader.getZip64ExtendedInfo()).isNull(); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); assertThat(fileHeader.getExtraFieldLength()).isZero(); } } } @Test public void testFinalizeZipFileWithoutValidationsForZip64Format() throws IOException { ZipModel zipModel = createZipModel(10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.finalizeZipFileWithoutValidations(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, true); List fileHeaders = readZipModel.getCentralDirectory().getFileHeaders(); for (FileHeader fileHeader : fileHeaders) { verifyZip64ExtendedInfo(fileHeader.getZip64ExtendedInfo(), COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, 0, 0); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); } } } @Test public void testUpdateLocalFileHeaderWhenFileHeaderIsNullThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("invalid input parameters, cannot update local file header"); headerWriter.updateLocalFileHeader(null, new ZipModel(), new SplitOutputStream(temporaryFolder.newFile())); } @Test public void testUpdateLocalFileHeaderWhenZipModelIsNullThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("invalid input parameters, cannot update local file header"); headerWriter.updateLocalFileHeader(new FileHeader(), null, new SplitOutputStream(temporaryFolder.newFile())); } @Test public void testUpdateLocalFileHeaderForNonZip64() throws IOException { File headersFile = temporaryFolder.newFile(); createAndUpdateLocalFileHeader(headersFile, COMPRESSED_SIZE, UNCOMPRESSED_SIZE, 23423); try (InputStream inputStream = new FileInputStream(headersFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); assertThat(readLocalFileHeader.getCompressedSize()).isEqualTo(COMPRESSED_SIZE + 100); assertThat(readLocalFileHeader.getUncompressedSize()).isEqualTo(UNCOMPRESSED_SIZE + 100); assertThat(readLocalFileHeader.getCrc()).isEqualTo(23423); assertThat(readLocalFileHeader.getZip64ExtendedInfo()).isNull(); } } @Test public void testUpdateLocalFileHeaderForZip64() throws IOException { File headersFile = temporaryFolder.newFile(); createAndUpdateLocalFileHeader(headersFile, COMPRESSED_SIZE_ZIP64, UNCOMPRESSED_SIZE_ZIP64, 546423); try (InputStream inputStream = new FileInputStream(headersFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); assertThat(readLocalFileHeader.getCompressedSize()).isEqualTo(COMPRESSED_SIZE_ZIP64 + 100); assertThat(readLocalFileHeader.getUncompressedSize()).isEqualTo(UNCOMPRESSED_SIZE_ZIP64 + 100); assertThat(readLocalFileHeader.getCrc()).isEqualTo(546423); verifyZip64ExtendedInfo(readLocalFileHeader.getZip64ExtendedInfo(), COMPRESSED_SIZE_ZIP64 + 100, UNCOMPRESSED_SIZE_ZIP64 + 100, -1, -1); } verifyEntrySizesIsMaxValueInLFHWhenZip64Format(headersFile); } private void testFinalizeZipFileWhenExtraDataRecordIsNullOrEmpty(byte[] extraDataRecord) throws IOException { ZipModel zipModel = createZipModel(10); File headersFile = temporaryFolder.newFile(); addExtraDataRecordToFirstFileHeader(zipModel, extraDataRecord); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.finalizeZipFile(zipModel, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { ZipModel readZipModel = headerReader.readAllHeaders(randomAccessFile, buildDefaultConfig()); verifyZipModel(readZipModel, 10); for (int i = 0; i < zipModel.getCentralDirectory().getFileHeaders().size(); i++) { FileHeader fileHeader = readZipModel.getCentralDirectory().getFileHeaders().get(i); assertThat(fileHeader.getZip64ExtendedInfo()).isNull(); assertThat(fileHeader.getAesExtraDataRecord()).isNull(); assertThat(fileHeader.getExtraFieldLength()).isEqualTo(i == 0 ? 4 : 0); } } } private void createAndUpdateLocalFileHeader(File headersFile, long compressedSize, long uncompressedSize, long crc) throws IOException { ZipModel zipModel = createZipModel(3); LocalFileHeader localFileHeaderToWrite = createLocalFileHeader("LFH", compressedSize, uncompressedSize, false); localFileHeaderToWrite.setCompressedSize(compressedSize); localFileHeaderToWrite.setUncompressedSize(uncompressedSize); localFileHeaderToWrite.setCrc(10); try (OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.writeLocalFileHeader(zipModel, localFileHeaderToWrite, outputStream, InternalZipConstants.CHARSET_UTF_8); } try (SplitOutputStream splitOutputStream = new SplitOutputStream(headersFile)) { FileHeader fileHeader = createFileHeaders(1, compressedSize + 100, uncompressedSize + 100).get(0); fileHeader.setFileName(localFileHeaderToWrite.getFileName()); fileHeader.setFileNameLength(fileHeader.getFileName().getBytes(InternalZipConstants.CHARSET_UTF_8).length); fileHeader.setCrc(crc); headerWriter.updateLocalFileHeader(fileHeader, zipModel, splitOutputStream); } } private void setFileHeadersAsAesEncrypted(List fileHeaders, AesKeyStrength aesKeyStrength) { for (FileHeader fileHeader : fileHeaders) { fileHeader.setEncrypted(true); fileHeader.setEncryptionMethod(EncryptionMethod.AES); fileHeader.setAesExtraDataRecord(createAesExtraDataRecord(aesKeyStrength, AesVersion.TWO)); } } private void verifyZipModel(ZipModel zipModel, int numberOFEntriesInCentralDirectory) { verifyZipModel(zipModel, numberOFEntriesInCentralDirectory, COMPRESSED_SIZE, UNCOMPRESSED_SIZE, false); } private void verifyZipModel(ZipModel zipModel, int numberOFEntriesInCentralDirectory, long compressedSize, long uncompressedSize, boolean isZip64) { assertThat(zipModel).isNotNull(); assertThat(zipModel.getCentralDirectory()).isNotNull(); assertThat(zipModel.isZip64Format()).isEqualTo(isZip64); assertThat(zipModel.getCentralDirectory().getFileHeaders()).hasSize(numberOFEntriesInCentralDirectory); verifyFileHeaders(zipModel.getCentralDirectory().getFileHeaders(), compressedSize, uncompressedSize); } private void verifyFileHeaders(List fileHeaders, long compressedSize, long uncompressedSize) { for (int i = 0; i < fileHeaders.size(); i++) { FileHeader fileHeader = fileHeaders.get(i); assertThat(fileHeader).isNotNull(); assertThat(fileHeader.getVersionMadeBy()).isEqualTo(VERSION_MADE_BY); assertThat(fileHeader.getVersionNeededToExtract()).isEqualTo(VERSION_NEEDED_TO_EXTRACT); assertThat(fileHeader.getFileName()).isEqualTo(FILE_NAME_PREFIX + i); assertThat(fileHeader.getCompressedSize()).isEqualTo(compressedSize); assertThat(fileHeader.getUncompressedSize()).isEqualTo(uncompressedSize); assertThat(fileHeader.getFileComment()).isEqualTo(FILE_COMMENT_PREFIX + i); } } private void testWriteExtendedLocalFileHeader(long compressedSize, long uncompressedSize, long crc, boolean isZip64Format) throws IOException { LocalFileHeader localFileHeader = createLocalFileHeader("SOME_NAME", compressedSize, uncompressedSize, true); localFileHeader.setCrc(crc); localFileHeader.setWriteCompressedSizeInZip64ExtraRecord(isZip64Format); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.writeExtendedLocalHeader(localFileHeader, outputStream); } try(InputStream inputStream = new FileInputStream(headersFile)) { DataDescriptor dataDescriptor = headerReader.readDataDescriptor(inputStream, isZip64Format); verifyDataDescriptor(dataDescriptor, compressedSize, uncompressedSize, crc); } } private void verifyDataDescriptor(DataDescriptor dataDescriptor, long compressedSize, long uncompressedSize, long crc) { assertThat(dataDescriptor).isNotNull(); assertThat(dataDescriptor.getSignature()).isEqualTo(HeaderSignature.EXTRA_DATA_RECORD); assertThat(dataDescriptor.getCompressedSize()).isEqualTo(compressedSize); assertThat(dataDescriptor.getUncompressedSize()).isEqualTo(uncompressedSize); assertThat(dataDescriptor.getCrc()).isEqualTo(crc); } private void testWriteLocalFileHeaderWithAes(AesKeyStrength aesKeyStrength, AesVersion aesVersion) throws IOException { ZipModel zipModel = createZipModel(10); LocalFileHeader localFileHeaderToWrite = createLocalFileHeader("TEXT", COMPRESSED_SIZE, UNCOMPRESSED_SIZE, true); localFileHeaderToWrite.setEncryptionMethod(EncryptionMethod.AES); localFileHeaderToWrite.setAesExtraDataRecord(createAesExtraDataRecord(aesKeyStrength, aesVersion)); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.writeLocalFileHeader(zipModel, localFileHeaderToWrite, outputStream, InternalZipConstants.CHARSET_UTF_8); } try(InputStream inputStream = new FileInputStream(headersFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); assertThat(readLocalFileHeader.getEncryptionMethod()).isEqualTo(EncryptionMethod.AES); verifyAesExtraDataRecord(readLocalFileHeader.getAesExtraDataRecord(), aesKeyStrength, aesVersion); } } private AESExtraDataRecord createAesExtraDataRecord(AesKeyStrength aesKeyStrength, AesVersion aesVersion) { AESExtraDataRecord aesDataRecord = new AESExtraDataRecord(); aesDataRecord.setSignature(HeaderSignature.AES_EXTRA_DATA_RECORD); aesDataRecord.setDataSize(7); aesDataRecord.setAesVersion(aesVersion); aesDataRecord.setVendorID("AE"); aesDataRecord.setAesKeyStrength(aesKeyStrength); aesDataRecord.setCompressionMethod(CompressionMethod.DEFLATE); return aesDataRecord; } private void verifyAesExtraDataRecord(AESExtraDataRecord aesExtraDataRecord, AesKeyStrength aesKeyStrength, AesVersion aesVersion) { assertThat(aesExtraDataRecord).isNotNull(); assertThat(aesExtraDataRecord.getAesKeyStrength()).isEqualTo(aesKeyStrength); assertThat(aesExtraDataRecord.getAesVersion()).isEqualTo(aesVersion); assertThat(aesExtraDataRecord.getCompressionMethod()).isEqualTo(CompressionMethod.DEFLATE); assertThat(aesExtraDataRecord.getVendorID()).isEqualTo("AE"); } private void testWriteLocalFileHeaderWithFileName(String fileNameSuffix, boolean useUtf8, boolean expectFileNamesToMatch) throws IOException { testWriteLocalFileHeaderWithFileNameAndCharset(fileNameSuffix, useUtf8, expectFileNamesToMatch, InternalZipConstants.CHARSET_UTF_8); } private void testWriteLocalFileHeaderWithFileNameAndCharset(String fileNameSuffix, boolean useUtf8, boolean expectFileNamesToMatch, Charset charset) throws IOException { ZipModel zipModel = createZipModel(10); LocalFileHeader localFileHeaderToWrite = createLocalFileHeader(fileNameSuffix, COMPRESSED_SIZE, UNCOMPRESSED_SIZE, useUtf8); File headersFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(headersFile)) { headerWriter.writeLocalFileHeader(zipModel, localFileHeaderToWrite, outputStream, charset); } try(InputStream inputStream = new FileInputStream(headersFile)) { LocalFileHeader readLocalFileHeader = headerReader.readLocalFileHeader(inputStream, charset); if (expectFileNamesToMatch) { assertThat(readLocalFileHeader.getFileName()).isEqualTo(FILE_NAME_PREFIX + fileNameSuffix); } else { assertThat(readLocalFileHeader.getFileName()).isNotEqualTo(FILE_NAME_PREFIX + fileNameSuffix); } } } private void verifyEntrySizesIsMaxValueInLFHWhenZip64Format(File headersFile) throws IOException { try(RandomAccessFile randomAccessFile = new RandomAccessFile(headersFile, RandomAccessFileMode.READ.getValue())) { randomAccessFile.seek(18); long compressedSize = rawIO.readLongLittleEndian(randomAccessFile, 4); assertThat(compressedSize).isEqualTo(InternalZipConstants.ZIP_64_SIZE_LIMIT); long uncompressedSize = rawIO.readLongLittleEndian(randomAccessFile, 4); assertThat(uncompressedSize).isEqualTo(InternalZipConstants.ZIP_64_SIZE_LIMIT); } } private void verifyLocalFileHeader(LocalFileHeader localFileHeader, String expectedFileName, long compressedSize, long uncompressedSize) { assertThat(localFileHeader).isNotNull(); assertThat(localFileHeader.getVersionNeededToExtract()).isEqualTo(VERSION_NEEDED_TO_EXTRACT); assertThat(localFileHeader.getFileName()).isEqualTo(expectedFileName); assertThat(localFileHeader.getCompressedSize()).isEqualTo(compressedSize); assertThat(localFileHeader.getUncompressedSize()).isEqualTo(uncompressedSize); assertThat(localFileHeader.getCompressionMethod()).isEqualTo(CompressionMethod.DEFLATE); assertThat(localFileHeader.getLastModifiedTime()).isEqualTo(LAST_MODIFIED_FILE_TIME); } private void verifyZip64ExtendedInfo(Zip64ExtendedInfo zip64ExtendedInfo, long compressedSize, long uncompressedSize, int offsetStartOfLocalFileHeader, int diskNumberStart) { assertThat(zip64ExtendedInfo).isNotNull(); assertThat(zip64ExtendedInfo.getCompressedSize()).isEqualTo(compressedSize); assertThat(zip64ExtendedInfo.getUncompressedSize()).isEqualTo(uncompressedSize); assertThat(zip64ExtendedInfo.getOffsetLocalHeader()).isEqualTo(offsetStartOfLocalFileHeader); assertThat(zip64ExtendedInfo.getDiskNumberStart()).isEqualTo(diskNumberStart); } private LocalFileHeader createLocalFileHeader(String fileNameSuffix, long compressedSize, long uncompressedSize, boolean useUtf8) { LocalFileHeader localFileHeader = new LocalFileHeader(); localFileHeader.setVersionNeededToExtract(VERSION_NEEDED_TO_EXTRACT); localFileHeader.setFileName(FILE_NAME_PREFIX + fileNameSuffix); localFileHeader.setCompressedSize(compressedSize); localFileHeader.setUncompressedSize(uncompressedSize); localFileHeader.setGeneralPurposeFlag(generateGeneralPurposeBytes(useUtf8)); localFileHeader.setCompressionMethod(CompressionMethod.DEFLATE); localFileHeader.setLastModifiedTime(LAST_MODIFIED_FILE_TIME); return localFileHeader; } private ZipModel createZipModel(int numberOfEntriesInCentralDirectory) { return createZipModel(numberOfEntriesInCentralDirectory, COMPRESSED_SIZE, UNCOMPRESSED_SIZE); } private ZipModel createZipModel(int numberOfEntriesInCentralDirectory, long compressedSize, long uncompressedSize) { ZipModel zipModel = new ZipModel(); zipModel.setCentralDirectory(createCentralDirectory(numberOfEntriesInCentralDirectory, compressedSize, uncompressedSize)); return zipModel; } private CentralDirectory createCentralDirectory(int numberOfEntriesInCentralDirectory, long compressedSize, long uncompressedSize) { CentralDirectory centralDirectory = new CentralDirectory(); centralDirectory.setFileHeaders(createFileHeaders(numberOfEntriesInCentralDirectory, compressedSize, uncompressedSize)); return centralDirectory; } private byte[] generateGeneralPurposeBytes(boolean useUtf8) { byte[] generalPurposeBytes = new byte[2]; if (useUtf8) { generalPurposeBytes[1] = BitUtils.setBit(generalPurposeBytes[1], 3); } return generalPurposeBytes; } private List createFileHeaders(int numberOfEntriesInCentralDirectory, long compressedSize, long uncompressedSize) { List fileHeaders = new ArrayList<>(); for (int i = 0; i < numberOfEntriesInCentralDirectory; i++) { FileHeader fileHeader = new FileHeader(); fileHeader.setVersionMadeBy(VERSION_MADE_BY); fileHeader.setVersionNeededToExtract(VERSION_NEEDED_TO_EXTRACT); fileHeader.setFileName(FILE_NAME_PREFIX + i); fileHeader.setGeneralPurposeFlag(generateGeneralPurposeBytes(true)); fileHeader.setCompressedSize(compressedSize); fileHeader.setUncompressedSize(uncompressedSize); fileHeader.setCompressionMethod(CompressionMethod.DEFLATE); fileHeader.setExternalFileAttributes(EXTERNAL_FILE_ATTRIBUTES); fileHeader.setFileComment(FILE_COMMENT_PREFIX + i); fileHeaders.add(fileHeader); } return fileHeaders; } private void addExtraDataRecordToFirstFileHeader(ZipModel zipModel, byte[] data) { ExtraDataRecord extraDataRecord = new ExtraDataRecord(); extraDataRecord.setHeader(12345); extraDataRecord.setSizeOfData(data == null ? 0 : data.length); extraDataRecord.setData(data); FileHeader firstFileHeader = zipModel.getCentralDirectory().getFileHeaders().get(0); if (firstFileHeader.getExtraDataRecords() == null) { firstFileHeader.setExtraDataRecords(new ArrayList()); } firstFileHeader.getExtraDataRecords().add(extraDataRecord); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/io/000077500000000000000000000000001414265447200211275ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/io/inputstream/000077500000000000000000000000001414265447200235025ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/io/inputstream/NumberedSplitRandomAccessFileIT.java000066400000000000000000000132661414265447200324520ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.util.CrcUtil; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.zip.CRC32; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static org.assertj.core.api.Assertions.assertThat; public class NumberedSplitRandomAccessFileIT extends AbstractIT { private static final int ONE_HUNDRED_KB = 102400; @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testOpenInWriteModeThrowsException() throws IOException { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("write mode is not allowed for NumberedSplitRandomAccessFile"); new NumberedSplitRandomAccessFile(getTestFileFromResources("sample.pdf"), RandomAccessFileMode.WRITE.getValue()); } @Test public void testWriteIntThrowsUnsupportedOperationException() throws IOException { expectedException.expect(UnsupportedOperationException.class); String fileName = "somefile.001"; File splitFile = temporaryFolder.newFile(fileName); NumberedSplitRandomAccessFile numberedSplitRandomAccessFile = new NumberedSplitRandomAccessFile( splitFile, RandomAccessFileMode.READ.getValue()); numberedSplitRandomAccessFile.write(1); } @Test public void testWriteByteArrayThrowsUnsupportedOperationException() throws IOException { expectedException.expect(UnsupportedOperationException.class); String fileName = "somefile.001"; File splitFile = temporaryFolder.newFile(fileName); NumberedSplitRandomAccessFile numberedSplitRandomAccessFile = new NumberedSplitRandomAccessFile( splitFile, RandomAccessFileMode.READ.getValue()); numberedSplitRandomAccessFile.write(new byte[100]); } @Test public void testWriteByteArrayWithLengthThrowsUnsupportedOperationException() throws IOException { expectedException.expect(UnsupportedOperationException.class); String fileName = "somefile.001"; File splitFile = temporaryFolder.newFile(fileName); NumberedSplitRandomAccessFile numberedSplitRandomAccessFile = new NumberedSplitRandomAccessFile( splitFile, RandomAccessFileMode.READ.getValue()); numberedSplitRandomAccessFile.write(new byte[100], 0, 10); } @Test public void testReadIntReadsCompleteFileSuccessfully() throws IOException { File fileToSplit = getTestFileFromResources("file_PDF_1MB.pdf"); long sourceFileCrc = CrcUtil.computeFileCrc(fileToSplit, null); File firstSplitFile = TestUtils.splitFileWith7ZipFormat(fileToSplit, temporaryFolder.getRoot(), InternalZipConstants.MIN_SPLIT_LENGTH); CRC32 crc32 = new CRC32(); int readVal; try(NumberedSplitRandomAccessFile randomAccessFile = openSplitFile(firstSplitFile)) { while ((readVal = randomAccessFile.read()) != -1) { crc32.update(readVal); } } assertThat(crc32.getValue()).isEqualTo(sourceFileCrc); } @Test public void testReadByteArrayReadsCompleteFileSuccessfully() throws IOException { File fileToSplit = getTestFileFromResources("file_PDF_1MB.pdf"); long sourceFileCrc = CrcUtil.computeFileCrc(fileToSplit, null); File firstSplitFile = TestUtils.splitFileWith7ZipFormat(fileToSplit, temporaryFolder.getRoot(), ONE_HUNDRED_KB); CRC32 crc32 = new CRC32(); byte[] buff = new byte[InternalZipConstants.BUFF_SIZE]; int readLen; try(NumberedSplitRandomAccessFile randomAccessFile = openSplitFile(firstSplitFile)) { while ((readLen = randomAccessFile.read(buff)) != -1) { crc32.update(buff, 0, readLen); } } assertThat(crc32.getValue()).isEqualTo(sourceFileCrc); } @Test public void testReadByteArrayWithLengthReadsCompleteFileSuccessfully() throws IOException { File fileToSplit = getTestFileFromResources("file_PDF_1MB.pdf"); long sourceFileCrc = CrcUtil.computeFileCrc(fileToSplit, null); File firstSplitFile = TestUtils.splitFileWith7ZipFormat(fileToSplit, temporaryFolder.getRoot(), ONE_HUNDRED_KB - 100); CRC32 crc32 = new CRC32(); byte[] buff = new byte[InternalZipConstants.BUFF_SIZE]; int readLen; try(NumberedSplitRandomAccessFile randomAccessFile = openSplitFile(firstSplitFile)) { while ((readLen = randomAccessFile.read(buff, 0, 100)) != -1) { crc32.update(buff, 0, readLen); } } assertThat(crc32.getValue()).isEqualTo(sourceFileCrc); } @Test public void testSeek() throws IOException { File fileToSplit = getTestFileFromResources("file_PDF_1MB.pdf"); File firstSplitFile = TestUtils.splitFileWith7ZipFormat(fileToSplit, temporaryFolder.getRoot(), ONE_HUNDRED_KB); try(NumberedSplitRandomAccessFile splitRandomAccessFile = openSplitFile(firstSplitFile); RandomAccessFile sourceRandomAccessFile = new RandomAccessFile(fileToSplit, RandomAccessFileMode.READ.getValue())) { splitRandomAccessFile.seek(fileToSplit.length() - 200); sourceRandomAccessFile.seek(fileToSplit.length() - 200); byte[] sourceBytes = new byte[200]; byte[] splitFileBytes = new byte[200]; sourceRandomAccessFile.read(sourceBytes); splitRandomAccessFile.read(splitFileBytes); assertThat(splitFileBytes).isEqualTo(sourceBytes); } } private NumberedSplitRandomAccessFile openSplitFile(File firstSplitFile) throws IOException { return new NumberedSplitRandomAccessFile(firstSplitFile, RandomAccessFileMode.READ.getValue()); } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/io/inputstream/ZipInputStreamIT.java000066400000000000000000000437571414265447200275600ustar00rootroot00000000000000package net.lingala.zip4j.io.inputstream; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static net.lingala.zip4j.testutils.ZipFileVerifier.verifyFileContent; import static net.lingala.zip4j.util.InternalZipConstants.MIN_BUFF_SIZE; import static org.assertj.core.api.Assertions.assertThat; public class ZipInputStreamIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testZipInputStreamConstructorThrowsExceptionWhenBufferSizeIsLessThanExpected() { InputStream inputStream = new ByteArrayInputStream(new byte[1]); Zip4jConfig zip4jConfig = new Zip4jConfig(null, InternalZipConstants.MIN_BUFF_SIZE - 1); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Buffer size cannot be less than " + MIN_BUFF_SIZE + " bytes"); new ZipInputStream(inputStream, (char[]) null, zip4jConfig); } @Test public void testExtractStoreWithoutEncryption() throws IOException { File createdZipFile = createZipFile(CompressionMethod.STORE); extractZipFileWithInputStreams(createdZipFile, null); } @Test public void testExtractStoreWithZipStandardEncryption() throws IOException { File createdZipFile = createZipFile(CompressionMethod.STORE, true, EncryptionMethod.ZIP_STANDARD, null, PASSWORD); extractZipFileWithInputStreams(createdZipFile, PASSWORD); } @Test public void testExtractStoreWithAesEncryption128() throws IOException { File createdZipFile = createZipFile(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, PASSWORD); extractZipFileWithInputStreams(createdZipFile, PASSWORD); } @Test public void testExtractStoreWithAesEncryption256() throws IOException { File createdZipFile = createZipFile(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); extractZipFileWithInputStreams(createdZipFile, PASSWORD); } @Test public void testExtractDeflateWithoutEncryption() throws IOException { File createdZipFile = createZipFile(CompressionMethod.DEFLATE); extractZipFileWithInputStreams(createdZipFile, null); } @Test public void testExtractDeflateWithAesEncryption128() throws IOException { File createdZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, PASSWORD); extractZipFileWithInputStreams(createdZipFile, PASSWORD); } @Test public void testExtractDeflateWithAesEncryption256() throws IOException { File createdZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); extractZipFileWithInputStreams(createdZipFile, PASSWORD); } @Test public void testExtractDeflateWithAesEncryption256AndV1() throws IOException { File createdZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD, AesVersion.ONE); extractZipFileWithInputStreams(createdZipFile, PASSWORD); } @Test public void testExtractWithReadLengthLessThan16WithAesAndStoreCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, 15); } @Test public void testExtractWithReadLengthLessThan16WithAesAndDeflateCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, 15); } @Test public void testExtractWithReadLengthLessThan16WithZipCryptoAndStoreCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD, null, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, 12); } @Test public void testExtractWithReadLengthLessThan16WithZipCryptoAndDeflateCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD, null, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, 5); } @Test public void testExtractWithReadLengthGreaterThanButNotMultipleOf16WithAesAndStoreCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, (16 * 4) + 1); } @Test public void testExtractWithReadLengthGreaterThanButNotMultipleOf16WithAesAndDeflateCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, (16 * 8) - 10); } @Test public void testExtractWithReadLengthGreaterThanButNotMultipleOf16WithZipCryptoAndStoreCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD, null, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, (16 * 2) - 6); } @Test public void testExtractWithReadLengthGreaterThanButNotMultipleOf16WithZipCryptoAndDeflateCompression() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD, null, PASSWORD); extractZipFileWithInputStreams(createZipFile, PASSWORD, (16 * 10) - 11); } @Test public void testExtractWithRandomLengthWithAesAndDeflateCompression() throws IOException { Random random = new Random(); File createZipFile = createZipFile(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, PASSWORD); LocalFileHeader localFileHeader; int readLen; byte[] readBuffer = new byte[4096]; int numberOfEntriesExtracted = 0; try (FileInputStream fileInputStream = new FileInputStream(createZipFile)) { try (ZipInputStream zipInputStream = new ZipInputStream(fileInputStream, PASSWORD)) { while ((localFileHeader = zipInputStream.getNextEntry()) != null) { File extractedFile = temporaryFolder.newFile(localFileHeader.getFileName()); try (OutputStream outputStream = new FileOutputStream(extractedFile)) { while ((readLen = zipInputStream.read(readBuffer, 0, random.nextInt((25 - 1) + 1) + 1)) != -1) { outputStream.write(readBuffer, 0, readLen); } } verifyFileContent(getTestFileFromResources(localFileHeader.getFileName()), extractedFile); numberOfEntriesExtracted++; } } } assertThat(numberOfEntriesExtracted).isEqualTo(FILES_TO_ADD.size()); } @Test public void testExtractFilesForZipFileWithInvalidExtraDataRecordIgnoresIt() throws IOException { InputStream inputStream = new FileInputStream(getTestArchiveFromResources("invalid_extra_data_record.zip")); try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, "password".toCharArray())) { byte[] b = new byte[4096]; while (zipInputStream.getNextEntry() != null) { while (zipInputStream.read(b) != -1) { } } } } @Test public void testGetNextEntryReturnsNextEntryEvenIfEntryNotCompletelyRead() throws IOException { File createZipFile = createZipFile(CompressionMethod.DEFLATE); try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(createZipFile))) { int numberOfEntries = 0; while (zipInputStream.getNextEntry() != null) { numberOfEntries++; } assertThat(numberOfEntries).isEqualTo(FILES_TO_ADD.size()); } } @Test public void testGetFileNamesWithChineseCharset() throws IOException { InputStream inputStream = new FileInputStream(getTestArchiveFromResources("testfile_with_chinese_filename_by_7zip.zip")); try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, CHARSET_GBK)) { LocalFileHeader localFileHeader; String expactedFileName = "fff - 副本.txt"; Set filenameSet = new HashSet<>(); while ((localFileHeader = zipInputStream.getNextEntry()) != null) { filenameSet.add(localFileHeader.getFileName()); } assertThat(filenameSet.contains(expactedFileName)).isTrue(); } } @Test public void testExtractJarFile() throws IOException { byte[] b = new byte[4096]; File jarFile = getTestArchiveFromResources("jar-dir-fh-entry-size-2.jar"); try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(jarFile))) { while (zipInputStream.getNextEntry() != null) { zipInputStream.read(b); } } } @Test public void testExtractZipStrongEncryptionThrowsException() throws IOException { expectedException.expect(ZipException.class); expectedException.expectMessage("Entry [test.txt] Strong Encryption not supported"); File strongEncryptionFile = getTestArchiveFromResources("strong_encrypted.zip"); try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(strongEncryptionFile))) { zipInputStream.getNextEntry(); } } @Test public void testReadingZipBySkippingDataCreatedWithJDKZipReadsAllEntries() throws IOException { List filesToAdd = new ArrayList<>(); // Add a directory first, then a few files, then a directory, and then a file to test all possibilities filesToAdd.add(getTestFileFromResources("sample_directory")); filesToAdd.addAll(FILES_TO_ADD); filesToAdd.add(getTestFileFromResources("öüäöäö")); filesToAdd.add(getTestFileFromResources("file_PDF_1MB.pdf")); File generatedZipFile = createZipFileWithJdkZip(filesToAdd, getTestFileFromResources("")); int totalNumberOfEntriesRead = 0; try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(generatedZipFile))) { while (zipInputStream.getNextEntry() != null) { totalNumberOfEntriesRead++; } } assertThat(totalNumberOfEntriesRead).isEqualTo(6); } @Test public void testAvailableThrowsExceptionWhenStreamClosed() throws IOException { expectedException.expect(IOException.class); expectedException.expectMessage("Stream closed"); File createZipFile = createZipFile(CompressionMethod.DEFLATE); ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(createZipFile)); zipInputStream.close(); zipInputStream.available(); } @Test public void testAvailableReturns1WhenEntryEOFNotReachedAnd0AfterEOFReached() throws IOException { byte[] b = new byte[InternalZipConstants.BUFF_SIZE]; File createZipFile = createZipFile(CompressionMethod.DEFLATE); try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(createZipFile))) { while (zipInputStream.getNextEntry() != null) { while (zipInputStream.read(b) != -1) { assertThat(zipInputStream.available()).isEqualTo(1); } assertThat(zipInputStream.available()).isEqualTo(0); } } } @Test public void testExtractZipWithDifferentPasswords() throws IOException { byte[] buffer = new byte[InternalZipConstants.BUFF_SIZE]; File zipFileUnderTest = TestUtils.getTestArchiveFromResources("zip_with_different_passwords.zip"); try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFileUnderTest))) { readAndAssertNextEntry(zipInputStream, "after_deflate_remaining_bytes.bin", "password_1"); readAndAssertNextEntry(zipInputStream, "file_PDF_1MB.pdf", "password_2"); // 3rd entry is not encrypted, but it should not be impacted if a password is set readAndAssertNextEntry(zipInputStream, "sample.pdf", null); } } @Test public void testExtractZipFileWithDirectoriesContainingExtendedLocalFileHeader() throws IOException { extractZipFileWithInputStreams(TestUtils.getTestArchiveFromResources("dirs_with_extended_local_file_headers.zip"), null, InternalZipConstants.BUFF_SIZE, false, 2); } private void extractZipFileWithInputStreams(File zipFile, char[] password) throws IOException { extractZipFileWithInputStreams(zipFile, password, InternalZipConstants.BUFF_SIZE); } private void extractZipFileWithInputStreams(File zipFile, char[] password, int bufferLength) throws IOException { extractZipFileWithInputStreams(zipFile, password, bufferLength, true, FILES_TO_ADD.size()); } private void extractZipFileWithInputStreams(File zipFile, char[] password, int bufferLength, boolean verifyFileContents, int numberOfEntriesExpected) throws IOException { LocalFileHeader localFileHeader; int readLen; byte[] readBuffer = new byte[bufferLength]; int numberOfEntriesExtracted = 0; try (FileInputStream fileInputStream = new FileInputStream(zipFile)) { try (ZipInputStream zipInputStream = new ZipInputStream(fileInputStream, password)) { while ((localFileHeader = zipInputStream.getNextEntry()) != null) { File extractedFile = temporaryFolder.newFile(localFileHeader.getFileName()); try (OutputStream outputStream = new FileOutputStream(extractedFile)) { while ((readLen = zipInputStream.read(readBuffer)) != -1) { outputStream.write(readBuffer, 0, readLen); } } verifyLocalFileHeader(localFileHeader); if (verifyFileContents) { verifyFileContent(getTestFileFromResources(localFileHeader.getFileName()), extractedFile); } numberOfEntriesExtracted++; } } } assertThat(numberOfEntriesExtracted).isEqualTo(numberOfEntriesExpected); } private void verifyLocalFileHeader(LocalFileHeader localFileHeader) { assertThat(localFileHeader).isNotNull(); if (localFileHeader.isEncrypted() && localFileHeader.getEncryptionMethod().equals(EncryptionMethod.AES) && localFileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.TWO)) { assertThat(localFileHeader.getCrc()).isZero(); } } private File createZipFile(CompressionMethod compressionMethod) throws IOException { return createZipFile(compressionMethod, false, null, null, null); } private File createZipFile(CompressionMethod compressionMethod, boolean encryptFiles, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, char[] password) throws IOException { return createZipFile(compressionMethod, encryptFiles, encryptionMethod, aesKeyStrength, password, AesVersion.TWO); } private File createZipFile(CompressionMethod compressionMethod, boolean encryptFiles, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, char[] password, AesVersion aesVersion) throws IOException { File outputFile = temporaryFolder.newFile("output.zip"); deleteFileIfExists(outputFile); ZipFile zipFile = new ZipFile(outputFile, password); ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(compressionMethod); zipParameters.setEncryptFiles(encryptFiles); zipParameters.setEncryptionMethod(encryptionMethod); zipParameters.setAesKeyStrength(aesKeyStrength); zipParameters.setAesVersion(aesVersion); zipFile.addFiles(AbstractIT.FILES_TO_ADD, zipParameters); return outputFile; } private void deleteFileIfExists(File file) { if (file.exists()) { if (!file.delete()) { throw new RuntimeException("Could not delete an existing zip file"); } } } private File createZipFileWithJdkZip(List filesToAdd, File rootFolder) throws IOException { int readLen; byte[] readBuffer = new byte[InternalZipConstants.BUFF_SIZE]; try(ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(generatedZipFile))) { for (File fileToAdd : filesToAdd) { String path = rootFolder.toPath().relativize(fileToAdd.toPath()).toString().replaceAll("\\\\", "/"); ZipEntry entry = new ZipEntry(path); zipOutputStream.putNextEntry(entry); if (!fileToAdd.isDirectory()) { try (InputStream fis = new FileInputStream(fileToAdd)) { while ((readLen = fis.read(readBuffer)) != -1) { zipOutputStream.write(readBuffer, 0, readLen); } } } zipOutputStream.closeEntry(); } } return generatedZipFile; } private void readAndAssertNextEntry(ZipInputStream zipInputStream, String fileNameToExpect, String passwordToUse) throws IOException { byte[] buffer = new byte[InternalZipConstants.BUFF_SIZE]; if (passwordToUse != null) { zipInputStream.setPassword(passwordToUse.toCharArray()); } LocalFileHeader localFileHeader = zipInputStream.getNextEntry(); assertThat(localFileHeader.getFileName()).isEqualTo(fileNameToExpect); //noinspection StatementWithEmptyBody while (zipInputStream.read(buffer) != -1); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/io/outputstream/000077500000000000000000000000001414265447200237035ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/io/outputstream/ZipOutputStreamIT.java000066400000000000000000000433161414265447200301510ustar00rootroot00000000000000package net.lingala.zip4j.io.outputstream; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.Zip4jConfig; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.AesKeyStrength; import net.lingala.zip4j.model.enums.AesVersion; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import net.lingala.zip4j.testutils.TestUtils; import net.lingala.zip4j.util.BitUtils; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static net.lingala.zip4j.testutils.ZipFileVerifier.verifyZipFileByExtractingAllFiles; import static net.lingala.zip4j.util.FileUtils.isMac; import static net.lingala.zip4j.util.FileUtils.isUnix; import static net.lingala.zip4j.util.FileUtils.isWindows; import static net.lingala.zip4j.util.InternalZipConstants.MIN_BUFF_SIZE; import static org.assertj.core.api.Assertions.assertThat; public class ZipOutputStreamIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testConstructorThrowsExceptionWhenBufferSizeIsLessThanExpected() throws IOException { OutputStream outputStream = new ByteArrayOutputStream(); Zip4jConfig zip4jConfig = new Zip4jConfig(null, InternalZipConstants.MIN_BUFF_SIZE - 1); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Buffer size cannot be less than " + MIN_BUFF_SIZE + " bytes"); new ZipOutputStream(outputStream, null, zip4jConfig, null); } @Test public void testZipOutputStreamStoreWithoutEncryption() throws IOException { testZipOutputStream(CompressionMethod.STORE, false, null, null, null); } @Test public void testZipOutputStreamStoreWithStandardEncryption() throws IOException { testZipOutputStream(CompressionMethod.STORE, true, EncryptionMethod.ZIP_STANDARD, null, null); } @Test public void testZipOutputStreamStoreWithAES256V1() throws IOException { testZipOutputStream(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, AesVersion.ONE); } @Test public void testZipOutputStreamStoreWithAES128V2() throws IOException { testZipOutputStream(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, AesVersion.TWO); } @Test public void testZipOutputStreamStoreWithAES256V2() throws IOException { testZipOutputStream(CompressionMethod.STORE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, AesVersion.TWO); } @Test public void testZipOutputStreamDeflateWithoutEncryption() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, false, null, null, null); } @Test public void testZipOutputStreamDeflateWithoutEncryptionAndKoreanFilename() throws IOException { List filesToAdd = new ArrayList<>(); filesToAdd.add(getTestFileFromResources("가나다.abc")); testZipOutputStream(CompressionMethod.DEFLATE, false, null, null, null, true, filesToAdd, CHARSET_CP_949); } @Test public void testZipOutputStreamDeflateWithStandardEncryption() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD, null, null); } @Test public void testZipOutputStreamDeflateWithStandardEncryptionWhenModifiedFileTimeNotSet() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, true, EncryptionMethod.ZIP_STANDARD, null, null, false); } @Test public void testZipOutputStreamDeflateWithAES128V1() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, AesVersion.ONE); } @Test public void testZipOutputStreamDeflateWithAES128() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_128, AesVersion.TWO); } @Test public void testZipOutputStreamDeflateWithAES256() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, AesVersion.TWO); } @Test public void testZipOutputStreamDeflateWithNullVersionUsesV2() throws IOException { testZipOutputStream(CompressionMethod.DEFLATE, true, EncryptionMethod.AES, AesKeyStrength.KEY_STRENGTH_256, null); } @Test public void testZipOutputStreamThrowsExceptionWhenEntrySizeNotSetForStoreCompression() throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("uncompressed size should be set for zip entries of compression type store"); try(ZipOutputStream zos = initializeZipOutputStream(false, InternalZipConstants.CHARSET_UTF_8)) { for (File fileToAdd : FILES_TO_ADD) { zipParameters.setLastModifiedFileTime(fileToAdd.lastModified()); zipParameters.setFileNameInZip(fileToAdd.getName()); zos.putNextEntry(zipParameters); } } } @Test public void testAddCommentToEntryWithUtf8Charset() throws IOException { testAddCommentToEntryWithCharset(StandardCharsets.UTF_8, "COMMENT_"); } @Test public void testAddCommentToEntryWithNullCharset() throws IOException { testAddCommentToEntryWithCharset(null, "COMMENT_ÜÖ_"); } @Test public void testAddCommentToEntryWithGBKCharset() throws IOException { testAddCommentToEntryWithCharset(Charset.forName("GBK"), "fff - 副本"); } @Test public void testAddCommentToZipOutputStreamWithUtf8Charset() throws IOException { testAddCommentToZipOutputStreamWithCharset(StandardCharsets.UTF_8, "SOME_COMMENT"); } @Test public void testAddCommentToZipOutputStreamWithNullCharsetUsesUtf8() throws IOException { testAddCommentToZipOutputStreamWithCharset(null, "SOME_COMMENT_WITH_NO_CHARSET"); } @Test public void testAddCommentToZipOutputStreamWithGBKCharset() throws IOException { testAddCommentToZipOutputStreamWithCharset(Charset.forName("GBK"), "fff - 副本"); } @Test public void testAddCommentToZipOutputStreamAfterClosingThrowsException() throws IOException { expectedException.expect(IOException.class); expectedException.expectMessage("Stream is closed"); ZipParameters zipParameters = new ZipParameters(); ZipOutputStream zos = initializeZipOutputStream(false, InternalZipConstants.CHARSET_UTF_8); for (File fileToAdd : FILES_TO_ADD) { zipParameters.setLastModifiedFileTime(fileToAdd.lastModified()); zipParameters.setFileNameInZip(fileToAdd.getName()); zos.putNextEntry(zipParameters); } zos.close(); zos.setComment("SOME_COMMENT"); } @Test public void testDefaultFileAttributes() throws IOException { List filesToAdd = new ArrayList<>(FILES_TO_ADD); filesToAdd.add(TestUtils.getTestFileFromResources("/")); byte[] buff = new byte[4096]; int readLen; ZipParameters zipParameters = new ZipParameters(); try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(generatedZipFile))) { for (File fileToAdd : filesToAdd) { if (fileToAdd.isDirectory()) { zipParameters.setFileNameInZip(fileToAdd.getName() + "/"); zipOutputStream.putNextEntry(zipParameters); zipOutputStream.closeEntry(); continue; } zipParameters.setFileNameInZip(fileToAdd.getName()); zipOutputStream.putNextEntry(zipParameters); InputStream inputStream = new FileInputStream(fileToAdd); while ((readLen = inputStream.read(buff)) != -1) { zipOutputStream.write(buff, 0, readLen); } inputStream.close(); zipOutputStream.closeEntry(); } } verifyDefaultFileAttributes(); } @Test public void testCreatingZipWithoutClosingEntryManuallySuccessfullyClosesEntry() throws IOException { try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(generatedZipFile))) { File fileToAdd = getTestFileFromResources("file_PDF_1MB.pdf"); byte[] buffer = new byte[InternalZipConstants.BUFF_SIZE]; int readLen; ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(fileToAdd.getName()); zipOutputStream.putNextEntry(zipParameters); try (InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(buffer)) != -1) { zipOutputStream.write(buffer, 0, readLen); } } } verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 1); } @Test public void testCreateZipFileWithDirectoriesAndExtendedLocalFileHeaderIsSuccessful() throws IOException { try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(generatedZipFile))) { putNextEntryAndCloseEntry(zos, "dir1/"); putNextEntryAndCloseEntry(zos, "dir2/"); } ZipFile zipFile = new ZipFile(generatedZipFile); List fileHeaders = zipFile.getFileHeaders(); for (FileHeader fileHeader : fileHeaders) { assertThat(fileHeader.isDataDescriptorExists()).isFalse(); } verifyZipFileByExtractingAllFiles(generatedZipFile, outputFolder, 2); } private void testZipOutputStream(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, AesVersion aesVersion) throws IOException { testZipOutputStream(compressionMethod, encrypt, encryptionMethod, aesKeyStrength, aesVersion, true); } private void testZipOutputStream(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, AesVersion aesVersion, boolean setLastModifiedTime) throws IOException { testZipOutputStream(compressionMethod, encrypt, encryptionMethod, aesKeyStrength, aesVersion, setLastModifiedTime, FILES_TO_ADD, InternalZipConstants.CHARSET_UTF_8); } private void testZipOutputStream(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength, AesVersion aesVersion, boolean setLastModifiedTime, List filesToAdd, Charset charset) throws IOException { ZipParameters zipParameters = buildZipParameters(compressionMethod, encrypt, encryptionMethod, aesKeyStrength); zipParameters.setAesVersion(aesVersion); byte[] buff = new byte[4096]; int readLen; try(ZipOutputStream zos = initializeZipOutputStream(encrypt, charset)) { for (File fileToAdd : filesToAdd) { if (zipParameters.getCompressionMethod() == CompressionMethod.STORE) { zipParameters.setEntrySize(fileToAdd.length()); } if (setLastModifiedTime) { zipParameters.setLastModifiedFileTime(fileToAdd.lastModified()); } zipParameters.setFileNameInZip(fileToAdd.getName()); zos.putNextEntry(zipParameters); try(InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(buff)) != -1) { zos.write(buff, 0, readLen); } } zos.closeEntry(); } } verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, filesToAdd.size(), true, charset); verifyEntries(); } private void testAddCommentToEntryWithCharset(Charset charset, String fileCommentPrefix) throws IOException { ZipParameters zipParameters = new ZipParameters(); byte[] buff = new byte[4096]; int readLen; List filesToAdd = FILES_TO_ADD; try(ZipOutputStream zos = initializeZipOutputStream(false, charset)) { for (int i = 0; i < filesToAdd.size(); i++) { File fileToAdd = filesToAdd.get(i); zipParameters.setFileNameInZip(fileToAdd.getName()); if (i == 0) { zipParameters.setFileComment(fileCommentPrefix + i); } else { zipParameters.setFileComment(null); } zos.putNextEntry(zipParameters); try(InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(buff)) != -1) { zos.write(buff, 0, readLen); } } zos.closeEntry(); } } verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, filesToAdd.size(), true, charset); verifyEntries(); verifyFileEntryComment(fileCommentPrefix, charset); } private void testAddCommentToZipOutputStreamWithCharset(Charset charset, String comment) throws IOException { ZipParameters zipParameters = new ZipParameters(); byte[] buff = new byte[4096]; int readLen; List filesToAdd = FILES_TO_ADD; try(ZipOutputStream zos = initializeZipOutputStream(false, charset)) { for (int i = 0; i < filesToAdd.size(); i++) { File fileToAdd = filesToAdd.get(i); zipParameters.setFileNameInZip(fileToAdd.getName()); zos.putNextEntry(zipParameters); try(InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(buff)) != -1) { zos.write(buff, 0, readLen); } } zos.closeEntry(); } zos.setComment(comment); } verifyZipFileByExtractingAllFiles(generatedZipFile, PASSWORD, outputFolder, filesToAdd.size(), true, charset); verifyEntries(); verifyZipComment(comment, charset); } private void verifyEntries() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); for (FileHeader fileHeader : zipFile.getFileHeaders()) { byte[] generalPurposeBytes = fileHeader.getGeneralPurposeFlag(); assertThat(BitUtils.isBitSet(generalPurposeBytes[0], 3)).isTrue(); if (fileHeader.isEncrypted() && fileHeader.getEncryptionMethod().equals(EncryptionMethod.AES)) { if (fileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.TWO)) { assertThat(fileHeader.getCrc()).isZero(); } else if (fileHeader.getCompressedSize() > 0) { assertThat(fileHeader.getCrc()).isNotZero(); } } } } private ZipOutputStream initializeZipOutputStream(boolean encrypt, Charset charset) throws IOException { FileOutputStream fos = new FileOutputStream(generatedZipFile); if (encrypt) { return new ZipOutputStream(fos, PASSWORD, charset); } return new ZipOutputStream(fos, null, charset); } private ZipParameters buildZipParameters(CompressionMethod compressionMethod, boolean encrypt, EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength) { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(compressionMethod); zipParameters.setEncryptionMethod(encryptionMethod); zipParameters.setAesKeyStrength(aesKeyStrength); zipParameters.setEncryptFiles(encrypt); return zipParameters; } private void verifyFileEntryComment(String commentPrefix, Charset charset) throws IOException { ZipFile zipFile = initializeZipFileWithCharset(charset); List fileHeaders = zipFile.getFileHeaders(); for (int i = 0; i < fileHeaders.size(); i++) { FileHeader fileHeader = fileHeaders.get(i); if (i == 0) { assertThat(fileHeader.getFileComment()).isEqualTo(commentPrefix + i); } else { assertThat(fileHeader.getFileComment()).isNull(); } } } private void verifyZipComment(String expectedComment, Charset charset) throws IOException { ZipFile zipFile = initializeZipFileWithCharset(charset); assertThat(zipFile.getComment()).isEqualTo(expectedComment); } private void verifyDefaultFileAttributes() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile); List fileHeaders = zipFile.getFileHeaders(); byte[] emptyAttributes = new byte[4]; for (FileHeader fileHeader : fileHeaders) { if (isUnix() || isMac()) { if (fileHeader.isDirectory()) { assertThat(fileHeader.getExternalFileAttributes()).isEqualTo(FileUtils.DEFAULT_POSIX_FOLDER_ATTRIBUTES); } else { assertThat(fileHeader.getExternalFileAttributes()).isEqualTo(FileUtils.DEFAULT_POSIX_FILE_ATTRIBUTES); } } else if (isWindows() && fileHeader.isDirectory()) { assertThat(BitUtils.isBitSet(fileHeader.getExternalFileAttributes()[0], 4)).isTrue(); } else { assertThat(fileHeader.getExternalFileAttributes()).isEqualTo(emptyAttributes); } } } private ZipFile initializeZipFileWithCharset(Charset charset) { ZipFile zipFile = new ZipFile(generatedZipFile); if (charset != null) { zipFile.setCharset(charset); } return zipFile; } private void putNextEntryAndCloseEntry(ZipOutputStream zipOutputStream, String fileName) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip(fileName); zipOutputStream.putNextEntry(zipParameters); zipOutputStream.closeEntry(); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/model/000077500000000000000000000000001414265447200216205ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/model/enums/000077500000000000000000000000001414265447200227475ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/model/enums/CompressionMethodTest.java000066400000000000000000000014411414265447200301140ustar00rootroot00000000000000package net.lingala.zip4j.model.enums; import net.lingala.zip4j.exception.ZipException; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; public class CompressionMethodTest { @Test public void testGetCompressionMethodFromCodeForUnknownTypeThrowsException() { try { CompressionMethod.getCompressionMethodFromCode(34); fail("Should throw an exception"); } catch (ZipException e) { assertThat(e.getType()).isEqualTo(ZipException.Type.UNKNOWN_COMPRESSION_METHOD); } } @Test public void testGetCompressionMethodFromCodeForDeflateReturnsDeflate() throws ZipException { assertThat(CompressionMethod.getCompressionMethodFromCode(8)).isEqualTo(CompressionMethod.DEFLATE); } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/000077500000000000000000000000001414265447200225605ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/ControlledReadInputStream.java000066400000000000000000000016251414265447200305240ustar00rootroot00000000000000package net.lingala.zip4j.testutils; import java.io.IOException; import java.io.InputStream; public class ControlledReadInputStream extends InputStream { private InputStream inputStream; private int readLimit; private byte[] singleByteBuffer = new byte[1]; public ControlledReadInputStream(InputStream inputStream, int maximumNumberOfBytesToReadAtOnce) { this.inputStream = inputStream; this.readLimit = maximumNumberOfBytesToReadAtOnce; } @Override public int read() throws IOException { int readLen = read(singleByteBuffer); if (readLen == -1) { return -1; } return singleByteBuffer[0]; } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { int toRead = Math.min(len, readLimit); return inputStream.read(b, off, toRead); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/HeaderVerifier.java000066400000000000000000000056441414265447200263200ustar00rootroot00000000000000package net.lingala.zip4j.testutils; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.headers.HeaderReader; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.util.InternalZipConstants; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Collection; import static org.assertj.core.api.Assertions.assertThat; public class HeaderVerifier { private static HeaderReader headerReader = new HeaderReader(); public static void verifyLocalFileHeaderUncompressedSize(File generatedZipFile, String fileNameInZipToVerify, long expectedUncompressedSize) throws IOException { LocalFileHeader localFileHeader = getLocalFileHeaderForEntry(generatedZipFile, fileNameInZipToVerify); assertThat(localFileHeader.getUncompressedSize()).isEqualTo(expectedUncompressedSize); } public static void verifyFileHeadersExist(ZipFile zipFile, Collection fileNamesToVerify) throws IOException { for (String fileNameToVerify : fileNamesToVerify) { assertThat(zipFile.getFileHeader(fileNameToVerify)).isNotNull(); } } public static void verifyFileHeadersDoesNotExist(ZipFile zipFile, Collection fileNamesToVerify) throws IOException { for (String fileNameToVerify : fileNamesToVerify) { assertThat(zipFile.getFileHeader(fileNameToVerify)).isNull(); } } public static void verifyZipFileDoesNotContainFolders(ZipFile zipFile, Collection folderNames) throws IOException { for (FileHeader fileHeader : zipFile.getFileHeaders()) { for (String folderName : folderNames) { assertThat(fileHeader.getFileName().startsWith(folderName)).isFalse(); } } } private static LocalFileHeader getLocalFileHeaderForEntry(File generatedZipFile, String fileNameInZipToVerify) throws IOException { InputStream inputStream = positionRandomAccessFileToLocalFileHeaderStart(generatedZipFile, fileNameInZipToVerify); return headerReader.readLocalFileHeader(inputStream, InternalZipConstants.CHARSET_UTF_8); } private static InputStream positionRandomAccessFileToLocalFileHeaderStart(File generatedZipFile, String fileNameInZip) throws IOException{ ZipFile zipFile = new ZipFile(generatedZipFile); FileHeader fileHeader = zipFile.getFileHeader(fileNameInZip); if (fileHeader == null) { throw new RuntimeException("Cannot find an entry with name: " + fileNameInZip + " in zip file: " + generatedZipFile); } InputStream inputStream = new FileInputStream(generatedZipFile); if (inputStream.skip(fileHeader.getOffsetLocalHeader()) != fileHeader.getOffsetLocalHeader()) { throw new IOException("Cannot skip " + fileHeader.getOffsetLocalHeader() + " bytes for entry " + fileHeader.getFileName()); } return inputStream; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/RandomInputStream.java000066400000000000000000000022511414265447200270370ustar00rootroot00000000000000package net.lingala.zip4j.testutils; import java.io.IOException; import java.io.InputStream; import java.util.Random; public class RandomInputStream extends InputStream { private static final Random RANDOM = new Random(); private long remaining; private boolean streamClosed; public RandomInputStream(long length) { this.remaining = length; this.streamClosed = false; } @Override public int read() throws IOException { if (remaining <= 0) { return -1; } assertStreamNotClosed(); return RANDOM.nextInt(127); } @Override public int read(byte[] b) throws IOException { return read(b, 0, b.length); } @Override public int read(byte[] b, int off, int len) throws IOException { if (remaining <= 0) { return -1; } assertStreamNotClosed(); int toRead = len; if (remaining <= len) { toRead = (int) remaining; } RANDOM.nextBytes(b); remaining -= toRead; return toRead; } private void assertStreamNotClosed() throws IOException { if (streamClosed) { throw new IOException("Stream closed"); } } @Override public void close() { streamClosed = true; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/SlowTests.java000066400000000000000000000001051414265447200253660ustar00rootroot00000000000000package net.lingala.zip4j.testutils; public interface SlowTests { } zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/TestUtils.java000066400000000000000000000151041414265447200253640ustar00rootroot00000000000000package net.lingala.zip4j.testutils; import net.lingala.zip4j.io.outputstream.ZipOutputStream; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Random; public class TestUtils { private static final String TEST_FILES_FOLDER_NAME = "test-files"; private static final String TEST_ARCHIVES_FOLDER_NAME = "test-archives"; public static File getTestFileFromResources(String fileName) { return getFileFromResources(TEST_FILES_FOLDER_NAME, fileName); } public static File getTestArchiveFromResources(String fileName) { return getFileFromResources(TEST_ARCHIVES_FOLDER_NAME, fileName); } public static Boolean isWindows() { String os = System.getProperty("os.name").toLowerCase(); return (os.contains("win")); } /** * Splits files with extension .001, .002, etc * @param fileToSplit file to be split * @param splitLength the length of each split file * @return File - first split file * @throws IOException if any exception occurs dealing with streams */ public static File splitFileWith7ZipFormat(File fileToSplit, File outputFolder, long splitLength) throws IOException { if (splitLength < InternalZipConstants.MIN_SPLIT_LENGTH) { throw new IllegalArgumentException("split length less than minimum allowed split length of " + InternalZipConstants.MIN_SPLIT_LENGTH); } int splitCounter = 0; byte[] buff = new byte[InternalZipConstants.BUFF_SIZE]; int readLen = 0; long numberOfBytesWrittenInThisPart = 0; try (InputStream inputStream = new FileInputStream(fileToSplit)) { OutputStream outputStream = startNext7ZipSplitStream(fileToSplit, outputFolder, splitCounter); splitCounter++; while ((readLen = inputStream.read(buff)) != -1) { if (numberOfBytesWrittenInThisPart + readLen > splitLength) { int numberOfBytesToWriteInThisCounter = (int) (splitLength - numberOfBytesWrittenInThisPart); outputStream.write(buff, 0, numberOfBytesToWriteInThisCounter); outputStream.close(); outputStream = startNext7ZipSplitStream(fileToSplit, outputFolder, splitCounter); splitCounter++; outputStream.write(buff, numberOfBytesToWriteInThisCounter, readLen - numberOfBytesToWriteInThisCounter); numberOfBytesWrittenInThisPart = readLen - numberOfBytesToWriteInThisCounter; } else { outputStream.write(buff, 0, readLen); numberOfBytesWrittenInThisPart += readLen; } } outputStream.close(); } return getFileNameFor7ZipSplitIndex(fileToSplit, outputFolder, 0); } public static void copyFile(File sourceFile, File destinationFile) throws IOException { Files.copy(sourceFile.toPath(), destinationFile.toPath()); } public static void copyFileToFolder(File sourceFile, File outputFolder, int numberOfCopiesToMake) throws IOException { for (int i = 0; i < numberOfCopiesToMake; i++) { File destinationFile = Paths.get(outputFolder.getAbsolutePath(), i + ".pdf").toFile(); copyFile(sourceFile, destinationFile); } } public static void createZipFileWithZipOutputStream(File zipFile, List filesToAdd) throws IOException { byte[] buff = new byte[InternalZipConstants.BUFF_SIZE]; int readLen = -1; ZipParameters zipParameters = new ZipParameters(); try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile))) { for (File fileToAdd : filesToAdd) { zipParameters.setFileNameInZip(fileToAdd.getName()); zipOutputStream.putNextEntry(zipParameters); try(InputStream inputStream = new FileInputStream(fileToAdd)) { while ((readLen = inputStream.read(buff)) != -1) { zipOutputStream.write(buff, 0, readLen); } } zipOutputStream.closeEntry(); } } } public static File generateFileOfSize(TemporaryFolder temporaryFolder, long fileSize) throws IOException { File outputFile = temporaryFolder.newFile(); byte[] b = new byte[8 * InternalZipConstants.BUFF_SIZE]; Random random = new Random(); long bytesWritten = 0; int bufferWriteLength; try (OutputStream outputStream = new FileOutputStream(outputFile)) { while (bytesWritten < fileSize) { random.nextBytes(b); bufferWriteLength = bytesWritten + b.length > fileSize ? ((int) (fileSize - bytesWritten)) : b.length; outputStream.write(b, 0, bufferWriteLength); bytesWritten += bufferWriteLength; } } return outputFile; } public static File createSymlink(File targetFile, File rootFolder) throws IOException { Path link = Paths.get(rootFolder.getAbsolutePath(), "symlink.link"); Files.createSymbolicLink(link, targetFile.toPath()); return link.toFile(); } public static List getFileNamesOfFiles(List files) { List fileNames = new ArrayList<>(); if (files.isEmpty()) { return fileNames; } for (File file : files) { fileNames.add(file.getName()); } return fileNames; } private static OutputStream startNext7ZipSplitStream(File sourceFile, File outputFolder, int index) throws IOException { File outputFile = getFileNameFor7ZipSplitIndex(sourceFile, outputFolder, index); return new FileOutputStream(outputFile); } private static File getFileNameFor7ZipSplitIndex(File sourceFile, File outputFolder, int index) throws IOException { return new File(outputFolder.getCanonicalPath() + File.separator + sourceFile.getName() + FileUtils.getNextNumberedSplitFileCounterAsExtension(index)); } private static File getFileFromResources(String parentFolder, String fileName) { try { String path = "/" + parentFolder + "/" + fileName; URL fileUrl = TestUtils.class.getResource(path); if (fileUrl == null) { throw new RuntimeException("File not found " + path); } String utfDecodedFilePath = URLDecoder.decode(fileUrl.getFile(), InternalZipConstants.CHARSET_UTF_8.toString()); return new File(utfDecodedFilePath); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/testutils/ZipFileVerifier.java000066400000000000000000000065531414265447200264720ustar00rootroot00000000000000package net.lingala.zip4j.testutils; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.util.CrcUtil; import net.lingala.zip4j.util.FileUtils; import net.lingala.zip4j.util.InternalZipConstants; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class ZipFileVerifier { public static void verifyZipFileByExtractingAllFiles(File zipFileToExtract, File outputFolder, int expectedNumberOfEntries) throws IOException { verifyZipFileByExtractingAllFiles(zipFileToExtract, null, outputFolder, expectedNumberOfEntries); } public static void verifyZipFileByExtractingAllFiles(File zipFileToExtract, char[] password, File outputFolder, int expectedNumberOfEntries) throws IOException { verifyZipFileByExtractingAllFiles(zipFileToExtract, password, outputFolder, expectedNumberOfEntries, true); } public static void verifyZipFileByExtractingAllFiles(File zipFileToExtract, char[] password, File outputFolder, int expectedNumberOfEntries, boolean verifyFileContents) throws IOException { verifyZipFileByExtractingAllFiles(zipFileToExtract, password, outputFolder, expectedNumberOfEntries, verifyFileContents, InternalZipConstants.CHARSET_UTF_8); } public static void verifyZipFileByExtractingAllFiles(File zipFileToExtract, char[] password, File outputFolder, int expectedNumberOfEntries, boolean verifyFileContents, Charset charset) throws IOException { assertThat(zipFileToExtract).isNotNull(); assertThat(zipFileToExtract).exists(); ZipFile zipFile = new ZipFile(zipFileToExtract, password); if (charset != null) { zipFile.setCharset(charset); } zipFile.extractAll(outputFolder.getPath()); assertThat(zipFile.getFileHeaders().size()).as("Number of file headers").isEqualTo(expectedNumberOfEntries); List extractedFiles = FileUtils.getFilesInDirectoryRecursive(outputFolder, true, true); assertThat(extractedFiles).hasSize(expectedNumberOfEntries); if (verifyFileContents) { verifyFolderContentsSameAsSourceFiles(outputFolder); } } public static void verifyFileContent(File sourceFile, File extractedFile) throws IOException { assertThat(extractedFile.length()).isEqualTo(sourceFile.length()); verifyFileCrc(sourceFile, extractedFile); } public static void verifyFolderContentsSameAsSourceFiles(File outputFolder) throws IOException { File[] filesInOutputFolder = outputFolder.listFiles(); for (File file : filesInOutputFolder) { if (file.isDirectory()) { continue; } File sourceFile = TestUtils.getTestFileFromResources(file.getName()); verifyFileContent(sourceFile, file); } } public static void verifyFileCrc(File sourceFile, File extractedFile) throws IOException { ProgressMonitor progressMonitor = new ProgressMonitor(); long sourceFileCrc = CrcUtil.computeFileCrc(sourceFile, progressMonitor); long extractedFileCrc = CrcUtil.computeFileCrc(extractedFile, progressMonitor); assertThat(sourceFileCrc).isEqualTo(extractedFileCrc); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/000077500000000000000000000000001414265447200214755ustar00rootroot00000000000000zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/BitUtilsTest.java000066400000000000000000000026631414265447200247460ustar00rootroot00000000000000package net.lingala.zip4j.util; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class BitUtilsTest { @Test public void testIsBitSet() { byte b = 0; b = (byte) (b | 1); b = (byte) (b | 1 << 3); b = (byte) (b | 1 << 7); assertThat(BitUtils.isBitSet(b, 0)).isTrue(); assertThat(BitUtils.isBitSet(b, 3)).isTrue(); assertThat(BitUtils.isBitSet(b, 7)).isTrue(); assertThat(BitUtils.isBitSet(b, 1)).isFalse(); assertThat(BitUtils.isBitSet(b, 2)).isFalse(); assertThat(BitUtils.isBitSet(b, 4)).isFalse(); assertThat(BitUtils.isBitSet(b, 5)).isFalse(); assertThat(BitUtils.isBitSet(b, 6)).isFalse(); } @Test public void testSetBit() { byte b = 0; b = BitUtils.setBit(b, 2); b = BitUtils.setBit(b, 5); b = BitUtils.setBit(b, 6); assertThat((b & (1L << 2))).isNotZero(); assertThat((b & (1L << 5))).isNotZero(); assertThat((b & (1L << 6))).isNotZero(); assertThat((b & (1L))).isEqualTo(0); assertThat((b & (1L << 1))).isEqualTo(0); assertThat((b & (1L << 3))).isEqualTo(0); assertThat((b & (1L << 4))).isEqualTo(0); assertThat((b & (1L << 7))).isEqualTo(0); } @Test public void unsetBit() { byte b = 0; b = (byte) (b | 1 << 3); b = (byte) (b | 1 << 7); b = BitUtils.unsetBit(b, 3); assertThat(BitUtils.isBitSet(b, 3)).isFalse(); assertThat(BitUtils.isBitSet(b, 7)).isTrue(); } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/CrcUtilIT.java000066400000000000000000000056101414265447200241440ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.progress.ProgressMonitor; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.CRC32; import static net.lingala.zip4j.testutils.TestUtils.getTestFileFromResources; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class CrcUtilIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); private ProgressMonitor progressMonitor = new ProgressMonitor(); @Test public void testComputeFileCrcThrowsExceptionWhenFileIsNull() throws IOException { expectedException.expectMessage("input file is null or does not exist or cannot read. " + "Cannot calculate CRC for the file"); expectedException.expect(ZipException.class); CrcUtil.computeFileCrc(null, progressMonitor); } @Test public void testComputeFileCrcThrowsExceptionWhenCannotReadFile() throws IOException { expectedException.expectMessage("input file is null or does not exist or cannot read. " + "Cannot calculate CRC for the file"); expectedException.expect(ZipException.class); File unreadableFile = mock(File.class); when(unreadableFile.exists()).thenReturn(true); when(unreadableFile.canRead()).thenReturn(false); CrcUtil.computeFileCrc(unreadableFile, progressMonitor); } @Test public void testComputeFileCrcThrowsExceptionWhenFileDoesNotExist() throws IOException { expectedException.expectMessage("input file is null or does not exist or cannot read. " + "Cannot calculate CRC for the file"); expectedException.expect(ZipException.class); CrcUtil.computeFileCrc(new File("DoesNotExist"), progressMonitor); } @Test public void testComputeFileCrcGetsValueSuccessfully() throws IOException { testComputeFileCrcForFile(getTestFileFromResources("sample.pdf")); testComputeFileCrcForFile(getTestFileFromResources("sample_text1.txt")); testComputeFileCrcForFile(getTestFileFromResources("sample_text_large.txt")); } private void testComputeFileCrcForFile(File file) throws IOException { long actualFileCrc = calculateFileCrc(file); assertThat(CrcUtil.computeFileCrc(file, progressMonitor)).isEqualTo(actualFileCrc); } private long calculateFileCrc(File file) throws IOException { try(InputStream inputStream = new FileInputStream(file)) { byte[] buffer = new byte[InternalZipConstants.BUFF_SIZE]; int readLen = -1; CRC32 crc32 = new CRC32(); while((readLen = inputStream.read(buffer)) != -1) { crc32.update(buffer, 0, readLen); } return crc32.getValue(); } } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/FileUtilsIT.java000066400000000000000000000212271414265447200245010ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ExcludeFileFilter; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import net.lingala.zip4j.progress.ProgressMonitor; import net.lingala.zip4j.testutils.TestUtils; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.List; import static net.lingala.zip4j.util.InternalZipConstants.BUFF_SIZE; import static org.assertj.core.api.Assertions.assertThat; public class FileUtilsIT extends AbstractIT { @Rule public ExpectedException expectedException = ExpectedException.none(); private ProgressMonitor progressMonitor = new ProgressMonitor(); @Test public void testCopyFileThrowsExceptionWhenStartsIsLessThanZero() throws IOException { testInvalidOffsetsScenario(-1, 100); } @Test public void testCopyFileThrowsExceptionWhenEndIsLessThanZero() throws IOException { testInvalidOffsetsScenario(0, -1); } @Test public void testCopyFileThrowsExceptionWhenStartIsGreaterThanEnd() throws IOException { testInvalidOffsetsScenario(300, 100); } @Test public void testCopyFilesWhenStartIsSameAsEndDoesNothing() throws IOException { File sourceFile = TestUtils.getTestFileFromResources("sample.pdf"); File outputFile = temporaryFolder.newFile(); try(RandomAccessFile randomAccessFile = new RandomAccessFile(sourceFile, RandomAccessFileMode.READ.getValue()); OutputStream outputStream = new FileOutputStream(outputFile)) { FileUtils.copyFile(randomAccessFile, outputStream, 100, 100, progressMonitor, BUFF_SIZE); } assertThat(outputFile.exists()).isTrue(); assertThat(outputFile.length()).isZero(); } @Test public void testCopyFilesCopiesCompleteFile() throws IOException { File sourceFile = TestUtils.getTestFileFromResources("sample.pdf"); File outputFile = temporaryFolder.newFile(); try(RandomAccessFile randomAccessFile = new RandomAccessFile(sourceFile, RandomAccessFileMode.READ.getValue()); OutputStream outputStream = new FileOutputStream(outputFile)) { FileUtils.copyFile(randomAccessFile, outputStream, 0, sourceFile.length(), progressMonitor, BUFF_SIZE); } assertThat(outputFile.length()).isEqualTo(sourceFile.length()); } @Test public void testCopyFilesCopiesPartOfFile() throws IOException { File sourceFile = TestUtils.getTestFileFromResources("sample.pdf"); File outputFile = temporaryFolder.newFile(); try(RandomAccessFile randomAccessFile = new RandomAccessFile(sourceFile, RandomAccessFileMode.READ.getValue()); OutputStream outputStream = new FileOutputStream(outputFile)) { FileUtils.copyFile(randomAccessFile, outputStream, 500, 800, progressMonitor, BUFF_SIZE); } assertThat(outputFile.length()).isEqualTo(300); } @Test public void testGetAllSortedNumberedSplitFilesReturnsEmptyForNoFiles() throws IOException { File file = temporaryFolder.newFile("somename"); assertThat(FileUtils.getAllSortedNumberedSplitFiles(file)).isEmpty(); } @Test public void testGetAllSortedNumberedSplitFilesReturnsSortedList() throws IOException { File file001 = temporaryFolder.newFile("somename.zip.001"); File file003 = temporaryFolder.newFile("somename.zip.003"); File file002 = temporaryFolder.newFile("somename.zip.002"); File file006 = temporaryFolder.newFile("somename.zip.006"); File file005 = temporaryFolder.newFile("somename.zip.005"); File file004 = temporaryFolder.newFile("somename.zip.004"); File[] sortedList = FileUtils.getAllSortedNumberedSplitFiles(file001); assertThat(sortedList).containsExactly(file001, file002, file003, file004, file005, file006); } @Test public void testIsSymbolicLinkReturnsFalseWhenNotALink() throws IOException { File targetFile = temporaryFolder.newFile("target.file"); assertThat(FileUtils.isSymbolicLink(targetFile)).isFalse(); } @Test public void testIsSymbolicLinkReturnsTrueForALink() throws IOException { Path targetFile = temporaryFolder.newFile("target.file").toPath(); Path linkFile = Paths.get(temporaryFolder.getRoot().getAbsolutePath(), "source.link"); Files.createSymbolicLink(linkFile, targetFile); assertThat(FileUtils.isSymbolicLink(linkFile.toFile())); } @Test public void testGetFilesInDirectoryRecursiveWithExcludeFileFilter() throws IOException { File rootFolder = TestUtils.getTestFileFromResources(""); final List filesToExclude = Arrays.asList( TestUtils.getTestFileFromResources("бореиская.txt"), TestUtils.getTestFileFromResources("sample_directory/favicon.ico") ); List allFiles = FileUtils.getFilesInDirectoryRecursive(rootFolder, true, true, new ExcludeFileFilter() { @Override public boolean isExcluded(File o) { return filesToExclude.contains(o); } }); assertThat(allFiles).hasSize(10); for (File file : allFiles) { assertThat(filesToExclude).doesNotContain(file); } } @Test public void testAssertFilesExistWhenFileExistsDoesNotThrowException() throws IOException { File newFile = temporaryFolder.newFile("new-file"); FileUtils.assertFilesExist(Collections.singletonList(newFile), ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); } @Test public void testAssertFilesExistWhenFileDoesNotExistThrowsException() throws IOException { File newFile = Paths.get(temporaryFolder.getRoot().getPath(), "file-which-does-not-exist").toFile(); expectedException.expect(ZipException.class); expectedException.expectMessage("File does not exist: " + newFile); FileUtils.assertFilesExist(Collections.singletonList(newFile), ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); } @Test public void testAssertFilesExistForSymLinkWhenTargetDoesNotExistIncludeLinkOnlySuccess() throws IOException { File targetFile = Paths.get(temporaryFolder.getRoot().getPath(), "file-which-does-not-exist").toFile(); File symlink = Paths.get(temporaryFolder.getRoot().getPath(), "symlink.link").toFile(); Files.createSymbolicLink(symlink.toPath(), targetFile.toPath()); FileUtils.assertFilesExist(Collections.singletonList(symlink), ZipParameters.SymbolicLinkAction.INCLUDE_LINK_ONLY); } @Test public void testAssertFilesExistForSymLinkWhenTargetDoesNotExistIncludeLinkedFileOnlyThrowsException() throws IOException { testAssertFileExistsForSymLinkWhenTargetDoesNotExist(ZipParameters.SymbolicLinkAction.INCLUDE_LINKED_FILE_ONLY); } @Test public void testAssertFilesExistForSymLinkWhenTargetDoesNotExistIncludeLinkAndLinkedFileThrowsException() throws IOException { testAssertFileExistsForSymLinkWhenTargetDoesNotExist(ZipParameters.SymbolicLinkAction.INCLUDE_LINK_AND_LINKED_FILE); } @Test public void testReadSymbolicLink() throws IOException { File targetFile = temporaryFolder.newFile("target-file"); File symlink = Paths.get(temporaryFolder.getRoot().getPath(), "symlink.link").toFile(); Files.createSymbolicLink(symlink.toPath(), targetFile.toPath()); assertThat(FileUtils.readSymbolicLink(symlink)).isEqualTo(targetFile.getPath()); } private void testAssertFileExistsForSymLinkWhenTargetDoesNotExist(ZipParameters.SymbolicLinkAction symbolicLinkAction) throws IOException { File targetFile = Paths.get(temporaryFolder.getRoot().getPath(), "file-which-does-not-exist").toFile(); File symlink = Paths.get(temporaryFolder.getRoot().getPath(), "symlink.link").toFile(); Files.createSymbolicLink(symlink.toPath(), targetFile.toPath()); expectedException.expect(ZipException.class); expectedException.expectMessage("Symlink target '" + targetFile + "' does not exist for link '" + symlink + "'"); FileUtils.assertFilesExist(Collections.singletonList(symlink), symbolicLinkAction); } private void testInvalidOffsetsScenario(int start, int offset) throws IOException { expectedException.expectMessage("invalid offsets"); expectedException.expect(ZipException.class); File sourceFile = TestUtils.getTestFileFromResources("sample.pdf"); try(RandomAccessFile randomAccessFile = new RandomAccessFile(sourceFile, RandomAccessFileMode.READ.getValue()); OutputStream outputStream = new FileOutputStream(temporaryFolder.newFile())) { FileUtils.copyFile(randomAccessFile, outputStream, start, offset, progressMonitor, BUFF_SIZE); } } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/FileUtilsTest.java000066400000000000000000000423661414265447200251130ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.model.ZipParameters; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributeView; import java.nio.file.attribute.FileTime; import java.nio.file.spi.FileSystemProvider; import java.util.List; import static net.lingala.zip4j.util.InternalZipConstants.ZIP_FILE_SEPARATOR; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class FileUtilsTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testLastModifiedFileTimeWhenTimeIsLessThanZeroDoesNothing() { FileUtils.setFileLastModifiedTime(mock(Path.class), -1); } @Test public void testLastModifiedFileTimeWhenTimeIEqualToZeroDoesNothing() { FileUtils.setFileLastModifiedTime(mock(Path.class), 0); } @Test public void testLastModifiedFileTimeWhenFileDoesNotExistDoesNothing() throws IOException { Path path = mock(Path.class); FileSystemProvider fileSystemProvider = mockPath(path); doThrow(new IOException("Some exception")).when(fileSystemProvider).checkAccess(path); FileUtils.setFileLastModifiedTime(path, 1); } @Test public void testLastModifiedFileTimeForValidTimeSetsTime() throws IOException { Path path = mock(Path.class); FileSystemProvider fileSystemProvider = mockPath(path); BasicFileAttributeView basicFileAttributeView = mock(BasicFileAttributeView.class); when(fileSystemProvider.getFileAttributeView(path, BasicFileAttributeView.class)) .thenReturn(basicFileAttributeView); long currentTime = System.currentTimeMillis(); FileUtils.setFileLastModifiedTime(path, currentTime); verify(basicFileAttributeView).setTimes(FileTime.fromMillis(Zip4jUtil.dosToExtendedEpochTme(currentTime)), null, null); } @Test public void testLastModifiedFileTimeWhenIOExceptionDoesNothing() { Path path = mock(Path.class); FileSystemProvider fileSystemProvider = mockPath(path); when(fileSystemProvider.getFileAttributeView(path, BasicFileAttributeView.class)) .thenThrow(new RuntimeException()); long currentTime = System.currentTimeMillis(); FileUtils.setFileLastModifiedTime(path, currentTime); } @Test public void testLastModifiedFileTimeWithoutNIOSetsSuccessfully() { File file = mock(File.class); long currentTime = System.currentTimeMillis(); FileUtils.setFileLastModifiedTimeWithoutNio(file, currentTime); verify(file).setLastModified(Zip4jUtil.dosToExtendedEpochTme(currentTime)); } @Test public void testGetFileAttributesReturnsEmptyBytesWhenNIONotSupported() { File file = mock(File.class); when(file.toPath()).thenThrow(new NoSuchMethodError("No method")); byte[] fileAttributes = FileUtils.getFileAttributes(file); assertThat(fileAttributes).hasSize(4); assertThat(fileAttributes).contains(0, 0, 0, 0); } @Test public void testGetFilesInDirectoryRecursiveThrowsExceptionWhenFileIsNull() throws ZipException { expectedException.expectMessage("input path is null, cannot read files in the directory"); expectedException.expect(ZipException.class); FileUtils.getFilesInDirectoryRecursive(null, true, true); } @Test public void testGetFilesInDirectoryRecursiveReturnsEmptyWhenInputFileIsNotDirectory() throws ZipException { File[] filesInDirectory = generateFilesForDirectory(); testGetFilesInDirectory(false, true, filesInDirectory, 0, true, true); } @Test public void testGetFilesInDirectoryRecursiveReturnsEmptyWhenCannotReadInputFile() throws ZipException { File[] filesInDirectory = generateFilesForDirectory(); testGetFilesInDirectory(true, false, filesInDirectory, 0, true, true); } @Test public void testGetFilesInDirectoryRecursiveReturnsEmptyWhenFilesInDirIsNull() throws ZipException { testGetFilesInDirectory(true, true, null, 0, true, true); } @Test public void testGetFilesInDirectoryRecursiveWithHiddenModeOnListsHiddenFiles() throws ZipException { File[] filesInDirectory = generateFilesForDirectory(); testGetFilesInDirectory(true, true, filesInDirectory, 6, true, true); } @Test public void testGetFilesInDirectoryRecursiveWithHiddenModeOffDoesNotListsHiddenFiles() throws ZipException { File[] filesInDirectory = generateFilesForDirectory(); testGetFilesInDirectory(true, true, filesInDirectory, 5, false, true); } @Test public void testGetFilesInDirectoryRecursiveWithHiddenModeOffDoesNotListsHiddenFolders() throws ZipException { File[] filesInDirectory = generateFilesForDirectory(); testGetFilesInDirectory(true, true, filesInDirectory, 4, true, false); } @Test public void testGetFilesInDirectoryRecursiveWithHiddenModeOffForFilesAndFolders() throws ZipException { File[] filesInDirectory = generateFilesForDirectory(); testGetFilesInDirectory(true, true, filesInDirectory, 3, false, false); } @Test public void testGetFileNameWithoutExtensionWithoutExtensionReturnsSameName() throws ZipException { String fileNameWithoutExtension = FileUtils.getFileNameWithoutExtension("somename"); assertThat(fileNameWithoutExtension).isEqualTo("somename"); } @Test public void testGetFileNameWithoutExtensionReturnsJustTheName() throws ZipException { String fileNameWithoutExtension = FileUtils.getFileNameWithoutExtension("somename.pdf"); assertThat(fileNameWithoutExtension).isEqualTo("somename"); } @Test public void testGetFileNameWithoutExtensionWithTwoExtensions() throws ZipException { String fileNameWithoutExtension = FileUtils.getFileNameWithoutExtension("somename.pdf.001"); assertThat(fileNameWithoutExtension).isEqualTo("somename.pdf"); } @Test public void testGetZipFileNameWithoutExtensionThrowsExceptionWhenNull() throws ZipException { expectedException.expectMessage("zip file name is empty or null, cannot determine zip file name"); expectedException.expect(ZipException.class); FileUtils.getZipFileNameWithoutExtension(null); } @Test public void testGetZipFileNameWithoutExtensionThrowsExceptionWhenEmpty() throws ZipException { expectedException.expectMessage("zip file name is empty or null, cannot determine zip file name"); expectedException.expect(ZipException.class); FileUtils.getZipFileNameWithoutExtension(""); } @Test public void testGetZipFileNameWithoutExtensionForWindowsFileSeparator() throws ZipException { final String ACTUAL_FILE_SEPARATOR = System.getProperty("file.separator"); System.setProperty("file.separator", "\\"); assertThat(FileUtils.getZipFileNameWithoutExtension("c:\\mydir\\somefile.zip")).isEqualTo("somefile"); System.setProperty("file.separator", ACTUAL_FILE_SEPARATOR); } @Test public void testGetZipFileNameWithoutExtensionForUnixFileSeparator() throws ZipException { final String ACTUAL_FILE_SEPARATOR = System.getProperty("file.separator"); System.setProperty("file.separator", "/"); assertThat(FileUtils.getZipFileNameWithoutExtension("/usr/srikanth/somezip.zip")).isEqualTo("somezip"); System.setProperty("file.separator", ACTUAL_FILE_SEPARATOR); } @Test public void testGetSplitZipFilesThrowsExceptionWhenZipModelIsNull() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("cannot get split zip files: zipmodel is null"); FileUtils.getSplitZipFiles(null); } @Test public void testGetSplitZipFilesReturnsNullWhenEndOfCentralDirectoryIsNull() throws ZipException { ZipModel zipModel = new ZipModel(); zipModel.setEndOfCentralDirectoryRecord(null); assertThat(FileUtils.getSplitZipFiles(zipModel)).isNull(); } @Test public void testGetSplitZipFilesThrowsExceptionWhenZipFileDoesNotExits() throws ZipException { expectedException.expect(ZipException.class); expectedException.expectMessage("zip file does not exist"); ZipModel zipModel = new ZipModel(); zipModel.setZipFile(new File("Does not exist")); FileUtils.getSplitZipFiles(zipModel); } @Test public void testGetSplitZipFilesForNonSplitArchiveReturnsSameFile() throws ZipException { File zipFile = mockZipFileAsExists("somepath", "somefile"); ZipModel zipModel = new ZipModel(); zipModel.setSplitArchive(false); zipModel.setZipFile(zipFile); List splitFiles = FileUtils.getSplitZipFiles(zipModel); assertThat(splitFiles).hasSize(1); assertThat(splitFiles.get(0)).isSameAs(zipFile); } @Test public void testGetSplitZipFilesWhenNumberOfDiskIsZeroReturnsSameFile() throws ZipException { File zipFile = mockZipFileAsExists("somepath", "somefile"); ZipModel zipModel = new ZipModel(); zipModel.setSplitArchive(false); zipModel.setZipFile(zipFile); zipModel.getEndOfCentralDirectoryRecord().setNumberOfThisDisk(0); List splitFiles = FileUtils.getSplitZipFiles(zipModel); assertThat(splitFiles).hasSize(1); assertThat(splitFiles.get(0)).isSameAs(zipFile); } @Test public void testGetSplitZipFilesReturnsValidWhenSplitFile() throws ZipException { final String FILE_SEPARATOR = System.getProperty("file.separator"); String path = FILE_SEPARATOR + "usr" + FILE_SEPARATOR + "parentdir" + FILE_SEPARATOR; String zipFileName = "SomeName"; File zipFile = mockZipFileAsExists(path, zipFileName); ZipModel zipModel = new ZipModel(); zipModel.setSplitArchive(true); zipModel.setZipFile(zipFile); zipModel.getEndOfCentralDirectoryRecord().setNumberOfThisDisk(4); List splitFiles = FileUtils.getSplitZipFiles(zipModel); assertThat(splitFiles).hasSize(5); assertThat(splitFiles.get(0).getPath()).isEqualTo(path + zipFileName + ".z01"); assertThat(splitFiles.get(1).getPath()).isEqualTo(path + zipFileName + ".z02"); assertThat(splitFiles.get(2).getPath()).isEqualTo(path + zipFileName + ".z03"); assertThat(splitFiles.get(3).getPath()).isEqualTo(path + zipFileName + ".z04"); assertThat(splitFiles.get(4).getPath()).isEqualTo(path + zipFileName + ".zip"); } @Test public void testGetRelativeFileNameWhenRootFoldersAreNull() throws ZipException { assertThat(FileUtils.getRelativeFileName(new File("somefile.txt"), new ZipParameters())).isEqualTo("somefile.txt"); } @Test public void testGetRelativeFileWithRootFolderNameInZip() throws ZipException { String expectetdFileName = "rootfolder" + ZIP_FILE_SEPARATOR + "somefile.txt"; ZipParameters zipParameters = new ZipParameters(); zipParameters.setRootFolderNameInZip("rootfolder"); assertThat(FileUtils.getRelativeFileName(new File("somefile.txt"), zipParameters)).isEqualTo(expectetdFileName); } @Test public void testGetRelativeFileWithRootFolderNameInZipWithFileSeparator() throws ZipException { String expectetdFileName = "rootfolder" + ZIP_FILE_SEPARATOR + "somefile.txt"; ZipParameters zipParameters = new ZipParameters(); zipParameters.setRootFolderNameInZip("rootfolder" + File.separator); assertThat(FileUtils.getRelativeFileName(new File("somefile.txt"), zipParameters)).isEqualTo(expectetdFileName); } @Test public void testGetRelativeFileWithRootFolderNameInZipWithSeparatorsInName() throws ZipException { String expectedRootFolder = "rootfolder" + ZIP_FILE_SEPARATOR + "somefile.txt"; ZipParameters zipParameters = new ZipParameters(); zipParameters.setRootFolderNameInZip("rootfolder\\"); assertThat(FileUtils.getRelativeFileName(new File("somefile.txt"), zipParameters)).isEqualTo(expectedRootFolder); } @Test public void testGetRelativeFileWithDifferentFileNameInZip() throws ZipException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("anotherName.txt"); assertThat(FileUtils.getRelativeFileName(new File("somefile.txt"), zipParameters)).isEqualTo("anotherName.txt"); } @Test public void testGetRelativeFileWithDifferentFileNameInZipAndRootFolderName() throws ZipException { String expectedRootFolder = "rootfolder" + ZIP_FILE_SEPARATOR + "anotherName.txt"; ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("anotherName.txt"); zipParameters.setRootFolderNameInZip("rootfolder"); assertThat(FileUtils.getRelativeFileName(new File("somefile.txt"), zipParameters)).isEqualTo(expectedRootFolder); } @Test public void testGetRelativeFileWithDifferentFileNameInZipAndRootFolderNameAndDefaultFolderPath() throws ZipException { String expectedRootFolder = "rootfolder" + ZIP_FILE_SEPARATOR + "anotherFolder" + ZIP_FILE_SEPARATOR + "anotherName.txt"; ZipParameters zipParameters = new ZipParameters(); zipParameters.setFileNameInZip("anotherName.txt"); zipParameters.setDefaultFolderPath("defaultFolderPath"); zipParameters.setRootFolderNameInZip("rootfolder"); File fileToTest = new File("defaultFolderPath" + ZIP_FILE_SEPARATOR + "anotherFolder" + ZIP_FILE_SEPARATOR + "somefile.txt"); assertThat(FileUtils.getRelativeFileName(fileToTest, zipParameters)).isEqualTo(expectedRootFolder); } @Test public void testIsZipEntryDirectoryWithWindowsFileSeparatorReturnsTrue() { assertThat(FileUtils.isZipEntryDirectory("somename\\")).isTrue(); } @Test public void testIsZipEntryDirectoryWithUnixFileSeparatorReturnsTrue() { assertThat(FileUtils.isZipEntryDirectory("somename/")).isTrue(); } @Test public void testIsZipEntryDirectoryWhichIsNotDirectoryReturnsFalse() { assertThat(FileUtils.isZipEntryDirectory("somename")).isFalse(); } @Test public void testIsNumberedSplitFileForInvalidReturnsFalse() { assertThat(FileUtils.isNumberedSplitFile(new File("somename.xyz"))).isFalse(); } @Test public void testIsNumberedSplitFileForValidSpltiFileReturnsTrue() { assertThat(FileUtils.isNumberedSplitFile(new File("somename.xyz.001"))).isFalse(); } @Test public void testGetFileExtensionWithoutExtensionReturnsEmptyString() { assertThat(FileUtils.getFileExtension(new File("somename"))).isEqualTo(""); } @Test public void testGetFileExtensionReturnsExtension() { assertThat(FileUtils.getFileExtension(new File("somename.pdf"))).isEqualTo("pdf"); } @Test public void testGetFileExtensionWithDoubleExtensionReturnsLastExtension() { assertThat(FileUtils.getFileExtension(new File("somename.pdf.001"))).isEqualTo("001"); } @Test public void testGetNextNumberedSplitFileCounterAsExtensionSingleDigit() { assertThat(FileUtils.getNextNumberedSplitFileCounterAsExtension(8)).isEqualTo(".009"); } @Test public void testGetNextNumberedSplitFileCounterAsExtensionSkipsToDoubleDigit() { assertThat(FileUtils.getNextNumberedSplitFileCounterAsExtension(9)).isEqualTo(".010"); } @Test public void testGetNextNumberedSplitFileCounterAsExtensionDoubleDigit() { assertThat(FileUtils.getNextNumberedSplitFileCounterAsExtension(99)).isEqualTo(".100"); } @Test public void testGetNextNumberedSplitFileCounterAsExtensionThreeDigit() { assertThat(FileUtils.getNextNumberedSplitFileCounterAsExtension(100)).isEqualTo(".101"); } @Test public void testIsSymbolicLinkWhenNoSuchMethodErrorReturnsFalse() { File file = mock(File.class); when(file.toPath()).thenThrow(NoSuchMethodError.class); assertThat(FileUtils.isSymbolicLink(file)).isFalse(); } private File mockZipFileAsExists(String path, String zipFileNameWithoutExtension) { File file = mock(File.class); when(file.exists()).thenReturn(true); when(file.getName()).thenReturn(zipFileNameWithoutExtension + ".zip"); when(file.getPath()).thenReturn(path + zipFileNameWithoutExtension + ".zip"); return file; } private void testGetFilesInDirectory(boolean isDirectory, boolean canRead, File[] filesInDirectory, int expectedReturnSize, boolean shouldReadHiddenFiles, boolean shouldReadHiddenFolders) throws ZipException { File file = mock(File.class); when(file.isDirectory()).thenReturn(isDirectory); when(file.canRead()).thenReturn(canRead); when(file.listFiles()).thenReturn(filesInDirectory); List returnedFiles = FileUtils.getFilesInDirectoryRecursive(file, shouldReadHiddenFiles, shouldReadHiddenFolders); assertThat(returnedFiles).hasSize(expectedReturnSize); } private File[] generateFilesForDirectory() { return new File[]{ mockFile(false, false), mockFile(false, false), mockFile(true, false), mockFile(true, true), mockFile(false, true), mockFile(true, true), }; } private File mockFile(boolean isHidden, boolean isDirectory) { File file = mock(File.class); when(file.isHidden()).thenReturn(isHidden); when(file.isDirectory()).thenReturn(isDirectory); return file; } private FileSystemProvider mockPath(Path path) { FileSystemProvider fileSystemProvider = mock(FileSystemProvider.class); FileSystem fileSystem = mock(FileSystem.class); when(path.getFileSystem()).thenReturn(fileSystem); when(path.getFileSystem().provider()).thenReturn(fileSystemProvider); return fileSystemProvider; } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/FileUtilsTestLinuxAndMac.java000066400000000000000000000147561414265447200272010ustar00rootroot00000000000000package net.lingala.zip4j.util; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import java.io.File; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.PosixFileAttributeView; import java.nio.file.attribute.PosixFileAttributes; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.spi.FileSystemProvider; import java.util.HashSet; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; public class FileUtilsTestLinuxAndMac { private static final String ACTUAL_OS = System.getProperty("os.name"); @Before public void setup() { System.setProperty("os.name", "linux"); } @After public void cleanup() { System.setProperty("os.name", ACTUAL_OS); } @Test public void testSetFileAttributesWhenAttributesIsNullDoesNothing() { FileUtils.setFileAttributes(mock(Path.class), null); } @Test public void testSetFileAttributesWhenAttributesIsEmptyDoesNothing() { FileUtils.setFileAttributes(mock(Path.class), new byte[0]); } @Test public void testSetFileAttributesWhenNoAttributesSetDoesNothing() throws IOException { Path path = mock(Path.class); PosixFileAttributeView posixFileAttributeView = mockPosixFileAttributeView(path, false); FileUtils.setFileAttributes(path, new byte[4]); verifyZeroInteractions(posixFileAttributeView); } @Test public void testSetFileAttributesWhenAttributesSet() throws IOException { Path path = mock(Path.class); PosixFileAttributeView posixFileAttributeView = mockPosixFileAttributeView(path, false); byte fourthByte = 1; // Only first bit is set byte thirdByte = -1; // All bits are set FileUtils.setFileAttributes(path, new byte[]{0, 0, thirdByte, fourthByte}); ArgumentCaptor permissionsCaptor = ArgumentCaptor.forClass(Set.class); verify(posixFileAttributeView).setPermissions(permissionsCaptor.capture()); verifyAllPermissionSet(permissionsCaptor.getValue()); } @Test public void testGetFileAttributesWhenFileIsNullReturnsEmptyBytes() { byte[] attributes = FileUtils.getFileAttributes(null); assertThat(attributes).contains(0, 0, 0, 0); } @Test public void testGetFileAttributesAsDefinedForRegularFile() throws IOException { testGetFileAttributesGetsAsDefined(false); } @Test public void testGetFileAttributesAsDefinedForDirectory() throws IOException { testGetFileAttributesGetsAsDefined(true); } @Test public void testIsWindowsReturnsFalse() { assertThat(FileUtils.isWindows()).isFalse(); } private void testGetFileAttributesGetsAsDefined(boolean isDirectory) throws IOException { File file = mock(File.class); Path path = mock(Path.class); when(file.toPath()).thenReturn(path); when(file.exists()).thenReturn(true); PosixFileAttributeView posixFileAttributeView = mockPosixFileAttributeView(path, isDirectory); PosixFileAttributes posixFileAttributes = mock(PosixFileAttributes.class); Set posixFilePermissions = getAllPermissions(); when(posixFileAttributes.permissions()).thenReturn(posixFilePermissions); when(posixFileAttributeView.readAttributes()).thenReturn(posixFileAttributes); byte[] fileAttributes = FileUtils.getFileAttributes(file); assertThat(fileAttributes).hasSize(4); assertThat(fileAttributes[0]).isEqualTo((byte) 0); assertThat(fileAttributes[1]).isEqualTo((byte) 0); assertThat(fileAttributes[2]).isEqualTo((byte) -1); if (isDirectory) { assertThat(fileAttributes[3]).isEqualTo((byte) 65); } else { assertThat(fileAttributes[3]).isEqualTo((byte) -127); } } private Set getAllPermissions() { Set permissions = new HashSet<>(); permissions.add(PosixFilePermission.OWNER_READ); permissions.add(PosixFilePermission.OWNER_WRITE); permissions.add(PosixFilePermission.OWNER_EXECUTE); permissions.add(PosixFilePermission.GROUP_READ); permissions.add(PosixFilePermission.GROUP_WRITE); permissions.add(PosixFilePermission.GROUP_EXECUTE); permissions.add(PosixFilePermission.OTHERS_READ); permissions.add(PosixFilePermission.OTHERS_WRITE); permissions.add(PosixFilePermission.OTHERS_EXECUTE); return permissions; } private void verifyAllPermissionSet(Set permissions) { assertThat(permissions).contains( PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_WRITE, PosixFilePermission.GROUP_EXECUTE, PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_WRITE, PosixFilePermission.OTHERS_EXECUTE ); } private PosixFileAttributeView mockPosixFileAttributeView(Path path, boolean isDirectory) throws IOException { FileSystemProvider fileSystemProvider = mock(FileSystemProvider.class); FileSystem fileSystem = mock(FileSystem.class); PosixFileAttributeView posixFileAttributeView = mock(PosixFileAttributeView.class); when(path.getFileSystem()).thenReturn(fileSystem); when(fileSystemProvider.getFileAttributeView(path, PosixFileAttributeView.class)).thenReturn(posixFileAttributeView); when(fileSystemProvider.getFileAttributeView(path, PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS)) .thenReturn(posixFileAttributeView); when(path.getFileSystem().provider()).thenReturn(fileSystemProvider); mockRegularFileOrDirectory(fileSystemProvider, path, isDirectory); return posixFileAttributeView; } private void mockRegularFileOrDirectory(FileSystemProvider fileSystemProvider, Path path, boolean isDirectory) throws IOException { BasicFileAttributes basicFileAttributes = mock(BasicFileAttributes.class); when(basicFileAttributes.isRegularFile()).thenReturn(!isDirectory); when(basicFileAttributes.isDirectory()).thenReturn(isDirectory); when(fileSystemProvider.readAttributes(path, BasicFileAttributes.class)).thenReturn(basicFileAttributes); when(fileSystemProvider.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS)) .thenReturn(basicFileAttributes); } } zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/FileUtilsTestWindows.java000066400000000000000000000127471414265447200264660ustar00rootroot00000000000000package net.lingala.zip4j.util; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.IOException; import java.nio.file.FileSystem; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.DosFileAttributeView; import java.nio.file.attribute.DosFileAttributes; import java.nio.file.spi.FileSystemProvider; import static net.lingala.zip4j.util.BitUtils.isBitSet; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; public class FileUtilsTestWindows { private static final String ACTUAL_OS = System.getProperty("os.name"); @Before public void beforeClass() { System.setProperty("os.name", "windows"); } @After public void cleanup() { System.setProperty("os.name", ACTUAL_OS); } @Test public void testSetFileAttributesWhenAttributesIsNullDoesNothing() { FileUtils.setFileAttributes(mock(Path.class), null); } @Test public void testSetFileAttributesWhenAttributesIsEmptyDoesNothing() { FileUtils.setFileAttributes(mock(Path.class), new byte[0]); } @Test public void testSetFileAttributesOnWindowsMachineWhenAttributesSet() throws IOException { Path mockedPath = mock(Path.class); DosFileAttributeView dosFileAttributeView = mockDosFileAttributeView(mockedPath, true, null); byte attribute = 0; attribute = BitUtils.setBit(attribute, 0); attribute = BitUtils.setBit(attribute, 1); attribute = BitUtils.setBit(attribute, 2); attribute = BitUtils.setBit(attribute, 5); FileUtils.setFileAttributes(mockedPath, new byte[]{attribute, 0, 0, 0}); verify(dosFileAttributeView).setReadOnly(true); verify(dosFileAttributeView).setHidden(true); verify(dosFileAttributeView).setSystem(true); verify(dosFileAttributeView).setArchive(true); } @Test public void testSetFileAttributesOnWindowsWhenNoAttributesSetDoesNothing() throws IOException { Path mockedPath = mock(Path.class); DosFileAttributeView dosFileAttributeView = mockDosFileAttributeView(mockedPath, true, null); FileUtils.setFileAttributes(mockedPath, new byte[]{0, 0, 0, 0}); verifyZeroInteractions(dosFileAttributeView); } @Test public void testGetFileAttributesWhenFileIsNullReturnsEmptyBytes() { byte[] attributes = FileUtils.getFileAttributes(null); assertThat(attributes).contains(0, 0, 0, 0); } @Test public void testGetFileAttributesWhenFileDoesNotExistReturnsEmptyBytes() throws IOException { File file = mock(File.class); Path path = mock(Path.class); when(file.toPath()).thenReturn(path); when(file.exists()).thenReturn(false); DosFileAttributes dosFileAttributes = mock(DosFileAttributes.class); mockDosFileAttributeView(path, true, dosFileAttributes); byte[] attributes = FileUtils.getFileAttributes(file); assertThat(attributes).contains(0, 0, 0, 0); } @Test public void testIsWindowsReturnsTrue() { assertThat(FileUtils.isWindows()).isTrue(); } @Test public void testGetFileAttributesReturnsAttributesAsDefined() throws IOException { testGetFileAttributes(false); } @Test public void testGetFileAttributesForDirectory() throws IOException { testGetFileAttributes(true); } private void testGetFileAttributes(boolean isDirectory) throws IOException { File file = mock(File.class); Path path = mock(Path.class); when(file.toPath()).thenReturn(path); when(file.exists()).thenReturn(true); DosFileAttributes dosFileAttributes = mock(DosFileAttributes.class); DosFileAttributeView dosFileAttributeView = mockDosFileAttributeView(path, true, dosFileAttributes); when(dosFileAttributeView.readAttributes()).thenReturn(dosFileAttributes); when(dosFileAttributes.isReadOnly()).thenReturn(true); when(dosFileAttributes.isHidden()).thenReturn(true); when(dosFileAttributes.isSystem()).thenReturn(true); when(dosFileAttributes.isArchive()).thenReturn(true); if (isDirectory) { when(dosFileAttributes.isDirectory()).thenReturn(isDirectory); } byte[] attributes = FileUtils.getFileAttributes(file); assertThat(isBitSet(attributes[0], 0)).isTrue(); assertThat(isBitSet(attributes[0], 1)).isTrue(); assertThat(isBitSet(attributes[0], 2)).isTrue(); assertThat(isBitSet(attributes[0], 4)).isEqualTo(isDirectory); assertThat(isBitSet(attributes[0], 5)).isTrue(); } private DosFileAttributeView mockDosFileAttributeView(Path path, boolean fileExists, DosFileAttributes dosFileAttributes) throws IOException { FileSystemProvider fileSystemProvider = mock(FileSystemProvider.class); FileSystem fileSystem = mock(FileSystem.class); DosFileAttributeView dosFileAttributeView = mock(DosFileAttributeView.class); when(fileSystemProvider.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS)).thenReturn(dosFileAttributes); when(path.getFileSystem()).thenReturn(fileSystem); when(fileSystemProvider.getFileAttributeView(path, DosFileAttributeView.class, LinkOption.NOFOLLOW_LINKS)) .thenReturn(dosFileAttributeView); when(path.getFileSystem().provider()).thenReturn(fileSystemProvider); if (!fileExists) { doThrow(new IOException()).when(fileSystemProvider).checkAccess(path); } return dosFileAttributeView; } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/RawIOIT.java000066400000000000000000000177521414265447200235720ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.model.enums.RandomAccessFileMode; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import static org.assertj.core.api.Assertions.assertThat; public class RawIOIT extends AbstractIT { private File fileToTest; private RawIO rawIO = new RawIO(); @Before public void before() throws IOException { fileToTest = temporaryFolder.newFile(); writeDummyData(fileToTest); } @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testReadLongLittleEndianWithRandomAccessFile() throws IOException { try(RandomAccessFile randomAccessFile = new RandomAccessFile(fileToTest, RandomAccessFileMode.READ.getValue())) { assertThat(rawIO.readLongLittleEndian(randomAccessFile)).isEqualTo(InternalZipConstants.ZIP_64_SIZE_LIMIT + 1000); assertThat(rawIO.readLongLittleEndian(randomAccessFile)).isEqualTo(InternalZipConstants.ZIP_64_SIZE_LIMIT + 23423); assertThat(rawIO.readLongLittleEndian(randomAccessFile, 4)).isEqualTo(32332); } } @Test public void testReadLongLittleEndianWithInputStream() throws IOException { try(InputStream inputStream = new FileInputStream(fileToTest)) { assertThat(rawIO.readLongLittleEndian(inputStream)).isEqualTo(InternalZipConstants.ZIP_64_SIZE_LIMIT + 1000); assertThat(rawIO.readLongLittleEndian(inputStream)).isEqualTo(InternalZipConstants.ZIP_64_SIZE_LIMIT + 23423); assertThat(rawIO.readLongLittleEndian(inputStream, 4)).isEqualTo(32332); } } @Test public void testReadLongLittleEndianWithInputStreamNotEnoughDataThrowsException() throws IOException { expectedException.expect(IOException.class); expectedException.expectMessage("Could not fill buffer"); try(InputStream inputStream = new FileInputStream(fileToTest)) { inputStream.skip(26); rawIO.readLongLittleEndian(inputStream); } } @Test public void testReadLongLittleEndianWithByteArray() { byte[] b = new byte[4]; rawIO.writeIntLittleEndian(b, 0, 234233); assertThat(rawIO.readLongLittleEndian(b, 0)).isEqualTo(234233); } @Test public void testReadLongLitteEndianWithByteArrayAndOffset() { byte[] b = new byte[9]; rawIO.writeLongLittleEndian(b, 1, 3463463735346821298L); assertThat(rawIO.readLongLittleEndian(b, 1)).isEqualTo(3463463735346821298L); } @Test public void testReadLongLittleEndianWithSmallByteArrayAndOffset() { byte[] b = new byte[5]; rawIO.writeIntLittleEndian(b, 1, 234233); assertThat(rawIO.readLongLittleEndian(b, 1)).isEqualTo(234233); } @Test public void testReadIntLittleEndianWithRandomAccessFile() throws IOException { try(RandomAccessFile randomAccessFile = new RandomAccessFile(fileToTest, RandomAccessFileMode.READ.getValue())) { randomAccessFile.seek(16); assertThat(rawIO.readIntLittleEndian(randomAccessFile)).isEqualTo(32332); assertThat(rawIO.readIntLittleEndian(randomAccessFile)).isEqualTo(231); } } @Test public void testReadIntLittleEndianWithInputStream() throws IOException { try(InputStream inputStream = new FileInputStream(fileToTest)) { inputStream.skip(16); assertThat(rawIO.readIntLittleEndian(inputStream)).isEqualTo(32332); assertThat(rawIO.readIntLittleEndian(inputStream)).isEqualTo(231); } } @Test public void testReadIntLittleEndianWithByteArray() { byte[] b = new byte[8]; rawIO.writeLongLittleEndian(b, 0, 23423L); assertThat(rawIO.readIntLittleEndian(b)).isEqualTo(23423); assertThat(rawIO.readIntLittleEndian(b, 1)).isEqualTo(91); } @Test public void testReadShortLittleEndianWithRandomAccessFile() throws IOException { try(RandomAccessFile randomAccessFile = new RandomAccessFile(fileToTest, RandomAccessFileMode.READ.getValue())) { randomAccessFile.seek(24); assertThat(rawIO.readShortLittleEndian(randomAccessFile)).isEqualTo(23); assertThat(rawIO.readShortLittleEndian(randomAccessFile)).isEqualTo(77); } } @Test public void testReadShortLittleEndianWithInputStream() throws IOException { try(InputStream inputStream = new FileInputStream(fileToTest)) { inputStream.skip(24); assertThat(rawIO.readShortLittleEndian(inputStream)).isEqualTo(23); assertThat(rawIO.readShortLittleEndian(inputStream)).isEqualTo(77); } } @Test public void testReadShortLittleEndianWithByteArray() { byte[] b = new byte[8]; rawIO.writeShortLittleEndian(b, 0, 88); rawIO.writeShortLittleEndian(b, 2, 67); assertThat(rawIO.readShortLittleEndian(b, 0)).isEqualTo(88); assertThat(rawIO.readShortLittleEndian(b, 2)).isEqualTo(67); } @Test public void testWriteShortLittleEndianWithOutputStream() throws IOException { File shortFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(shortFile)) { rawIO.writeShortLittleEndian(outputStream, 444); } try(InputStream inputStream = new FileInputStream(shortFile)) { assertThat(rawIO.readShortLittleEndian(inputStream)).isEqualTo(444); } } @Test public void testWriteShortLittleEndianWithByteBuffer() { byte[] b = new byte[10]; rawIO.writeShortLittleEndian(b, 0, 12); rawIO.writeShortLittleEndian(b, 6, 67); assertThat(rawIO.readShortLittleEndian(b, 0)).isEqualTo(12); assertThat(rawIO.readShortLittleEndian(b, 6)).isEqualTo(67); } @Test public void testWriteIntLittleEndianWithOutputStream() throws IOException { File shortFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(shortFile)) { rawIO.writeIntLittleEndian(outputStream, 4562); } try(InputStream inputStream = new FileInputStream(shortFile)) { assertThat(rawIO.readIntLittleEndian(inputStream)).isEqualTo(4562); } } @Test public void testWriteIntLittleEndianWithByteBuffer() { byte[] b = new byte[12]; rawIO.writeIntLittleEndian(b, 0, 23423); rawIO.writeIntLittleEndian(b, 7, 6765); assertThat(rawIO.readIntLittleEndian(b, 0)).isEqualTo(23423); assertThat(rawIO.readIntLittleEndian(b, 7)).isEqualTo(6765); } @Test public void testWriteLongLittleEndianWithOutputStream() throws IOException { File shortFile = temporaryFolder.newFile(); try(OutputStream outputStream = new FileOutputStream(shortFile)) { rawIO.writeLongLittleEndian(outputStream, 2342342L); } try(InputStream inputStream = new FileInputStream(shortFile)) { assertThat(rawIO.readLongLittleEndian(inputStream)).isEqualTo(2342342L); } } @Test public void testWriteLongLittleEndianWithByteBuffer() { byte[] b = new byte[50]; rawIO.writeLongLittleEndian(b, 0, 54545454233L); rawIO.writeLongLittleEndian(b, 18, 9988898778L); assertThat(rawIO.readLongLittleEndian(b, 0)).isEqualTo(54545454233L); assertThat(rawIO.readLongLittleEndian(b, 18)).isEqualTo(9988898778L); } private void writeDummyData(File outputFile) throws IOException { try (OutputStream outputStream = new FileOutputStream(outputFile)) { byte[] longByte = new byte[8]; byte[] intByte = new byte[4]; byte[] shortByte = new byte[2]; rawIO.writeLongLittleEndian(longByte, 0, InternalZipConstants.ZIP_64_SIZE_LIMIT + 1000); outputStream.write(longByte); rawIO.writeLongLittleEndian(longByte, 0, InternalZipConstants.ZIP_64_SIZE_LIMIT + 23423); outputStream.write(longByte); rawIO.writeIntLittleEndian(intByte, 0, 32332); outputStream.write(intByte); rawIO.writeIntLittleEndian(intByte, 0, 231); outputStream.write(intByte); rawIO.writeShortLittleEndian(shortByte, 0, 23); outputStream.write(shortByte); rawIO.writeShortLittleEndian(shortByte, 0, 77); outputStream.write(shortByte); } } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/UnzipUtilIT.java000066400000000000000000000120011414265447200245320ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.AbstractIT; import net.lingala.zip4j.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.io.inputstream.NumberedSplitInputStream; import net.lingala.zip4j.io.inputstream.SplitInputStream; import net.lingala.zip4j.io.inputstream.ZipStandardSplitInputStream; import net.lingala.zip4j.model.FileHeader; import net.lingala.zip4j.model.ZipModel; import net.lingala.zip4j.testutils.TestUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Path; import java.util.Arrays; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.verifyStatic; @RunWith(PowerMockRunner.class) @PrepareForTest(FileUtils.class) public class UnzipUtilIT extends AbstractIT { @Test public void testCreateZipInputStream() throws ZipException, IOException { ZipFile zipFile = createZipFile(); ZipModel zipModel = createZipModel(); FileHeader fileHeader = zipFile.getFileHeaders().get(1); File extractedFile = temporaryFolder.newFile(); try (InputStream inputStream = UnzipUtil.createZipInputStream(zipModel, fileHeader, "password".toCharArray()); OutputStream outputStream = new FileOutputStream(extractedFile)) { byte[] b = new byte[InternalZipConstants.BUFF_SIZE]; int readLen = 0; while ((readLen = inputStream.read(b)) != -1) { outputStream.write(b, 0, readLen); } } assertThat(extractedFile.length()).isEqualTo(TestUtils.getTestFileFromResources("sample_text_large.txt").length()); } @Test public void testApplyFileAttributes() { byte[] externalFileAttributes = new byte[] {12, 34, 0, 0}; long currentTime = System.currentTimeMillis(); FileHeader fileHeader = new FileHeader(); fileHeader.setExternalFileAttributes(externalFileAttributes); fileHeader.setLastModifiedTime(currentTime); File file = mock(File.class); Path path = mock(Path.class); when(file.toPath()).thenReturn(path); PowerMockito.mockStatic(FileUtils.class); UnzipUtil.applyFileAttributes(fileHeader, file); verifyStatic(FileUtils.class); FileUtils.setFileLastModifiedTime(path, currentTime); verifyStatic(FileUtils.class); FileUtils.setFileAttributes(path, externalFileAttributes); } @Test public void testApplyFileFileAttributesSetsLastModifiedTimeWithoutNio() { byte[] externalFileAttributes = new byte[] {12, 34, 0, 0}; long currentTime = System.currentTimeMillis(); FileHeader fileHeader = new FileHeader(); fileHeader.setExternalFileAttributes(externalFileAttributes); fileHeader.setLastModifiedTime(currentTime); File file = mock(File.class); Path path = mock(Path.class); when(file.toPath()).thenThrow(new NoSuchMethodError("No method")); PowerMockito.mockStatic(FileUtils.class); UnzipUtil.applyFileAttributes(fileHeader, file); verifyStatic(FileUtils.class, never()); FileUtils.setFileLastModifiedTime(path, currentTime); verifyStatic(FileUtils.class, never()); FileUtils.setFileAttributes(path, externalFileAttributes); verifyStatic(FileUtils.class); FileUtils.setFileLastModifiedTimeWithoutNio(file, currentTime); } @Test public void testCreateSplitInputStreamForNumberedSplitZipReturnsInstance() throws IOException { String zipFileName = "somename.zip.001"; File zipFile = temporaryFolder.newFile(zipFileName); ZipModel zipModel = createZipModel(); zipModel.setZipFile(zipFile); SplitInputStream splitInputStream = UnzipUtil.createSplitInputStream(zipModel); assertThat(splitInputStream).isInstanceOf(NumberedSplitInputStream.class); } @Test public void testCreateSplitInputStreamForNonNumberedSplitZipReturnsInstance() throws IOException { temporaryFolder.newFile(generatedZipFile.getName()); ZipModel zipModel = createZipModel(); SplitInputStream splitInputStream = UnzipUtil.createSplitInputStream(zipModel); assertThat(splitInputStream).isInstanceOf(ZipStandardSplitInputStream.class); } private ZipFile createZipFile() throws ZipException { ZipFile zipFile = new ZipFile(generatedZipFile, "password".toCharArray()); zipFile.addFiles(Arrays.asList( TestUtils.getTestFileFromResources("sample_text1.txt"), TestUtils.getTestFileFromResources("sample_text_large.txt") )); return zipFile; } private ZipModel createZipModel() { ZipModel zipModel = new ZipModel(); zipModel.setZipFile(generatedZipFile); zipModel.getEndOfCentralDirectoryRecord().setNumberOfThisDisk(0); zipModel.setSplitArchive(false); return zipModel; } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/Zip4jUtilTest.java000066400000000000000000000267101414265447200250440ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.AESExtraDataRecord; import net.lingala.zip4j.model.LocalFileHeader; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.testutils.ControlledReadInputStream; import net.lingala.zip4j.testutils.RandomInputStream; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.io.File; import java.io.IOException; import java.util.TimeZone; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class Zip4jUtilTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @Test public void testIsStringNotNullAndNotEmptyReturnsFalseWhenNull() { assertThat(Zip4jUtil.isStringNotNullAndNotEmpty(null)).isFalse(); } @Test public void testIsStringNotNullAndNotEmptyReturnsFalseWhenEmpty() { assertThat(Zip4jUtil.isStringNotNullAndNotEmpty("")).isFalse(); } @Test public void testIsStringNotNullAndNotEmptyReturnsFalseWithWhitespaces() { assertThat(Zip4jUtil.isStringNotNullAndNotEmpty(" ")).isFalse(); } @Test public void testIsStringNotNullAndNotEmptyReturnsTrueForValidString() { assertThat(Zip4jUtil.isStringNotNullAndNotEmpty(" Some string ")).isTrue(); } @Test public void testCreateDirectoryIfNotExistsThrowsExceptionWhenPathIsNull() throws ZipException { expectedException.expectMessage("output path is null"); expectedException.expect(ZipException.class); Zip4jUtil.createDirectoryIfNotExists(null); } @Test public void testCreateDirectoryIfNotExistsThrowsExceptionWhenFileExistsButNotDirectory() throws ZipException { File file = mock(File.class); when(file.exists()).thenReturn(true); when(file.isDirectory()).thenReturn(false); expectedException.expect(ZipException.class); expectedException.expectMessage("output directory is not valid"); Zip4jUtil.createDirectoryIfNotExists(file); } @Test public void testCreateDirectoryIfNotExistsReturnsTrueWhenFileExistsAndIsDirectory() throws ZipException { File file = mock(File.class); when(file.exists()).thenReturn(true); when(file.isDirectory()).thenReturn(true); assertThat(Zip4jUtil.createDirectoryIfNotExists(file)).isTrue(); } @Test public void testCreateDirectoryIfNotExistsThrowsExceptionWhenFileDoesNotExistAndCannotCreate() throws ZipException { File file = mock(File.class); when(file.exists()).thenReturn(false); when(file.mkdirs()).thenReturn(false); expectedException.expect(ZipException.class); expectedException.expectMessage("Cannot create output directories"); Zip4jUtil.createDirectoryIfNotExists(file); } @Test public void testCreateDirectoryIfNotExistsReturnsTrueWhenFileDoesNotExistAndCreated() throws ZipException { File file = mock(File.class); when(file.exists()).thenReturn(false); when(file.mkdirs()).thenReturn(true); assertThat(Zip4jUtil.createDirectoryIfNotExists(file)).isTrue(); } @Test public void testJavaToDosTime() { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin")); assertThat(Zip4jUtil.epochToExtendedDosTime(1560526564000L)).isEqualTo(1322159234); TimeZone.setDefault(defaultTimeZone); } @Test public void testDosToJavaTime() { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin")); assertThat(Zip4jUtil.dosToExtendedEpochTme(1322159234)).isEqualTo(1560526564000L); TimeZone.setDefault(defaultTimeZone); } @Test public void testConvertCharArrayToByteArray() { char[] charArray = "CharArray".toCharArray(); byte[] byteArray = Zip4jUtil.convertCharArrayToByteArray(charArray); assertThat(byteArray.length).isEqualTo(charArray.length); assertThat(byteArray[0]).isEqualTo((byte)'C'); assertThat(byteArray[1]).isEqualTo((byte)'h'); assertThat(byteArray[2]).isEqualTo((byte)'a'); assertThat(byteArray[3]).isEqualTo((byte)'r'); assertThat(byteArray[4]).isEqualTo((byte)'A'); assertThat(byteArray[5]).isEqualTo((byte)'r'); assertThat(byteArray[6]).isEqualTo((byte)'r'); assertThat(byteArray[7]).isEqualTo((byte)'a'); assertThat(byteArray[8]).isEqualTo((byte)'y'); } @Test public void testConvertCharArrayToByteArrayChineseChars() { char[] charArray = "你好".toCharArray(); byte[] byteArray = Zip4jUtil.convertCharArrayToByteArray(charArray); try { // Make sure that StandardCharsets exists on the classpath Class.forName("java.nio.charset.StandardCharsets"); assertThat(byteArray.length).isEqualTo(6); assertThat(byteArray).isEqualTo(new byte[]{-28, -67, -96, -27, -91, -67}); } catch (ClassNotFoundException e) { // In some test environments (old Android SDK), StandardCharset class does not exist, in this case // the method under test falls back to converting char to its byte representation assertThat(byteArray.length).isEqualTo(2); assertThat(byteArray).isEqualTo(new byte[]{96, 125}); } } @Test public void testGetCompressionMethodForNonAesReturnsAsIs() { LocalFileHeader localFileHeader = new LocalFileHeader(); localFileHeader.setCompressionMethod(CompressionMethod.DEFLATE); assertThat(Zip4jUtil.getCompressionMethod(localFileHeader)).isEqualTo(CompressionMethod.DEFLATE); } @Test public void testGetCompressionMethodForAesWhenAesExtraDataMissingThrowsException() { expectedException.expectMessage("AesExtraDataRecord not present in local header for aes encrypted data"); expectedException.expect(RuntimeException.class); LocalFileHeader localFileHeader = new LocalFileHeader(); localFileHeader.setCompressionMethod(CompressionMethod.AES_INTERNAL_ONLY); Zip4jUtil.getCompressionMethod(localFileHeader); } @Test public void testGetCompressionMethidForAesReturnsFromAesExtraDataRecord() { AESExtraDataRecord aesExtraDataRecord = new AESExtraDataRecord(); aesExtraDataRecord.setCompressionMethod(CompressionMethod.STORE); LocalFileHeader localFileHeader = new LocalFileHeader(); localFileHeader.setCompressionMethod(CompressionMethod.AES_INTERNAL_ONLY); localFileHeader.setAesExtraDataRecord(aesExtraDataRecord); assertThat(Zip4jUtil.getCompressionMethod(localFileHeader)).isEqualTo(CompressionMethod.STORE); } @Test public void testReadFullyReadsCompleteBuffer() throws IOException { byte[] b = new byte[3423]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(1000); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b)).isEqualTo(3423); } @Test public void testReadFullyReadsCompleteBufferInOneShot() throws IOException { byte[] b = new byte[4096]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(4097); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b)).isEqualTo(4096); } @Test public void testReadFullyThrowsExceptionWhenCannotFillBuffer() throws IOException { byte[] b = new byte[4097]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(500); expectedException.expect(IOException.class); expectedException.expectMessage("Cannot read fully into byte buffer"); Zip4jUtil.readFully(controlledReadInputStream, b); } @Test public void testReadFullyOnEmptyStreamThrowsException() throws IOException { byte[] b = new byte[4096]; RandomInputStream randomInputStream = new RandomInputStream(0); ControlledReadInputStream controlledReadInputStream = new ControlledReadInputStream(randomInputStream, 100); expectedException.expect(IOException.class); expectedException.expectMessage("Cannot read fully into byte buffer"); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b)).isEqualTo(-1); } @Test public void testReadFullyThrowsExceptionWhenRetryLimitExceeds() throws IOException { byte[] b = new byte[151]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(10); expectedException.expect(IOException.class); expectedException.expectMessage("Cannot read fully into byte buffer"); Zip4jUtil.readFully(controlledReadInputStream, b); } @Test public void testReadFullyWithLengthReadsCompleteLength() throws IOException { byte[] b = new byte[1000]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(100); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b, 0, 900)).isEqualTo(900); } @Test public void testReadFullyWithLengthReadsMaximumAvailable() throws IOException { byte[] b = new byte[1000]; RandomInputStream randomInputStream = new RandomInputStream(150); ControlledReadInputStream controlledReadInputStream = new ControlledReadInputStream(randomInputStream, 700); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b, 0, 900)).isEqualTo(150); } @Test public void testReadFullyWithLengthReadsCompletelyIntoBuffer() throws IOException { byte[] b = new byte[1000]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(10); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b, 0, 1000)).isEqualTo(1000); } @Test public void testReadFullyWithNegativeLengthThrowsException() throws IOException { byte[] b = new byte[1000]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(10); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Negative length"); Zip4jUtil.readFully(controlledReadInputStream, b, 0, -5); } @Test public void testReadFullyWithNegativeOffsetThrowsException() throws IOException { byte[] b = new byte[10]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(10); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Negative offset"); Zip4jUtil.readFully(controlledReadInputStream, b, -4, 10); } @Test public void testReadFullyWithLengthZeroReturnsZero() throws IOException { byte[] b = new byte[1000]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(100); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b, 0, 0)).isZero(); } @Test public void testReadFullyThrowsExceptionWhenOffsetPlusLengthGreaterThanBufferSize() throws IOException { byte[] b = new byte[10]; ControlledReadInputStream controlledReadInputStream = initialiseControlledInputStream(10); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Length greater than buffer size"); Zip4jUtil.readFully(controlledReadInputStream, b, 5, 10); } @Test public void testReadFullyWithLengthOnAnEmptyStreamReturnsEOF() throws IOException { byte[] b = new byte[1000]; RandomInputStream randomInputStream = new RandomInputStream(-1); ControlledReadInputStream controlledReadInputStream = new ControlledReadInputStream(randomInputStream, 100); assertThat(Zip4jUtil.readFully(controlledReadInputStream, b, 0, 100)).isEqualTo(-1); } private ControlledReadInputStream initialiseControlledInputStream(int maxLengthToReadAtOnce) { RandomInputStream randomInputStream = new RandomInputStream(4096); return new ControlledReadInputStream(randomInputStream, maxLengthToReadAtOnce); } }zip4j-2.9.1/src/test/java/net/lingala/zip4j/util/ZipVersionUtilsTest.java000066400000000000000000000053041414265447200263330ustar00rootroot00000000000000package net.lingala.zip4j.util; import net.lingala.zip4j.headers.VersionNeededToExtract; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionMethod; import net.lingala.zip4j.model.enums.EncryptionMethod; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class ZipVersionUtilsTest { private static final String ACTUAL_OS = System.getProperty("os.name"); private RawIO rawIO = new RawIO(); @Before public void setup() { System.setProperty("os.name", "linux"); } @After public void cleanup() { System.setProperty("os.name", ACTUAL_OS); } @Test public void testDetermineVersionMadeByUnix() { assertThat(ZipVersionUtils.determineVersionMadeBy(new ZipParameters(), rawIO)).isEqualTo(819); } @Test public void testDetermineVersionMadeByWindows() { changeOsSystemPropertyToWindows(); assertThat(ZipVersionUtils.determineVersionMadeBy(new ZipParameters(), rawIO)).isEqualTo(51); } @Test public void testDetermineVersionMadeByWindowsAndUnixModeOn() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setUnixMode(true); assertThat(ZipVersionUtils.determineVersionMadeBy(zipParameters, rawIO)).isEqualTo(819); } @Test public void testDetermineVersionNeededToExtractDefault() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.STORE); assertThat(ZipVersionUtils.determineVersionNeededToExtract(zipParameters)).isEqualTo(VersionNeededToExtract.DEFAULT); } @Test public void testDetermineVersionNeededToExtractDefalte() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setCompressionMethod(CompressionMethod.DEFLATE); assertThat(ZipVersionUtils.determineVersionNeededToExtract(zipParameters)).isEqualTo(VersionNeededToExtract.DEFLATE_COMPRESSED); } @Test public void testDetermineVersionNeededToExtractZip64() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEntrySize(InternalZipConstants.ZIP_64_SIZE_LIMIT + 10); assertThat(ZipVersionUtils.determineVersionNeededToExtract(zipParameters)).isEqualTo(VersionNeededToExtract.ZIP_64_FORMAT); } @Test public void testDetermineVersionNeededToExtractAES() { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); assertThat(ZipVersionUtils.determineVersionNeededToExtract(zipParameters)).isEqualTo(VersionNeededToExtract.AES_ENCRYPTED); } private void changeOsSystemPropertyToWindows() { System.setProperty("os.name", "windows"); } }zip4j-2.9.1/src/test/resources/000077500000000000000000000000001414265447200163545ustar00rootroot00000000000000zip4j-2.9.1/src/test/resources/test-archives/000077500000000000000000000000001414265447200211355ustar00rootroot00000000000000zip4j-2.9.1/src/test/resources/test-archives/archive-with-no-dir-entries.zip000066400000000000000000000005521414265447200271120ustar00rootroot00000000000000PK= Suitems/subitems/beta.txtKJ-IPK= Sn`more/alpha.txtK)HPK= Szxroot.txt+/PK= Suitems/subitems/beta.txtPK= Sn`<more/alpha.txtPK= Szxproot.txtPKzip4j-2.9.1/src/test/resources/test-archives/archive_with_invalid_zip64_headers.zip000066400000000000000000000303161414265447200305750ustar00rootroot00000000000000PK B9Pimages/PK <9P[Iu images/apple-logo.svg uRAn1 ťD 9(b6AzMPRk8jz?崻%t8昙cˏ9p÷iZa*<.n7t>r?} ]#{y;IR@R%TCsVTZ'#ZWSV:,);HZjZMƝ,T; u)3JĨ6E" qaTB.TmppFTP Aۡr' }4{֬L?Z0 W5Հbq#Sb{ ʵșrd4 <R͠ M VXQoş>ca~*}AASW[nCpu:3D'8%>c';df:ëPK <9PVimages/download-black.svg%@ _Yv[r5DH֟V05&Ӥ|c9We3#+x]:ƈiCWx-Rarm>28[&prׂ(Ȋ d%I Ta<2 X \0y}?+]_ PK <9Preimages/download.svg%@ _Yv[z5DAH֟V05&Ӥ|sfjGV𺺛UcuWDW0m_" Hևɵ@npnclM/Q 50uKF#Tn@yd4 +ҹ6(q ravu)~VbPK <9P~,H images/linux-logo.pngH yeP͖!;'=wOݟɽfͬڽ{ջOWwSVAG!F@Iտv;YR8NG gCdž( w }bqssihh888f''' o'WqQ@?++ VUU hii\Q񇔔TDlmm----''#H"$$TRTc```ffnkg Q::{{{{GG&LJf'gGG2M6F=,Pb*pP%kE'UxlN ߦ'IGV S|@PHW~aٛ ڜ `z~3\Ll G@P$ %Nj=ߌ@z2T@%/0@ Ц ٝf e1 @;30t2=A`rU西m`ـ~:`F100AqI ̐S10G0X&]M<`1c۫C F:\8;?_[[\Y]X[ZZ[Y\]X_[?8>9=<jvE)=Gɡ/ib[|~v3;#ċH0.3q&4TQHaԍ8{ÐP+l5LtaQcSr:HIc~,0Pu $ T 9_W? w)bވ8WЫO r1`wsnKIS)E"Tj }N7%PH~EGY+,L᜻D5S+rN׽-[U uqձ* hԀXX|U2 N 5(#E ]`]]BIv' )yC|?ҰK) xO&#d97o#c~ AiNYOHxhbx/wkw}iگC΍:ve8HOwuzo˟P$%*78^~Ma)5Hb\-#M\򦘒 xWd my'fԎ|z=(7tkTB_8U 5~):Dń*o'\E|V<ىX+M='WBNwdx%/3&O]U,aREFt #X痂s]3vPVbU磢uZZ`d ) DWx:[x8h 6\+m^rC^$"BR_b.?cz\E}JJD? UaŒE:M8h|Kn&!/bARm?YgἂBQ~+`ԣ$2#ݢv >Q㢾0AuO Nj0xy,<H[ƞ:8aJYuz"!Y_YNBc<#4_mqӵ~z #/2n+;Z4*2ђD8Iϡ8UP4ksަ_05??uxV*wE}2D9{э|ïT;!A[L&9B Xؒ%jڞbW/ߧqוKiYɜ8w}0Ф K\+_z'I࢚$%*BI"1t1;oiC4װ1YS@cC.aTNb#Ujkw05aۦ-zBCE<9u7^RU^4(x$,~~ͲQ)5P)Vi8 Iޣ8DGHg>"axۚ?%ݺ.V-^hY#AbWKM|Z J>"GO&0Tvn^VuIDhBS)1V:H { QNAQyAA!Motyܾ0FH'Ɛ LL_FCzυ|)kcOE-HsMHa<5u9~S[!a7S%~+ulxĺ_][5yG]Wx8u֢_6` gqve*Z:S"tVGn) hZ[7Nţݝ%2DS|qd׋oRo1C|Y/ E]3eJ,\"X63zl贂ØQF1 r7d[껛h.D7ߵʰļRaGO%Lqm3_t4Xp9}c?Ұ4'Õs^r3ɇ%uoY[͑0#l%-k>N0Q4%;ӄEV=dWEj^ƙǧ utX 3QH}y^^cM GcoHₛYU&RÿtJv>^a޺}d )L1rŤF=n,"~N3kU/ė:$քʆCZ!>g_{bC|yS9, U1*NF1/ȏ|CUB>]<2p]s\'\%mвCꛍr-WXnra/X6wSGB]݂`^¸r1BR܀Lqk5aY̔eyDB&\@1Vpn)3A"tLyx=!'LM<ǙL5mW235롆6#+כ/H D)ZEEbs`~'u 69!}7-Td&$u&im"Ilˆ(S~o{vP[6*(rC4Kte3] &T? ״a]'7 =sAR'᫯KlԾS^2DslzǣS&jdOZ:0OL6Y]`.@P76NЪ}?-l9L|SϊLgd GHoãO U '|G=SwF% Y|\y'Rx||["+ѹ3J;Bð:[9-+#Ax i } M9[uHڍ L 1>ueN?2]P#te}4wڜ6,Jܴ h _뱢M(Qլ9u="7PQۘK疖]G£=N OmNQ;VqOPɑ\5BtLE𷠳ű/FPeŕϬmr3 ;Ak8GoH*(v(x.wv3G~AqI)I,x"Ȱ\j^7)n3o?P4l3)6^"EzGv Ao-a׋O;>|YxA&EŽᷨR)]˓˄{d0+`H;zaiQϓD,Bx;jhJşDs4Ce̺~9Ty36O=q}fMy$?uUR<2Ќ 04?>YX}@&fm.W& {U)2q oON|Cj"Mˆ 'o*u+vCҦ$IH@֣ hoIzơ N#hD*4$P>6,K1H%JJﶗt ƒK)36a?StNo=Rp]5(s\;A#Xl@GWc8"Voޚv:jpWx=EL(NLwM5wD?gbbb\&k">we~.LtAU:A*!@v(iH59:knN+|׆%| QKK[m]q ף7|\8rm? 6!/4M+V |al}k3k Zsନ<(+M<[G|{pH~}*WuNn”^n 7`d;/{H%GH5_œ5"~P)Fٞk8l(OdteIIBBD|zjѪoN6CEVĘc H8\Yj WEِCA7=Q<"Orf)Vxv"`F஍z'>28N}Zyz"nn^jag4g;֥gk7wu5dc]'1?ӭwn8ٯ9fq=;.XϯHessM7^Q)lVC X5,4C}A$ob"G7cCUKV[`/á%YTʼ G߆e;_wk cRl )JGuLf~B}B!gAήFc OݎG8|SCQ8A`s:هu_F$+6֣SmI4_Xno?Iޢ4<^vrq2,2'=xmv$wq=_RӽxQ,~Wo&9\=c-qݤV~K"զmg~׋1 NKL"pk6P.1e]ٸF?J 9A!`H2sàR u9LuS>崆$ysI[f'-MZW~5:DEMo%uSϭںnne:$>_NҽlyYKvyͣb+͂DaJ 6\C )HiH~W\QIH@u&;IL?"b/]pI#prG,'ENfVh}n=<|\˒_~y-$1$"v|Py^EwWo}.$OE\I!+űPKC匊D-HK vƢ^B~^gÑAi w QG~ l<68ʳN}`O~F~!bDzr}HHH~.֛0an$$98dgHQPtxZ}id;P؃p6ORBUUmڥ\rvY)0,EwQiCSū5Қ HH5]8:^H oMxM^i lY>ÉXiLEti4|}qiLt߽^2/U}W(4=k>SX9.u9`opbM;I[a˴pڪ]7V-- p:<{`Η4"YEļf ˒pd/3뀈L\):} ze;etpe ɾ7E-D/hլ;N-y·5:wПݬܺ"`&hJ*jĻ,ֻ~#XkvA`Ba7m2,4ָF !D&…ϫ<\x5]+}Z˗Zc~vk~n ?FBDWo2RĚecl]>KU잞d|[DϨH3wZw~}Xr0 9գ}ο28u^?5,x"@Rx KPT u.~!79AP5u)X^b#DT>-^_"&Hg͐_R PxSZ ET+E%=qocdg_cwo{ WP@g~'F#&uLY?'Ӿ|GW 3&oũT4uTݑ%[UX99^dļW&.©d>sQJ6eGs 6_Z}q;nv \ȵ!t#hs(۽^A,-i*ex8QSr_F`I8iֻ|'WȔ;-(ޅ/ H\Pd@wBT-4@;=ۈ}1l+g51$ o~ӈcS (QCq DA>5T pR8@tX;l 8k-PzlcRw$8l 5) x$ێDpQ|Iɣ(#1F09h'սM.ȶ&+'5}Y)ErqPK <9Pm images/windows-logo.png sb``p b``naFfs[O{n?ѫҁ"%A~ nզ{8T09kʠXΊL߳?P1jOOͻ;=W2Cn\~rs.9ǗÏyKKʹWPq1_͹{cqa; [ IRk~򊘇m';.;li8A)5/OyG`¤NAORQ7k`d誕cVdS[GY&ƣk|x'mqYr{ݷ7'FV،'B1$H',q5蚜דyОGɳe~xJ\dFV؍5=sa>00xsJhPK <9P<-$5 index.html$5[i۶_Ӭcڵ,N<9i2ٺDB"jd@p%% ^^Ү1=Ax^PK3's2~Cp-m@r( ]^ }]H'[kC;<AMFB _saYͫڵe|:*}T[,% 4b4p)woBmŗeU )yrz?c{4T-J/NC+Xξw@r>*<2ۄnm"lz{}3]UMJ1-Bff`&$o)[ c~C\4nmJ|-!k3?TMžѨe6+YbEO*W4pGkib𧍈 _ V!P PGV` j(xCuAbN" C|X+L&|lY*S4^'Cxʗ+2/e>DrP!9"yQQf ^w줖~6y qʛc~'"*+5yΨPI+ְy5PrcVqJigO7S-tfAAB @uds;kPqu f wHgm*T=.ء[q\jYNwFv+;Bss{6-?& vTVd(i#=yE }pikPHNɝR!u:>B06n`J0·k<^_ӿcc~}iCz @Āf4H!pvsvh fA Nr}\7WZKɼ˾NKbh#+T8iԗk\{dtsB` 0I"@{!CEm*HY> j"ɺh1.`ݕ0N$rTd^183:e )$pMgkj{sG,&Fw8+-I~浆XspDu!٨k&^Kw7(Jˠ{gs `=ՙ(˫ڽR!5_׾֏ZkɓY!P#ލus9'RS8|ohI_Lق8g8(0IB,!"4Mӯy?o埽o(P#*n')<@I+`:ӂ?Q@MИҎ1eU붼E5pA{[#;}~!$84fe}(qqZMTꙉ/ }NNVneö0i,UR u b[[Aika?Wp;}[si g S:9)>aF`]栵7K >x 4VXsVtPj&;wPKZQ?}= test-files/sample_text_large.txt[n}WY4N&A睖hےh`>;@rۖ(SUUl{ZBe 6o{8!zLgI{ScKHs>OiMqe02ǐ^ҩ 'x1|/ۘxnK DO_VD~=~g:zi#{2;K9mMc^i_d=9g879T{:3{᧏<.ǥNݱ<Қ-M)6$4!Ι?oe3IA~^e1_`֑NQ聼>ez?$5Ӡ/&IIy<ΣZjGo=yTVRח=prBa$D 䪹 siI9I~$b17i1DbFg#mz-([hzN%Gx룫Zq9I^ΝeǨ x >33"8R2[cvyRPi i$tV?@r+U7-)dDwkCiRkYIOsjsYT25Cx%-iiPtfOئϲʚy]D }59Ql[D{72c JԚ^}6řvė|P x+?IL^*XX"-OQ KѤRE8neuYՊ;IZ7QlDz찊B] ! 6RgUM5pdv٦QY NAmEDzsNO q=h#3G2Վmlb@DHpY)0ĘaSݹQV9?nhҍ~,U~cpcXKUۦN5o\AʍN'Ua_18 oujFxg[` J;lHa6,DtwqV5\ װLA \7:?EҨ\pO>JH;{\ԀP@CPw(SpFQ78(xU]`Jbg,d\ 7i0xzf%hc>ЫnP`u&jƶ؛&z󝗩,[$3 KvF UJQ}]5H,.5tpe"XuNJ-Hrւfu&]oŶ~n6g X寧b J5f#DZ+;E$I)E5Ѱ@K VD6DA>G ']ig MCtF`h_MW7DL9cn@+wFh8xrVʘ@ڟrZɏ&C:k|MD k~%SiSF'µ.orXMYYl)ȲGћVQvP/VxcM@뼚ЩH< Z$Wn[\i&V+-;{sl$WR=)m$q`U&d"$C>A8Ѷi復4LRJ&=qk^$&&I%l5:N-蛒*WqʚS\CQ\͊Z &*0[JK pLbNŠi,e7XH.G:PVע;E ,j"ݥd+F$xlA\q *S$sKW,ىQ1)6hΎHhZjVְЏG?6],O*P;=:MUwUG$N+ 6tvO҅Op-0d>ꢏEHA2G \oB 1m͠udz!6ر%O3SieJZ4Eժù=$y*<Ty|͹\Fμ@ t9ʕ3Y Ē<) 瞆Rs,1~`;rӒQp:(~dllnFEѮDl$,ýϫDOj-KG^k.`Ai*zy\szRЉNlsh@4ۮd쿰+S \)U+5_( gpF^jD3q#B=&LXj#JF AZ50Ys)L#]+W,Wa,kRy;aD➝{Sݖ,FWUaAy,+M:rɸoj˞?]Fn]~e)TƌuGKB忆VG]T~`k9kX*2XPVX|{|v j.IWF@U+z+[bH˒Kgڢ7wН+nT;.+bu `wC- +KNBK [Zo.^pNtA( mqA^MGS`EƝZՓ8IFO%"F˜sI+SާjVàyP’CŕPcEM$Nǰú0w_YhUqhL]PқXi! Q-2*BYn7F"ޟ7-OT)A1(NYIL{̸$͒H^4^o`MZ'}ʼvFԲ}+Ʃsq)aCvA휉ȪQJzStvBsaz溲sMM`9V(on*YQS/մ5תZ# ?c<&߫pSkD%2 6lx!j\r<;TpQq+vU`]Ϛ;.a mwEfWtR[g9> PѼu76 0Y)P@^[@gUDl4ntp xte ߆$OЧ>%)O }JSBЧ>%)O }Jѧ>%)OiO$H8p @ $H8p @ wA .`XÂİ`İ  1,خ0,aA bXÂ1,0,>%)O }JSBЧ>%)}ϣO }JSBЧ>%)}>%  $H8p @ W@ ~! $=$\ 1,aA0,aA  bX]aXÂİ 1,8bX0aX}JSBЧ>%)O }JSGЧ>%)O }JS}J $H8p @  $B $H{HaA bXÂVaXÂ,İ`ð 1,aA bXpİ`° Ч>%)O }JSBЧ1>>%)O }JSBЧI0-,X8p` ,\ ,X,X8ppӂĴ ô 1-X0-iviAL bZӂĴiiA)O }JSBЧ>%)Oc|}JSBЧ>%)O)aV88pp88pp_w0+YA bVj0 bVlWpĬ f1+YA LDЧ>%)O }JSB>ѧ>%)O }JSB>if88pp888ppppĬ fì f1+X0+YvYA bVĬYYA)O }JSBЧ>%)Oc|}JSBЧ>%)O)=<PKZQ>test-files/file_PDF_1MB.pdfcpfA-۶&6ĶLlN̉mĶm}9y9?wkj]kh E1 Fv8\8Vfck8>>&93{ K2GV5|=votYa\izaV pVTvqB/VY{>NZDN Eק?kb~W˯؅o3o_9T@l*콬܃5 NHOՉX4sNbAo0؃ǻ (<;JݜݵAF8gG_/711I?HS&ot^LϞ¹NXCIL>s9_t+8H }.:8l0JV;Zn`4Y)7lX_LV1rDNx|( Nzcm?W\Qm8d?{j5׾L.#X|IEI ӈTȒICrDA!z^DIfiF$в TLֱ?-`Qm=tn>bTZlg]kҴ.>EqBP+XV:*ߓQzDqy-@,[|&#$L罅yH{\TwV"o>pF/yTQe@Ji9)5*a%(ױC1Ź^PO:8|冶)WSao$@S I$_RUeFl pr/&zkt9rF1r6(il2SR,Fa/-"&FB1o/04Pʨ.Α"X?w! RJ,88#`l zUŋ jauNh/r`UQwI+'j9޳w"zʍXj{2۩x^>e-L(;ӶztK=X 3X7cY& "<7ВT.<[] _J/#5^rLT[JW]CDuBAiO)R>V|0ɂ!B1A`E՘o Z;*RB5.!)3ٝ򎕇 CvjQBv=GF묟obJCH'`zvFJ&<'6az4OϚ^3 W;2%zI(1.K"Ş{ _ܯZ+BU4UW^ȷ|68ʝ#tTW,C1gc2SŬc_xTmUf,;57ݗ\4St -'y u28`ȷ=B#轡|@fVa~n QDu,3Jq̇/e,43x.v֊E.L&#i[*ᛑeċo $V[]`)_u˰/E3ЉyLcnpawSJe`L!##h hдpVꩮWo ۽~3ylO7!it_VVwɛleAd{ԋ7W 5WX,K(#:sa=VV6 rTi,X*"`B]%0ȇY5XL"oܦ=Ĝ{=#Ƒn|/Mu'5 }F@V~g-'([si0N[;;ye#v:`+,E(hZ-Y;-$ϲaC9AdlY#A(&5d sAf,j-/Gl39}߆s$N.}#٩͜O]HߟW!}=ϻ_ނZm`[pfSled/н۬+@ގ&cj2C s"dH%OI{-^= *GV.t *,X3W_GW7V~?F"+7F\d|Olo$:Yx7P=WvM}j*a:A:h_x׌Xp~۶<S6b߮#p/;3L-ZZڎpJ`D΃:>$/L?v@rh@ʝĈ9RH}zR;)\zW cr5`mWx[~wo\g>x 0v㼐́=1z̈Lp4)Dw!Th!@R3;ܰw]+< #(~z9ZbدG,iQ8X1#S1^V3?@aֱ-~̌=*% %[ ٗx޲7xcOcr RwJP+_Ef(^["x15xFA2DUC.ӛ 1eW5OF*HOtB<M?X֖Rw]S6r:]jLd:.{ѧr;FwurQ76HmVl6@T{.s7Qtx1FHi]Csmj1}KDyľD5B_1騁}Ys^41.T&,2ȃig3 c-0u,> eMv'_F*˴ґG"%6;*?oE);)u>h!f R%.lVIi1y5aQy o2*!voI?UOg)}TbHt:j;fm36 cېo2V~ ȻK!wW퍝4, +"&O$T_U26W%b_H䅹w|6o0mdF$JNL+~Gr!AuAm1?rdtlYf/.ދaL$ d&Wt^w:.RUTVíBKZE9Q6 WI`0tB~le2t{K~)s{gNv [otou {7J77!ᝩ.Ç(~esXK)adOrL8:1' [2IQ|KaC%RBSފPׇ.HB=Yhlɡu;ō&,0UТ, (a`Sd`p[!J[0iČSQÍrF07Q \ ^H26,kJAh@PDզ= SCxX*7̦F@ReLd@s£V2BPXgׂ=.HŲOoJ{N:܆kbjAVQy-ӂc"o`f ˁsx_濤*&j7{Hy,!e%8-`@UHyHxy儥DŽ*a\y7htm.iù]6jE? .̴8l1Kv+jC}ɿ3;s_3%53 X4DKR6Fb^B2o_<-*^d!Q1 4̨{t&1h.qQ^'[+JmuB:[1%'3gF -[ TŲlxN.'S4 CW3f Ss$Mv}]WW7#X6\+_Ee32{ Xs LAj^rv˯ "yO b)ýiЌN{A5&?wo߻h-<=dDtM֩qݢ&<@cMk:o|$c8 M3#@| w|ƆX+uo~B1ԯB"m!|?xԅC^IB78?Pz. F#,'T7Zͷl[:2g-=)IT/FEӮNBҦgheBSyuQ&MblFQ`ٖXFlf?ֹ $ߪ=r+2iZIi r2r8ڠK|lX@3;N-e4zVYi\_+`0:u^#)-G~Fyj0hѪSU5f'" u*5ooESHlP{:4Dt? fUv$2 yᰬ;~5s|{E 2R7Q}!v+Ucv./immY$1OLurwI*rqq)+@̖< }I;sxM @5 c]rXeunQ%[)5{rJB_n6Et_3_v!1pFd{U;3(G 0޿n-U(.ɠxe¸& -W_}2҇v]+ɂZ[ꮝᶪ́&Vq+ &oKBi#2PygKu;uCAW<}B=XA)tkDr;-v;}eTqd(a#EP^<(h~ͱkéHTSȹт2X.Rf@GJ] 8I?JHGă%^G0mƷ UBO${ D)`k8T<%Etr~2#dpOqiBLgLudzN4=ϠQpȓ`†ݼ{Y)֎2$S3K+84=`+,l^N7z|?Z*:6,!V'bg mx!i@ۙl4=w8Nrv8vvC|pg|!ILZuOr;+>fTY?/5:Y}e1.{4gcA9#1jVd=__a? rCt/6zQMQ"d/9O!ٗhfoAV{{7Si.":o.|Iʁ V!Ѵ]by8`)XkW҃IJ'4e"dEYP'x[2&!fTty\gu[e(u@|#LPoU2"9>`I8FP f(%mRlqלd&N{v^!"ܠT2>>YcpRM[Af6̐bk& TwVgw=AeWpi=>V~}2 4ٳk]yCtg:t;x}ID8KWr`4OWkt/#'<}ަFDXQbjK2y$LYz@Ft7Ť'GAȵ`mfuzc_!7$ԏ`U1nrQGʪB:R7b.erv-hbopk_"aJ8t7r#1nt fpuU4귩^MM'(C4dF^UR/ví^&=jpncIpd?#zTJqdz1OliMc6HϕwĨ7u`:Da~JoT ȳ [+ \v>Usz{GO~[#i|>8)R]'yTa؜wVf7k֏N! wptԽ6޶$mt(ɹ&f=Q=%2 ]R6OZQ+o}[?&!0r<3sH Qh=kQNG1crǕg;-my:4\_S]-[W-BkEqqCM E/nlR'+)\FΎ[٬>І}Wr Er?!2LK,Ga4 O4^0횃Mg NoIPçY~.tlօ#5:3ncdI.0Z7bqQt))a!{iH @ЧVN?VricJ).<+?tA1'.4=-&S58}JgMc8?´u3(w )oC >ؔ 6ǘBAP2#R5k|#b@vCr7N8d`pMqa=}p]xjS8TOd,rH:e5fICOqgmwXa~KM> )_@ ix+vwbW`8 r⑴#?_ұJQ1t+>9H~Iy':%Vѭ/`S~黣1sxe#,isǖAk񃆝* T2є~"q}`:/85ֱ) NZy ?{BBh3)ڎħ!JuhUfת:񓾚0p{.^Lq9 AhA<5+Ũ,k"&ڡn?^vR~=P4l | Wkum^Lݩ7뽻>[iR&Tsɥ_¶ k>H2͊QV4k"{ P^(u\؏]F/2Slh^'J+bOAnKj&YIR'"KAף!kx۰suM+2\}Ë UU~RH hPY=nӗ3,W(jyyvџoJ[mv$t~ٿ4 VI^^] VKo 6?W]}ޠJ^Pҧv6l2 4z奢و_6~ձԳI^ }SSuwq4iknO#;UN4맢jB:v^VDr68}E1}B'm8| TrRBTnjim}1a;zD[Y"O-5@j~ϝ&^<knףYe,.YW$N\'N[j O{>Ea;%  "h=N}扳A{ez^z FGX;= }u&/6dvIl3~>OzX(_5}Nzx6{M.ġYWtXFaXHnHqg`Nwd<}I) ?A{叆'#KQ" d$5D-iF A?zl-;J:mz2۰/||]hṣ|&oRNcJy1g#Jv- 2M5D"o)4];3jWJ 97 nɗ1|(f'[踑K|Pp]=yǩj"uϣgI#[U @k.:O|-+oqixF>`A68`0"oCp߰\k =k@ f孼Bzyy!vWx'Yt[T~ppNɞ~=*VvADl諪fb6 $HkufHsuEa=3EG^LnSՎH u L aP+1#8 jM52ϡw>LwM^E u%A!ɋVVvP4mag|x.P)!$ӱK|# 'oO@ÔRmٸ?WKua Ζ0VPڲвxAF`0oP ꪁ+tJc)@m0[g_iD{n;>`c}A[3Cⶪ[Oރ*jh/R ;8wNs>-ū3@(̋Va~du=;nF hX;H4X2iAbg\`P` LTXUnK\-o(r#}'(|Cfx2wID_89tW,:rZY!.A=`e!%i9f di;҆%rRZe%BIc"a({k<£2hD1YT/U W 8L]&#!c 暥7DĈ$M857.tc݊TrCd6Kvu_bc~j; $# DXJN 5PpXTӸ5J(l\f 7Id,l.cDђesoLSr4?YtuFvQ4I~ҋ'G Rݝ2r+>عPC>ED ŕJ/l ǫPXڈJ/=ęΏ{"R7ּ3%P t(\0e_ʊ"YlGs10IDR)ϟEwBm!y݂+fE`ܓP{g^JFQC%}ܰ?Ցcf I`Vt|ex(IptJ9a}!E Lsq+YBDZUx|E#62u_iLba㾣ji`IaDl`h @3G :w5߾OI(|Kk|1S"Rc}2W9 b4K3[aź\_w>2P0"/ӆz' DOe=W#=[e.V/7[\:"An黹ED浚%l*eib;a#emzqK'{oJ3V fyqی7j~Cr$՜2ۡR~UoG&GҌ[SPIqP&`DDJD`UP8}bFͲ!"K? 9Gw,@!-p~_XrҗX1 xwӑ?&ɰBhVtЅIzp1 y9$Fb( Zzٌ홄1gQ0Kwݏ }V,i*qrй,R䞷&{veoZYKQ)ܰݙ }@ZMűCuEa?ҁO a8Iq3-5ϦڐL'@!<'B-g[XX-+&t%ˤwkLrf7Dn|.]ìzew*$,k{(E]S}6g򹪯xSͪv,OBf*q<,O XÇN.OO sYq{DCTf$`E;Ö"o2nv`$N2p͈''7ѻ&*iS"R2]EyGuK&0{5JJ@->*!UL|6o {`Ծ9l! 9_Akw虗"Xz 7QV̘4L\T\].mgdaƤae$LRfV.$,ll$L"V.ΊfNv]HHDlT~1Y)KU⿴3 B{{EFBZ" / 5HHHH8hh(8x8xxD$4D$T$xx,Tt LLLdl, 4 Lw|!~c+@q7 ?^ACG@@,AdQ (j2 ۆ,oO?{Z (ӣf/ LsWD QT2 v?4Z-E,KA#75aUAA%l A!VXԽ>PXm}_a^dP˫)`m%UEG2]@ hἡkjr N޿)=NTdR[JTuv얨LѕRkcay_Z6AܣyWU@Wso#DiϿF& "PayPaEN7'r UG̘{$loW{H*y7 2fnÏ\ i SI/92K_TLJy `-q>'Sc'1;Sϼ/[8M#`nJDS{sJ~2<\XG(Y될P=F<~ ^vG~<9 2Qu^3m\:P^[vOtv{>|{m?$li>fgZr{[ _k-|sͱ|?㙨V(8gz:CwHg.Fo.|-)rמ4}jʳ|r/"WQw:.ќ8{54o\~($S>hYMnd%C CL- M=6-V`^GK-UJ.6QDNlk '@Ӧ!'NN'WvR ; X*cuKqɌBNJJU}akCF1eW-@:69e-z1k,m#^ :x|X I =C 'x> ]z^p/~]@0qAJ5:/彄!+^\5o;ݤgp)QR+aZ;}kP-t yqg^ܧȼǮ3san(>g'E i&ѽ ,";; G}* ~tE<f0DqX9OM-T_=+#7yXN9)DڑeN|2-)?y?y"1FyV PM"h7m ~+金v̻xVY0LIGRg4tdI FP* 4F$t?O1@Y4Mv&=f WhsIVW s']kM ӎKَɻ=FD˟VDVfxb[WøaNwp\2/2(NkƁě @JvnHmqBPkX窝j;[Z^N;\mi='ԃcƙ@z,㭼V~|8Sqe` ʎ}v_32njgP~"汉]|Gkds{ʪEiuGKrftgBꂧ=v۞OOEkVv7G@nkol@l`7l̓NsP@܋~"nɗCg27WM]z 8+W=, t_g] +wPn aݯ۪amw#s~qן  {[4d)^ l L &>v]6=~Y8#=w|Dg8m\@A[=Jڐ~Z{}-(hwiLWm}e+7IC MΧ1!G='k|Vn_[YM;AeZHƙcf30, De}=Ś/C?7RcqWϏSRj9 yok&&e뛟⛷[q+?vr0l'QOff3:K/$}Uwy!?X ,D]7Wy}RrJ9o? F*mT3x(eYZȕoU.?>%]&YF2:>R޿e̳E4ީJ,&DZ|#TLaDKMqo\tKTo慎eW-j~dt7 $M(u}c;{oxv1}n?uYftiS%V;DU A #Z7] J61';T E; aT36\g)ȧ%j\oݨ!)_ޥ~S5ۢے^׎Nw@9M f`kY/#. _tXpTȒS7ﰟ#qNYR3@֙զj;lg( =i~w˛.y@˴/ɦzv [j?2jQas`Lʱ0;|3H>. B$Hfҽ>S[Jk3˳0<[t_. @weeؕn&~>!Of3YaJXPSaq -eQˍ+&f lktt`]{SS,,e˒2Mr-[eզP>jo6as I*I+]&X8 &?x,,DFE@Btt6 :Ra4F16y\}=q^miʨHqs uyv%|sIKϑbђ}6LO~2UN Pp #ਮ٫1j-X}PkHTy]>LMQxGњ.> ĜA|{[e|h<=K/{_MBIkKk-Ga&>eG1ߔ:ܹMdHبt4O;Fw=X @M:f-o1 3aobQϷ*jJ Iβh&na,QĘ'ã'YX6iaƉP(ҳy`%F~kwo,nBkoޘ>5?ps*~J"턦E3dчdYCH N 62AGpz KYlffܮoBW̖\3/)uûe[ G @Y4EsIrէ{ۖIg]3Aɺ:T?i,pg 'Qv~DPUac4 d~I#RXgoYԣ6&O\pު]?cwX_yy&"t;Cڝ {.PhėqP%%DҢ)'u[6#g/vx⫇{+}_1NVNWÂιMIyxKe']emVCꆻz f\4輽]u,mꯙ l*e`7% m:n]{%fuʹ tF%HV|V6=(T /НsmE4 <b!!@@s1{01>qI":gMJMyH@gyA!55yD@('yC:/+"֮n֥ۮWȜZbNdlѻxXDra]лd*o#?f(UNAy*U;o~p4ӛk'wUAeAVּNC+nP0oZ(䗐{NyZҴG Gy6ػnVW۲N XytNBZpadBn>.8PnPaiHcⱁYm4k]pk̥LQʆ'5ъ۳&RX7$ɓUDmmt?l:19X7^%!aH74'?KPjQѼuWW~^ޜ/ӳ.U^^мUKmUH8ߠ1 #|I1[}^pptSOpb֚Ec1Ywiԫ~F<\~b5WUfJJ\@ڷ'dO^vI|t,lD`.qUoI ?DҖK@} 5E9t; 99_$U20lmlF%VKL+zZ럑g;ݚ3㇥7W;+P^='[DQVbΰf{HRbCၵ kˌCCeO?!2B<з|tFA 鷷 ҙdM9&*ݒ>Ug:Ȱ1}KLCe,ad~BEEt 6>̅ D7BV@GRqKƟqV1 -zq3h3gɁ_i[P+hPZcw+QrO&FmO׹pA|V)J~\S%Xic}&-BDvJzZS}>R,6kr*k,bx?IocJK|sKm_jhi wb8dcSK:/+/Lf_l_hԿmC6d`#bF+2ojF3_/WcdI]u՝"F° e9UpqWn!Q,7n{_X{x[E_nR[n"X$褷fXl۪S,20~v<#VU'*ubi2a-GH|6Z)3eƴckZ imw YBZ抝 D-@aOh6{!W\v땯JN+'CL+&c`[㔔ۑ( 9C&,߶;d*L7 uzʹơI}38ӡZ'\< 2nՐ퐒)ZfRoZ3W1RJoURaB(ڥ; 2%PYjl/[CD 3ŒPί /~:F,[lC}cn5|\߲swbo{Ƹ:zcWrfG"u᷼{?ͯG''S+,:s mF6uW!7ģjl;仒MnƽU,NQ:xʉޖsA$Qͼ z_YV>-F^FF=FB8uowU^ٔu&W{--u8oSLL1Tg:>8C#h=4$^fpRB&Ψկ/ߘ:s?0#\9U&EM/:SEh' KMcM~!LzoV]Di=u()_",O3[ǖn(kC]Dž>*->E_vo]ep;C'3ѢyǏZI\1}z?iT;W[grOZ^?9t)Fq*CEe189/Qk4 q"'[d}qaz6t$qu{ɫGZNY\-i\ޔbPWЅ=Nz>Ò`cVUw`^%L -Z.ҧ\/(zF\K`RPkL[}Q3[G p6n^t :ҿ {Q zD;$E%Ҵ;zsB&MJQLlܪ箰AӖ@[,[}Ḍ0A%QKVHo$daZ%oZl"Uڪ$~-З5 N!B UR#֜—<(Uwy{Ǡ O[QQ\<3xsp:uD\>k|"Pjxs?:k;>pTQ7) 0,̼iXKv"\=(}J?ʾ`vݒ͆|hB0 cz?t,$0^hԷ_Qp"ݟ11c..89SH%nKcH~\92Om饍1冖+%v8e%X|~c[[r8;t lI`<)NZ\ƯI `RjɆ/ uBSٕ5{M ǫ#bOJĴn'Mɹͺ,PY YfC{qT˨qJ'@Ն?ۇ79¸xəRWEbR5Z#2'8'0DZ:pH*YO3y_B7f^nd[jM[@)QܺEיM뼳]dv oF=xoH<ռ$i BO+~{!bX' R@wE_hҀ2S{}2KY|c9̷%i:GRTÀX^aڧ XvJ6h ŽRh9Ryn5kelĥ;KMYP~jqKK&1c+Z_gwh~l38Ͱٿ>IDk> waV%]r\M-}NZޑʽpGeP}v레w/ұef{{R/~ 7g>(aP Oor&6wuz'߫,yEا(YSQ}%[Lş~ v ß)5 SYSwP,׉f R\~VamAY`Eh"T3Q&$ F{{7C'uuxO6I7]̹ ~n. RxxrOr-Fb׫T|QF^]SmnE&K.-g\p F[ub[^-ά_Ȥ7ӬQ 2􇀘+^vLq3TeIO`-M7) לUըiIf"f ¸IT<nڬ0Qm)2瞍LEAy 8;sV#j+6bEM ƚ&|d>3/|!&5i +Y :y_hF<鰧m=`=\hȔuw'BcWK^&Ɵj)z*BR/^ F b}87vwi9 \[XYi?s '_| pĒ)̗6F\C 'ys1d`]'>m(,L`hBu%a:˶:ˉ(F&Pk1UPik;=o?#[tkHuSib$bnF*'mK>G-t|e =.@Bw_!~\IfXaV[3f+wiS=)i>q"YGυT`Aĵ[Z.WoBF)Z!佱 l`0V35 PF1J03(cW 0 ָfS>Όu =]FO|%%&P{0ȧ:óUr:D)n醖tKo 06Q*|Y\Ni !`rK*bC.:fjМc~gE5,Lܼi !k zߥ7tjT|y 8r'$\EIy]sPBLFF_g)xl";hҫU \ #'NF wyAf,1v,}mZ[TB_.M|o+oSu -R֜??Vҿaqpt# \AV k"_^E huz}(q=ϳgVc\߫%tT3P}I- d "<2vUeȲ|)YLV7dE~݀g>nثEos\>Mɉf[/im[tz˷&޻@Wum1_ց!l>i+cbmndfXU9˱˳A QV]8Jڕqq;}R2]68~O{s͗ʪ=mc=cZj{&jQD\̯\aK_\kE*FawdZyq>}44?C=1WNbn&L+r~/jپϺsʭ6FN&@bE&aNҫj҅EKDe#јcPaJ4l8 أB_@9! 0$N^h*y˅xVVt" o80fYך`:X%n~ZCYPKa!B$8g4T_-E Tl,֥ltZuCkDo,}m\!^\]o\jGWRY>}\7~hDj+xVKǿR>;倚gژtA36W%׈A3c;tb>J^Z e'%+J(~FL[{]yU@Jl,dS\?_p4 hiK`@iGz0͓D#a0y:Y;{)5"L+?zc,7uI/_5iubFķ;.O/H9sVoM$Z N?k YF ^4u)M>(ius%chlztsZsD-ٖ#ֶ͈҂D/E_V76ZîBfA "+x|`%ء|HВL,"C,m@EʰG;=Ϝ2 r'rȫ5L5:f*k>}3z/OU7ysfeW ɕlbٿ+IKH)*NUK\aE0F&81q6)FHR ⶆQ{ci?37cc 9 w2qi[C@:dO9r8"wq`mJl撗ʑvz {rȄe]@ỊY'r<[WV$?i^_ER _ċ>ƊUz_:Dt\ּ9=Cb߮7hbQYKX;J8DL\.]}{YC͍sO3\ZyokO/hF~TcOfѹcV<)bT^llkEw]`aSWGh@I޽U:>ztlW'Ո36@2mQ.׏YPE<9cxnZf#U~_ݞMZJGULN@|-^jny2Xw@e.(,%an>qOJS0y'R;4!tt| >K/B1W/eljO\Mq/ӎ<7>~u}<9^{lsÚi/˴Wi&qWDc285[ wEz5$Mѭ Ty!>IZs$3g⏺j*60)bdže2h+#-+2եVKȪy!"n_#7 mJu1>X>!cj3.TРxdJ^Qxt̯mtI4gӼ>7%Lqd ^,&*DžCOIf"5j#y|ޣ/|r+_+^G,FF '(=s*I'jkbhmم,b/|_Unv&Bg+h+"\N-ZڄC{ʔ1NOb U)iY*>/l5]߫:IPm ],ӆ%Vr NaV|k"u;pTipnSVԦ I4/%+jY*r%5~Q+Od,1h=*ӋCl'ʺ-3ڪ݂h^t.1 )2 YO{h[{h&"d+LUKR!~kZ2vkO XAʙQ|[S5Z?Hp5wT( OA^fD#"8h-?vllH&Aи՛ܥe."OrcM֯8n3c6]lLIE.6lE u㠀soULw{h^%0nRDyH][kh 84>JdH@򵜼)@nrV$^KCڎ]jq5+H!yoJaTRoIRGԙ/GpVI}uw|>IGy]=-*Խ1WҜ3D^ydIU|[ׁUS;0eG\ g[)!_❍v~%q!nkf߮lXzV]M).W,6a͊OX1Ms9#˘,hnNyfou+ (oKo%K DmZ9\MbQrsRSxNyCkߘE[Z ?n-V')o4? 4h{{k>/=*SqԹHݕ_i/N͔hw'ceҒH&~ZL36J}rw9-z2.g[OX?2"”5|d,.[RHPhX5w2̒X8 Δ!'9_ɁNl&ӛ +Zc~[EF~rܗhZ^ Cm[v}mZ!7@^pUtF]+Eΰm7;Ȝ[,S"+ݳѺJ&W2;PwS??~/"̗TJҬ ^b%m 9kv!<#6QYJ4 =[%mx!E(&4>(ӎdF RAJ\jڿgNmkEy}7EPV;`:5f!A%Of'629Jf'4OSJ_OsPOSuҷyw b ?rX L' 2Yz{/hEuT;`sKr[!Q>Xy*W;ݗ@~X0WmDIC!O"GZ6M۱ ckS@)W ǖM,jd$J/#;Z)-D]z7B, M~.T LM2]oV9z$>y~. $cv}iО2'mK+^!KO&i]eB R7w> )r&rQ+x׺IOzq$0]xPj1BHZG+NX Ջ4z`D.FI] >,tAwZ$Xu;ȯo5uɎn_(?4ک}u,|]Rɂ >fex2<vr&C.+{`1!5LRbN?1y"&FQ:!6Ie_$q[-׉_{5Xnd92r)yɺḴ8o{OJA+RN[: Tahhtz7WG$7d!Vw Ԟ>JxUx[GFNʓW䔍w삕WTzdSuK6&PT^OpU0SL~gZv'&5iZ#pY5_s>F,o5h0^8ԕk/5[% MY ~u)'IkurRBjT%hd5hZp!M@kN1:اP0zB-Mɋn] >oVjW"mSC:KH uϼ† ^GsڮdN0zL=KIވHN=\h:0/7w􏺯n=ű2VMV!9q<=к6ˌC%B$^NPk^MyJA!w4 ݡ ?`Zy1%:x6D3K'ja"EX$({km}~>y߶@9<"L> wfvµ@ZhAA*;˥ ]q 낅=nEO3 cPj)0ۓ#H !tۚg<[QnqEPxGXRhh 2.|"3=ܻK@ g|9_ ԟtsǠ+w־?池eN?x=/]Կ@t Rǂ]fxd u3&gnϬRr|m2dxBzz:)]5.K{#dl0 \ҹ=W (YAJeQSF%]ԍf8^xIH]%slfJ%|<ɀ>In:*0'q(yxӌٗ s)%A%˅@ 뮔]ɹ"ĶeWΔUCNҗMM=BX2 J;˧}7 o9[YTֻVqG̛x 3q~$إSI[j`ТzbΗU8zܳbϮsՂSXҸGFn@%(IBwy+mA_^ -As>B.'jEātZ-MEfPA{(L2owK6 be=z>A:IO&rLQFn ԕ#DNKspyQ\ NLwյ}Hs:R,e/Jlyy$-x;1(L?]I"Rk0!-ݤލRcȐ2n-8p߳=ܗ}yg]wszF< fsV0)@y;iU(}A_ݪfo}]j%e#*.k㦫Zu+w/~?ʣW>+#߭ᓀk(&Or%zx,x0=eiS`ot{q7¼8^ߡD8[ TܠY~H,o ui8|C܇迏y``=&b"'3tݶV20xs䭀I_;j1T` x,,rZ;EpY$mt̶D§@!"b ZmD;a]:|sk.+&sF[BšꝪΥpGxh%ޞcxE6oAwF)2÷^,Y]~b0Ý;|B58bz6;ӑD|蝺5'Xl⡠+TPߺߩF"nU -?A!7枯gZ8ܥ;).psRxYK`Pmf2&WBM*e x3Sϲw$JC.2g\rnACsnzpȅ=O1&1fVK M[J6zsH7B |Դ@˽0"Kp6ONDG[a2;*ql/N)^^*Ɲ?6s}v~w-KaMENIP/AEkVic27 ieLL디Rwt5og=]Uʼi WyKqRBHI'642e:f-c]c,>Iꑣ5Ѿīz_'ɜg<{h_\UܩK-WS] zԱ؆0Y'kq*IJg ,wy oizv=|sfaQ251r`m|f[LU uP֨WWe4f.r!yIAՕ+Yjdlpk6ҍ7*\͊J]|䝇umxXR?8ҜG\m oܩ=ጀxu ۞ >4nLXȮJH.]g\Na c~#\N"2H3Ds<ĔwI'δd@y.1pJ'(:+y"r(jj)sM]3g_7˿Ofw#;?ڐOv6O>ёk >S_&mΩȐU3I# 9M8%2b6eɇ #9c##C̱>N{ZX-̤) ⾢ԻfM=ԗzAB8ab% *0Y &26f;/huR `&1( {g+ԹJ +%JR :KŚ{Z [z`~T""%oK|'?E'q$W{:Qj>$[Z]/ps`͂m6 7bT>2ۆNc{#n$Z8t8o4iiCU骕1ceR³އe֮X٥]Y-]QK&y\PXTԘweډCȶ+OD=ifhYے}l4EYdek?wh.D=50bxȒR|T+h/#SnZo4avtn R`D8U(2% P4"H:)tN,¸@lM-uZ#va2խ,Wo/~hoӻߟ]qϯ!|%7c,<:l,leIdUoE׫lU0-,e/Xp~/ZE`@.7QA:P{ d= A#ɝ]NhPBH(}P@2f2.SͣX0&ԬI( oBFd#5T5깵,G )}|MEUǷ`VXBAH)n q<61vmaDij~:{(eZ*_>>ɒNLE3],XyǛDJ5m?mPs`HA\|4Έe47 ;LW_v}ZIRˆUYGq_M.n4|Sx0r]}2hYg@mN]s%7""!x2xk@ekCp9_&&ӹB9'zݹ#Vϱm l#7I=.i}+*OF)ޫ@Tҷ4@勻xWkM2v-(@RZ Cx59lyh+J,t+doI|\\z zwt)&Yժ+t2o{>տu#;+]B><},-[?0prķ;N]V7(B9]~Zр4H|z?^`a=!:mݫ`t:|Ӝˍn8 AvIJ$y vdž&m ~1U<5WME3)v~{Dثzu_Ix̐\`mǜ#\S0+E &*LRi*i`QӆTNw"On<% DL9 m0;A$b beb}ҤPq-L`2^{ЯT~lN# \!_nqjq|3$& Ę3'w| a߸yJI2ZW9k&%(߉UӺ{Ӻڥu(qrF;3fB~_"2etO{R&Xl/KNNA$Y??X bs>8 Evfʼ(؎ gK|j@:RFê ) Lj#n!p简aœEqJ>,9'R) H%,S,u J %̙+earyN0zJB^B:-K1vTVn{\mm)<`:- $ @N6 &`F{KLGKɨD+#O&-v.]}?oFi\xTؾ zy9 6P+PWK!z5dJ6EDH+K_x't SKн ~5E1 =@aRa=A AaI6ivyR:I@JYHd;lElii#WMݟ,.xғ'%ת;4/Ϲ9`%cJ =7+8m &f XװHBW9:rb DTc}̇>3_q_W4#}`ZȻ6_c>RTyځy_דZwʰ掌.Z^Ŗ)6Ɩ'L,9@IλF9u#'; i$<S@Cxx:P9?:Z E0AlͩKskXo\ʎБ|l\]Kό?\wߙ}G-MQF`}% /ZNt*:'=GA2}!ǻ]$%1'.a{Xc,M֥#C cĸr:|xzEwza8ſbC ʼb6*-y݃yN$rML$\#c<*;}dHYnZ;@\(C5uL@k0$kLL k5#fTL< 6%77~SP1~a)`SЊ5i%{MKJ0L-?_<HH&SDEYbfvL)L)P=ЈNo1sD TϞ(`a LXm1qwy . y#]Fճh021lЄp^^v=wUt,ж_4d8];KK2:e+RSx$RovTȼyGL#b՚!eb4,Fđa|nCEboUٿurC[4e6۾TXֳE1wTuO[?˔h]+_;tQ"LjI$>' n7g9^>;xY͈3̀ldmlrU,; {ɃaDs{mTKv'/K*[du;Eo~ZAtYהڏYuϝ:_&n|k1n=!Gz[z-#u'DM/]{< KD7viwuw),΂%ƻ1|awGՕ@3:JR]{YfBJpKSx1KKTva>Crj]Aa5[m %3_?‘@&bиr=\ʸzIalԕĀ dya^XvيفѾ5.:kΓұulpBƓFG.~*.O.CSFc_ 5Nv0f[dHhHʐxpO*{+țC(ph研H NFwxttj t-ܷ(wðv06&8CAJ9Xh=YMF1mxYY[F 2I+&.$}8CL?JnE=ĈX#kS/TI]O(pܗ c'Ƽ,يxlk ,! ܁Bqgd~w{Y+hmM.- vSqw>]@?n]xCLJȰӉ9@'7:44U[Ou5͝ӖQpnDwcj`/пTPYDI4=!6Oנv:bv#QE_q[w{}k=\MXهϬtKYtesnGkh4zħA.uFKsh0xi7(S dԕǬ;Qq]9]Ǟ^ta4u3%j9~K*j9?F0f1'ТIaI1fA;5c ~eԊR4qH-/5 ʂ 5Y >$KnS:\GS7'n B'A ZU>2'@|wr*he+p굅b6QɥV'G$>Mz9\â1IQW"Ufp=س=Y9UDg]w=hק[Lc{(崃CZkt܍zobdQ3U9rYMā*dcWeQ{åe ʂR7h1OpƷ1@0bD0q4񿒪[,L:!4AjBrtLѡ&a1?yW=]Rao%ySbg,wl:i<{ͮef"|9 >s2035I0ԥ(LBéB<ùir4Im_v_Og w.;ý]UЍ>8bʦ\cX|1DrPnt1}@Ÿ2W\#S?JFdm+v#ڡo~@~wL,Z;xJ *Ue:eTp#M q?o? Z!̣92 >W'y[<8ng݈cYøzB-o% *HB!'9>kLNdݵ.Ra%}Hrѫcr\8^gJA,:,azGI#q:+q\#:נ~Kfm.GxC#, i]^} ;bC@5 5dqNBnنs3}cD%ge3 |Uz_+smPуH (cn4.g?fJ6lzOG>YD(ry৞'i{қdb$2)ob5>'lX0e3Unnoٙ_VѼG^ =9 ֈMV])僈EM l2iVj6{iN,ua1a>ж^Su=9GaU1n*MZNX4 F|썎hs5ṀZԬzT\x6|U~VsABM8k"+ڼN@Rb/0{ѴN=o1Iu˾"\&@g3јgB]L-ޓ%o+ λCLfC5Y(2p80HZUUͼј;)zQL)ĥr$TQ4owЙy?$(x Cԡ^ gK"ln3b o03xBb'|2j)vNwW-ΧIr>!0Á.>CE5Ccla> 1pЅπ =ͷ 6=HWDcݺmWN~UiS9濹GǯO"p^=;CKdzc_o/'6c/Ahj&|zzm(`H3+Brq*s:s5={o Ml*[o̫fd+2_vG;ܖ"D&"okttb?^zuX^jЃs]{%kgbڐ!:LB ?n:@ϾSu0um'pl KJGn' ϬaN8yΓ=Ӯ91jM߼t7]*לd̍;>+)t[6^\-߳*|+ƺO#Q~_5NqҔ#Ev|ٓ:{ W6XyCorxʡ7]wu0$R|G=%3xrAe_dS$яB-PLoPF`>}P1RJx(Fy2V;lwUm=z]~N' xI 50!֝-T`FF4tBT7P/7q&|ǢT XYTniG:+LġYDL]DXL?M-`E":án{`Gf D|sV?܏phX7=?G߁1\  ߻D DW21r(OrMNsq0(~+>Q9{s~(F*_ c0d? EONtx@xLԃI-mh{}rI(4fT׊+ &LǾЩh!? _p=_kX9e$e8]v)l1-[M}@#4_:0x ~\UUi5@U J3PI|DРw)ǑRX pm^~cJQϵpE- GpbPIQˈ 襓$E('(1aПI!~ 6 ,t]wt˿^ơ;pUǔ$f ‚ L0_mYJӽj(wO_ j%V#r[;U=sogdAJf/_ mIM%D'Y'~P3601aHH* u%ݑgW :݆kHmHQ8QЗŊ)ք/yux*uG$BS]F:v.KApm^=]G;{2Oj23[$ܸSgSO[BW;c(?3XihP)*ct ~`t渀b@zfẗ@ba~D+cd5"o>./ &TDK|֐}z OGL5T?M9Ox,SuTŏa3< r7;~8E|J:7R|!({i;p:u b9&!%!,SbvJ0}! B"z0y1/= ޽Z7h AG+)=)g)c)zQܬp0>RE<00+8;_ڋ<~mSkd(~Idz6E߭8%f_5q߅5Dw sXa# dcjR `bJʟ'F1?%,zS 4 Ƭu+ZKHGbSR35xPlpP@QYPTugvs7;1mܓ1 )|/=s,be_hOo$yZ3 }IK 6.jL's[*/6Qv2|Ã+sn:UBn<Տ[T'cLR b:^C|-W^U;*jQ@\+lE8qN&&|p俍!:An#ey(1LTx "/~:K:e%$.%qi'jބb{ %Åo@}7gj;&O?E2)q2IUw@֟+? Ss& @8!&GHZ`t|tBZOV y`@PnaQޯ,d & +,6p+՚.r|)YMe/\_DG- U/ou`hލAkL-fFqjF6n :ݸ<񮴑+_ 0xG205BO!őgB SQ/Bdbgfxot6jϦOZ8A  tmd()3zm'^Qe~G읔ƐC<0$s @y͋TclbZ9\POvx}jg-]ritDt-dtbr+'}# Z78LlTX#o S|K4_߽p':?U ]|.)U`(MH f fg&~"G=HUI%/Zuq 2:<7M$5eimK9)@b3@rL_@PFl5: &NG!!eB;؂8tiᑳGWN֐{z9G75 p}~/wGvL+xp. Ots;18̓K:3~}s|xFc){^X>ǘed* 4.i?aU7.6'8xph#ߢ2 2\Êh}-G E:9!J]Z < UqB!*hB :fMhuCZ !Yj rĔ emЙEphG6qY%;{Ng5{R%J|vpRٲf=uNX.4>p^ȋ]hgkfĞax=Eᕓ[xExrH5[vFitj$ow<N\|[h~Hrݨ(JT EKǭV%=t\\/fC {Ks;[A"3/'bWecNr|LϺg.gF04u?ޝ i:[ɐmmi%&U-x a-;1ݓ\q|5Q)oʪ=o@M^VW4/`wb#f. Y:ɱ.WMR:3<* ꊟE9=?iX- /WK:䆽CNh p'W'(XyoDS nŦL }~ ,w .k*VTY<}X&El4܂?YrÚQ\S5>V U-J7dF?>cD72 Aw7A X~\dj'[fh{A_{u?bx؄],ÞmKaxWV4l8$hvP?u(y"} 6JTd;oH{vsdq\ЛhL[\769[owXgYG[ 's^]gym4}^XB<(;VW\9po-;m RΚG)P4;;Aǖ#BY1G`).E4[(}ϱD UBSOX ;w Nd8S E㝯bcTR;-z EIchd=T9)EXƔʼ3+KvTV:D3%\| -\nޏ8^WFܝVћ':shzc=%s55 էG&Cr:O}7!za's#Ut >8+%^j5|{薋BB&|BvuҧmliC4{[M}s[%Ӟ~pd|AW2n?V)ڝ'wh e~Kɷơ*i>5,0p],[>UR3\3C# #^L]Rd?u&ʦUs.LۯG הwgdnE{\QWND  F}=s0], . Q9s?*sL}zgk{_naٽ_[! A$X\$dz"P#f}{=V3;(:oGd<' A Da؄F ~iIYVFyƩ|^%=]_u),_Z\NQ>B)cTL~UJH.1c))OIMvFxv՚jn9Plܮ"YYՇfAjuۗ§í5VtZ50K+vc`^hK^(žaxHb(&,gfgiZh}32'[aJ0˞J/ڢg' yDreD^JwZ&iJATfrrIIhArhr떇ȣ=/(#)\mZ1-S}摔AO .RVާfY-- oa KM>qʩ*Sy2)Etj* zT&C=|+"_(K&.)eaB_LS kk)il+ nH\ش"$ 6 (2D,gOB/8MkV:T4aċX Ս[Pi+":s Xul L@"C Mf,C51)*&hLdj"CLFIZ4L!M4i4M{z:{^k{w}Zg%|hq <O$&eY&ڷ,ź@#_߶,+Yvbػ΅3ђK߽[~I!JWPV/K}:*ڻb2Wp3/SBC2A~Fz֯{ؼs/ɕ{Qᓿ-ϼp7+4PŸE{ZQ>{ 9Krn={E@o;:E_Dm[ƕKu#}/c\<:>2X[BYM3 ,˫ @x*{ؽ8)["'+O-0JE뛶+>3Mt$ŪՃfxZw]狯(Os`8aqCtX1Ӯޞ^ݿ'ҧx\kUl3"+nj{VHwYIщZk_|Zth˦=~cΉW.Njx¡WUךt%N?CA(|dYy-JĻZc@iiBqޔCcty@XeuV5hmC[ضRk+GYX 1&  f @FYQ0P/,Zԛn,&/ҀRl=Դ-̕,l`l/`!:*P g)ջUu ]xd؅W9&o ~ )&bzyїnFLIp bHyls$ ]T1 [ieʗw]Zu)XūC|3wҌ(ں֗ׯٲeJ+kCŌS)DeF (%6=S:$MAQ[iJ'< @8̳^R`@ ёf:VBZXCz^^(ׅgD3l`h\ԊRC7D ?h6`O97ЂI+ .Xߨ cx" Zs RDD l Q`wp Z=U p) 6J O+A-L90i rP#$d=MB6dߪd@JN$M+ Zg=zx}̛j×ƎX}i|gW&iO`&`Op,̗zfg, &}m <(9rG"SJD5b/Gb` 7TRR]څ]sjm~;!1!lQy'{pDPPwԹiIOeR76Xz>s0u_?M.Lw6s|7l:)x8L)w{Pޕ= Ʌ+VdڃvB6פ=06 f@bqD D c]X*ytKqz8J7}"`뛙RIB Z[^w!`J=UlTm(#0PimAL߾v-:=~Nl/n ._ѕ1gߝi9߲5g7<@hLѶon7Y{XiX0QPӌ<4QDM>nTELj' }$ܚʷ'17jM7C6ãփ$ctjS%5j%8{kv&J̿NhQ&a58!lM~̓ Gjg0A Z @H8^` DXAFc|ZQi1h1WS|x53WbPܟ3v3I8Mn04B(1뽓kMeTvG5rGhy(YG\Iz(;û;r?{fאֽ³}zzkkeS Pbn!z *k+k{@Sf5raO,ow[LDžŒ-LE$z.U5)F:B8J Qbv%28㩐[A65%Vv ŬMP tN-_7CRcA1@RO &'$#0ǯc0p %9&̎dZ Nxt8ΚsUoo*KG_|m3R64!l$5q3 6go<6?&Ĭ`^4>,#Xۺ36Z+-)5vkJż0% y]#YXBa^(G9=ś+434>|aqJBwvm;͖tSw^$x㡧J&D5 %Z=r`A84ĭi\lI+j,l pANFdZ H; mG/<b\LwٌHb>6pzY*>l ߆B>7)y;uHx7֯0x%b"KG Py? Dt'CBmp[V\R<0+X@dg#ivRI _%r ww/glsXJUwUTpI&ADQ0ɦRvY}T>Ӑ*R]v^Ǒ^V86?z߁),ZħwުJyoSV;w ޿yysA:9]* FA8AQjdh6JEy{>Wf4v xmk S7R2$pC'i;Hzݟ 7sJ**ƾpe9J 3P(P9rG8$(oFz°n]-] 1XB",#D7&|pC_M47f":6~qАvܑ :OhD7ySHiMI5ЩJd ҄۹^xd>Qoڶ8t+nwhq;:,{5wo{,/~BـO*n1KE]r1N%{8VE[VAZ/XD B)ki#Eh6l*u r#`ͥ]heDZ1i;jb'WIhv@0:ފ ^J^@bq3Q k{`a@ "fX*:4[uԺ]oh K-5}++Įh(4wHV۴]R?S".yy&2B˺AhVXp?̕yRsagD/[,Bs|#n&=%9cdѕ6 l p4]`NKZكeԠX la$ڻ oU hziz'߻( {䌠H\JG kW3>Kiؐ2i0b |1lQMk ͕cW"cFFGɝ3ɄTm_[;kx͹Ǿ㳳JP("|asgȕ{z8vO˼'uK(^#eZyve~ERx 0G'z()b-.S#ځ%yU(KX81Zsmt}"A*Tw bD&7K~э?ǁ((}B1# @R̀3@ Aތ7C&E0}r0$036B %WATM,V"4ZBM\ouݵm V Q}qbלD%3'0X q'6嚼i–} 殠z PZ'!W1^|!Vťˣ}꫚G_m!#ZWR!W;kh&j)c' qa uL`EQ`f2%!jY#STB4rxMZD=iOk-xx Ep]7 *:i*y$/tpNefܡnK82&0k Θ'%i !cҵ.orvIDDs_Zs4kr_P_oo/$@$x@L$":ZEsJZ5ٽbf31{F+3ߪАE U ñ7xw߽r|m O6( po(Ԩ_G×a ^.(]իLQQWX()-%MPxT y8Y:]P8A1 ̬tc_{w0F)` o(Й>qF̂nIf|P"L.,SV-~*9'sl{Mvd.q eWWY} 9wnnœ[n FͶJ=258KID\WJ K-c!J ֖n).iigDtՁӈͰS##Yf$,_Mۆq%'HWa:2Jq0Φ=ig,0֦@a3?Ww}[+h>㕲cn+SU^AYjsJM.qT]ޗytJzK+JpK ciCa]a\16sgw2{|57Tty實tQ(;Ɔu@@V 2ÍY*"_`<$ua pl?)t0p e>`M78VPszz3G)рT&yPZ'z&R:@u2 chD]y^Pc,6~ZE ]D-aF9F܌h,S Hbl@+d~0 ObߺTm#!A>~g#l;D.ǿ{|O~ķ۲&ߺpl Y{$p'Arv]?l ;d5c}5B٪v6<@J)X-_r@a{w5Ddeb*^3 h~^p@F sD3h'"Qb=(u1h%P ~ JfZZA}OGw'R,ʆ5SmJ -/p9sh& 5!PP\R]MJ) RZ UhGrqR,L ~{ZAXҲͲ럿z7H=ao ŹA  bȰʢlHTl5ּOwZ9uea 1x]qVވT(-q ,"ƘhWvh6t!훑o`bLJub]r6,Jܪ낞3b%E.&3},%WgJ10oC_j?;]7?sޱt-fLN

![ 0n#f1 C0T\Uj礈Jn8 '\bUjvȗ[~<ɀʻRH$i^Cs3*mqD0G <Vk:|!Âw>G2G[ž}ח|F64X3[pktg 2mune ~ڬ:)VPa-vU`'C"afRfb]k1'Tkag6#[ P49 %|p&JTf,szd6|m")Su:eڂcXt_]c0CD}TcF(`sjZb*jo.){TtE5߸nX+0@kxFB}( ,1sf4 9S2!>;ؐ22D[W/ԥ[`d9*n%k揇saCI4{M8)l_r#[N8_?$pV0 kR ܆I99UlHŤYt%~7>R 3C$$ir(Dkt2C$΍UjYs~ 'i^ЄJ'Kűˣ_*ƜNO gr-RTK:Ό9n n&P/c{Bkc]RR˯Ai[|:˥~zkg(R."_|"q/O^+=Ucfa"GEVt,0FčfPܤC3.VN_7QL2g=&%{Ï{>Sa|,&R DDd$yK䪱-+s,پ1PH$yRl'DĿϙjv7SNֹRz~5??TT4aPpA㩠imqDg"XZ}RAڗs(ҪQq"ApmJlC}TtFjӌS]9,ZwpE V zUBNm,F{&lT6Ypkjr˳}@]ޅFYMd>)>2:i8ޣ>z V;A\G.9+ 40B&S+Y LW]s1#l 5 ۗW&VݓzGЌ(- ,wS+AVRc~ Ió{UŊZ kfJX3AI@HF q,)OdMe=쒯Gt:75tՄW/j= ڕ(8RU@NE\vG*\~9ɦ̠GߚOT/f BS̐nZQ3V8_F$uM4fJ$ \:ѻd$^00mimUU=rl-&3e f#·Z5o=PcAd%vKbK!B9 )n(g1XP(!yC2Y A%F:D'^͈GA1kt+G]8)|j"s뛙uH:)&억>{:ggӦUDtؕq9U 65 t6 ,M.e&08"dF 3!JʧvoM'uJiܬ"2q IxjxR,gQCN3X:]\V=jXf ]:r]DPɡZgܻj!)2#xLi)ŪA8>"Vʷ?@B!H#\Zt<T{^jφUI]?υ)Vp|FP nXLTi-WT{ȠNdmmŏOt{(D"bqEHEviԄ#5pj%`;? ^ ~kg}MsP gY\춀gAGhIW+S?n9fGNJNb1U`۰CaHhn0)Z@2l3Rj̛/x H@^(A28_IҙP3a%PE~~u-"u3О#BYm,b6UڰaZa&|%{F+&Š" 2l$&!PcyKLTjj4י߬s |ԣΣ|תWfI0ލer†k`;sEZFt@ejWzn{{o8l"&m-bC[ i3S+37WqK _O5S}8w\X_.^qNLc1F2(Xm T !]R^:z&cb$^A|cYPLOp~N'Zv#+uŃJP&p9B'A8\&Biyt]k&xfRIg&ux%8BQ28$DM~ _[Q%;7{pmV52&HЀpQA栩v$C:N#APMvF>{o; b(5ϲEt_3í^s_Rݟn}sC6\o$!a;^͵/䟭^.|x\>y1ӹ+I Gx ySqk\۬GBW lⱢ=a5EN=Z|:dt .xbشccJ7B9*ԋ/% <>F]| 1;v^#8`&)PbermTg2NS[S6-F,̬WVxā/0@lHM?ߝiIkX<3GORg Ҫ it[ST] 6# qL6Ք/!o℺_?,5l=@aaa,CwN7h74k!By5m RFqِe{TG`bpYJngm,l!(SQfcPTRlg@:6lSAp(p< 4QHPIZWl& C)vСGhرSuqk<}>@sf SG0Uhk#F"/'Y]#m.&cW 9뱣EƏK}u' LNI~o/ b.PЈL2v3u zƈˊ dG`eK'J=Qx#!iT)Қ6?tq[2 ztQ9r (|]ԫᨤ޼c*%"2=RKCh^OXK_A7 l]7Y6K'Nj?u,7reGQ~k 8e' FFmTZ{86arp&kO !vDPg _#C}k)9)C#*0'>Eb-bu_WHF?\G+o^Kw~=_Yo'zz"ZHx,G#٢CdHӵ*DH2H&ؤ:t{+1h |Ғ׶@b 5G8 HCcJ F7.2CY`nqbj5dJ9RFưNp(;̓RbeGFP{s\}vJˊiV󨩷*`;s9t{:r[ (X||ٜ nTO%=r3 vz^a!.'81m6zŦkJ4Aִ'Z!mt?PqyA󧓿>y:jkoqړݔzZ^߳A~ΚTT($AD z6vߧac}Lp8=8:33wۧ7o$ƴܪԤuE,~l ޚcNq"9햽O\]fE UF2ynZe( k?žq>;.Z˰uJ_*OlAUEs9'kvI؈ߛs:ٮ}ot HA3$׃@?]fHs'aGuJ+b #&ڼTvەgs~m}^:5:{׏ve?׹oܺrή},>*}P ctZ8fgF)_SUMˏy-ڰ.b.JB&r٫7vc \6B#l?E؟VmZ/$1nd[2ёwZRo}%?t)23eB:P;ntГmyeD {Q="4aVC`IT{e8dRgD r3sKFBZLLs'N̄q+'LK^[Y?;q{vn`{߼R,c22oDj4Ӳ2 Vk^6|sӒuLbS/YC}o)7quR9^Ϯ2+)ZG/\7l-nR!=+/]~gtņn1OT G%0;@' H%?̞hl,h-5=D>DLm=i+QzO 5뭰֩#_aVᣐm^@i^4  s N ܑߛnpKnW'o^a\W%.QsN jrIf3]%'ޚM#YerLQ'Z*%_< C!NMI!f T)Z5rHhރ{5RN108h9޽hzZqRq# weܴ>N۟kHM66MtNԋUԵGE+9[S0uvxp he=)kWuo{fw|qx7gݻb7:Ovi"iziI8g _F>5}'|hs?W%,[K|%z]U |4h0^alȷ&:̙&M8'5{ӈJauSd!Om/3,qf4QñPntatN?+ϵW`U(H)5zcM zsbynT.έa3ȞۻBQ)Y cnwRp%:k9]ҹ5qN~V}հhm~ۖS0j0 s $yhYYo1@} 5aokXEgӲoe%??vͷ^mߧӓ__}vgSV:ij=7OgK?HR|pnҼIQ؅Ι&b?B-J}Xy4OQdxl>F/5oR㾧{lֿ> '"!,/)W+3ŭU5_ ;ieZbg;a+43kϘRӃ!RqRýFw]qb0GmX')5gZ3hVi|R4>fIRI}ÞhȢ*>ie\Ԡ,-ADs=uљxq 6" 3j#4Hît@Ա84nP[.xٙPh@8V~m~߭Z?%J^dEj7f_U~t;y♿5bW5]MۣnJLH$~\G;1}H'¹5 1.;:dz^ ܪg2^GzG+hd`< JZh⳷ݕr_n{ey[ s}={ĸVb?!f ծa7ބ{T8IRװTԼDMtU&PhLKnJ#rSL $c3QGZYO8%d}]N몡LM%l3?p)*KXodH]P fש.;):piȎ& qp~{6?LXMA((;)bKȂ4Pd|Z<ko>=jR oZe]ѝ7_'δ[ .L"zքpp}O+/a_PQ)<|ijH=+c#TDBX~f\VU9`jTBI.N*[(ЈZ Ye%đ`O+!e(! ɪ ZՇSAi>.A0Yk]w{d\|8զ##8S5(G8c$kh*Ԉ%Dexy;/AX%p*SB!: [}[>S}*{W5DQ5Yg uDžƥO ܁@064tC8~jB .t}IiKjsSdV'm???z Oy7?,(-XQ9C$9 )h賱UBV\'71Xso! |lci]{&3/^i=E3n=ӬND؁}!ѯuEyԄIk/aGECA6 !flf.As*_6I_Hpa'I0+[MQJsZ8Vڞ= m%MOzͿa5^=`h0@W H \CxC448fu YϗZg_'~y|sojLc- ~@\G´أǾݵk?K YN=/z39sΧ+ \κiqM\1ugJ[$otnX)hcHƛ;vEZVYU&M+\mڭˏ`l5^ͻ _!mk o&wot?ڗ{xV[hO>U6YkTbhX3%bK[,`kb (vĆ'EKL&ѨQLLd2p~ܷg/9}Yy G|HagGPlMkZR6\e–yPS'*I'ՂwVC'0JE9dE4%j56//> @4ecD8jBs#c]%7˰xnC$n. SOcGZlQg¬e s&m\ff4 ÍcDS 5VQdVd# o 9@o;i|>"BXPznNȋ#$6U!jdgY+I9zD8ߞ9x/A ,$0ǰ=*Nzv(JwSYG*f|(CzA*T\&X`sPs0"AִJFY6{= !2ػB?GVy y1.~O/ιy%aN؇fuom=gOn1عCdXezݸo⌘`7Vv"ϪfJˈi*} C^IAMPt„#PH++g.%Ek:G`L_8.#0 ,~Fb=cgj)9*6]/ѳ yT'u `P&.d,ŲF$J1pqmsSS5)j ʷHf)eCVDHaؔ q[ZWhfbAjJ cV8l/r3!\]d|S@ؗmQP(I],?JgH1{R2YW uo2zĿ 9RPh–P23UBN,h |"P,q`̲kHԖP*cw?"OK:_w-Ր63~UZp|W}tH vєDK9F Dӽ#&a#Z~*X©&Qeb(U,v] G~<ydbrru1{T1SD[R-SF+SO9%8ʥzeWk{L%kL@66ԈuaV940yJy !L Gv3<ꡏDOJrB"$H{jۇ7=G+ $"\xªfɭwp:µ͡EbJrhC/NyL=d9Sih?ݷsMoB^!SqUa8HX:EqB.;6$cX *2PQ*S1RX?'߂* WÅ}ʤ/0مLjk)YuUMz$?߽vG{nk ՎyatMyD6Kåy1Q)s!1S4k/'Y^LH;bP֒1¯'1 p7ypC8HAltWB0wY +Liue2qoTӰ' KH#ަpr[r# suwx.bP׻}8w:vWWg%d\2Q'$7//$C`P- 3$d@q,0,ٓ ֐zJ$TNOrTa :L}DOJJ8XR()'5Xϻ̒J#X҄3Qق88Zgv4IS!9]aW^lfuT%☓$g^:Y=G6V̿dgMC#;xI܆@3a>XDYqz!+IRcEHX52_<.?\_?WgRUzMI4 8=U(d4>kl>8#!툭&IGSI%Ջmi2Vkfzg~NʩeIRNUn=uP3a㧟=һ14~rk>{1ʋ=?q3=\o]lnra{l?w} 3Dne|v7M,V˒&yzc8 y,St]EuLsIE{Yiz,/Wu~<ú]{|1Jsck7Zmvȣ '^< ו~; }XYv%mh;}/X~?Ԛy{)Us_ٶr再_]+wr!7T~=]CKz?J ?jr*Y7?\o߀Qyvܵ;·=|#wΉ3f0u*hJ 7`^فgXWgf\$;ݑa3C>f?i+mVq%/ga[z?K_(lXoӭ.jv6 mu{%NJɰ@h~ƍLJ R^Vh==8c%X$1U雓m#忚tǻlqC1LxcDTAͨoݎ:7 >͘<{YN]ȝrT/nBS2 cڶԬ /w4$XoW6۸Xq2mMbL[U>p,h)% C E6%9SF=wOm. hj0+3rmSLS9|Lw8݌3_եBi&#l-'szISge7ߪ}y]عbZ3VryOH^r ĺw6N<yŰܠfS׸Xe7K*d̤pi1W^oy H*aGt^F2ڴ͢qTsWd]S *x/W(=$w"Nw=s޺}XwƭhZ<c}TxdB*lI>iaEN@F&6wˋ-W&4\=7[F+>W/rF}?J/ ѸF ~foM|} f2L bzQ*%a}b$r7rbQV#k֯G>z9l3p@hnfcM\pѿ2Sq|oa8ד4kvhRDDJPsoCtbj_oy=CӢ\D [F}>' \ણ rE7/dfdpҭiajNSͪ(ߏw;:S4[<4㘚AwtұA,1)I[M ofm׳?6T5i|@)6.Sm-"jG0t>{Ҋ_x'Ժrبlư*N3ں HӶ>}Y 3 M Y}8ݯu}k^?}3[ԃM,J7Rz5U%[dl9> A~{0i>ƭ᝚q)[tdʓ&fL޳zbf`8Tr3=JlRFam,=lw칅2sOکLإ_tl-s|V)ㅟd25:FLoem.~('l 0 d!+ZS|\>h,O>qֱhw԰Y+{E|*tUcTo(sN>=gy[wEM6>ϒQynl4k^BʝF?*.'T zZ"Z[!$;:әo%ۿy#ڳ>"بDAIrPG6Y @~ m6 ?Nh|7V]ˑۼ򸉩0  2]PRGKSwI+iCmH]lZI=\5+ISbjWl<xV-Ϗ&^gaZ%2Ѵl;bѵ69Z~%BYN<_ߘ]ܦ “+yҙZ?2}ٝn~C} [R{Uk`NS9w-Rtg}_`4r~C~yveG5xUMڄJ;R1!y vꑧvergozշxt=(QWBJy\ܢbK GT쬖|ZoM6թ-9Mgԝqx`4yՉW[c{e +e1qVfsFۺx5AL#Ѩ!DBbxJ'/YP29xl] mӿGC<YT#D[~|tTO^T+tzsp\5(Vqn- :ΌMK&)hiEOh L8sQ~ȕI3sv6R!qL#T9wC j׶!:0?!wVNmv13F4]{5֊l0~_qCQH1*GZΩsuƬy[ѹ_( .ur]ogE&Q蘬ㇿ;2iꈓ|2]W/PpnU*P:!77 ܲ׫kG*rZbxmܞ }|MT.]a4%F<: gx.>])T}e*vU佌j c0CR  =FuOZO(WQ.(u[]g'W5{Ga=ի)WVccOK$}0!C RNmy0 כ,_[^1$NNOwqzj6*"U Rd%'EgQB TCz$GC[Il>en"i%p?t=UWTW9CScvGDxX#fL ė2ݹ26Z Yc>v rarcó}8k*H DĤ긓`GM#^+ tjL$ɠo6-mtSsT6ssܧN,lBr!˫w!?&5tzztEs]gQ?"e.:7guRHF|Fz.μ,l>-]H>UC#??nn765X퀟G=%HԾ])&.H%0D*'aKvETN)gvDם0QcDj1ς4$:jM &Q>d OCr2˙|':\o!@zBzү%SǫhkIVǾI>ڂ_kL,~LW85SܱN(o;8((@uJ[0)K͕PpJY\HgUX{VY+7٤Iw;&0==C`AFi 41o3*'pB#xaܼP<sz>N9Bt_my{{NWt|,U;*`jvwM!4@J sY=e- WX|Cg4IwJ $L>)aR'9AXI @dR$un0'/¹Ǵ0`c*Z|RJcn]#:4&% [c6 χuCK,%zݧWv'. .H@5J#җcBȔ*MѪdTwM!V?H X'DH)Mjq!H*aqn7*qαu~EqJz\1卜Q] @@UBDEFq |KSm:K/[=[gy嶽 6jz@]{C-Nsڕd9zҤHؐ8``ryZK*w^W! - PL(v( 0fn44GOr1W/Kwk[ۭ*ZQ a@nL<*szI(9+ ԝܜ&=$/$.{/; rLaYJNt[n 0Y|U}}㈚$Z,xpC[MYIjy ;fȵrzR!0Qx!'cE'n0aC#tuE OpFZrFeUz@᠄!M@55<"m{VZF7Zū5MW|m*?]!1,W8R^zUGJu1lo~#; -,7D5D==¢"VCr0/52ZE4W@`Քmib -RT>϶|h56\GIg 5l:%MU+Jf7^4N^2>SA9;&C}{}c5}϶icv,C1F1x'#M{EWܳ.9/yj;_Q 򪃄]5Mck2~Ps@@Xj&˲I] HIqc jr \bL؀}r~槁ɣBU"|6,QpJtYz#") m3;?k._YU K2x@,M1[CI+k2?F3 kP^.*(ThN#an^USLSU^M0G0xawZZRT~-.5.y}xɛ{nOea֋tt?/_o ,g.XK R9}C"ȵTh2eOV:v#s-*&f)rMV~}~⢿"9.*의, "q}z\NtBǨ'6 ͊ٺN,"ٓR/m@q~Kt7/Jr +8{Y8WM9yM(|67&+i1HQ7Qtг}.gL:ʼnS*ȣZkpu{Ѵmc-Iarki·">mKuo>6:&zn\:G{FYGw`˝W0݋YwN&/8PHYѷM]bxea}1ܨӺ-, 8^4q!!'ܙZ(|΂gJ:X٪X*~ů?xn>( z㙵ẑcכŰރ}#ϹZP;&s36$7}qF.׹^^)K9{]uȱ`7Y扆يI'` ~HT51leHM %{:#a)Y Ƞ9 bu#xIgmh}#* kŪ1<ű>v FGKr[mq@gYz~t&%uOvsG0V͕،m[E!a+%펫%N2YáuR2!"UWFn/ޖ{ix0ϡ0J!p&JyjiqnێMغ'3'+7waQ9J#iSTA!$;[oP[`LmAUr5 5Ȕ=jd&ׄi{p气m^NW?/?xO׾N?gT6Cv8g E"];Ǚ=:4dI; GdeTS׎I8t`j VU;aR~]%vԶ?t2Z9L,kc`]f{f0]FwFAtHnvM3LR~3*! MPE[4WKQUd~*rFv,(s)RK֘N$W{+g2g C`iŷpD`cIN*/$7fb]N,s>'䭳9!qP:,o+f/M#kQ~iTj> BY|\?ьI2-ͣݍ(!Bup P sen7u`դj(:xvlU%r]֢^/ѱ1@GuThRD= ~x T5G@F\$T FS {1{cLR5q8v|I FC^Fniy=dDiGD4^qDMAǍ(BI= Z_LPh(9 n1GJ)g5\Nk\T*@( !iyzV9EҜ[u9]”VT>qZ]˥aF$]Ǜ|̛nq:DDZj g@ @hbuc >GVILutnvMhyl Z:TG*Qd[ߵ|h;r0bxE,coɇ?,b|giia|v M?fلV9?z%QS ;4;坳0^NJY zUHڍ?1}"jw:1&uKbzg&GKf^8 gm]7\ewXu' Ewhvxܻ4LJPlT`hn+ai"ͶJ֙&JXY )L1d_ (UB6 3[&ac( Mϭ2%˩wViFLade!d"p#ւFrκ(m[^gxdH__gf܉3Ι{Xi7AxM܃p&5dE7y|݈|n;[;,}+![P*bSĄ2h=O$[ɱB23 {+h72@'pv㴎!qZ#K.&#A9 ^j%V0 cMRpOH>5¼Qp@ҸX'8N?kP碕KTpP#AA)vqG̋ٳS'J {r[K/p^N.G,o-WKy9jݴݥN#bƕb ۇ+,ec͈L$n`Xs;욙Hh^8 I) ^1Vm;Y=gyQΣܩĐ- p|(񵍵#fSi|b  dGV7 8er˸uѯnnL۷65%?m]yZWcz/)k|[?#<];Q|hq$sq̭އ'rDU),3sMkj>W?ǥɥY298៚4 >Kf\SSuFhs*]]0/Χ11]燨hEsPѨnX:"%}6CKgObzѭ4gA$VBI,}}YItw̘{ko ǒ<ZA"}Ī؊^Ac-!l۳9ߪ~2T/;f~ރ8$4 J|MN䐪WJ45vߗ0>{<7<1l"]/5H$!o̡O$WGF$qhP-h rRHы!" os.~\ӌH= c/mOee6?% iW:G\( %ه%)Uet NNDӿ>ozbGD%.['ZCvj5&}Xwٵ#{={z;cͧ`Azgog(}YO2[e~ҵKZGՙcTUdqdSXSSU]`i\T<5Un&Uͻ#AvN]j ZM4)1+MF(屘4/'OqTY/V:FG5. u+^΃Ƨ9fj7?/ %E7 ku֨^vHž[Ba多AnZ3Sh Md|uN˥#tC)^&AD?NMrVò֜MJI|X:Bub?@h4Zt"MZ;ҔN7;t`0YuG @ f$z@>z3\‹}VV RT"VeZW&e^3%IpPbwDPi|csg&tcI&1#uN3UZZhg7Ƭ ņϻ=Dګ FcZظ;/s%q"tJg[ȌThA"'70A?# ,` aYSR,ؔzh*GVKYKN)+t"`[#_tK:Hom5&e}̯0]_8(vc%bfy694G8\C^n# M3U=]w񟐊)Y6ނ04-<6 lH5eېr@#\  aipp4/9 ](c z&?wX@5NS\ʱ3v%4~׋fC mk<|Q5]Oyskz+cU·M@PʇȆQhgQt>Nz 3Tc<4HRB&X񮱽w){7/"{e|OڕuͲOg3 igvbKVׯ ťs]]j-p6;&K븣z.ryuR{q!YZF*Jlð0+ol?TAAL|m'|n;8>p\0fzn%?Xs0~eB0I^޲kuuǭs%Я:K^G^F=[ Md@"yҹܸLHi1`TBp[N|nP-׏c5 FNoU(@?Bknq8H4^DZ\*`4(JȞViR@JTJ OcBߤR`eXs7@Wwۨ%D?+;b'U HBMj^]d3ɝ_?Z޼Bl5cSZXCZbMxĊCn3Lya溹~$nKW"}:L1w42;==4]6^壨LU霃 NUPҸ( a6{(@HBSJvc3 w"ոqR>qU~|aLfLi87zuHZeAwMrgM7xOHZIhkh-$E ]@ G%RIDr=#-n][e?^ Tw F׾2CbJ'0ϗ)w6fdZh[יih 9I(dEL' 5`}+)$' ®8-듛T14*b6|g䡥g=HLlץNaH$\e՜7()ߑ^c묗y)ן[y\09^l?yj54ְSR(GJƥZ|\'n>,SIqP̗/$D)xT=M{&)'^i)z%RM]G"Y- `GXk9%`l:-Z[.IFg:ؖ'2*Ƨ!)#_^vDLP!ieMB蛵Fg;wx5L,`,m{FMjeUp:#-պ h$hk\A,! 'OPw&)U#4< t" 3\倬L%zMA)e`L%6Cwe%9~$ 1ѤI<8 |{R%xBM6{k$𺥃|=γ.yXxqcܲZ,q~E{0$Vb۷RiNij&˘aO^>Srn%tLt)?4 { $ =ũ gUJ>'G.Oܮl]m_o;~oips-IRX>Ρ+^ii6 c7fK'r}QVgOc$ԹBMϢODPAn0p ޔ)0\h^JaWI#Z`ɜ,Q+KXν&R,k zWzJW8˙F-㸤Z?'7=^، ]-]6^"8(AsEg-[f>sM'd/n%$M%ښSv6b9@\+XAop_iSGE)ƥ<{w=Gڒ68KORL@0Y≠iuFٙazgnР͓QT]R,qˉø|W릯3&]%XsJ 0{K\bƱMirZ%qXe JAWDVwe?u_|Î[TtaFSoK$O&M,OM$^" wѡb#$4}-9se!uO2'25yH xj ќLY?L|ikp*ﭏ&u.9Əwզ٩$*Bͽ.r<|[]r9tv#vR"eeGU&uǵ#FS$M6oG-vKpYj'=xm{X$ *ORqCtADR$Xr5]Ebg!7nTHA$mV7ܷ߾SXզY;nǝp@Hi}Q_m}L1Zܞ#]4iYqZWV 7W#;zq!r-DG8LOM:![^vwKM5=ũ˅Vߞe?ٰDmÒ$qc[ܑKf=բ9r:]n,FybcRM-/;]gXf ͼ緖;e5\y4q4nRP3s2 0A7MAaOv *~z4NvҵLj"&>p NpO?~ms}^eʰ3Ӕ_ݷgA5ZijC\K}  m %}3lH\-6=гAB2l{1ߤr@>@5e&s4کªF* DHXYhH} pQV}'_%I(،f'{  ~yֽsq9a`<Ѡ}֡NAUn;O1Mh7¤FcJpYfqLO")ز EVce͚2'u>uݔ/,lz㒛fm+3!}h[5L|۶=^/mL*QV uf:<9ƶa٥DhSVFFi ҒQA ePt2 G_c1P?@×9T%C)3Rx%vBt+6Qly#9B.0D9Aj*,9N[;H8{F\beQUs+)46mt}K~ɰrڂonPI*ajC$|sCEu'zkI2wdr&Yet &hGKLZXGOB~uHL.|ӭ-o >QkaOYX<VƬm[h  ܓ"\$tfv[9щ] ]ߩIOzKpBo#YFz@م"XN09FS#I(JGfwa޸YlyFpE)[$ N4}X-O\[)%Zã|ޫ'+sIZql^ @ fr:'5-f |_pG?lT:M(5Γ<=I] V40P2 H!,o ;B#13O ,^S*Bvƫd tuo 2`e7(Wyiј8RNls OMUNwdU靯0٭{-UoaSӁfoF5UgQ%ܷtƠL]^4?ygӒ+:2:6&:ޟ_p;anuquPZ ƆKRm5z.Ǩ%,2!!UϾ ~?QrjQgE/\iA<8Řm:o@2&6N0tl[R32Ր(-G9*izU5mK[R1։FO˞oNyw&{p5V\K*"258`cTZ-& q\fUk8-_IQ|863-2$xm8 kp`!Q_[{\9ITыhA,Wtf}7{§?[SvB肂*Jɗqe*+]͉^X=$J\޳Yi|[`hb.qwȗcO7"0@`巾K?R۷dcX&LJ}}>#˃[w{(%0C&OpUd[(0bp0wϋ#1*y:@w ]`0d-ݷp ? 9 ٸ'=)܄4-(nʿ֧ U7ln.ܶ68Mm7=۸cz5ӊ)+ fO<:_?[2Et:"!2q*nb;oT81yiu3w CaZp rᲅW6b,6,23z>m/w;c_yzc)yu/^ܱ ,Y6Q3h;rObҘyO^w8`&Q w3Z v7<͗Wx`e{^N1[]~{ʣtsPA;>WIx/>ٍ/(04^_i[rzlkpRs\ۓ ݞzba'N'qMxr+nCuvn~,Hh.ۡ;seE7<֙{f!AM98 ﵦl}ƾނS\?pvf@]2rדi3۷Vq 2ar}֔^&O>ޞp]0^s\HhAFQsss:> ߞ*q_ ֍X \n,X^-ymjv}U_bp=P7ݘEͶD)b_!?YTc)']Y% ԃtc^^IpIVn6YShpL85\ f;x?}! h{0YPs/gnLfyͭ\P6k WR' ('kJ_ܞ9Oϛnt^>|t/LZɻ1 Av?cؗ?2m a>MxJ&'0A?-ՊT}˹ZրB \8֦ qg pj̖ppW.J[D2wAV`^ KVˑϒ-y:2mq=N2o\,c*1Ůjzb\`@.dJӭDET+X%H6*PEt=Un QԡN7d,sp phf\>udJ ?n%^t-i\#ZP(\? *q//\8^hĽ WruB>\#][&/W]'j4{}iFAzHU 47xʼnU݄Lʶ4 g'Udzb]?fdd`>嫔\R04Nn/0^Nõɦ&t)7<ط"~$ל'^{!ˁWwз@e99 Lpگ;hbU?uC.Wcͣ+ldsC:¶n96j,¸J|0g_RQ ux0>^kQX>?O ~Q*ϛoTa6*ށ4C^Cﮁ<$&u&QN5Ϭ7-(}EZ죵pq6hTP18x]n:}lM.iFNȠQ )g/RV7mAVϦ 6I_{Lb9;~nyQD98Tf)U^t@Q(;c![ C q+\&!|dG,V/~{tt<*VuL<DiGȦϞKj 1I vṊ+rµNس6mc{Зq Kyհ^ %q >]˓/̙-kV->OL׽~3{O|QK_US+dm m֦ WD^2Az,n/ -?~yjw}Ye[L(6N}К%4aҎ 4R7߮vL&B al܃m}~`^`Z jHo󅾟yĥ"|4-w@lȩ'CPng; ?#fW=/cMQ WH6VK=IMKz WW@5OŴ];VtNQ[.[[Aq$[V\˧< 44DAqV\`V0%\Pfr)ȄdNc<WgL%++%ux׼YTWa%Jր29s܂56 ?|h Yoԟs,挾J8{o`:=viia!eOχb0 pQ֧6qĒao:4i&u[/#k1|[iz(#ݗULƮQ#;Tc'ho`GrsgY"}+3QRr+3LXF-F>_=g2:ȕ:>uk㫟Z)dmλQ構Y//)A/M<*90j=mvZУ?eYL jC7?Fojy#GX.ϑ&]^R:̕a! GO#J LGh8mWy67SSo4y3*T ?{K9m*z*%'K UZ$z꨺Vl%:|N!)d~^ܸOվU],bT%`k{'i!r9KM#[M?+#dTo7(w#Ӫ鴜b0;fv~˄$^lP& t>JfaQ lE?ߎ/V ;cSwILuFY_$@Sw?:|0*&~ zL:IՋE܎朄O?"$xR,|] {5V{[4S*_=Do]U&nao]Z$\H{ļH%O_8ZM g!y@W0?utq;Փ͖';l5TFPB©&Pd Y=w{ݜofvtp~>5wbI$2hb)Iux.6İFI*mBMj`6Y']siu.C[/t.kK*3șS㢣ڿ4="Ɓ;U?n (κU|GŲUBB:lΈTݣ SrALg{qO-R2dU8@>k¶w^eL0 UkXU^?yQEԮ:u/Q,1a[ALyѾhyl"2q=ALU?\iptGBx=\GXq_i3f1h/PtiA7AUwvq;g?^nm;txܨ?{tAnc(X2 @YO=u4o}\@zrE-581қ(6y$3H[FsϖUyӂ!P]g7R?dYO(EGx_!~[dJV _F$jct;~ߏ35;\Ee]1b FEgip-7!7[ԊcɐK^5A#ޒ믽]彿j3ֺ<ꖩB+j CdZcÖ6;(Š0v5ONGt/Su 0,):|=WB $Bplt DT}Kx {S\xQ>Ԩi\Vmn] U[㋆] \;)X$? d\YkNQAK" tbҴO///9L}He`"^?BXDz@OMǖfIq-$ NbM)dPݶm7;u03Ǔ'<>K0Z$+F9`o2Q`HPm66+CՆZDt21F5S13$>Vcƺ@fLf{8{yUKBka)Dj3E^"PVUjoA,q-b5qT ;Òn"wzrt0]ac"ӏGl_`|vp[P5gL> p^/\m%!~YGӦʯ@73vt|*i/߬K9& ۋXq}4=Kwyj.)0oDZcn e6>KeDG>T4NlE.(CuCF=i?ŧz9l}a# UjU>йyOq,3u#GlzǏO4U0<7eh*A=N' (,K8PSuC_Z*'nGz fk;b ꃐQ ½W,^wA>v{?1/CEwiuҟ3/WW $mdR+'x_c_JkRC,FYyx6+cC X,!M6y2[jY3a{!U#69wϟd"J#KsH>&Z[eMVL?.qW>]pRiHe"]ois#?c!k'MG>>|T 8WeEoB,$4o"AѰFr;;~ճnORmGQRJ5:G0ԏg 4i\9kY!ɏs7WYyHӶwdN6dDھLh3+m)ЫG1)7<ƎHScl% .7ZIr?~ }]tI|~_ͯ'cgNO44^^P" WB>R§TJ]B3ڡh`s7Dp/"vdEm2GLȧ17pvC҂ Q4˫ʹ,*ΧTbtBޭ4a_E^rc;Afd)2F:ԗfG or 4V}ׂ%+T)JmBȜ"n8z׈kd/cRncW 'TL꛺X>&01,Ce:Ց1?:VڢTZ2}.%wG|MAN~YS)c ^5~tzͯ|L:?dLSLcP)3O׼yT !ӽ}ct0N]=C<-& r̯ я,v%<TcKeUN!4$϶˰U;d]-y࣓E7O2kvw e3t A :Ry>y*=n']҉C-Gay)xO僊G bnj.?o!=Jd쾶MW;XX'qȮMZK4[H ޽i?.Z)Оn @]>:}%U=4bOF)F|3jOn grvT1,K"o asJc6d)D#ۉп>\ ,9Q9RG1ǣ1]Gqז8An?~>ftgcP4w ''-y 0ºFva5@?`Nu̞LQRڒ-*RZ{l=l3>b~⣭D_8 (S*9\c*;[I>(VOt"C9EG2m75SZMhry6A)0P9ǖHF߯7rR7uTos9 T!E]/ 61CeMv+ryk|5V#xΡS*}WKA^?fs <L7h ({I _띯_ǟ$WMs^DpEŴ13{em_&2uh:tlfN݅6B؊6cFtI1ڈGmzWx}Nwy>Y0O6(+ԖP4Mb1V6HbS~)w-tiY nqzR%x'%7y Ԋ cvMO[Y@7M︖J0u&A W\9h`dNOڬafcDiG #.Y Ya[\N?V^s!@Mi hN߬;Yna*BZq\e.-ž ukj˫3K,klvWX'; HX&rYV۸v 3C9wl݉#_ . pc\)V]}bN5;ndž&T6 <t[Tf 12}`c!q/O+ҽ3uo$3?q]#P75=i.0s5_km1'b 3G;ىѩobJ&ɔu͵L+莴mK6}gA0gJy!>S#Oyb4BZJLTe"`s5Ɩ s8?8.eL;.fEP lE\1 c58$ʍޓ Gcch!H0vՄ-QEu%źzzidYw5=Rtmwzj߱%$e8!z4UOmصש`<ﴆѱvC, H~Ƕ;:44 R5O8/.i 2Fھsܻ]ۊS}fFHEO•]ȭ\κK|ʼ }0z+W!,ܭiiY4kBEv"}ζ1l6n獫a"i^Bq/uir3LrڔVF#0?X+ܔY?P q gAG3,À0T#K\:Jtab{ ]_Q%mxugӜ:؍3r+]Mb@yCI#Jwou7xt6n9=5R僲4b^4@<4,%xo4fPڨw]fCuMdDn 8\w J &lnE䌎"{2n7%嵖k/[LyuY[KCL!*݀< c0b]`愭CaDJfÂV@ #؅` ǎri;+5vr25̽9hx5X-CKi)6Z2 Kv+ o [48 $ɓ`**7 bXQ^ >pM}}B2"YvVLaמ{w>V\5z]'2bǛyFocR-)OָW4pY Wzٯ4Wsq}}>əDsSj\qeHLKE#FWhsv4̀腦Nty(lr!҄ 6d&.7@V!] \ 2 fˢ,Ж6b\u k^s'I%Z/+dECl *'emdWN∼۷AS:M^9?vc17|uFӇl-y]:V17g:ʮnެ 3?N}H\ 2Uxg>cDߴMIqe>AIƕI-<Х$4ͻ)WL!(e$)'s[YFċl n /Lھ};iޜm+1j@Myg7nۘt{#kK<-޾-\!?ofJQ4k̦mlbr\FPo9+vugk׳ZZ%rQjm>/ {GDCY[WJsXְ$ʔY*RRzFEʬ̵7pwQ[1\Jj1upm4) IKw*`hptzDZ%t.E78*2nu0=\qk+÷y+Hv(xu*)^˶yTzu"'> 9WgFw`udyl UmӋ"گ nNJJ B1ͣ-u$WyҚ*7GЌZnN\|!(7W*F–pә@ѥue% -ru̗U ? /U2 |jSj=xWʺzXP[*J%h.\\):pq< r?wpYr*ŁFeVQc328.n'˿$ֵ Z﨓M})5Y ⪨3#Ex}U|]ZZWP'3G-x 48E9XzFKJST\M5KdJgRNI&.9-a̺oCDR.^e*"@'<* Cjt :E}pߝ=7?@(@6?F$dgM1$7prntzZ3։㉍]w"n <8 [$6D7 ~ۙf pLL6^o-.mr*E̅ ڙ?v^z86r\U:n(>r$#6^C=dMcƜfUB$ |&L)t=Cҩ{Gd Ax 0ȧ{ $Zj'zgpr!TYig;2}FH.岬')3CwI^ DFc)T[4?xֿm 3s"Uj*횩B(oKR=]l9R5;\"e1ήPG*^U^")kkn?8XzYuǷ;^⫒-ltRm[f 4ǻZ}-X߇.M^?*9t[Et&8~ 0ޠ|W;IsU隿hQV$E'ӗ$KY66rf0)bA7n?M c JO?}BinVUbf>Zd&_bk"T`-;SK̕,rTI|n!>=q.iKb.+.p7Į~!o]\U)6`+(toIeoWHX9kWi >$!4qRUTݭLmQla!䆽5.Pj6sm_k؋Lke뛷",' @%;ja&elyq3]O%Ep?ͯ >en:2?|pp7,o+"0;2ՖH`/sa9'}*;=__o{nblH:aN鸑MP )nLv9ټ͸2tr.h2" k338vLW+O\Id qGݹSNkoשW"}|S ?P\.k?klv2v/iBWvwxhd|ƬX+n(qj\ʂF<,ۡ6{Ƨ,&nK !N -[e͒@q߇C~BT?H<1?a3:XvAUIuΤtT ˢoϩ)pXs]u%swۢrd'.@k'\D8D1q1-}5Z,<,mA$WKLݞUvh;0S&eD7Cr /٭ah k^Wgh9?ڰ\O,wK6W[og-E'ɥWj*vwD'F冴jIdm16jwq:,-+l"} }^6~BcO̠ ~rZ?1NhrEL7ا)Uc\6 1D^* pJ;TȾ;:^ST# n-Į'.>^S-039'\Xy! Aea2[ͤZ4`ya/6õ v{8\Pΐ c_5<m$-- ~_jW|S* W(+*'&k.=_a iM䥻Kܴ wyıO>K>68Xvq \ZhmT' !:F}8Bm݋wii;d%#MtiS/N)4K;=+!dSwdE$5͖*ڋ2N/wd{{X-0jBGѹ; 6d%#7'+>[ ыira;~ug˷`mNg5W0ƛ *Tf(xh߯h-ߙt$moTdPOBDTDw>ZrTn\(t1MA~)U\`;txܘ\xa!;Ja)>a̘a˺'U-KhWGoy؂lH4X҈RƩ IhկSy0iVxgkrrd΁&Vrq G6bĂ(p:nkB%\9Z5A 0bYOcȄ갩 ŸR䪙NbDŽ LR튐5P+Er({.v8QB1t਼_XޛS*!{S*/]Oں3xq()g`+ÞGȋJK~l2j,PvJUy--6,DP*7FZSr̛8ӆ>`~ur;~8.I8QFbJ`e^ @u:.P1uaw4{PZLTzMz3{W%R9EmΣ!栽Ъ9WUXa0"مH܄ǎ](C*ײq=f [L ǽC"^lPoZÞW oSڥ׬*ƣXo!nfNG=L/#.}=kc{စǎ dnv/4UѦ9ߩҡk~x]օWp*r}*zy'%:?e47oqRX9 Qڢ&S*῰Z@VJ Q}_g8B^S>U<eA&⡫>{J_\z_K)1@"OOW䷄ |ٺ+UG2U،k09 d\WD1L9]3?c@n.~czXV2eݾݙ[0ra6duj$gPo,g ӚpUe;`~Y#zow8{BտaSuJZ:8b Ϝ0OB텶WV7<N?WP^~dpb%R 4w)Ĵk' v#kЃW5h5iNB&(M1M6h:H}J 7giOl26E SO]}T~ZL0+Jr|J{\$8ΒUMւcZ+^ $(1YcZ6a%R/'>9hi-iݯ V5ut[+]5ГK GeKdnwMS.ҩ߿kzJ剺:eΝnnLdJP=L&usm[DlT}ʓx>v+053w WocG,r,TkT_oP$!`2HOCA0~8ߧ9}ȭHdBw`1 թ}u>ƇYi‣$@ l}R}#i]o Wit\=̥~vAae!`Vu=f+E)"Lz`>|Hz2 ZXVZ>4-疯St*2% 3&6Itx* |Q"V] nMčk j&Gaڸ QS*3zC6fNjTevQ++=&^>\Ziٻ|Н8JD)|hO qKupOH*{#~{Kvc)GU,i[@9#sU!;Et~:;8; aս,YI.<&+bt>E@g%ԀT~Gɗ=#A蘠E'jW`TErghh LtF#QS*Dqa*҃X[Նl8㕧-qϺx1 l$Y& ;'ݝLRuMǣ$(|FGn\سxlR`<K0mz1amzĶOL^;Sā/AT\cKhttfc[~mIaJ&9G|*}3ߵjsL%[T$~/74WGS0/-055 Z=6}MzJi}nZ5Z7L*Z rqE7d$"iR"qN8[ ,PV3 L~OO8_KAޡruGYo}ᰱMYRܕ8$lW==bH h/+i*r؞al6؀* 観2f+,mA]G"G|:Z 9J/pF:<.5,jM-`?!5evN>>~Ž_H/Khż>)c-4K7C֋,KV ;no*)˯[6?2\BsxP ОAl ү9_τsb)Xi[ON@ E 719㓾:a}(V`3M Iy,δln`V(]oGPMD<` ,$*pm]\!:7icԱ'~1'I$l #"-*EO tjrGEZ"Ytw9w'(A (^Pˀ8@n9/bB-1|sZ'RǂL~WysXU|+2py.n0Aa9f;m2(Qj W"wZ6/ T'U_DE1d ]›p蘾"PͯF>&W1 kaBsfBWR)rh~3~dU2$G<K _V=؟6f]8uS ͢8O~XTzGJ`PE*avo>AY{,aARٲZN`( ?j(~j),fioL֠XbfMDDjp'blj 30k?tJu88j %y6?D-bvhG_ T Mal?aM$s/Sj561<('"3vE t0bӨNMyj2wA[GܺF8foJLNc2bg 3e`@' -<>5`~)i r>*fǀ>.2#e,)2l81NΏ?[Se$HS8 W䠲FOOknÆE+V*gs2Nv3&DBC ?JNwL|"l-gI[0-;MA7~Ì[Kw;_CaFF/T{Th"R\g\eVPZ#d3& zi~OfffEd宭]:[lB_q0_̇bdc9rg7* j^Feo1a}NȤxGmAHN*Vj*1}ZLdmrʨe :/%.G4ȸjo9eN$]Ε-Fc$R؝πJaaW&,0$׌Q?~eAK`7TiMf:4N'JJ&n}ט18B[ ЛK򄏡P=w>B|FRK7ysPwF4jenfk SFDJiMT*(sE@A[t&l߾/ hw]^"h=) `'}e$4sWnTQrkg6%!{nKeaUWbK W(?7u*qԮ 7/559K#B7]/fS6{m$.=|~Hٹ)? Ji|Jk!1`E6h]YۉuKTR٥l<;1Xs=*.t){B>ֿI}T#oݶw!GRoUkG7"pmmS@LE(K- zJ _$B*9 hи7>bpu+,<0(9f* sja{Na $s+xCnSy螈޴И;hDԽ C-Щ*B[V1ZOaO;ia3q|tR/aZ^Re7WI:{9%21W9HIWVT܏1I' WEq1$|Ziѥ5pl~k+aFϸ? QW(j<) 50`kyJ35h 6Ĥ ^Z%=֨*]Kilyf0.O+bji\Q'wTnn5zLo+[3fk4楟V4#7젲*IێΥ!v]9H(=b$5qK4oHߘK :Sw/ٷ(W^ ܭ'sk#-^v]p" }ȵIFi0t=3&/H]{3XzF 6T'A͓E]ɢfI9t([@tn*3+$ Uu>8`J5lW_YaTlnʜ4yEplN0NiՂpCLQVQ RNocP ӏ"3P`8r  AvFgICt:zZF4Z`\|GHӘziŌG]ߍS~ۓ8kT/=|{ʃD0Qˆ7巯S;# z5rӉez3Fh+'mp_C`)$SO$w{uS8g/и:kЬw LnɟW<ӃQ }#tco3^0> t8p6#LH-ƺ'7LCD[֢l-Jͳv5=Binއ;NlVJhn0vmځb>l.+9_i3\Eb.]SesCkàIۂߓ,=&*WQ/*x(xLq=(ٚq,TlϫK 5!ɫ'ΘLe>,&~3z'^"fbܛgZ{ Č}|^\N¼'L͇!ص^O?{mZE}A~t1hq/G 1\Jv2`Мj1st;[v 43Qg .w  j)ŵ؞&\ma"Ls2ejdKfa;vkP:}"K(E߇NDL0}E0"|*9 pQ1hG\hE&nHḦJf֤~7n?h#+눈ޒv6Q|r) O%~F ,T퀟:_EoY,uĵ͉hZZ{ >n2H0#Y\YU';;[fӫ%6Ta6 Mv4sьB, G@O*YA2!/XC@Ml i KGӣwb7xJ (De)H,o/m MP_`{nVF6e1=LZ} ζrƂ՗]$mEse$r_-"ZZ ٴ?Ŵh&km<ԏk ];c9kpnewr}.jA^7)yvcdHdyw_ezvFe,$~LkEy7RykJEoesk3P\5cCb4V7"nn.0MEXmŎ \X~lH`X^)avS_Ie+l)P> õI .5|X9:P["pOCN.}*j*Yv3:u^;#KF Jm2&V,U):wc3FA2UbR txkx}K"ϕoZC嚽o YZ{Fm9`OnEaM_c}zHNϖ'=dRNW43DŽ#L卋DYDngGD~l겿k6ou1PdI|RU*V*bmceQhu cou@U#/Ȣ-*ԌBzPyo:[y3wgj`I$MУ B#fHV-_ ezjK=z$a~ZƘQٽM`9oš9t~rj nkԠJ|{(aL)9U: ! 7B%P`Y  JFQn7ߖ%dճTQkXK|quNVCZynQ\r$l#mJ$ U|.M'BKZ^o*?K[s2H)ѧ#Jl6c@3D,{qLy]ħ?8QXXUi]z:mo LPe4\_}wNv,{OsM^b 2OgoQ0Vjd-pam jGþԢi.=Ȟǫ !$P/D?J*!{v\*Pon,pp{oMuͥ$R d+  2q:Mv/ 4-4Nu%@aiTY-9k?d9\ZV?,ݬhrd =u =V5?3kMC-㖭i#LA,~g ztvtح"k,V!)?>̤7~qw]v]+"xMcMq;nBԻiE&/. > 퉪5ykVQʖymDLuy~o*T}Zv (z$X!0DOnY8oB#ِ֬ka(k#0?eRF\ P%^^JIkE {brTu ]'#Г?kڎŮ&=y:K?W]bqyJvA쬣Me.;03>N6rX]E6v)$9 մ Qv&o*,]+3nsU֜b,~n] ]CPv I~-f_iq߃2Z i-.w NRj/߿-(!;-ѻߑAcΔ-@Ĩ=aǣtM=1!t$g~x;&1^ytakFd4^yIrm]K9RݱniTJ#ЎEY.GFO[o1aX\+U^ŎnPQR&m+ Wr?59u_ZwD?L,0?zbRVM1]i6p96"[5>諠 ]'q홤/:52ZAGF~qk3P6SK#!rL tGO7}3sol!v1>h'<n,ª.pRiP&,"ȱvV;} ss#@QqqF@>Usw|R1l_bf4yDͳpl= &zIt)cSP54T?]tomZsvwNFu"}8joّDD:GO뿿Ÿn|rN33k)pA؟1^ƷnԹ^B_+R; o|ݬƲ4O9R?~(h$E*3]˝ eO?^Šh–(0,>d0`,d+Oh͏1nb,M0=l8ܔv_<XaoB)-=}r  ).Fjoױ>o|}B=9"†[g'`x,:;-oxj jܳMVe[~+ u!Ij$ 9adĊhtOxWbui,)pRcnn1K^أ% )@#0ȗqxC6QH6gd|Myu}TzUy4͟^x@Ry˭,si'%Tן%SCv`0zuFѨ:2c({^SIKqfaG_wi4~dJd).\]^A7` ݎSםFn~LEpS ^y)֜h:Z<4E1EcLlY* '7pgo;Yr0PT_+`aq H}~2to!XҜ؆TɼB,9K#|Cs} f߇W'+˚v'DeӮjyD e>ozqpߩ4Hn.!S#Ɍӈ2",*47S~u9tW@Z_G^`>ōpP3xo0C ,,׭[雋zC@كquS៻ EDZ~) 6We[jNI0az)l34p*ҳ_&sGqqt-V ^S㣸[pv@rG_LqcV& w$A/BU!D.PA" mT{9zBVPLToF}VgRj Qw~( TyQm-{ŹgkJXpȭXoDU^Kkr#~E8"9^uг`b9'KލkviM Դ\:~0b?m_z:ue$" 󟬱/1p(",L>+ۋ.'.61*IhS*Ұ "))%VC=祿b* %:4Y$QE7)^/#1t Gm9ِyrtQI5On9h+y9٭?y_-;f9614%ޱe/7 y[dc:\ԶadȟpWe\yGFs†;4FF#,CLXVazj/z\\mjznnnPZ4i>\oci"f+כJ4J=+)"n %컧$Q2$p2~u}L_K1WV @b^60]#RՌ361_qZ#1HuU!w ,"?W$uXKuaΐH,rES[H`CHzHk:L2#OYlf]$lwɏ뿮<'YE~]8U?BUkcXcut:z~=ߚ0c8vyrHDq1 ׇ%o+)I%HL5 AP9YdO.!UmTu7bKq2{Ta-VbʶJӒ P͵t[tߞ '?-4U5u# j+eEl!!e`]/p)[Y:)X ڳ@0w7]&%SIT yGz,][8 > Z+R<>fuzp`J,!s(dh9|G{JԘe+ +bE?G2JGm ,mw<`j>z'^JGًJ#*.d?0n;櫠jqcM?6~z`uA@ T:C^H/ql5RѾ<Ì"˘"ٍxhg] ^.k?N{яmIRwPKK.gzkuvEf`.Mk枓b3w0,]ҩ"w=gBǛb=;d`Y> ޯ*?"Sl]t/e %߷8C OTZ5Mq>nH~k3#0@~ٯ{`j "Eeu^E%YТO/LBAfDIE7M v"TN%/gS=$R~}-ùMHOH+4b.`2gI#faS6 Ozy#< W$Wnb!lW!nKr2pDųu6 NzR$\e l2zc]RտAU]ؠ u| !nneMM:xΞ Ьe!yAN1a1*"DN +yLdQRLDw:$?J5q;N` vU3滢',~A3jk{ժt*CǽYDJ7Fǰ4xoVZ5mU0͑Za C*6D"A66· 8z˦kU0(dҩ"FXnn^oUIDO'ޛ +Ci65à N`fߡf kעp^q\g+rUb!Zmϔx}R)s4J0F*J)ڑq%YEhF&vB(cu  -;1{rd544;[J["|Q i|QumΖ#ih2 5 l h5N/G^5l!nK0 .Y2:M`k[eY螮r|.sCr|gy[բ:EIRWok\3)# W+r9Rgwb ؇,n-Jsb?kf8wg-> 摸` T?-V'9H~<kQkltIeկ wnKiapknFE \@btƒ'?0Qp_֤EӃ!PRFֹ״bEb wY%|,,SfRëaaEΔAuXک?4y4PxΩ8´y$]r񻖏-Nq<8&#j7:Ybwoǘe3Kc@: fDb]*"sQ% Sh#_II%2/+w<槝L2\9nK•Χi0)^{~2d&xAX,]}= H/F[XS'G)\72{q1M6hwkxq G wϑbw:Vl[pi$~]2)+7IiL_O6&!/q\\ 9cZ.i:c'vi5UkQ_U[ړۢՑshK`xM"v#l{4h Me8>' םPو×!$mZ6;m=ublZɡK-8ξ CRĒ٨ ´o.&U>-8UmXdܫ@H3^1M4@WJF\H  Ver0%=D1G"+i~lAW_/9nU棢,0Uzp݁.Y t/h۪xx%֑:mK@hRHO ) ۼEv_%).~"8*+20iڠ/ JWU&*ȥ>7 =ݕ{x`ByDȘ{odTsGE3~x~,Ó0(tX(/G O.#!HWpN]t/ȍoth,_,䪑0Bi`R.\yٙz0: ?ٴVL_F"q觌+D(%sx#pGS5ʟS=FO҆\GPht+c7 ^M=X&wt)dp拖'_vGH{?jzͷߒW,YM.`b?e癩Zp YQ,I|h㾘Ĭ& )&XGB YХ6 @ZFҬB`L܈4Eҙ^FLu ֜6.('.VCڤ-b/Amœcf~#"BYְ`o#Ľ9q>j!r#g%4͉MEGv)-ӹo3rERMK5f-iXDuKo&mjm|T:Rbh?VLɣ9jFQS25+[)=tֲũ".|C)%!g}z!|> \\~;dWpc5pA2FSK6 BiQ}\?0Ȱ=5,{%" bve&N>>I:GkP]䒄7_Dy򄁨kF🦡q51NW{E|ZfQXr}R؉6b~HޘN¡I+7wW~[oZ=8'lPtNv^aoN^" ލ$VsiҿŽb Qwmژ"rEZ˰|-lM?w?C4 <'DM7B-m ~ w)Y7"$d)f@AdcDil:oDBY>xF딩"VI^=<UȐ<ݶAE.S2se\>N80x3,g9h FBDONcF4?ƬL`a!eӈaLR઎e&@ȍ/ۻ4k!m" KHӆ<䩢/u0wڞq C!&8"B̒b('NavLkRH#MQ'22­ C$ެAc=nB(jv tt^v7 $YB˘02Y6OhV&X=#>f3uj{~ch9G;L$b9WMě<|BnjP6>VsPHLbTëŨc(omW["e,`[[[G[UF,E@4vyYx}d(VvNLxƞYwLi'ok aJ'z(&ҷ.#\+5Xﶙι/S]bĿW^jh}s۫·bqڪtQSx"1 e#Txr"½i J]p=5SɬaLY)2*ό~Zu:B.u:=)='{3,zy@J$sۨYգcڳ#͘9jyگCߟ7)nQ}YjRO|qNE9s<>-L A袰WK{:]پ.j P{VLz|As٭uN/!\Fpk+Yםr),'ei_W"$5vN|^qWDpris/0wUǂ1|vBdUq~巸RcLw6"0suueʨ?Y2-\DW8GN2a6__W>(Pʍ݃YDͿ?'s=}*z$ְV YGݝUY;Ir%p$p6od!PhR;8PKJ/s29"z2=sxg!=dܮdi7<No.mU q|!uNosfx!S'8-) 4tD}MXwt&*'Vsͫ&isL#V6,5ӒE4wO_ϟW~Wiu,]m /{f=>`RkkW +.E(1Mg$H1!~34܏!yUMQ. 12Ꜳz=klZR jɵX^u#%uanT*a%d?,6yC1pQCCiYm^pmm"֎gglM55\*k-0='sXo8Sշ?UR#Y9'JQ 'l?N[>K/l%Sr]}2U=IkQ6jS;Բ?b!=0*;X>5N0L]H;US~_{?4=w- ?tRE f l( qtB'ij(pfpN՗*¡۰ӌs2bEY+_J4mUle@,ɵᴗ ]هnju~Rʯ2ey{y\Va&AuN9J{i7H)K6cMcK`7?'FSAvNV1zv`.kmה~G,y:)^xL7E0a9zR=V鑎*G& ɖ=K]+:&F,@ -0p~oeC"%=ь!澺x'V6)F/h2ִ>a$KܪJ_/ o.eW^gj2i=N`ۣmJ+h`JPPUۺ>)*7V 73| &Xܯ͘ py L!b(V'PЧsufSqLrYRl 3AZˁƟIxObk>UfEÐjfF #k gŪA5gTo%6-;WY9Opᛄ W6_:EXه9rqZ_~3f{c_"rQpq5S=7aQ}$lb#Wc %SZ z;/rq@eX'po.{hsN+ηJ+[%:ph}VAmrd㏰uNc[$'꽲Kň>S@a%n<_A@ڴL@P\n+%K;w L)&MN_} z9YX *y힯eqvlgJF^[b=vPy D؎#cN1>Hj_ruc}?Lv^c%QjfS`}Nvj?GW9vs*Aooj hֻ7к*u:fb<3x?-Yt>t0<+o釽U ]do$IJ@z E+.7rn#m/{{L%bViU>*}͊Q*oSOA)uEbf$jߣebj7pd6nf3і5rUhF7IFC:XbnUx^ï:)j 4Gޥ"M2*" (:P{%Qֳ5+IW,q4I\{CҬs2Nc*% N┵U?~J5SBb8J^n 8IǹPxqzZjs2R] !1@:xs\-E̵C5swp`DyVljz@>qf%jz6O]ZrF~gi+Ses0`ӏŖ]zXO1飁x*)LIdR'5P&~1$`38! #~*lT]]+J<?6G:AhM!(4ڄ9e#n=|vO|`/Z^o/ӗ3W٫T19;ꫯ6Vm-}p>Ie6̢vl1%|j*V$"\4R9a&SXXDلBw0BFb"/Y9FTF!OdS`)?_^{"tV*V5{pN=Sb9*4@pt={%WV~`cl&37xl66aKkǚ0o֊bgqZx p~֭Y*#X]`S54H^{KMG1mlmWl 26SH^;j9=,n2J*g&6%TQrʇc'3 # t16˝xgO% w{C*A'?a D7O)< ,pC?11WW^ sܰc_SZpGU &p " #Sn=je pe7NwqC|ύo_ΎeBXm(Мŝ9- ^4>P'^ݮV~ 6&c/QvAA@sR̝1νZI\-j2^ 5u~q1QwBf|S[T͗6AU뿾Q;Z'!OX?F!Q^r6@Ye =g $ 6 J|h1,dj "0(%L}R#P$1t~ܦga[n1Y,V, h 6Ί`$<8G+ݡ^eҭRewT[#wUz-Ήv߇m]+ 9-,NxltuxMsU͏v5_^N^WNJzqj1EFKldJ &<)yeiuU0y[[Sx!MOx<  ts43i._  1]T1^0Z[ />1Z[XŪ cd| %vvUKBs(pZ&* ޝiF&SMKgAP| ?.#Lޏ]aE'!_ x S}΂"Lt:1ϻi[O%IvKTh 2o8]#r2Ȳ{50123b+\s)yOh|: 6)L>V%jj7 ZF$"{_"n #`w u [Y}%0loBgp b#AnNk$[-Mjz 1 ^^e\'d_ZgCJwsL!zd~>fsTD7)fΣM+ܳJY0_wg²1$UaC"O.:?ncX̿إ=ma֜Pʉ^X8Z\QL`"@K >,>̮d@iQ #&bS0.HBo($d2Wf(#֠"(\#/)gT0sVQ% tp4;D=ؖO0yf+qɏ{kH,I%R:nch;6EVVs-FM"q7ˠ0> gz&toeIoٲC_-XH,f e* 1p?m:4JW19`<)XP?HpC:_q73/sܪ~zH u qqv}xDFKsq*GU`#$%/W^z#zACz$N ˨zƜA@/pAfIh +}oTO&z()'$&g/KgA$¼@L;E"%,BK+W_ C Y*^׽=tK q!BToBCwh$ٮ||!~x!HtUA @"Q$%/17TP`tH~g~l[,_|>K#y`\"Fq;_|:MZ`zbt+.Hb?.cAL%5ԟ++$F`)I5Ge&N7`[cƋ6Ic1y/ϸ4 2ܝR&$4Ezk4|f\M3#UD&eBPUʞwv~i+?09qf<DkP4G ĩKܛ8e5C#'t,"LBF qsje bEx,F4WⰥgEҚ9pXZA }3<lx<~wN%w,A3w6)zXwl=hWWV/RqSQWܼv_=%8wZ6u:'$t#w,@Vǽ6Ғu gA_(ΰ'1DџajZTpůߤV8jI\(I@Hf طAө/iJ=za@Gur2<'V-I-'A^uzEyyΗ،k}lye7kUYWkSHlS?ox3^9.tfxp0=#YK1OV1&]L[V{P]NnxşnWJ?g! ~&hwuRj롓YX\sx^qBa(#!<'mKQ>M3e MH4-~0AP,J<5 :9es ͑ IkYSG۳#lҷ5\2 \ #gRyi-ABRatwd|nAȆH*qˆZ^DdD9b߀#yۏ/T,{ӭ yd8n $Erl+V'n>z,?{2#oԆɾF5TI:I">^ݑɌ6)m|tz>AěҾp^ߛGdž 6>nuGp9^\W;^Jzbo7;$o (?l!&h|Coڍ:}P YpbZ؈;nYE> 1\B@&glr0H5vwEp(ueiVT) 6(_Pw (8_G>J#qo7sA?, ٯѿʁXI#h.\=d;P$W^yC(Ec\*ߑT'<Sǵ!{KJal*hgvsw<7ϔ'*ҕ[>zAS[AVd⃬aG! Lkڤ1_q}^#k$GVFA# c GG-[pD@\X&_ܐ wa_,@* 3ּwj E1es+Q5_vQШwZ1nEQKg;m|>d؀x.+#zXn(C$A\v] U /MK;y{<+-+xBܟ Ed8uhl%3ڌi=dغusSB㠶e Âgחl9e uL\XGyd&s)&??NBomf:{ٛB}Hs}FlَڱT04O{P#}uĥ*r( GR %yJ0[bv-*'p(}Ó%sP.Yst6Kf2W ߿+n0XHKްz`Q}s8 HUal p"g2z{M1KV ^˵Nms, Y?k]&CQrlEC6>=Hr3RHFϹ2wX5zϞB83$4|`*L;vMubwyBŋ=}!C`n'Ȁ\M`\ RM)x1.iX+#o| 'uUmy3fz9 At_=0{C5v#BC]!Ou\ SRyqJOu3&[&~]Xy'jGݟ?xj;\'a⓶)ʷ?]Z%sWEG.c'ݏ_T{KݧʧMS@^m8j3;ͯJzac/u؝-e} z\úut.I c`PQu&<;<L>YZ[rVtQrDIF]B@ρ 4ٯF{|w M`$* R7ӗ_{P,Æ]UpT+_;(v ,)`”.!C3ronQiKF߸%Sq2p~=t SxVȡ[ôE [|r&Q4:[>82^Fmگ-ֺ>g+"6W ɴ du"ӷ;{CI7:|? NtO>}UeAE// ܓ?- h|(7Nux'(|p%KE֯6̓ڂbwɻx<'0NmbKU19A:}!CRV,Bi(V,dTC|ZeDb+s+ KW7+kyKn~%%$EkvHcmfuf ~"J$*[̻c[8;b.ˑ`gyK>;?FQ( 빷O-XuM.;Z X7zDS5FMgK_(`OW~jeaӝ5 Z6 !wm_ =[kȃL 쓝!'-5"b4cXyp$r Ke QVrx.S5:<n21fid.sϭ<,ysd`!|hs_n0p!Ϲo7spo%˘}_ozeu e>iʡŔt9pGYgv~.VhުN`,J>c V:ń&+N:եhD+98+t u^_KRF})f&b@ Wg2NՀ܃bp_" ?Ǒ_G-e87|fٹ׹>H9qY8ME g+{'+ Ctz2H|fdw w cX窸u?|ռ(kAG f;WG(?Kg!n1m'L_>b^"aeguH_@?.񍸭j_C [;, ;rǞ_>]+lg6)Lۏ&5v屧 ņҠCk ߝVq9N1WM: W7 I2`}|K$Kݍ0ڕE~˼2Ag|\# 1LNԭ?9c B!4yudJ 2qI~5c[Ffҥ .: [J|9Z&h90,HP}ؒQ[=[rB>} Z V|IݢZpE舁h[L)>)H;ӵtSw|<ΟMlroz!!hscC֯A 4GU:݃\'lpCe1eKUI6=.4TsIw N{[%!MU5Zl__Pdg3qCՕC.VU׊f9 Zڞx!jEݵ=d'I=KR'[; J5硏g+j1ZD(hvTV;D6j UaQYdHCS<|UK%aOW)OڮZDQsν]<[@Ag*9v7E'II9{4ȣNtsx}I|i}rRxINgA [2^5Yu#tO؛ l5!VO:D*:X- aK9˸}rƲYRpEe/Ҿ}?y@?}0DK{o+97}:& #?+:{IҦȼ~E7 g sgO\z QkK^adyeVvdR,GӛCQCoȪ,JqtO$l"tϪ{|ݢ KΕylɡi팘idvZU]vc̓MaF4kP_ǁd +twOOwRUܺEڈe )hàoeN߮y|ǣu&eu)V^K@t_)'193NqgXkV9 ٩z\L oc" GPkqxMa -90SgFcOƖF#Nk_%D#a3>r'E՗щ*_KŗD-O\~Fobex uq&IΝ7zZ+O:+|fcx]}0l+gk|5!&Φi>ҶFaweⅴs8LWG M+0ZLur!rOI߁!B*%dp%R8:t q9tD[̂2r^vE=V8ܺ0هaä W|Bj G_}. ]K"#/ni(aކ͵Tc.YcGԹDX*6RL+t90V}XeX!^9ҩ; 䴡8\h݄2I_<! {d7Xڴ1${PDU΍<&p$[Uw niAmEc͠/Q_4V 2EKQr“ZGeTiM+ڴIƏ5dd?A[ 6#j/9zX g}lF W-<)f7#ҊAUҿS (k_Cm('qpm ƢUlEl"TAxLQ@C9PN\}nl NuCE 2e^>,Hv.$%>C1W62W2?U/PW/6j,8M4yKyk._3 2r;Zt./wQhЫx/G7m̴tepُZ-Crq IԌ+来%18SiV'b/zDh7m1oցfQbmsm+)sH(!'E_P !s}%FYpk]/ 383"Q0F Qq OMY<)BDC'-? eoJ]a_:&>Jlm o >R%r؅X|9ֶDdc1r m%̨.we⧟ +DJ-r/Bza)63'1Z.5n8T_0ˡl9g.} H-2|ՅWSDt+}[N~w=)fVGXl3 }eqV㤁BRW|AQSq5x}tM$>?4eN;T :RXɣTyWZ-[6+ :(mz+U-УYCI꯻GݣnKz~K‚}^^'CiӶ~ emwT-`hN5xH& &X; \lZ:jtc>M5Yx>#kߵj^Z[PEzOĵؖ .uWG;zѩKk~ IϝP4]Ӈ`O`7]ԕfJT|NcOlN;tkI}-tشJ U9 =bQW5?fk^R{a2nrݒ+au|콭+M_V~P]}., 6TW\h{]Iퟀ!79K$߭˅il&Us5BSfUkO"=Ycst,pq7^g,U|XY{ P/R!0S6Wv ,8*j:q:SxmN {j$Gl}s81C#VSO6ׁ7PsAey \] 2, SH1x,~kHKjd>Z} H<ㆄ5E_ӕ(W4E;.LFU"utnL4$g)`7ݥ "7P|T[|T /7ce5CR\Gu>6|\OI=v~S&Mt5>򹳕sﱌX'keΞ!t4-* o SLϾ4syDH,2$60a)c{±T9[It1lS: Vz<j_j]9 99 g@\djpϖhqXJFnga|QhV*lƂJGA)2`)Ua*HoiVhl\ #.cܸn? I=$Rwlԅt 8FFE "%cNʎ!#{-;dP=e{Ykv59jVqGtqL}w|)sM&\۷l]NA#>lrT ͝OpØLi㽯qzxɐPÐGY (ݐ8d72hV[п/ p!d+9p+ON%!hӾ/%F@G8ǹ/UF"I Ǩ>\/>dҰR tPe Ha'%C_8Rݧ9ΑƟkY]M[/p)א/Oks[z>F^pzRa1+|q (ң\o qJT8e U.ݲlnBT΄+UvKKqB|x׍+j~3ar fs׺6~?1JJX|~Ws:6%[Va'fTN} Q ͝ sڔܲ )޲7wK'|%%!ieY(fybsW?6>Jsk+jG@(֓72W7-shmz(ju v Ê9/8*-i!7q iM{E1a/2P,3NOtp$ u8E>Ǔ 7Җo+S7X*}1zB.Z'7^,_YҼRJ0crSS5[ȬeaIssI'ٚ`Mm~r0۳bssbM%[ 6^jZm^oAgzqN|qNIHOX4rm$MG6k# 7* Ռ b9 .2RG!"֐%s!kZ5mm; xӮE.A'=܅Q7 hU=ON1Wј>L*h. _\:*i1˳ o^bM[x渜fM"4üC(7+qSTbe&(|iB k$uevkSP Bs}ifJG %(O;y\4-5Ew?4`-S2OPe*S׶ߍP:V6w| ' mVNsxi'<-ȰUa9Sm@?+Ahx$&c"=;k z.MXf GfnS+q[U1m0HN^QA G;Y T]UI#*pMsxb4iT2pKRȾX1DւOxU|ӆCf%{J} y_fP~r 7F}3vf5'gnC`Z锒jE1QxkVamhT  BbеVhQ-I2cCSL0cZrf~Ի@nOp\4LYN HgxzO~ەuܩz:zPmXn{g,y/eb FwJ#_WF u;)7,c̔ ɦQ&0opQYZTllE ^L{+盦 E}R4/{ DcnCxo~/t"Iuo_*X+lqK*g[|#"o0ݲe+-SfwR mm3~x_Ľ99 &8ͶS 8r@ !pI1n'dIEﺒJJDxbp3,EψyuZZT%,ௐ,=S=֜@c_5[:d8d!'JiZypr므m_{g` Rޛrr޼Wf.GJFF> HB'$KD9@ u)ݣej*j$90G"]Ymͧi_ %PJZ˚u2w$tvռ?c O<̞"a ɑA>g+ԭkgb3N$ȱI|Ֆm7K3a}#VA9,ޜ0tEl d&/,γR gӫN%e|\^CK ,h'v"^x2i4B;)aK%''c3U(g䬻խ^$f^iHkIL5H7/{X MfWk[]oDd"Y,HiO=͞vN4NTD7kǼ^ImPPN  I>&0 hMMH~A\A⿥ llApm=n >]-'m!^=\c $u,=t'e7IP ~Gl @D;&YmE >e#P˖GPlc]dO#0,sqƌӡ2#Ywq#R1~G17 >N?n <Ҧމ._f|![=]aRvEXة*9Gc2-𾚉!CYl85yÚmC G['"?pY*zqz%Rjv2r{).@XrO>UHwi @ש2dY_a1`ec6u{wĵ3 Xj +PvY&ۓ+MSeKGB{ Ǐ Cl*V?xDT*]/2F. A8Hx?Lf7{C}q՝]fԸ`UUԾhxڳY<+mFtX'n;ܺ؆8 L> qڃ6(7sc#XUGg_7R^:uNEb0j-O:MVh+]Ϲ,H!_~3Ql"td 3%Y*8ܪo{u}Bf/H%*wXC@2lQ쇿3#$b;(rV `N舽.+y1.GV52m`k >EEos42HDkyA )C2E 1cQa>o~[a"?!mphYsq,> 齱i4ʤRzgk+X?ѸZ_ [ƒٳLHcbi(F}Q#˹^nmͅrB6blz^9RS[no4˳,yXP9.|^(%P߹8xm9ƙd|HzxxӪ? f<ٍrYVi/w8H Vjq#/i;d8dLiy n*opFt߷ ̥Am*miϒW0[|jJBPkڒ1YhP Ƨl) &w3x/1MS,Ax*N$ Gp龯f}0aTO< LSLGNU_$ Q?}*LomčcɌXTPuEҸ[Ƞ[,N 룩tGGh(a7rBDktK@I/Nq-7b, Mf§afm;܀qbb-\p鷁b"o\Sw9gYQGӹ!KL["cz0֡x߻qgM*8ޑ{VnÓHD|gU Z/% BT߮yZe2]hg+H8[B}b*eJ∝H_~9⫅9dCube9Qabsp m09cx16uYl0tX`U0>1A3 StgyBƚipS|Xw !Mo'{(+šF I [hR4)v1N63/jD|IABJ)`zr~Mz(O*Դy uFʃ 2:YYU{ir۵ VI)n:dh3ޮP>ݑ2Tp`6BJQAUU +cؕd-]0q`Lê0Պ*I(uwSBQԇN#Q2dև* E;TiL4CԎ)%1J1i<ȗhA`=!Dė`+޲g=R gi&{H8VE[3OBTzfϦ]A i&Ι9!nQF"0:[pw:( (ӭ^U>xl71}"Y(\$^>&4dXv˹XbmTdH@i rgEg8edτ͓oU|%*a~XFoś<aa۾CJk) =um @|DuU N बC*ڌ:^7OVuYXM)r14Q~tWc[^:q@ ߼ ~;Og?a=+ 92cbaKu-Vsx)'L[x $)`&/L MQX#PSd֝hI~u7iCL`i3nP4u]ׯ'@Qu"՗-Iй ˨UYUtkgŇ:GHѵyHf@ZN`}4"j?MN$i+c˳/`S%!*ķ,TP9ma|V-+][TP>:ݻ>z<+B(VZ` |Kt;w2k8Kjs 2 _ٞ/Rz1|Q5~ӧ^`]eёҋUx,P⏷HW!dDL+o{ Z HJf`@}`wHY|:tԈ'sĵϩM1Z}M'vǠ@ t{r?XdNǍ&ԆցdQr\GjVزq' Ɇ7˹FG lz}o@ZyQ^ЇĹzԅ-bΙH)n{ ~L{ی$d*&uϛR巊E+ nXy!؇@2GnR<ש+%U1Llq8Ht-3 soj]B"8HglOڭ@bt5mUlxR㑆L<{ ۪J;ngRC|޽yK `D sw"Du:@Q^_?v9n'TVb9|6IyI$baiVzd]}|EΔ[Jtz$viw4L|v|RhЏ_BԀ4 Ǎ?kC^@Be1J9u66n45mT˚^PjѹwM PI=gr:o@SI o*NcNr9*j"ssi|] Í 0)QX+kԸܻ_+H2[w~32o91li.̌dcۼ;oSk'ͱaWŽz';lUwWczoU /Yw~mZIf1JIHD\H4qw2\;bp,׋dsv~/وw^ײ__^3|cX&w݇B T7¸^Ϩ 4߬b"_goFU*_cAKyuGWmUyQ|5$OuKHl*U OgJ (`^Q+۞ Xqׂ4x6X9׸ܧUV,]2AD1WBNYxp(soXHxF(i^"W7IwOsx| X;B>ľ vp 7?)Αמk'N hZYZ~ h&9˞L}wQDQO͢Y 񙸺u.2 fOH>dB%!Ak4pf*sbtvx6HiU[ ='`fΣ:$nO0KH[؂E }`]i1`mXC+_GTuڿ Š9ʁ-V8X[W2!qfs7=ps7\:b@KZX+j'!wJ'}A\abFtʳ;*G^q!$I$9u! sR_zjDt/4 i=b,P>J/?`Y.,-8ҿS^IF‡{!rNO3NB#is޾tԼMnڡ*`S@zW`~sø#;[Xqɕ gik?kNrN ̴ T&0fw]qvW50G[:%n(R .W˜ͶZ['l)EL7Q p-?Z9Lۻ?C=:.U`< C#wCkhzt2^S!o~Cۏ."W?ȕclS-l4L`ĽbEW|eCyd'0]99;޶KXF~{8go*r]3d̟vtK\ ayv*iļqŨ0/ѯ<h M~U󴂜}2~|.[-}@'ڧ0t}>n@޼H~md~QڴkzE]k=lq\0UzC0Kw.a*]@s4sBԼuT|M}ؗ\~!]`AcQ͞2/fW%J|.; |Ιx_[1QO:*`=>wC\⭣ݐ8l{El԰{=00Se0xnfDm]2tK}{3wz\$!' 'n|͐iDYڌr̙,+ ug'?kҪ 24/w=:A^fܲ"V>{{W~>ܘ7or0.-8ЖqZt?!oi8Fe~'K+~o #HrŴ z{3J7ʹ-#rIao<ha_>1Þ=l1GYUD/1 (Zhgk{w=ˌ0=ͷF/`TPAX7^(ޝ] lO՗,HaiI:nj'@e "/-̝j,T [T&|%{]NSM' whŒw97a{4_­#*O! skpEC=9!Fҫކ pj_!R8lVAyvz9r-&R}>ãO8 W2Ҕm`i?O9T^ƲH`.p?MoGn-}O.w7 5kyM|;c^"T@_s3K}˗eװs蛧d<^gw@#E왺2y.sF )nKwfXĢVb$aYA]צJd}2Z 4Vϰ03WW܂o9# (=p! Ć-W)JakFQn׭r Y}6Ԝq[1i9۷d?~W<&ڙoݺcLNz)0QɟBzv[Wn TmCllk\8H ؍ މ\r* rfWW{IowM@u}֊mnpiM[crgnt0th\ WP@זw+$i -3-7ŷXq 2¯o:v 5pUiv5W 4 ևC~|Ⱦt2~Q?TR= ER4̓ϠܻM!Z7ǼrTF<~ 2,gfxЎyl.倳|kAO"M8!j{*xO-YY ^B0i!>VBVBjtC(z! -tF>,'ߡ9LfH)wE^0OgSWiDv^m^>jb4[e~]+ )Gk+Ko -`")걾ΓXn %=͵"msz}9.ގPP}%t;z/X]̓TTVKO :y\fI} YYmȰ8iOE=+Q< %В,fZC7KZ"tnyߌcq>oA[kXb[dDM1LpVp=Z~,VM/T !>X\uX?^V uP nF~o걻0?H7ik+ i2sgE1o8874(>Ѭ^FY : M9af1r!T f{r/ɠ$oV9]T)^3qp:$G[U#[81 H丶bDX`1,$s6%ͺ>1M\+2}?z'Ut!3c}b91s+ه!- jO:9aZqΟP={!E.7NOie(#Uט.?oYU[Xю|_mkGFTsoASzivretuCюx`TeqSL5^kOjSs闫-}(f}M;ѹ `K'j@ Ò3*)g-M{pvRϟ 27E29=U}5:ܰ8@>Lh9)nYm@̖) C 4G$F4}T~~6/juiኯWRQeJ:wyGYFkA<OE%c2U鐱-o}à w̜o pު~s׼[#]$G/0Nr*hpSw|jL!JNnf!Q!~-VBm*NH%"a2q,7_\8]0*ΎPV:pNr!~MZL[Q ӎҊ~/be">z-<@Jl=|'c~:67󵿓+S>mLih|fB PROniǘyke.ŷaTxzJ~෕h*RͮM92Gށ׀g@m;={Ls-wz+~R= (ҳZ'$pV{D+?GMrgN̑ iBa?֍TTaiCZqlZaW 1K qOfh'yz[kH|)^,$Q߯U`*/fdopA-~Y8 g3} O!0"s^Q4oͽ".{ Gڊ,,buhAGC.F1OnXGg#Ron.iuI߬4}Sj˴I㊥p eFj˪> 95W Aa/F$f8rqteLLEECQHpdkڡ7TUtbVŒe+M6 me|]*xԅHrÐ~׮O'@h=?hɾؗ 2I M[x 1tDjCZ A/Gͫj1l4bc)RAW,j$.CMݒ l~QGJiՒdNXL0a1~ة 7}*v~#:ybxTi}.dSȤϿ]asͨ鹨 2RKHFhBIqFJ@[6̏:E>_0Xe5_ ͽm5|6IXݷ=؁ 솟x6""^C*;KlR 9ptqmd +nFōGY݌l#!rz;TC{XabXo~IG},`}G *4գ̧n-b@COcŜΡwOv[Y!`2.˫YmV8|6C8Tz, .isBɹ:E\ 4WiH܄uj+#rDf`跢b-Yz!7^8~SH(C܄{)f 0.9"Sa* w0}bzG:olsMRt9 F쭹:ponuي(:iK͓! s6;- 5vYK]JLYqMԎv뉕ZgJʣ]5V DM#"EtFpʩe<5a*hb 袷 iS@S?3c aNbCi5ۓM\8^FTZT9iz:4]-b8#]& k8תQ|<$|2Qirz6 tkp67Da9j˂9xQ|b~2X`4^ D MtĎ x|bfMV<_1~踝#-䲯&40K+Wۯ9A⁧ーKb-Nm9'Exͤ0C~NC\7O ƪ nREP wT׊(/{Fl/ j`mHɅz.'D~$weEQ촅KLeRFx~ݢdO|pĺ̇by(jir\XZ}˗o-Y.1o ixKz jtBِe`tuBDJ [:} l,Hlf,% u!sBlB6@WyQf[+wYEsHSrRsm|(|@ g:S*\\4Ww:@992w+2wPO3DIgSk\XC7Pe$AYϪJ{+E[Jͥi=BuN5-D#`0i9!!)UيY& 8,;~bf9gfB~d~|}oJ0[ͤ6`\ uGԺ.kkhFJ5OmJ]}`1̱X't3tUQi-R6z8Pg\0>Xi2|Nh V$3jl.GAwdX!bUa>j]*$GObXK^Cz Wk'aZWB0r~P$N Csr/~z};۟GW@[\W;#XY16"q8pZX76Nz!(ZPSW-c '|з .'9{{ K&<00#Qˡ_:QAm1Ot,y+$m) W}t?Fhf.駭\aFت8]q5 "je4 i~J0iTSuu7  c-RmI_FS U0\ j&!.WʇceԼy @eZ%7LgmC '4EbZ9 s$*z԰)+%wm @t^JMJ]e1!PeFr0Ey4\M2C졦\; bek[~6p[->At΂W aﯺ("mGޮU6;=ȮO"n%?3^Ζju1z*VB({+Zcma1 7Fl7Q|tbZJm 5OJ4U1CvPM y1[|Z_aV.A$S5vzk ?k E#EM쾒< S% y[LigeC ˈN裵-i(TA Ucs#޴ml.E8Ҋ2aSY녭'[ۥ+S-K&r?4dJpإna@ߛ)` r!x}턣$&r~=}%Eܩ0y8C%֐b,lA>!Z9ROe48&G͎KQw]$vg?_\<0|:g=xlKAm6^jk.<ݼ黽ed9]v}V>yֱa߿Zn}\ꬬ:\_Jp91Ji{HN>NZNK?#7d#pօatas9j#9 u$#7gnr腒I [畇 *+-m!5ewٻ7ވW\,MYie*H]ש[o,'$̈́8\9 lB3E}M-Y[79zgj-t)ۓ;q)~ dtAH2InHgήOM܏:鿎-;j6WeO \oAoc_}fF~=p8h A!Mqee4_1{8Z[yGWy͒Cvh(Qq仛;U/ 6]38~]6m9\}kz+TĪkS2]^翭1B\P( ɹ\Ȳi})%Ȫݦh_k{M6(Ԣ}jFiJ&~~ x)~$Hr+$%>B WMFb10KQxBs>&/ZXyBiSb)䷺)LPH(D b ?uy"y,8ZIa-zDXNs 9 'Vjan9HUN=:UfѪC{ nQ(CD"3~̾z&rY;"ޗ{kE!F  Az\Wφ]M3i~2ILF~iMKn@Ʃ"Y~1TaK}ZC{l4ЮX} +8r86xM3Ev9~v>%?`aT4%q| >b_Bip5Y|g9}^ aDAe+j \g _1GhBp$ *&c] ʙ46ΟO ReY@/:oJ>"65pO @9}wꇶՌxpn/䞴Ƭ? =,gW{I0㡲>eHq-ŝPq|pmuMF$*wgZm9y)ilMSCTX"R=8e>?^c5Us$oQǧԁ^NyaѬzu%vr*G TR|}ۘ} 8qCPwj#c&nG:d`-pPn,(7pxw%({cUaG9ɔ:zS[ES@n}(K,v`v)KoT?@ Tc-ȰWI[ı[1h{P0|ln>}[qy/߂aɠOm:i~;gKע> s;X.cF"ɝHoqc# ?f]a>3O.(ki-%1FEsB̢F '3h8!crZs;$9v| 6b<݅/(H13nCz" %.]pkpOjAǾb ¶ƹMp͡cJ-vکC[ҳ"" pg1P›#'p/#Blv> IvBVa.,ꔥeUq+o%8H3'AMf٣'ƀUkrLdk~Dj#'iS#MT)<߇hG*b!7]Q)]myfө^j|ۑXc] 1VOS`:CzZN/r>);I @uqacdwOٺ; rTGKS8ܙ3bN0~2ajL=s}Pz;>^+l;GߠADٷvXƅgT49uê;&!UID /HqH*u;u6Fh{Om>M jn PZ&>IzX3_Bn3\UPy~4*Q(dLe"Xae>jp,}dDЛz@mhK@%[^C~}(3JT^GҼvc,?( ,yn 秮(fޟ}6mk3G9Hc`N(>TY rT/B~.`u<Ã?SDIc0ٽΩs@@!.ZP"蟾v5T-O9Z趆]OHNIM|k?Ta'iSHp[m;=0e ܁_a(5+nNBҥ dPy'%&_0:d癇WI>82NLp֝;'@E ޻hFǞA?&otE:,`[xߪZq 8$Mp( #c؛Eϻ,X#*20俲GjwV# eXPg+vGvq_X ;A&/ n¨l+_ޭBcܠ;fLw"7+OS;]l,=6yY{TP1?~=ysM`f$ݺibϭsPvws8't~"km.ƽeő:E=gn R֔K7_[䬡q*>~_}݁SO5"19Eɪc%ȣn(ObMxwۡ,i xoϱQ&PDq%Te\]j5YYw~m\%U?J$ sZW0(T؉tE/ު.Am0f<I<]V#s5KcwdIy$D sHn#J,xHlω^|InǐlHΧ'geᔟfڪ)s1lvjWvrZ 8r|YZT>J ;wVś>r[Ts]/Bxo|?x ?rg$u^}IcHM اs(\wv|e >Eضg.ކwd{J6UODEZFv7_%2|\s̗Xۆ#L!iOR FwR^E~M*LȢ1ߒǏ->M:"J(GY/ɩ/ꉬ#RtKD1n7zHi4t\gwC;$]MP %[g}!Oj|lxqmϱH5:6k iZ&S*WtT$c@~͉ml0Tn< qKY4m+!ϼiB/qX9?y*ABxkzƨZ=h}=E1VC@ S)ȼ5 |a.5$^wB);HvJH)V.c=QQ {K1-T=cAW\gzGD4o,q+ ,U^mˁ ukd"y o=oܽu4䫳-NQ/ /Q_R镥 tQ8͈ =~dL!f$(DeG c G"Bs X U`K-=ykP,imn*wǠI`4/sNǚh"Rj/=b.vz=,Fc> 'B*?1*K/ ٸ9/I}̶WI v$ 7wou"[287 I p7WH@yy&,gibZZU(SH#FZ<'FXfhvvmٺEO]ZIA*w `΀cN!/{GIA$[af4l#ȘTBY"%;һl1!ˠ,Eo|;wܹ^GR c:o'_j (/o {'|f̟ d-ݙU^T+gۘho?-= +roz?O4])"'B=/JϟK QT),q!D1ӷ/}-eId_ͥ'!қז;s!]*ՠ]{=:*Kx*/=pyR0N$Unrz2mQGx^(o ~Z Gٜf U!x|2\t $IYYz":]lb,R%Ї2e<Sza_>Kj[3u0[V/1 DxmVn$d qCn-\ֈW>bk gU{IWȹo0;8y!p"XQ|!ɦZ ^jϏʥpL`TY)ˀ1IlвR? 3NۢIR&;A uE\k!9{ Lљ vIXkm?k xlMEgJ9"ne{o9Ұp)e;z8b G'ԵތhiydS{;k:n۾\ d"ܗ5Kn4#W8 び-9Mf> @gx̉.1NMVڲf0%Rq(JBɶް,VCF /B"OdZ(q?qӝNZ̖y0sV,bm>nJe!W\+ byz+v$F.CIWPy'CFr_U$9{ؽ~Ood.·QK( GfR4i2$-o_>4}{ƥ_%ç0tԨY'@_Ԡ8WK=Hi]=LA3OI06_^ U53;MG0Р婔z~uI$n4`G(V >1afTR%3apxi~dv d# 64vOt0o& HT\p/\XAQye\[ l_n]wDZ~} /!.X; -pũ 8iʫ^:f: YCw$s&,h_1tч݄>dh$:+"k.N 2aNU؈e,3Ϸ~0cjsïכHBc>k87bw;˱ET7߀WP=lѩ;׼8Om6DQn'Ba9F.?dujc=sI2)j1Ou L[H͕ + Yv7(KWl:a_Iw,-as{'@c;N4Os+͊j/#Nqe?v;o*V:f**E!oA-A7IYf l4%[KZZ|}8ew;A+8(y w:I=0h(25ܑ]> LKa#0 z9>A$W=KCU}U[*T'Evg!E=ye3(!q9̟11`C%Әod`!hw,n[H3Ƣ*5 Ev44Cu*LohzT rޚ%?y?ϋ/{eVZ|Y> 5~y˨i_?09KL}< ~%-NTٮˏ',Me=hv7S{7i!U))TP[B/TnK ͨ9 k p+/o߬pth18 $ /O"d ZȎSs+ރAy+]S$phP"tÌޮO8&DIiX)Ld!tqA\k^T)µo9ln&؟9/aS%}o/ x a,sxX@?:A"~Ȉ8\Ǯ<)M}b״$PHjR`/V!o5WB//H/~ i|'=]_Kr.h:c='D"M%j:^ڢV=α3GӧO%[i ٚYu*[L r7@Z1;6imz6|;::s`_JpYE&u< yַUady{/EPj\)2,؏:SAMuhFSODv+7쇠ro}cc@|T@lւĽlqR@ذ[mDM"yÒXŭ1,\VԱ?gh[_81GFkn9 "ĬRswRoPsԱܺfKG KY|@#=B4 OYm6uJ#o VniMo'(K& M](tG'yw "9{;\g"J0lUl(R/=A:]υXVhL_>ED9gFYgv0uCT>!}hh98#( v'޺ %C})$bZ pUMoJpͿ~\'l<JᚤSK%_y 8WiM&}Y `X>P4iيRɉ1YƮGWw^IJ 9Vp"IJk Zm>ӿh#Xy Ν2uKƋ&vF{p[C +OrߧSܝ`]Rޢꦋ݉â7}xRG$]w%ɝ.|?WpCO}hnM-VCA]b vklbe@f͘!i8`ݥ}hQ.Gmį?--RwTD}4#d\~ MQu^h?]fdɺ勞 Lu0 URDul-P;iu+VǸqњ4z;pk'жtzr_~duD:K g03Ѐz2<';ֹ<3zw nM籎<2$6v㎟.Oސ3P洂[qV5d $qLlZb -?O[>\Cѩv|_ӧ>j-o<|Ӵ<8%l]gijmЪ֞ ·i0$ȹpE b7Z1Q@d][//1AtJXݞ>Bݏ7S4ʡ"F}à۩Ä\aZ#gɹYbKN8$v!F|FēT$729r%3ǔ񋓰WWYLժKnt*mng8=WSXPD JH&l ` UAhggop'U4a{$yv퐏[thYbܞ#`"/81Nj _;hb);m:۾7 p&wY[kH-QëH˘`&1)V70}9<%<70J&ret/Z>ٕag^A4 TUa>TZvwq'+KUjTVN[LX0 kT/.j\0!yzhc@˾_q~wvzNWNۋ.p&t[ #ei V\ƃ!?kꞜݛ`)!3"X!T61uy[e~ 9գFg7ΨEC29h0uLQ9_n滋RTWJJ5uDZ$JǾ;1n]r.LdPFu\K_o1I?8Up{K:(WrLU#W3 q.FNjs`>' ]30ztTGcWcJN]i]6~ hЖgwz/JY*1=$J!$*ABtz";q%] $,BEVNAoESZ|Y \5Z&[D+#C7jAY$l1e@}^L4ܒ\^ e{PۜHϡI*Twve"mHǧi`N=aY=ݴWIOpsdH*O꿼#{/@'YrBBz+D{*Vƒ-*AZw[l6CmA'1E4h_t*`bU==N#K4=t^,5~x  sуTl|KiS&pm,r9թT"!ժR7rr|a)VQ> !yS5&{;Eǵ  92ѯL"n@t'q;i._Njp<#P]:7)?=λM9wڥ%yM"\,tA? 0}C!~M$T}s7RS8ubM1ш<'5 >|Q|/ξd_&v[Tid/$ ~ T|_:ÆI]J9h p3H5IQ>\1fwΓ, ~4~1/]"|[՜ =/3^"DFO^I;/vd*F*t&ԯbt1[zZ35 T5" ^x= bY wB/|not|wYT݊_OV%RNWbMϻ/&* /Džakڜa阮9q`6qoG)aV4̫10vZZ9rMG3Qg4{BS?= ]r5(#nf m+VrH jJȻo'٩eaޔPs,wEz{9H㫛z>򔂟+ULnh94檟QL@Ҕc.`rY)oq.ؗ)ZPmލ`&dzŅ~>8TԬdxu+ՌktRK_ǒ5kZ7yLOo79QBv}ܩɣ-9]F|!\ª#sPEEDxoF5_$b'.{HЄͼ\g;aǹ;e2:T랎և+"h"u+z;jb?-7ϩYMsaSGt5nicGu7Q,""Vj35/ O#'JiXw4ma@2)q:DXo8SwڈxK$>1kYig`Qڔε d(5J|Yik(2Cc1ؘWE $=ݸ^"Fg?Sb3@51z Mýa%.oR7'0uIR18++< @AX診m,u6O2tj ̄e5K/gخqDb[O=+ꬍ蕟x€7UT:X_>Y&zIDs&hؾvĽ2T\z)5~b >xNVC2G ɚ 7!x) pqYFP29 T56z-٫)\iMC?ML7S/l]@ h,:Xx WI-˕QpE~RnpS[[UdOImas|,>GN]83׭)Ng-hD;q; L )m(x u+>zj]UE7_R{/Q)i",婡/%9Ľ.~6F8),ge.XW_RL}f KʄX Pv ̰r'-˱KؐM+ϳm_ZGbd#j Iۜڒ"ncז[# BSˉ:g y;aAfu^9I)yNW ϔP7IR*gZW|4`"&>UĜ7XzKyKf?oy1! 79YAZL7mR[֛]_VC7X){n{Z%ֶ`p^ܘv/:]prЈkkf+5 6l`2^v<,]1HGokP(*6xI{FDl 9GL]>8 Se/݉ͦ{mGxl15,Dr[t0Z7y{ʚfg"G+R_ \%,!rxN6I!o|uD\YܗD!*{?}z] :ppV QɈ ǧ2E J}$tYp1,"h 8?dLlurNg}k?&vķZ\s, tTV^ǜQZp4 C6}؏~t>J_>܆fi0 amd=)NSRFl(k%p3K|,*-Qg̷q%=#N5˜DpzY[':$|)y1 oF/86o7f\ž`mj^;*~E)[sӪ-Gs&n iT[]2ԪV'^Ɋ6f}ke_:L1|HˬqY]6Р('Lh6r@˘3p ODgt&ޠ`DZgA\!ԱapW쏡jd|As HqR_M*C !?NBǂEߟhj1psE-٘\D{[q[Axe*%?嫺Ş#J;%ji*\ (Ii؇]a8YU[DtH51 n^V\ya߮6MVoL? >`GpcV|G[_fy,L)wWZl&zJ7TD "Q o P ~:j8Y1-;d[C)rKr+ q TV:#A%e%#<(gsA"mFzpub4VB4]9Ug6FdZ+"86+@ؠaW/< ANj&l[V|*R\Vz1A,*n q+a8m˖Mȳj{+!+ [hّLOFCB 2]l~=/(=m'2*%GF_`Zb !-h"0!lˆY@+M|\L]qh LHզ1=SZL"M:TR@v Sbuͣ;":mY:F~5!QAac`p97[Ku=Q9To:.[GH5[Vt[JLqΩ2 %pTK!-6JD}g<;TR9Jn#MX&[ВiԦ\=`6|BBxҗ i&6pnhɀ5`gHȆ ۇjK#B]#rz6jwqT8_<ގCu7( N슺8|ϖˍitbNlln0DFf5ק. W>Yc6ZPC1 ueq:#aQMkޗ`onm|8ru_Дp`9Պ m؇ ~ҒlGF[} uԩ0CV}EN^ v~!<"IZr#L3IQBqtޮ MIg[ - ؕóe@bP=:X/>+{mg@0lɏ,# e"E7ƚU+m.!mApl?y,_ [e=Z_8xNڕnk#aeMDD\0< PdIf a^WsbN˲N3VľlTTzŴP>CQ%G7?tG Ģ ՐDA[~ܳmx^7A|pҨvL9eQjr4mӻP{LAՐ™].]^&``U]]+ۡ4ϛ[@M',x9w8QnV @ݳIMUˋp994ї}Pۆ`f s 9̱;dJsTw O#݊N!e׼pExpbX>i@1*s:3BJ=(me^xEPDLUa+c[J*4w X:.4d TSPM%HL$4s ֟ԍ[QmoHg v UA+'}S \;HZX}zQϙTDr!QgFs[bkKz>骆Vە)>J^'rmp%jl6V5IR)DxӚj")/>_e#sm [6ƍd&BSZg9׽Gk?V=RAHUox^0qTxsUv 4dzY]o &=mm @!#̓jw,2`v/,o3vSwN`!wE規9n_XL%S(.7Wߝۺ>5n>g jab쎟(s$7\ܸ<+p (³k~~lƨY^MscVBKS|ەI%`wgD;߃xaDu7Іiekav:Dk ]:G qT 4Morc(RδaU?_QYeש9bTɏvPP# y_?,5$ f#x'V)&)PˣKTϭrja!my _IaZJ5w(}C[ҷ &։ SMaҿG\%@1RQMDr'^a0$ŵx&K?-Nz#F9QB-oqYCîG:?OZUB_18 yرrmyH8s+={__?$ Ɯ[,t.كh g}!WYSB4cgl[qڐ IA_|\lv@w5oF) ByD̷= 1 ڌkkYyx])wÉ87yaOhIcܪiy8@e.Qʏ-&lmon\}3^:"וJRSv*M' sZm(0XFj5nѨ5 IMբbx;>,D,+(_kޱQ|8ZD :u9a@ƼHrn[uH%0 Q4 8i7mtc؟/Ba2X.ɯa*14*vk"D?56mG Q-Ls*SCuH,+ o*,f_+9Ix{0_&V^jGU)BRhe@Qyg]Q@#jɹn1\^N:ӦFPiߤ;VlOƇ;$!Oa`{D.5ml1n>t2vKs12@c$4kdKMMPwvNͣ*)(+E [bhϾ{ Tqr۞ÈNvu_0kCeZLj$X&9[D4ZļR\!^qmE{ Tx3*q 6o1ʞ1sQF:VYͫ}&fUu~AJӃ=> PNh fuMUYQcn0tadeqܜ{˽#ީwc# O` :͸~N>h:cr9$כ3 w3qW.=x\ە=2Ւ:biaj'j#Jq1p|iQ#^异$‡p>r;⾓j +F*߭o.h`jCG:uFBT*F}Hg!ol} 3k^g҃,]M>ԅ@$'3tuԚ I{HIZ^?JB&m*ai$cmJsVN<[=QZo"R%)iy*C%ZSl{p/ ƮF {z|Lдa]璘tn#d|ڑ]M6 z* h}lV_ӎ1%\nʽqMf$/q-I2ͭ텘$p{`x:Lf>,wPR@Xĸr##ܟYJJF15FLZO;9RfsZfA}'bflD/E{}Ѿf]yHWknf)jWJ)U5DMcŲ>]Τ P#ErhQRtP _'TIdx88ǿo)$<6Jůd.`w_o ^&Y2(,jev\l0Kr" mX] f/t.e.l+1&] Z %-Va2d"_qm I:_h=yxshaq 1''!bG@ШݖJTI(5pfARWF3K^mBv^Zb}ǭǭBdz9A=y.gu!q¶O(\yt iʿ1n#t˕ J=5d3ڦEY%mP.,(1wӯ}煐e(w)8R;4&*xrmUjak4B +~~[jx-rc, !D; D;ȑͧ+'/ ($(Wx_Z@FJM>Y=}+ KxֹDyYHۉv#yT>Egj1`)'5SȿR[OQD:鐃Aʆ[H`{F m5#='=4~wp9l<4꿝쟌k5Dw2o򔇍(-K3bb+ ,uH7v'CF.ٝR~5$8ë;[;GVȿ{OGU;km3܌ZmOD<}:hvÀW41B_1U__Dd^)I}=.v<\C٣ S;2T-9̿]YӍ?؃8#e%(eXĚ>=#GC"dH(3嫸 iw _$B'p>dj kkyߠǎ>`GEҡ' 2=z"A"[kDEV Q0>¼;*x}̟I5M>4B <]H0fxwTy9!Mc" OJٺ}gJ2g)CI]_:g?"3+ka3T+*2.1߰O۱_k< ]4\ AE<;LbB'7c޲J=bXHMt3oxI<=a%qݍ]yvb٣[b~b:>OY}̫g}\6 V-E)˞p矇=A#]AV]W$ o. hwn mߊkbk~  H-4RzGTEk& $P %QR)"&qwss֬2LfE7_^t]~؛j*H*N°o{R}inAx:K7J=_N{~蹮=\Ʌ]]n2ٳ4Қ DD-E:cY(- ( g4ܲSRVF׉g_4y;ǫH+}MY\~=?y ?v>PiͶ)J e,괪 L֊LA;QwpWhB!ZU}'' eKDŽh~'"wWz;/_qIp*U![X$ƀ)!8,~XT?D%Ƙ~_0ɼdGu8I^D%2T1}K`ep|,ȶ:PqSI(8%܀ؑШX$o$(݈Td/px9:PO@YsJSxܚD@ *M 8zn?_v.(2j} @4kǬC(ܤ2ˆc= 8!!!ըؚkUZ,dFU܀ܩIbB/Ѣmբug^ =al-`pPdc)>$wRD4瑎)Rݷl wxR%R/hؤI1a~c39L^$G:k\g*q|5Sm"vSAW ]L;Ł(ț_'oʃY;U Uq- Nv82 ?l*%_2s3~XZGGx5*QU!Sq;+7鳤̰SA8ǩFHNxF$>&%~_#C* 1۱~$mn 0ش:HV jױE;ajS5]>1tOF&1`qD'A&}_gA)*S,6ek wUg>fsY~_QpDTЪtCGYRZgN1!k"TH-ǜxHĶb g1Pm t@gM,ew(X""\9L A U 1!/ԌV8F@ȁK;?θ)uMg1eI 3nF w"RF}*{$ ڈm죴":HTtǿ0o ݗԘ?"}bբwd_M8E0iEk`iʋ=6[Rq VS(yk9Fhxb+ ypX˝Nw ΂L&vofdH}W,}wmu5Ż]-ӨnmH9ܰ9x7ȱU`b" P  㢉4b=Md%cٱG(XuԤ@w6A[I}MD|\H8N Z܂N'de^|!wR*QÌ[ qJ5NrSYZB<6%LQ]; q T2*߶c:V?AOJ"UqCdOgmʪƁsU}{0ѻo>/@n7bj rh;9ʦhu$ێs|u@).;{ y'/*$Rul߻"+4qȫfE pF{~2{|5i+"dDINj .Dx -Sx8c])PxB `G6s_)ZZH?RCFi,ىǿKYZ A-QvN|t^`E1Xj)ѡ>hȘ[.Ϲ wL'g)nnaO;ab7n6if|tbD0G`e=µV;@]YwQ# |2j*rxRh_ wUizOS6wX*0ڋ#^#ld-#ZV--Ju}B1YvS#eIcrЧZj|UMűdj8l%i,75Y4SɤdeUa4<꜄m%|}aEaqQ[uEW_Xz3[0JQ?Z؞Lk CvަHˠڰ2Z~vXSh&c A*x+ŕv/~זf `?]56Eb0bJf2yHp"LJ}56&A_Pd61J,C0ZXW`ʠӥ[U]ՅAOUބ$ >ޙ#|4(干aV0HNJ> |- N{`ћSWrp}B:$5=L +/I 2}uԱ ^Z.eQq5C p؁T~!{5#x@ [c{mdTĩM(ؙ]9//ifk2fdQ!;C2J\a2G UT a`bAэ 77Ңn3}5ca (7`ّbSԤS,B񿖊pJ(7\e aHr**ele#O yфxr9] ]YFkB =;@@aq#%|G@YHsznǮ;f7b^= wN@i 2!=阹 YYAGJk#ɚ<0 )Us,gcNDbXR+?v\N\=NYn5i9Hү q0x=O.w i:L2Z8F $}zz5ϛ&ǓMuc+ T0ӭfO,M۳wXuﭏW_7ރNjWE:g~d¡|^]p=?c{yuCySyYsɪK;>Ν7M^f] ؍fT6_U--"TqcZ@vi4kPmZ4qelW~ \YƸ}1GK (8m7)qc{d<}:I֥;$^cD jP xŬv_"[pltRYN.E ~%NkwQdN7=O<-)RͿ!y{,-/sPdŎ5"zzDDJLN|Wh^u݇}}HB$(|#;t2@]N4;٠@lZ* ?d:o;T&G l]̀n _=p쩿(#j9sYA'r.[:.|`W'SOx%+_v?d`ٜ~_PCSM0SʺP1MBob_.b%*vG6sNi͹tmTxi]0sfN1{|n&M7],(hT`@ ^4DhjRR<]B#)")??*y\iAt,yN*>Q]}prj=SSjnb͊}OUQڭXs;oԋ3tU[#OSXH,GS,CZ%ToJ;#ut^HhѬ_OYI{FmM\EFĪuTdR@?w;_X>'GV-KN{wl~+`AbaB2d(|qW 67m߆}â|sķ-gY37"rePNF˩d0%..hE~qǷO<},*սלs4w,"FB# n;Kۚ Z*tIZ2VLQV]2 &߬KMj e=Y^ʠ|1ՕHh*&݇N,+]Xݷ"t\S ~fX w?,lSk\ .9K'9]6yARU3sC9z`gaoX'lx81X…X miӒ3wlۃIǓFӲ^[ܺM/d Dv$SQ/͎cU)%dDI?T})- ԃ{~s˰_mLo}u⿨3F-eglm?ٰtĐ>CzPݫ?TbY5͏nئ<'}>^,'H-?=# UMRfrtǏag5GZ~< ֮9 {[+) gKlrֵOO}v,mJŭ[zIe O%]9~׆%poޗ,eq$0/.zlbR~~dE4$Yk3wag.^"}&@C%v㦸=K`v>$į.޻Ƅ|㸩AɲV7Rbl0C,Q@j"(& J lL4-j17K;1QQ+D'E V4%D5x;~N^3p3L}eyfľw bq굘1KLQ^B C? vЬ!K=hV C U}臾^ҽZ#4c?P~ʧ_kr)sm+s c jƉ3@bsA4}ubB1bΔ݄a sTE/yvI?U6#Dx߾}77K5xDPYqtm瀫%@}YYiPZY[wvFK8{=|UGa!n|[MHOMB9{ȩ%? D~KL8{= `0J?6 _{'YuPEG s Ji wDx7ʝX=x_ݘ MɎsu{PEo| u?_5 UAeV.:_qfocP_>+GJ.12S漗 7qjT [^ZxYA_~({\+vK낛Cwlkdn= I5Ȇ5|섮nt9'-/HvTښ<&z cz]iʎ;<6F=cZ Q[r-Z5eB5vܧg-{'I?L4Ґ'=r+h˼&}Qˮ6)_nnenlkͮq|YZ#ʍcҗlzv3kMb\}_$>2 N{ihbk;!ǰocQTXSxh[ kًD#7}ڐ5[,)iH7\5}& Na_yPO{5Q}bb&3Z..Ţ1)lN׹@d_ 9\-rae^ u\U Jd+ LH r Hhh"Ogi_(V; I m臒Rp:G([0MN>^MIm0T뱪qS5W&jG.1VԺLxh' ?Bx,?S*3#&~y r7*8_zWWd碮äļm`}!<%Z*݋]F+yAt p뉏iHG2}ј-4)[FQ{v>XoGfT->Sj8Rt5;LX ~_؛۽|8cJkaa3y,#[S7uJ g6.Hl4;LNn9iLC59 X(XXbL73!%<%y>v_#< { ?O_ۀ *0ʣȠcTRo<䏟jd9N Mk4z!0XXe^^^e1ǚ7"hex>Mœy Ʃ`AOO[PXԋ_Q]6rq݆L涠jC /аe 8ھ<)hynLG:cة< @Ҁ[b+w ʨ*Z0t 4-)LFb/ù1D؞D_Qz8Q)ZYL}AI|1oSV(ymy݄2YeiN@%+Rs7P;<'{a ,72U. v}^% nO볌/ڥ]Sn u1Ȱ>N)k!KZLIp=`P4o `Y0Ԃ~O9MʂάdѤ+m{M^ WWKhknL UuFJ,膲DZJz.6 YkEm1*?*bG1ƍ-lCpA!Y: 81Vc @v#/ |q 'cei,^ۛ!a(#]˪+9ߔ$_ޑqRT@FÄ4TKĢUUw ɿT\d(@k"sp oz}ћ #ԢTq:KRXAK6%2+Ș 3/ ;WQ/ιvyDhil5}X L6m=^թ|?0O*S@x2m S7$F}02kͅҵqןeD"%B9 de~D8-amz$ȩ6y !5DĖg+̯e}nd]n7@*9K8N%$ح!ҐH!!qA?KfRESm/NPIe@{vv27WIͯsUos:#Q0I?1ٲD;L|M\~oXt[2mb6(|ͽ|gͥ1Y2*[Uvim#SŶ nzƶ-r:WMPI̤#2H-<+BLgu_kQxs@3P] &Q6{-sj&UIuߪw $x7W+5>YZY+/-#4E甁5ڣ4Jw>E/֒H&4' W5us[0Bewrw藳.K =~U;u=ߪ C}@1)a+N nmk`*SlQgu<u5Lfc9# !,7{~{?Ð# 6 @h55``! P`+5R})R6劉桋S)4M#%}`FB@Qv7KRVp6ڥԥŹ R' ?D@yMXB^/" i>6T+)lIz]ZYKl\īoP| UyJL`XtS?j'|,B3e :d,%VOE:bߖMwLʱy" S Tp\1S$v\:.ϺL'GgS+l˃q e-"< xe6bqbbW]DK[d܀?m}_2>)4(ʏ+oʏ+HlbC珐Jר4 *P&h,gjX0@*w.<'6l|țL26-Kw`83Μņx!Wݥa˜˷lEVm07kevU+:jVMS,ro>̞>-@cjE6Wxjh[S]}V:IzۨZvph. ޽ٹ׉]t˸nKJ>m0m >:VUC[6PH ~Pۛb7bs #?NOH #[{.33kg/(Y?sOLQߔ<Յa9Rf7`@[|>LϸC5kWp|u>&gFƑ+^F= =ƋRr8fa%GldYyTcKڲ>uHά>?eQߟQӅ7\3MjxW|e1r f>9]98cǑ2lW,}E>sؗ&hk- tP11u|_0\KrW xr5?Rh8ySGxM.Y:UқEj* ]u}. bN1^z, >PVps9Pg>w(u*BޥwY_o?;Q^`G U{W?dDbDž\XLdOwtԃ=p_TO_K݅5N)(x73!9"M0thSqpKň7t:9-֏#eݟf$x\ڼϹhxƣ68/ / F>I*Y\n#Y.cQ=g{x0$җ~!Ojh`,]WϐUlVDI1.ۡ;ckv5z|aꩾH _ +Rj/ *D_5*<yϪ4? R W?𑿬i̪a`!-$q1%b}0̴7LʧD~Ƌv$*Aj(GT{pJ$e1DTq2 f#PyUD=-Wj>LS ͅ.^$%$%'|_$pB #P oT 7*yPSHo#vH{2s+7DHne6l<Eb‰47(7e yuU/wt;^#J[Uryɏs" 1'y0S8sٜ.T4t>(\;ts>6"9ЃIn^͡Ϛv/;)MH<;ϐT;+?ݽu>Vm3<\oB*-& q3g#Qٽi:g{c+Am,˘$:.Fj KfPv\>֝:-w޶ )=Js٭h76 ~s-B5jrSğEtIS)ՒGUZΘśfEmʛqBϗo}|u4B xn'#g,^>Ԉ?ǶS$6-dSӾ|K^`?¡%6s;S(VvQx's箟SyNٿ//|fem{1|IWڕKQdzSEi%mrt0 9blxt]Yt%Ch3,[)˖,S\|tyDs2@ }!,~׺6\$"hC,^q,.*msޑ7gz^ H-V6xC^ jG}pqueO>gu0CݼCufvNKxzi w⹎CߞfSa*ԡmZ91I;Gt;. a ݏ"% Q mec'fQExIswu$dMCu&W>>2Lt=LFAI1߬3-vr_XH~5|\}=%gn/,<s. ڭ W*N%Ό'_c;w,<@̭Sc[d~XULtYоCW'|S}䃔r{loT,th=$~g YICgGA%>TcPr`ZYT*Y u1 l.^تw$?rB?TP)ZpVӑ؅ WϠ2Ҟ(3MP1jEP)b4b˂m؃*Yq^2?e!3rsgh/wT|";JXy\kFX;)).fxm5[BEj}_ 69~p2Ty}0gWuN'Tũj})l|j4J R|V?;7`/7||I3!u92BL)w5] ͷ^y4%;GZsp댱/I_cA 7IyK;y+t6gՂ֡*{񅯷|fL,>֋xo716ڹZ,OûP8Y{s$a9TWInܸ*i>Ģ=}`LgiY5-Y]7r*R02i-,uśGrXdqi*T *wЊwRDt{**{ W}wfP4ȝav'W{Gߐ C% <#-*NGZt{MG1ۊTxIצ/6T&o>⺊)[q'cWt.+BO5"˖+7Go&DSPz٢F_yL{|b~ء'KX {b~OPNo3s,[N;`z)1`=ȓ>22`=mo:T䒯*;a@y ;f^Ƞ"7L F}#aoy:mNuZkqYFfMڎO?q :@|&>$/ݪ~  R@^_ԳX2]]/gȿd{MbNTG~Yr-pb܌/ >R2X:0W9܍J~8 G;*}-nt qXߝTh4%etje_i,0Rkn U)8C- \h/9X&'WG1= }X]P9=#MReLh;O7HѢF6T N={A =ݹ_ 1vt0xZ2NiG+Ϛ;]D&.}fvV ӡMLGh(wKD"ݤ>BB,u.,fͻNPbLfW~YN/ͬ}ǁq,(7מ>p=K\uf鏏mx+Z)d>^=e,̼}ITd㎚/rdS“8GW|B=J8L%(.GCىZsAҢ@xvDb 7 *d,Y2)U&Q7oq5Tu3m;; 'rTk^z<>i|\U>wmc=v_?EkVE »R߇)醊湑E>=T}U;'.dͭjw3fpUCN1InQa]XF2 YMur (7C6"z[[D^OdNu!ޗ2BNcT8H,>8}q8H 2Ci>i}Qn}KYi9uKGb?B댻)1o b͉emwJ&[ œZ@, KtD{Mr5iCdֺyKh+ɓ'# UJtdUc;EZ69RC 9.0`?R+Yfuz((Gm| UmsS8Q, OЈ a(é7x>kK=М=AYIk ]7<*4fI>cϜ`enc;+ JL,!b͂X5׺hҷ ޓŌU@ߓJVMD|(Dm{o)z $pK^%+)_;V122^%>_><F-FF.+meZ(SWFyǎ^Ep-}V\P 8j_f8/<85d=S\r~i@a b?F(>]ƞ? Hm2vy. ?B}V0fi%uhkb2Nr=>CNڇAg&;5~M9M7tXy>15sX=|qP y?+̳9(x+"ru$-鱡o:!=&lDCZd!4UX'%y >5)d!I/f`[O5i_KJ|nC3+=K̃soL== ZaC?SOL6cH ^Ka{J&lح`:0Y  g&R98.- <`!eXmJިc) xYbw-9e uO9Q&fH*yfjz7iq/PJ>K[sEªd~db, QJW + [n}x:@Zv!|j W #ut|[uD]_=T.}s҃ fCQ*u w/g+1Nf8s7aG nuoj'\qvYoT~4=7D˦wmZmw>OW1Ltwt '6yO!haHM$+7D@MPh6mAOߘ0]=W,P{,Qt'3[/gy@d\';A^-\n3[hVrf>PYy\P@5O$3G, D|bfQ"c̀L݅MCp"z,=[eXٴۡߔy4,X)>r$-({[m9L~6?OZ3+P$ !ec OhNaFs'?V)41m]2'lA= W؞{Yڞ ޯs9H}"Ӂ˫,D_fAGw]j\%?Em:VR&ÛhkN%J n:%^B6mϻxUQR07G^M:MyaG4ݪiiϺfՄm\B{ҵ"z/lZ*Kܖetƾ!-L)1DNr^m9-v=uRfE$E hr=hrH2;\ghKjL=$Ӆ~̓IȵZ*WKM(Ӏn0&U&AY1k#x;PCm)W~[K-{ԩR_/qJ_RX2xL v&\ոS =*קQɅpsƴI>QB_V\/qm OHD[אL4`ke0t:wK>Dshޡ q"ρ¢ a0RK_]&7~ 'Fljg'l:jE$l TrW RƩF#BT.~٥ّ.>T9A"Xɬ$ISָ!Go}6ǥ*#V5O`J>u{X,`w3XPb[G$2:ɚD]% f[eDYB.F+MP3ă9%_~1ϟbBEU!I[S(KIzCc/ 96Zg2uѧ$q'ښ|vram~9,&/vUhl>b(!uteE&oIU6cyb0&lĘlbȐnT8"8 ,˶`FY*L55dž=jɘ+ʃm8C.qOi)1SÕRZ)que0'_0D_ˉkn:Ch Vh2Zr]f0u|ab ;NM1 L^ eуmEs3f3hUiivo)T4̞5<2 k"4yPU(Bq/;#d "Gi d!"{ H8Jzui{e)4uMT3' `".r-wfh E:@ N/W}Ɯ۳~M)0 Q(eVNbt]5=#H )#M? pHٸ1JlE5u;TL pֳ@"7Se|f \$_ h.h/տY!g^,PbH)B3C@qjA 0-0\km ɛ3@ezWEi1XLmb[yK^U'_&_lJ zvM_ wհ'A b*)2G# t3ol?\H{ؠݠn\67t/7z5[q=,v٫Y`P3M[NC8>[^Sm FOf)[I*l7A4䨣^ "}yy`2 @v~z9*+&@_^PRwɯ's k#BfbYU3ƨ߿A idͨI[!P5N_իe!V}BCb)wP@ DRɝb zolq˜^\*&v 2l$&("TbPY%F ݁_f|pLU/)FAsrԴ%O$TzMRߏJ0KCu)mB0(E{2)[~eVw9 B ŕt(*+\ nPgk8Cdj8k%=7ѨCHu ҷz`Nשy!ٖ.KہCblDgF4\Za-cjc'32RGzjcʝ& Db [ec$0 n%nN9=[n闵۠}W r{;/L;N(cKCp ̓`nBo5(M# Z0h-bYEt5pMG뼜F`,z!q{U'\FXZ}!`# ,XA1&kĸ+2:v-̐OT(YoJP[weiW,^K3nnHA G Wal?j{j,M̓mR#~)  ?h>?  WYZm-W]vt26/ĴBʳ_ Hq2dqtL$֎`Kj8FXFtf9U8(nn4F' qefLFƾ/iD.qxU.'[t0otzo m+ܥH#"}6֏gӝ ^bc i״ Zk㵹e! מ9_;-: %_ ٱ`opߘ䓴e*8Ǘ:I6t\I84WVT m~Fx*j2 %IMŹώWJk@%RB%L<>0Ok7a5VCr<ޱa& s&Q37u7K"~Zx-\VA 9g4Z/ɦln?Gfp_ID.p)=jsf*b VN{nd5[y\VQ:T0ݧ:,0:, c_4‘BLh>4@Ն?Ua~=b祻華$z>*kuk?1_ZN[o)`D.[ג}]OUhf9Ye\ޔ0tp=E ts@];^QCz"D:n*m?Y Ž[\-6̰ s8~g`sܗHSr (n+"&@0i5po|Í_R7yV#~c2OuӬUj#NVhp)Aw߃f<+1iedi!e,mH;HQnjn:(n7aOgoly`5JY!mWbѳBWE|9^ګ+[Xz|mCǜ d1ZlTM$VS%g,( .mp{5鑅ʇ=[Be=0 MECT=p/(NNC;[;E^C) ?2Lg^_c.E~]&GtW$b|StS^##rn}XmD(:tO`^yp1؋}j1+)3AUuq|q)ޯRѡB;W`D1aƒg ESp{-l,5LF#ot=x+$ݭC֡I.=+ _thT`\;38c_5f4ξbIkCT *|HGL\Ss+ß9cE(<9 *SBMt\xO?_{pi9;O+@.q9Dv|OobN/J 9hpФLЊԽ~=$9ĥoZLEk!9xȓey2+ %[{tϧCW$!?_Z|Ǹ>Bӟ%҅'U=KP͸z2cD>C`_rW"sSh}㥑#sl}9멑#}T<.§%+o%A%7ɯR:'y̌ ~1a kRrm{{a4C|3K"t)G52/r|OYg[֓|b fb> s$I`Vh۫ x[ i5Ǖ{}!UГK  5s x_Qaa+qgG!Lө ѣ*=oQGФnna7)<@>v]#lX#h_)#ulȽaׇm4px+&Y|oOau=ψ.^닍 )[~-Jm/76< E8*S()bpqFvYW^gdDƛrx!GQa&g̓&-MO&!)Eu] J_L)Ove_2V_̸*[fUL;7:{:ɇ鈩jaܘ|6#1Ua3}Ҋ.AjX E_VůB|<9g2A Ӣ`:d2ɂ3k #ɒ9prW,vPDBj˥E Ɩwn+192πL ]Ŵcڔ?2vV#T"r^] 1d{r3=Жlh8i!*LIQ`2E˧6ՙɧ([' "=Ϥǫ[<5h|u.+}9\<!"J&oՓ cjn-v`xan؎F09IyjɊfvV4؉QoPqp_P 'z8,*[;C"ą {3xXTYL:[P 8$4'"pn8#fIv8$7:ͮ}Sb"H5 Hr|ΔYY6눓0{: ?dps&Ės"]a-(4ѵq"Êuѻ|*KFď3 ّSYvq&p|(?eϤ鯭-W9g~3$4ݕtymGm@ӱKEqk1E}K|R藸$NK(Lz\dU/PJ ,[@a:*psO}s'VwtݨqfV@4 , ]CAy_;zS^-FmZ8(3ʦHC(S4﫥Z ӏ}-[D'8S q)(z2K/DM4u34d c%Lg.qA{^ F0}rnJe9MNѠ /pZYռs˟b.)Q>?V|_2Oȕ2jt;OOU=sgow =4q 8q3 eÇxi3r~j2JrxQSdsw//wR<"LL5p)=&\O7IQl^_5:$б6dެdku9.?_xHӔ' EUzQ=4!fk\ z%rTa 1Nn1 Wź(23ї妥Z7:+x̉cw*XheK)p'3l|%m Zv5;VW~KKF'r4՛k; YHVOvA%&%ߪK5vhxҩ>op23zj*Pxje8ۣۄ_(xH6܎O!:h}W 7yz\(Au2ݡtdĄ2=o)^,8=?9ˇ{K$;!̑H)Rπ2NJ2؋Rxv\n"yh288@ -od#߀ =^T-t.orR z3 c~6i| / ݿզÜG %>3ľc+/}Q֧[Jap"'Q܉2=Gcc½kjەDHM]x-534݄l7s5B}<IoFiص"D@""NrTBZ|T}zG'V`A6r~/д`9*tû9oU?+7*꿿R8d#b\TLF[UxDT'Yg}DQ]I"?=Ko|W 3S'qJ%peJ[t@&$j@=2pi>z0\Tט@m"Op] $--; 6i|mˋա]J^-{&XpXdA+4Dot%HrDf}j&ڽ(\ ~8Wz$ՏOL54# t`Π׏ܑ_Fي&64N_-=.Fbl;YS m3SٶbWN9cԳoy*~%\\}X̟~k ImK&ކsэCyѽ0A2&EIRVj,}ԥ7< cE#YEmECl#+\-'&4TEnEu#D0yNq:k5`v.!eor;&G/qL?̌HrC^8 IkREg(<(, ^C+_J lT2OzQ*iN}. ~:,@NJ]CL=1 7F9of=+(4"G}ߴMZxҚIHӢLjQdB@P\ZՑDg;{6r KDK&5ܥvoCvnnw{4dcHI$l_ýU{c 4OtE/aБB:qQùNxp;E(4gY/S p}DBe, mpgnsә*Pd|v?L`$guo~W БMF%"DyfQ,:I2bT2f8E @e5?ck\[fG:KjiFEn?5gZ2k> 4:1S]3к˝@5{u^ u I Ч/Zj#ﶜ+^Z]T+X\ZhjI`t,r'>(dKn3ҲEF]#^&}ͪ<|c!UDļ Q|4f3$jٯZ~%@NnQboJkUWitjMpf\諉ŧW19cҺ6ղGe̱AwIJZSqU}i -H]i@GjF̴M$Z-S#S$4raP,JjqH5%YƲV̊;`R^P&O W߾ MlR00?cx2Q&F PBNg`S~|"C+?-DJ\G!:-@05&6plZ1 Dh7ыPuND²emx%Ib!J k>Ӯr38y2}ҙu^}VMOX8sc ^3rB[~2ȟ@c:wlsؓձ?wVԏ&vtss*?T().>i`}li竦 >DI5܊N5y+Zw:ypGc7 /|Pi>c(2Aוԑ:Eb1ďU@C=.fB 6j.|d~P;"1qv6i(?|^)("m|kn}<ߣNJzObI,K`i; mQ(*b-i~̊PK+s\..%hb9 DA QSQkSf˾//jMǹ^οs{M;;ް†cDJ,tH}%H1UXU l]͆dm:Yg->XK5!V8XN>^C ǨjS302LS٨Ey;`8i8&R;p mW/õ. hd*QleӰJ,ʦs5#mb +Zw!rԐ,,5 2_ͺە Y$Vt.*2Y^(9;D'žFΚ]_N0VAw,$oG1CPH,1qG"U077d+E"ҽy/mWQgv[ueɰ?nl啤L j{h"d)3װ¡οk^ ʲ2rM4RQ}],?n.D5K\pY#uNkG<2O!1ݯ Kώ[όOTϣ+ NZeGWh훌#GS 0MȠI^u~I6b{NA%{;; T"1E!,IOowLNgm= f* =ҴrcNc=5|]oz&&-Jg%c۬^^0ׅ1_/6Q0! x/!#! 8L':lgHBt a&lL{,р*8#%(aKaӱ)WUӁԿ=9a> ;\TSa =~zn`j7S5ECaGƅu3=g3Xl_W7?CKŌD/0B:{Sz}&5]C:xx=CbOA^Oxw:v"|ui=n1Ip'Yx_Oe-NA*J-) UVގ0؅U[ Ê w5Pݾ~5ڊFo`1q460tQ%7E5&*0c[ȼGO"Xͽn&8*edgf }pLP:')tu$V.|Aw~Zt}o&^GyiS]*|7r^8Wr6Bp X3q '~||ևկ+x$f}*aC>zk}ڪ`}n4c'Ib0a`@_dKqfw1` o ' oϔhɔhOarIN 0w:`1ɪ;6 Ww|Zh;6л.m~lC2z嬤c'C1DJWzHrCJݷ*i_1΁m^Zyܥ9Vt_Zz;Mmz2gz>Ci w#edg/}Lޯd> 8?i=ijk?i3M gV 6JHO+OdK媢09;`t MJ|hZO@z1EO0Uj% ȎY Lf]iBer2%BYÁF:RT k^|N[Zʬ1Ն=g{O{ˀq I 8`KR%*k̾ J rvFMmS_`K3g{J=lmG jK+@<],Sleں:]1O({¶ůJ!tz?jK ly:9KO+wF$k({Yf `LJC{(=YHg0ҩ4;ԇWr Vru ;Os_2ۓ~϶ ~AoO)PT 3y "/KƱ m]=ŔeRV^ɦ(!9{JZN x`)/_VL>~ [v#K9.~['Zj}2[&cld0s=mr$aJjŸX9#uG:ZW:ި ݢ%=AcY$RzgЏkjtDGftΒhVnv46b!;7|*tQ딑D;E4Ұ6DZC@z$I?Lҗ5f)ԴrGJ6E@hδ'y-ča>zlAgXwL9;41+cنAz /^E$S[;Jwwá[8t}=3kr͚5{4=MQsZ;MW>'W~^T+qY17TK2Jc ?wJ)'(D,BG .?~5=T;]1~{͹Dy"}TwxkM*cwTJ<مi7Ys֖)I{Wܼi?e b5mNXcXC*BbMɩ;>-A"n/49 \'xbVyvɴiY:o f;gHz\!&#.zTElz!m6V =N7Rf ҼyQ eU&P5aOtuh/9)E_h&~,odcOJIK <6n$gӎ'>a>U?߉FtKOwνEe(S-&+ 0M($R#Δ.F>jr3s=/jN:ur_ B| H*&RZ 昞Ci.B>v31g7[gL[~Oέ<`r,fWI(j:J)t %v]fQU7pmpwt4^UمV3ptBvKF́ 2#}͡ {Am-CK'd`fMCRC+>cX'\ouRe }>@N(c@޸zIg*becr6*hѸa~W3escsbx나n#V$,UrVmf>hPK5-: !|n!(b~]Jx||}wX\7@F@'ɉ6+l EEއ/͜C):F-o,_[sh/H/zV`P~J^vS[IsN౭pU qH՗;ۭUokMneikVb*M9g~@!\G14k9\II]ʴJr ]]A3B~݅+۪ea"'-kRDO PYU:PˣxR3ֺ28w̉_6|i1>`~Lܠd>z4>~5'~ =jNwj)AkCpԄTvۉPZuĭWJ 8Z*sÌ e#\1LܙL2ry9g.|(-AqeU+-Á%l`M>%HH B"Eۢ(-?] t{w[?n$ERd,F8Z]6(e-)N,X04f\wkk_U}3#ԗC?Oϰ'z^:`E'*zQ4 Mv'"O1aANm Q/"-9Y|}+$@5Lt0W-ǁrDmv <[L2۔ 0T80czi=<[3YWM|V hM<*|&7M6}W~yՔ rPd6'QF M')W3 ulԶj Zf} ֤΄Z H2˰7UH/)yBV3WhD8bmnC*V Myr<b9tOalkնyH9S*O6 l\TBCrϬz L T-KEXV[OP' Rcv3DJ#t^ ĬTTVl.fTE9^iKs j|MIFʖ+DӋA˸ZM.xQ5[5A/Ǥ6wv\]YT p(8 %s*Q8:q ymq9ocY[%:@-af[ 6 L[Af'r; 1Wƭv.P_74fX(ZmWNg振G6DԲ &"g[Be>LvO[%x=6X@ɜZZ|{v,`Gr# CaycbVCF^yxlA<7%>"\u3JX,D-f>T'M'2e]0{JBy?>Nz3-"I۫V \!NEܾAEk4 9upd\3W cP}ȍ6ո^XatP^ʰl3G#[<7}JvAa30Vm a&g퍺I5$Hbd4d4LU&egzINoBfB!L&&]NYxPҷU Gzʦf$>Vl:<9O(C魧?!4p4Esk\v:Tj[۵0 ۆ[gR^sjܜX -2ȁLzB WS<2~kuih=OO yLClH|Tzs"5֊IH1ּ(7)C($+.R3?;]!4$bico(i íԈ逮}"l>6ua ,s+R%;ܪi 2M>G%S }T"-,8#cfKxc(Q&H45;(՘eXx5^L'xd˿.+`a|ౣO Y$<᜔ElO!;^a2nc=oQZΐ1kC:SN4o*SS4g9#&JUk+Q2<皉BߞjdT`u-h ip` /D=[Eк3flt-2DA騚(ݙsƒ{-q!eh௠qq4I')+>5E S*J{}/m!RQV5GB%3N)^{uy350"SsU% $:ueSPZfrR3Hr^**PV~ =U_9cۣcMT6QT`4q bŒ`-R5󠟲0T*+J̣ZhiH[%YnӘD:PW$2RWF0k"՚vR m)-9\vu'5eDb @hﹺӁ":r ĞnNoo{N]-]PXރiHD{F*Ԕi;>-T4Bf%UShTVhMB xoe0D#\@"b2IVAp߆jpXv]PVi5OGپZtdcSXd+[m(A4D7Z`TAJUus>4%+"?ShC F|QrQ旕 o4y ;b_ 8 p:*g880U*~B>߆tK'-/qp{*p=`GKm$; >!IGHUZ3“a4_JxCO+074xU/c0L&VXU`SC%t;ѴL6@6ôLU~ t .%aisJ&;WQXP`h) =ads;MRY_EJMTYӄ\A' swVr^fk΂<Z"; Y|r%{5⺗`4 A ڙiQ7|pȑN+d֢v*Bg4fQ~BFƍc^_>h5o$\jɎbǡ0/隋*N@ؽ'=?&DD`D &?\46EjH.8^6L,ZpZ NAݣ*,̙o=8@F^h"`Gbӑavmj@P$*Nq:{;1M &)cqwef>*([ az Kwww6 N jG)O )xfVVmoK#P̦ jZZWok_\UmUIɿU}]ILGZz3q$:rTw@m⮋FX6SaC=D@`tʮNObөYC Co7wNk|S-G5ymUI]9dcBArD""si@Z9ae{mͿ?SFxZ6>ߧܿrzkǯ(D qy}ʘCOG]xɗ6, SL?SLvEB~wZ{ܴ+mC6x){EjAM4/ܑ]/{wK|Ei ~b^VAy(u;g6vd V)gLS\B뾆&c3|75cͬ&Qf%lN TN$}KG J󠔸zJV0ܠ\@TT=*!1I$4C̮(f:o$-c33}c {>Ε^׾2 w\[}_WxD}uGp{Au;eA U2$VňEDa ejɣ~e]Jx;E S| ҕ9n=;zz:}͘ue x">iD]yG4)&Wx$.`ςCu9dEyG|z' VDQ~>4+1d>Ԑ 7(Wi\fK6:~m|Nyc@`5^3{SO 4Hg ~{GlVjJ$>}~RwRq-qmyDϑ~D~Dv\ݓU>'Nam 1Z3^}ĸ˚8&HÐZڰIu8;+UWy*V_ 6ݏ5W8鿜ў͎ߠ"8‚%1aqSJ)J!OSM'L| =+;a^ګZ}v#_ *>?P9-CQ%?SIJs)FqR{іʭ}rƴ\UJ,3B{[Ҳa~Cm[Z.(#| вk> A:B^5(wT|P ׼ 7;_ͦRwaу w-cƒGB`l1 kӻf{2)ݰuP1 vu%6yK,^atSp-d N֤A6fb+xqǘg| Rĸy <B{g-[M Wu`lq` w_)ZQ.qU/hUܐ'}"2QON5d1sy'Cz>3)ʴm8ʶrRĜG=h~*LvWy v aBtܧ{i‡U }zC~q>;!ݍ5S;;Vf#D}0H PP7 6gr - k @Ck7S!Sf}vM_( p8P:F'p'y HW`/#%gN&T“7i/+򰴜8uYŠS?w5s~2GgˠXq8bk %1%tmIb@C ŲG wI`7Tq^fHgbɫט |$Gha_2[J[E$UWNNC[ (rç-w/0~@K4,q 6f[-O3gi":Z,(IQbuG~؞`*v\^ lA~1,fbW+D73!Se^Fʠ]歪)K2q~S)Lɍ[nΎU ٣~;B{ I+}w̒6/M-ze!TG l'ųQ nQYW0}Eu:4v=C)w#ZOhd'-t:rDI0OcJqZsW, чHtpu/z)q߿.'݅{rQiGHiׯYey[Vf7iBƤL"f8.KZtiRY;Fiͮ]%^АbqiMg Je C ՟ndznd;(_lϞ vq9^ ՌRrA:MүΈ~j7Fn )c`Zt2[Xv;Qg T;V=T^XG+6sUBJDF%1%c*f߱LAG ,NBn}H)@F_bp{rZ0j7|{R ruds!l%x&Fb8&L jJ ( z3-&%kAf`+nw 򳺽`u-}W-tZm11K5S)3&$q~eɡe$#kaAǒ<XyY9ҙ)CN=CEs%k!di`?XB~h+TYErOޖ-y;)`ߢ`ƅQ\Moh*!:])[01,ygL"Ng0RɺZ& h5өƵQ (CҁO8N2;l,v>1k' wF?.gGc U!P~'Hx[LiYJ!A=!,-)d7Ł{X6ȡ P1AYBzݟɡqh jH "[ 'Olkձer[j|. zHjSSGε[!uTV ' l_.ŬS [{yg> #S HϨFc\!b@ӪXrͧ'A #lĜO-bNم?1hL~sIc>:#7SLjg6sCq JvKC(7>i|h_a_1=:ffhus7Jg p[LGƒ!}TlҴCi7`yӕVJL!Efw-1f #:9OQ‚ ͔Z:MI5?6JHmd@rۀ#,"ptV1mL|"ԐȄkC<"{ta-W(O2j9Ax,J㷤;(4)[k\ʕ2CK_RPzm,U [o$+11Xm|/hd@D" +hly*F3yk#) 7"-ޯT2M'kw*f˯ ?I_ԭ;c 帲䏃,Z;9ῧ!O*7X])Na &cP܄3mPoTಆEB*ujVrTօVH)Ǽur[Xj{E(Ɍ*E1?!#qɻU*Km|z6yZwjX;nMVK15.E-j hYXV%"jRik<܂&.+p,Ei 0 (x#,ŋDw *ž sV)]aSa,stGٷziףִɞDq:9"+%%0cn ̶I 6]*tU>yZ/\ @ ?֘T'.LVX$#sL[:!Ţ&pVGa$*_N? t6eF,ʀbO$3mpԬ|fwuqJ!c=~w %ڤ"XĀm[`W⠴$-ED3lynݭ!ZgX4zoFO8]cU# P ؉Q)dV eY9. _(nߡx7X}-h)$At<{o&x ڋh3PwjbIbCJbZQA"0AX#J~(d hYcf۲ ! lkЌ@0Pþ*wNej"цt*JᖛǹR A0Qnex1G]- ~~[(d[hӲfv-x("T5D3 1JOz_)$^pF+.tu4%k$)=ˆHf_x< Qs^CgZC5 e hQXQÐJ/vݩjIlQHo +sI `R7iưbDPP8*>-RRS[J}ɭPWNk{ziNMHkxC_H=oLoLBd1 zyw;KFn@8jͲmf_LwBBB==O]YxJZE{Ut'e'ΗPk:7 Fv? ,R\*H`vsp;Mq!p X 9&}{'e9_ Z܇!zOcŒ,>wh7:/xԸI^c~]?@T܉G3o݉?Q?kZsaO[.fhOxd,¦<;:~l3;wP`pwbE9L4 @ *OÝz:(H7!bVc]pVu+ ?luy7ə0,_+%*_/Rp㼥Ζ'ZY:v [c f~ә䶨=U%J<>rgy{} baVʃ碆(K$ǘsҽ1dfH-[͉Nfͤc8gV-̛(䍤%9_Œ5_LJ~+UŬca?y+==+nc| Ё_G q4UGyYSts&C"#x%a"޼OT^{r5El$fJ6T 8q0 |u5ClQf6,ySmf 噧ZPJy^.^$;N9=+ll硛3G]ʓ̣X3g؃2p*I瞇R+WCN&\y&p<%n*t 䫽/ $/8wRH83D v!Lj/>F _{5 /= Oܗliy`Lstų"41T 󍫂ZݥvtF |2o??poN~~:m|y`o]'L9/KbYxC)#3=CU7u/e@y>k@?Q[^S6eO~٧ֹD0 >,p߰;Po$`jV etgg(4℞73ڎ4ҏ٩մtKvz/x1a6<C U=*{|Es'seC]Nh0Xʘs|I0*m EnnՈ؟B-k}걾]-i?C3>>I^uPuA7 U^lP5=CM]xz? z].r S N{j#9Bk׆o}߰~d'汁]yR)S)v HQ86>|yhQůT+!q8Ăwe44CA}9ή%0{)j%|+dWM X/ID΅P2o>b;`G.ӣ`b%[8vZS waw bݞӡS+cq"3×0>U}M,@@u_YV_.o61҆AEH>YO@Ҡ_m=šdc\wr};^SmgE8͟z.H:uɷ oGfkٰ 4 G5s 1RFSz89\ZceZ^@7(vD; S/} Qg)ps/%QFr%_f1Մ61K=5yd֌Ņb&q$ 3Խdy#zr.Iqs}=m|V|"BBCx'/fOY|C'[f}oc;akUH} k~o|{gbOfP>L@}X3%ZCCoLPlG(.X_?͵jC$t 'KFA)H<喆Xǎt<]9C91 E]LU[ \m[EQGgl{%L2gp%Lb)+rUt] D,75~U":R&(!Wv;SئiQ9-BtȂBtpkz@wPW <& PXs59K!lLQGbyKg: \>[ Dp s08m3_'++tc)]՛?T\:/v%rRv7_5(HZr2k,E6-ia-P=n+inٱfݵoNP:ܢgKB?N1w?w*YkQ_fϾyɲ OMi R[VTʟ&sbe9k+djHdÚ:aPR.&%5%r>@ F- 9I3' 꿽ݱTZ# !K_ʥ#ԃcp̃}Z5g/f 嵡eH {sHB*>@&ު\(5Yv2=sHZSXt$6Ip=:NP, ۚAQb|6Pƒ<Շn4_w *KQ9{<"£Y,3 vׅH6)$'ڢ?G<k5m 6m R-Z( /. !S\9܏Lfkg:[{HDhB/鰝ذDcYSHvQ7c8hヤQfSX!ZWd#@Tfm->5+.yp2Ph:Iߴn$V6BӠe;"SIU;Ⱦ4<,RT£|蹎w`7^[;%iAR?yIu<`9$x2мE] u@y5QjyYHk:SK?O晫C_ᷖٞJʯ  !=; N"@[6$C .Q Uٛ["ST˄Uڧ"}[ l#yRcrו1}iU7awb0qYn{y-ݱǪU78ˆRy%"yI}[b JAs8skts"S2E w'R .R:óqNBn)UWċ eoDդBMڈi?*9@S-g %cU7NwOltq|ݽHuJE泰?Sr]j?2!YD0o6&J,<Ԏ|91@]nr^.%S k0I10I?pO~*3bCc%:`NLB W"T^e}tZBl}Kd R-k[u$A*gJ|}7_ohZqqv鎇 #7n%Jė(w]2{fd 'g9;)Ɔu?8)7Ư i*? .v3V[tD8qho-qEjdrZe^>0yۮ6&0T+mi (k0mKQ>DL+Dt OS2  `nWq^f"tr>I~ԣd9M2,(6k 67i',X`f9X}0HEδp $.:l~]=]La?$EBG}Dpm5e)^Pu[2hǀf^?T < d#;"'Y5] a3nrX8hG2XN|:D~6rDqe @=?MG-M2{ĭ#dӄ/W[ ;m%AOb\ё\mĶƗQ\RlbޓQ >;7{:ӥeJ`'vQ$!>>㑂г'-0 v #ڨeɩ叕Qa8N9M:D3f;!~QIwB42עUg errQ16%S˸%};iǃH)ɐ6췹7Z!`^\3>K3Xs'K;B MRҡA$/wyHPfuNJk׻-q^'a%ɘ-&A^3-OfnDXhIN)otRكJ#т__"'#d*EGr,; :Q1/;s; fo{&WTzfZR&_( sW @98O3ܳo6h촱wИ^S4KeLtoΑ6@8\<\]@8Ph?±T!,Bmv]1oENxLC+2iԋj֝Jv>k#%Q(jݜHs*ŧ}3P/s77ۊ.8xwŧɃ=SMj.]L Q t$F8q,0#BUiWi .6ew[ " vvB+B녯ݰ::v+].,! ㉒-7f%EE+F_rld5 cz`/e(G6󰁑sDh VS SZw 0Q7Ѳ>Wʻ>b_c$cY+U&/2#^(ҾAX @l6̫ʆ+37#DO$ 17ab4̤9J?HQP&R'sHrAK=0>ǃWY s4l5=gt;Ap&Vcyzѳa[[#ӷԛx,kFEtEsBq</23n|8 ,a=kieoCx$8>L70Ga̺>Gޤpga`} n/yYq5+~k.ZVZL8Lp_>shS -wn;,Iyv)RѨO._j? Hzy2bnpMT &ff}e8~Ekht`W2P+ݴ32e3kxi쁟)v£rCXy WT +u0j5*x׍=zTFI8*l]oSXQ1rR^iUt*"PM\v"݊Z-P'x:Nkz8'^+fܛL5OkAЯ_2hUk @(Ÿk"LXnڳ俜-scʹ~my<\nk!o!x/ށ/ {cc-Qe34XR ett?XTV9+^bg[%R'wf,|͍ea99U׉Z EN Tc1Z#И1:9 E[x8Zr˵9yht^kh5T |//jn+- };T+Xe}cr0S6Nv:mT;6#w8y8p'fPXΏD¤PX<AɞX-."sZѠnV 'rZ~f~!#XurWz^r]|^&=xxH>dž}t(P i]|yyD;>upZ Lon4\%w|]D`*xI(߉N&Wvk:Hۗ${To3^ u\|s rs6X/5,زv,45Β ;z)+Y֌~[D:NjUj̎8+;#D/ޞ>/iDcFr>ڜQ8ާ؜…o*/jqX[zxJ]% ]^!9-6\4^3v׿}Ϋ7ZȵRp[Qtxȓc2|Ю޴Y@#n. =8I&!I*![i~yfֱ|V /ZnL4|*M#=YMN2C/ >\wXÛ^j1Hsdjbr,`hPeZ/4Z8e:];j>+] [.JF%T+4-tah.ا;fTkI46JkO̖ɄS;Tk-t8D_/k}X k0#Oz!VCPBhj>y)†U.>} `bP3uq4$@r$$0SCGWpR(.Pĝ]b̤Ǜ/Wݭ!JմSɧcD $cp"64l؊­Hbs0%s}K(BwovB¸9hLEȫ8'ԢQcp|g0YsdU "Rt%Pr} ^k4ySVRb8RZ%@i~Iʢ35qtƖ}rTgl⦲bh).pؕ׽$gWO۴k0"9z*뺆?`'mvHA$l lA.iDcΠIl[)ط 8ǽ"pN7M8)\ڕ2ܟMYz|jQ0 37+\ m0\^ƺLփ9˖ù)Tۈa+z)wa`O0!سЄ\UAt%nb^%x\ 7踂zD: ^:r,wW|[bt :PX-*eOxRc =&˩#$rߐvw2_9=AN]%V^ν:tC 05;6 UjU~iv|:eO̷ >U=gy0e?іܡ_*xqX7b σ+R\ou4'H8Ql1\_N!qP)魡0laS/E+i?e55-Y΢.,x@֔TBnᇭh#0}e+=C5: Չ +Po֬]}AN=\m;dh8sSl O7Ww(kr ) r%]V@ ʋռ&mҀC J.wućd 2uF 4Z-5gpL` duAAs_(YUT4MK|`< l-94P.I !Oބ}Hۘvs$O1O^k)o]׭,›b 68)iw4̉ ,#9u[9T9;e3~wR^fpCCnTC\1nc4:bdBzS9GQ䜮8$`p(h&x!ĕ>~_UwÔ4,>7A%d^f0!N>#Wp tB| ==Sk Z]g_* b,"yRzh$\Ċ7 y0}~&NXaZ"AN0}*ym36v 2"T=lZFCclM,&~+TE=j,uk|š@0O}$70Sޥ*Η&pAJ_M. /H˨(H53lkΖ 4O,jxWZFB, "+*'8.x/|Ng|[7¬*dw)C DŽ+OA'F]B׭'f~L~})yrXp?:o~Q1xoHr} &2_7ُ¬B6i3dc|\. "TTvy:'AZ oWnS&h g꿷V\S|3j ЍυoyW4mp a70qӦ㭘0g1M:bҏ0}x~˓ry1)CHP+v-XS]X`g]W(Vys-bg*{͢m{2n,vkmc>Z{?p")DKUEa 3AYoN5_vHɸ8qǙ+GY4+ӎJ)&O7 $V(P1#ǖS +|v=z§[U_^7CF&B%[ɧ '=n~ӭGJ?p'kQ:&Td熕yxYVzC-IJ[4}?`%IloΣ"*_~r\c>Dlz#Sc?=B ^\"TV&٤>fd,~?p:a'QQZ*4懍eOH Z))'v+t+i V8فG6"P-7ڨѨpqp90}| ǽK0eՑp![Qr7L5ҭϫR ˴a$7,U\=>7L?u>v\ 8 [-E?Qf2_xn? 3Vy5ARV"$6Ke}:k#(C.L*gj'i4M u.]1m/8N aƶ`w m(Q,Ƕk{t9Q9F9IfoylK a® fW% Jn` -F離`ycǠTȶ$M1 mDK1,بJ(~bІAA @fAq_@=(,ɩ7U?vp!AN8q0>6,<G }a >Ʊ;tO #|>olc|q鍬鼎@n**.@v=>ǠH^(eL܍Ǿe{l\_80^ N:p7δv \/ݭ#V>E BFL V"\+U~Cnvxdl? cy"(.`ZH7>Un "XIxP8W` 2za;wi$DS䂻D6,^q26R0qq1qi-Gl1Fê3IVQ2qp;m%Gytd,ecod\/ơnnbK1i0HIyY>r2ؒfoÏ{Qv@f{0eFO+6'EǬm*.UA} ӮiXM8)#  \bŪ^B; (|5-53~I> 24|V%nC`JYޖyO!*)P LSrwur;I[IanFw4qrfq%B]`a=p7=>@IqHF흝2% 8}\,00 uAɓ05^sz@y-'? lԼ7f,u~z\; m:8Ԛw;(0l- ⸬7KN.l̾VPJIE1H}څpuK.=1Rwb(_baa$$rC>QUH7/6DgLzPG%ʲBnO\EGm#Y(JyLgjoGF*ѤsD !@+mJR0HypJ9\O7q?]:Y2P|;j ѕOgŗiHSKdY7>DDV'4< JpN.~=*=dseDE9 YM1HV~L:hlR(3 n'Vgqpp@TUɵՖ}C%-ĺ1Ua,u,~^U Jr Fpg,2tJ2V"."y6$Y3e~na$=6&v߽ۨq@. xtSGT  ~crt1H?'eCTܺ^:%9j.3ܷzSfdً7XzU^}5AYGf/`-`( *sCˢ r[}DSa'┓Q [F`:m摞bR"*mcbuCncP:kt 5r-eHWXsg.Խƕt`'=NUڙt@OrFH̐B}o`G,n!VU7tT$Px4׶} 岮.`_Ҡ{K.NhMZsZN8Ccq@]ep˥`ӥ]U|V.A g@I&2iM:/{E-,կ2Xpy`G[ޗTOsɶ:Vd}[veߵӡ \f͗x |^!I@A0 W'g/3ܯEHy'׼bn+_KAi:#ܹpjY*_[#XЀ=駧6 oz϶nۯ jAS >>َ}W{"*)lŃ~z 69KǸ435x9@|.[*R EҰӂRھ`:!<իL:Y^QP*BQ6H6#( AQM9j|;2Q8kW@xkJ`FҷfM*38q4n<vYl &wLudtaމu֟ OƟV3DoUr/N>CdYy;~I>skRQ-@I7&wrC2+}Qa핆OЏuwQeS;@&\&!]w/ YɺIuʟ3J0`ߍL4d u$ʉN`]<Q 9CbҌ FBv4i]ĝ%PR\v,-V='p*b60 d3话_y#eYK+Ys?N387ffdŋqU@=MyE;"D#)L~5L<ȅ&F4T*zԔNgb $9aZvaQq׌/(.|CusUL?$7hŭ,;-~i`E 6|+S=XVXFu<.< MkV*!Jn*y#ണK~UdůG<@FS2&}N7oBz֧@B i%s޳@G͇ VJqUdaGa 9 ܪ֕iΛ5 Eߞ[J[E3ɯTU#e5$5K J[]5 x#gqVSYNY%˅0㓍'4IUMmK7%'Ks@e͆ E5̇ȥ-3vR}譝xu 뢪"DO JAPGDk8f&dlvY# K@ G7bT--xꔜTox&^Wdɏ[$`;S>Wr˳tL> D ʫKy7VoƴV^Y zlEMgrv'V|׍jXo[)0ů|;H9K ƨ`9Fź?p", !@ -Xgј{}5k5nr>H'Y~g[+<{Y\Z*ODZ8#ql"Q'ȶ)#,T@(1zWA ԣX"KK&0}*E@Ydb+VTߔZ'uwJyFWXeDZCK;ZD#1yZ>שg6j{ 8"-k w_} Iqm.i_kY aΕ !HQ/m:?(A=׫< f ~Vfaǒ>Msk8\'8R8Y'ra뜂t %3"-hoζD+zӤny UǹIRF?jL9K(´KJ‘L~o|1!KL1w$Px.Z[<л-lK},Uz2wvL9K2mmō>WH*r2ӯ,KMU9M:g4 rKRҞFf[3ǰf%f,7q_U#i4:qM) oG3ȵ1n%+/=yX1v$Jesw xWphP '`mUwH|$No^pP.m#*񚃖tm\\ٚ!̎0Gw=/#v7HnC|9 5kohRAD>]}u  PAnIED.Q4?Y2nWY 0RϜ@0vSPjLl|xv1ȂR2%%c8ƁWFTi9k*".uYBUKJpBYȋ3!rBd~tg*2e˖s%.2>ʼןa3ى^֪7ZF'w;ǦU[vYl!0nt/+2Q Ne]" '`T^.6>5x+S?:^ӝM^-t0?j=6~5ҼDP7lnS5T1 ; ,Sf?$n]g=SOR@ kIrU 7y-43pN:<%RdwcV-md"`H/hnwڧlCș~KZGfqgn t-̖8) Mv ޽]i`d1c8h 64OKQL@`oԽq )cFKpn5,bGWFXQ"ijؕYX?cjF.8J;d=@|ȸ܍5Q}vk*{譙,6S%T;FRA;-Fr,`kp^F 1v*KVoL8,Hݛ܆5^7/Km \z?0dovuVr㥽n}Sbܡ>-9Tp % dq[!b0vEY i,Eԭ$AurlLf-c$Nk%}lMM&p"mpx(~g>&.0BT{n-xXZ[-WA,[F5 >ǀkJ?İu/*?J@ͽ9qإ!Vm`ݷ{y]^y9'd] ϐW~5]VGpXxC b+.>ʩO|u-2/dތ`-N^yaqBwO8g{ Mp%ΟBQ2{Y qM&etňe,ΆMjSR= # 6{ ]GdXZu5L6ByS#*s@0c] tr'^:-pRD!Thޛfց+iOHE0$[B44kOdKgڰ6[Eظe hDrÚgϙs Qcz-\72d=m+2%BlO; uYnqSy.V>^Q/31/w*J;S7NIw-%,3H6]~gsvYbHDujx<$0p˵0[!nMXݪ|D ԑtHx+r[ ɄV=GJqD+V@;-/x!S FY3WW{[}R;dtĺm@ǣOb FmUܑ~[I9)*K9H3liWsBs,߱:Ȑɻ% + `E񽂻y9cktx7)k5Ꚑ˖7*00%ё6[oSiޜlӮGJҢ] ՋoxczPpx $.[ܙz߷|'Z'nOGY0zHM|WZ`ÀkH;~'<9]Jz.S @)G+: |˹!s  X78[d[2K.⯮| `򭈒'R@;ݰ3з%M!oJp~g6 JF㝥͓@0I}Y.Gz#oH7וz2[ܩ ߍuaO )I۰@zwgf?${PJ1s׆?E/a{_9?A Sex6S /h]`{c~V_$~B|F7嬰%h*1$UJ4?chOK"`Xki(PĸX*r%|;p&2K 6ȧj1%Еv6Lx* Ka? qc<RBK%'i"I/ZPfr oJ@="gJ'TZKLyi,/CGF FFLDj :fY16$!}چesν7АBFBoDdFَ]iۃpӡ9N`c htM_3}11Ư].1~ڴJ {ZG ЅEȮρFD$&tn ObF l?jb݇_f?"n-b~&(bqm$O)H,!V0N0 \ȫ fxQďy%M gT(1Wئ COq bB_XbwO S ߓ(?b~?4.a{l%؆s2P@&ُ̫F''ћ}cq>|( OnCK_(/-ZfjU\Ne~VߙB1xH~RHdWOɺL?톤|Cw(+sCB́IDw6iȿ'K亖?|YSv9H {A<&~뺺A=A,_:o ny@G !y.IL[`Cho3 د2@˱eoW {߮_&FO7#Y轙ݿ"sio"jKK,;.Bdw+:a)%1"$QHAD2HDȈ4mA1?JrN[>HP#N%lu XWёHz(cа& BPhj΍8p%[i!#G$x ǩ)Mdyq=S0茨IrUߙ hZ701I$$Bձ}1DAvn[-k)vqi(4|:d' &-] =>7YbR)'>&q#<-oJ߲'DQ,L^U9kn=O&)l>lR?UВ0DIiB=hb!M8Bt6:OEF7G& 5ud7cI峕_|S]9hKВe:662F41q.6~~2@, Ꮔ- {Yc A e B"e( IsR4^^skDjR*nbB%e+ _E%SKr(!(QK|XFKbgٱ# QBKcWѩ~QyH}S?~RÔtH4- Өye;g'`C+ddn?/_w^_#]q~דdފEFVdK*#~~Kܗ~Hcse1H C#cܐ@ię)tfǸ 5{A}ð<`/rXt}o¥_)vSmmb `o_iSs$7Lt/ \S[KCk,B|ؿZpyؓc?,x^s&C)bS]옰7̐)KFΜϕ |v?aE2?j!i`HR$ANp~ƒ=M`&7od.Z%,!7NkEDl6'RF~ږ] ٯo_Y8|B f Xbd{Zs ۄ؉ F/A:T`jn]D1\č~QX 6L ))'CܙBKfoqKr={CƣaPkn XeMAb][C~"d gOǣmYdʇ0X=#yhk.z#>PN1IliNO+"fRIDTM蘑=d>}k9&v!ȝFbNtK 1->PB(_2,'ku)PܒKY,K'Bvb&hHW"CePMFE}pWaSG>fڎLOVvCYͻPĥV>"_| 1GQa18.ƩD8X,^ID Ir Ÿi$6-$6-$&K1H"zPu=p7A8hMN 7% ;E8SБ -X @Cs&fzdƑ6FA6K:߂  *-9-%BDnNň¯%4#Er| |ѐ#ErMOIZ48ӔdV29!b fRCPtdDYDz,`#S\6{1cV$`mw l2gyN4=  Hi" |6qz"`JfƢljPMB7*Pr?,8"';ա#rύ+ i4N W´~J墇Z77C?B7bt!#8R5Dr-}쬎ES!BvidQr7IM D1()G(V#`ȖY/[ipj(txz)-[0~ClEٙ`vTb z"[s߁g?'ۡ ibOXs11S#rQHz<=ƣN $$"Lt#< xC7O%YL}"Lj&Y"Ƚ9wEI1ɪ#N )*F|*=x$~ b0q= ņbsRK'xˑer!8j:U jtB2~450VY3WhFL$oJ12OHB21qH$kC":{F DUnD8LyMR6zBI$YYޤW#hC[T<1#B)Kq II_"&;p0+f0AXǥ4ؑv 팉"mеzI@ӏ*Y< Y7C Neމ*WIx6[+pGzH:.c?t`XLk"Wǒ%ѐ(+H68ݙ?dzT3A ^Vܑ*>o .#O(|~ǔi?5bH׊[Q,xcܳar'aF"fTa4'QBCIo*+!$vcP7 )s{~ۘ1"Y6bYVǸ,FĽcN-b&6;|ܱvcq97Q?X9\l=7^Ȇ6l<0'xO2I}D_c%N:*aptGGV6'0}`w6kqR< HGJ}ĭ1!O@vqt鸁9^ß,k{$H\ޚĐ)Qe/6pb#l+*vNٛMwB-(ZwmbWLF(mŽH$#{ŽH/b>I:% "-L?1"kwШ1hwkjAU%6''$2Ɔݰz1-TS8d8@EhZ %± ItS( FBb$r& "I K#~DǺA!jI$Eв&>4?'G&h $LKfɕFQ)Pe*W.-#7Ix;`L%7"#؛ yr;;0EtNx6`'?M_tNho+M5P,#䍪^Oc,IRnb\ MNu_a͹ka* Tĉ1ߢa'89Ѓ&)ll,p<xP S&[)r@$6 CQ!VFBXW} T! [1&ZR;:L .{[lBUCc B #F4P{"v '"GZ$ͷ>}9x. M 1OI&͈⏵? jDCKw7R/ܱhB_@C҆М Fd7{''< m(sK zA.>4p2aʘ`~49Z,6(iDZ{RP2GfcecnOR]""a%qY?5ը=\RZ(A4^r3KR;"{B@f f-dFVODX TJirFJE6a4=:fǑq&iUA~M)hwȿt̓yvO I6VmCؗoc,#,hS D_<?YSZ\:{^lEPEt5&THNdB5ٶY@P 727[O; dI?6):4a"aRb~F[دUWi 6'(!7R9.Z=n$$ v7<$F+qmt!v85"yy$8[D129vEÝ:@ǒaC -̗*[DN).'ge_h\ce T9蠃I= >Iȇ6!i&t(BynaF n(,EȑVFUq PFf-EЂA󅑐Rv#խjI:61LpN9:(0r즒'lkJ$KNB1CTDCd " ICtGcQg@mbQ*3 <z?14\+e%,>w-I-R)_ <@ρ9F:"˻[1OۄPC%S|.4vPnī_옇xƟ=5B2<`<~r&\ +%43KN MںFG 5 n\$vӂ/)HJ߱fS3WȘrL\{B<W7."ۨ7J4^#Qf$)_D;i?!2Ec5DrfGO+hcOkr<.)WƕФ¤E#ɞF$}M_ҢtJ.b\6(BSJ҄542Qg3\9ьe]qL\x-T3$p5dD(S( Dұ&B7CdJ%ؒNV'+(mhzQѱdPDi$OLd5H9$6D̔ϰz5B[39I0 A"=X@]OB~vz1sy+G$~E820^ I"<#%"8)Ml@dy<12}x$cJkuЇ'OA{)iP&HjOR"J( $qm4Y2Ulj${ d"qL͓H MmA#JR#o <fKb$Y:Q[P~~3w#CcV rڐ̂hg 1XXm43>HArTq"{ʒL"ۉC$r ߺ[Q"UD|J\Xٹ">PsHX(I5cԍp~[&+󢴥5iLKT<En:k%.y;ISnY4Bo U9aH{IK, dKX9lk> oMo#Js#Xd0fbi(-12VJ"tI$`baQ$":(A G'"6[=63\1c PRzHHW y Ai (Z'4,:#(ŹG&1sGNp6wRvGfXmNXZ %c4!M8KllcV^&f?r?-4)XhL& HyZĵjHF)I##9u#4=\rFϔ791] SRJS+[x3(?@$qm,<Cm1R(d.B2eM,Nc[-UΜOKK(Ȅ,1PA3̿apփXAdey?V/fT ΂5G"wjL!<Fv5L-_ɑƱЋš$7ؚ݌B:Oa1ɮw&[=rYDkf$Y3 GJ:Ĝ?켆dVb;"ђEؒA>̬?c%#Nf(CpKmy&HFY4[)G' r=71F{nY\G#k_q!rOR˦#ԠbĘp)!#rE ~E'amԫilUv:2g03mرCGNIԹdbBh%QQ#%gq! {UP_ Q،ĆN\DB bik#TW&/PG7[ 7%TϟIr, 9PROKC6| w./ӯ44c5iH䖢CxYc>aFRN~~ Ҷѿb/= c^MR[z~SI&. 7faSjɥUrV#hlմMIXEjo'@c#EEEoo>#ېhiE}Nۗ*|K i wr}l6$gJ0=CLhsww.> [` YrN HVS}[>Q2 bqgc|~I$JmJ= <F~'FDn~='c\5 s1"=%S9nY/܆35lJRDbB˾$j͎Ay`vt'$F8Fcq[Q4{ qJ6.;2`xZ9$t?CPt;m  ve"/a&6g`P5l)*iȁIpe쿡R?WΈ%Ўdp*Ƶo/Ri*؉jQLJ4e|Q6x"cд91@Zv=E$eo5s) ZųpXHA]Q،D"ȶi$0J $Lr' Lc8 HKԂpEF[1Hf)h$4EEB`A 1Dx\zֱ Db\l5Ot1nNǰ#\U`wGsY?$bF 켦1_rI,`mSZcÍ$$< Zaɸ)iU,O/jf K= X!=܂ 1E#K;F PɖI:`h!n1_Bp2lJ5nI!ɷٖ? CܰJo(b\Jȣmf|\Nfw*n5Od!Q'tɕ7XR೔2G>D>sؤ N"K QiY9 ; L7bIѲ(eS{I+hG$?8>NLk)HaƓiD^m#pI%qvTGEl,n4+R<X{COągE&l܃D3"l'3*NH +d5 XӳL)0/+nd$NN&6CnmA ґ?teNuÜ;R*_!D?Ȃ#Þj7f7[ȔQSCKg!IȥOka5jzUrNYnh,&&68Sn&O" iQ)VBSc$ftI5nVc{:0!'BjΔ Q Sza/$7PS67oFa'c,h> z1 w(}}y}'q &KZ% $C FRҒOi/kKf7>䃉)v2ydb)v-Fn+hE}=1plg 50!/q3YȜOh/h^`F6V|4Lj?Ό)%fz^[ VtX̮ ^A *y0"˰Z*ݡ^hSg.L{*S B T61P#r|."M^FPɣz k!jj Wwu 6Xu@nܕ=c(BRUב,Z j2RȥdK&fgБNqh|nD˲5$[Q<Iw kDr0$od1]4g\ )mGB%bJ%e ~dlB)17i^ '02 yd3ȨWDb7ؕ)$d~I6Ǒ)n fІYBɟ34fRb&Ydaf9$nu&$R¡lU }2s'rKܴU;%/d?8)WM&9p)^ROy i- ,nKK%JOQÔ'AM{CB-I2[eX^Ect6JNP[Ap0bh%P)u:dR"}>Ͻ9Nh@McLכZrxMW4='[3a?[%H$y奄̼[|#?? Mmk))|A)WZX"EP4i_`%9OݕtC&14fƤ=F(/#RT!_짏;k/`+%4:DAϡ^tE#}sA7Ú~͐{DߛC0Gȑc\y2*ѵ>`B2'm+p[Oى` F ly\y65W5D3Cդ)EiiFMDI׎++>4[-7#b;c&.ka|V0@+: ]vRZՈ|!#G݂^$NG >~lux)-oNFi鷙z.yR/Z!F { 0:33Z%z®cLG iogTpcR졭ϋ3cAQ`-Yonab~)\'eмvV Owx~`1CF Ojϡ^ʌ/E^YEB WETUOl0i.lC$JRE%UtLн17?7r( l |r8k+ ..&Ohy tt44I!$MD;y auʟnVurjz:2/^C.*3hCW=n; yd$C7 z6wG`dqZ79_ anNplHT.[ ~zD MO :%f$I^u>r^1]cQӥm׍ԋɣ߲cT@c: ~/zr{<=a J;1{cI3W1h3U)UQxJJ]L1Pxw⒪s29Hr>N/R^km0p#.;Lb&eQzp*WqI'3 / &%b|Qt/ij9x[[>v}RN?^pDk~T++I'S!x:zQ0uIE+膻5ߡ|\= Ҧ 5ş&T="EPw.˽.&\z|4pVK 瞫G!%Ͼ,\l)T-y 4E?3P׏tE P?E}BʺfpIbM;ܨlphmWXۿƟQ^}fd\&t'/ [ѦjQ.mK[4SʙɈkH< },} s`W}o_qs5K|.N{m~HiQ, ^'a]>BB$0[Ӿv]R,~#n{zm%OM~\4Erk&,j=>i3MmntK/E|Ȥc{:յ;QAe(OTpG&'; cdrч_](O)ԍͥ䈱@z]!.6T_ܪr?nb6ly1X(HF \^bo!|QD?9@o;=?_K*Ғ٭ޟ$J\X])}n)J/Mjk~$h6h*0y51ǂcżMZ3= Ξ'B! D qһo:baq|C. n^L.K-`̱baDgK*Խ10F;K"5}MpCo|˒u%V6hx6}WhZ_]|u3$gkT/'xaXl9J3z%A%nZM9b #%Bi[CS@U G.)A2|XJ4:W!3a4`gBMSC|1,v:Q#I=e$jclxTkKZ{@e1+_3`.x8,BF 7juÿEۭ\.ِR%BKQc-7_ltT\ sO^֮+bK}Q=&b#u? 6=@oB=>h4xz=V>[43܏?TʋjFXpٿ3s--Iʂk`: BJ9-ŌZt*+#)`8z>\wϵ" Ҡ>Ƚ]k} :(y__"aV +h`bꄠR}S?wV 7֓f۾^V B_z |܈h'oGH>9)ICë1DYɣZ;#3/>lG"i3:|ڈ%6i*eRp!U%wt(f&ƝǗT-M׽I;ed(*?ߦ=>>XZq%yw6eHIY_wAG7[w"+ׇLb4*~%e 5\kjJ˷U }[6V)\ŨVy:vJDPeW6+lŏ?큛Q %G@?;Q *F{g_;yc)&b}Y#"iWi- ыwxOVK=M收#:׾piQJ%1C^߸,xFWBxJ/>Xk?sb֌荠7Cd+0m{ "e Dpf6hOB)DXN)B mC\'?f2aW"g6Hk^>FҾ)8}HtY6Z Ql0MO$=s+YBy K}[.uFK S Y c<:ُNۏn#/?.zpEmlį'4 ә2 oEhI/e95*i+RT`(Ёg% DP'w;؟]Mhwd-ЪmNu(7G,?ӅQ{ 3$s/X-GG3:Q{Zܤ($3lPR#bDY-Rm7QUa W:+T?^Rd]R,Rb3TSCm1ېuew"-]jy <|| E -iBC♆~߱OD*Gz'l$\Ѓ48iz|$x*(Egl]7'᧰w7naˏ?󤟲͢o#qe٬o 4bweUD3}h=ͪnx9YS7Qi{ؤ+|\nX#_18~qynCXD{M3ۚb<=)5 ıwtC; bAb5ɟ,ufia~EL)7 %2|ݗ15-(7>Kt^5Q=_~G?6h on)J]+)na:&+ Kf)uCT{,*PpyRT gDyƠ K׉s:*j0xݴ*nJ2+\g+UPaJsUC7 ,_ oGtCܖ+1N9Ǿkl&粻&'JkWu6DQqRe59#ݡ~d贆8 @nF|8i(oͯj!K(,! -  , <#q]y[E7y/ gkH3m!: }惬UZP"L`"GeZz~c_\6oR#ng tͯIڕׄx0in)zΒT{ Ph{[~*aL5u:P뼯6vUvzW HmnX.U`ngEо-ͰA&h=ov`=! 0:}ownW>R\uRUɛnNKcC{W'H4_7/K(UR%=[wek}Vh<\@ڮ|Da1Zq#t*Y*v7}C\z ({MAІ])7 ?YL;QpS/6VMO nqC|8SFU1$B^Z 9qG=H$B@5RloUS3=g|RWΖ~t"9r,e3gl4^w<Ɗ&ﻸ.HˇԮ*,s~κo}9PɌ,+J> *|o.g8H嬴X,_ЁXbCo*h)s7Uu;?g']N7z9Ԯ(d'T _h:&/MZ`fۥgUwt= B)#O_15P!FJg;A?\^٦n4kKgz^G1Eಉ~-^Jag`#@"fEC:.uH E딗s@|f#' _yev#UH᱔TVQ ȅx_J$1#7>Ü=0hXu=|Jp`I%ܗo IrBN)Z1mxQSDg!X`>t&+H9ƥ׸(1ݞ`aͦn U !j N[4 eV+nsCxyFxI+G 4$L*a+[ST?ZiXmZb =\kTŚneX2jX5HWZߡӄnZ sibmc=Ѵ]ls))9K}vt'}}C7,…<=3`<2A! 'S٤ jYwg:x\PsސJi*ҙşrű`o/ !pk3fbP^': CuY3M'j/v(  ֏ە#NW 9L\!xJ&Wx P7S-Bv7u-|&Lr䁷OQ^n;n<6FIVϫ)Tgqe|C0am˵> Ĥ޹B] *Ƀ|وwh[3B$ixESͨﲪB'KZb&,IS"\2d3)KeHHEǖ .a]q||QXQz`""ֽDeyW~X)ہTJpf3`:bF|;vN/oR yX n"Ŏ8C'Ogȝ/Jx'F Fbw4! _ uY6ߚqiilKo/dX?5fjdɸNl/;?<5'ZȨV~8"Oʪ$ v/ҳOoY?AnrE Ų  -RJI4wc+W۹ /a) j;(cdcԫ+=;԰&$A!*-\5j X)#GUrN"?֖Nvn{Al:?ϲ%H~pE+?P K̒sFMܡ߫h@ sF ѕr Z "='y-P6yPBQI U^nd:0BEtxat[*dnnIz@^3$ εЭ+0fx`~lmW R.-~$! [mx'SEspmy>5{}d`#W^.?lcJ"H%lq 2u7WBi2ZאEZ,4Ot9ؼ(~a/tQ2P7N?hN)qyRόa> EvQ9KMg`Wx#GN}Zr= lj!xkǣZ1\TE @Z+"|t Yјio+jK*TRWU O pC?y鹨{ZGv껴%ϱ@񩗠$4uWz&p2KIb1~Si1 ]! p$D^#AaL3diuMNhCmUwgete۠W<)M-?VבDmJ@_p=H,i@sđqW6DjH!/kw΋tA# q 4 &#ѝ3hmT^?Gg蛴?v&/RğmD X*߿zA6H4. kjOw[Jnk$gr<$ᇝ1|~-s='9cihxpړ`V4/(&?P)@AϋmB ^9NYr2jp8aULz"WBk"'c1R8Hu4?Ϻo] V[%;(l5b,כ rz+XwѶRrH6:㗒 IWfߩu&tHyAGP$P*?u@R3ݴ~hR@Ci|fti, ]&!^b.2SS ^~H:#*wb]he'';g܅/cٷwΈ͛zU֖tUb^]ҲD ɿtķh&V8sf-+f *n&@Ԕ0'lOqXBVltv*;мd)4CmŚ1J79*u{__HX"Jj۶BF1|u=lM}60}f=DO̲؅ QF$ ގ%( g%uMkb޸аZ>#v_ " mg@|0EfZb'kOi YAo  kTCEڲiE|+ Ƀ bmWڡ@<{=<(ƃ!8w;58%YQEnB&\=fT e>ߚWgsS"HuDs{Z#fi]ӥAj[㪺yXdr$|"m~Ÿ$D1d9L;Fce},VUPO*el,@ׁ];ѳN&XDN</ 2E_c8Js1zv/];l3&Jwʗ/ q2R ,Slٱ%[Vֺ50Krr$s/'-RWq"bvPW觥t<lt!7NS &sΰLF$`aԼ/|\s}$l-I]K*/ eqۢF;-5qj{^$JPHImp+LN~jH)S}m,m뿳/5NZќ[.Û?~ =kȣ@̩I ^W?+}'<*!/r<I.RP=M%o$?n?4|Yù35ybyFx6}m'TAC 1pFkT q^j#'QjKK'/-F=nx]=}Wy>z[S7%6-#ͮo˓(* 5|_sml/nf喪5:V 2|D3hLXߜXa]6Fbڈ? NcPh_RO݈I⥶|"Sn#TӬ>'̘ ,Y/3 ;ܘ+j&2E(oi=PD1=T;{x{,'޶]9FhQǪ! pKCf s\DUgArBCxyX,oc?j}&T~<`!93³&w}tm_]}~joXU|7mߪb̬#mϨi++tP<؀[~>Ggٚ.\/}[h-"ԯpV S(ܲ\Ѹ2!ouV;t/~EDdOZUm+?@cI^.9gRA0ǂ6mL;uDm3sHZP%cfdkfjctM(y^ߝc[Ubbk:I`|^W8cR.TcǷVȶk-V|K*ZJpetj| 7l-Rd6wܲocݱ K*EzT)\"t@ ԣ[s }hLnK1d1bҨrۆ%ՁǿAbW:>L. =?|KT^*@Mk3vql0ԛl%(7N3[9b2z t1_X$.4 O|mv͵,"%U> - lϕ ҷp4IQy{'>$[|IJxLV0S|I  9HeUxnu&T΀`F%@!sd_؂ـg6H.~jNtF\}٧d?ŵ>+>Kك*hV)9_(ޛ0L1\8{M!> 6{4*>9ӆ;dE *!b07E+2[BBu:<#"=i#`Ɗl߲@ۺOhqsDS{aCq>^7}+6UJCE {`$&xuـtSrS= vz' &y!5UQn~26I6+%DQ(B}VDTH5 ޠ PPUfN f aP=ȴ=j'b|k=UgT)6W_U_A'O OA#|lta6io 1>`(2QۆQ6m6g!@4ʲX #tH@v}ߵ,ysSʍ齃{ܵO-'S"w  hQWepnReI4Z\C}&T)OL>x77[WtaQx /lSZg7EUUZoI$uPDQ(QG+\4t4:#'ad104/es$9BJi}(kp58T?iӑ S^OnS_#OЗ/M2VF\P?ɍ+؋VD֧?ĝdf3.(Pa Ag|Om'"PHO .4^'$Qg)v!%w?x[s c5hS'W_ fzcnE2&z֏E%} B D AD7:L(z4R-v'1(H\e 5MH+N/(M"}--2Hxx{#?rZGR#;?i|o&lU"!8K4RK%*95 ryG`m~NM+aZ{&9K |)zhUj<dlr7+Ju'LJ/!(Hq|' ߻0&B)ځKJ~~gm-^ GY-0}P-/{;MR?؂"Z̧<{KΟj "Fi7}Z4ΠZG9PSH"RI'(Ɉ1󉒽ͮ NNIkHLO#0Y9Ḝʱ=$Z/w f|)&Fi%ALDlj‰^o/o^~ȀT0v3!q1O/ n6B)l,2Wr$^LP%nG>g&'z=3H2@p/?ؑO ZВO)xӭz I"͵+^-6c -I`a&$P-FcVmʢ\@B%)7/m$^,biyYX*VuzؑO9 ҅)DRwa7 ǚ՞<G y2J_c~-XC!IRC ]B=6j)/O ^+xan_d^|-FE%I\6 !y2P Jfm`,ϸ 3^oKOfwVp؋v4N-L*>$D{$k1nӞD!$~%Fq`!_0ZM,I-H ȦPH\C'B r?$/} H[B2'P_Ѵ(Cb ^_-S&fC[ɸꓢGXTgn_<BfN8l/b$1`N# '(GU/zN!Cd=%"e45ז BͩGb_7b!KJh-Ua^Аh=3t$&NۨR[c,&Oc#;d;pkVp9m]{iDJ%g+Ҁi~㙷e,a 7NÍȶ8 X7ёB;!"i!%bR8i{$J(cG!&Hb:Ʌ A~dAjV7Y49K[ 򆩦'jR3v5x)"YʈJ h|^脊B)oj=I0({f‘Q%a':F.WS8Ađ$,~WIs;4- r7D &TU s ܲS*кbl}Lr1Բ"0&iBlv(&ED=!+լNED8B$`! I>zǣ,VbB1WZ!zj3+Emn5 vdًDNe5PZap71a/u8~PTdu ᬓ>d, ڶ rjqdyCKgâȟ'G Ah$(T8= ?dƈhcGp|ؼ[iDAj~ܒn<0#c#^ub; g"N4fX1y "6OlJbP#"<\7M* ^ّ+8ꆔOJ+HD 䝰%iAG!ͅKB\ DW͟ΩO* Ƕ-8$b2GPo)L T-h/ ,d/v1)4A艛/r?4x6LG$:"r.]i""mI(Oď*FJș $MiOCU Id$@2@ğB D z$Ee0'U7DCb,'4Y^cքrp9%2^=1j΢! 8!3޹vrD$v)G K,$LhFɚ AHEj`hBvgåhzHG"Ks%?Ȓی,0AcĦBt=ar&<2RȡPfW?{$V#nD0Ã)#(bjx ŏs2\pw#-֑BZ3aؓ'sjQ1n3DOzAR,v.v#bVof~K;#kյ Uؑl $[lg qJ; D2?>=5u.:ٙAeS KȧKb!=g ǍIK"tCRߓ@ń=$A8 F_ף_IęٚQB L&AiؙpF.C o>I_s*tC$ @ÄIS+هbcd[]%$~Fz& F X#GN iDc1Wapkoz=2@P-g ؁6/J= oƽƆdPM4!(CaҖVMԇoC~ǢՈss*[UUI8Y"7 2)#dޘ$gƒSD#3Z[ɞ?m An@&`3*F$3m8}cYAb>y{ RFΎӰ_/r"E<0sb^Gzv}NO%L*45DqQ&U%bnF;lbEaICq|#L n-*\t#B2҄^ <@EH܃ "&OJ~ c,0< 1Gx%.Oy(ϚAHyX8qضP":FOR.~|[q"QxI5cBbw#h !aE4uFW(Y%R2xٟ-&ZEy吅{ކ℧2a’LPpgV(*zHXW_G$ң5ǜB4+ ҴHp3N侦2}hձeg$ai,X%*DKXGǡPA4LBǥV~$U~EcqV00fDdc&F/C0*Ƅ QcP{i~+V.IV͡|1c)}PoUPr,6*epw7=$ڋI'!lDtl7wo&ǰ,O)g'|+#_D.Ƌ3 3p5( {gF/Fˆ <.L!Rƶܲr '4Y Xa,B f,E?'72U݊cۤrJGECLx݉6K0p3Ɇ%~Dt+s% U9ېg&]U*a~BGă rTUnL-ӹ̢2G܌3d{ښp2 =\l |hX%1T#L disrZG%Voh+7D/s>1FǔflCsu ' #@x-lGvD"i'!qE_xAG+I>Gb ؎RQ"v}}.GF^ẔrROD<fE79X"}`#$($jrp>Og}+h:zԢTKBdH z*6$ dAhr\ lv$cC/)dhY|hdo~ţ0)2ntPKKϹu#C0*{Q7PmsHj~C|F_Q؄嫊CWMpN"f )M?M߳1V Hwvuى/э4sc[;"\{F-'Xed~~F@1yNx]y_t31#K[1v#\!%5]o_q69-/#zc/PZYJPettp?$nV]\㡭o1p$u;{N` 2iE+˜aVoY E辳ѡNm6(,`p)dcUUY,!lECDQ[%Ie97BPDlM8r?J/Lc;#S3C xɥ a .9 3&2iIa;6hd$(dǰ>LE?q91b{oC) '!MRnJ.ԡ6.H8fV󋱩ui5m.NOہeGI/2;ɞI8 on՞CH7a6ϒ\"R/r&3R)Y7d 'Tm)e;+ JK!:HQ:aHz1&W2uR "tIO"rF"D?'\9:ѨBG^ 3BAzXƔ@cLz: /ABs$Ɖr`խ9ɗDy%S"KlBd+*L `.f4=+>6Oh/cY_) qM (ɟ%DˏM16{np[b~c\4_wm;Ecj>P3K Fѿ3TF> IݍqԽ q}f!@ʇ&03--sП${BFBe Xd4` $ f DRa 9rv\:JB}#$æPEd|NM[%4HQAFTMr."R4AO+q XcȻ. *+;_mJ\ȤQoG[)TM'gF K?b6Ŀ&2gupKd| _DB~RfG)Wɑ}ڔ\7e0d/8`[mXRCVf>D|eッaxOZP% 䅵4E+U+2č1h]>ح?/$Bk%,ܷ@/dڛR8$YC,bk|;D~͐&P6r2:cnyJC1n'dҼSoty2̘|#-vBT+]*lj5xl-j HҷK> FӴ~dY|+^z`e A)>I^Y!&pNAt 9!>'=X˞кw;3i>Dk`Q:W 7hW~QpDlxitLȔ#+"V G%Z|hd삵޷mdC~ƒ/ ŊC䊸tf$6!1It;RբSm ,Nbơ GŔl!iepŠ笆 mE!>#/?w\=sv9oF2VS [ht}cNg q6|jđı!< }i Mob"co4Sqًϑs mA}bS3о ]6Kj[%Y-}җ#=YpM(Re<ڳ+Y{fY8_qȼ< I)p;BF_ʰp99/qCd8a$!pm5Uy6V+3ܙ063"lJh,pLk; w_3 :Q/~R@fFV@!fX3 b*{ #㕹q$.\rTy##Y|OB>T_nS{ٻf'q.rFd 9DS~#8)rMaǁ[K0/'a5 ghͽ&rC+rp17hލN"/ʄH±)KQa! Yz!Ea(!RоV>ć(Q1 $ Ǥ1A, GǫE۟~!Ј9Zgp C\3"(hfIG?mn4HSBhr BRl RvDYun#nĶpA}&à[(T6Hbٳ}$hcGo1j %+O&CE1%#I) qӁ~F-1Sϱ~Ħ?aFel}kwD#08[R,r:F'es+ _(NvSk4nܵ+-e4Ntȍ{ EVr%eM[vFKɌҁLxj:H wf/b{Ј, ؉*.rG&e:] W$yf&ndj&F\ZPHl] Ty#}Q$-7D}aB\UXxY))>H 訽c(S=cXdL[MalRm06'q! 1 hIR2NDn|% FI$ DC<0KDYhlc -@ tE1l(a )-OmUK/& Kɥ~s 5;IZw0 l|j q9PJrfH^ُ:4DHp>%N_Ɔ"6oavP5hCǓӒcY>HrxI;N'@)QrӸ&Bg~GLёl4E |1ͨ^H> 1+5%)f]56@n&;z\!b4k|<sZ:"d&6EpÕ>e#^I)4e{ټct_3asd,\ěټ֢dP!2~BgcCS`P΍hL3C ]/8q~Ca?wc!1WV*aheeZ?7rC"&GS0J.F=Kc `5{l)nw?aNp}+q*R'- q#8e?%ɱ'(4U{ 7S]4R#TnV&0'sQ;gǃ: P%_pĞdz%Jhl49my?S2!tHC09(BR\md p~7-2b"C&w=i > Nآ#݄  1%(n$_|9"?)  .ƾrr_kJ&}£}Rck"Yܐ(Z ƈA+qp`u $Ć, KQ2%Ö,mDH[ 1wnG$/DgƈfD!L<@億Gi:7ҵcd`[OEJ_GՀ)`*3|%Z}m #:θ6lOJlB0~T}4qg4=mG*fpgK4!jbcJ8 B%;; Z(1sa(12:BvGM!㹟J4&N gDl&gC".f4Shj a. '%i2g7*B\ 6CD.S*̰[7Agx䐝p%C' 9i hPmA +q$'Zܺ%baǰAn#aaS e `rY!)l?slvXC4$'" yߒ3"ۑG  Oj x1dH]n16dgFi_͐$rR~G-%FhdyZEbisb#șq@y^∀_$K\y`Ȑ\sFdӁtMn%rO"X\I22y2dQ6(b>aV"]0h 8cCtIMwhlyC!RMp%9҉zV3JpcB,'Xp\: {GpK &?B$ <lbS>-Vz$A+nJ^I R#3Blۭ h akD0hFIK1FLgT7PG @K2k"I:;?C·Ԉz`Ϧ5zbDе,*!$^i%)M ;8 Bwqn ^Gt+& rSASG {7W9:K$I2LW2ܶ>Уƨx| &%8h6!wRAn_4;(:5@RNa9_fI9|'h3>BH| ᴎDp 11? ICW^xM& &"C$B61In)q:)4/e; `#JNBCcPuHj^[5R@ߢԧ[OerF~⿲GȞab}rw8~,AB-YG {40avŭRHlIcben~ ?-CVDКݕ'n> e Cv9x#!>Z? *2;^Dd;N̩~}DQARbf^YŒ4L=qL'E /a 8 K7S <Ҽ2B~X R" "Qu&Nm_УWBy2<+Ȼ~G CGMtXW@ %$Akt}dP*L[}0፯ߐ(s<hnX2)( 2 . qYOrwEr| ??Կ_Qx 7- KBHnE 9>CB['?A&eQ[}.s [{}G0HAYDModfgT!RBՌ% Aȟ xI$WؤLInġ"0bb$j$Pj7$z#bt=>!+e%% Vp"xV5Db #&؊ODѩ&tHLk-Ƣ' vݔ$ XYZkYSHi-58 Hѩ$xCoĪy}?80:V_eKS]4L\}7z1 I[ c^T+`irbPE4LY$L:AAA@ֆl'#v'9F-XBGqeB 8ŠMhяF1Mch\A=74Ωz71&xƦOo2|D?HdXJU=6pZ[VZq H{_oOiHyx'rm_sM|@îOҿٯ+ kЬ n\ `oW'Tפ%cbd#eq\Ի,^視+&UȂ- kbASKB"EQ¹};o LML{@89](=6TK?O2L!n"JmCĂRaOhE>FNDž8}zG BT{|7`sK&Rn<('6N NeW^ e'IN5_?F#/Hs|˖]Cu5`L_hFS'_>esmY&?D|iXՃ? "W=Lh`?!9`6d x"R *,F6_Yl:_ȬOmm$i+I&*VKc2e"0=7Cf6\uDf k$}6LdRiБK#,u(ɮ\Sїof$L[VxLh!/#\>P~F [XcYY~4ĕn$&~Qx%&Y>|# .32n[GISyo(Ean\B6N"AaKo_J/ʉ6I4$wQ{Eb5C5@@;R_$J]I^kkW&eΆ Ivy?<3kzzR@ޅe-ĝG #{<:~ A[<8+5L&[8H1 o$}_IxqW]=2~5Ǫfa{{!.{%6Rlxid&Ԫsi?#2{1 N?c,w){x '{$n.h\{mtW%] 6E+Q] QQP)+4C'EA h"EM#3BHabϑ)zǼ5&G/h/~+DV!fB[2<= <芉0HC1T9m˓&NG#Fe _D 뾯]1E,q)2yĤŸuŕ90m,KD\%.IrO;γˡpޗn],߱gs;]vH?& BW}lu'v%CV"\;w h"ݝ|1Mg}7pWXh\.pewN;Gpa6`h Fai9=R9˲I" 'g$q3| 0<d_ugH-O,m8h̒TY*;[ = m_ѱ='cn{t[qbh!K;PMv@sqrG)ޔBZLқrde]·׻0 O#:rwZP.|s܏2[>C<88.jf@/ K& 1] mle }l쌲gW"vK8%!'ȥ$Lښ#r>J_3$r$PcˣjF#} s#ɒeM"9hxPd9,$DkB4zAAA 1uxelO liSsIVC0ԕ т}fTrSQK}6$oDgId?1uH)DFdD OnIh'(G'F FFC?jRCpGcSǠzwOEGJa~A_haA0Q[䔼Y Dr=?@:0|Nd{؅eޛ1Y&u{.Dc0GB=K+t~Ab i, %mρ(B]R'Ȟ᠍Krc] x({Pԏx-Z&6)b@{^?-=m{~FĖ}P&~a >N"6~ȯyk$Q%`Έ$p*4Zp<]^h#AAȏ@L eQ>v ؍]<ܓ!aJ$ Z/V#Z4F#D@3Z DcǡA5^<Mz1lRFO(<`EBz_M8$L)4ȱ8֯Y$SUeVWdA%Lji9oOhxB$;r\l0گp~GT(6@g8-E&D3m"X=7yx|CIB0/iZT,2%3Z^[vQKâL#ASvvIr~,o޼_NX7X!ף]{5I͗6\#|БAce*]|?c+uic-n^1%+\,֘)V7wŀҠdG8Lş%C&e/9|E$ukmTy &v%/G[h Ff 5Nb-0yf<6j5ˀ|.j N|\BrYhdNJ`;ϙޏ4>g sRG,\#iwxG_"+"UIc ³"gp$5 8%/̘C3} ɂ} \?j7֝b?EMyO2VCF)V8imZe8wr "U#mMݗn1iYd!iG"~`bN/:˳w*,2,0fM^` |w Մ}-?̼`!\Dsjح%~#:Rfi[;₦o7M椻7@-(܁ݧڝ\o>J,(WB0L@cdk)/SڷLnöwuws)c0'i4#jGUx@R3n@G9 S3,a&[tn_J,t3>W}*'sgtFhWN~'ڽ/DEI?Z0,+^"W`AH}&H {C^Ŭzhҭ=v[Ƴ(iPmF=C T}ձ>9M +zDiVZXv0>HOqd矞:oAX֙ 4$sލ˕HzafM;/j%ꮶQ7QJYH Нq]l*yCۤ@ڏsH&tjXO߆<1k3.kt7r¨mŖ^WUy|Qx DŽJ /#k3[usLohPyd3 醸K6GLN3uVf D,OQa"&LO1u}SVP~$Y4p@YT2<!!karHmny!˄٫OZޮoW5\4\U4 mRhhV:}]IS4.rGs_=aAERl'"3 ,Z*W)Gv4"}kC۠Q_r/f)x=QsN1+G×+1xmwcwn?1&rfh)O 5t??s3pIpbhK/jy(!QQ+:m+Vk博 訔uQއ8hk5x$@_"53=7]OyZ ΦNfy Wj[i]?-/QF_DO 8Սn]asŹ;HEA5^XDžghbt@86 nnEU<\mrȆPrw:%h"k[  qS_HObGJ ='mHn0u JLfя=UBBUƹX4[ZcMXUk:됮lFbq"?R(DCx'DZ/XX5 N#Q"cGe2 [Oz#^ۺM_ƕIb$X zή8A}1]kT~a"6_6]h+~&$N L$@)JQR'Ryś=K`@Nl#A@ /A[+(KA^?'2gZ.h?116_rgDuH-D%"%0n[ip4 K*TGDDۂ 7o fj?&>ίZ`&+k߳, hE{md+\Agǎo J qKa4J9B^HH;S.@ ib.h&7P_ ]y<q6B ʟ|'.mVs- ?YC۫u/ 뀫@h H$bwa|AM$3SLpY A(tVˡE+.:pgc+!PoeJ.5j6kk.R /˸(aq{o-zW6=C7lW .dMfqɃy%EHm@ɵvnYyFW\\f,&ơgcG^ QBf:Mra3 rZ K"l66n'tBsu~Q)pSZ ;A`"xɽ{hbA,fԮxf,VSPI{9&tߗmI3k?ogolJ7<|Zcqh "'C "B]L􏞁ͮ1[{ks1֒ԲQ1K[g2MI9@޽pVEnn_K6m4 5r=}VᭆϽ9)R?^U 6>]FsεB9}/`0+BkvkKy!LHĽJԹpE5ne2mG񙻶#l5&K~qYC _=&ގ#h6/(豩2/u,wòB2ƚ%D[>T {5KUD2E8I&a ϟF= a+`k.0{J S"7 @ hN]d4pe=Č;b=|K~Xf:GVNfd'^sqÅR9{`z&wƩwC.pϦTw@>-(].>C%`G {7JRC)z1]!l?! C1cKg'uXOtxz$Ym3=boo4WZ@{0c]Ek:ϙ;j_$X@A-]aLHT߆siI{ke(c&C)Xf̈r$W 'uJ?uXcqR0F"Z %ǜ=ǂjHh!j>}2\pS61/{h2uc0=qu;,s&o/YS4 3ɕ\j" YW<3#-SP+úQ(f4Rd%v+6NLegns=LIRa@J{JnJQig 1J&B9I WycdUс#f&#I\S{l'fNJO +GF xc2?>s-RP\ 1.Fߕ da?PrUx|(r` nk"%UinߕKU`;'#[1b<~V1p*/cܠa#*+3ib*0j=ZP?`c˷)c~WN\1}7) \U &Z xr<ճNqor-{ʵ!:V(о&:%hqO:m6u20 V N}~4עi+Tjb9{XEz`ͮYsg]*KEjE7>~!1V &lQ+u(BJ~F)\v&@lL*(ͩA`s*[Ҟqiᳱ%Hwgʓ9(I{Ϸt #LWeMMF0ğąc0lBr![.g.D,O?06j Q B6 d~-|=7nWD\ݻ S[Z oErÍεk/'Lo>vT+ԗV(>opZ ü7-| n3nҕ; N *,*ʼn7ݤ?޴eoq>Fm'g;jƛGFnFԲ)yef\~;;b~$blĥ=LW,gBY' ya`XiP2ADGS <4%r!Qܗve7΢cmIGn.֓^L(p]Uu %2?yyO$^{I,!iS[ʰ+d,Gi}9̀IJi1q?7Das=.ęLE; L\4!3%!}ذZ'ZztW躖Sfj>0fY[sGŐ+6BDN;Zq]Ĥed澀2ӈOsutAR+9P5siI*_{jf9 sGznajUb ޙkm0 ftOL;B` -BlmxF 6Q|_ĕ{aF]ĊX]?^EnzAo21mPqtm ŝ ԄR5y q%/4$<LڄnR-A!܁&RPވ;G,Wބ6J42G.ߵRI;{b*8."})y-ndPE:Â\3AQj+w*n-a.E~BzL9ìUa; f63O79FӭQKB| 콎X 2B9zNҜ@lfZ:^1}eDy 7O'[&@\F&T+d  xЪgT,'=EiU)L? bA(j[?cMtǔ(oxF18&NXR4ne(Uu24m w*)%7ؿMq>UI`:9Hm Z.u~6қz)Q2"HaK#*BMYs6pdtB׍(j/FK*1[3|oU6ϝKx2GZYp*N"f%=O5hS'-h5QjC(,|ԶFz<*s^uY!VZ>%fLYDy O|΍nû'b nie"U4-Poh"T +R ÏQxy--\[gfb&F5t( y׎D -aA>[Ρ"-]IojBG05)V:e ;-ۺƂGZEdbdtnhm@H0_2A|]wJU+O9eժ3s|VWhy9dPK`x-րp#Ӭ B K6hmq@C4^Be<Uuc ob{&`0Yi-]CBK7浫 a7Rc%t-( $VuَPY "*!| , jck()n^_.`3\%Lmk|G OhhDrWh76Kaǘ_#ۖ94|g yA .bzj%|9l9$sm$vl)lt@}rjxpyg,{ջgGg;'N{vGV'jl_x/=%yDU]ZP.<_ИMry1yf48bfzb:伮Y̿SK;şy=>n=_?;;9ks ):b]N8%g\O_-[S]Д:]yN_ 7X"/u Jaf!azS947L7T2h١% RtO g( ϙZ)T==Sf]д0eՇO35"6G}}[ .72'Y'{35u}qA,[-pnP Xƒ%»mnf#gM|y7_~/ r')ղ-cؓ_j<M^Mh3S0)l~1Cs#>b5T#a~m.ur&ul3ԧ=cq/hyq}^xY{3<s6?Jr:O/\rI]]ɔ\K7ƹ])Wf% Nn ngZ8:9& r Oh':B$WU~7ڊnH8{jBb`=d~z}t>x̷:sAzY!Uqۣ}l.GnjU$w {H(B.Y) w4EQ&MnLj8B)ǏS_3pcy~֡kM*VV0\22WDC2mqֵ s{WW“v#Ў>7 )/Bgk&c"ׯ *+ 19w9WCAɲ8 |%^6&V+*'BI@Zz[ѿf$=ń8>A27팷ĖB` J[xU '@'8 ̌d$ T k 7 J8aW4y8*@ !'eL7*6v֌Փe\>|ٍ\KS=1D!P m\I1gZKDŠ&5ưHNQ Zt*Ӑo'|i.E.癵]+8MgyLr$>QmrTnXI T0*d$[3H-eiRpdȳHǖ)gF"?9zF-cR?cHԣܘL$̹l&=pl`H"_qUԞ0W8%' N,T +$Зۙa6L!\ T'D*8V'YE0q^{xn2Ƴc?(W׳1DsQ_ r58 A*LS{/h&J ;HM2H.?s" ۗ/h2X(#8 jjN`>Ž>uG$^jb[mwES+{ Ym=kaTXpm^luc1RFZ~NI*oǒ!' O D-O"㚻=uuyϽo*h9`ȋ-OShhg7?aV˸c cI <%35bEj-at*g(5q}_4ɚ݅'CΫ.h1Z wcR4'D>`Yw-dwn7|.5L\ϺGwRj[LWYJζ2r%[X3{hG2n9䛝HMef\[}bmG'>o>!B7EqKct-6畄w;8B)9BwrWT}Nex5ݎ/)7 ,ȧvOjO(鑛]˧fqd ]&u)cʤ& ^ִ5mOXK.qUݧ }MI'-7P(˩US6*;mK4g;jSӛ_y5eOwүȹ{úvwe|z/Ovf&֍Vz+l{(-0w6>^gp_{g;B+/|FƞSZ3enfV,WX1Uh_oSאfvgn׬m>Ŵ##;4ãum"jPqgQ8@7iuoo,c>>~<ǝ+-$ND坊gz]x8:L7+˥FhloYͧ"EAN3^15xo` `ٓJ)7>SjyY!.[-fa~v 20l$7Ik_WC ڜL3ʶ2Be˜&,qWJ:'>z7S$ %Ѓ9т33/pD&U6˯Bu\Xo YX<=N,T\zACWp/(4Bb7`#]/_Gtkpު2\_)aw CT^DF)LK^]]ὠ?_pu n>ɓur*̣-knGPWv?e%b}4֮ aw<*|S,ݵe<0}b1 .m 90h8h0#Sfg~#gګ?ͬ9 +#̷9g_f?$$BfN8VON~hV12+ٖa,`aG=SC_b_bjP_ $ %bﴫ`v:GnLTyғqZ4H(iD6>UvdrAfd?W$+3=$+䟸A&\"G"("n}Y1pwksw]#&[ ׾vR_e~=^IHKtP77tbw5X`0λE!}m3F^,0)8hÎp5[?ZA(wxbCRzes7$!x9s.Gߟ3_(+{n}V t{Lx6d?^]< Xg[3> ynPBS1u|%%;JAVB@h=;8OS>iF*; D=1{ 77٭[3l*w$A~W_M(?kv#]FgĐٔ6B22LKF8$T?{ Gڟ6unxSzt2nI {rTI):+:{hk@utUP3r/[J& x}"쓍~$>r[}bI $$ƠJcρcÖW3 R 0KLz_ڊwQ!qUbG=ܝYƿD /&Ц0^N:ewo,NNvly?elHVtWrV}8vl3DKMJvJjVIWhRЖZ  ^:3= cINK!ǡ7;+[/'$ {a(ͿS$Ԟ_w$9u&E[]Lpݾ.~W;TӖ Gin{VN,<,G$NYoFUpMmA9 /l xLn/q ;K4 [vo=]bFKvmt+8ݛ?5 ~3PS1.N [h@٧w2_M[C%71YO&g鱥`+[lkjф@-|E=_,l1#EruT5^8te"y2(&'t-ȗO%ET}-8t9|។ EHTI*yng3Z'-eXFla9DY㡽 po70N}YtBqˎ >;}:d#^j&Xp}/4joCqkrCHyz4*sA0 BUhk _ُ]86jl>fbٛg<t%iZtL9[-۽6'R/Zaa=.8QO9e;=vTPR[/ &%JMa`>b_N|u *ҪrKURGCfԴoSRiȠ iFP>2g|K!Kxo]ΊTܘt#[k2wZm_GT:f@iFBj57 tvM.hȚyNe:fK8!ظ@ъUӉGԖ\z\ZTNa(C1K3灃̧sm8CIy;Pc0toCEYIOlTPM{X@dVywe4J1(C C]gT1f #vcXmi 1\ 5?|Wn8A fhA`cٙ ?G@|`&KF܎"Vހ#9uVX^8F()î2&JkwFrWuTgS?<.WtP hHAg^fA ܊&^4 [v'gёPƔ}'cWk_0N&aY.ojrK<;a?qFcfv#4?[d2ZӜIZEmyecGD2NK,Mc,xcDfrͧ 0zJ#X 5EE̖,ƘZ~٘ ~o3 ?O[[Q2~* %%Ky^}<0Vsh_eTݵbQU.8ӚQuڕq=J9;ks-dr%$sy]-U{҇IT>AKai4J>DnmiB_Xy`Kv+r{v@ 5L`'3}ż] 庤QΪlu/P>&|>~frտna[)ʦy psN\79eM"v9O)8} l}NӻVgdUBH5[cnI IBSnA(y,K:1d4cc8R*em6s g,Bm.í׉Y,,I/:ĞLug!7S*z.ᘠIΠ+e(X}+XۿKocρhD? EUg5%/h:jl\= Bߍÿ")z1~H0q_+uv#"[+Hx$ިq$!9ܘRwlOf;^-aկ }DLĚ20$ ,sܟ-61L:3NA8Y0h}+Sq^h}-/:RNhC-$_T ERTg6rS1:/ ?4adܺ&}xE-֟\S`WPīN?/0"t\I~R#v7 km UV&( {c<_c@d9\4jOg8f{|fSMY9k PY(ʵpN@*Ϛ J#mN, }x_ f̘Hh5SBJ+$\YYDhx(@jkt~(/)F5ʟl Rs7NZޭU%rGаG9ݓ;ωg÷LcCW\e拒+a(k؆"+dJG9bg6l(}/N._ WOTϧJ.DX>R(Asnv3HҒ4*!ABIgW&b( / 3isiJE~7Ⱦw|mњGA׋M+iW56&Zb \&K rmϙbI9l}*S"շ ?3"$$$H @R4x>&@$T( H, * (JTTTĈuuΞYkϙ==35q!dyY朗xӰ7q6cH¥Kͣ_b&$dcEݬ8쎽NF6aʖ=ni6l@c K2N&b-Y}G!źRD@/?oSБB{ٔm8mxCeٿ{Ccn4R~+ RJU3f [a(3SOγlxgYR9z^"^Z R2n=G]KW  -tiH\t퇼#ڷkѠ[_K^X'EpuB:,s6{-m[q[݊s!WT̬aHZL&4` Գ[쾘 ߗSQwo^ eO7 o s ʛ˽_ݺ5-DqjWFK/;Q:q?, SHN.tOR "[Q[] jvPR󡯌_cNpVkQtN[{ΓU}=asDCBvP3]¹c\Z*eCmV_IJb$yCvc}aầ-L) eW@k9'0?*"a+ ]YvmNb)W3|t+K޵<[b$Q2α}Zs@2Pza4Q1wtЭd8K6+GwW:it}j/w ՟#0Ѱ8cN.X[l!gBz+yRG`s e<@)v~֠m/k:ҖiIe |G֓ T8՘q7. xERىCMDk4*F w.6M!s) l! Ⱦߴ*Q0O8В΅&Wd@Z T ͑ܜ@[/v`Y%)~@uKbt"t4ǥiz$4ǔ)Cw6s_^_ UWAfFCN^xFB|xZP42ް.vm~N\^,e ^)VffI x$  ?"v R++~K@v+D<7D.^q.@G @a=G:1\gG<;Ǻd'ۆzLʭ2ѵNX pNSډJ`aw|a)zE['AQQs9OK7 ݂4œ|^Lt`m?ݯ)ڟ$qӥ־@R~g]Cy5CkyLI X+hMF2}[=VU5 傅BTy%U{Aysxe{sGsD*^#!K% ㋃vc.a AIh !ܐ(yAxjpSfUU7ppفT鄝Y#5qB-xkGOpaJ5 !$Zl(LYL$̐(M~P^@o@] xiapMˊ1}DWa^:txhx5y˼ As2#$z&<57H7\~A1]XѫI[Q;gѾ 2K:Ё&Ku 2NzHL3 s <ܜ}R_~8rn=Ь?'jyK6f+˵.;2b{NE'ZRzI]&<~h oiQ-UWx.*뗩X +Aԍ;#D'! st^)dƲDp>4\c-DN":U5~0hكj,x`вCC%eNVʐdΛWz^rdr~h4Ѯɯ&as/p {4>}̇ v.0b! ꍑ8Q=fq;?bl'/c$bn}OcAН\' ޔ,qaeh%|ŷוW OdB?RθIm+kBiHYՍ S"ٷv :u@Ax!rn9x' }jS~Ba!REfЉCU~vZy;KkNSZB#ՉtkGM:0t`zSj a}@zc# [ǩ~ktZ⽉|+ޛۧ`uww歇zTQj2pG֖4{Էpz]0D>P |aV<9ηHW}xũ*tĐVՈBych(Θ_38羄FX|4 DK7$.~f*ehU>.7(&N&*?]e>bv.'FXimjIhmCWf0qvhI_oPj%yp0=6) 1l.{Y谲>+֪7 DsMT@1|sp؊7* $,/o)9اu)t"s<%g,"L猣%Q:?ݝh 8}Z:r>-|FYQv+Ď5HV9EFM'o(5+'?/6>nׅZ3 H,= myюKhwn5"&%:JraW#$O]6 Vƅ㙙O%"?;}r.~YSaYɠ-%OvB0hZW (TV:v\г,OG #,@wO{Pe~õ~uN{`7w]UzzgbKWwSY Di}V忲TԜϜaomUWS%oޭ=^벻yMcoōc~K6ޣн噧LX'RI/o 1RTl/ nޞwmo-y=􍖙yt/ s3e;wUJa$viU.2LY5{]e_9! ɜ9G4X8mV䜇O )=k/!sr)?kwKqM-/=󝴿;u4!k'iqYv:ӮցbE꣈}k%dPn]qJ%k 7sQ.N.fцb5fy&a[_?#ЭKUPg$Ez9}-.|~;WvxzPMK մݤ}J:Ck;&/³{Њ-C$(~ʵPVV:$S8;0M,P?m/bV#ߠ,x9ƈ@V^D|Ґѐ pqfN|Cr'u- 7fLN_ɥi;oha@WQeBo:ƛ|4ovOA&o 6'OP*73Z i9(ZI4̠&4rVg/n[ =PvsdVG)QGEށ;\!CV,$?0G? "7X4lbv轅'Wɡ-yfy}6YQ^YFj<48C&pZ,>ǗtNuׂ]dOzmڎ+A=M~w%gH4JNiAw}"[7}#ؑw8d*h9yneV,w`e=)hzןR /t*6{9_ZOK+hm__n5qD~j2 ג1f9&9`< Nv7l;(2F啧b~c挪'N$YAP?Y<Wx>߿$ vg>?zljbt ֒2.:D?1Ei]s+{4q0t:2K3%wk,Zl4|1ւyqYbް] {тtolQV[o]uazQ8YtA9 [%Je+ԇ-m* DzO[Ӂq qNY~P?0Ы> ?[KT˧[דʀ-KܺkwKWp>z88VFfMWz|sSZkW-]AxB޾z `5+ֳoykN9oj%e%g%ʾg=uEٌE6f:ܛ_*gqVIEh|->xnYCA?t&&`%N(\x5#"qo1Ê@r#XÀs6mi>&3 `T"{Y☴Rff{VV(.8GpW j'%PsGPj'7!(߅!qIp~4~s~3Ͳ G7c7-L* aOn6H}[oǝ9{e{|}.|*Ey֦>NԨ?)򿓓j  $[U7l4LULT4R?gnA'kL7!~9?s˦RptBzT~NkbWArщw lFx+f@4s; bJ8SG!W tDНj-_KX:V.OS  >gVoŮ$}0#W U6j+?am?gZֻjm[oE@%7Ed5qHoQM ډe' gYB 7FH`mI] $?^llӝeL.sӷ^m:t_g܊D.)g^[ڔy?9jԉbxeȌStSxߎ*81^ *u~VV9 erX/Nk> nQq #s#f*ԌT &t*k4W~*͙9f?i?יÖ[oMm#w~DȡZr@ė{"d\t#CQ#E_{ʆ$wF?{p)yz,@)5yS>}9M{m:O- `g윇<k]W~_<:ީ>nmq^St\e )\3u eȊ׆4~apznΫX<IS]*=<ګ*?|q n'?2O(z1ϯ)/.6v,nU>Ic昶^f!4aII{,`\O}E\.~n%ipY|V+ Naa`4\NJGQKboKPJޠI冦Du7ܗ4=[s[@[^U5UvZYЃ?:7=0hFf7lS.1I Hx?K5v{s٤ar4^5Cbja[/NdȞ_xɯ MNl_KXUѠƳE_4$9ef`g ]񁡚vJNof }dQ`<5gmcK l ,0cq/5E˥iqqj> Pg )"!Va3C› UWl$ќPEǚ2'iyEx&wuCK6>) _T{SYmE% {K_n,>M4~vuskC2"VZIuљo81Em.푢9Qݸc=6<̘{xagJpB a5uvef_ 'Z{+j}ߡ$kCK\Wb92<l9MIƪ>%c6\qK26oyϒk n4À(j4h`7S:8'("UZPh.c&#g$S2PZ R(j6XJ"t:;,4 ifNA^a'M3C1c7<2n7x +PO^S1GuT|pNFhK#VVNSǂIO QGZRE-K׉ ֤# ӝF$/rdR X^[(1aJpspt|`QsD2Vy`bA̙$-. ~N=N1G7ˢ؝8=L'/%_VPM韋hӔUCOj(d&> qg)W6ms+cZ:^(lx:%A7H+|lV=MN?Bt Sc&w—G4sr%m Y .?KpZ(xg2+Y7oL5 9B8g9"Sഗ3q:TSkAC3%;U>x[}^9b!V:x8ih'oO+~V@қrYפO 32O-3!%G5N NIkkkS3 UkŸ|H>͡]-}Arnl{讼HIш9'L l3'ݝeo;դZn]nZ7)H8{!%tO}Ĉdb8w %+Wg Y߁,^+?8VZZdn5 bN=utG<;$(GuiajzB䲎QTْƵNvg)>U/; ݑ< l>O0\1K!JYͣi%vګҖCX|Rt@pCas*`i.`-IQxtR,p{=!ӪB>Bș^vۑ 0/i"rS9 G@ Պ>1*rHf""Ԅnͩ$Tl Eڹ^ XSv䮂\uji[U !;m{(%WBCN>ayh_PעU =0qvi:W|*V/7k1$WΆ0'+Ni-9}7-yKs1LSz9 НU;[!?_Pt/s +iL;lЍ|EOv̨=>p3F+{IMڹ( )J)j!:)| w,y݆Jhv>´T̆a<ؑ y|W*3v>0 !.ȹ[$[3;HtO 8_9x)ry4% @!c}8x,4 7eHX҇Ԧ:#F<[2ySuGV=?utI}QJ4 /^|*u}-x1b\ PM3lL; 7;m_nb o˝ž+2+26uZDܩSDedjT(&|xN:lAR8TوNmoPm.}:8ROt_j<e\=V>z\qkWڙ}PK8 m[g13"~JÈ!"j N )s&GQHc;2Gw,ˠWh<3CQf/"g=R'Ν$8\KW 4ɿfjYeaD8w3 _*<+A)@3}u1媹<ϰ]upJmyIg) Cv(bMÜz2e[~ᡮ#܎IX|cORI}ai1w&h/W30PcQB+x16 |o ,\`'v;|\]!sTqS*Ũ$1>O<\e}J.BS|-븾,to[bl tN ELTu:b" E9'34$tZY@Q^J3#<'Y}8Q9 p:`[ R6z ߅(ԁЦ,|wX#…?s5N~ -aAC xW֍zO(l)3|_8iD1>ZՈvx\Αvbb:/z:^&ٯ=J8 #t|K R~},n9)KB6Y]b kgb4R(u&yT8ʹZ\XGow/XQ-5R׃HH~瑚31x_;r{$\3(JEm]eDQ۱"r- @H-CV:r۝Fr~GXWro,e1;LJhxߖr`+j7;Z"q:D13qXӣZp.Q ";-W6-}R?ր5E'Hv~9"rGUҐ"Ŕ%&v|w33(Şr'0Ȭ7Vf?v@jDjNl48:S؟on-KARtX?BZ ݬ?X fHl7oP7{ǥ_#N>vuE"+@aJHcGe/n\ rq^S,O?`+\s6߉asJS2D ՅbxMՊsJw ^C-zK/{NyLOL]!l Q.1ALvXJ|vO?pJ`}'؏OÂ){'̒MH,+P5}s?dVA3j9Պ8 5'TS~[.yz-6w?S}."&h "Wrh.|kE%tŲ¾ 7oe\<U#wpEa=mn>^J~@bޓѧzCtW:ȃc; 2@_xI*%jl>9m|TQIEKU'߯~cM(܆6Yb:*/;70JWquoA ^Pi(lg~Q^oY>`Lr@8V`n@Yp9yLK/z@pQFj^_j«=>0Ook%!D?0haJqQ&3:>ky4QMuϧ{'1*p _/SL/2!zĥ@ꖑͮ&T@Uum;g}Uy7j!njDyޛyXeExah͆W~,,;{F7ܭ,y0.y㵥ljay&`45Vyr\Y fo2Lgg.lih[HuûHfʔ8ccCж0Ţbz*uh`bhs=-Y216ܱoTS0x6Q -Z{Au~g?gn&kW+wГMWRz> 0PrD(UQ.k, wA舑EBm\JcB^ Oa֦g%<Վ{%3M 1üH^/%_YWtt&!0L_e2)P g?ᇊ#Os qVюiUӪwe# bbjP>M2RWuE])Loj0 S.֑Fu.e}]>'Rc2Ot H;&Rqd5Gxb5+S6cl`@l6zo'1?ilȪԂCYHw>pW Ă,Nu{`EXvsrmD=:ycC || 3!-o Kfm] !2)8p8mC.^LEGuRc+bQIT7ĶLLb6JJ&zVC0~=/="EY;/wҒamxy<,T$Sp 'd>(AժKJ /ⰲ [q[HMg=W ] #!mrj3dAǛamd/@o%:I'lP.8k)܂z梋bGJ6K嬃qYV.An{ox$> "U֏uK?`S_q 2uO\J䒋R>^b}R\nP/R| ],I.R¾,Jbklj'b'@#q |W>^%FMi^jmB-bP7f )|H[jID7hRCZW'ɠֳ_ժd·(kZ1֦JZllG1`j.`Ky鄁H =&IfVyfK\`̩dzŽ#lb6! 4ي;`|%7Yqs>@_7H;Jy>v8ؼNb0&X sO\gRLjٔM_FU_xzAt?q25%/Ĭe 3}LfFK}uO(A-ϓS]ìW8cq:n+2ߎ N F =lSYm2Xewn e4oIsT.M,4GKQ%*ɫ"CTIn_s^R[/toD&OҠŸTx&w6B}|ڰ .L[]mIj&_)O[>H9iuGXV{ᅆ $xRF͸R&$p h+}`OS IO*&mX#ueis4AcBqJfc"ٔTυj oB<-`5fKͲNqmG]*+_*UlinfG['<=g l}ɔ2#eBtl)窀Z]6R#f_(J ډa^[. &{jOAR/2QW%s|xɍ.)!bإ|g+‚Y%iFu?um׊^aڛID*׏~\1T52oyrg`]|Nr I LKnڶwr7=b q #SReDrBEas`ʳѿ&6NAh?ҋ;]=Ip_:TEѿAeWgϬtZm֜'UDpqRZqY27Vg+" I*#,LmS;v0qEzi ۾'n9nړ^\?[R֖,{jn+4:JZ )=z.nssOqRzb^1*P@$[{x ԍઋ"jD8o҂o0`=衰j?I^ I:Xȑw|A"#tQ%;ڢKE<2n/M:ǵI)}M #*4_4KtKlA$ȑEzcA]ٞ_]nۺWWi>#(^e~/|AoTI^Gh04S%koן2g Hf׍13JVa$.2Z\)/)5.ѐRBLhW`BK?Phs5 /qE9=({J=4R5M^K T Bf?n[Yzi7׊JY1#cQ4<)v䓃ej.歩x &Z {F{.(,fhEN X@k AgMų٢f>>C\ߛP>9@Qjnnm= Y45y\UM]oi"qMLL+ޔANJdɬ\\6 N <3vf:`D},Y.0qW}<fqU饇A^o) c ߛuXg-/$\dRse< Q|"f "8ޚ-=.Z,W{h؉}&ҝBQjz4+Ng%ocb_60=Ȇa*$'bٽ7Y h%jKMZmhL}w@ntԀ_[jFў`7Ig[ΔЁ3=a/1eRy:<ӫ tdXx尞[ᚹ`1׼ɰa7 W4 LEMjTίMW7> zsqN~ugQK̺.>m'Sf#+-1 Je@7mMKi/5+V,^ Աx0ۡBR<:ae\mc$3#&d>6)ȚUTx׏W兹hr##_L UgemR3?+oy/JB%n'yu I&J%NYT2ҟ]=s7@Vբ1PsOU} &BqO =s Zw>TxF׫4PkA5`H-/Q̻ưm<[M~Q-xu[ַq@B$ɨ9YXw(@qtǖ1WWD~.a[_-KTZhWTfk9Fɏi:$oxsGRKvn\y;@ /PW ۢ%B Tؒޑ)P=}ȴU2HبYS'N~k9KK;V1Aj]wVvoEH겒 "k,SiCG6VEb_(;W䲨U3OB-`i;-=[,t[Q02퓬1Ѓ('Z qYC d?#sjdWe! Kx\=i!׭t5E @u)a#BRjEy0 7!)ʋS=u SmDض?m%$i՟QdzᨹOYKjo6M{_I:hVj!GWC\!UM dpxE1t Y#\d`ג\An\^TY~.obΊ=*8StCefFb(8D'|(oGEIdϨ6Q3Ѧ`!1γ FRR] kJ<~seswS*V˜Rϡ6. 0vtoLz~x.O˸M!DjwkBE?IYӑvzj8!ɹg!YԬ~#& ʲYS#>S1%ТlbPrn:u}=4,gÍ¢k"A?=ʅ&'žKpWmZw}ZZhuhC4jȦ-g04*1qڳUMеFbdz2o뮲thWsw`Y8ԡgrf -n+ ^[FV{׷XpOaw&2:= 9|⯍{vV[|gV:uLjtqC3NCtډmz ht[|RۙgkHb~sŲ`/зC%Y+frkDf~@^W~8-\e-ڍ?\3PjXv#mn~T2mRQƌ3ɴ}%֦bڄ .7`^Խ2y-R"}hTRs&ELnKX$twi Zvc`Ki?Y5Z+%޴/R4 R|og7ltxMb ֕jԫd#RNPX; BÂGbZ4Nr@T a ScLg+ym##,|CNHq©:yB#P-+5fr ߢ19yxE!u;W>L\ʽ]04pA${kM.Jok#Φip:ZKjAo+=Vqt}KxB0a-اNeu&V${Q1[v\8!OO!{UM2Ď %A\L%KN=a㏺J&F}oC=3ČY֛i I2Nq\uZp9uGyHp5w ܩth&>=WyLmɐY~[_)]tqs9]Ӣ \xAg}qqz_xnO,uP= VѴCbAr!FI/K>Z/'5CvdLnEv} @* DƦ`aڱ䖸wq&؋.[V| uŽ4v;ڇn]!:xk?8bӕy}z|v.׸zFtt+'J W !NU #RA1SI3-@J^mT\pGZ[ai2~x9~bI"]m ȔR_F{nY^JFo7&OI8bEr/B^r I=4|- MObj"G8%SXBDTh uM V'Z^ k:Q?mKtjO;̩ "98VR7?i&S_!F4Mrn#qk;{~`b.GzE2&fJꄓ/WqMBs Պdw56;G o)2 SAeesl"y @Ԥ ,oYkHl֑T3lG}8?  -&S ,-#*a'])('Jn))!-ٕ.%=+,^( 2ڶ\%2B7[nO[ (h fW*(:c䢂X>j~:D!FQC2LpK.5IV23.6zrWulEZ .<ބ1ODX2$.;SG%^aXњB]d~K[Z֢aUaQhcDK$`>"7"`\N`qՓĈ{j3χxAֹe&Y>/G:YR&?@QuExxf L~:e`4XTS)y,r{^>VQi>+dlZ–B.7XMvg,~:y[&rm"y]Pa"HX5f4|@ӌa䗳G#0x[`C1j1 nUmem`wA[;У)vgpO(So"|/" _ !b4}IYsOOa Y+9[HM!Pé"gE[vo~Żۉ1v6'E)️ e3XaJ1hQͬ=u̫;Cas*aTzM %ʖ|0RivAT=Gޥ|3٬W葋n y-KTXf!!Y%GHs4NkS~d  E%/S^Zt36TsG~1ȫMZ,ƥ]P^Ǭ$M􎱪 s}M9$3\.hl{}(yϾؼ;jVE߻kRV$y@j_]z1T lئ-9K]=S G^N}w)%] b!ԓia$6ŵZ'!!PK/jA΂Ow/}xf¯~񛽇ilЬQu975~lo/ǣ˯IwBщ{!H7 7`y5 Dus-7xеZ￁OuNKe>bҬ(UJSVq;\p*vQ lK0AF_ @-Qh!kp?zĖtstm )TC]ݡfj}~:r[Wov2B쵒x큶o5mvt>%PyMӎa>9oA&zUհOvz?%JURO8lL1g?lj^4u2ǘ3s݆.,gpy+p"sшFG~m}2{qzB *U_Q oZaٟRsVoQTA=]nMHaEJ iT2WqJ,C7{%ݐ-Jق,i ]FJIJ;_i*0w@0Nȕ©PYef$71ůgc+%"nf~ǴLtB jԯxX3It2\)ޭ=WAկnȧ)e9d4;ϯM~fe=sW0?oQ-!$7Ş!qQJ2ʸPcҏp~ɋ,Y%!ڔi۵dGe HEm6 15D31XX%J ͱwr| (n#<Tf _6\R'.F&B٣vkN\~Yur_ņۊ܄ ZV+R5f~MYG;ŷ8ݲ0*z%ii5 x؈ݙ[P\d7)4O=>,\yfgV&ĕ5^/Z,;n90h[r)hv6Q,a (̰0>5,DY2<\^=:D)Rj J0ro̎2c"W}Va'cNǡӆ|z]?Z^=/^-2aߨ10Lb\So=Y[+/ǭ8aк:V,pe ^G^W$ǔ=.acY p3OxT$3݆7lA3R?v@7 ˽sS}';{'<VV !1a CvcSkH>mq~vYgyGQ C>*'N\HUOdM/EU4_j~6$ۻz(V.'7V\1%Зãv׮bq2[wL1bp~=R#Z`Ge23$9aAI,d`&X>\f*}R0;T1ʱزVg娿p:^ &ȇks1#/N(5ё]w֯~l5>ק䬗=+ZDbMMo9_m΁8M!ʭ5_0~n:St<iCS:낲u q9ƶ9q-\j + wtw#2MmR6V5ۋ0'5Zl]ƼR"jݸSD;7KW< mإȪ–z4COR. 40 ImYjE%7o{3ԨĞapmBp$b_e&GJן]lכvٖ*H,u:X /cڇū;fI ':,AIǩ2RdYuġj>i$+-h{5j+"w2Qoy.&]ڗ~r٦!?V^xJZzVsihgMQd &mt^d;LʽI䬧;X񕬣jѭMS`]3̊h!rF5$kP$j?~? :_YzX]T[PA){^I(.l`9f8>0Ql'٫ͩv"#4vOV\~Dr.cfОڕ{=Jz-ТzK"'uzBIaIa8܁ɬ\ٙvD^ QAGT14CmÎR+鶆U$&["(\&h5RҢ|Ӷ!FZ<7uQQe.w`EAP#1Kwke;:Q*Srq$6but:{J30VIх[^bVz=Թ=X|󷑟?maVe߶/m*0$iDkA WY&-ox:3\/ILyCnhGәnb~<BR )r:ӡ(Lq|sR92%LbYgT#?9oO!x&,yyICU"Eq Ȣ79cv=ϯ dPљW᳧C%]E; +qMٟ]QK:Ϥڽ 4㡙fϵ;ۥoJ%wK  kx4odIa渰c{UDBz<`t`\ÿ,KFai]`r~0~66fϛ.-~; P;rIμ%qn'arev(*zGκ[oƋN@ z:^5; Feӊ.-C2Ş _Sv!͓!j\=ѡ,+-KC PC~Wi!zv̯nРSEM4 /ybS=Eܷk͗"Ov<^GxŊuQ,WSl5PN9}*wxXsC&N읛W#|$=?7tџ(kExF[81ya~g%wڒ~١۴ Δ^]ݚ-p˿C`G [$j a-ɷ^o,96aQBSFouLwS0i_6Oe]Ԫ7Bp-]"EɾNǷr~ Gɱ%s^V P {{X 8 ;Vr>Uagu(1藂=Nf~MΉpocC?Wx*(jExW0T oU/ϊ-~tj2DT՗]նѮ{ ot6h~ۯkB{`%mةC?8 '}ݏ祅&02O?6aqSuN6,H\PyJٳ9Mt_a7tt4u$MdzQoЯ}lrL|TBG6lQVT;~_JMFh,/z54Ӓ7G܍Dm!AU{脆3~B`uIt?ix$TqhO}ivG' 1O\EKk׬ +R3ve?v:WLT}<)6osওT4HF;n60P-E{\: Г썾'S$S"q/KZ)g2̄ I K9rqM o]ECJʛ$07/k]rd8>_IvHh'-2Whjj+ajܦ{` >HԂ#">7ԏڴ)\4l:V#)& Z>3B![~0lg)rg]SM?lˑu:d%}}v6:nqj%i c M{@M u?R\jDDKᙓҼ}X2bWJ!aX\Jd"*@v\e4H;zʰ.1` `)LP"=֛+6?a SϘ.Ӭ ^3A"5W"s7mviX 3W2sAp0ڿr_9u/)&ج{!>+*}V53Ơb9:xkg1hZ65DJĜX׼}[J>V^!=|wDԈS#CϦy_8?UϊW껈vC^b.?T7YY**!]*'$iyɗ}W9n"x:]_v3b0G]+f%ˤXS }Dh߇:73忶+>W,=D8aK/r:r3i)vb}j zlL#G5:d!9E #̃^yj%ب &Nv䵫~J2GceQ9>F;'.C~1R.n0緾+ }7N?" ̏#8W. ENh @ 24b ۓkas\]6!3Un/-"-KPCa^L<[2 DHz6CIG۞g4zɅ yוχ`XgO nڵ~ y25;P_R `Zl 0)z0],8Y׻՚;v4(.o͜1ʺA{93^%݃.}#s[%O=R_UbXa6 .)9oIɪo%ȑ?5B;[ hܾĻJKz,=;-檤wEބS[ZqITt٠[Y`T0XcQ ߑbHq'ʰ֘mɑk:MeF65أ9 5!4ppCtbWhC)S<+tN ,皭zpBgLCewK,y!S28HiE2-ӝ%_II:ԘT#.yecUKdлRUxͺ6:h㍎u7aL`|=,8{xhiQ'*ޏ zː@%O+e!/oJe`T1}^|I46!!EA'\bޥMQV57NuZ=`Ӂ0Hyc4CwG޿THْ#+ jI{EC#>5]{\LX =|Tf84X|37@pā yGQ;杮WP !S?CfA6nx\5#kB4!db7 as1C<ӕKaGoIcW;gI~ώ}W9w:Je9yA& Mȭ;Y'ȁIDCaI LlK71$\RMlAbm n:mEÁPChi)K}^7%nG|i#寜AoЧVdٱ48V0hzw/| G/ j )VhgkY8G;*kǓr@(K3ZN2֧ 8v% D{-íH,\gV=tsaGUDwua@Vj9hT,]EG&GJSNzSKٛ/ Ӫ\H$(z M<3c5ϥȥ3x&ֹ,Ex̹+LDLo䞫crrK*h J3$n(l'd0d[d~"!m J)l"sW2#FmM킑ܻil{KiVΘ3)T?:6\*Eԗ4G\~ dXk+Tx9w3e,/#MRU3 Ҡ%*-G\T{|č2i q\+siE-swxriمʿ榳,[?W ^m1?P\dZ| 2I8nboiI/奩y36ĎJ~AujVs7-  _I1<㥄 ΘVH}w5֛T:t}+ &Ohԟi)3ԁk5A֜GSzXoqF,JCY|Qxт 6Un_ԏ TmzA6_"Eï4A{Zr) db `ܡAͲAk\e[R*]>kRr_ƅXS*UȪ?NVv]8c4sŴiM1`NI{ E .zΉ=@T5 4ɟ=x22ro2dӃk(YڪYH{6Mfz< Hڪca%>>(` ŒM L6𧭄N3\U̥ F=eڑ:8mvݲ~@ 築Gny#c47Jm2|>UDŽM(0$1!w_*^ !- ϖ@M7un|KL7QAG<.#{=MC/!l +NLH}_g_T[O%@pLX&-h?F~y8 v\k˽v4$Z:"΢=g6-_#[n9Lk.c_UYнʫn ɱ](Qfj]* hốĢ8slɂ׈੖'X#.Ҫ_d2;[5^o%0zd@GۡdNPƒ8C&咦 [en ~BmenKܒx8 ;]LGf j7^ vɃj3==iuhZCL^酺_4FXx{por{zښ=Tin"n0|@;ȳ|XlŅ"YaEmܒ=yUQRPRk4vev{:95A |+v)o(ݑ/uڱ{VM$ǹ g ZBb^[CzC#=qDϧqWT$cza{V~-+(AFQdŧWMoB*{L$2s)Ǩ]75 vc ؟X0ڴE>AB!7/J1U ~6h}G{+"->ooSE_\AAg!9+KuX=w;x;M tq3dBC\'}Rܲ){nM|f]-:{>ֽDMTfiҤ7 V2:Ԗ !>PO_ 9NP~>{LZ?2hhd:՟Ov`0㨢Yʙ~wUO >,k \O#vZ[tTϽnf^t'lV*3PM/oE?N&Y'~ow:%|`l?{IjJ@VgL4oSL|"ޗUes/K%=4.J pNoBeUfL!"lz,aBϒOm R@E-V7jsLĹۄa6^) TMjxŭwKjwbX:ʱdrt Hh[ưꙉn9żwc,<\xf<͓ @J"ՄC˟W|'mS/AЭ Lt /$F`%˜c&ՕabQEHPÎJ݉1PN6] qYUvDw uh @ZTyGҋʳ0x+U+trvCΣAB7˧1XpFм@ۣȫ@3 grFNzIG%~4Sݐ{H qE .uګU- S :%U[sjHj@O_&JN2h1@O|^I'pddhݖlP:#zS >w*W&٧yF,DoFz40/ȥ4 Ry:$ޭ;jU5qO/ DŊ^FDϫ];ʋ//[B3`8o QgLeL햽0RM/t]BlSI&Z+kЎϺ 7+'ӚRclsplD~]OW鼓UzVضyК~5-1[]tꦝt,o "ǺgӠ]XG{IFF*-mrWVlENz.[;mSijgt <뫱D=KN:-fAUhu-w|V'} z6ܜMgJJ o!aKxG9W+&m;k1=S@^stQ t+G Zj͍5t7M٠V)[(܉KЕ=˱&XφFNr1pbNxAྟÆ01&iJqdW/wfo4{#oBpNΉ-I*'+/e~N<ySe8J/g_ܒE9ɝ1#:5[rbxͧQ3d[aP1Gh)\P%Q`!aj8IuK8 Ɗ r5ɡKB?q&jR[z'7E\I$ ֥!7|eh$PlP]w&'#7Q+C+T ~ngu [׳s+Sy0kհc/nlluJ u!1kyP ׯ8D`;l!CojN?Z[EG T_ .%=e$ݖہ.:ai7=[>C;_X />Ñj,g b*L'[{ANkpڿʆO%G3aHpu2q*mҮeHK M}TwH/3=u{4nztZʣ0_صCO$0k'Zr?^{ea6Ms/Atd+T%<`<$LhsoRSJef'T1Tok"ZRV_sR`yO7J5_'>@> ߿Nڷ"O~8zh/CMaɥ9fu?X~zVk",E#pUϸ݌OGˆM壌lUyBD0-r]͢r97L|}7Xh?$H'Jp2_m-vk_%]YMqt!.VWZk9ZF5nޅ_GC+HL" Ӆ}Y[x#6_5= x(0gXƇb&06(_E,23 <y0û޴G{C}J=K랐 ;0ޖ+vaAxqG6C4҂~V%i@)2-mv+RGMq}q؁;Ņ{70_S#Rك&P*aX",eKٵf?N^A1PY:ѣuPZ^l h7Sʼ]r.KWbn*ƖY}Sԭ欜Dˈ=&+[qfEgBFb܋uɃYU?fo\`#?v/p_k&"cmG0:фQ%p6䊺3\Kd]}o&I 15`~謞ýkT[KllAO@=bF]Rv'˺vN!1G,ʓmurQ>tBjsvaL7*dF "?vR?ۚ&jT8 $4#@?e]FzӴ\j-u2E դ <L1Y`m jeg/ΐY+Z^'ٙfmf/Yhej-_]o*YTu&D@%qx>RS5C~L \  F!5|˾ȅLE삂k7aBWPaP5B bT<~ў*;-ޝFo!% N1v6Bt\=%}Մ~_D=c/jm oe-Z͵v|{; P%|_[B~5xeo2Tx(w^t:e} @}<{#'.xPWՠ:8Ji`C:S=Sf_,CQ 1KbwKWz#W< 3p]F?p# ӿ;[曭Ï,-ii.AbhgصVzAvS>H`mùē8r TWkRY_aؒ84\W5ML-6Rp% JgPyFjLLlsY?=KI:vbSY!5BIi$!ν vW_i2̿ߦ.hk9ͥ3?cIu /Yn.uM4U;VWT];sOM ¯~59j z ߒ7dr l#9Dːu,-δ,߆uB|Z0M?7$Ď4|/NzWX8?M)d)R7^W\`}XJn9*^U0#y!bPƇp1}Eg`햿joW dο)ʹOl@eJʁ}Sd°@/ZMw܍S돁=fWPIF94`pc+xX>Yjcx,oNDGg~1`#tut?x٨(:T- P}3\־R-<"Vuȃ876Q  ţ]at|?幝l#۷1sf:k:=ZJO<ʲX\_e QPvA& i:erf}ҰR!T{isPèws$4>WlhD%86f(ng 1z?Qˆ k~tr,x+&gh{m̹"7Xs=u|oڋ&c/* -1>/l?&.J\}f=p{X:m'Zأz=d`Dd$ |?Ym߂|9g/p&z;2%HZOoyʼn}@ !>խ+>u8կ©d:XydEVzT$=|胂$fp]-2+VCDYu ߇ %`4ݨ]NW|qA?P we)odL6}cŁf~p4%X;V?^-10}aT6٘R0:i( vlF}G}N; <i}s=012r慟P0ų^*[Z8xkGŞ!.v ڗ 97LI#]t=ryN9=. _ ?.J\󩯳C8e%óv'ɷũ]V]0nLO@4& ]|V9 & |PS^-7ۋ9vs ]M?։ʥ:+,x&'M[^A߻5k[.)6r#g+Ek~nXVKnS-Yx0 ~ 'Lc˶gqaE+{պZZ-b' SC S y:SU0yQ1@T> r̥" bGOL ڄFi0ӄ7y yV1Y2>8i(v%(h+0K5PiK_1^9,DO?4mZC̿gYY&S.'_ ^{*MWKjQ>p5W?jhB/ښt܃T@nj`cpZt $4wvATt7:װ8wU=T޵|xrAnb/I lkG nY+i|T]aohwkyh4vܹ@, Et XfknsZa4fgG /=Av/3}Odir< `nsc}d ϫƌ@4$gN*A5sl89g<A ~[EY C_ہ~Hsa39̢zk_$ݷ-J eђ7B{L5% aIw?~}>啌Ux \t10x4ʫyؕgn9!ԟ{Ԇա y3=MDsJA q%~/,ۄIae⭚ا"H!.5aZ Ca")a Rz7S,YBjbvV>doxУ'h̼`y{YXeݣ<]KU6& $u}Nq/>suP$ӾQ.yaH!*^x[iZX^tHхH8^C;ɡ\4!-?)a\LA匨i[-i Yv7.Qry3ku RUs#//OtLd`Z DED]Xyr*^; c'/:^FȲ`[FꋾmYM?a#IE|72Z>7 ˏT\WjuIs)hWլyoW^|N$FpqsmҜW3UY Y@C̔ٝAD 0 s$2lyޫإI8 Ú$p@8E97 pev+ @*{͕j8-]IGa0[=)GW 3h|TnZAjAJ|{&J.Қ'cQ'M5zL 5IR8XIWd)(yoRg+jR|\ضޜ-1[~ĬfL {ƑwfLW-c\ʹftj:a .rRA?ĭf~"5ӆP MQ=4GnVb`/ϐ |^*~"*Rk6^_d#3;6]\Wd>ɐs q)J%a99:BWRn>9[8jZw!6$IfF}AzW CvFʹ|{&V,͢aU#ך[{=/K>.yi4NUc1EO埨6rDzl!7"*3hzV`^}&A+}`^ bAr3=C1v&pd]A1[=S-P"'Cv cFJWc@х^X0S?l㉲8 EOݦy(T:`M峧+_d0#.¬aQE^+OyaSվG"ͼs<lQ{rlԃxP_=8A6ztb c7GlM9̈ї<+A62]w}AD{d`Z ~?P.|E_ze ߅y{tƭ^LajZn $ę@h{ҕ$ZkMe|iz.8O<^\c{QgDk7L}`MhaCIK3'5şK,׷#cX%;/ YscsLD5?Lo(̸=,V1yvSn)!3Hh^GRah*Iq ł,)oPh";ک}nڐvGH|unUQmG-P2sfy7Ti؋=֤/e5ƆXGyU1Ğ~28}y5 zqWa5"=3)MZp2nM>M65_9Vv dGe,G~0 cU@y,bϢǐ`}alN0]C>\jcR8f/ic;[nLuB ɥXN{~³c鼥n^HPpaʄI 9jCOܭ|7 ;6/69v$_a҅1~Cg6uw&w&7]#:X-:ix$ʋEMR4@}Kgv:v4֛ '1t?da I>'q.p? [=vó<8]n"z߶ Ó+ dX =!K-XO7A{z9 M\{7w?[7N= ow{{:/e4d}4 Z%sHŞr[kCĵeÖpk=OJ%9+A: Ϻ +KO71".^-zG{xJFSĉ̗9k7:@@3B.ܼ^M{a/M(L#7&k)X99 K`W5+:I%)QRV ]^;w^̚rxTdLx Nm֌ڵIkdabEF*wgAEߟ8כ(~(e_W+>j?˶U xc&|9sp#*4[S) }]6:YS_ >B9% GpƛfyU\nOnd\ĂЛ(9"2hؔ\2ό~h6y"x 5Q侓Ph{-Q5×&Di~FwʦI(0A.ɾe|ڵ{rq# e _ >iTF,NƺE)Ot*kkgc)-}GzP%̰vQo%卿Xk~1{* 6#(Vߟ&DZL )Jwa)"×\>\}hJPn@8X$B8Ie1$ d''Q"2Gug"OV g'tx/@M̂ zJ͢dyTǒvs^l1reТOh*4G'G>2NO,  FcNX$[Lx[l&<MyN't VrMGEhԑ/W &{dJZgE`PuJ}rScdP:b~4g|{" n| PjLԜta:[MTVY [9Ӏlj9)^%r::s c~AiqffSqfBƭNem j9.jR=m SbgH̿nEt11B!׉z?s`_'"FZ*8"~k%_AGxV$0"fH/j=cpo΀tTqٜ#ob op;@bXQЇ~q^yY򫝟$ՙNjDkvNѨ;gq;nNA0|wDo>%ësi^ĘkN@ӻOo&#թ'ۿ\"};G<3ͬHқ;#~l$Y j<$6a-}52s#P: 9.XqDlPCi!)A $ ]Hyi8,sN+ =-wLՑpvՉ{96BђʚQƘ,`uV?됗߉&GJ%6妊3nB$3cZ֒eNtu*.44몫5VfRbҧ{EՎ"\EW$L4/q3@۩X$#%itnwt( W[A֤j UuڰVm1,:.s ϡP[h,8j!Xz  3t͔q|%Z{E5ɵvl݋>VTP:;Xx|6癔]Nm`Xۯل翽7RZ^! #|ge7L} OMMxw\KR4#^몒tړ'Z;5ecEn-2N66jQܞTQIF^ ʻo2CdWmZ$~E(|!"$1Y#բK_r3nrHOmO2@:P \ve$o!1$_uogFv,&Wʪ9Qjϼރhbʃ'4JF;6bfdm k 5-MkPP pw3BcU¡ӬMttdY(ArUJ/_bs恳+l.\\[aic Tu_G-(!BQ7-fqU~Eޫv3} ,^VSiU޲Mfy;yL~^"Budk'd٭z+;[k΀с۠2'~7 eHRDJc>׮ -t!Od"aeeVORHAkI}o񗵁Tor_vdC oż >#K{7Fiuōjl*ƕ?tMa. zl8^j,^j>5f Z?qk*Ohd,iTQvêvIH#`L#_G]&L1^ˠsВu:B?\̀JW" Sƪ99cG.}wBC?$?KYptq 5l'JˌWA˰x{kEZyIV?9'YmoqȌnGMo qwƇ$ht*:NS!& C͙K.M JFb&hze xqe|u\Z-pMžf}#;  [2\TPk%MJm9m_VMHv7o6p #Ɋ'$~祮;>| *{=㏋ҊJ)_\)t ʷfl~u-I5\JlS=uʈΣ4Q4Pe{>y݇w;@f2 kE></T|SVhwւ|iE.JL ]ymQl0? NOjJt=۲\-ESlѶ}vuٗwA~ Q{`z"{_XY>滥Vz+W{NK1T.vB{ ftUyo2.ŀe68slDT,raG@XߦzҰ6|/ḚtBJ,vL5=r94li8|Ë ]RxVX3ϻAr`4r3X ^myj>J;wb4% o ԯq7o\TZؙ0Ra-(v.ɓxCjXѮ=Sː.Zen%MtT24# @8_<۸G~n|Ivl⢁M2 Y1]B6QHY֖cLbcp.Vu@-qoX~5Z񄋣*&˴AXFuuQ^NK 6e:L`N)۠ ԍ;tD~]Sd'"~æ{cp&$QPӍ=z/eqz '' /6$C-nǵVX`]bcSz4dzS@u{C1SZ}MUU{ 5LGQܨ!jms=P14-ډ긢 eLjg+\ظdG$œO؆ $:#8~PLHm-̄s1僠 i9Us*rےtLHaՌȈ bb<Zx'?gR3k#e5g^\6K;QX]%iu֍ [qgH>-\DSbyJGb{7?LTbFR7n={ =8>QbZݼzYg=[UK8Yf,DFoP0V&;ؔ\퐘W{ߘ׼2^61WliNIm߆`Mm+)E%Fo>ըFgkEpVNJ V|bV,JA~{2}f?!Tf=Pɭsi ~5fQqNw|(V*qfucEV.z$ȋ+biO+ZoP]N!r۳hvTu:7$q|ړhID86}o/1ٺ_oam0x+f~D!AԷ(sy(^!@u-Z~78},Lp_lqX(š sor/ DUeYmIqZ}0gh r&YO{՗Z Hk瑼U,f%'ߙ$.\&.ټ( ^FQ? ˙~gR&dsew"'OYsHğ2vKQִZii,3.̹ERzCq׼溷́_+DV9}cjfRǼY%Ϊ'_6|Ao{3y SOd92}^nP͸(o]uR `:˟ZLLb qE9"w/ f́ o2t #q/ Iz^r6.# ۋAmZz`Nk `: @a,kjgkjF_)c+@gs1*Id\aX4tCBy*L $c9t= USei%yiVzsL ~ 5<kvx@} OE^v@z><)'roQV݊)$L:L '1ؘiIz-gXx%'[q,،wv}& Dz&:L*mR_ZSng)YV+7MQO7,-eFiF E'e!*KE깼TbQA3h _ ha7pX` -WӭzWH}fv򺨭Ҵ7}@@a%e2N|vYeE04Qb#GjDmQ$ƹ) h4fy}Jb]exR[L3)5"2d +:S${$w$ _gҦҴX|,T (ޖ8n '7gZld;`i60  aqBRTa8Cx"uwiru^q m:I*%2J⅙akrUh;yk[.[tuD3ʂ+QsIt32y8mjNq]?Gݧt{j >:<xYvc5TvW[nŐT V#Qo X>Sm@_тSċz+>@g5]9k7E[)0]8I#ܣj[.w39#7Ł_T;$M3kʼ7ִ.|ğ;Փ6ik rJ%YTWk ݹ@t:t}L iҗpw؁;qctrxB>‡*)w+d2bzK\<& LzB(1>-d Rmzq(nĈ똗=,t$oS ײi;(: 0[; FS,T{fmg}ZJcm/3Oh!]eӲŋ4SXTY_2XmECHBNUoOV*F$r"Qͥ1˚r*kEz^:$_-KhYGP (58Xlr$pfSK9]!F{w&_q03=5v~U/;3MܹdF'~hd27" J7ް"_ׁWvCC ~qzg3Y.K>DAc;GӴo)9Vq(\0*9A9Gd2yqeLۏfIma.1gBA WOYeA 2`{vTө}~ ~;~WrN<*+ 1]sd|FCfӃM_F~-D#/Jo6k|WcC{{-~3mړ ‰6K Nd8 |]/y6?lڴow^A׺mbF鹓hr%g%GN :VS}Uu@I`^#(-wRuP&sԱV%2:]R \aZ=z!U4+ iiGPL㘉|-N]mE[D9,MDUnut+W!:YKofɆNp猧\rl pXs#9W~? Q,ʗ? jQN KyT68yWEhB#yxіCg%\Pא%Y$ugsWc/bnva? ?.KD_7YszX݂6hG~$Ag.Fm^.Ѽ `N,<8ĢLT W~uI^j N0xVa`5Å۠"nẏb3HLT[=E?bzi=;GZ"0*$rD+[s'?YTSS3 RQw-7cCs sJ1n*qҿ<@l*imcf#$Utd6|*һYe~7daϼd9> ='g%w&*}Ck?K$w-Dz9mEC&S5Uy0{X_зO?QcCZ3ll_KX&9$ߤX։}Zxf~Ze' #ōYkN,W8=`u垃JH #.YYzGbw|/ Gdca~^j=洛jLAQTwlx^j[9^7\ k\?2'fF;r@uK4dN.j%;b^Tqƣm?8d*-XSiX+Z6FNMi=n͝JZqFZWPi~`d}klU92y#fW z| u ڶe*|..*5@V *lLY8;**]̫|,"SA%Jo^FBdO鯅1z?I|O#fM=-h.5^yȺpZSUjw;;1_"2N rBMnu ;)nاTMQX/he46ݣ_Va.%|ut97:*}cDAlr2{B4hŗ(;(a9:&rU'jL4cl$"J4'<嘃]ry6n:(N`#Bx(s);#,@w~RbzJd+UU%@OrzO?T45 ( 9TLqvh\;>Qk5 QwbHebK/?m젲m>֩m6&S=\>M/+X CWnd Q20Џ\AM͟m1Fw󝭸M 3O9iS؝RzHw"ɇX`dwUHw:ywZ-z:۸6S۴oV Kp$ v7grLj)_Ӛd娠>줬C`&kH2:]hI?.`Rkfm½~{5R$W|~ʢsE{{"KEil}'z>ŮܞXlF5}^B!;Sê ;i?J='[ zqGRIq_i/#퇠+qT.OIrz0:9pS&OsS*Vꌐg+*IɅäd-oUW% zFnh}0LFSه#=BeZxxA;=EO~v"8J}2R.Z/̯|awNFlb6˅"$pn!Q-{=tv.#]ӡ4 1k~d|;a^Xm Zݑ C5>z]EB.?nir:_CU.^qswSs\i$r_xK^+r+sC:=]fVLlSt\'pO,s#^?GBF58?3\Jġ+l0FLjI)#[Dx=fzZWi\^f\bmfo Run&;&UL0yLZcnI^w73A̘M&V垍L*j80doYK1MB\0QsWsK51(ŌW΃_P$sk"-Z{V(+ .0ѿufޅN)p^39wZ^4OZ4Lu%LLHs #-R[;ti=ƛye'(o yl/x ᥭ  K bzX 9p\]XrPG⩈AxȊ_ Qr)Sm?dObA66sgФXvwP\%}8T/szIGCjv(^IM]V ^baԪBe Oq~1<0}wg!0_=ߢj8^+$J 7)̞h?;K,'}yjQ6<\P}:o1K&%ZoSee&b`'r!"8֩qUGav d9 Hs鉬V[Q0 |GI`s8.]m4`?`zo<{OL7MλB~bnpG^Y.6'^Ҽ%Z3A^H/rdT`Rfw;wXq^ 4UHw unYr]h[٪;ތtCt06(G̷˩].#)G,ej2 < ؗ;˷r /2{=ЌK*embf+S""'3vhN?#/P'6lJ19tYU>ٚwHOԪx*-] ?l[2G4+'KĪFXX%-E$?pw|?gNWNQb͵f\Do^ t=WN!wpc-O͑Oy=M8lXxs=waYq>d"dld6SaҶ/ ܚW^ϓX9BlmO--cx Bh% GJ"z0ח;̏rZ[k1H]ah~54]sݖ-;u~H`^t{:}(V/*Z9 ,f17`ImBx) #/gf0gQH5ת֪ tM;w _{FOVUcEL]0DՎsVBj`wVnݘiЮn!ekHk^ #Ov,vނT9<7YR ~]< G@h,[J4r9q(3^ i-mcI/+nlaƸ1ؘg;niw(L$7Y߲nf(#{>R U%B<>`KE.A)2 x厳AT r)Iu ]ͿlSҦ1y\P9wRm!8k tx-GOnUY+:,}{sp ZP;eUEfd)"l|3sA0% X=iCU?@FӾKlr ǛMlA|; \7t߶B WҵPqS=|eu{ABf+ۜRc*HaX[r!6:gXgvX_4ygF5 K r&UzXzUtkmvNw,VLXɠ{+0Gz{S9\=z9Z;( g0JM >p1MZI"+*_.ِhkstBcTVNX^2AQQIgqߦhflheie.e dhZjQ6KhZZjhX-hf4X5M85<=\8{.s~}n?}݄ kG0yk8GKt̗:!j)F^5a-V0fj%o9eweaz!YiӧYDw-> 'oAY>rO:ν5u"`"v13\{y+h_}v+n /psEK2c5:gmoPJAyf '|clbW*`E:1L0qpxoiP&r0~+Yg6,ѱڨR 3U~''n2v=B~9dxEzb#IsR7r 1xpx<~IPCOzpN|Vd. {р !m'H'xKQ}A8󳊻;ӢW >;Mu)-ߩݹa9xaEc#ܘ {]>Hx#QiuDX{/ỦTWe ^WcVJU A!m@G?O?Hc+M2oW룳+pw(kǃ*i L[Bڜ$\*~Vjx )#Ӭ5-D|06 J ⁋F.=šx`/[vn&~K`Ⅹ o?Y4^Cz'V:CA j9S C_A݊UM5JJ Vqg7Gn_lt0GaIg[<YG\PGlX(ϗZQNЧGcDG7wv(w?Ֆ4EN, @Q|nOCv1s|Y Qi5*P)b;`}lA|'M(GO>B` x`` DW`sP(?mjG7LPLj/^=)SW`kr5TnJS<) /(F_psBm-5]E@V6Z}B^_a+U/6LX !qrDFUɀK3zvoM'y&=8dt^Bo .-a0a(.IdIq%AYHj¬hNB7Ս>wKGl[LqhuPDi([C0K{$.,5{6*:M@O-9o2r@p--X rDra]VLfVnGcl-dG`&^!m iv'gp(&)#j ಾGns̶ Nc?U6iVhVG)L8"WĬQs&M(h͝oV ܬj j yE4<L`Ve1 S`|}8(ʙL&&Xjh׌@:MpKׯB7Wy#jl?4^loIV`Ğ _.<&j: *cpο]"AgX<8ԪZD G s.fuY<ǾU>}`md/ɒv*˧_kyTN9"5o8W ;s4 &/Q>&ԤȈq (&!sQCI΄K:N@dt{LZktjۈ#5!RwOV6?Ǽ]۔ |&㪙8ޘH!C>v6F]wPSI$&^'U疒.*_ia_/vJ=Z$]h7&tͺZH=]TFKs@'[ L:d!nd7 &}`\8M~ 2e6vC-@WiG59aŦzDvSR!bRS..E~26Oڤ[L՟\IFȅ)Q gYtď}7g^!~hˑ SNvR½q a#˚8뛙yJ Ӕ1{cͳ#\[ 9n{P@gtb[h"8,L5}=D̕ bXv͠ Iʼ>] Rxkv*^z,tS߂<+v2?8u4+XfCntT,(!B1ƾ%z;(IXh_ 4T?=Vqί@`_UKX4*._* ?ֆg?RDmvxjЋ,"htp /&»}r!)"]|m3D> 򡀻(<~iY"i]Z J%/uUGu r.6IP[$7ʭbg rv@4\B(Є( >3XC0. ER7-I]1L̛ZeGc2* $?@ %,+ni㸴O\KWKoB- x<aHO4kO]mNʑfck<ӀQ:Ҝd" h641~@20Ϫ)'UDK@`iiFŦr/GV6b&8$)f'{ ǾJ?sUn pdJ<2Dڳ[ ;p]b(]F;M-N +#ȾZ3 *9K%MN/R_ͬIOlBQ O2wT9jgfEn͈Ҋ&.>hu|'%pV9]{zWrvmwݫRK=df"/kR[)XԈ!<0n\Y3# '->I< -L> X'x_Zhci䰚YG-1 _͌J\ߌĔ}]޴JJ՝6y$(pf#3"꩛KxG[2iUIhz:;? »aV:8O8Oo ]kZ`q]Yi^UH@z3˖TeMV vV7vMieDQiN(1/?cLy֢~5ڷ+|^Fk"Uc."nn%pߓegۏ܏5D~R7+'mMBB,ۡhk`?5 FS)vЂVQ}=>8.uym:W8ǐB|h;A,RNFZ"ٓLVAesy虹"9NNc6pųYmT2o& 't}jrQ2_LEْc /> pxɣoOs4_\G%R#^MA9vs(@l;C"~9/'- M÷~𲲋SS=k:Mc)V[0 kY J?Fx ?̓-h H=0N~B̖7kF`U]͎̋+>ܲ|۬f]m>Fh#Rng>ɖ[s/eFY|W  ޤ;@r"_4ڱ}f"٪MAV?Mn TjTn7!Mà?\)_[26՘aPʎ ï:@ b ~(;P/( qv4[;'>ބMP6 j\pg[ӬU*|jȷߵDk.Xk!c_A3@;uW' }[K [v(a*eltyak/"oR>v֟#͂)۔] B|am Z>;Yګ!GK$c] ^"}Y6k&׼ܷ|cv Sv0dQd]s261E]'6m "y"&ƏIYf]+Pnsv}h'o֖vɑF%D(n[U}݉Pby)Ś4Ex3Z\z&oz'H#&?7nz3. ?_ť.FAJ4uPU '0Mg]K߶AN憨Xp}/!=\ٿFP:ӽ~ډ݉>NM8$o,aV{U8;)?M-!|fh& * d9k6# HmlԚ98%\ -kURoYlweX/],<ح/# L~-S҃u9iȠ!ek"y?'Aw{eqipAs`)P.㝑EO9ml=UP8#5f+"j|L![ 3tKeѲ!f}eQzUGW7'YkhYc";fj- l)oXY@WlP{AtP5!wFMU[JBW)h}v8\Axߚ~&Ǔ0'+׾5 D*>~m+!f+k/V&~[F%=shi|xbT5HhT26OS>Yr pmSﰌ6V[/-^kΗP,mG* SȒp,95`>JK1 er֎b[A|f"JZᶤ=-=;{x0/AGT/d T{ح>-VXƤ15 qGڊ\ۑ I}ʛkcC.}Wt4kuY8iH@9ŇK.IeQjrGcT0GKzsL&ы'M9?}yx(H GX߈rz߱2DQu"y5YwNRl?/.Cw%ݭUho]c 1iƔoenr11+*(Vh6&!ā;]:lx'QlFOq>+܃S˼bү#SNOň -cf{۪ޅkXaGLL4O@83 )"K2eDdۄ|8=A#'EJ?;4,XFR ? G˛eD$൯ EʥXZ`Lpq:'@wX &[̼K;HKAs(Hw.*LopDZ}jh0X\rD.F`#..Ѭܙ@&VIJȮ,B>Eq˗N p,\|!WJ *W"A iNz:umEC'lYX[_RKfj4!Kl+t?IPob8"#y2W7Cfк.zttk\(^Mޓf 06qQk4/LҚuƈ -Fq*'俔dt8,ZOZ5 KC8'<&=2=?Cp1Q nR =a$g͵poSHwlQd;}j 6XZ`X|ƽԜyLog0P N' "C\❨|U\^MGkݗ+nMviD} !<%mbi> 1I{ ,iyQa޴c5&c!Δw@@;nH$Mb*GݍG$eLeڞYڔeBkڍm^kCS{+RiPZ!K>§>5bA-sĝzÎhR$G 062w>Gbo*|Q؃I0_k Pv5W,Q\9S'ϠeM hZIk!Eȭ! K2Lx#|}¬!zYDQtN֛\<`Ix`\iS)Wz`DA:de ͍T!F UdX> tz`2Vcd*Q7I/%ާg =/Liº P5ޘ5ޚ1o.]\:[$5| 2E< Ban9zںY^lj,:ވbhjeS^ʀ| {Pd_=޻ =>芕 ;4OwӶxIʛԻԄI',Jb/gvyYm2VVVڔL$6MK!=6 1eeti2J# TtK{F0] HvozV'&lnh_ mVNnVacbϖ%?+id#N$,r^:(9e0{x%@Z9<Ңw\v]d=TtbAyЖPcʚ.5ғ_wͽ݉I"̛61[mL0"V4m+ :ۨ!ߵHMl'pXT wM_4K *'(7?^ Jl|˦:nb[K,nv TR{ ÕRRy& l;`L:Z֋A9$/^L܆d9e73ţ2e|~ekB`4vmijFEXp0ܱޢxJ# JM=IxE}vN|ךlғql \;vaI|_2v!Urܽd' c;IϞPB7a(lT?P2j!X w-iC40ZE|&&`Z74scޅ=RlNfinghPå?a5 h(_x/[$L5}u2ُ5#X`D=OoVU 烨`cܚUxF5Rш^ZͰa +.f5_Y+*Rb퟼Ŝ_g& O )fAJs y~}Nicg&xAO,X}>(fb|lDыzi? mxcy̓+T׮y5x y%@;;`TFVC#2q\qUxOOz6=.PmROz7`vU6N)9{5Nԉ]N g6p˦lC$n!Fꉀ4.@άD[@j d-&X jMMBᗎ|)$-I8ZKHrIbӠ׳d%&&q@4)hb L? rނ]a3%ktD#V@⋷#a5 4ݖHEi3EZ]SzFȜ&F ܾkdr^ YZ-ٳZA*=,ʤG M:]K5bwjEq𗧾S}ЖWwyq:̱QhGQ7 97t:jBd=]~|lA@f3_~Iޜl ͍23KHѶ[#Kʱ33R--^E??{tv4$xءN^7 r`jZ?nmntvL6yRR0[o%'zd`~݇12T3IR ̔ɚ b0#30n0t~wCڲӷJ4Okp`UUm^N๯Wt"ߊM[{FD_HÅSCeP_HFLJȠ:mqn 5"!6ƫڠK ?X̡Խ3Kހ:³$i<-( v`+g]~z`^a rhvo? NЏCa %8,aUr+j&*oLR,,y ='е$f:Kl+'7ߚv[W|WڄJi"RQ!Y}oB"^]H2 65d JV "s_B;\hύ&1X|O_[uBW -k~"D}r|"t'0^3D%tٶCƇ-4*7nj{{Moo=z.8(f@^cc߃':@fє8FCUak#iAXha{糰|Ɏ[!`fwgˍ1Ᲊ8Ӧo/%_\+};NoDq|},@ۚwo5]tYqrp9&~ŸnOŔE,aز{[/Py6_L>Ϊy)U Xvc;qNwO؉_8}WԇdSP$ݝ!n.L6#Oq47{pnZE]\Oh0C~ |w/|`9=cvc4=]H4bۂ_ 0ždQ𛢲ƈ)5f2ئ! 5 y *"&^c(j @9 zHl"v>(QXİٗ >.8-HK'ļ/s{ߛ+̀[=d=ב=>wU\[A+-{cjS&ϊ+4Sna~-Q1TbzSߵ Wd\#Q-hgFx~Wץ0~sK(oY*O(ř#mS0 61|Tyv=O?# B9ZC4"|f )n 'PتP-n!!$Jlv:Y9;z!eH#`g}@rDN;u-a""_; tׂ)-$c=g D^Wx@l殌(3e7 0yR2Ӕ<hؿsYvۢr+rKɽ{Ӵu*j`]K û@ VJ 5,Σ ԯ)Sdn#c8rNΈL`" ^GyW&`1|}8p:Z`Q9FH8(|΂&G]lKJND.jcwN!sO鳣p,*sd#d\2=W`@1S nO{ݶ {cTma18>\ hy7]pMpw,ǜLTırnCH "n wB'@xIV>K '~[@Ϩ, >B]⣻T 82wk8R)ˇ)z' ǽV"W 9%'Iҋ#p@߃ʢgϬ.G(1v`IPms:V>-M@|k&@k!F `kJClq~v;aR m.xR./(2ACEcV@3؈ty?ҳLj+Q}{/vSl,4vk2rtwThnpBd;DIt+j^je (z񹑻0\\X͘I@-"7uݦumqO l4r0 |j4"ÖX r r>DX杙OOo0'X/?HaH~RzX&)^SiF2ybdwk)MV7ɷ!ע:ꖋPʹpn/>5lH4-T5XT|@7 `2 S6Sތ'##PhѺہ]Ҽ6as5 =1lㇳWMsU]@%Ζo&N< * 0ĝ*סpۙMlCGdvK"ڨ9(æy:`|vd!qbBo=FT9f%?-߽s,gd/& S^yP0gѲiCL,rɏ-7O~% p (5Z &,F}#MP@49%$`dxHp<0Zse%]S4DB OQIYٌ;$j&p'< :%qN,thHYA/Mo8 X|#FIݡCAC‘0_&@dU =lsgJ,,'_")Et0t@A!B4z4KbF5$K!Gz$b?N>IGoN5 ZZb^H t:o&À!SI'E&@zIB,ukӲMZb^z3ПפjabZsgMs&3I*Hj$dN=dݽ#G$EGEHHAN!ƇʌIҕ &hԍפ!E cVH=Ih{*D-GP4M'O=6"%= 4kK)Ί *f\иi DAF!z#Ҿz/8-h&&NJsܘ\rf Hb x,qT]!@Q#zG19HR ! cǡ3lT4@A B!k:O>41DcS z7& EARo\ō2.'a!upAhFzƈ#V4% cȈHѢ 4h56ȯCDhYZpanl1EiHH_т =6$ Eؓ WBա"3BbCJA9mD[$^ШhBrjX=xH0܍OO"F2hn#3Ix" B/(J3&G0sNARmiɁ}LYg16KDm RwJQ.U"&! ,+dAHXC BLjDǢI'V$!zz2F ?=cJS>ED XΆRJ잌IA::ǥ<H#=AjS6ZFэ#! Dz_#gI KV@^"$@@@tzz=Ȥ (I=^82h"iD 3m[08OAM+OܶĹl65y AFPɘr5{TN}C-IIi٪zB31\.), D4LZ>eXވQjKb$}"bd4# IB"IN½)$^lDH^uz?Di%-e=Ob~f_^~ьd h"=1G1D Dja*"Dk 9Ջ. !D i 2F%5z1 hH QƄ)P< t%)+FK"%RCb0y YA4ehэkG@bK*NDM jm\?#Ѹ-+tNj_Tw} IhZR #KHdV$.^FAG:#$Z 1X"gB fգ9"r2HNbP $u!c4z41C`ǥhL/Z?E DֶP/ZVP}F%h,et!}iކ-[% tJXތr\T*DTdco$ZKI3c$p8C$KH!}FbR>!mv$A'E}S F1 vO[gA jm h BPC"Lwϡ9ZVp6; cތ-#VD06<&b%C 3&hB3hSϭؐKƉ~0IPD} }wOI$OE2=/}6HQzя j d(Cy Dv{F{2)$KDBԛlu,#ᰔ!T+T8i yR$ $[&Ez1#CQ"Ǣ}lW /cF#IΏG'I(XHҝI$I#7ZLI[OdbQcA,s) CcbDH#P^Hld;݌If % ؽLέjzmZmQn< hcc eq%/N?46LpC\$cLXƈmDzQ adFBF\ 6$,J$1"+c 1:%WD,S#βAĊ]ADhǕ`"*ĝN40/ЉI#f'3 (mDޕ-Y_AOl~!HНgWoAh#)$1W%k`p~OEl[=.$/KB(1 ]H4G @$$zl%6`fǫaPMW>1ގ^G>b$loA iBbE+CF$BCI&I$pUcc%C"4[Mp$MZu^Rfcf_$OQ&H,wJ3Q0L7+\h`xtqdgo ">!.$1SI&}%3-p BF+#hǣ?Uzަ| D:mBwe/Ft~AQ67[ 0=A%яLmB4T$(N2I'WI H &ՏF!ǥ4<4Tkq4HI'CRn HdV"\uK#H .5!Fަdz?C='z1\ߪdIՔdǽ GdDZR:@MH'h! /- H)N>FrV-8K$/C^FEGX&h.=P](J$Fa d$\ɉOY7##r qQ}l!k$:'Dz!Om%_c"SDoAJ~ WI; lkѰؘBޖC,BS$HWcѽp}pd^B0PHhKE^C$7CseF% bb &} dd@VFH%%R n$bی &H?]4|<4"E1$ l`5Bl,-|r]%(RZb`"4c W"=ȏpXd L )(baB*@c+-`2D,Dhb؉!hCDA C}DR2nN"pd#fG Om) (ζ'geM&d8\)D_q3"b^d x%^Fdh脙aK-arnDE&P"OIё#Bؙ) S)X+B^k?AFLz̏IFp#|CȿIc"/SatvKaI&gu%>Ba4VX5^ƅ%,*&&'Be "Gҏ[2drd3 p tK"+bm+Lw(A0! $!LRyT%Z1Dhv&P b9)/CЂc=EX%C@I$*!9o$h!h+N~=[@زEI$讠^eBB2w {(A(2Z`Ddc ǁ7BY[~kMiXX':Hޅ #Fd_M#I6m&ɑz+р:I:@=%m-0$" $0q#Q XGhBɰ߱CQ(NcwhaAnPp!}Y RІcOѱ!1($dt$-dwA0J[''+fO:6Hސ5db (]dMH HjYQ1ѷoGL=45)lt40jQ"S&GNG s4E&au) ۔1ьڷ kCNxnVb .Qu2 m y @'Bv0Q'>Փ~_Mb $D%N=+VP7'tOJcsJZ΁AT"Ab$a`LLNCކk:RWВb=&qBjD&hŠ&B 2!u4閶Q 66HcB$#-|㛉JUEYhlZn@^ޟxbƒ6*0I:ϥ+@ dcɶ]h!IJmPX:' 5܌L_}-= XM̋1h}* P!rdX$Ȑ6G BF4U8pD HhZn)%NƌB}DA#M zNf&"+FCRY7HqFdHн/HI:8wя4v t5ĉ`9͘R Є2 DHYHI[7a745 +F f ɤ*D(֭qЮp~(]CyJ(!ȂģnF6U1BoEc M^t41Kz=6F̂D\BṊhcPծ"ȈBbzάr,0Ѕ$Bta1FQ1iC  &"VtCՍh Hb3z&#U j6|P8ěO} LˣVĵb<%Qc։KǢ豌: Z2'І!k}S}#HƇ%lGQQ"BdrBFwdM<[2d>$uNU.j- C %$$ lR&!  P\{QCv0"&/Ma lw`XDz9`O@cr"> i-t-V!"4(,EPdR%CdC/n,te7B &-Hh+?3abjᅑmЙ Z"%EwemkL|{Y!R4YxDt-@A-IzXړ$7;l4cjБQlINH{ bJZܢT#DlGFo5 !jDl@UBbdHm-+V9 hjz2Q"dA_وO[ьhdTeG4LQH$~Mhqm-ЂAN[ ,CLe 괟SmEpE<Hю@ֈ__} DqэK@u 4&}5զ$*iCsaջv' 1:r=HV"*9dWbʸPP8FpP'CGC5T Xw8$rHyJ=&64dJ}O%leh VHHPYǚTz'FϪaңv3/?2^_W4/NnhGits<y{kAON_ʱﲸuZ~0]v3 Q4J[i`A{a[: 08\1E|;0sz~y8O6:DMkĔHpn+3 C7RډG<y&>,?R;#*f6(2;6Z8_1eDjCqq6E'۟?b_UCb MK똧9_Z{48,Fk.s ;H.s+"Ib|>n nQ)QD.gވ':+7Nv#`azl~ь8 %FB,Lp=Ğ#~L&-rmD_LS4{]7bY{CSsu4crNR /Mzo6)T߸J݉(lVBbp=Z $SI=qF7֍x,ٛe9[Q4Y(%t">)5@@e~ovޙ{R⯷>L@)?{ l7k-텲.׽Ύ&YÊD7j\<䝆"6ig.7MGx@nTнWg}:9[k׵Pީ NMkA 8$IR Oud*&|91q-L .T|d@Lj}e:4[T'ku`޻Swt;^w5S%+0֑zΠn9>S qA@QNyr7M+t۔AŅ/& [`Xog/Ah[{,ItpВXIۯʭb5{yq8a6Z$, G%Rrq1%+@ o9О҈?)<@^A~rys<q}n qYRkayn>aiKK Zoʹ`iZlWC~ࢋ]¢^OOm =\o#θՎb Q,[Ёgn|;D~v܁[R܆?=7p)C!fZIbM}itK_ t,zP+"\;&ʨ4yؕ+ og}k|\S:Pj%klI`-.f"v' s- M층u61kP֌5cKq]Z>@_4Ծӗ9ys%Ȋ?g3uz/]DN)e_ J@S7ՍkȅvN>_=HKruEcEźO;DžR`?ps73D,:x2TXɀ9~!*)_ޗƛV$m~c/A0]sl-![۟pBlkL p&YH7TRuľK f:Y׋;Gj:dզY'38qa3ҹ6T` naTqDdF,qDJgI!,L׋❖Uiju :\O;"T]̚1Ef6`$ZKȺ40޿yZ;v IB;ҪUo;)VE6T@W'ݩuU< [N^fa]U}v2mZBy<&uT}՟Z~Ԟ/iudt?Cnav0%'CV6@Wv--PkATQ8swPQ\*k96Mr=׏{Ì]޸}I'yF"U4ly0V y{Qg-8Yck 9Sʼn[,S~ΫyY4$"u_ zc `5 ]i5U]]E' U!y{sN!Y.3kfQTͶsBa˔ϱe}WWqm]&gEX~`3&ZZҒOYlNU}L u:8 A_vTox Yex0GLʝUaZuw}G ]y6oОJ~?^^8;ÒPi%z@~*7lέ s&~-Hu{2r􄳺>8"W?BfV3`fьHUxجQYx>#MlumR.R|RJS }e_u_\*_lm7+,u{^!zGqq|N)]x5Hpe-!NC"~h~䓄`2=pDUfLj BKA 1|x1et׳h}J\U `Ԁ^q뜃t4ߎ0_};{RGQi$&-ۖېiohSl33cR6\]n_ Dy7jJQ{ز\ˎ7)`Jqq.j2am'&l iRd1}7 QJrltO疋<ܶ$/t|_Fm͢\L4 08Jߜ\0/'y]=E! c';BH꫾|_8I]55l`t7xEܓus< RQ?WՏf2NV⢋sy}P$\E鸽]jvCef QA=cHYq.5XiJҫ8Hm:cO!ׯm_?m |Z1 UyyVeT94@<ߜSUPaŗqw]@M^91FAs&QwF$'eZm>im[YƑ:Y&xEڏRO Ie@ݽ}fxaQ}lwwƙO:G ?̽}lNADIYrM^c뙤mTAyUxLvPUN&ykmyZބ,1FDLMO{Pf;:{l h(-P!_Rh4[{'d|_G>ǞK <Dn1 1YD7"i9R2?s9׍RUE&[AG^gZN(Ѳef*6ʃToy԰i=N0Ns1 54A}8ư 2GM(i6˿YpݳQXF{(N҇,Y$4|ggdaҝMIlx+{lw*7>qUOFJ0E.Ȑ0BL "dc w/ ,;%LN4 t?mrͅTg.Ճe~Lsx0rl%3;X"I <,1Ꟛ=ӣ 22g`:.ӣedt/&d ]b~u׻120z~`1NvLIU kLL|5ͤ4%3mc*qd>=5Ă=pqEJQa'{]2q;c}MEE[_֓VcziYQytj(齤Y^|m؋Zm"?)U87mOUw\=F\<]NVqF}=Gjl%;TZf#=0semj*;OSdc5iaO;]'m~aqu5`iokh(C#ǖ4g}Qm7RvWaՆl!ޟG/l0"lUyYl 9~_۽qnb{6Q}ihZ9L I y$9gT2+|5F}$tڐyq3-FV\ta>6iD9Q PXag]0g8OoX ݅q?ˑ9knG iě4p!q*_}<m`}ϻz)㿹yK0N 4,73nyy  ()hˬ/9p;{yzi$AWm}UwU%_rXk<@a|gC2YZ<Կ/{4rqlцp$Ezvm?%xQ0h3N "ǠY,U LtŚ0:I2Y4#-1>I@ǢwePO IQ]:.(WYk3$آ>8}z\?P0bԳeaAg73ᨈSˆ8,1B0ZnO 5\}WO;q u׌v=?%-`(vUW~?woݕ]gvQcOUw1"8{-`NmQ=wq'yNô=0 k#z-IT#40Ћ$3BWDC4>yθ׎Ktš~bsW߲4]yk6pWITAQBZ.F9wUgM[M.6}lSƛL+0E wum- Lu6['Nڔ +^ynF8tOC}܁qfW\06% LqU>qU_f[Ǜ<;_f쪫\M5|C0Ӳ7< X]K ߛw:)Â官 Qw3.4z8XW$=Ӷǎ];sZA o}[X>}ky孻}yk2o+vjj1Ͻ?qmS<>7A,2Q6, 9;-.{ci.?B JJyښ_l3AUtcz%JV .=8G-s.uuK@N)bKYx5`5ߦRk8CW;s ¹ JUhQMr/*`,bu*j%eDr.g9SH\Š79Y(PSUmF!7\˶SӨ6yb-}ߴmK>?JaAtO._>? (f"\,}uT* J7tt-% ttw Ҡt7 ͒, ,w=3s3L Zy&^$6|,OcLɗObm ?Ih?  :x}G+w W"2K?40ՍmX\𝝞76WRj+"9|QJ#Vl+Z׸`u+n8O M[I9+'cYK/C#V痫>}UDTl|󣀕׀rhM'OlC? ~M>q<$u|: %4ghjM XZjмz VV(Ԝ9Ft?Ywe˲MExX- #O3}+C{I2uƖJy ^o՗!zGdjP6>x̼W` xNQźV]WnwlMT|\=n1Gz\S=9nYA?=o ",42 T1t Pzֹ<;6ٮ4} )\m*<:5ρݻ#AtJ{.Ÿ.Ou*¤e@*^$ٙ2}OyP~V7%bBq@M#`JGGL5Rָ4y6}nU̍}qh RY.Ү?xۚ ԀhW~/>CP#͍XS;`N>kϰOlʹu~dϷm:Bo#$N'.TD_SeAW^{ۭ7E 9^=M02:q|8hAz_[87w%uԯ(|Ϯ,d˪ʰs(Tlb]mC eg=LJpQC#qyD׾ V%L.!_>pMY|Twe%v'7ZcA=%;eII6u<)LƁ>Z)Or ӊndŽǟ2,~I8l}?9VKgk ~N`ZpZzϷDH`|TȬEhڨLe.OTCqR{,umCD(8Z0o<V-DF0{;De3!]o)Z KѵqڼCP^?hѼr~)A<m EX:`>D𖃝Wmu1_̝ ]YN;{A+>y;~F-)j]v%~ '`;X:Ze#F̞{C$mV*Pl)2f ;w9 *a5Vkj32Epa7P鯄hPu{MNK|/d{K"p,+ xHW;<jdE}J+i.s+j)yKS lF|> ;?kE0Tf6Dl9 e&.X )vhX ,TדTuCg߮&[u@Є3I U#*{gP)@X?Z a8-;?s޵_t&M>0edc0tBDƿ$&ܑyJcLU![(ƽ t"B A&p 5껿_U1/>ħb s$GaxGqdDꤪgXۿ]=Q5,[̀Q3AI޳Kl ڸA~zG:rPEIЖ %!rom[56ͱcd (PJ7 *_{|w/=N$ \?|K>u6hJ~C)H\"˴hprRqܞ--ex5PX8(Š5,Է\Ce[.|')ϯg?}|t$ȸxOQnY~8d=8 >=n.r4pByb^݀^dX{Fn6?LZˇwG};)oum%n9=/+&G3GIPOF=3e%8!eB_{~ /HMNWQ-(TY̿ŚMCyS>5Nh 9Nb,h>"fU3&>(ųQYǦ~IgMEyH݄gјk Q wV"& OjfHgEV$mDܞ@̃ zص mo%VʉW'iu\EyLW!s` (E|@.+H44[pkM* n\WZ9c_˭LK|y,,Dq9 kժ@mzl$}ddp4fMx*n{;Hc򪜻mm?nx,[Tmզ̹zd[lMS\(InG4 fiD 9QlۄW\d}lwxe[cYVTGv%q\=Kik*C.,`2o*\6^BQQF_m:kjcY2JS7٭gݜk3\;zy}]7gb"+c:H>ND)Bݦ6dԚsi~p]^tB14VocG ijx›X8?I#^o !f]i:L;'>ڠ72gE1(9۾"} /5n*4𶯜}5)!fuZubKN .?yDU/H+>^Y7&72}*[V{KQWv:%_ʆGMu N7> BA@dLc)xF~{c6sQϮL >;-9'M&2o'~ /sp{ Q;+{f#mDv]&,a6!])D%Rk%n1vD=6&+XOu4/[Z1qߥ[ĉH1Xcœy z樋kXQ/7 ? H] a*`[R {_CmVK(eA} *YjܞpٻV~Pxۮ՘4w%jtsgxixbD ')Ц33?e3u;~Bzrܤ$p]ZG/Wb9V*xJXt L$0; ZAӽdnc}+652#z4Y'?މq?xKZP+EEdxR a^OysS;' }1<{O!6xΡJ‡y 9`[F,{UmڴW1mlӌ4>/H_p$cE|G\N~_]Qd_:)%Պ{4f2ȍ#ikHkd3{E+sw;`Z I)ojˤxj*36J azz5-:v|${x媼9@w~= h,.hS1,@e 2b) & Eک`sHh7_9C[$͍,_jV-V_r >/.薷j%K$jr~ْ=00<{9^{#L^&[s 'Fk { {( 'ZB~[/ne=bΚ߰ݬlJX^mV =qsWu3692LƮl_6a`| w*ā+JY͗0\bMrII߲n ů~Izc੕³WP#ȯp?"o L,強q;[\Iu3u97{2xs"H}kIW~4qѹHke^w /E* v@8^3A_ 쩬vE?XOinP |uf֍0R*:e8c3JJ(|(i~*ay?!V+UGe8;Zj&sfٚDRYX j[_l8u7 ZvW2T^qOE_-p吩7N dʽV2YC] $HҐaeJO~9o/*Lt9M=#+qTti>9{*>uXEv`Ͽ  kmz7̿ w(g`}uрO= ^qq] u<&zYb^QٙnG_Gy{Ƈx7ӀD#p$nxFO%LdL%R^_4uwϲ$#۴ֱ(,{CkFt٪;FPhz͇Q/j,8OzÏ{X@Rjq 0ф.FϽ3"Ss,-_=2G)Z?"tXrUnvdoe[jr+^ԖѲEwOW\>AKK$4qׯBxg'By;}C I΋ ѝ3/ ֑S08}dW{_qfBB?M8߼JI֮RT÷x7Ү==5}H n~dONZ5_8u<8A+ۣO[9=&f؁ynwִi~Qe\W  j?ZnDaMlwwC:5,8*}La|Ʀ *@EXk}}S t{XĜj#lKv"(8eQ_stwB4s.SF. rvcU]S-kyʊ}Шn/%! mU9n-b{ZYq@זV~ Jbrez6> w>6X+|,} &-!vd}za:N~Wq1Sݡ}sòC7M&)4; *Y-%3j1:Od_xWF #AMeϠIl ~"7W&E!L]}?7y[1;\MRlq>,@MEz XnFDI-rm uK3q9s(G,sKzŘ3MSh-UZ`XQ=%]h|uAi-G$[Mbm#?8Kqf"ΩN|͇T##ةi#@?wfvWؒ}trhb@P;{Wt5HIμ>h6>yf{r᣿ XbA]L\!!rE.#ݢ35B{J˳:-!לoս8Y+Kbqm,fIgYGݯ(HnGLC8# ASF9CvΓ9;kX0W9?Au 5`Duuh<_oo향 Y,r8 VK"pT0HDJZMmC+|Xe)HP-<(sl2AGV2M#nJIJ"G zMPZ.M58dwϺP7us*-X w+Ok?8/JO<Ƀ԰ڈqn)fu%K)/%F4u~˚'3ae,:9g4G@I Xx3oOh2 4sWz_7;_"y mrz\OmAr(8,xt&_{/'!+nM=`-YI2^fzRv!@(WK/m{ +l. +L}W E|#sN"sy)iMI7J:t8SuY o;+yǪ| XLN+B\6G%wVi  ="JSdwlo,wNא7ŀUHb̜Փ3vc]p`SruHlɴ@%~Š1#O.qvՃo/t/U%Y.?K r%:g^ZGOs w1|P0('9YտGzP#3jeZ}F" pS!NߦO^ɝWNt7V'v ?p KI[zzf\j y %!p9_{`9M(;-PW*x\b..BQ–Sa*@p<;}Ia?'f4Q6a1'Ka_H(?9gU1IDB@6] rZVu32NLu eoZ8AKpaG`N̷6]޳G@)V'4+bfKZKi^6'*38ko~}$}BT%iذzDIAYo+# Jx}ʝZy2Ӿz)P `-WYR uM'`.Ahjw<]17e(Q; Õ~f|[Bsy=n/pNl+gGs$@]Ec=Nlև/in#y~o#xyT7C|Hf CkpXВ kɳGr/]ʹL5ծy)hYvORahdݥTX?WևiQЎkgOuW2;^<9.XC`-0 }%`ʼnpDE@k9?(gu3TuUU2P> =(})ku)kRlJjŦio7l<j޲m,_{YBvl̩fm})E#>-d"Bf$&i8UNgOb3)n|L!u1\+HXsJvyZYB3CRoN4ctJ #hk{aB"^6%;4?d*x~9>Ee B=Mjpu<?%=-+ʺNG&h_*/i:;R[׿ђ)60ah%*;oǝizn ^e!?1MgA=kFYهϕ>5jvQwq9X\Pj6s(Ӯ2ݫ-('؞Lxfiwޗ 2h\ZWy; Laҋ`LHԿ7v*~-#$_*u&'w< WP{A{*(f*c : WpmƖ fkj7˂ K7?G|XR)i2@':<8։;Xp)$x#?msKnw揀^;D0dr*#˿Em ݠ U~~ܱ&"[NZWv2pg#d+ׁԔ]9&Z;2*Y 6E]SiePw"[cXR+ DA'g³Go>r|QZ,]zN4=Jʤ;TU/RB~c2ꆑ&ە6*DK} ,s>r$?@߃sho~ Fp^)'IK7Tuvx8}lD!`>#$>R 1ix-}=(\^;a`zHl>õ 7Wکu;!N:QE?6 DnAs!AShiz?ڼ<#)^G&7xvԟnI>tv֢ - Uf;~4"0O$7W@ MreH%%+$DRz=j,nȿCˇ|̿g07s h6ÜDk`Se(ٱA,ZWQ='PdY#@{AZC}XʝE ,é* l+XvR꟮Oo+' ls@-~cC_PIPevKx)sOj~*_ֳƄX؀#埿&!SXStif_vMQd̟ `a]@OW.Kƒ2_pd:,_Gyma.ߡqy'?ѓu@wN{y@i`#ap\-:9B06Kk'Ÿ <bfq89 jtMdyOkgv8iXO\' \حV6; ԋf\6onE爳|5%&=LKy`Ag4'Bxt Vj0gp";ȅd'%/K靘՘LGONm"7=äOqPt{+XMUv S-QR8-?5~Yo-M 0s;ņ%ui{_K+{ o(X݃:HѝbB}OYSlqN B{q`!N/um B__Bt1nicO~$rY+ өc#fmH &/hØn%Ъ?2W42 ɁGov$v!̘`4z.4?XSWVwKk0|i$@oCdFq{++a@~! qo0ޛ[p·K2)z{'d,V@7uɽ3:'CH.,'$Etcl%.{m)ܓE,w* j8~ Ku2)~ MfDh~&SK3`m#y57i9z%OJYǗ5=V <"S>ݗe=yl=X~׽~`ZBj-hEW.9B_#ddS6C ͕U3ƺ!h#ME}/bL^֠bkIΘ֯x( aA[56ku)Wާ0]S=v^7Ejʱ$, W A`?wa̦F[Ǻ~53 B*zDQ"#*%Ii܋cΤdJJe`)@0$D*46Ŏ328hNggo]>Qr'JxL9%Ku)ǧ9 5:mmBֺ4)nЉ0M0=#aw3#3j3$X-P}]X᫲b'DDX~^ W1T7c͉bץ<$I8E"_ꄜoj"}4?,zY^EƧ@e횿etP 2+/.M0u ba3fvwխ !6m ]^0k[n x/՚T Z"2rۉz~s}AFd<[K8P*#uUv<G_!S#ß=N\eJjh_eR6iF`Al3e7[zBȣ @HnCy4 ቚ6w면btbt{H᪇5^Ao-JLΊ.E(K[SŢ?aS5W2 ^R7D> W|b4 P[] cK䢦޸$|F>~!ޝغL xfStCϭVr`ց*Jov8vJNL:sȕ\.F9#]U%dCJ*ɕLRf@\H{yB_ibM҆J;Cg>)'QD\:pʯ wKU6bo<ħW5$:3$8@kr?y=fT-s# KlkO9s;zt\k&gv is$<[PzD sEaBTl]}~ :z@2DA+Pt+wG<.)O YreR|-,[>W>$ Ia?>P Qc0 )+9i_XLDNG{j63'o c¬G#!t&Yeg3]C/"ӊGkFâu+ 3EWS}%jR9DLu5X)E/؟qfeͻ̚¨o*-;CKmz?MR]'>կr5e~Nf]}qΞM_h+m3U./NV8r aqiR5EgZ ™LI =DtGP{EicABn^vxK:,M~̬FU䯒^"M.X#"F'#2ceeZ9)!#ӊ/,PRҋvnnyB\A%"Y|1 +U[MY0ˌG/X?&atP_NO Q|¬yFWX*L#%%d-X0YZVzrCv0ATjBPHV;BQQ2LkN^ɼ0QgA'ÐMty#+?M֧d*%7-w9kj3lgGrDwK1]H~>L ,OR8{QY6"v[_窕N~L,&4.{wBqc,&bCHM‡ج:l졋Dcֈs_NޚyXz2ޚݱ} Xw\0Wxsg.OFq_H]0TS2c?1b!ϋ^ &Pөn"6s:T~Ya{PgnOkP1v ⸗>Dsl6 P 6'^( 6e9zbԒK>R4\įea0bPμ%Q)lƨ9딜U*" Œ/>F,E)HUK3^28S}O~Vڋs06XC TYۄ8j`vļ6%v"Ӗǖs_e+G9̟5l&gY)iR3i%')4ѷ瓧:[q?Kz\l|9 P. Ý]'J.||?hiצ!g(n!ﹾu&#@J'3"~"*sRr^k#J=iۦTzw<:2xk"폀BQ&7B:nkފ'Z<*EJ~R}8<FNeցo!#`'L![S5}β-NkF/1'U?"+~%s8O>F:4Ss<`I<z[9ؙچ9:ZmH+XEbs &TίD~| -Cl`D# :mmg3KJs5E^U;ӄ(ݳp!wxq)D;ޙ_}8`:2}'yh yLs=8 ?"f-4ӡ4oU`vdV9r;^ꏉ*0S y9Og_]EY$ {K^.?+#*6 M.]'j%5*eJʇZ/^DFfR4\F0 9;`e2񓍯d W O~S]}R՞}tT JAan㕾Old'F 'ˏGJTDx<9 dZ޻uY,vҒ:(X WiV$)GIg5%,Z[8 &t'U 45'N.䞎NԠ[r )zzGB֯؍M&l"p1W.Zwl[ukh~<cLr?G;, .19+_zϛ;f{O:YNt4Tm,AӜ'~!(y3xOƶc/:FaQj5p$h\_UJR/8Pp]іyHnc4x.Te0򀠾k,=ˉhW=L4[ss4JW '?&>?fߊ=UeRg'bVyΞZ~dd/yѿ#T^j y=OHq3;% ,4W0-Wuȁ*$AL*BZS;q$M欬Bq(|ܕ@OT6ă480!0 (EWcsm1@&eɁVehV-T`W( BuTUEk[.y;4"}]+滜;iv;1%HX_fxh֟Fy|oH0kVHf,Gyrmm,$DZ{iཷm~bΧ>%dCΐ+.X@w*K'Tf/RU@/>IrR㻿;|y=B g9 E4Ym\93#\6zymG" H 9#%!.`") #P*E @DE"i4`,@Q"~_[ۙ5מ{=d݃u!8~#Glt6 3>utgMcԀԕYMrɩć^5?vm <ۚz Jb>˺%|2,IP0;|L# >,1&/>)#\2`DpbG_J`dl6xv k'w!q(=δ+CFwva%Ք/ܢd١S.TEYl}֗ A^ \#%+NoRTz>!F2jdŠ}̴^eC2o^2-?>^{Z`Ǭ.1G:2XWG3W@w_e/bτU)`T9̄g/[F)SEqz@–NMx:s fA]_z w/o'YAqQ=d`6þ|^q fv!"qdLs~%E_3] ibo|%EP B9LL%]~a,E4?9kI ?L \|cm8e{VKXva) e pryAԣ bY¸bY3i1^h-u0,;5Y.TσmuWL!WX k,7u,.M{Yg~كl3ᤇ]ԧD~=W,~(֮%SeqAxey:@* @6f ŏoRV~m QF: Btv#Y?A*_M&A~F?b&KP`"Hܟp￷Q(ÇW>@<e<=+b5?o+|*AbafJ\q\`_t:F6LaņSPl*`|D|$;uEW۠JRCuY2zԗ@.٫,eI(_7_[B3"e'{;(oT)4|85P""6\0O#ݼuNӇ҇l#nnTDچ9[6LK#iZ#rnvN|ǵB4esY;/fxQ+6BR0z'|5AX-kOp[~#Z*ifVsgI`w ;;oBd}Q{y| YRO82,Z=oO߮G',@~c;pEՐ&TfHy7l҇lg$b69fR"TݐIgdsql/QMNXKIw,+ *2L|9Tx?kߛ81Ɖʙ?5|]o{:L%I^8ZMe?cH0r6PL5ߜ|_WWuL*U,,GM5+Mm͸vЃ(Sؼ t]Mѡ?랱y&Bk4EmAElAYpR%ö^H=Q>6+y^$V}oM!mhY,!u1E-8m/.5q]ق ,AT7Sfwi5W/m*NvkA*3e1_}YY,"?Fz5 W0I>X}jŗoE|[^x/UQݙr܆!Ŷ-+GtCI ]CXMq]8ueg5ܧjקr>%ǥCc{3*輟, .up}8F(p~u$*PRdyTS*p*%Tq{@S՝AJ?OAYŽm;bqf>,HҒ_R+@XYNX_"|(Wt8$qpht[KT;7M l ?+f34iV 4nOz+=|?yQxqăLӫqzirl6Ma7@cUl~b TbT3%#NI?{%7/AL؆wV6)ؤ]w>xƙ zЕCY%ϻRzh|hVƭnE9H5"ӇeGܟQ慆fzf`G@H##Q/oל?GHk`d %4miD= )>?L09!\CCBq/nPKi5=|vҤ]GKd}̰m#EK$28!Jd^EwS @P|ϐzr4߇(=R@*F+9X(WDnABY2jQGsI|*D!k2Ig"L|Tf>CG(o]V:t4b7CyUg ?`i5--Fw!]Ѹ!?W6Ώ+g'>&{v@x9z7h *-2\sKFx\ֶ+zS~\jRHp>6i/6(_J ]@2{5ʪ=Ey?nrX7D$'.0W_VG2Y-1ˡVޚqω JgſaZ\H\A.z%m*v[4 pkZLs^!WCsG"6֏ֳC_"KF_0 ޟ]~nDίӮL !BJUdBvHRhkՑy_]!-Q9ϊy4B';(>"ɔii$J2o. \XM7 ) էI- JqrB3A2"$bu/2MEj6*X:Z4$&>_Դ+!io91z7) CsgI7OJLgUon Tc=n!!QM#Hi:Ty!1Objkk Ja 0Դ?:XK~vMdhJiJa-V0s>[U/v8ԭZivn:"5Brwb+d*CMbc+ƗsanUR$[e*!#1=8ShkblG9>0O_g5Wp]9A3%0wXڽm5EP5170PEӖ hBoԨߩ8{R_*~k@:F|+W:2OX͐CM'W4q顓O93 +4Td[0,w`v[lzf\i361!Yi65^L]H([BEFQLEō!'^RƪG=ujjUb~ֳ8\LF*j:>nQcS JWex!Ľ,T!d2;j=>tkBQVs8ڐxeB,*]ݕ(^Euc׈<륚3>S3͟[Q<3 ('TQ45RƬdz>)`.n575DC. $HЛ luR ymtO%Cp,_\|.8F%SLck0\m,v6-bQ V-l2E,x`TϬ}K[qݧb7u#} "u2$7|t;4|cvN]<_K /ԲGp@/hCmWijcNCXI7 GK;E4GyRPM 5W)coCɊm9m+rFM%f]xZVi=Re{^ bp݉d@ Gb<}`u], Ts`WVȾy?8}H2xR=WΡo~lD(Lgϕ`!]UTd=!nXǞVpJL0/giƅL} )Ǐj8z2zj{3 wl-|,"੺v]qSM8"t^ITLlyԳjDτ}-`ej۵+MdխC5",5ΫKeS|?r<ףB{jjZiUŘ.8FJH^8V=]w,;mUht,IQImOuL \>1|l6.VC^ ~j`XWpĸ> 'NȺJw <%NҊ!Z(]>&cfWQ/TiLm=u덳bkZQww=zSnVzd"8x=S5 3jŶEru ΅` y[-}j}#Q3}c1 Q4- rC2r,Z3h'$jt=:TT3U.c!Jl-=&Z's(4D DLa USk*OrI\=3M=BBgMRqw%i8xA|.joJu8 <-|bJOoxՃ߯PSRV%iۑSq{!'қOO?hU}@jrgv*^bp *TJY&Uk\J4mE'W`D D~Jád}^d};]YI`KP^7Vۜ(y,z]Zk\عskؼ\`͢Ӧቱ0q{<;Z#`;.d\_Sͺ=60!G:MtW!/Y]^gi~b8~0gi0ʵ,rچ .;^Oԟ#apl"BŠai=sR e=p~95u rZjEXZŰM)X*bnKRZ{E36ij(HZ|9dU /NAx*88ֳ~hQ7i+ܐA yR.3YÎ0n^b8UxPb^\o[<}0NY W;1Y4b"Pԧts~T>qɲMܔ5'K8K:sK*ͅ٢ܦ e4.xWbhtUYVi՝2prw#XQ 2 ɬNb G) ?C^Kw=-cd"W;K;Y:)->{.tXGc$ٹl=kg;iW`S SHENaԦ[PjѿӴY9f\S,{s̎F]Jo8Z ^h)["M &DmIlOUo=iTb6IS^R%(L ci">O1O^ 6p1㤣n$_pvS~|I4&Y\+zY8A99}kV0VtD ݁0i.|<L4/=Z.SIKƐ0Ǎ_="x&iU8m]p%2n4sEopqj`J%C-N[6 xZ'ND(SN\Vf9p!W̯l~Z/A/h+U#57R[ʫ>iɊi&҄vuYQ[U >d~] ޗ&YcQUV]F*[ty>eSFHEޮhr VŜ[W5vIwjr<=Ȑk}թ 9ɰ 'JЯbwK<-:dfA><^'qPma1ZAPY%%|?*5(UyWRЖ$,W <;B<%=dޤaۂQWZs਴l|37+n/HFUi\Xy7(po("b薾"9 Cqu K'YhT'fKǯ`?֨[rX'ٖf〗KmqA& זaTp3)@+/<$ۈJ| B /*3]sx"pc\89'<Ÿ5l^]4 iDs!5a ע*AόS~~Y#aU,L_2YaL1QcO~fz4! Rn<ۼQ .!Y  v~ۯ[ı.j2s-mufor@HQt*C#RRw鍞QH(K2:ٯk$Q&usy8)K6nĹ6`b.s<|hamW}ۗRew^A z$uS[({\m-oS}su8t/NYbTiƒV]:=?YeZnjXMC?M# PZא.DO 5Mhԉ>(\> sYݟX=o6u=js(r"CMʟ߅U^/M2D?ak/ݙ1$7EҨGc;orE2S|*#-|p14i}Q4{ N>3Ҫl,YuzB*{!G3=e_d|EJB]Hj݁U[!LaS~,’e۟%tڰRYp@=4"n;\h"t諒dƲ^6TDye{>}*\ǭuI;G +<x!5H4ileZ0[yavOyŢil~9y_^ƗC>fw+`'y>l !ЕǤVdSܥu=\x}RԱmw/O-K]Vqm[R_B*+3g'~U4[]!~kin_32Vx/L/]PY.sIKGmH똴8F$3|2.;Xڔ`[?NsFzjӟs*y}x~HU's?KCCTMk3Tt1Lo9sȷm2V=(kg<zB7@,06 ~|q½^k4<+_Q0X%Ǟ)sjQK_^:SөC6'z<%Kw+@‚ضߑq X9?xOGCfSLO's(Q VQ S^!P36tǐO_WboErwq-)$4Y/`ni ?+r2ޣ5;0yP`д{Ԯxeo1*v?𽤀>#-[O}Jh/cGᐜA]t _b|R!&&5#B ȹm*6bZc-\7; ݤ} zq/cJVVyxjWAyy-H#e!) )"rTE|lt~s-Ow">/|.Z1!,acVr\8.wq׎PfC{z&oG) f@h ҫ.]#RDE$PI7+AD@E -|ʞ9;33󻿻;7Pς>GVDA+]r}\ >'9''6MFԫV+ X ZaX]bpI7u+e~2d N+8ZIY%>@C0 }/ gn5LN 68X>?4,R%9fo17^ ]US'6oXqMp҉El􄮫10qπLS2-ij˚j8 NN+Qml`"b=&{y syEk.FrAQjklkhr ۲Ԏ`.-7pxŜ%ᡐgQ!a^¨k S/./:Upл$(X`^~+iyq̻TkyY#A }YI8XX]\bgS6{IVI-W(b0; ~!UgusבのAoWr"ͨIU@lq )Ք\ӛS,<^ٓ},xb,ع]9_ENq_o0$l'!~Ƨ3ܻzdo,U-keHۣz+Qe(^44?V:?ʇNMo4KH|bC]7fn:J63C|d;$<>kAK^|VKXR2$/W+7, wcs.g'#ӗv%6% |F}e3:cі'b9EE,/};K9(Gdh_H];wu Jstz=Ohwg^Ql]?L;ԛ? B MC AdM`cw }?L*z] ;%BDh{GrEVG*C0`BK",U5Goi~2O<ע| *9ƝSw'8;b\U>{ #W?4N.VZr^avN;Y*2Д lK,mBiuoܞ'o !6jrNOUȲ;ch]=l`XѾm5EzUL<Bͪ+QZ٪vn]=a,( ^y<@S&u ,Ggݿ72܋`3$+NWj+آWP'#VtBq*qeLN@W@^t/"ҎzHqsʤh%TMʵBX vUA+,hYq.g.Cn3x'*;ݍb|;uTՠe_5*>|~YDj̺|c;'=Hy]~.&!nR&T9zEw3c)'Ίr{2~كր\eO9FYa;(P;DOa'pr26\ t؈4*'WnRɾ*얙J6.\2sP?N[0ޛQ#eԾQ4g3 $I8,r .U^X-SZup {+ߣԬyAJ-"i㲖=Xo7yGBvx߰TZ}I_.>5 | 7w\/_O(SWR7Xx/ҐI0^Cnt:'7ur2 kV(Z)9rdPO' -!7O}LZof+^/>׽4XxMWlg Em]%n*/ ŵQ]dp8{RvQ4瞖&3O[Z_}9澿XS>i.*w2"4WHwQ<0Q~,Ss-ߏѮ1)(Všw/Ǟkf -#ΊU 01M6';̷:XQ@UO`#J~cn;=o͓)&Qvq\G,V|Dqij}w˧)-Gu,FXH=i-I&ֹkxFUw3Ŕj6f$no\'`;!=|T)τi-K/0q'=!tLa.O .mJt+s$C˘MD7x2Hj;o :D)=##oDcBeLzwfv&!;潛GVME r^1`o4U:~.y^Lo}rx,Ty=Κ8.T+0= 1IIv ðhي†y:狊^|V/' At+ |X?rѻc=MUY'%S}Jh߰N;Z-hv j_[nv:hq ]~=Lk D-o'%m88N0<~}Gnp=G8!V8-E'9Y;Aj1mb-AOlzn' NFל`-hbt M瘶a #a@?q "͈^iL{l|m^%TY cjZ^ #,9!Lm:'/j28)zH-7[#Nl"N&"uT u-Nw{X2D%~=PP2.1SO>@wvm7m"ɇRGJ _W#\=?LtgJ_l'˩nHe$7w6?En ܎XRNݽLb [pRS9dImEqujSNBxΥot E]<1gjs4~0uoڊ جU^sfSO\CRE؅Ps([Bl=]ՓHHf_Vԥ|^ \/ҙS0%?~nG[5Q%OV|h0O+i/K.8$Cֻb㙌 YgFMg> \6uKyxDPKC=WÛC9S"6KO]H+}I<~}cקoX݅`r|dbo_ Kݷ{~u PH:oNe.aD3Gp|!xYW?L]mORY-^p+8^Vgxg֊}G 8njL`уWcv?Z~8N<':?IvjJ^TBR34=%'wyK|Yn=|GRrх(."NO3*%[:z"gG_Ɉf0μGվ8pŕaE'/^, 87Gpxf ,$-s榅/,X+ȼ K͎2_U|"QFs$aƛ;Wޑ3 ]v)[ڄA>%,,9(yzo*;Ʒw]P0 Ɵ,q kQ,FQ_9&L x^I v$ɝ=0H-a}>+^>Lֻ 60fyh8ڵ!4"/~ڶ\?P2ry[w]Lwux~L#d=?H'CbzHn''7JuG=&Oќv]q7E76DEJ*FR.OǾ7*'`h٥?LG!yۆ_4u6˛[[};'<j޳<.0* Ϛtޔ_s3e$[w!Ԑ)/4}].)//fY޸gFNU ll"l.Ű.IuZ*0nlXQB ^Aq`X4G|1uY= 3Hnock4aHZc>}XYդ6$ͭo`+S_@pv@ߏ@#h[mxj~^GUHvy/:c aD$d>=ͮ˙嫠Ƅ]4EFf>VLȒv&1mP7/$e:B]Z3~EFrWq?P:|%y!ÅE[bX2\w(󖢮h֜vσ7T%b0˃F*!t`q 6$kVsfwDϞqn]`ټ_x7El>=c5F&7mykdRHy9g{;K; h48&ׅ !&["CK/>g3ͱ2@^'X·C 33 βO`Zh80/?f)w:^bQVV%8aRĬ9? @,?bQQtOJ҇f, 2t;ڹk{K|Ԧ2^!U@*JxJ'hN8!*ކT8|?(1!u4e$z{W2WyH}j0&N-y' ٱtv0ME7w;HKほzq s=\QN!E+cwczyf^na:ŠA8\mFתI&. /Ek"9w\!#!;"᫞Y͟.3,/+ '}Q \;wT`W=FiI0xgE ^}"Q?P-FFI J+ig/ĥ;̈r(j(n]@akk~jhaJ)7KZbQ!ŐdnOɛ0)QIx$$gOoS6P.h,1]}&ؾy#W_N8@.h]]4AF n<-0pJC $LYP5+9<΀< +?ȷ;#3#Y~ga',L@ 5/{::D J/<0)<#>h$-@uX%MS3/{'RϹ]pDw,0aLF-BC+Xg&ޗZ%㉼LIGypsOFy" FhJ#cmb22MBjYxp[:Nc8r.OufmB*;)E00AӺy̡j$ayonK9=DNNfY/ܰ ߴ`-Qz`VXDT* N*G+a@H|J׿7G"caZ l ofX]RW 3 xO0Sé%/AUT-CZrBJl6G`&\뎎}gBe#k~Dwrpp&+Y <S`gPqVFlCMNt} 䠺ZqH%B4%*)4O 8*>7gƢSҖiwyR[&Kw[/8#ʳ,f,(mO2aAop`f݊k'4( ;aYggM6_m!^VcD_N77$j $켫*;RH& Ar r],٤Ju,"T ZlPBi'vDyKK"dGMb:X`x W)qx7?E6K,y_w.u~}F̹ܙG̭4BNeVlZr.1[ jw̦D.ohG}P(KAכ|u N}a;#ŕ9 \c mC/ʈqbCF%A3Q_Q4* ()4[ņYwXou<"\kF# @f9u0F;dJi!焮E3ʦ?^|Սߥt5aJɸ?1qw5B=5@ȑbN6y0Si-^v>D~׼#a# }n ∑G>4bd1 ` KΙ/n57S) @ F6U<<ԩLX}C({Dd f1mxDDCS(0mBPBI \ k ?zc |;(Q۸B`m'JdfB1-Y"ai Wwr/$jq`R÷Ş|-N2fapiۺSv faRrVU /e[r5EXϵ H\n?P#0qk7."DO{ .@OԇqF,硌[©l;'$,/Ciُ?d27OmsSQ3"&&Zo-,c &f&cORR#8I|CAٝ6 |?D)GMҘrIfH~ЃLA2l8S/e 2Pt{M ,_ƥAP%ZxU܊ac:K_7Qle)E;M ^\xQ=w4tz^'C﹔W#vb2UnH6 !)& mE+;sm6f,$Oɕ50d˷W5 j Oڜf=!Xw-WO\jWMa_W/>]|maHVl ]8Fl yg9kF %p3=D<ʝ}ů-447kaBAum8 %"a^O6e0^Izh+Ҥl{&Z˘Θzjf#2s{5`B9$IVݪ1twv ttZw NJJĵ{5eBS2 ieK}] K:zYFAG- s{9ži-ڑ4@.q0lK)Q.ʃveD7|^L l_twJA`"#</ nΚݧf+M=!ā'=G;+]!Q֞8ygIk H0FWU%sI5-qT DDDQ?D vԦ@C#t$6&v67)nY?]]-2K5iY@y2MV;`\{>ÈR@q<$cZpjaxf yru+ac5D+uqWQ;&;VRuX"<6I+D簖-qGvwU'nE򵔝i = 4TX(i0uhE8#S4'!'~\N)6,|?dw-&עQH%8{v\о"pYptm>9`C+,l<(#(ɬ`NdžsT[Y81\طT%K?hH1x~:T2 ڦA[./~|L}C{kB6>oF^lC`1MNVgj<`H%U5 ,>\á !2o_Y3.|t"=-OS,c(NmЦngy!H <0Vޛ"#pX 9HY=jIs{nz,C']?3XsY̞b:FoM꾠As !Dz]⍈h:J B͟sXwN' rי 8oƴ*orLV(oIȕS,&A) mumqƙ3/& nY1>Y'l`(A"Fa BDnXZvBL)ئ1c؃ @CuL[k(TӾt@%/&KKTԾ%CĂ?ptW~`l$i<2 +S5'd~N;vA qV![Cwg܆K|`__)#uL7Z =pQ rd9‰p: :/ x}{4ocII'f~&cm'#<LS(_:A=n:99*!L0w;Suڌ/= Z,Pa!)ʘhIGT u+ߔ2p=v‘=Ai"{KN(WgM j(*EP c97eӻezbk]g~z UxA̶>)ĐU s2ҘWF3|Ji1ո2[8_kZCKΙ+O ֮I!ii61;KV w>շ.X)O.]\o؎KwNN2o9 r#+^߭Rs~^(R\5*G-9cW3K̼ٚ:.KL M>A8u{#[(Brx߷ cпh;uJjS9–1 zD鑚;gK,ɛ#gDM\O[U&.!q1  OBr`GD CQZT*wfL @5EW>9N {]`_>q.A97M.b{l;VJhXB́99L[.M%I8FB y i8@NNV{kh,}VbLy8˸Pr1n*sHVUPķjlPZzGπB9@J{`<`zkX=kq1! SF{֭*&`=́+*^@p2 }:ay=C62ݑe*R42a6k$N/},N=L Ԥ?6~3X]Q2į Y,L%'w%,7=Mw<MS-%uwx?.==nOGT N(г=+IU#4q ƿ\/ c9#/c3ߧ$?k ׫=j$ғGI? 88nϐH."7swٷʵtrB_wWN:?,ݘa⁣A1D1rɸ=֨^% s1VvS\bfo^Ip-Q*Uct|4~M%WxLn앳Ys]- :̳ʟD:i_GQOxXRXʻ쭩zIny_ x˷k.:8^Wj6voL&$ ,٤eu5 {v~ y֔5JOΣNM.ʯxy?n}WzYDE;ځMΐʳQiblR/==kS.1WRuRT*[[ 2b4걤׿R9F7~k9D5|׾}ߕH+wϜsJ.>ruGu}-<4jvCPA:mԀj}@~6gWBZGݰpYKߜ'9\әO[pbH'5E!7G-^c97Q17ONL:2 IY-huVSZ rK}(s{<i9SʞTk-e0]- ݮo+z1DsIRpjM_Is.r?`F6cR~V's,¹o|MFYlgR_z}f lqI֫ϪQxv{{1VRc3R ˮ,|RJw,VBWUwKl.xwlv IUn mA${&4ksuъ\ iB}vqY |iĢFj7ڥC1s_ h:SJҾ0'k݁So4o5F^{@VʻuF/)}{]~=-*=CȜc")^ֵ?L#^o-~<6f\q?$4ٞ*&VqO!f q|w r%^x '#jҭ"Ë~[2L1oFc>6F'6..g Z^>66\?VQV2([ji(1Qv]hԩ쉾SĶn:Sލ[^rJ͙wawƎճSBcW.&lȅ] KM xm6L^?7!hǜ[t9D 9/% uŽ\c]7>C=HUl7_&@ٿǒ,Z;u,dU/ cAҳy\5wyE}Յʀ/"ąȏ0.3 ʌ4P70B("2O%?g,,O{8geL:Gj:E͓9?)6sr/XgĴ@`D3ZA~Æ ܷt!r 0rTp|(˓_jUڿ:?X7fxCsW}ʖf3LGer!N~&UE}Dj7Fn?u B*,u*m|IJ tnIm_+ķƑ==PJ~W!3Y9R/#䬴Ry%0֯LEǗ:г~ ?Jf ͂Ika+[\+2g`%:\[W!]p?1U>Q\F\(6W[FPP9 j-!0eY^1_07GX /R%5Ng@A!kt|a 'S|G1AQs(2wj Tǁ,N5a^``Pu uiD~0pq wƸX KIqW3l\(e8u(A<p9F&"]N%E:(@ȗTi(A00 TtJՌk4>bCh.Q| y,tbq±.!X0@2 RVP\wؖlǙLj]lXP`ߥ˖`y.Ga}J]= 6^ Y/1qͥU77R\]K=Ve2|"Z~SSo\@\ )NLCQf}@" Bc{q_RDixܵsnh '&{![2-\@(ɬq()X7/ݻwAe.mJ/`w(5b3t=Rr*~"Xc6R̬y5B~ /;A1a'=*a0Kf%ARs}iOK"k?u6-JF궾~)J'j* jd(oU/_EЕ+;ayd+֗'mi p۸#KDtW4H,+^J/*h}+/)f?Q_AB]S{t֥\P֦#SAn87`W#͉\Z\Y?iKuv<`рߋ ϴ` aH9y CxU.mqE6rE?aWP+?lN[`682kYqe&𛲏/u1Z~44D(ho ơd[i-)IW7$5ng@_pCݥ9ߴށYnvBYLAY)Q[%N{.ϸzE@9.^ΞHX*kp Ns8N~B~?tr{b6^ϬA: 5eQU,ˇ_(oPƵ(_K6>؊).P~rt׎4;%0u͇*EfS^⨯(z%<7qAj+TUY*6pQ0 ߩP~r}J4ܳS}L)+[i2 ydDD5C)r[r*a,f7(6fFXmFYAVr & J TAcQn 00=اZg7(HeImZo:hrJ+CY"fӭ@b~'uJs7W԰oF :o"]W2j$(s}DJgϙOYۈ=?JQ dCgwuL| UD(:!_th(|Ej' @t8O$c-H[ˋHhR*')AViW$i#<1ȣmgC#dqPQa\v37xҶFZ؅Ի p S޴ {@x.8 W4#/e.X̳xpA@/>[4$b-Ȱ?0bBBQHw#&3p+HMY Vau9V\HŘfʷ)PC @-'DSvBTo0V2HC?mViȸ¤0&@= nZ#?*Q||L;v{ZiNVhZg j]Iw*bAq.p~ynsHTY'D4c~-QhR<30\aU屴k8vtkDx$Y $«SA2"lկ̱Ӆr`+W_Y8F$x-*_pV%l{؏L<ũqvU _aUCk IH Q/gP *_RPQF/`@`Pc3`cZS;=!4#d ,TnwXX0 ;qhh)ULK(;|lṷK[ rZjf6~oZ/oC V5.`E_,bQD lphF?2h%\ã 7lƯqEZXp;32i"--?kQϏ1R9t.4+4a5&LXpQ}Q`LӯPljmqQ{@ %i ./> *n oSX%nha"5-QB5p8Fw\Uao+Zap`W-P1jN <>Ҋ%Ibct>*!m,f1o)NGrV2VewX7q ͫT |4*0VVVd3=g>93<^H/.G ed,niQ١-5Վj!j?y1+`,n,&K>Z/rbn혩" VoXݡ^>bt9abvm* |J4fKmpWpA*K73!*>$QHK׷ F0>hrQ&⢤gaf ~aPΝ+{||C+2V y ޢl ,EF@AVH:-HPv]E|N!<. (]LwrN x!&/[o-ziTu/a˙D3),|b*&oǴ[W09+ˡe kjcܰpEQ#ͼVX;*VZ%{5#9B e VLG`J/QYX߼vou^Un f:l^cLiZTH7}%u*{@%yR|"jszHJ/y&X?h23R0XTtUv Jݎks`U$Y ͸զe 4p/>%*a xe=23{8Դ nUh͖fq*-h҂p eY~ZKˑ12Zx|’VYYߴW"Bۚ.4]0S Kc soA3UkUfٸ2]&5Kj1 ; ,5XFwFYD\(64X"4FV[_nX7?ym*)N D"Q| >|>ҙ]-_Qh?eў9Bc-}X[%)qPkbFgf7I1'=B:XkkS2 B~.laȕƞ9:ۍ3h3e:Zl%]C(rڹ^di?P8&&%t aC;FEgBxmq 5ʦ| GrۚU @ѭFR5+\[W}:h>%ɥ9l?P/N]K,*CЍLɂaN8,: ZB|ljJ! ,k[mb[Tr+dWjd 5+2b)YRfmq``D Dt:F:oh=5Jl+; ( '>,Ao`.A4b4~Qm^#E  &MƭGQ9l0()Ԥp R1o2|w:TRXSpC&v2lѸ2tPw 2%(HJ TBQsUẢ]:!mLEP&(5'֭CcLp8ԥN߼\W`L]LұM:,!L'Q_2. %`Z(q bMjue@5U1o ECFsL?n9̔ËB ^Xm*.e5Pyݰmc/#1-rVn-^| flV@f>,0&X/6s [Ux8G"gxe?!^j2吂 N_"lmg"9Æ 'VaE*; A6$&Ȫ1-d?0ԥTP Y jhyc zn?L#-v*e5u,[Tqĥ8U) dPO~lQܶ0rlb*q^])r2Ub9QUFPYrVC_5S=Ⴖ@+̥ŏDjfr=1s][Ms4Thm0W8yJn8LlSU׈A(eCJ1@ zZFbOGrMɁ+CHl$0L㟘Չ-4PB Z1d kBYJ(4sc7f0ScjK57銠1lqE r0 u@̷ϼG,*1.|W^5~dj7`Z8e:/-7OZ(?3lbVVC T1o? d%*ː\ <+8K(OEQAcY"Ppot )(-K=@p̢⛫07M4is"2&" Ca/_x-&cu5<TQJi`*vi}5P |FVk9vZ##)7 S a-o[\Jr5Fg0Y # (Za+0 =D%qCޚr؋oCUFв{#`#lM'nd8 /2J=lFIeP &&]c9=pC/ULJ/̰A|hVRX_2V:Yw<@or18#i̻da5<=ך{TL[.I*j1~-GhKjWXk9tfYB`Hk0T_yBNxRW*Bcӟo;81/l^Zե}Y!,}ְWF np@ yek"E.eUe[״%]ׅ &qP7c e,Q.Q?L0[USxSnEn+c@j?-*2(آ'60&e3T/`kb D ׉P"nxYe8Apz"S}\ pJ7 @B0 yB*ҽѢSܫ&{vj.w;*I2Rb,9Pxr`ϼ/*qWw)**+@!"f 82B"lYΊUA*x)Iwy`.)ܠX&0Cg"x5߼ f%\H QhrolMT\,:S4RGDZW(Y˩J5DApW.Kx{w(LH ( ts x B a)'XrsJ 8TE(ZcwȔ-~g.njTXogn/u-j3oƺe[\TqH@%jT´+-qTs@_U501ox"??p&s"Vj2pRUTrbNCwet@ţ7pVGCjZ)]ۚ3 eb4ȆG->!Aҁ@#q~#,{ \d+ yq ,J k%.\\fHȼ% nP YPxl)Vry`<{^ukJ`4bt28k7N![iX#CB=9sh"bW%%.w ,g,6q ϋo PRUhej  _SaXbPVȜT UMƊY(QP)x 0HeRy!4Iq71mtJ9F! )03o2E3s `7p5 5zY8o TZYĮ-uhAK Uӱ.ݸ$.te0{(cQ_)zx)_tZ BVkQkQ^M[8JDJP0X:,&s ,fSj-ctFOxqY3`Pqp>];}9b)Ѩm O!^=JR͛yiw H-2ΕQGVL5>߷ys-"HBqH@MCh%ete[nF>jA7jT697)pS~K1&E;WqVn9`)m#ٷ T1e`f;(S#WlRZEb*Ule%EN!76aPA+%0&X :`b61U0{梵$?> eBY!Mۜ_RT? 6yUa?_9Դpy*ayGKb\t!30G-9M{dYELX`)H,np C˚W*&Z\`` 쬬_$K@GALr6߱#z}0Z|o]KQX a.TO0U7܊*-rf`q/xpG `E2)4kx XBUDzP0cSLHmqR  !8ZQ)5RA10f% X.Pkn;kைƜ-HˁV⫊QcDN.g ^|i`paF!AVG\"<1.j+} l{3< \>I Z7{0,oWu. L\T-wRaXbaEh1%3^bh J9saJ&b  9%rh40.)1bBgLpE滲觭^r1 JqGUyNP1S,` .@M9jKM4i9"cXط2oj؞ߘ 7QULo̪UkJJ7c>ظ,@q2xJ쪫X)+[x{.,+w*鱘Q0 3W!E/k{P G࿩w_hXZnqkRVp7;6`Re3 *2=~C`м*hN@Q*1ig2<iv,Tk&^i{S !H{|DT}.R$@/VL2gQ8 %q7\ 7_eJ,=ƑX2MbMʙPv?Q[K 2{c DE$X$/&\sE2@VݟRM)QyW-ylon@RU Eخ,qK}B/Su~BKu1\ x)fyQqGpp^_- 98{ߴui" >iP>G;a+y4qwv4y|nNNU;% nTE!X7p#4+ &(֞ -G2`ǞO@rwAf-ոh ھOn.IZECRr斩+kgm  !n5ldwiVb"1ãkpi.OM, ]+7v`i.]v%5Վ)ߴ@5p`@ w12j@e1P6Ʊ k,<\B -orIV?*XtaHP嶺9A"bj\U,UkKYa / al/ \S-ݳ7`hk0>cGLYPEMA-6jm odYwF̬}gڮ0j0t7L*uk2p-暯P ]B-ʞfS{48Qa9k5fkj^"Y%vb;ˊ[ۜa(bܠ% 2Y&&TDfU'<L!7(ᩨZ-DTdb'q<]߈)hAaʦ^V{zX xa3qf D`yZ@%^34!ĵ*˫ 0aPq)3ʢ1YX CCMwm7BO< 6Ug5H-;a /ܹ0g34`]eX7 +Wގ2M&^)\/rJ°7"U[.Vѡm4V^~e0*e 5 xfY*ݳ̢0%f+PtP> pjf=L[q)kImDBmKT keDFGH—G JN4+ѵmFdTMtc*xvbҨ+h"*7EԶos_ xܶԟ.iK]@kv4ڡhFE.!I!{?G `7pj6Pe66p"Sc5|K,QU Tg _ 2ȏ)ZeaP+>_Nc05zJuґԄ䱃Pc8#Gi30UB%]!ZiOVǎ"I .&Q[0q=bV*uto GW&tlե{bN h:K0n;3hDUF偊̢c:mL'C 47n 4dzeعw Įsa21RF53И_(6ؚofR4RT_-F hhX^`UC `Sf%X;R=@^ 0YW:_4TvVNZ6Wqɞ9!jVFY͛'<8an25s%ҺWyqXeXg.q80d6ӲUTxDc R/qTn^-ͅqBGL6(2~[e'lI)μ\P V^OLj\ /\?PkЋw^ Qib[[Jx|BM9eE/ӝaH>[ojm) X 3+XDhKuB&:,E8#`~VR P3^+" YUy!2Wkgݨ}qt .k :.MgYc:_3u 1t.yoAVCy|Jhb/}k1nZC)mѿcƫ ryYk o7d*v L4Ȼ"S)Ѐh BSdb04++RV0T$o`A.ZJi}ڍգԵP-ͨ|- ֎YylCgeRbjn+T~lSY *-(_7jJ̳>>#aP:Ʊo*I^UaE\qH JJf80%2fKU n:W\PFҽEVkLq/HA8䍭 /97KumZ<@<8KH@IBa#QaE^rL?ffdġĊ,xZp" <*\Tpߎ"d|*,RXfڜi_EGQ쎖gEc@XZ,LVB-c@ e8Јrj8ijw\WxV N \nBYWrU\ g#vC64[C}2Z-]۞`Q#"*qJ9DZ`FXڇ#S~Эz3  [Q-{RTȀPtry³ e1u_~dP_e,[{Cf=-h0@^]K빙mW4; +fp>08Yoxu{i \8%X#l*|.m5~C>&%9߉D[Jdh E#YW [ @.,x&xy6^Aj!9iTbB yvP^~Uu̾~ck^boCn.b*Q E]3fGUV!U60MbZ MŴ-Ź"U=$<Q.( OqRYdDbH\~݆d&ȥ,bQ 1n*5iƥQXKᢲ~9!QwS=Bߛ;~t";yÉzb5-}>7h [eg?fNRhȼ $ H036͔ _yT7KMp,Ǵn~+BQ#5,ZLZ(ҵ>vnolQf2ՑxgYVW[75.xPS\t^ NAnɏ&R±h2W*cM&^Y|LTxQpsi4i3S{il_׽2, !U3 (Fjv@E*kDِo fƽ wm7Q;.+A)dz@j()] X;aWMDÚو5KaTCq4؟nj֟ZnmP͖wľX "!s=E3PGxv}7J-yHR__PkHJK/ <e z^ ,q,n-.JŠ@v@F34v;uc- XB:5cV){̀w)m,h0pb!m1xHˆ^gq0=:z; .1IHľ$HUhPeDԬx%^, *Fw xƽ10q kZޱPw _*\m{Zj{\)+pmdS{G›`BU=>`#ElKV1x#XS2 +b<ܩP1K,_S *qy-kQ(VCuYQz1cGeM[FqB?;#y|^P9^K._=){?ܵZ?^'H빂w3(Phmdr$n ڕq"Zm/(# ^Őś*q%^zZUVꀗc]M[n~%Ҋ /<yO xwLj:Z)WƻHxi hb[\uQ o{ɻZ^3iE"ܪGŽ/V@x>|\l[?5e@VR}2ɿxRm'RMPre[hƵ`-iZ 0Y{I˶y+ LȣN`6aAlØE- 6 # wLJ-J:[*]3-._\A6 f&kjcϨcWm2YrE^{|+jh0D1FZc0\D.a1:HV9BFa4M=1bB+ψ W5QZs] 6U1el; ĵR me9ye_1kRMVx}A s58U7P.3XѤL0 ].nc5wQV/4eY[KKm0i2]ɘF9sMÇMiX1 9Qӄ-9s*<{@-Z Uı 6?R@ @( Am"~%#⨮Xӆı%)DM ; vc8eLۅu,0pw *"]b--nkThX wn߉UhQcJh@W)y9\0 r[*p c;Ͱ8&PT穎,QP6ɔ`UDzVw |MIdiTP2O&u3!y2^feōk^,S uJ_ [6:/°YFB6mQ "0X\ T^gDIslH-Ͻ(c޻KU Ī-xw 1)f5—gM^vd? ^Ol{/Pm{ 3-{ZCqNCΠZ>S,=j{mnfh \=ʨWPdY֣kJS$Um {W& WEG VW-W7K-s2"8. *7ܪm_^X;O*`q~#<^WO^i-gs]mLuZ);H+t `ЁES_+(GYZ J{E.KYK." p(d5̶㊌X9&*6}-2ed}Řעg?d7[(1])zT [1}"4}Kkf`JNbT{= Ph3Ǐf6{s}q& # so@,͕ 4i$Y,"4inn(JhAX::oŊRPbtF ꯗrޑg"FbR Z yF% W >b@<@Lp.VH{Kg\KG[6 VTkSu=bDX(\Ou]F-F *9EOX\vL6Z7X2^"ceℷ]\̱0<8dFb6h̠cP6evş*Ɠ#+D3V-$b3L\ 0\LQz5WzyO{ISDG"5gNNQ,W9`R㝯 Ye{jW2ḊZj9e$2^T8}t5S9$sy]Ƅ7m97QT.9ۈJӦ .k5xJi> [&UPP3<1XSm5`/`dn.BPM*Nwׯ+E˥\޵,Q(KLԪ/ wȹψO*l5+o-mԱK82j(kZ.UB󯚇.tW2r%nj(v5R!yb6Z?T'CF</< 5R<*َ Y`- \@Uzb@ οhєvXn깏Ѯ|:|+&^pt9i2{}Ԣ8tj.Mx.|U)VS6Y)uVu~"|Eҵ=a Ye˱Ÿ!UaI,|qIO#셕V#qӭUTX^Y-N֟p.//J_[p|ӵ?4HCx;bjs XElex: Qe(6҈%m*ΠWJްFws  tڀl!q\m+ik_L2_SA-d4ޞbݡKTУohW&$A0?)2 m7h\b."Sį%L}'PiOb]6v_JϽC4 Ki?1n%x93iT~+e*)0ȳe~Cz 8Ya&3&͓p`Ӄb99Cmr=;jPM"y_~aIC9 B!yAy?rSBN \[.,LQ<+c5T/҂%yw J}2C슸a/_Yף-EqE<ĸ1o%6c\fpevMhdU }KzØ@7%W+9XҩS.6xMwpZ˪YpKߟgaLEUfjR[ ֝ۢZ/;"^bĄca06̭[2Bnj8jZ'q'XP!ŕ3dTx>IMV#E"woj\m%FC¿06=3!W"a TBFp[b-`a|hajp.$Ye]K 2 k('YB*${ 28>j 'oo ;!P-/_K~A6~a;PjF'Y!d0j%a<]2oĵ(Yy8K/mh$:U|zB !E-x:I,+<Ũ MdN,˶U&۽wET_6&"$X\AHWԥrLfC؜% ES? ,APd\_kBj ,?KTBWg16 5`.?8 `&~&mKtÆNdž/ W~GJrR"Ae[棪ՠd+wO&g%ݜD Et_E@< -68H7(jC}/!I0~#Zơf[卂DcU4nL=~33lurXŶ7- ! \QP*,Xc* <\MW?dEZF`- @<R* b T)0Tq(Ryq; 4DAl1w*)]"ۨQ] z6w.UFU*Sߡ:Xl+4%fU: _TJVU~%I{7e͘T@jCu"j 00t R* /|j_ n+2}mRhb QX/HL&X T0b^.YEGŢO)nģ@ ܣCq)f Sf= :Bۢ{32ާLkBQ Mg&8̫l1kao A[F`$(NP&+IQM ĥǃnnyt*%KsQCBFk!MM@}DԴ"/&"v /is\PbJ@2.8W1LKJd>v 35Q r0,JD9JbI(&b+J()!XrD2A|ę"jxQ.Gs<2 QaVnqٌWue +0#:'84.;DUQZC)rPꡋ\NдT5iDaD5zBh !aU@ ˶]T`)BT73tγ ;2t GZUz.bn"S2B'0Aԉ:rXXP^A-25@aLdEWi+ڧ({G6\B30AHr[偹væ%c_Y#PS+r\",SDDՐ0Vߣ(7׹pTE7MV=/y[Vc_~.|_\WX )ىK>F+(u0J-߈Ծ|J;$<" [E[5Ո #8ERa?4[½27 YޠZ w0~(`q}VorV4 G̠}Ü(]nZ-EUKq<2By}-Ws^[3ƅfʜ$ar0ʦʀt 5.ȷEͫU }~w, nY`޾ӳY3h35(7{w\(vK%+ w@ῩJ4 Y\K|wgG\w>eTh׈P†;"ģ f We@..o3PJ<ǡ-Qw)߷#`F<$d`;?x";/q^]7?ň6b~='YYza;PG_*@?1]?խ-= M ,j5GuZ{嗮]`?& #8Y^772WLdA̩h{lGkHmO`%ŒhQ3Y~7bҾX~%&Q0iH9~ V~Y)b>Zy8v4 X&'-NOWl?3'1pglC tMK֠X+{㯥hJ.]ߖ ̽.{+T%c(ﴢ?.=.oM%q[0|\l=ac+?j%g )E9d c@X* e?nIA BVZBu xXܼgg 7#{ⱸb^(8nGo@W6L=i"[&qw3]u&8U,*+y].U[nFN, ͋JL Aωg"A~ҶM!SG ь1Z&e§-AL$ 2`1n5he,! Ko0SW"+B*.?> ܶa/2n zRЊUH9xG34Sµp-27. +)&X(׼8b(!t/e9rP%0ʸ0u ZG~TW 1{@)exN<ν&h vXFoxϘQΣERCuܻkD)Χ3W`7I(mnxkm(KG^/!mѷL^l50QJmJdrX+I~cBUjdSTeX;9 o\CK]?yHlJ5혟{v>EcE*:Co G,)83.N^HQ]!¦J9LB ̊`Lh%51!`eC%_ Wf_|ն+s#.g mnk+ xX~"1N,pW8X,anb}7'%VjU@/0pp{eh= 7qJ`f?$T5*,t苸\h3c_SRc($,4\rkhi: —U J4ԭ+(9J:xn!rf*. dgi)ŷ/M 41K@-e.~b3yEr̢81O"Nix&.:o& [M[E%K MgFh*_h۩Wi,*13u.'irīuck͇m3 \XOWxeS=5W o@9&[E+ǹgJSjݏn4ؔhjFGڋic(z6+#dk@ؒN9SHh|񃙁lJmoEw-v)zQ ݑ\LGĻFɶbJ (¦=1Zĥ ji;hҪ@GFg) _i=# BTKS+ch _2Pz[xíY_.9ěELJ[JoY4ۗ7p.R58јZ¹iogu{H~6Ln*8jImM\p/?0W?E@tU+^pr$]fr<(G(=-< YUʶFJ0BhQ?A*e [Ĵn~1"t=z4$~qpϏt7MhS\dHp󈿯^Ư1c><8SX} E׷:7`rj![RyR< rB?p:}BǜwVq`,Z\f9S$l cPݽn0EqUZo_BYAfhVӘV7Rڅ9_N&F瑩Hm%EfL~2fVXU/~`jT,U,Sݩ%K*u(Za'8\JU>⮛!;]⸗*nT1Wh)*iA3k(-fPDF S0wap7)3uYTf.1 X_, 62S 3sxXٟ0B+`љ ޠA͹hc;q^YC爦hj(E+s__RQQW t_03J1ىTʬR,@T6~&WZO,e)^"ݲiUz L=`^E@m3|o5Aq-L.X^X.i2KvAcXԱ_+_l@&(|l`-haGQl ʦ+U?Aybf8]>RU,,-gZަњ9&Tr=Ƴ"(@c .TS%tZ &Ew^b.wn+ḻcelW2~% MszhV܀ojU N7B[L} ^\n5w~`6}+}T)WUb,Vi2TJijJg#y%S/hs i q` {\DS5Zѭ8JacqbrscfVxU0J3*eZ`wl[&qz@4l * ՀS3P e s !ʬg kl)LFWyVs:j)%;*%G^ٸP.TtaO$w 0ҺAEqƠkЕsZf-4KPJ~„5)aSpYP-̹;l)^2) PQ=>Ģe1ט.QR|)o0~eCOK,޹-8Uӿy.cCE^M=FĬi}slKD$Cq`(h ȸ9[پe.GrD3@,i/U,N3V [,4**^QwpOl%Bie b.<9Y!=W3qNL+s0I8 Y~auԹ%ڝ\{؉ʾe5ϼƥ&bb<#90-Lq*QU)Ol5.h\0tHj={̻201'!.d>!EV"CEF3(=;S/TbV0=AQs1,*.Ow1kұ~`1 zU}j 'X*4.Hh΋rq<#DwWx6X &^'" Df!ZҪT0R޹>F^WBul "f8\`+W y6u8J^.Wlƹ|>97kP=C+PSaɺirU>a=#GTOߗ_Jڻ%umIf-3a.^ gQQڎ#x8@[78HwsҸb]L<43m [xвT#q.]idsucj ȿ2-Ek($ T5eҗBee\+JGT,;*L p4^u, [͍fGaͼcWWXF\<\D?.QںCaej `R[3=i@Wf`"7 +Y@ԦJ:6f`E :fiX.<VWM R8buS ,\ع_P8JqEhni[XrfQ/e >Ҟy`WɟXS p[A2~CU@ Qju*A/55nw^N.T͚T~KaQi7n h3`Zjf\`ȋ_L#kܬ zn2BJyVZCSwRx U )FCHԵ1)uOG8K"`=@puհQbRN FpF)@n0$V+"v׃nX-s!(唪4c3),sr6JЫ(+%BeeP_AF!UPp]_hNЦ:C%KOh`eT/]{MJ<0 8 tbxe(Q+UepWu,-̹ӈWYC69`&œ2g:14HvYN%Nඏ[)l[.<4\~T;F#~E */quuF)VaX}3#a*ȮFغI:c9rM.vB6 +ȍ9*oHV\FZq7r,ohߘ5 hAiF xpVn]ܦQQ\G(890o- \6[,s`K`7 B0wG%XBn >1f^u.sDиu`oQ"r~fËR M&(؈(hESlͥfz.g:a/SIdZ^` S#Kıe nirn+x>%.!ʵQ.ǫb{lGR q4f\Ƥ ~7AFBh+Zoc+Ч "OoV/y͜oۈGּ>J_:@^J3UI@.M(͹(:o};=b5F 0Pk++$6,:P ܬhc r.:A\qjM5`{U7Q<`(KWLK6FԤWdtty +y. ~EG0e᪯)y<О9&f]zNfzpw+/f0(-<-t*L_}ۙa. VTSDD4 $A/*.ˈ(++LlK ZP.TwVI_6-m(7?b'.w~hR_[eK { yilGG PUXԩ&aj"aܖݎkrw XXkoV6G 7 `H}CЦD]3 C$ls/LM!éJ:]bCTAS"#8uXLnQt' h$WuX7&33"2Z`ov4g(nc[E^XVh1Fn. }JF ^W-ڰVle̽%hXп@]VU"aw{ u(9mZ`yXx%Q.,7U"Vc=^ j]j`,9PÅo31JL$0Kʁ{HÄgSp#jvja0i25Vb(Z^Ei}\ߴ n#q!KjBߺ*Je1)iD<ʁt5h4nMfc`` Ob G1Cm\pUE Z2t7)Vo0qæ‘SPS0qr3am%c$ 8VrG<`t,LlnloG3PoE*"ѬK01@Mx‰U)6PizUEP8 ^‰vsrtu00Z&)\a*$#n6ƚMn F3Da\Y-ʪUW/N&kYE ~%2)mdkS{opW!lQ3Ơ +^ZzTT, Ai57ޭ|Ԇ%ڰk<{P*:=͚Jy Q0|Ds&,`O emeoJ+R%To 0m2pKe,lU߈Kx侇 F)wW.Z*<,Z֏ޛNG1h(uI2õ+҉ P˔pYOeL.Ġ-mt-LOg[`qً Yb4gI"ӣغkS1+[_b&'e#h6#Xp(mSU͘)d!*~90֥)v?7Z%tde~2!MX7]Soi.6"9oGT)|Ǽ ѭ҅~WF(01p 7qi6қE8s2A\qĢǍŷn*8 ցPP7 HM9;N%xZ *9@TxQoLkOwrHT;=%`1 Åṧ TA}+0KW2DE\2Tm?+ gs]9>O(q ,>׏Ġj/2(kΤB];pEQ$ !OYjPwkPqZuX%>N2-]%Ctؗk&*;;L0`f\r潢*e%74 TX% M`Zt^F\X`v~q 0aU[XYty(/=DQUE.g) je,@ _#xR(Jj c/b= UN)kĦAz 714ikߔ*(EeļqRsl*#x`0cT5.PAN{GX1{,bS@ >6V^*g\G0KPe81q*Yȳ9rL`?Z|AVa+ cҝd+zQjiq]M\˳aª(P6#V9m]N0B0!K}]J%_6׹ʧEfk u)3^飻bwPAQ9&B[Fz̢ E.ѤL M^ lZ4<̧ށ4Ļw8]ÀJJƥPaKJD*5ot{b"#z/,q0 sWQ!֐Wc3(hin^St W1fG5y̮F\mr{ vA*Jr*DN#"$,TYkʭ^cwRb²Ta'YTSJܗQAwHKa 4UUQ~縒>#{* "s˯%fXiM,Z/95 sJPF ͪR29c[`U@Cu`7OCu=B5ĥ@L9oL"o|F©][1}8\x9fA,[v{T98 -N-DWf!e̢1*0(@YCqPBSܰ1 ^GRV 9"#5j1('\q,FR&n׼l^_P^VRJ9{vD>X8^ c{4][Y +h䃋xe6rg).jTgybˢ0KN9#԰xWet y'"+>xTF֦l 1k7A1E. -q6͒jtԯo?Z2G0LT>PnqkQ4)x7E?l- -|iLZ^KgKpb?7Ḁ4Rň* j@(f"֘JUt{o!5غXb6;oʗ-,pv=-e!W%-8Jm2IμA!2av̤QH&@v 8d 'yEJ--QW1Ŗ1ywU+ 9yyAE%) m^pέ@! d8 `! ~%13DFyR.%x!+;|="_. 7-Ƀ~-FD_2RY+8559/\ŒsKLnyN2Pʁ0f%BڥI0h tl P ){(t WRٶPEFY,j BTi;1]0@y䤔XCMbahiR ?v[ZV85Qto%_3!״R%]x*bj0t=8y1 x9(Y& Vyj=G`(`,r5߈"^w,q\GZ1 Y:>VwJ P~b[?n3WԿž͖yl>`^m-·vJ>aUOxÖzCUCƥ k9b9"M\fw1 `ؕ4ߴrڣݮn!DAKsL,H]Ƨź 0-a00Fi|(\Q4%(_HTpVϑ15g뗱,aK$ 5V/D]6Èi2xaJTW7`Ī]W,w]~lpA X}>Ɉ5, V!Cj+.?t@py & ~aT'{BMÃ,.4Hj5grڈjF PB3dr#X}@(s(!F5,b_w{DME# 542C}4q© v-ҎɣiAW_5Ə6oqg -%m1o!zE|DVbbah1QQATņ_̺ =g4GfG7fXt/ݩf[*as4$E - ({JPT$ pS;'?PN|1MgkXauU$RE7W((Eil:5~"KX^B m`.Iz)-e_Lg6-ݛ Y1aQ)UDGOTٕLʸ%ٸ!"Jr#J$t/c BzJhEX.?üeȔ@|鮦|DU.q. *Z q4B6YZyωXӨRT:5zu(v1YFX1^K!;,#ilc1*m5ˢ^BaƷa8 Љk$1AH$B3Vr/M[*s[\UUo|(~k%Ca-@7;Y5Zںj\!5*3m(o %~eZ8ex4Lf;XM /n5mb[%V媂PٍrWn!CO(uuɗRJ3t[Zu8oZ}YkΥqD- 橥b&8"Rpo7&g1kygi#3q cŚ8Sb2dW 3 EwI,qv*9fF€BD㟧ջF7UWŋt \n0 8~op~_` 12yTSY0D$[9faݨVfZ y+ɉ|*5.=Ө 琔A|'rUγ!Qh{_p)19Q|H<^w*THَC=ȈW7 z C Q^zo):×,E돹J=G-\*hr*X_~#0 VeRWd,2/N"Hݘ! B-u(C.)u vDPf7@&`CgPhP?6j֎}l%ԥ-b"k9A#% ̕qb7BePb21μr<wWrFg-HX%_,f\)nCߴbhUs0.j |FVL٠a wS%j︵k|EV7Xҫ3 8ppfߗ8w sK Pq_T:ۑ6&⚶O)84t%~&*+8\9s,8ޮPQk[ ֓+ټF+̶%U?vWw-&0*īmql հL2WXsN5Rۜ ?:pdwmkevF}6cR/J_bYFow4ux.%\``#Ng#$cu 1EX2HEvP&q—O&"@ݿw r(l%9S5;օ*#P q[ />]W&)iSP#Anl qI:"+Iܾn됄ӃqP.H9N,Z0os- }T:]nʹq K `cFe٤ ~BQG;ŵJXrZ)5_n {s.˾_fddn+ =LɱToQ/?'pn:#Y|f1Qc  mulDz:[BCP!AΟ:Z"lJH]+Ĺ{doR#z`by\J EQeaP+Wh{ʊU>KC*P5U8Ƣ3GxkCQ24ЬQp,9K Ըz8;Z}l*W*oFq|eJSb(JN<ʖjD@JFh}@Px@X6Q#ɯ(mPᫀa+ᝮ(^B`ZP4hCFn! Ijtte`d9J-$*y ~x6Pc(ʏד! +j.i$oĠˮ}0+MbMG\F,ū<0qm=@NwK[hK )(=KC99JK7=CXYT5Qu7ZE8zߢrT A8bĕ^"!#dCM lUž孌sr1(Y5(Չмʍ/5ABT81v0q2X7qX}Gy]f?MvY)[eX 7Qb YOèa.-m/k˖F%L-,;^-,[$."1VH+}O ձm aeL++`!*fA!`4s50\4RWj`Mu&<5* <0ͷ2-bs*ռ~cl/>%!~q)ݷ*bC.1f85KoqİQM=kBJmKHLq)P}%zAG fhCu2pZ-CX\ޢ.mSgeXXm!TڃIe+Vխ1:"eL&0L2LǸ?jNC[l\e빭YGʄ SFAI%T} ؜amVU.{;1qJ_Eݻ#!lUb];l阔#6WsS#)6'ޡ!(\ |ew3RĥqZf KV襚 +a]8EɌWRœ?D\~ҵNp&>}㠢eQi΁I Q/&qFU y LPPM3XMo)kRS& s}sgq;^)`;e4{ n\PPL w\OS1.8bU-#ek%̩>V`˹V{-ʩSFօ/\L b*!fo]b\SNo˚1O2E-W e(@<'S Mʎ_Te]^-ı`k z3SJ7VK#v$0+9xsln/c#*{K U-rWClL\2cuoʋm:u4 bH`'&MuJQV. #o)|["#Fϖ.֌Q -D:-}-*.1GBnKXŲSv!L̸*谪!b@E2Gbqaʋ+ahxb2+\ػ̸Xve5` bZ1oR9* ц )&-*,sx5 RҿyC!qmyq tN<ʷ?r)$4+jNsFh*L3hLX!x2]\CML8&-w|"+L">+Bvr^ d/n1kqQ2WRVm/ pqFe3"X>ys*mk3`60WFb( ~%!NqujĢ(9VL?KMe`@3K!V6Y! J/ ^=,/ꤔYAd:b#C Y ~Rvg_\,eSOjV >f +UXeT/ 5Ǣ@;![,;qp 5x+5©)Gm–&1P19/nGJAFx~&%zK&*^ uV)x5jؐ8DF BiYM@39فu@;HY` 6@uR[sT(͙[9؞%yh?P0x:̨n>Kg.HPm{KC\3+?U\Q@i88oauT Q 41Z|NT bDhíph50TEKIUu^s:* ׏h-V Zdڬh%;B\.1f`/!3ºi6(/e[OJW4p`DO]ChF,}PA*-jDX`{$>=*H1S4-1Ns1jm=^S iDqq)s"JRFX( D56('oע=.UC.\njy\ף 㩣0MnK#hћ;-&P,ԵT kPSYB*bU|P#V.Tj7L̫-e~D#"RTx8m߼mw 2 5Ci6Vjhbh Jxi/J3/p\KU@;j{ )W(`=!lr6&& 3Lm­Z[ZrAJ!a_pۖq.!N 6iQ^%g ŗ7݀_VDXt@80/5#TUXL6iE>Yl(4J ڨQ6̟'9nmE X7U ,p83faP`/8ƥ0GS&U[לsHJWT9~ ,G"6;(FkJT\V5 ( K8CܦP ExP kp"L)!9 oW9-pRHΈ{ʖ1^`6y/bń%俙[ıѕߋy?=D)nK(yTFʈc}ihDe*G$,aJ iHX.jx w^m%k/Qet;4}7.#(kۊbD44 EM5^"*+ő~!"e Y8,l9nT Vk9lj]^JMY&{%U˴ ־b:2V//n`5Pl﨏"u +mwM Jƫz.EecPKcete9#PPmX4Iͥ]æWB&1l5^%\Ƹw 7YJThsbקD 늪4wg1'4wh},92oG|\*xJW78(zk0 8{T]QeF< 4mW 1 `ReO0֪aHddH,0!dZ#aPJ`"%@{ ڙpmTUyGHox.ܲqU+<0ŴdFRߒCfVeUg Ā΁l!P4 ]NUw9LUDky3W^RE^|Ʋy{Pf&3튨+@\~% Yk|"#Ǜtd[))7!rJܥ_%!ޱ%" phƚ G&0kRY2erpZɗrlx؂E1(+@A7j5+nE[ \l֟Ml.LhM bTQGrE0\fJ: ;иVN|rVrkGYfC^ւb;@@ 58٫*u49ϣj`[tzbY z5B$1~ _j#؜D[bd8:b3pn ̲C~r}6_2JJTJZ~cO6B\=: ljH+73<13Q=@Je@p*^勣&%&"Qy,fi<"4)r"(Nۃ.cQu*FJOj{Fv]KyYҟnh8\5,8>⭋ń MJ`hzr_mq rH֮P e9U:pPT^Me7}0+1,i6,3y-3Yoh\u/U+Tm&)JRМJQeF\Y|&0@l"xA߹p#.)UL{tzVΥ}GK U kYİ* Ʊe/pfњ_Rܼig.vlt|V3oxu_vUZe r +/ w7t `]^Va2Ow ^b(gQ u _hUN>_[}?s hEP͆)8P8bΘ`"S #xaR%+u+,(Vb v]Lj fHg ]Ȃ;F/RlVfs5|ӈB]@^;ZRa-\BMX tP` S> 4[ISdPnҀ)s,V%)`5Ŷr>IS)WvKWŧroAGq6dr2A䮮(T4v=] [KĬKÚLibFcU?ډ7l Ɲ{sĭ˙Y@Q'MV@P(ևĄ+Ĭ .[[JPt\[iCTEKl aw>bZ=s8:yv ULR]Acp, ++5%>`J[_hgj;Qdҫ:/[+F ltfL՟2-Ô7.;*_ctˎm)d)imrsxp0A{JR %eqCublJ~#`1## ,".W /WdP"Ĩi4[`@seGв_3 xꧦj=~aSsDQP2*PDb wqV!T ba)W:SHX@LK z5+r rB}q ]):FmJW^JϡC>VDeo`gVr=)uڄgpL(#W"0< s(eTkī16 j]Y_0~{!b\]7džg+Fܾq']_T ƔP8/ׇBg`NUe&hZq ^"m8qƦ]腱K,]ճd=?w "wZ&`d{YĻk*f=+Yr>~f`Po(EP:1wj< J'.@.бGB (4Y%%Lro)MUIǒtHj`X"c??+TO`)/t[bgbOa +J=jfhP4K:| jܴCBQ+.e7㯶c]5C#vǿBm~a-\̈\SRGbۘ1 ~1E=`^aEG$wAm-D14HtD/IsCV B㪫D5JdJv%S<'$^نJ.?2f//2_r/\kfҖjU61U3U<%+jƉB!,F\i. EɣuxCn P6P7\P+`$YzJq* Ĵon/G;]̈́kii+@%5(* LpN)m=㗔MJ&ya2_ .`ipy8eىPl&e0uWwP?kj>O[, C-FҀ`@P=*AnVw M:#u! q4ļMTʶ%E6̬ĿQY`5bTqPUs-W-,ꇮQ8Y\m5B+W%C(*SM", ž&(/!1qQsˎ!uR3 ¦04{JYܻp#R5CN) 6FU.WADW*7:f 0 T| YA9t=j@ tFOP,0ԭ3ppg̼)_qyeʿ$*!x%.=ʚly#+8N/P[xV- S(Byf ı(Q&6esH0VUqR[AbxR$"FCpm.(r(7LSѸiLr=ݒS(冇U&9\1!lu'>&|BBC.icP\!Lm}U`="+ Q8H#tTAd# ]B՝C~%/Zy0+?=^Ҝ(`BKy[a~ D@>"RDftD֥`Si n@ K/ ŵ*%|D^P *4+Ils6u.zHWl2~&Uj  L6Mflx:\ҫ6dʍ PBM3QjBp5 ѐ>H6q6z 2kLD_poGHKJi TSX3Vm(5zz^nD&nCa{A>&68%m,?PUŸb("?$P!@oSe8so73n'owyb,+2VyYk8*jst8ux?xqL( a-A V1;䬸p{cwk?Xc|7?$E,ܤoFs,[djQj >bE}ՋOf\.l#^+q5WyD%S^`2E;K*5UYP׼G6ilkF%YrkQ>|K befBR1 ΥXYX Ī8SEP`Qfr`1GQUk}K @TzK* `U?chPK)̳V+ʾ*aKQR0̫Yٸd } S ûe^e0S.Ygdq2bettϓѧ%諀xc'ML&/3OkRY~}ƜAS;gW^NY"8\s:e%te`T3uia1\WX! ']?`2G%*~bvoV/?N*XXRhlHJ[dAجĩ,Ղ5q ,8a'G3&>yS'=!tuar {Z?0p77[S\< bB:*5 P;ؗ0Gx8 dqVij#`J:)a+w7:U&&h*T6ա2h{ep92@bG6ӎaЖĢ%ha81UAb{`Pe6xP]H0ځǠkcj]2/.`P`zTToAaX٘2Yf#ߪ8XZV@ASDK#G Kb"iuQs-9c6FGqd*=^etmҧ=ʁ7늛z%=1XFZ=+L w=8kmf i ط0z}1b6d|'8ၟ51ŏ0ZiVkiWJQZbĪYsV%: cqzh(DW=|A520PIS2(!mfaƩ~ YLX`jN,["]h b~r@Ո;F/Ds!x\*3*V=cU*0iglt n%: J,m3uTmT/[CmۗŲ@֕P1Hoh[~5.!)yxj,_z ?w+JuZ_VB S卑6kĕ1+%p6 FU^& wK<dH561| ba3)b @P~~@8T(>!n,ڲ@5Ķ G:8ᐽΗz[Ec:0@ݹRs|a F%ᅒYGY?TˁɮJb@a!A ~"k9kF/@<u4Q]Uc'kGH;EbqelnOnElSFfۢǽBZ!FH5ؠbWoKoS`n#)KOLO,O ;v^fd~Ti9z}7XKx@9*q l*UZ$4<(rrXx6Q^?5 S樞1Ϡ BL%A2zcj *(- Jؕ1@ܷjf"fvo1l-yZϢ gY{H(~=+WC*J-1 2ŸN"_DC-D(`Xu2fPPרq3W`Ad2c"{&eXW^MRP306|C@cI8PІa>nY1h4 s * 9s\L-(5Pm[-7|̱_6\[EӈDʷY3;{E,n-.5Υ+ܺ7g3-LUJ|GE^^\:/m*Zl_fSs ,Y* +{2k|,rfw-㨸EɏnYZ״ÛP1 {TtWah^X4x*<k*hZ1EG+- }Z!8qsԳgoP<-"Y4 k mnFiTehD07LK"G.e)rNcu[)L4[ć &#U[" 'X= nb K k@8v[kAU|DXM-Q{ݬJCb,&Iv?B+0؏_eiɍ<Ƣpg0'K1oqoͷ(""vȅ<5ma+=3)0ZUݜ3C-9,ݍZ:cz*q(w}8t-XD-b Q\Z)ꡖ& ¥\._? sPUܷn)UWZ̹ss)r|q;|lIv,L :ʋtsiU jйEW% ~2ZPxFw:j1Itɮ@V9&i+OU8\XJ(&mim5jw nVn օpYFFhYψvcYU>faq=.FE9H(Sə)Puv6G9i7V?b5}exEf,ÇŐ\ aEl9g 6?8#*XrٌGD0"l(;a¹ ,2 SijWFP 9a &Ӆ0>!J5ǘXfZĢ X ,/Xle:F%ܬ\7+>#(j؀#S1F]M.' R6MPj6( ԥQ=ߢT>P35%@(8PTc;VEԶ !Lq.Q(%L\T[n[we([x!@޿sZ`jZ-Aq, ܶkmfsVLHus\ (()|ˊ !’d5L3 mJ]{D5w!5kKU2uxK_eN\u\ݾ*3f(=x)>o7 1j:#u]F$3ˮ`ң,Tl('"p$ l/p* JqCήo刽w)ޯanJj_SLQgLɘTR%bTx牓{A,۸9>X۵r+pSnM?ibrť㨔1ܲx{ߥ1Ur/m\kn]jC#JWl+8+&* _ હcְ=\ ~asKɾ!@6J,\2d)2l+߼ү1k ^F+Q>M= n.TOK|~K|Bb8@8[Ef](@EĦFy0dפs4ʼǪ adHIm+1af*U W`:`(ee%BԿu E+-yR[nbdbF1&K2SsS2ruq$վ"{#_1Lq}_2fiՅw{. 9,۸?fMf7Mo#w ;=%d&y,yZ *cZ*.dk̢B-0gw*X; ;"#u^Ұ.+ {jpt<ˤYM_k(8fr)[x@Es](ϼ ]Fi5N؁4aQ#z,QL^lX>jZ ^wRkXѫf%mXhn j}3>j9C{w P48TY:]l)ʔՑ@' Z~%>70f R1OCZ|nݰ0P*7kL}?W}(㋉WUиnQ.Xg<h987Gڥ 0U֥je:`4i d5m-3UYF9 T;u&,-NH9>"Ue] 9ݷp쳪uUcb5K*" |e["`.po;gL:M&-wL69qog,f/dU5V(-cHL1oy|^|*)0xĻPT YPEp%esS;iBa\ W`uqH_mx=ٙ'킇~ij1TcjYEI=Kܺ9FTN%7Z3.`1MuD_ mB2w K]ڜ.MTi~"W2N ؋ V״N/w p qA3[l>neԎ.o(L:KL 2] Dqȶ]er@T#aлk̡Z5 mbh*t%pM8%T3:92dCDaNUٕ$4俘JEl" |0듭p~fVH*N#7V GqZ5ܫOĭ=^k)Lb_s_,@3d3uCbUL9et{`!1 Vـ]qNfgglJ @8Ko%nzIbY׈جn4\Ze*D)wgUZyv¦@|UxHmhf`b>OmD=%dV9s,Y'q a9:z]Ta* CFv$ԋ̠ϠaWs#UeA c1J{%41Xz= ]p?~}GXDf_陌S"[oRA;1䏨̠͓~bLPx28[ᙽ!+G,D⣳-SH9P^u*_yvKR{ܱL *,t3E ᷄h&kTu[\`7FG+4фM+k')oraL]ܸ2[5-V.UewPj]C+&-Ys`.<rܡ`g. @сsV3MDElsG"9cq-Ϩ%9,+~Bn:DJ*m50~NXl8#Wb߼;}-`M>*S3-*bR7_CR`=JW½`F q`d.^ ˂=!Hn&%/G1Dɲ$ (倗9j& Vyj;W, , 4dJ9"C1UCD!*nQ3 +=9t~`Bۉ~t6U1!(L"\\1 'z-zQ1z}Tb\I`)pRń*@ @ ϠC:L_QD5p~c(v4.rn}prНwtu%@br'M1U6x7Rx}YʉS%f- }@uRfE#HTQe+9x#cna}勍ƨ l 6hS4Czm%nPۣǟioCOӹZXD[sMs-6z>heY JWn!MW2U%C-/PR7cociGKjMf`?xS C9CH& B;iV kBQuXap&p8a{sChdsh2,JvhŶÌZ>៉mbp5}W%<1kd{uÙ`#Zr똸 ;9,St}Άg+~# g4rFZLgoch@ٙQ1+|L w鄫KCӋ哏rh liGsB>#,c(^#)9e, h \ˊUW2|P@CnBԭBe `7+{_m<` BvY4ϼE^tkJ?&9XF.`PZDzQkJs@ez\sٓE6]J}ʨ f΢d4<e5*)f9߄%t_88L/ct-,fOy nEB0x*^PoQ#r n DhqB¬l}Z@E}".RJ/(W卜m /a+8jeWv^'E iќcpXXע V1DSj.n,UXoC$A+1Ցz6@4,4.Ux!ʹzwTj Le L=6Ƣ3T`hbB ]_8&iax V,UKQ1/[4~!Jܰ7Ω50ߍS1f03s'KW q -i+K#z HϹWulD <1 %b:0S\n . Q6[m2[w4u64R2ĭr״[>f@(Wy@M/1(r++T2ڷ5Zjܟ<x25cMрv1p ;2rد0 AřtP LbzշE8ήbQ~xV@+j EEzg:ß[Z"q A9 :srx}=pϘb%ʽIEU 8Y1 @.ma Pn%DQ;w %-! z RRV&)`n-|V0]§YLdȕ*W jW|Mep fݩ`ZXMc ᖊPs䂫?\h-[, [aYzQhv K4EQ½ -/5iDQ͏`.M ˛7x9S8R"Z#U^[*Z 3(\ہ F`j{bc0! w+lWy:B&#ij$1lXqWD3k|EqO"?2֮5 q('e[zPJK%Y@KKwGWI S,041;_hb0 2o!7T\r Դhn71_،`DJ-HWwfm<88.xv;֘=Ah!u ;xACE"UW7pvSEآwby:m!(rBO]+@k!W*7PԨ*p\MIfʆZ bO>VFgPeŤVNM)-۸b㣋b/njݽm]p78@ iӫ@İ8n kPch @ɒ ]f%jg UYQAϟNm LwDl&w^ՒjPU|g_dIGUt9%5|bR]/HZ?>Vt l iP\W娚d$ԁV{V.up.ÞiTQ$:fᭅK3 Cjzh= Ĺn*RӭK*+J^<#._S?1" #^yD0JG8hD+`ȷ̲Z[ L$p ,AS746è b`H8, f-V"&V9S05"Z#ĴkcH , Pwݣ[RŠ`~Ѵ_5غkYܵՏ$e{PԬףs sSV=+$^a"ƣJ2Zy%S0^ƹܰp2+-0 E*xY^nX; a3U}[+= E >&Ki V7i@JK6w{˹Sn+v l+KQbuT׬j%ջvLe\(Xba,BS_ Z~ ixH,%2u1Յ*„j3nh'FA-P1) RX)Mcl`17i |%S(hX:6J8K{ 療״@nPAiv,8 oI  ^S,:cP$V_DO=|ǒYcN`5੥m{}w?Ku%ud],=Fj_s[[WFZԲ>-52Sjqdgёq6_sx ԅ&\֨W wQ`ݻB~HB۲.)qP0X>ÊÁZNj pG -(%pXJE KPW'nT}lb-D334YYKVQUx#D9#|JVT1lRC]̤JaN7s-O3#>*P H:fn4USKjȝ6p8VZ6ms{@ XHJX kqFSl`{!F)VV`2Y̼#[s)"YLQ: pFC-٣ګݵUg+ lĦ\ PxAh;7t`*E.bn}1Tyw N,PMōc bۑevp@*Qp6u4. EAvL=1N#T M7AG.o @ ezXVQ\IJc=5qУ+lITNK̂0f!-PTR2Y(8y+7ݝ1ҳ2AqEV'oЂcգ/w ">D%VbA5:a7gƣGŖçpW=C|n]x3㙔TS5S-~,8=PJEeQx:0)mA0gGW.Xeڸ.YD|D*|1| حE 8/w_Jg8ZzZ7Q[ fUR񈲜̸Xҕ}E&es"S\@2.S]lrp#7Uo^}~iLQaT7^v  Zn幠9,R82T*'QZĉV`ntÈ_q=lzf^UB+˵ݾeT^Yk*Q84׆#+vyE;AE*53~FĥUrY.vnP-blomp/m^"@82F9m.PwqWYo|=G܃Y*R}4 F%7n,pr^>Ɩ7p{{q Q\ҤR.JQafUјsOHQJ//7\]ܵfh?BqV~"ecQ ypnY~*+fxnw.x*"ܪ67rn+,rT`n{E},_ZkE/?-UTlb P fYC*ۦF=ƪ kkVc|L,߱=B:طܨ fL6L iK3y 8f+\Ye4j%maڥLeh\cj3p_9eqeb;5qR UZbj2A쀉zJUUTQ(y@\^pQƬNcJ²CwRR.1"ʠjт[pˬ+E7``\<\%X%Y)T垎e)G88vz7~E(-\Xj>a,^28VW(wgH <7}j jWeJvFZW`a,G *W\A!l}rd̷J >缺l 5ATL6f,LQz sib{FM'WF'GFgbUJZ#z8`w)ij8 s4-Xo2[nIWjjШ-yj9]5q,WWw"4Zy?!7bQ:%Dk2IBxCu6X ʷO^rCX8(|~%ZGJ|'a>a/ ,TPK*)dZbf2JXԹ'UnR[8&%ט bW@)L,IAs㨖ѻ;MYrie/P1RةZא4L.nT#WSV`X4IJWmzQ* `f=EGA/_ Q;u*](F9J((n% l[P*-`"+2ub:> iX5c+C_f ^(s\h9*&5&Ëy" >4m||0C쪂._5Ī9=6$_BҢiw]əܾaijdTH0AЩ@Y}n.baJq*+~%][%P201.9jV]PU~(O)udQ4YR5Oe\`d #`R Q[wψRj әFʰlWP"#lXQ܎eH,M*d'<U(X ps FEnZmMaI(o1^#Rd;}pnwo9*FTlEYUXōAF/ ۹p4"t17 &]9rs8na$Qcn:2,# e^S`:UJ\%M[_q.BrE8TpSW_`&I!#Fa[MAnbP)pL<ƀ^o8U~To {j5TS i]D .jm ȬZ&6E3%NK4Zv02ɞTR^?iB8@aJyJ4Q\281g cj3_0# ߙCP|H(|LJT,k@t)2" đU>ng_/ǟ.@}bvF !Kr*T]ec=$]mW1ŌGZo9 JTkVO_AUXʪ%7~@^k6FoK(!~|@l*4E4.#cv?rZs,p\/rHR^ <;({KT.!m ['9V -EJ}%zJ@, +*q [nzřv3-@/qWMhj0)E#R-vӅy9'<@n5Sݮ\25w`C밶Z!dPn S4"mn&kuZ⫠q84U1`/{Ff"B]NI%4'˗ĀށWeކU.% ~]J(# Y rNJ3Ē]h|LxG>4,l]QD墿Cl{} )YO^or*өB[ ѻ),CU9KW ͵ VF9!ӀYn3g%MG=DiT\vX:~L f.-J/8*PZ^\h\b$J-oWM8WQ"r 4M\8u*ʺЎ=L=̡B4`lQUCL7 lR\|T̰^kqvٷKmx%"nL@ yE"4qEsڱXJt*\R1eׇĹ0ǂՙ_P\?QZV 2Œ@]sFV5;Uiİ~8;K 3!˘9*AeJEj"23Y.1A0`1Ia?YB< {rRM7֐Yfe(<uR@ٌi}]VBh%C|%q&yHUFk4{x*x5 !E. S peY0xi.؈]^k![H٥R6Hcj-i,ʮʣq1ٲQfh {GC"x,{E]l/9bI4EGZZ&rȂiK+9eӞkr5_RļBS!ȄGԵp%Q/1­B uw t?ؘBM9jD!g;F$?[^8%הJdh3 A\$<9Q#X" ՟Ԩ*h Ɛ?Y,_gUhX ^rX .loo6t= J%Dx%1} ~W4ZS\PP$8D+V٤ , MT "ы]mD Spo÷е*1Ŀ .yA Giu.BAGǥקXq^EK ~}n  \xyiB %,54A5 [a}088,k¶JiP980lŋ0bu+N0xAOy% V/rı7X 32!ƝYo_;톊GQ]xD  AWSƼKCJFOAs8J/ -k b@B~bYe t01P=1yrXKױ`^ J,/1 ξ ^!QR; )ueCZ]ȭUĪVʨds47E0;T+3w60f!km^:f; ELjf&Iyz ADc=y|R6=uY@ٴT51bm~o,0TuE9H; č%Mֳ.71 W/ ̴NFB7a[U߱F44.9N=ȶWUn"nh0E՛7Z?#:kQn<\R= -`X69LBc,T.)0X"!YSlWS\iP[xD!ƅ&娼ou~ct(>e8DŽvLg t2QǾvQNWMckWfK'6W ._p٩R!NB\jpkS#O P+kv6?LTsv)kS#j3,uPЖ.bnR9/ .UDO ',;P9d*+Է6-x41BLs&(9̹ןgi"d P"~eyE˭ D `k{[F"_yH8Jj2|K0匤 _Ĺ/˛4UW>AEǒ7G^ ^o٨HUEk8G4/O2 v+ ]an_%g Q'B? 0֝/f|EC 6#3 + Z0D@g\{Aé%*,ABtbI8a᥿ˠhM[>_ .\gʹ^[xSTZ#*veA6euC3V5_+-E07.h>7dp~[rq_!4A INSfżR~Z?0M{QoXe2yruV-M?[twIv;ec O]Ҵ~9%W׈7by-EU e` pZܔ?6kqr;R`.;tAX,AR 61 ;ђd + Vu/ =C#{P&~R0JѽS ?f} 2pGXx;W g`y)-lBU2E.yUcw . 2ͱo75tKP]WXilot)M殃\.ZrۖoyW0G`\3Xt 9c;C5F̵D.Q3]Xð`@S:Gߴ) iݮғEؙ7{~׋rAL.Hu@_bIb#=S'nx ܙ*-sʬNJ pyYHT*F-_ 7(Tvo3hr|•2◊dg3;PŒָW%vŌ/^^C yja- jg1)/|EDb-Z`~oul;e/ ڏ 0HQ E!M_L7XGI&0tR{RT<,]WM.HsJ9|Aۅ!#ٟ 9җŘ%s5*fK@u',ڈє A0A@LdE V臀# y `A#Gf:H:jQHkWʯL ʖa8X-1aazn+hi*^kF u1L@9 ..Xb duDjtUryp {&m>!sf:]T(@P( 5͜`eusĸnr}n󋚀 f`GFUL9Z` @.OR̀eǬlj!A?xU vs>ҜKU{*u*XAȔ[UAEC̳R^HET ܾs]@lQe%yl{,~`Y3 *@[MAW% qV@ 0dE9@;FQJ(SK쇴3(w0bJ;nVO- ʕQ^D1*yER7(RDQ(/5G-c)ϴlq̢SU Hd+(2˲\p:e^0Uʄ Kpn 9<$^k>5y֠Z n; ^Q=WesShbd.ԨZOyLY5*@Mʃ$&^1(&Pj f̦ 7+=óA\u4{C-fXo1.%0tGq+<0̴BaMQt$KxLTCzrDe{̥i٩CD̤2L[pbyE>^ 8\Wfadh=إRny J!2I0M. 3+*7,s `֖\`ZdmV!a~%u˗m& &=$)T3 Y#&^uh a\"o 6` vH)`tZ~ kexNos="lc89Ke$67jKp$tP?ӕ4KBC_ a/PF\}!ĝ9MV!M <  qbΒl+Uy?(vdYTc"t*x,\&yҪ>7fˊvd <3yF9ĊaQ ֡+oCP‡VFæ;~XM@|7-8ݭx]*,1r($ `@(Z0LQA?g% `!!$^fWOW[үX`5vZ4CuŇ'H0U+eKX P~QeYG5LJs%$+mWq^bq|"TH4(ieΞbHfۻLoaLjÐaŃ1Q/oW|0UJ'kfSĹ54:yjn-FqV8jwlzܼovj9/S!|[\Rr(ɞ:!ᣖy͐ %Zr/ Yݟ5.!U_p09R7PhB)c l)笂y u_+W[Xk1Ukܤ^ksjz )⬊ L`-x&D##;J@crH9+\ҙ_F`.( ezc[ q̫"N>cSEp q*?zV[)S* A;|PÏܺHmĂ!7E']n!Ac2P&&dF(c{.ap. 6Q|(Ɠ+yC 77%ыcwkbCi L*>20< )fJ,>Z{Σ ~_`=l;|TH _*KO+*MDVA]4 /UG>sUR#)s~y9BdK|A v_X_$ sn//F\6_c~do qHsżK;bX,%CP>"ʶS-}ۊA\@2CW([L&N>fzb ͡/@ &cm7{G+1, q qB!6.DϨ8kW͐;{Ldf-<G6̺ee(THǼ|łGPV1ä 5inYVާ;ei|0Q2:\oYg3n .ekvV#LؼW\LTg6ʶSĨ4 \9U> Il0q(G^6@/ԢgV3®E~%Z&^aV%ԤP'UԵ_5K@K7[Ű ɈFk( φ?̼>b&*1Z\R{2-`Ni;(½JN7-{ ոKPA8IL<\*:\8wWW jb%]X;ާyJ{m :eE (XO qZZf$[3ƿ*Uv/ؙ2+{"r=o~,_dL̹쭻Vn.8bo\9]%x:sQQVO?2h0ql+Ƒ{9}= FƳ-2zIu^4-/l*^)ͱWtt*&e`UmڗY hA3yQ}nh)IX 9!l uf88/УtWTmXLlbsp*v\ҿM,|uJ\%v`X4@~BBZbYo2A35gG.%WvTkJ6UqX$nH_5p_Z#?LBQY3$%g#$%;j\Žيwӕ%0G-]Z^s9LqhOKM^K2n+=R/_~*f-=XVrƼ JrE6&tnꍇL2%:F#Јvb m769{2 ch ahC " TUR,ۼ !X-0片zP뜮Q}k˽ ħ/E֫4,K#UnyÄr[IǼTg@R==_.7}3Iϭgҳ+|%xJn8Y&#jLcD>m-\@j[Ԅ}>"EÈ).jIt,YBޕSЕ6l%N%]1q^~WǧdA#Ef$6\ƷҮ9To $BbIa?1(ԳyM%J P@bs* 5bq1BCXWL]ΠL Uw58'+R1 HZ, Xl[V;٬-zaG-sQ@bXcW8Ә]W(wMB]q@3v(Aee(_/_y&߉YJR vX_CLB Eb[W2Ա^U<.LՈÛ->Q{&w\T6peXRQEZ:"VMOvU*!IWSF/pkdz(!e3!t0]#јK)kLis1-hK9zI[l8OUܸln`w-H+Ǽ_UJ+4O+e-)/[q\U߈)jqV x,FK}p‹n)0J-Tj5bg=G؇^VஹXaJ%^S״ sq#TUow>SGs,(@V&N20_ 3]3[ws\`%uyU=|]1M ;j{3ub D kaN_ܠ3v˃E>wlw(FynpM(*1uw45MBչK{;v.*|Db%`ڢ 7Sԣνj]z%f%K&ZoN#OCQYM<_;p +!4AM3W.1Bˉ"E5$iaZU- 1S,m} 5EJk]118&FUh;"-75es ]z QQV#Z[*ǿ%ZNE*7gS=q7"p๟`weަGԫXbK>Qj{K7U J4F3\fh3]ԪsUs,ZZ,TJ?h!xΠ[eq %‚81:Ϋ.vTu9G1 ?knQlV/5vYeFZQea0qU_M[VZ"]>%&`pWk%6aGi `7+!9Fa-QKF~)|E a=n0}.3h8-br]FvXte@bql"x5cK9eR،DlR}|=9x=P|DKqJng”I"JJsjb4)8g(uPyȇkCP(/ XMP`yQbG_YA8 3jp:SLh&/:ՙYbҀm c@̠UƑoQ% y8#m6$F(0h{CڎyQ>ҟyYBi슥@HDxf1yYu'?x& [mcJi1.[-a ˠ5c?L,f'4EЪw h]Fl@ RxMU)m*n b̞Ҵ>u2ʭ.((5uMl \VV`d=SmT#]jd*^c"0xkl^LQG7um }UʗcjKp[^,^N7p6u&Cw_%Q|%3È2˂7 X&hosS@يua$ `Pḳ+QSD 1,% QXVpBnb+~%%{yb`y1Pᔺ"ȷ˰sϤ/3ktqO9LҌkScv ^EQYefPe: TF'"2SM㵪kQFo1Um[]Dm6Wu*/z;VkA@`;! HK ~ 7 [7o[vcS.jX3069Al㹷6^@gPE рaG1hBi\^2VРʃVn]i@V yyu39/+"n {Vy.!ilF}Q|KDYF!ew/U]kR`w1\ws %5w|qoUlGnnSZa>%צYM7"5Z"M۝ZH!mvWq)viKxy԰K ϻP3wI*mfh=HIy6 h8mRwֿl+l}U"ݐxb&&J(8n^e>+{+Wl2 W9tޥ.Ӹ-f9f )mc&87@khFJ-r;1Q,JKf8-xL:-Xqrʖ; 1) (Yzu)f>^H( qkXo:w=l Mh&'F+` ZN8}6c%J0qhG>]zĉs$VE1ڠ ^&OG jV\씄\kI~%6M%찄 ĠnUxSwf ]~N{\m;bx)G'#3f49PF.4qyow]ƞNȘǠ`Bxp ׈ѭ0SMyi fC6C ΟJpr K(qYhtn bLL^ 35BcRf!l#\Cx A:Xс |0 TۍKʉKlhx?0Tv!rUG9#-+R =1 1S ~`%" ۿxE yQTvᨿqi=Pǹ>`&\!4J+ىXD"RXs[1aUb+ɐfd|b3K;ݻ:EN<:o@ɗCIry^#7(KvRMS/uE59cE?7>Pw+=iYgO6x@tqGYOg*u0sKxb ̪Ue/@+lC2WԦ  `l e/_:nm[}y:܃EW.([ŻW,"ʥ3T18EL@:M~hdUƯ3i 8:P2+x\y {lO}*PXF _c6j&V/XGe 9'1SeTZJO ty(q#T,<(qOsP:i4+b@㿳yIm]EH.t/f1vT8kWuJ[O9)i,Vk˾ n X3?7P5)J$੅ AirC 03Y`U Ovz/n-M&uW*UlFp+ac0f5.`vVKMC^ߠTODTJ/\z %b|R-T\gXH)S8u.I誉pA06Ϭ~a# ܥsܢ+ZHRpCV]#a,5Q.P˞K:oؖ`y-yM\4e9PxH6**2S fArw(@+Wཱ G}{ E/~S2ӏxOhP>'V(]TÕ/.= b&%TP+|s٩; uy>`I-d3h/F% T>!)UTz$RK#e~}*}31!ٸK(8F֣B0rrҬJ!Ym.gM2x595 PZse%9n!Z0QĿPWxY18APH?͌? )Rm\1Kn!iܥSDKP'V%j 9ס\WL6 *,k892千`9<*<  YMFn=Q! (NeJ _`*"ޣwe2K8D0mY .5c^3.Ͱ-8q*94"9L`"A(#w0c*UWZ}y/vJA`lLcuKcyDJ}j=X 2|M8@pnlشjY DSn#r?E7xm5,s!2+1P6]HQGCeD-@ Q!% a|_pIK\7\98?Z W5qY+c}A. J0aΥ+%%kf=G~7lNg10"TF j ǫ--W3KfҜOtJskbrf3hɘzRs Ű,3z^fiM\mmV0F,tu)+m3^b+B4 ` "u,b7.g>mVNMA5\j9+(T5#{^cBJeEWQ"+b5TfJ M:iLلiPޖ9|Dc3iΪqxs+qxd6'̷N8 *V{iE;Ua{ۀ OG`~*9POMM3d^H+GѨҫGXL%.by<\|uݍ.׏t[mb3C3^DM1 DžNYGp5*<`4 / g%{M2,kqم$hwkTck%PKXr]5EN^rݬg4mvfZhk]>|K(0#Fůf L>s,r]yf 8?g&E|nM rTDp$ܕA, .J}C+I+ S#幅`lc@1wXBT\yh0_1W>%jaA͢Qt恧g x(K% -RXlH4$Uh; B剠}5iN+E"(v=JڶJ%2u -Зj;m[c1|RԼn 9"YU/ДFJOJ%ߢe |_Iު fE[nsQ̳9t\C|2Rg͐ǿx̲rv9$PzRq:WLUE)RՌ{0vDA[9t <>; lRxs(΢1mܫ>eƗxŮyH"\EaU5hPCSD<9%5R(ӝmmpn8 -&5JqUXLJ٘5@}cgծXa|9**/̵鉣T H_,pW6Z^JJp% xifCM\D7B`> 4yP6"0X4=qti_,Jtf>%̊#3y)l1q27A. P jFe*U;0AA*)&,Nڡ `1`661k#T_6wnw )xoT\=ɩW~LrO)gIXPJbD Y6z ^Dn+#7W~}+uֻu`]g.%5OF^q+L6Ll4r{m䋅a&1j2Du fy KQQKp-5])W.p` -<aIܘAM\-o&кP4 9X!-,8s|Ep dU5 >+W$ZvuwuT e{S2g+v)*Rc, %-kb [ke󪙋(߈1Eb8} i aκA!Wgb1 Y޷1Ƙ؇PWKXsL$(/?y nj b5 pԮ12e%i T-J~JAcY0-*ĵna2֡s͸R%yk" %kKǙ([Z!LZ<4xx+N.6<†Qe O'!ҫe/cퟸ/nD,rFw`:(PEKj'}Ri1j5 RxH}Ɉ8 jJ )HpWVٟ"oMNFjU(90 '喪Ù>X0D5VGnn1dcSaOA@ݐ-YH[c.D,f­lޭȩIP{ULj7ng`Phpn:pgUJlJ%[iv%`$]A? t 2H.|3, RklԠ|]l6+$l{  ٻ)-Po78 R]+"ɸӫF$]^nh fglnEq؏`bZiSuepF]ڲZm /iϘUqݎ hXm} 6i»^C-k Lfl &GYqZS6Ơ`+8lU"4GE+S`F1MD STkfE_u)qWZ6K95,`ز|\},53K%cUikr[*K@iJ 3lv{2n\7b]`ZaM=/* PYy)Y\WB+K,2UDcX(Zǘ>pm=-VNV pGZ^6NpP|9n,ShBfe5/dc_pm% -V*ainŶ[Ӫ9#FF8fJ-[QMɂCS crA미fA6&ᛠT.e_oizw\XfO-CĤj ]2[D. Uq߅GHot_/hYű j(s +Xp$!R`+IJ@_avcƥEIc-cO̴-빨m8~zL4Q]W iFU J+*WuX~-(>xaAqS Xq4nJ[,32W+$kef͚S&RyGa9PaKn6#f󘅰Wܼ~e_14N}ʷuVy9(hќVGP@yU:5wg|X+!FϏxU<?yUBA}ۈfs{Jd%W+lfVܜx1amnX*# |' s<-~eģlZ%@ SK] j)O e:-翨j_m@1*C I`H´:uJ_TI @WRҿpE_03ؖ 8RBE`. m--܁. }?U7WKPU2qAH{hDGlDVk'08[N. DR{m?IU̽%2/w?0+eUh9z%An 8JLm,wŹez/Ѵ 0~= 84oER|fkC6!=..ڔu,n;<]<ZeAi{+icWω%m36Gpq9Lj7c+3uT-P*P1]|^AP>4EY`DER:N',gFV_. x㟉Jw(iyBsR ,o̰X K)cU`8` U%$eʹJ~6N8K+I^f!cv 3KkSZ8J yFyK`Xu`9[gyQGr/6Y߼ |!*XqX/J 5van._a|@Ulb^}Cm]1hd21 o_*5z=S!GɤK#ŒZElAq9V4+(^ùC MT!c^aQw`,qqܫn^MX` Yx:— s5p ً>c=ba 4H Ҳ* Ӹb&QJ[l]yd0ThN?2k݆VXZ5]"x;#[⠯,n @j `/* yTs 1 L &ƟTW|]CTYy#XF2ݘL-[O$Bp򂉫:iPZT[,^Td͈dܴCJ\r8el9'@G:6.n E#MC+o2pLl%`x6("Ew3UɂyV;Urт];}[6_ a+冑Dxh UP0jE9Vk@GB&,PUSGmn,= W6.ulIXtgR6ѫ,zˆUGui~Ȇӌ,EFVU҄JxdDոEkJ*Qqxg4֖u zs )—6`{CQ -(9pY)) *"?iq]e>aeAD*1~wGC+'ԠNX Rb*ɰ΢ؾ=݁"s.:VT@[Wg uA[-9ECWrCfV>5./$Ro&;D@`Qz1%[^ v2d%_2E1+^݅ҕy2xb#1äM |̍s0.r&M ŌS@[- ((Mo, "Z޾cA8b d 6Q`A+9QTxaykz#AH:5K9 8S`~׈DD%DQނ&`d%魟U c`Wk+bĩz5Ȫz sҜ* 6ıq Wc#* Rê)sGK9TVd f,7nX=DTML x9 1Kl'Ɨ } X,劗FmR_-),hzloޓA> K)A[)R&& <߄Gx(U{Rd,P8]=&.D-Q͋N%6ϑ8 * ͫ>f,+P[‹6@ůrCNޗD1~ӧS9CZA74M3Dէ J[`G ֪yN=`9OB* Z}C`/8>zm&XL,\טT`fJz1;q[7_Jܯľ߾a*?C٬TslQFJ`<[=B<,9d[5y:T̐Ɉjj"M,ִG ZX^aY^5fNLu<ٻfnu6Z[UA3'Q̠7QUiH8snUR`l@(wpO\"`_s&e\}*b ^&!kN~0yYUOقGRxbNuXc;˿1{ 5%Gv@V< BiԶK `h2r 2gK~!-0GA0H]TPeu}ׁFSq,KSzTV:؎È=Al%DmcyqRŎ6ܻq7Kgd ]EDzk~fZLG*hW۔:Ro R7+4r6 @|wT`#Rm[pU`c QA^yeؿ6AW&j:qw0Pn1.W] eR؊L*8[1,BlD)pVɜ#.i{ EChElJ4hnmer <ၙvQ_\N*V˥')YX_Pq * ׈96.7~Ȏw۔hbKi;rYkȸ|JX2hDOU2J/r#XZu)Cf\7I9x&dn( )%_@z_`8G4JltWZw+z?r}ģmK?Ptz [0W<a]M&fdM Ġa^SK%Tj#'cjx1PKnPU]!&v<,Vch̿KΨ*tQGoHP&??2.M#eD'î ~#ocN;%0olcN#rQ}'2|A8;Y:͚` ??舆eC. cl1lr׮Gcn >دf X)) "uy(;+2l0޵-.YZ=o3#wH%Y$.U_ĻDM_0#W̱yĦ n3nRDKÈrJ6yg*}|Jܨ~Hb?%[lڴ2n-,zBİOK-@!ʫnx7$p96F-@:"gtJs:W\Au0[a`爕#\Jn&t }BX8)fȪ\UQ,;MT/ZD/77^dTpyPn䅰fG?/9'rRAox:D ;0 C_^ڶ_ +'@Hʄ 9-b~/ N<b=p 03/-6oL1> qK|eK8Kl r%OU<7w QL)F{-pnӌe CA+RnJme <$jĵ/X&1s`0UOΎ.(UGkc%|ABJpWJ̪A~&4-Éx?RReɎ 6_ԢY%h L˶@aQHƦUze+ۣ/oY}V P]j%/0Y,j0ĸp~%\VXATnHD9Fb8q򆸨?ii`xRԩҽΧp}EZ"px[`b݈E7>*%6XRPghf{rRuj6U|V*j-L4P|a2 QSJ6J?B~MD[)ܢ$K삅mQ%eQimش@ h![yYd;b$U ^j:j*U'Sh Jƥ桿Gq0FW%EpjK@X#[|/3Q1Fney+f!K  T׼R۪Hcac~SHc;]:3$ጭt'RR<@x9"ދW;G0[C9{bUV:ߍJ;d4qaQ7V|FɣxSy's sԤV5~%&̭ {KIX1GN^x+@-]yd562@q&E-WcFPSg 0۹X@++ܠVXǴ(K X]BYOj/im."L0*4RR5RAV-q3QHC(UDUV>R~&"~%:*^94yEnP.K`f5+zT=%8_)jNqLbqG5 ̧5)]0U@xWxRUU1׉c17 ee]TM{2'ic1 ~=EY("|ƯVoeB1n[.Y1s<*WY1Q50#z1 {0h8~%%L ᏹ)xT } JY5+u1Ja3 suR20[jiĉ\@ae TBW5S4D&&*!SB{D!e@Ƈ{)n}JtbGBQz H(V&q6_+V70Ǡ%=@A?KLwɲ%z{&Gק: S FHUWWky,\CoJ*<rf'V4nR^fLbWt~b\ 'bS)_>SUo1DdĊ?Pn:avCCy.RhD? !;j^cC`ռ1T0/-ʁCiRgK(ؓ yrCA ,Xq╢}H6Pc,xWiDZν>8o1ZÞੲc'1?vH .*Њ&J ؈J\[R Q;M))_PA3:bƄ q,n0TyƴtSU, ~E%>J`xqwm*/f~%e+_ X RT>ksd ]%^u2!omI[ޖ) 0zR'ONL\cT+@KtXR TQ`0E0DS%2(_*ZdXPdmPF2ƢߌG+frrSϼQ. ov, UUJxqS,&AV?jI$w! prtWhhv~4⍓WG`G)]TpTȔLɑ}b,yWQV͋R ݶ}cj[x(fu<orc#]s"a]tGѰ!,ψ&Hh.k~irG䅒ᒪ|5`ΰ_DkY@ "l5 rM,3z}%>g"~-턨^0h7G9$fYdR g%jtf*Kj!K,5L@iBQ#+0)h/5YykكŬ>zyۃql+g.-|Y4ʽ~##YQ]`"HG6X#I:+_O-u0`l#]?*]XH. ~q+2xyԶiņ㋊jЏWwuOl8]f .Tg r*Ż8Pc4D5wEXreH;"8{Fokj4-G"3F8bbdCm7R>si4ۨ -sdT{A`:?Q@ߦ>jkouAMUU.Y#oM0'(P'Jq4.DbzhKϭ1o-L(Y!s(SAÜi%p쭴t1npG‚.83m ]e*Y}|w*b^U+nlmc>*$m`Չܳw*n ,PW {ʟ3[LYFS#Zq | /iӒWlB4|E(靇yٝ˹}|JT0@LLX1?xf؊$1WJpP1^X^mKd{RcZL)v:lZ6 ݁6R\ynXƵ|-Ue!g2,d g0SR)w؆e|)`4.q{kGmWbuq&SG V7PݧI/R߶a+5|x;u3؜C#(q״Dz0B%jb3L*앨y(D +w=\b7qY6S%70By+S.9.sq`ң;{ɇg1 7Ϙ[n[O7(K_̣͕,Ͳ~e Y͝0Uqp !\"7/-Ǯ#2֪`>b8|1Vr'L۩"Z7c x(VWʝy3Nk P, Ff7RMԱ5;3g2=:؁݉F;j`A˘a]I𲡡d聮,us)e7\#{mհ-_f 9xs8ck,B.y4SS/zJV0 94-79גF^bs+}M kcp`/*])b7)m45B_>􎐗 U^.IYZoDGk>ZY`s~f~ڮH37,q#^JS9B j1jE-yبyT6X"Wvye"e^ۊ(WebrǴ9L?r6- 3 ӻB!VpU5< /62N{[vA 1s,u J?C~"Lb~GpM WސKTߥVSö-"TS+ WaJ+{{-z;#}y- ;r8P${ Lŵ7 Zf6Ll:9\/^"4; G`^*C%+1ǘ+@m–.^ɢY#O$1kcbT1ۙ+5GVZK3l^bS:!oyG-6V"0Գh"m5w՜f.'K,S 'i WN)(ip5y>/ɉ'Λ&N'#cu0uU>f +ᐭwD "WԲ ֬c70,q,,"W4ZPǵ X]um_QiOګ G0S[^z $`ܢ(."cĪi\rT.+ 2kK2'q [/(>%z,EgxģjYwl6{Ա10a7Ήc UW*uC[B-Tff YI(x"Re !TADq<,qps}La8(d,h,d:۶[YDPA0*ɜTO0+14:9"ܹ@/g`JN1<"7EV)ZL XKgg$' =A@\+na[co_@˙f1.RM־e[,*^U:r)u48}˨4M# ňE5`9OKaThc9>%)1M:)+CH*gN7 w e$8RVvAZpix" lۉ.nD{2=䕖u3ܴ2 Qj9orcMRt0/Eq?5){z̖\IJb$6-:k|yn=;! 2tK3Rg>"^R 8bf x yk«E+<Q-)|6dL޳P+SV{Q\.<61fT[<D{H.\2F*rU2G.]䨦 Ye[JD͒逕p(m02ҖטaPs=F6 $ ,1Uw\D=)Cb掲DP q[ͪzHa#^;%N6{߈02%j^nrgl^ cLj8 ´Il"#̩5/&L _-|1g L%P0g#K"Uk:a!l|Û TJ)F^G '26S ́i+x9+ 09$ ^{f5+.kQ^\i5C엎.%K}9Y75%j ]er|M[|J@hBTl @71i씰%u7`x!QeT^ P8lZt/U72uc\UNL/0 VM& w`z\QİHdX,DKXZ3 jRY4A<ߨ%KG_ר/bYy=戟r=Doe8!,1 O:ԥKB%B>bG]bV%g[Wd$\(Zw35V|ŹNV pqO`u(505oAgM0H(VKbÙ\30hߙ|h`V ų)qG ;#L ĜlS p43Ө aN NlBޢzVEFU稐935,e/&QIQu0K%+Ml%/: Ԡ'x? o5#Uf%*{D.e>AbJJ\^21vnGzYNs7oQ*菂k=BuZ$]u3`x@kkG+lV!)sRm[< v[JJ|(#GW^ceGz\#hh J[eTw 256*i+RRWzA{,7uVFvqNˬVag5,53>"+:<Ʊ1<a[SO(%Z?iH;wAGxex yij*bZ)׉ShdRL\^~mw(.K " X(> |@uP4aGy*s-FNY f?(4Pg5]- ^"[ -afV-,Iww@ۢ;VQ6s k\@>+& ?_u  R-s!C\|A,XKDiqFM\$)M Kr0 "oi,[i܃ƒ NB/ ¹;*Df5 YH`tuUUE/*_2BŎȷy9`IM8İh&e:5T|]/lan*~b~p\y]2Req"F`<2cJߺ1~fc.\Q :+{qX?ssO{Wnm*1~EdTc5 Ǧ<ΐՍJr%Z1erJe|(m1x/]6RpoӷYf,\*B¾e[%5U32ngSZ<*=K 8Q3-Tr]ƅjf=(n4K&$210"47 R?:DMq%A԰eK%A/2l楙6 AXt`s~e-~8k'17R ewS "1˫ שX w-̠:@. zӊ.Fmp4u |VSagu%J&Rߘ;ψ_0KqiOD*U\7&pZy꿄Q|S2,Vk]ޑ,˰ [f&*Y12"&DҹszA\8 \b` @K 0lX3,Jm^"TRi4t]`嘓geU4 a!<al1\y LE|w0k Jh0 5RWSN ?ޥY{ AH CK( tӃWT.UVa'P3;5655,@O(wt|1Prex1tj9 . N/lS Tɖ.Χ=7Ϟ#E9lױ_oN,W erp;koKyDx /GW+5\*Ø;ŝ!NZ]5/(p P ˟0ZsVW:q ˭exuGaA 0c9*P0Z xJ 47qo-k_?QqWj_jO*ݗͭ,npو`۱{#ZnW̼Tmܵ!clq̝^B8QAb [D*+Png MzH)9Tb%o5aP~}CPߠ+:g0e/Е; uq<1,S`)}GYk-Ps~<`NVepECahCP/A;WyOicz ˉJ%EW\WUb-/v6T|>n;R`K C o3# 5;q8hfG MVtVyNs(ݽG7(wbVybZi+9 y#Kk@i6qԸS&l'O.R MwVS;wԬ\V$ u:%:g&[LD9*7DB^ԬBse1).GYn%n/gj; ,R#QHB2gÒS ^*!C5)mdj6p|Üŧz ],W. ܡ̛1lƢ@Ø;Mw%x3eVW>eqrJYEwGUKƿ13iA8qYf@[7DNaSDaYnV{\ fNXpx p0d﨏S{ ru.$rAI0˻ o67fN]Q^м]խW+.3 OEZ}\ @Vx8mc"g@VVFL!-J}WVT3m76{1*.XÌ&W -$Eg N̬*G7D 6@ c'm+\Ѻ4I^`֜ŲVNspd^W^GcD`,}F7JSpj!"hC{3hB 1p9Ux_l̼D̙@Acu&@̽Ȩu2kYB^㙡0IQ]jR;H]S)3/&VuFe!nc7(knJSf%Yk2Kmw[.[xl%c(\{1G%)3MD%4/)n *zvyeGyIK)yTH1Z%1H+*{r*-Lp௙Or܍ӯ&㵕o#h" :ëW}Dx n)u"/[߉E-‫h9?x hGcQPm:|.pW&lxYJ6`W"JJrTDQ5 Ry8&kqPØےlo}JÜVR0+5+WQ Īٙ/RѵB[ϻ-N> b0-  L2X\=jzN%ϰ,u9 ʮ)@9;l^a\-Ele8:FeYT p>`~cF>ׂb^n#°U7䗳eҚQ!ZElчT ^&D^9{ȱeLP1!e EO| ~zZF~"\ͧ2kz|įJ : ~!ݑirC0$5JüTAXpeXa#D;-iJH2 G$0j BQGq^lt\Jgx;7DSRhnu*Wrn)`Ws5(BP͉BF>ɛW*Ῠ;uk6fj*(5ij"Kj"gyIR3.*\iktu&Z#el7HF@rrE&wD`` 4GEbY%ZlG^Y n}W]zbHF6C\1R9D/-,Y~#ɿN7*Zy}{bsEG 9aM%җRn6p/1mz #ʦK6֪/yo@vQ$m[+8zֳ !1~!AE^( ZN&+xMNRXi* J8p^Nm` m<ŒS\n歸1JT\Uѧ9WbB@Y7O& `K{:j|JN;}D4c%5v" kb옥!}:_A;:oODL8''!;)+;$lwpqHs ZRK/0u֤[ʰJclp,,|#6!\J4MɳL[Ÿw>x\c䘘{|LN%B $E%-@*Q 0\.<)K=6JK3bSB,b;E2hFm_fKFʛ}a "VyN尥aEu?# ۈbr^<4ڇs AB @RķJn 1`}(f=LO w+q\ k(rn B6h0Bڿyi{J,P՞N2!@DQЪr+ocJBF|G)3 9 1+W`e hxPؗ>cc!T2jfJoJ([PՃs &+kJŹ%jQ0k5 3눉52d .+9R[2YW0Q˗57 J_#ՙOh] M ߘR[0-XZav:`q6(v hLj|'1`Sn-{柹/E:-c&E!fq(w|;=_֧|Ǝu2f(cfRb龜穎-Qx6LW4Y*v |79gW)QrWA94Zڿ@e0e͞ =-B0ߋ9uxj ψexS̪̥ӹwyp|s.}+q*U8Oö]siQ([ULf"qB,)#QuMMaf]M"rѹġw7nX@ct YX-}ү\x Z u,̰M{e|LCƴ Ij0ɗ)q_ ^>O{ؗHuL(]sXf]Vk8("AM ]AF"Z,e\bRLu.|awc-:VR4VrݹL655-$Z-Q.Y]-˂Φ̓ľ0 %o8?*@8O7˜ 4I C1m$m(:E>G(UvR!-p˙@:SqJ j6Ѩt’`U.lPf v0 huJQi!"o Hi8LwAHt..TYVu1- V6+],/iK'G,nnfCi о9De\,^ʢT%/W.mك,liUs([|uWlun!N20Z%zbJF7)\X,D چahe M;jn'CX qyة 7.#ŜAzRnPq1wQ/۩tR`FwD2TiW^ۜ[.b3vaX 2b/nS=)0/xUbf AW^ PƣUȺ*8TSn:+y̤ުj1X\laF"{(U`wQZUw nD-Khk^7Nƻ' gn%\oh, ,\ZpYmQJufyx_AEzZX깖h}dcT"8sd49̻]6K 얡B&qIѨ,OU{G9" s*f $) iqfgRh2įJo+peԠ>؅(Wp\} KD+u kǡcE7f \J3tۀwuӛWyM@*eE@:ĭ qظdL&AO KҼbu8]ˠJR 5Tˤ8GD\Gz7.5.̒[n[U߮_Ss1cS8^ԩܲ]eMqFQCaTǔ-;AF^,47\S$kl6"μfQlq ԬTsq)QlG"=ͥGU]3X%63,,DfZl<ۘUW ^+GS}c^>mvPĢru/x{kegm#\L]=R9O|]_={N}ՍXs ŀC3Dr@4QPn-tT}^]SA`Ew21 [KW`s_Z1Kp dij 7DpF/+9*:F#-8ho\C469+CnڻoUG6ܶZ-RRh EW>}ljm٘` TوB|4E ԫO3O&k,ÍG\.|&Kb,_AUPV(8dQ%@MDD jb6Ah^ZZ%^WJ1Nh}@M hŧlږ a ı2UPoO}1"6N(\oAĠ"i(Qܰ*|=˨"){BU}7xdu/"R%Cqǘ94raf[ٗ^"J[;mnn0OY[eՍTpT 0&8 g2dd)[8 @3R]T4B#X“"05cR˷z”Am OVEcv0uA,]xj5dfΖ%ɑ 1Tzx(ppLA@:mZ B V!V!*?T(! 7}FSE} e[.l +OWSoRZ(Rʫ(0VeA@煋j%hqpihP%72.iNPz6سqga`r@QM}&5Lpq%gn%0:mQYHRw3Q6UeB,QiBPʚ!Qi,XSl˲U+)C jRdb l_scJh r |.0~kT9 E\~ $׏%խ7a-oCr|@KKѡ]D 7dҾ*i( bn(:SCmr "ی}gw%LnS`K4áQXdfA\TID"esxEw[ZԻU;jꢧnXCZi88YKDT 5s˽DR6Uy Vj_ r\B&gpP#$3WA OcsI՛5~f~p0遵IE2C\O^ [To3cOˤM.gDr֔T)9Qin<%cnυ.dsp\sC"([c<Lz J^8NIЂ[,8f|r|'E^Sh; ]Ir*v!X /$/ 3zQJ{#)|EX ,+5qT0bI(/AAEuã4e"WcpZ9j+nR[k?5KYX&eJk.7WU, @ҥA:"tBfĺ.^r嬦 A#GU_l^dR.938n"2J8{ed.!,F7ac"bH%5sS,kVs.' ܝ,W( Z7;VM4>%(UE4|QaWeuQFBՁFx&L.QNw`6b\q; G3OEji3̨hV gK=(M0" ń| ~\@c#lRmSsu&52aaˁM0 s)UmGn l,Z\a /.z]ͱ3{k*{0qoj3m{7eX};gqL ecnHmo5WAeʴ/ĽY ANXwi:Ռ0b.ځ~["ĻL s1❑PU45]JB4׊Kk0F[b5_1 ht:3*XTu%ⶀ Eev~&T[\o:ߘ$Qs2(YE4=R19"+({/j0{ĆjVL3_m_TOBB(1 LrԾGP ~hVxfxRKoxq5^b$=ZPI!vyy~R6!:Qڷ1F- 4X6Q@:H+o{s!]:(*Y؆n&ԲVor*;؉j0`MAA)qܨ2 h2f4@RK[N%E`톄u/ej̀fqw櫈ͧ^FU`K6Z YkU}*َ0(t, mm}ƫћ )_$Uu EY mier%.oRplZ'\JYZ~f%m-\ٲ\G+ ,RU Y&Ŋ7[/%/[^ZP7HC5P4erR3+o*lQ L/Pc5^ XhiEWLb1˷lLXM|&9ޠWBXnW-.8Rn.0XG.f+w3xb۞Q(%sj(r b)_K$M %XĽuf"Ŷ#zԹ: Tٺ2(*]L! 1 eCuɻE ۈp᫗dTRXN%\96wk%/ 9_]SF0\P3 [_b2B @Aj6l")|whPr^*;hm0`ҪUR;P*…70A x_"n 0n;B`lnPj,.]QPw0re70 `5"Ub!}j4&P0) !į /ZvTpe_# ku|BM~ڙb~,_IPWO̬aJ{fQ>sj>d3.Sl󨫓?T(r,"^%W 7P,/w%R#K r˸R-r`WT,♺XgήX8Q&"^D\5>Ѡ]ڔ(n%GZqSR6cN C aVWq !Z]1Mƥt2=RsY<0M<@6oeFWQ1VC]57ia,RB_̬Ƈt J@ ~~ -=͜es4ZAb05f`+UA\q )Mc2]TF]B )+)!<~+ )\ y(rFWZJ}"cdh_g 6n d&>"ĩjf MLQ *Qԫ ҁԷ~VQ@G5-c@ %RE_F̎1[a{"9ń84Td[c3-ÉWM(*GU2f7}*j  s|cR,s3*~x K6J%//#dbĥ φ 1E0Ja‡cb݀(G`BchfUZɋ([>!fw(J[GZ] F-^!`w)2 h"phΦ2*?' qmQ"/Yc$w*d{Wm R8㒾\!FRpk LcKv^XVF"9 SbCv4 [_3<59*![{_t }am Yן 1 dۨd[  VA+d>%E?qdBTEIV12C@wob`.j86NP ꊶ+&A&1^G$+o7^Ziw,d`)`uǙҩHR+v IXw|b_m\ѲQ|͆:'еy4TfYH ʃtNd> ]PǼk5pq;eū0 ߘT8eN4S)ӳZ&1hޥ^Aϴ`nf*X⚾w2)KJP=1EU.gWSw4|963|@ 4D-_8ERJE"x ʰ"ۅ=DbeqFb)f3&L;9 '5Cd(0j(BmӔ4eyq27 e1.Rv_9!Hhef_0M)̡=d^ [O;9kptƝJ|qp\-^؎ YJ>3bRdq\7Y?!Zj!y֣PE5]ŪK^K[hSyUTW(r"@Xh N<ȼGZ b6z*),R!f]HXi*j3qFp"~(ME9g8Z0.m߂ T%Ou(Y)$")nuJlj$PzQLO51X N>&2իf2+:*WWRh_iI1!Q ] Wwh , ق?8HAߪ>zΣBk XU*ػ< 3ىDՎ L222gwrRz:z1.bnnBuMmXUJɉY.0(覾ao]-"\@+Qs)Q]KA-˽KBn 3H%4,%~IaD-)nAGk/ >Ž P Ùܱ)uZ4* +[ `v|D V1UC9Y0269e[1x Z`IQHė ]&ߚao.]L f(0]ZyhX]qF%:7g&uH"q)KpC y.3TspnX5̯(o R. 0Fd:8'γXN{CU@^!pw}6lo,Ve p7ii5fGb`Y:+"B(#5(/!Ly%]1*h1n⸳̠uUFU @﨧q̹ %)ZAM/C\[8uNF6U.] ZDjVu- 3 k+"upz U])bp˭y4;$Vv:K,K%sw[ w2c|@eMr2 t=͎y &8f`< )+<\Y^BMCjse^y5Ds.e9u*ᨺ r%לr6,zrqd1ƃ_eKFL9Dt;n041,,+JfYDP0Kzk;Me)KNe bfeTj5Mr8o mU;$Ц- ؋x̥0N+ /#0==.3g/I W\KWw11[YsX :p^ @|%Ɓ= B@V8 Ep EU5I\{kܻ1Ivd+5˜ENY w( _sgu(.G o1t w8`%IUas! 75h*lk[mW aӊMx,^ `TZ9:ߘkh>`(fUh`U^twxRpbÜ,1lUnțYګ06cXk[bԁs\O+RU.PW܏2"Uέ`-1PQĴ}h*K$ZguK{Z}4 !0gPJp)Ü.ó8rjk:aB9_Cpv z5eҘe,avΥ"op'cpPr43r~skg-w<SrpBm6dr MhWRk-1Bu!QUN Tq-,8^׫*91nc-{+SekTH!Y,(wUsi +a 0f@@uE &桘ʸ(sEs;M*1UK Ra3ejYK!p1B\J;0)j01 $sMˊDZb#R%VnjPr}9+/$)4TJz)2@%5 2yNz16gԺbjSѻ), /+r[` FV P:rP(Q ]?\{/3?SC;slU{@'V1[P*Ų %9ls-/+E.Te^kHfw+PÅيoQqF$Sٍ=OH|?yJ wg-T "< YC8ЮpΏ ),1Ym0@(pf]AdX, |=wux2Wܮ>Μ%7# vf|Rk=[>s _A; CM7@gj@Va{$؏H N%xf){\1}l(|0M{\}%_šKxeMR)Ysb@c[?1AL%>en(]@_cL"ү]$ *t(3 \$cx dk<3؜KVpA"QqE3~5vqO9?xk{/\u\wyEA1p8Hq+j`AXW R#oTlv[PM9<:4`pD ^>hvX6-z< l0.V3W bh.6mDs7 ^'evY!9\—)sEx"^r,MBAXlh(*n#+k~Ym~-!,BWA}{O2vj_!L9Y/J hTH[em!D5NVAR+5+%clCPN,zS!u6.TdKSApEV#qk@EGR5 !."0kx^%FuLZQXhQ+|Ef%łdxioO D` |ŀ y*nh⏈&8DaRn *> EᯨU)Hcī}֮!=3BjU%%:>P9=!) WC'@SmJ8Xmx ^ʜʦj' Tr vLqs3TRD>Lb64T/(B\uUshbYīaz6HP4ez-_B8(z_4fh" A,RJ8quQRB `ߣRkS#:~*Gu)3`fWu**/Uj!dpcV @}^3kH}T hn0qlɪх.eWHHv]/Q9꽡䍿&<1Z/!LjWP7.*|8SdsL#'Z*Y (Klj2l;#M1i+5KAAԏ2F..c[LTԢaJ 0pIva Qbmx%V׈*{1j4ībn弽G.LԺ iq Ul5^;*JnĔĦΙFlRфL.Sija ĴXYݸ΢D xb*I LU+AZxdƱ*6K%.2VtL'"ʌ VLjܵPdhis/G(zT8Q&> Jl,jaciEnd3f^'#fLF Lgi)4ߨ{j'Pj#jVʫ=LxKg{%bQr ͺ&+)R + Y^+RJJV{IĎ`F95e=M'o+_M%z%z'zk)>2FSyRa= ܢ!SFġfY0'5s쇌͕%+R~%z퉔hKGP~%3WRn%:̣ĬĬT38J2zJDJLkQ7+(@_Bl*"^8ss(R((Kf@ef L*S5AUŘ@1*ں̷CaGz7pe\5yhKͶWS wzĦ%b*$3G/A+KK>C߅5}f٧q J6?)jQ/=`ܟe{J_ o"1ȿ4x|GI]he0=Xr1.B%uԄ[6(+= t~O0܆51d}^$Yqpt*>g{-WE&Hֽ~ˍ~FpoOs5Qx߼]>7-[5Z ~r~.:ˮr8־<ݏEÐ<~x`!0i-o xqg_!S_+x(e}2O4i4ql]rpo,/d-(W~/ߙ>bxOί4N 1!fc0I_@ߦ|zlH\F%džRq3#m&#sV9}ۑ̆qd7gC8+'2NRJy^ޠY$l[@ЊU͜ j 8dI\3vD#c6k;aK ⚸'C&M "4@sJ@L)TpNТ!Ƕީ\PMZ8~(>{9-fa ~Jy#+ULY+мfɮPw 2u;+ߏpgxAulke@kӓ9[{cZOY=9BEB4ZOd^M`hȔf_ƕnZ$< 9S.8=nfL| 7Oڍ8\QT/8AGU|o3ysHϰy35,,Yq ?;FC>E V+6m[m$/õgMsD 9Э@[I"r`J{:9kaW} 0B,weNcu-/وioOz8ǚSJ=eR ֟8ϸ)ͣW}*զcrm5cXBk[)1T*kJ4c])X$׸\s)KIi9,p #-w9Yhb>(lk{FѴ,~(~W+a⹛Z9RW˂KTgstS?u[兎t/Q08!'Z;[mlk<̇Y'DP@D f T-v[8?0k"$0 X>|W`qp*g݊=%{#S3V+ NmJ Kc_KBŏAB(9(XgP. ,󄻞~kMhZY,Sܻʆh5nN9#Fɟ^$ S .W>Y+ ]:u{ti-sA!=&"Nto ?!WΨ rYc/Z'ޟ>L$ P_ EdGeWXIz.Cf팴eK40 rXyrj̓{Zƌ.#D)j,AY" @_&<L2(4&<[@VM>YHeiOnr/#j`. 0Z@n_(F!P8L*vfz<pobf#rG":&s%,M7z,rQn H4a|o J4mPq-3Ft;yysۻE7!Tb%%P5usWp- I,)Ӽ'0l߼ lyƀ>e_%ENkuT03?Yu>Ĺa cE?+y|x^1!575*y,eoe/rCU2W*EW~#+%Wnknu u&[FS+"H*Fa ng$=dijRgweLix"מ 5E@6ӥ)S՜92 ܛ?M а?bPpò'Rz&T# 0+ga@1 1O0+YL$S;"NOiH86fOTl]æSvj#7Z؂~^5@m%|sLy{t`0FN}2o6-R^%w1 QE ~*}oB]w@w7m&4d#;n/J'D Nt# 8KM+Z[-`LC<&˄XkB-Bq"Q#>qbabPV'xTlHVދOmrFT4EY 9xL)r# ַ iH1sk 5DO6g 8bD.߱1 /_FiвS 9W./w+"ЖР{Uh0joI©L]}?B;k6^hrȚR1_D4Nn Vmu96,~A AGiW='7O Gڑ}Xei[x`PV3cٞ>N@B:߀̲zv;U - ̲&CRt2Y|)2-b'~wgNMԣu c3IU#惄anKRPѯ_EsbJC %@N Q oR`Y8R qŅ!yp9Ob8(!wǀ]B݅9^p(!C#WӜ &4NT' }<O#ڏ e  ,/^κko^# %1xav3!{n ;t"K1t/tE\ɅN 自jz˜#yܸu ;zwƅ]a|W l_ױf4m𸙡5#g:W\ ql.2]5}"^ ɽQ D6%}VS?CbZC"QB WF !xn %W5ᨈ36&?*tɐ\Q!Ճ`Ob3J}r4>T"2\sNž:wpAT!o%gbH7ve"%?*줌W"dH5 ' %2 7шgp[\epnFY4F9NؚĹC^DUHEei1&6vz0ʣJzv2ϢU sk EhdxuzyYSX0zeJڟY1G:ӤT6x\MIà ߿:UQ>Uj7T,Cqx)%Ƌ mz_V~ ?U 0h<]U#192?EoY<(O^@F^dDn*gF7]c—2Y">LPh ein rx ..,Zչ_݂^6hvɹ :9C=?c0{ /Or /s/S"WFFo KK-d?m*:9N)߭e_U©,cSSxمTӵ׷U`+ (J%j1~D _Lwbyhl޼^UK^rDÄ$ډ nZ}_p ` 6IM.QEM jQԧȢ.D;޶Nܑ[ٱ3U86=|gnc3Y9E9SW( {c6uglV9eiQݹ폅-WmFa>'}W`{ī.C'W?tvttw…_wSm̫4n>7\uQl!7삊^{_9@E2=?up@i՟4 Eʩax^~3s+TP-[FB fzX8ܨI;nq "N9kѩld*Casir>/J. "dM&hUY\4"W8PqΞMgSm\αFB[[5TTs Bdc38s(C OW *5>^.eߙIm,7X_Me5jq$Q1HYuMD"KQnd<ٮE#'/.'%[ϢnoI,%w (%Mex~ec nǯMQNJ~kqu q usSuQ d79> QQ ͻuǃȕI5)^@~y-T:Dʫg:rNd6L/e/W so `]xYg:>o4o286Eŵ 7ȰVTx׹5?V-_hw1RFJ& 0)YqEm{3}A t\|qA,CMb"{G>;Ӳc?l{/릈~[ǶC(ck %"yVLr v%43'.Q T=uP~Q!p⧐%T~>+#@.Ӕ?ъA`}]؛Lُ֗t/5RۮkJvNr p[y( `rҰ'.IigOo3^}%\LtQBi ¶UHQ|7Ss㇎:⭮%.QzM4Ǹ9̔t+N۵@zΩ'2 POsO?7J9TݿSy ڻ'eԧq,CgO_ (ibs>աf}YzQS˨~Oz=5yWٜ>57=`l}\`xԗǜ3[Щڧd!Jj'{wyHormY=ԥ,r=YrvF%|׺ӆEHN~#D}(Gz4_ rjNdͷ|7&़LG܇ ,?Pμr})+dϿ٤ដ _C~hBc錝 nS1](+db=KuCNb&&Msyn7>g:UG"2R`m@?(SL7 ku-N)&.qGfFnݍQi] Sz0By53^f*Ruijp~To+GVbE0A9gW#5*]avxj̣k)2Wh2#cz}̋lG XYPB`hK>+қ9mbh W HU4d\1=DU\+eR ƒr=ۦ9%ld"=Q\ZOF2xpTҼԫ5bz ] #צZ-Mv-?OoЈ9W-q+8$xEߣ^XM&r0.:s LiҟxcXezIA08EKOv= ]0~]Ve)Hb'}fԘX'hc΁C;:7NBu7aπQ`iJ*Q'ǩg5pc\6)M.Fߙ׸gաZƬ.j'`atKS>t9msYwƟ4LAASVߟ@=I2V( >Rg`s}dԸe8ubYL+?nCR؏C:Z/9?DW}nb@EW,o˛WB3ӂSU]K;).:Cuf=HGCa.* ʦdӧoDdlǑ{G,Ef)KT٧D,lF1GU1Q=^"'R$ L3:HP =ϫ:yLd܋:)e:=7_9ּ{˨&;* 1T/FKI|(8SҺ25X<$,\NX6Җro:P7/ B`:4@m 2/'ڋI{#ri-b+5ؘi7 us;7eA=]}:2$!I4Q#q@u|FC|G]c8*MJCMs |&Eb omOh9ߍC:vY|̱8_k%N'k6>護:!PGkj$#sC<tȚ\.ig=8 ѿ}b)s96M?l=m E5 VêkʻD0j0uT~M]sU<ɜ6P@4p <ܿ7lĶIS)ͬF]z~lD4F?+Q[/H]j!s#82 ZwfZ\YwK[ Z^1jU2оEz?i}sY{}f fP]5K+OڬTv0SnrKi8)+4H0Q 5>TXi;)KkU>YL"EA|xBppכxR2aƻ#88cR|:/_5|}C 9v o"h\ufyxVZX[hJ6꾫D;Ag43WvWح]9HnDHXV5W-Լ@Pb[Wܦ5ߎBYHYVa*@[wxDt\}1O9 R$Nl{FnFHZ20ӖGޜb fK "k1Ucg՚]/>H(%M7XWYi>T}sqH@#;\UOvq`=| Ht4$=:TQM+Vc0N:@d(y 2G̛eJiیhRS+b;G5r X^s oj\S:vaN>aAD LsP{XNy%}ImARFmLS+c<tB֫&JsڻFG˳Y  ZABOR o_I'YݧsiES&V$C}Zr4. .HpaDFj1e&K~eg#^YvC<1< !(JlP=k8&ͼ""7 ݽb U|}5A1X(ɧ<ÿG.g2Kٶ:uŭq ysg 2>QIOI.ekVP$ SR1d@ȟ~6?z`j#l}N@HUI\M>uRb=,ChJʋL!W^v֟U?DBT{߾s.0IY[;rQu6%@ryI$ɚN 2k?wdwewr@82.+ _"=D8B+>9jx+A87OVy2 A2'5n;td:(2OVr N1Ŀ}c 8apߑJu|iz]Ż6!+꣈@;{#3 'Z᫨XukwcinWBQQX LP¾(0!_f2ᄝ&>aa{).T8#;ۋA4Xf]JљiB$GjGx`Rs[ބSz;gy\Yӧ&[2kX aW^1q4gnQg!gE[m7T,'x=ZFi)jdy_:6=(S қZ}CNg՘C4N[)LtK_MѳD5[obYwhIv?x1]=vQW}s:I66Sts x/7nt% ѬK\{1b;Rf@z"ʅ|Xy;+{ '_(մ/5\ϓW gZ P 7+hǨLr\#zuEѣL=xg:u%2=Xhf_?T_3,''r3j[.ZaX 54w9%܆u7ُMZj}d밞cQCS[.Mͻj,zYp7;gH!qXax/%pIm6oih>,1OmS?فࡺBkƨ/mŶSr!τP&GꕧNU<:k|GujO<ۂMPǟ HMП fvӒvxTY5[||ƛ}*PK}0jk* WJK\nJBH.f|3>"tͰn|hxN`#dSo] t<[Troߥ\p^B#;Ӆ&Lêdf{-艐Do1&*ͲΛNr(fIuӠG+:\Խ Qk5/ ]`I8k,ϔ3aRFY ~fi Ϯ8n^#Օ?yLAqIJ(*[~#1/G7RA_j(%0ͧe^U5]_B'1mSΗ9"g¦%@'ZR5T搜#p5'7 6m@0mzONE1uƺ]Np kԧ3)5 yOAP؊Szi_>RutOm%E~%Sf{q(z ,yUy[txfk g(g99LuW#?MX2r ~1j9yߗ;X2l+0c+ ִ| P.I`wLκ+ع[ʍyDI ?SPѺ&w|Mq~nTxx-Qp@'[ФՂ ȣRF(:S1+rNWZ}B?t]F!A+qa\n5h,̈%%'چR)Q0=E;0R:n"~V)0̽$Tω)L~XB+j1x֙Q V7h 6f*6]㤕( H^B%7wBsg=Y*\ xnE薩 [ @$q)Sl`.쉤IB@NRЧc)vM [DITr/Ɉ^>X?K{&GSJ<ށ~M]eKBSXHX״LbjNzX֟zެ,ݩ\]~Lܢؼrik5/ q]I0 D Kyqbj/U\"'DkGS?`m)jꄄ7y` lS)&X͗u?.P_/d[|pOuj/z{&oH-ϜX)w+.#1?z\BhfHx8 Y ?[䔿3@Q5\'7QA+.~줜l {_n Òp?+3O)KGA{HK0p4gS둓*+v7E++H6E H *S1ID7zYU+^4IosJ`Fw^|*[(vlD \rQ4͗v"C(|P썗 P3X^}r,\ S1SUʝJbd1ڤxIl®P+43%5eLQ*a`>*+ߑH+܏v XfhH2_%;}rr'p݇k EL4vfdcE "I9V<͛?Y_}_Oӏtܕz)&-u bT4'8 o!0XLTXd#Uۨl}c1珌*H\5Rހ4?1!NӴ!8&dk6*Yu\]oT 3ݟ-m\f[. #724}OX̖ 9VFnN|g͈nl9Uy'*@Q*zoFڻ7cq!fMےwR&;p7G}Vͱkr2O(LIk>/ W #g 폴轷+?ݙ|ULTK>05 ÜtbעeitFα#j{JUClfd; َ? yfL";Jԣ$9gadzΉrBE1TDKQW<p/ځcLp0i E望6ל1Fs#}3W90W&adI"I{?y>OlU`7k 9s$:إ)-@#Kn5EhָQIbAcZ":j?g(5GM-qP嘜]_}&OUT.\h?% B׿|ܵp?&5H=j =mM.5iMxSdܺNՄZ'CsE"WR= ɺ/'*,<ݤ2tYr<1>,ԯ$NI)q0,d>CjiM+O,jcjN@\" 洐&3~;Al~ L&n;jQc5XM"^+'|>)!Ғq4 cv!ǷoJLUf|¥÷<2pd>f0Ї#;nߝD(?P9\3=Bsy'NJyiGAu٩U'K[Ƞ(4*wOR_ QVq!_ V&CF7QoMDL%j9{ٟmV̚_.;Dyk~M88}AIahc3QX.AP3NJ!ꀳllK\}MnPn{wK'~5ܝèsHu/qOpB-r"yEFaҵJVCZPB]4=nMq Iq[N~n6vp]hiMCw.Oh"%-yGub?K-FWm0 Q :<K@ s>az"RtV8ojQ唪3WA9q3]2,>Yn?vT4Hˣ[qW"^=GBW23nS˷c&'g)Z%A3ae|@0qjp1,+ΙO%ʹv Z'i^ۚՙwGb4SCyM1|7jl<į64"YMw\L%6D UKc Al_m0$Iudˋ?揙1j5 UGW0gZ^/R=lT <7޹A vDӽ:R2P/NA*AePa[%,!8]%Qg8h *|<7h֣%j,Hg,kwMQ|w=8rooo5` [u>wK$H3] S#ٔu*peҽ [ZwG%YثUdG3!ӛP>'pY0~T.Z WaVfI F!\RbDRSL?qssPĉ&}~dH v B}aJx]XPh4).0+jHR`)dTt2Zh{p`d:}g] ίb䩇gL:QWgܝ)VDu ;T1Xsv#;i4ɤs|Wi׀=1smRC`2 rVM5;xx8rDf1#w 4n\QɝuJރ@KR_0ᮄs (Źm'`Ih=ڏp*feQi/d{i0фDqJT*NUvH$T(M舎1)L:hͬ˨Mr}GYPқ;66#}ǯk>Ԏwb[{h݂K2L 6wBEo$sRKk8,g0SDIx6(mk*沾Wc MyrI{As{)f`Apɕhp+yCSZ!RV0&l1Ռv-vO9JȥU5r_󣆅_ i5A/NoAJ,eYp\;_JϨtA Uׅ˴R$zjK:@y5VDխIHM5w5canǚ#3YڿȳiNiXVE eF$tN酪 | j|rvAF2\2F2s<Œ3$.ťR&탕$(c;dygp?@caM[c'lUY. ' L [k7=u* ͙SI!E|9Ԭ8;GeJj] _05;ܽ;~EIvV^iq%E`(/ǂ+gnU=MD`QJ,4LKނqj~;eiglQnU]Ѭ>"FVRq ($uE_ۮPe"A@K6k5K [ %2b+O+q;9R:DuǕT;[  Kq(֜f?zb Rb%?!1E dO |d5eCNSPrA|n&B @[>U\-H$G`]ip+1}㴡!ͨ2Ŕc>vg ۾án5MeH؜W}cLJDOVYEL!%VC ojq)WD4-3$K~CשXyEɐ "?޹֦ޫKt0FØnjjOըZ,E8a3[z{͕cFbȰutz~m=( XNDm3Xc^1ԍ[ch梦%@W|2.mӷв*n_T6x_@E9JڍZyûH-p\W>Th"lxMzt,Ȳr f OcE;ijp~M9t韺4Њd*'d"MbJezJ&PuR8˺;Aϔ*7o1ifT -o,q0dt]-S(§Ċ"篸:lΤnk[6;Zʽ &7cA3ڃr71/#W'T;xZgYZ=縢:mdKN,܇ٖ6 y74aٰm 2 ֑^pO>'E\'|ԗ\3I20]0[@hjx`v/~'pqwBϵ~yRt}v&Ʃ[)f[H`JWhl7+foZny=~]2FW=g$ZOIU]\ Cw"ӓ'BGvI~ۣ\2pH,dp]? ;/Xrro$XIGTCm=P׉Ikw]xUGYWxn ; Pf\T=*ѩJ醴wXsTոy ›Fk;dXMt QeOv%[,%gZ 16Smzޛ+&UUu|&86-zDぽ¨tF /2cOvRP>;(Q>{c B_})z[Rܫ) 9p[fumxt_v)j浜?iS;Y@f^9+NV)͏֢u,xN,'UF-_YEכP~+e)|<:&8h@G>UHsC$?q>)Q I1h(#+fR`iXy7+q7ev=4ɶ@fW٘{ơ2(g@)IMwu9cQs,x;C \T˜qG7hACK ',\q t:L R+UgN_ w+N5cks XzFjhSLWڬ]DSPb1Wuzb/by/ pg]K_Z5"Y녕:OuMLatu| !IԡbƄ̮l({IٜUձ-{sK+< VHKF40>,wQVm_$|tBp.~u0mmW ن@N`=#i)ru@2E6ک6>yN} { (HaV>_Bz\H=U@G{x"];ʆ (q3}!R| wuFb6DK:u`eWn`;(7DJD&%ěXdV(`P4S9-➁1SfΠ(g._3= yĮeOR!.=ϡ{4,[MW]LCAiK;݆!d/.]d{I"z>fSkE; [ts#zFU]\ ~t_3pU i&۪Dt>MaaFI<]ƶB9NZפ(~8~tOAҳ` Ǽ$5G0Ceƴv8Cv YT uM >Qը=_ֿSj4˾ykWf)z38"-~ +Ы:J̥J|T6ɯ\P)k#mN bM3\R[,|u)iH.1]VANq%nѯb @iVةA$?Cs县^3|~m= o z*-WnK4rI-2Е)NgE3^X;AI{Im>YD6'=p@rD6Exls1o/td26ñIۇW^EA~)F9,x֥5)kA@ mw6M7w&uN}ZJ\6iѓ6K':cIfDĊwŵ)8e07.쮖a֝snISΤs/dvM4M)*63S]pμCoH T0XeɠrRdw2{ALFGW 5IG P9-ԡbм41A),yg4‹?~60z/GWqY0- !Q/uQ:cn~*6$+qOCJ#)Bbgx8/ҩ2PMfvyx݅םk9)e7zvRPcA Nu9 Q|nQb0'K'eSڪfGM1G*sݦ3"a4i:KVv]g~`וPN #[Bqc6(CWd4o`18Uw`w!JLQ6{9ZFR\w[}Hvspai"LzI YIu*қ~W)-ETE&r"퐷pSQgGaHSӾD z奙W yKNESS@7g=F:sufk̀Y:Ham#pc~E?hTJG]%k#xtrV*pH 9;2/V5oXv &KҥRMd7.07)s+~zǚ1R+EQ]3oߤp.^cJimFYCnӌ= ʱ:76* ĵN#5?PWĀk≮9f\ʁROC_1F[p*U=g[g.  xN=-B-B?&UبۈQFT6O˹)GZ { ԢM(]tf'IOW.vL[Äm$;J#˨4R77'W9;-.psdPLV/a˧l*1Y| ؾf$>B یuHAa_ц6 `vܕkTU696bo)*.G(KV[v%1']r_ϖ(ѦW ˙@+B8Ilv{!F;yhƪZ,)!F#k9-?oz0XCP:G⊞ٯh=4ڕ7vDkMw;VOA>}Q Cmʁ,:f9r'*DgǎE@NVجΆ_XͩϮ#HVXQMi2g }Y{c+OKpOޭY}alc4JYX9g5avJۥ4l` /7-}dd3-Ju5 r}b}U2O۵[+2Vf,|LMŇdkC4? ܻ A|mEW.Z|^JA^Aʆ??6Q#~ 2AOÄJzNT0>EĢ浻ö*HG26t4kUqd WOnV@ z"&h䟲Ř,.[&-4 [QwgKp]밙dG;fnRKvkp iԓPlI ^%+kFr>hyhU-.|O +xØ: T܍tӕ4]SQٝ-m&_8hoAsii٭cDT)= Mjqd=srnz2.GC?R;{ <}t,cܼ-M_9s[bc55qWʷ= t?<좌5Mؾe60ȰX׈Py ֭>nRs<7, UKNhñXdQ/ u%>#Ƅ2$8e["'D~w:UZ•J7`o62Px9%n< h~S֚3n ;gm鴭 J2 7o([=ky-DQnqR:gc]ve׶NbszK,EQy.ߵlwDmO%R:G.~=jzɖB;Wi ;lMUm3 ^4ӘZ88cDLW;O@s?ִ+0s0Mbe>Os.2X?nyՔ>XǠNmIU%CGa`k_2KU]j ~=V^KU֯:tk8Zp{UyJiiKEPfb5 ϸlEY^NC }_#n KJ˳acF:RoNqǯs\UU2ў\VmSZJ͆ 9xdZs:ٵؘw{WW '2k)J2(:dI]I-LP+^So0׬Ӻw\z2Ej"URM32\Bdv]G{kzvWatm 5G˗̿Xi&Nп˩B/ѓZ:իS)Ņ؜SBg{.@-)mWk$'eTL*( hO&c{ӎJnf_U)Z*JDbi;YX´MN-. G83Ge3(S΢V¢"b9~]䦌,BR\wh#<ԉJC+/Fn]O;3{*T8+ 5̅v)nډ6U_ NX]E%̼]u?8Y^L Y!F-֨Q0/([g :Zgiܙ k{ZSb%݂9IG~3FqOAKjs ] JOjo)C ;#&yx7q4W4`3:1q}2h[J-=fN2âD*G5{,q ~0Pv w?n&o ?s 7>դ|!નq3f)t%[*R @+>SpUc[n-VPqSC*gƤ.maswaӿRW/ fJ;C;Po+X߭d7םpZ%S.~vms.\FOxԂ-X(R*^9W9WpC#ȉ:褼VjH X=bV?xIYbub J!Uoƻ3+|M , "c>J^=?Xqr¾>(QAYD}$:}n K.g'Ô RX\ 8&+[3LOW Yz@ȫ w~=xAb߫򽟜#2_ yZ',[GUj#'=Pܰ [AAUFGIyuwCzU~%[BIvS"Ý_jߔwIR3 O(1`r+Qg -AJ_7/]dfj Vߨ ڹ˳@}ϯQ9$Py$Fey]q6ijv҇-/XxX4K:*4lC&j#!_cnjC _f_4ŷl7Yf];.ND ۤJ ɆP-^a-,IӥI%iT{8w >,M3B鴕E# >[Wri65ͼy4\B_6mZ\&]E[Gu?wLd:gUk͏lg̓ݏ<+^[zļpӕ.LPh+#t6~Ro7rfk-vF3.^l7U٦pHNM=:\.ÀWiϞWHKfhSRhfNUlW9[Kxt?OaqSiX vlc!L䱸sx Ө Ã?/F0O-"4n| *`3pή*tXmEK X mzP񍀋"#Х =(QQ>[VZ [rd֚XG yʄ;cM?sR39DU$Tہd r5 7VdD)_SXhCfh<* UHݖv6)ڷD0K}'j~)UxT0ڱUJdb*'/⣧ұ#EX<0;L "2qj;R6t\Dp螪AfD|ĊG5p廬kh4I¯Lhdz_:RI\7"t8( 0cڄ,4e/?3n$1aAs:g~QAe G8$-"ذQnhPmU$j *;s<^ =Xf-`2,$f#e<ʰ hietZd`'ęvFh,8;+c8\3\xN|Άt%q d<ͧSUN 1ZUV ~tB$iϓ!{@*]ENMw5V4%.MJ*3Vww|1t\,ҚYoBo iWV^9HثpuCgոZ4AAF;CV"ɜf; C,K/ǍIaNJ츞fč`b׫aE?d%s^Ύ?Yf! 9c;_?aH|ZjOAmr"['s%4˝O):yќyy@tRy-mw/fmOAI{CIӆN{%[D~Ae||઱[hLz>ZE;sw_h0dtͣTn/M2M/MxS4IG8bC8(p4.1w+ `sDy^x+t> 91SY^I!E&$qL>t'K-T*>3"elgk+ͬ#yalw&D>͓_KOOL^D,;a`,[\9^$3s$B}_yV0 ^tCsXgh97Dx\[\צS!K䑵\2>T*G#92UiF큁oL[Sخp'H$C|&!:QgZjNiWEw!c'x/3q A`3H];3L7 ^E6S=ofobVTK}AZ4.>d?UЭF${8n39 :8a=a3?R>U*{rT/X iiP>B556ƆZ O@&tTV)T`p0>)O[=]L*L~c*ɒKNt G#H; XHUG/}nj$3Ψ"w 3d*BOj_6y^V UM" trXR!)Tu.瑛zH#EN5}`Hx^ S݁ɭ7MB,ętLkk~IMgqUBD՗|>b˦w,B/H!yZ< _,Av "ciO]%V+iPt>sSMfW?hf-; H_!bCF~EWu?7+ٵ-y"Z$%F @P?v6oV+](ԻtL7+=|F칖nvkJj q~?-TmJtZ5$1FydL {|{ E7Jus59JOUQ W}n&  tB) ứZVLi2geȈK(*,ԉk`4xQλ Uo_ *TEi|)p{YAX5Aؗl0 yYpRdףJ%_**[Z8OIѨ3}~]bk=MT^~"6𯐱t$jb]}tEȇEgm[پU<:˵;R}% z{܊(^^kM@H\Aϼ_7>ϰ3j1r!ښ HóCt&ZYyk^.D0BChr]PgGaʱ|^Ae!k@)}4=c$r 5.x /kLF }+xAzL6+{,vD[Ў+^v'BgU##zgu \!q[7X3?;C&-!UI`2q}FnN#kU_j=o/1eH&L_1!})~N7*vu'._eTEvYn ڇF>'h?]`k6Z%Ԋ/?w| SGF-diz6L^=.m Ʌda-QH |@4Úwl ߳Yoʹ 7аa[-HP,_*Vl r1zaABKo l;sԴ's{-PE˻ U% I:O=^%S}VߎUi\b;M@LADz!shhV[(N..P$P3E`%ٟP% ݕv@}>c2M7BŎZ˒:\j': Ļ?Xal 2HϹ kg822ޖ]ka+v-%1NyXrRy2vE.⦔m2+A?aB Yɹ&-dQ&TGO<whgf.:&sՈMF ̺M$D,⭹;> u,ig_v$iر:&jA}vzv1bt* ^P9]Wi&q5;P!cߟ㑰ol_E󖽫KHKLt*,%D}_a<J|; 95څm=/jF˙>͛\PNDO"|sZo/7+⟻d6xS;v¶RBQ4UcH͒-"P~ߵ?NJ Մ% '{3 p+B_ʐzT_s\IRp8Mko!4%|eG|8i:˙Ϫ=+]8K^Kopy7[;~1s->뿷 ĥex4AtL{VNELW% ?=5PӷYFYZf_,Qf23Ht-0b^ѸLFsNY" q]4ixÔPxf[wnӻd0T[54+*GJX1O I[yb_q's%p ?@p9l2"w*[Y{*UQqgf;);Q)vx󞅘BNPAr-&es8ON =UJ̚Bϝ# e@=mkL1a;Gօ#^0RG32 G?sUL߽âU.OhpM Vp0p{g1 uglXHS(I(D_*b8u|o3Ce;?Lw}. =e&Na[^ltdސ&{UoaEHa-uM&D!DCVhSh8<$katA7:LmaNwYcj3Z'"ƇFjwYF8ɹu :0DPʞyhh ]WJH&3+h+JW E϶|-ؤp#!6=~A6,0\\txbv  BAE {RV굻#N1swbrҸb2äPCfґ 0i%,:5O;*nlY27rJ '<+)E \~Yj ?:條BlP:*'iBN5޸#ʏuߡ_6s761gi b*~9dH2HqE>dRc }Y ߴZX;C_Rƍ; XrxA諿B(X 3,Ǐ ewސ1RJE٦xyr?Sܟ]xqS/rk,nUG\KvnݼMXk7ȹJKX|ԻXk;(=%-b5 SW>k+@΀fAU!KC=":QstE=πׂ0'.&O.XDD)"ܫJ YӀw6Q6&\BY c^6V:?U:V*s%(, X{w+Kl{^2*[D.RڙjNw:5x9wPqx,TaKuFiQFNl_#iғGO^}_6/%,Oԛmx̠OQy`sA[zi7hlݽ3:5Cv-t;z[q-$ߐ)=!Ndt.Wv1a=lƼ̗Pؾu711lg7A!֚$ ,M͛Viڒ6n{OsN#:L7 `V4eFFQRϿ25vPnFU^ՙ%[o X*3OsY)*>˃TiF4H-:s2X*3cQHIKPB}@EʱF)O5~G /2I{"q\~yC;f! _T"y[wR26d˔QU|YʬhL%&/u؜l+C|hw,t=s\w0qȋΘ0Ys^2nud15iLR Dz$o. <<:УX4zfz\Nm6C=h"}C@M{| _AxezG< _&+×I|IX^~b4yKz-; ort_`iR-2@x\GKf_) p,lb=Mc}u缼@0h7 6=dBoˆ|W 콻vwLs BX >"aTOΤbp8fZRB)٦& ܮ7H"|[A҉twcst^ |ySP#IgmvlU,:}'(PTw_dvp aV0 vLZi'+^8jWRxxɪ?WE%8k$oOyx~v<>j9x]<L! 3Wq{`~OEB{N 9b;ۣ21 W$^kh6ABKsge\[0S'>(Wj9 (h~+NhNTR΋_[&86P}>6/xBLҵlUښ\ylvKl@a E¾ʯ( _Agɵl/uz%AT D^@cТK 9]s;+Gj-zdxbȱHr!%%_f/ۓe 'vz;>EIguʽ:oy%StRN|&eZvu'V E:q;oipGbF o^8xȹBuAKP΍ؠ{.2MBXy=:J/&-BXH˙dgI71~WP/2#W@MxLP`,?hs,{+ӿBʅkuִ^=S麵u L4pZEN,q`ޯ+fDd Mfe9EHA*3{(Y>Hpv@>obQ.|97: >xEIik}4 *R9c4[=GXfabr z_ I].id="Q6;t[Xo k4kZP&A 3}ga u4NFxy1_ .J,炂kYN.0GOYɝO8'4o0'K7K~y qz8Y+X̗Aۻ9:4.88} heو-gŪ)~q6ax<0'bpg'L9˱_:HP*WcJeGܓQdnΞS`qv:`ED f2{kiiBu:8*ooJ8S;X {Av߽wKɈq!;JfO4爘WeX~6%}^ y ^%"t+;/*OX ХWQiFG@!*Hﴌ _%QPc,<g3tfޑI$fG,=` 1Sn?0z=@p"/̇hH=ƼKeXMq%XkXOWw]{`؅~ wЂp2b΍&]Ru z^q*(ifx2rӻG1FT5cԼL6eӡϬbd7^~4S?̅ 7 wm(ĊG%QP̪EkQDEACRSb60-*5>@Uy/7+1ZC#^3 6IވA?Vզ>a>կ3~$"Ѵ +84Zf@50|X' l(xI}-T-5ڼ-)<:ݛCAw3>tެL<{H؏-iM uxN{?ƺ8? % } qмwb1XrN7\PxO`Y%%{"nŤE5\;-SPl!1C#W׊At)bVch19ȯrӒ qdZRJR[(gT4~&K~D6TWZz,w.㮺*:c)DDHH4;D-'yv{Yg qgle(q .4*/+Npa!2amA٭У!0?Q')4|Q/yɂQ  MoԠ_taإ1_@z A7k]rmZ5ˏ'_ L@ԑ(xsIg^J0kƨ-o,=p O *ژj4Mu$Z\Kuul zi^wC~M ?OcՂ?0k|1$Ckݝ5!oLyʌf?\1!0 ((뙗ѝ8aAzOP njqɬNuٯ<թ1sa~ m>^פ} ùDFə3y}7젰԰;& M0``XtjOU[07K)pj`ѥ l[&=W0q^qx L݂~QFgR\9'{Um$f_a Aϒ[cUFE<V*겮AU4pJ['u@SB 'Absp}|ûا(?O_vnE$)lWy_z@3zk&#dTs[IĂձWsѺtd3&~x8O";?C.fC污cI? ~4F/[׵DT=9A+wѲqT搭cՏrϿH?].r1`9˥,SSԛ}>Zu$p^xI2Z:z^.OuTZ)oU.֎"ڧ T ?dMu'n.>OB`ioq+*5}q;ϼPe?甚ϒC^\cJt|minlm$w| 8> P![I; 9n%g"@AjyᢠGKMm-u uA{a@ߓlIf A[#Fy,qMzN3jtpHDf!Jbہ x,R,8S,&\u]i*cѸk;Ҝe.#g OE%|TTD|ObN6wU7ڜU&AHFwКkY5@)0ʅ9b_H=by[GmWBxKppQA0ǚro?o6[2G f;lD΄6)+uI>R]`e?]N."6Řx'I) Xgk O)Ffgғm)28F1'v5>_N .I$-p~em"b 1SC)NwG"G{>YxܷhzGb6n#G๝f^dc3 b)xUMn[]ĤOʙH^:-}Z&7nUj`KG<2pIZ0^*V/C.!@f*H߳{r#Rf yaTmL9<ݯH3 6u]Ky97vc40PѾ Lm'6e! ~ &ϝ"Vz.GSiTV4٤23Zg eқsH`JQIZcFF *K; #YjˬqWG.kN3˞E`Ȑ(ৄwW4uN6=ݫdS}T׵< Pig5z)T^#,J.L%Y1Y lq[2!c8 d3ݐs~}wGq ePL*U9DOoeuj?@ mb(| 9!0:LZFJ#m+!5"wRL V7d()R|ִkƆEn4gEj\7BUVL9jkejRʱ 4v2"PG22~*kz`]**z*w0.@r'ƊJ4}U/w\;UGJgӨnLR:Qh5erkەRN8 u@U-A^&5//2U#Q$:xNYJ:~L 7 P1a㈥dDg ݣnڦw>O4* ?}z{p5 |wuj]7 }97O Â_ lوɼN. t!l.c3ϥLĴu&a߹wUoˢd]l;-ws`K퐧)AyN>Fd8R\l۸3Wˀfv%Z焬@%M2Ϗc|!lbǒNk \w'Ls&j'?)q`d980tY\'^m8Z>^=pCvnIIhߛڞ<gD*f3fge hkZ'xA ^FYCӹhV]AE6>U#er]Ns?<jiӦPcʈݮM,{(&|v9o(@:YyqVsOycs6C=_Xɹ~<:  Uwk 1EͩKw"(qJy-֎N˚J*ɶw`D s%]+nKg%Lr  lNcVi@5Bny)V_-qHdz ^atI4qtm}>/7`6!.]Kzo%R;uj*5Q*hüZ-|08쥵iMKtWDhKf u*í2.+O~3GqѼ3 %ڥN?p2Uސ9v7?KG8 -ܟ4Bv0LYJQ{R^gۈRjLM a3'֐.Ela=ȶ홮"y#_Q~-G4T;E<:i;":zD#{_Wsz&$-{b ߴߨ=7!HeH=PB K]cd3Ϙ"gun(Ǫoѝk] J" ̏c0<[d 3|^9$[!~,=gN%DX"@+ׄOM2!@v?w"4cxVwMX E#{kY)?ntgoq@<Ą{uCOO!6\Df j؜*qnCn Zb~ Rܓ_U$B:9"7BqX%'6I}FjhH(rd\җz>:P6<*k'%z{oqmvކ0BP,!PSY5'H'ŋuF6hKo%Wm{!!OSu?JG8ڇN[4^N)zվڿпDDԿ8k3azFp ,{媙p8(/BqgQ&5UN$B w#{BSo|V`㘪Vn?/iI*$wGsdJ"9=Nڬ8sp#]aT7Я0kCue%˙U\&:I'7He=i~cơ5e^b ڛOF#+_a%MsKY1tAYdU65èjbr.+uAێQBRln#нc pi>A#!]pѠԇ˴ H.sY/kݶNNQi}f`6K@FE­? qJEli/ppH 9>'.DHy*X 2tqPگv֓!YQQ̏H?&Q;ʾbBҊ=bQLڗ'|Cj6囼o4(a,rg`ţ{lwY285&hV1K< :1(2eSH\9`B.hyELVwJᅫ%p0B,|hő2meȄݠ@ϱl;r<)x:+\jS%;ߧ% !gّe/q^O A}'H؆R`2E#s5>i8>|sbq]d{r s.F-}w8:AoGR#tG:L#g&g ȟXysAMU-Έir0Z/V`Hmq[v":X!44jȐ\ʜyOEL= HN fV3e 0 LƖciـV jALeNΥ}hS8j6>֛dz(t旵;T#JcIټY=,2۩\hy?1iҙȯ+bso_d󲁣7Tƕyrx/շuSokEs\&gʹЇ^w;cW?XmЀ6 5%w;&ZEȦmm6Y.LNe¥! ~Ön8wbi|_Ñnv8 q |Gd rnPУ[t=eSP@M@v[<{:B)fDw H>S:?9D){=h'bRQî(nqGKRS]< a/T jWz90sD{'1ݰqO"ob3QcQPQvL'G'Ěn #3MrE Q݈wW{lʾkg%6Nb>4;eʱϞkmR )i<%}TgGvt6 EDՄM-SYۊYRynC\uNx(Jː1HMm 5V%;1fyQ%|UMbvi-9P[B0clqa噫 Ww)jpcsD1>K(Fy$/Reun  i43OOfY\_0<:BRbqP+ e3R(EM9*C̤e +v!Y[:7rcrSň$2؅PX3K K*Ur}~pSk@Qw PcAYrp q$"i DV۩?D!6A^^arf^Z ~Tlw(4IkUR&{=Lbl5cpW(&Yb-7FX)?*[`2qJo*_[f=Wiyd^dPJ:`8Ǫ )=SJ$s^$f+qZR$/#ʫ#~(c+j qnV-Rd$h nM(RocJ|\.NSf)OugfoB9Fʖ=ԑעb=Aӣθ 2 c <|:^f$)||R+_6VsoU8ؚKhs1J=uI?4#vkm^}KPmook62iQGڹ.(Wƨ/t`; c縬;ctPꦟ(wVuY#B'GU`5x(W7zզe 0&+&;x"ވɷ=Y۶e^Tb%X!r#~n\yLU){8ܙ(d>R̼$ywJ@1-C?n )-g={I+=tv>wA,%Rۦ`*UmZ|KE(83'!2械@ E@W<ASj0'X^7V Ubp1??o--Rn+^^sBż>dȨ.*V@L2˟9B֋\?F GzX)kPZϥsyΠmJOX*\Li7Fxb0PS6Yvάi!,y? dfa \eYj"K˱fAw9wMέ ԿV txs!:+iX's~.}id/q#(X10ܦK=bb+WH_̀?uw ޔ?|Ƴ"F,qBa> ÛbfP3ߏ#.Ɇ5Xg`\>"oY?ʬ_HظSO?, R54ooP<7,M!N A2fڏstJc/r f宠[wSrG~VfM!J$"@Y6$mZ̼w8I'N&oar qS2Y޽XR.IX#K.ΚrŃtZ:43`J #\/^fmgl)0F8ǫUF|Z?4R'ٿvM#.< \2mk93Y:&w옞En'7B߸Y} l^RT;zKu5,%l>.3;=x*f@d4bd9НaWkD͗}UÇEۥMM? 0!1A QR ML/?^ fLFyQ\݁!?LϭRaVEK뎘g}0뙢K_X\*Ud]V'餲@sYm0Ss:kwӢPoȿ7"塄~.0)R_v_:/l=L KZ2rz<{cwԟ;9Gk*tV?o <7⊦Oc<5,v~d]Wt++'`]cmumG{dVy5'K&JD c虌[ oh̍]z!51gZTVxP>Zm-uSB. ,^7AjNu%\NބH=G#~݊Tef" euO},<ةIILv AEXs^ )p3X ʝ{>Jmj1gީ%:h{Qɣ⛮RHxO>aq ߝ\F%L8>7`l;w!WjlV IWq^B kAJȎx⭸3 y:;0*v%[ʤ3Q4=b4=evҏYڥ2(zoM?@ʎN8x2:`A ;%Y\s;cVwW]*BL|XQ#5 1 $5 s(%S BYn`_<4IL*%,)GZ3,oRfzÆ,\6}V-<،XkNHw5?R-\GϏ MTV<` ΅ȄޡKWxIZh h`|oGGte \T? A{sGhP}I0,q}vap.DU+-r7v4Ŗ(V37x~Pѕ2{ka(m.fL幔w/ F{@wH)L-Ԧ3$|:oI$wj1]miS\iQD(_Q~rU^JOG:6XevslyWOx,ޕ2܋zF ?GMC{F+azon)]=zY5]WcL?'Cmb5*k v]r[e*6Uj}{}0q3f.Fu0#nwM׷;mGa94R;2ʻT `S C12|991P fY]s@uqT '9:۴[͑=ufQբ#D6 ˹æRd{8,\Ӿ505Z@PDmȆn 3}ڹ/WG;dgs45vꐗaEH@5@| V Umtw3[)\:G# bΨPǣ &p=1h&*Qrfn^a$fj&}ϙc΍}VD*/ѹqYT<*H<ॠJ^/nv79yJWO܊QoIqu^ 7O(LT1ygQf!o{uiyAvx\ gX$l]"3[ѷ~"eS!)4 U藎EVB}BN7fʳ*ێ-|jo)3uU.t[ӗ4M̽b]}1Ɗ_ iKyC 56g"O|7tWgܟ0TaؒsbU(XCBM bXsi=[EǝMְ#1#jůNpȂY& 3rr-NO( O S#LDcIgGe(pJ{"w@1՝|LvQ!…)b/_S>7[3״Lq7󥷠(. ;LJp<إ$wNivIykZJGT$6I4,Uc6fX5QpϏ5/V鸿#Gn{0tB=sk%#q*GO`܃q}\rvT?4 υvz *M4Tf$ő o4?dPKY  ) [vT}f`L)We#֓L+1Z%5{h*W<PFCc5 ޱ^{ ժV.B g?Ⱥ(ʢrka~k_^/-x_ZUD4}&dp,j;>ߥxm6В)dY[c[w~ԡ L|g_dNבON,L!~Ƌ|xqMm_?ܓVgqU7 ^iW:_2]k<`i.'|wTW|:d]B5k* 8s6ִzy6f4AI'Yr$7YвPg/ |c#=YDTG K@m4^\U01mjp*MRgnHx0 N ®5Kf]{Rpv&-@d*xǛO.=((D]&⡨?wr;wOC5y>נ#!q훸wՆaBqm _[#^nl- =%x! P5xmWp_ aK&* 3M?3xW.Ԃ~\G\VL1ݻLPHa8r=i.3_uzaap Q:a!P|u %v}qGZS7a,ݑ͐)l{Z |&$uIHF"o"$ 7L=ݨy:Ql^}MYXau몮()nˌhXY^UZ`ƈ>e׺++yݳI,WGexV'حT]2aoB_3&Q9ִo\B=)*FMtcILzLRZ[5é۞g\?7UL)?JfOFSTj^INWx@qM*.-岦B@)h Mb`dk6rP\'VNA>lрu1PsA4a-;7}n5"^rsuY;\4}5# [0=+I#u៯iW kvHvW3B/fZ2ǀLLD可L~L*1?t0ND[,1<M]4[X4~WBZ=l,[)eLg8-D Sgr3Fif JaRbI5MVkwhq#m{k͓.8LGea9t{MNU.L/}&s2PUe/\/߆>DvOƫyE*&) >u FlUfըܽByntF30B2Wor*>>u]d&>| -sb+;yՔ8^1OvIt7{V^),Z@^B$X:ص^+4#>;J.rH=^XݡHY= Zo#-ṏgOdț/ejMG( g$!ʴ3sVB8WH`QGN }6=*#^(~q!g8`ϑKv^e |T`WUJA-w\t]hf(OҐLļt#op; ,LLg RX#|sm7[p=¼G<-VcMgB!&%*'oU{AU\ڌRUHꄅκ5AL?3pYGzP揥  DSi|)tc!DKh [~;ʫo18̾&d 7|Rppm['i,Gb?C.JI%c\{*ͨ6s39}&&^[-L=&=Jn.~lqM#.Y;#cNd.P1Wh+g (|ql>S#U*ݔM/w; ج+ &ۍ&4}^*3rR(bVZ'܃wZB']je #Ǝg,AOCqŝAq <`[3 ۂn{6)hF)[# o}1XIs^H /zF O<[ë鉈o1̤4?pu,ލ1H:L;vkg]=* Re CQ%jkpìO4LEB)OyTwZ?5cw/wP͚'E*,$R%M‡M(d "b}D uM,{HSW=cm6%yD;*n rp-AGﲛ/9/U.!MJ-)5m BmA_~]Da(a[rk,QvA55`xf~ԛ-_Ṟߠ)H`RJl u@}Rrߩ[t;^>c``Lص,?kƯzVг ,c} ^dv~5MN rS<.77).C/O%Bɫ* 6IeΟ4]OȱY3ZR. 2eB^Y ]mrf<&,ƅKhǵgFtUOR ]獾bi.W7,Vt--V&;224FUP^o뗠.6O}_]Aiѿ896ڌ G|<0t6/38|T6 ׋+U:h**vuکɁKvQ.eX~բۻ:}O55d$m A1K4ά-X/= y69*P@},[W D20rUʆ8?k7̳~%J_g-ݛv/PH 8!xA_r-,Jf ~it^07.Aiar߸A-17~nuFdV9jnE'FWG"R8cr!wIP+ M,PVU~Mq K.:xO/?KKCYx|٥RɘAvX D[ !s5䗱(H ׌`l7OX"9v\n}_pat"Cg.;D|j+e!Y2ޯ u _V$3 iuH%Z5K<$PyFUصL;\BL64SG*{kT*R*ŸgKߙpTS'oqnۂVpP~?1K#Rs?g۾&*T>+ ۓ9$@fkI41NY(䀭ؑ6@T&(-S{E/YJnXk5kHxgQٵ!o5EM%@zEQZWyL8klx>-!i]M>5RD2U a*6h c&^6{;lE9NBk7zri}G2~ o GM(h fPZYv@3ν~O8 Zbb~<_gۻqY!IlpĖƼaz~h#`imO%VD J\ЎPƿԯRBSſp  _Nq3tRvқ3vLw-MG('^ YpV)qj)L7"40o#Mյ@u$b?S߇ n jOb#Rwy6'}gBs,OR9kxaz~^}(^[qT@PwP=·ZPew1i*΁waWw6'`DHm=k!_=^GUkuG~U8 ZXxM!9 p&(DEK1Ⱥsc?RyF3Nok F+[uu6 59acc׆҅F'g&p=YL1m=Q0@G&u*7tcߋrA&hﮒ+ll$o 2)S#zQ&e킎 $(q.SwDpmkFUzH4?ݜ&ԡ{@% FZ/\g];\NI[4ZZli>R` [i;?HrqvqcusG^d;{TL!o<9娛=3OVv my7snVGʿ;Lm|}SQl ܾ\u~X6¹wK{\c*6#W vd:zsm8F;Fq-v46+} zs U ~xX}?;/Oׅvئ?j=o_`+k=dGebL\$p&VW) o'Y z|m^>HBy&q߂S|vƠ$MHb-Y]HEn?*)),0lZuWVRbPꏉ/XѠi)|^nySF⮨ˇZu? vNaju5s bcg*yQ+=}9KO{k?tr[d 7b" ջWW3]&UGDe@3&eUwuF&n4 qbJ1 G󁘪{eJ33:rPT\q]"mIԟέ|'&U<h+yw|]b)7 !r01V@ukp”fc>G:Ddp9ͪ>󥵿jޝ ͅR L9M]ܸ\ҿ8w%Ml_n(0ݰTR"`;Fl?xrFW5oT>R4tf[ۓl)K' N8dxfK[0HhFK-1%2ȣlSXng1zBկ(GrItK՛-ݔno~rSfǂkۂq'v!;5}ḤYy'D`d EpҦW47<+2^2wTo6y&~SujC)6?oj|Z4 D΃|"|8\NPX@ޞs7=˹oۂᚃ8FYt2f"﹨wD7*Sp5ECi8fQ)26+NZRh/-+nz_5mGF Z4rVoз?CV(L cDޗc4 ȠJ\/cR%oKuƇ.O-6 yaU;q~pyHMo;zkXOTfyo$%"ι~t]YĽ'#L",)[N5LWpݢ9Up(,;GzEYaԺf!D,O#Ìdz”+_uVs[p}9 J_  D• Jɇ֎h)[/hW;1Uj(n4T}nB!kcp]ogߋ%pdgkX: 9nr,hJ7}N-3da5<G=ߪU vHKyf729Xؤ ㌇@,foLy;=;9[-8D D $@qG$2 x+IƆd?S洓e^u~W-YD2y"d1FLf-ٕ-~XRl>45({uIg{q.,w?K+"^ &T\ޜ'9ad%8}юG2*f5;? vɁ^VDm.Z_x:߲Ζ;bh!TTϱ^kìw"BtP!$w[&M(Wbu),V4ej-K'5%^ęO饚hFs 7 d@a'DΒ]a);WSBĢuË4ש*Q:&Z~I*:1Z9mį`GڶBY[~?>*X$G.Q͵`S`$gH|ƽ5TNRe]M<_*ֲV]W-Y$_KC!RE?v` 4J.(w*pָ&04f :&V$iUo8 Jc\ e:~1$H^A(`*4gl')ցSU5-4*w~Lk+HI*Q\`0?K>WoU0g>#sKS~i7j[**u)&JF\O#k),b7uqL̜­m+1pÚ>Mny`2ƒ&+ mjb2J>헃s]ֹpoZ`6oGC9Gh vГGx)4v0`YV܄[x1u:uYok)):(;f&3VNI2UfEnX@ʚkC,T;Q?B1݇,!U-!vb8o~3LِB\!ʲxRi+AIVassfY(vE,B > fݪ۪7s}SZBhQy:AOS*JRphYou@-(w=9 `EYL; NN_L#<՛?JxRrZ2:j)\0o>j8u3 fo1qo"12|e%,\lvFr?*b 6˞ڝ-QWa%T1 =&!>O1;1s>FFX'YjLPQV;,zý߮94<{~]?RoO52lmnO-a yw2ZbMu>ʝ؉i?258'X3X 8YD7UiEފx (ie;~O/R}ld2!,v \;y쩨|\Eݩ=F6}bIh#r~/+@r՚oy _z* %'ֈGr&ɇicTHYpo2. WM)R ,7`~p'jWhMQ:5̑1t21uAxw$Pc|-b/n b]B\%!T{-ý$<0'S"4'ިrV8Nf'Ne&2B{Ҕkr4UZg.\=;yė~+72tqz39_yTnydO<*vM+Tn;w˾SΨS@V5 0xV "9GjYt\»\o_c%itHR\Ֆ!YT$6Fuy ;w$DNň\t[ <8~ڮظ$< ZjkBUL(b:*-#* ʘbBirq"'R~zv̞֬ ڻNJ30 8 +@6`rZp͙4k#/6m6뜱>3PBl6V.)q-ͤ 0dRa/ɟ [92~ (YX'7dt4t;+G0q1MfYS j%!"&uNBLҞ';V`Lo"b̽__=jtnDeR3i`TDF>v6]4s$˧N51mLS=gJ7G;atWoF~$R2Tya%XS於{l_`:l$Wh/ l[OGTV̇sw˻5K7X_(GS v@m D?CcTfFMJKF2s!*Id5E\6}9sRYayq1 *x,-m%sX]C|[ftV U*o n~m!3lGd\+.iQ@Fq^Q=D>$'F>ʃ*SU3nԠK5j#C]`9]dP;rM1 ᭮+b -jP #EsMJUHx[)`LOr{pp ^j20=@ h Xb%0#:;Һhۿ.8SX8װOYLz-?pK u%~[f ?HKu6tWe#@*\tatpF+_ߊPjM{BXi9"[D[_i,ƒPE=0:byAI+9ֆCg[W$R iFyGR&tv+cǧ6q'7iEBi_'jgN,q9+u%/(>T"E. Š͘~ȤUC?M4#3Vc5 "Ga,=!wEI#5١R^{ S`&FL:ZS,СS!t;{.쉋J/q~Zuƺ/6odZIʭTB&/NۅĿvv%V K_DθgMGZނVlA٘jLE&;E9 nY/GU/OoLX%%Z9Rq`C3Zߴ.8?t)k},ϫB<xH4gɪњu\v)Yi^nKj^S%`[Qyj摀 4aW,Ɨ%&BAф7B5F}/$3CtVWE%{-q!sgk9Zά~".&ܩ':\ex]sޖQ(Zqal4oX9/gؔ#@ɯd[^:β#QEFR}A<ՆtxS˃fun̟ݱY-MJ0WFooԖ .k hrK@?gex_K Oɀ="I?}ybJfO\T<3xϸtn*z׀!J)H4jKWfY#339F:g _{O5zH54RN̍X%WAwZb抦[EVAB n@h}'H+,b:ڥ>Np8ysR7AYF1qo11ogCɖOH Gm?>4S 9[cQqOc0dMԕF px%0#M거;݉j̩W2P)H!U:giI0+Je'E?qb (1*=2C={g*O"|(|8=}l= \/>6F]E;p9bVO1 v)Gk35@YF`5368U~TqɂJC}JyUy{h}͍[[k.hWqfs Gq~p1%*q7!})5NNܺ(cp)76U϶,R&6 ouǽb(uubX6 ݃{AL3 b|a| x IzICjඥh$$DxO~Xdo [pa@kDRfSAiߒ)ׯQ2[W*fӜ8t1U)GBF&xOZM~"P}DOAGW2ڜ,!BY&0_s0Yַu>'<|ӄ?Pkȳj ݜ~1YQVd0ʵjdY_ۃJdOOݮCK66ai^R(ˎ܂V~E"I}B0cbN}rBòeN6:ܩ&~ztB6|. -;HQnV.ίqYUłkgͷ~^>aw|pɕkay#Tm1 Zڄ@[!8*/{8ls5>/iA*uadO ¾,vvmqrGX%SkROԐhLޣ-j]o 5s?:U%#kcl| ZfB;DSSja6K_ Y&R6? !AưGʐ>2{lZmazHݴpXWN$(g͑t[itV6j-֗CzlM^w6gxh Y1]v 2+I ,!P|/RX›f4?R0*ӳb0Yf8rLe|vdBYT!k`]dfFi(3CZ><2ܪyߐco*y¢D,M̠*{0r7aSܽ,j=Y>$Yϑn'b%,8@^ppqFM;+U8?y=P0[s KG )3z!^334U51Kg?9d'0u![D)N2;sw|I\9!'x/G=[:XlH{Mrk t?VNyS:B!b{29 hw؎HTL?r[?GeQj*hezW/8ԗa1$$l{.=u#K_R2q5;/%ϭɺQw#V[hrFVߋ 10alMm oY }dGCf D~n%!IkYG]|]-5uQԀ l,A9rs L _ӕ:0in*}D\|f&~R5cUY>QN/`,k_,n7z5o?=ruKʌ]vOHzytWaZvc ̥MVm={u 02hp nBTD(oS{]r͸@w}s|HSOfT}!q5+GÒ'M?XV:Z[b;W9'=6o1Џ8WA e`U b/)eUYe`S~CAFV4]ct@ZL~L$F.wbz KJ_/"y4ZNfۈ)(U'%J\+qȁigK0Q}^ ̦f\k.HrmD+4:nIYy7e5ȹ{6º}~Ա\ 5!~#[j(w?hDU=  pxMp#>Mx;zTwECBtyH=H`tzM?KHˌtJ OFMiUat` xw)ش\1xΊm΃i"L;Jcz츿bv|ЖboX}@#ѳ)A2.U!`Pء5 UC>(I4Ƞ,FA L]pfΟ1.1_Kȁ]iK?:vDo/l&HV6$Qkbʴ#cεGY큊;B1Lx@|2wNO&fEeR3%K6VqIw_+J!;=y7T$G=ec9xYk8TP¼N83_a~m#~6V@w ?xs|9-R=61x)>fs[dL ^39OSP-:RŜ^Tx'VG!_*I2/nPrڽ\.c(`CHNK~MT0hOBM +"NDWhSmZYBx7QISocÐEq(SyV C=)}>M1L:l12T*Dm>6wN $Q<,e^ɢl=s̤"g<)FkKR E+.sFU1#wOD;mM3%j{YdcTt#V"c/ knkK3-س%&u:\+=OYAX-z`E[8 c"q:wmAFƑlD*7/#HQuOkI3'po)K훸 Ғ :A;}innm+@RJ)x0,PI*?tG蚀OAB4կ2n ^~EV0[do(}sgQ0q $g )h1wS9(KXL0/+ Ca0ӵ.ޕiwx?q )z?ؕ2_Gq nAc&r2*H{>sSXÎ[m?,j.4VՆp{Rng5(](ģ6?Lu4,d1124 6u$ A ^]B + IBxUc K"YW͔6} {͆%𭅐gx. ^#._.r9HAE.ڵ!k.ic@&p4ީ^Wk-|mGпBf1D|6f«%=gh[z QʷK> MZS%[_?CjO'u2.ƈHW9X$D?D6êd%Tej(lDF=jӅHvi7SWvgCH[g7[7ӣRSGXQ9TW ,/}|$$lo|oջiWʂ+$?Rye@%o '7퓋20Q؃(?GYY8Kr)IQOMLKx^pXt:?:?XD,Th%M,*VX@74s3Iη1͐(Gl=iwaJaxyǵb9/P%0 lvVϺT/>(ٓCPy=۪c2Z:`'b,./>o1!{mr9<ꢁ{>.f/R])2 ԢG(I+.ep[ l$P{\v]sQUfk'4r#wv6Цih^"dգ$B}L ;S>/9[t׵'(HkI5uS[UOuzYhbˊR=;\v魫dUIwt˨ ḽPPm6*E32ߚsף<+uߺ|[ߐkx,Y<0r ;]^45q4U[7z  < #K2SNBjTsƔ~+T-.rY:Xc ]BbJퟯUt\Fk"ԕL9 Mq 1*M y%D!GˎNᘈa94e&iojR{]7.Jf \V8gN/M"#O̮vIl*{QM29:ʣ6ꦫsF0hbIJJ/ddZ4 jy(&+fOk:S/%Ylb- I I:-6X^imeܵcqXJB#$ xkp<( 't FbN *z,8 c̿SmsͣV~ӂbL df}‹gMÞwn~23f&|Ou{B=U`E';fw6 y,+Mm^#^̜5 ,-5p8w@7lKl3e7fFrFٻNwuEȕ[MJNԍ22|YƈmfΩHE]F񩑦T>׶4kQq )PmLN,CE(Y'xi4܋ YpFDykd-N l]v޾2r,at)!/a/%zT5vf*F`FV(\ӯYD./sDY]/DeӨ4;W\MRf65ټa0% Gڂ꣑ r?r4\jr0: 9/hPĉrE)7F:4 U5nOn#]69fh' Eɽ,ʨN RPْ9KzGNDYg$qX8˥jG#7SD\n[&?wy}q՟1ٺRGZZQQ29 e[RL}6꣣Relh.tqTi>XU2QʀNKvJ!z䚽TȴNbeUcy±8a.a-Ц XJ a"ªvDTEAY?Jҹ[ڨqmbL~ ܢA%_de&?N p~3׈Iif]U#ُSSŚz**'pU{ s!Ucl8ضD,X-꼊jh@S agr}ꗲ̑#~s i>IW! ?#{׹fwPcSP@мJ$}  S6Z|\/ļFdHm.Ttܯzv.w'.1@6d2g5buCj؎4D~eWMeC B]I FD[" $,6\3.bw1IrKR#-@k-\ЧcksY\LL"U㢴(SSy}8tq(ͫ`OiTBlR*~Im6/PEnXHL;dj3]Q ey[r_[l?,LHEل`vPQQnb##~R=J#NypCRB"Kꠧ{$YΦmg#АEPwMxK̽ÐIX|>)/$XFҶ앓(N:r v|BKLhdqE>20brWp5ܦZw6qbg w~>zr*Ō'N%iQ[7g]L:H=çLO֯k:Z|cwtb| ~f@a?QÈũnC+v$Az뺯9Ӕg9ԥdnV }E0E9c>r)z r\+>{

b|:Yw[?<@}>03~(7'f[~tY&F!܃f/0mo7"$#^QiSgsaeŌȯq x 1'חDP >BC9hj(+& ;U6BH4W5p2GLWt*%,g"ub4su5(9^7:,TXЬN0\Z PA^ϒFZJ\q;Dq%A`^ϣY\bf,tHI|s]x0MCM~h>BdXðn <' -3&3=7:REtD|̜_ߗ7FhЙݿQzTf8*+f ߑZFVA=5w&amcOa>X#KٶMvjU Jٝj5c>XE%'E)7,XWgD ZʆId`< |nm(M ֧}A0瓓`+GݍlJk%ҸǷiRVUKܽ`yqqY(XS 朽S+3)f6)5c k/GV݁{[RwE%7}b[zm$O{WDw"-/"/ Lx!iӭ+׵YnPf/m nR>vˤBҮX8KUſ=U<\`9U ?dmnk3ruj ݫ >DǓ|d7y=`QvS5gCMst^Vd|e2 ZTya/6n ~Ya ) 7)I&7(sD{٠Cӕ5CV84 -7mٛ|z#iţ,#{˛?Q, LLWTe, mWuS:4QI>}pJ@^[ rGF|DeTVF痠T6~̜ '_m/h2\ /#kn-%.F8$#  p /owgozDMɢlpT8BΒbuV60FT:p{j#LW#YnvC_088"g嵹&3 Lv6W!e-"#ťˁق ⿊5TSP*nrЏz\|=68#mv ?;\M> Q.7 QI"=]gRo2OwEa:_y(la|Ed-Z4K~ Ӽ.Y7[iiVL 诚u$~|q]KnS[zYvptڗZ8Gcd4)MB<%C~lۥ ŋ -h;qv ⠳\ax @@N:,Oבg㨼W%@AS3چr EA;DM~&dim.qjHw!mt:gCśP!p=r-ǥ'LwqrŷC&S2cΟ7^@1-5 l>9bL4R k+R$a'Klb1J.$D; xu@΁D/-/ᙽǛAT8Db=a"']ֶ򜪖bAi/.RHJOV9t݋.rmyՖi쇵η2{w80ܑ )|DIAJW難EW__j2WMDsnޱĘSf뎸g0KMwuKbhw8fϙ-0!yjSڕacsÈY֪P e&O\]B>s#'}TH9Kb:D10qq'yK2ƕ%MwJ,4]诠P0Lg$ZKhn&䋻2!94XǦ gJ^k0i]5@p,Y6gVKp 8m M8 QwwK]Ms M~jh`26)m8# I4۴.Rt+ؚ̗P}yQ .ʔ59,A؋2)Bce?29Qx +e_ MBnjܞ޾Ga)%c˂٭x|jYߦ:f{ذh1I2ŝ)'a%7wP]>0  ] 4 o4n¬Y-kgsT[6NܓVYPWΌJ sd>Co Țk3{7*& a\b,& |dON`:50>~jb];iU wk\_ŶǾ@ I1Ki>!B1#|!ă\ /ˬ)h@ γ,CYlKgiZ-NB+<&,2z1wFɕJB#(4.gč].0<%Pb[ iq&w="qt܁!6%ׂ9& GB&Y3/bJ5iǕT55dkO[laPԽy$9r<[E3qQWl斁~tSGNxԥ$gMr% cP}/NI@bu=X2ݿkEVX1CIFašF9%U4"Me@([d#z#ĚWH7`Zb y `d0,#GtKbK -+dh\bv>MB:ZS,g&gcbݣox\ {d[)#}da|J $|S,|㑐(nV5B[vl,qT^$dk2J`Tzz&NeY64< AmР2 J;F'rDV* |=r$E^ynuu+npy!DӨr&e #ʡ;B4J1[/#ȡv%tه8uB9d'qoxH׳}.x`45^[= 60Mc `M_L-~:Q0a扰A$h"n*x+~?:%Ȥ~f8 Oa=ݔ1#W~O% Oޠ[1O@Rx[/zYDk1PPejɜXrE6U\JyS̺aojqi&{M Xt.uNUPG@q4_Mt}*O7oZ߱hwe)FԢˆkdրӄ?r&Do}`w?VL2Ԯ@>eSk G.u3 D&iRȣ{ W x( i\73&roˎGP|~VC֬YPDXL/SIM5ǧ^%Ďi b($ee RRrbV FwB0!dwGb?N)ށ:3'xkZ6)&NS@ ;KK,ECm* ^B#2(+ٯ`6 =>a-fD;[,N*Eԫ(yگxgh_'E6C#ɀ6A%XIF␿M|,w,0dva|9/ReGI >h<`Ԗ-4LK|IN1~&cz [f:9953ڇhCI6lK=xlXsi-:{=LIf{x:R$:M=/@E}{a Kb p4*!٘[{\wnq !NMr2Cw&V-F}pe3-W죁& [dTxCoxgw mRuan6y妦27f܎K0įS)a䥮V;\̫s7SU]dp7rjLJcac/s#mdɈc/9A(`tWلfҶbe hvWӚ`0Q2Ǎz37 4Z{#l@S^> R:mo)$G>T iH R73g.p6LϸV{ 5C9=g?NHSBCU7diߺ5[(6uC/LXr 1fH*C0A>.Icgܖ}:NSd; ~O_F4AU 40-B[9B56i S+EJUDW7MTat s9%|<Ц~58n;pa&11 cIB0J<ٚm0\S:Z5F"_RG6YbzOWp>j]0-FZ7Kc2ZUId1nT,0(v c+zΐg_=SVGPPr +GJlJ[Tzgm 2L#@|%h'Rc=BdywTbY?*9ҎV0rO! !%Ibc#۵Μ[@IVRD^!_-_U潘|bw)kYeÓĹ&jegJ[y.Σt|S7V2΀Q=|탾);<h>/@",kdqiSɻ4K &m>BIiײs~4 և7 i{( bzcĦ6)1kQ[FTJTj)u[m~=y~a-uXEϖb윶=Z$sJ&,+ҁa3 _rd2:(dvcZ|A1 aQj\K4 d@F=`fhi=OZb/oU7rwHerpް[lŋ{j83,IM 7l ܏E:5y`(*Nv},]C]b83$g+[STZ80ڒIJH}Qͻ6ٕ0G<$[s2t~ Kw)wѰX# >+|TF'}3L"ЕO%e8J ` ՑOʙe*kψ,rm!luQ'#ֿB_V (@.8:f8jt.=s;\|F>pM:TA;5s{1]ftr#pci0]vֻE>JwD (b{3 g>Sh٩GI8*`gz |Wd xO7 ;45;%8ڬO7%gleϣAfoRaQrtrBZ7ز=h،w<$Gi aJ˻Kdw¥yuր[EY%#oq| 38wjw6#44/uXЌ;jYMWϵXӛ090pf9\?6f}C=Bg ŗŕ]|p;p1pbF(K3DYz#hPI53&$Nc&V6X5BUڳ"GxPKx68MdJ+Dhïk;zܥqtMA3CT"J [H(lmT34~\sdޔ?ȉԙjCU۴# MY2 AV1iRTd&ruuwI Nz(lw f e=;#2h uL9CptAGORCA=lۆpvͶ[lv^ N9m1 L9ܯY_M۶%\,DrñSV7XSd6:Z؞J=-r8?+ɯE$lgcv)ڦ. ؼLZR܉[v,N]a> ^* fuMLѴpIiK%OVaU讜z5UҝT[ԕ()]?dž1҅hA'!& z9SSd6թ+:1v㮸t8Z?hEPb0iCr/j:C޲첻ږ -W|&\Vncr6Րbx))Z\c]jǩ?Wn'W6d/()>P d+_ s/nB)Joo/s3,%:,g 쫮إjFX& _m>1Zpg5ms;C4 rA{2u5ZP]-PZYR lGB.,p}#\Oìw*`]QaklP`#7c=h(fi)|(.Xܮ?VM[D#:VV/#UR@֭.@{*:r'#ZY1{tQoyb!_\u6Tě{ClJ,*03'{.AR9,z X@"ƒs=uwE!?T7 A : K0[I ʐw- {!ᙗ̒ap9꼹Z)=i㚑I>9DGգz[?**u1.rΠ %D[2V$q8{*(u nRŠ!cxIWrmKC`̤}xNT}۝\m* VOW`W '<>k%A,_3e?Pۇl [7x5{ÿu1SU% Wqi22hhޏ5q Sv=>4!VyO7"9H2k3&;Wo~X j_a1 ^.`}r i{2iJ׿"E`m !#L W94nQػs8QuS~S=8\k-񝼖a͗dрSY "@i"/&a\\mX)8P):wwʢد:RRv{ g{uGNfpcZw&9+۱_ΓL$$SÄFR4h?:сR\r@ c:>@WO~A8v#߯ؗQ[7F,~>b^() :ˉڼ`ׄVx'yu[o3d%|N"Uq^}OΟiڹ [LVZħ9)\|w2Ųk-+g eɩQWwH nO;x&=س%3!3~8Wֽb]Յ< m!BC3Kڳ61v ?%;4THhMKғA=orf/ѽjJqw\Ёcbm>g8S;9@QWrPMI\U;;u\jN018 lym(]^˧Uj6S`<  GB[y?s8%"Z׿Eݧ;iH+5ߜ^{}P'8`f iFNUCX4&듙:o?M豁IAK3{UgxY/?Dn[}vLbj, ,f1U4?.D$ggLۻ'qm-(Zڙ:p%-Y-^~y&g1DboK.-~?^U}lձ>c4?bc4tʂ[bis ~T6m 2`pd64|2}À3hQH>Bܸѵ>㎄$L3Nv|[6^T'DEMD A_ ʬSi>{A 3,r謗YRb(gl)@qwl&et*\\A=EMgEw\#\.?8*\!HlǯUFrerin"@wXz2c*Ը*W8[?ųRYH|\=W&p$9N]lL8r.$=6Sc=_+Ψwͨ7jY܍K+\voS='Zl_HySSF.l8嫌s$믎㫓-4|#LZjeV5#r;d#h{\?}"5uG/:$zCmکí?Y,=x/X%ֽU8z ܿxaO|~S'X6wnvF{Bl TRwq(#u!89 +v_!^8*;*957]~e+f6jwIsX:u(~nh|XSwϳG=M^ wMURt 1Dt;^wTNzD$,RGcMf 1#d9g07 ;b*aTꎧ Zxsn"&<J$%trf=o wijs߲cookxOKbLԴԼճM;oF6ȣM۞ b>qK[@夓fJwl8MMɄd6$UT蒗(o)&:n+UOw˗/pDzV7/L𢺐lJ̊~'\A$|9.9wBk {) ǯ1t? ̶~f\Kw9ZwNA:Z9dL!Hv  `x!!^Xs[)kM?3A[{T̃M|d%^¹i^,κ> U|FV7ϫU|ku[(0E0'ƹ2!ul^<"P+AKˁFE2MjyZQ0jѿNzF̂Rxw epV<]?VoU{!)^ڃoz (UV먐eHf !X!ϸwH5YduIXĉgtd/zZE LhȬd!^@B0@]ª8:vaq2?qҽ!g+S6.5jִ6f-6UhZddo>CSSqъaoE"TdOf|}7ZP<޿f Z4w-2AMãK!mڙdfq4KoiQ N[Jcsn<5.ݔfg19l|[&1G3x [GKN[Fx `5(:ILĘná{#Z2ҀI7^S2 eLgD`}j7@nKaMs@Y8I?o+7fn{y#%OOc6!V߉Baʿoklqz@0o OZYx2Hk}?2 @)1]~oSp%w[K5'aYw{x70tגg3oLy K?k HZ=1 B 51뒡BO4)˥=Q9acysԴg}Lh|-ɪ辁(1!VEpHz4z H\ِ b^c T4"'ΰ"''ܰD̛o}`i=K+e[M1ey;Q$FOjbyWoYB{@VbJP i&U%0{Q^-z{"v2Wokꦤ eb d)/+>Gi vȊrހ?D k+_!=!=vC9}_| } U0y'#dI%wvoۡ(.6.U%+L&8`A{y:w}hѣk\@d<VrA8_,/' JCoLfX #1UJj`X%L#G ϱqwTMֆ-+|Db9 b#)Fjo0D^[m$}Vͻ* LlM[#țST: PW_*-_C29Hjv"Kx^2SCKs}YO!UQz4YS.^pľuܻ+LS( d]UuĊ JbTه!}ڬCQNY=M7 zno|(TA< ut"2`&[͊Wh伐 17ΓT:0?x!X# 3[ub;><ͫݹ]= )_1ȥ(՚*RR1@ZVSCk;cFl6Xy-|z8O)r.+񽼜-Ƨ10[ ~?x/t=1p9̼ ^2׈ q/I {&B}&bv 4wpӤI,_>~/ڿrG3~Ȳb+x5Yb:y+>n GDz{H ưDw8c7Rģ ~h%'\@f?|5G:noe ;fx^'{OH b6<eZzZs--twi-]5_|y+VH*\NBcU6~Qt9H\ps7ض|6'hz`myFϺ\j;`#) 7mkOmD$y ?{?zE<38c^8(/zugK`!X`n4;G6 d/%^ϝLL ׍5Fnuvi=^w'tԯ\Poi۶UmW2u,=+,yOZkBv:<7WsDM'nSp.iZᙞӰie3LW>[,)%A^mP([TAؑjVE5muƙ^ݳ (q4=^id7`Ѹ#x]E]_FHCTE'9 rz2NVޱW`7,DYiug(%s5.d ZV{U8Н`փ 9_r`Q{kmkJ"*w뀱̉2GJ0@"vn1 źҚlOA~hm?};'mrbH.1 #]@hHFje JsC`96}%V%XގXyA S-iBt#˼Vs!V=8Q51tW6[(;z 6<^0ϛ:MqaB1{ c~J_.} Gvrt$L xsחi*\]KGQ5/zǩx[G*I3Na qVȁ/MjXxv_mF-3R^LŭTuŃx|Mn0Lλcc$RcTOhWxllXNi uA%wl/;@U_*<~ƫhsҳJxr QY}Z6.q*-$-`¯r~E}-%}%86U6QmO0!s Z(n[0 >$h)DaN HWgP2ǴK#vkѰQUʿ]3N\c$r⧰mrjFp$OLOXOٯ7 nDir731Ez!h&>b|݇dx0g-#suWS>7uzf2i>I#xWHʞ[Ha2ͺ*=%?Æu1 SCi1"PKQ2Uh3ڀM.y:{k +& bH ^$7=m9X< >U*:fNYkP܄uDd(QU < F;*s.,P'Dʷڸ thgoD)g欑{%.?iR,jJȁ:gԗ^@:0v8]SQhGN'730"%֭%уOx;5Lɇd4!7B2_}8eSNY}/?O&I⍩b ϾT1Z(vUM\,](*Q3CHu%@1P2qR{ɳ=q;D[ ,:Vߢq06LbF$?+x~ 4N ;}S0%E\n(x[DȋXiL<{+ l҉6L329sF^nHuG#Ӥ? ۸tȑVzTǷŴهsjsdal%x5 YQ ;B/$xYU]Z%.3vi{דZT|]+.nv3?ꭺYqȒ;⢠fcIaױЋ2g`xϤ+QN8?aut;h1wݕar&0x\{Dӥ:VdJP<&u~H{]\mݪQNn}ZM4y;דMbƇ ùOo4Qx9݃gTt≹pfv=/\k wahAw":R6$gUKc{}a*{{xnXoՊkbn`uab v}}rwJQNqC1>MP=Wmz=2ZHQ$| /F4^ClW2[(. |F F&LR`f=7c/:ϴ˵;ĸEtl: O9Vymw@źs{O|acêIZQ X= ]2n>].k-!?4p#c|0ccГY|G;w%fdz:<Fvo{V 0%V6o;ݧ? 2+1oGD伻X#ҭw%{3)՗_| 1Ft8JlG qDnE0]2AEl%(]n^sKi۟Jlow(Tqµ6tDi$>UD ={W!( ?M~m&}pA0nx{B9mfy@f{`e]u2"1GOEVm}>(!nIwS\ߢĦAYxƸ9oOgz(5:>K ݜ7&Z\q FD9=U{{VG*lyA_&ed!yl5!K)GCAOlyrw)eAg<ԗ}'ֵ =AQPC SOfTGrx_N#-( m`9@[ArqFd6mc LGkev#!BԲi/áf_'_ڏVWi:Pah0eS$•q駚5;${pY&z߿P*-j.-x~ 24l?6=͔v43 qQ2Dzxw,N-oWa*_qA%X8}.jk;%7n>"+>{""g(Č/~*5"St)t}rȝjމfZ|Չ<$F$c%j׹ZEfw',?7^F|&g%@VoQ˥O tY?$5{tMVϜՈj/sV{P Yh*)ΜmZ/P݀RԿ=ŖeI,dvx||m+UZL7.![#гokR& !D2!S2ifQ.8YDAV|y.sq_ {Gub6^:)ʼLh4~7IƜ]C|~}PXK[1|>:9^Oi@O kEqh޻E[%3Z̙_F#|5Yp+u=1N: סh~M@zĭUXyl]f\$^^"<-*@ :DQa,Ai"q C׎.L?m{VvaPj!r um;A]&,♡_6z{k\c5@➊ {d|{7Ȉ_#."ɃٮRtU =ؖHpMmj[}!Wժ}!ς>SlTwB^T<_SetJTe3&G7]Dj_gthCUKT:"zH'FZ),W\.V-φ6 ~PG3x/}ѺB$JEBGL8+ eby䊲>'xK aǹ4 1sT'a7lD'ZSl0?!tCحU閥-%n@7$]%Oa0_0#xP0o<,ަ?|Aaix+N;TrU<%s6壗ܯygΤѤw[?/Ͼ^[L7S^[ < P,< ?D<23zG:fDgҦrq 4jsJB6QpϊPdݸOrOw:U^ގhCdHv\)zXNYǗnvM6|W&J%!|Uy J&q,9#3D|WiCG3K(+f6ͯ")'tԎ3O=a@l[ aTC*/ju H.W]1|KPEXENjzkx(u0=Oyǘ bv|)/ "}hrXw\7j8g˭,wc$#k8BhP4%M)Þ6],k@Km\_A8)[8aV`*݅dcEy\2BP/a\D`ҝBRo=Y{@+&R;^Zpf* ^"D{?$,m`"~e]C^LܻߑA{< J& +sS+Uܹ;[-`?Ra׹2ߞi, hQ^\o_]憊t\;pY.LsrSļn$TaK_ x/߫͗_$u?ةޤX/޳5lZJoI*Zkͫ~FV%`\CDXnDDZkKaNy!cy04OS6,z#T)@8!=sA;?-T;d)\W%xOrtIs@mr G,8 典@,bǼgPecQA z0N*|b9sz]hWnxĥ l[&o7G~X9\ck{Ӊ-A9D46 q'J~wSVכ~xİ$U+MN32Ao)#;&O84~FK9,xOa vt9o?4XYS1K PɿJj:zkKnT=h1.,wG;bvSa=Ct9j]/̦I, .6:fwQ]"}K 䧒KeF PQ k;mq&ȹ { U9&&J9Pq uL9<طh"Ց-ۙ nisN3Xpc,%/u7x=AY+OE|%Пuv\C޵ `D^ϻbo00]V~$i5urh*EI2pss|}Md8diF-?_3RcQCc\a2hXV!yEkTPGUKSe0ƺh=rTnE:#l>pyU)tE{Ҽ\ܜ7!K>;I I2J=vmv ?܋_SjW<+|Gr c!%`B. &؀cSP7G0Fw)*1B%FwR5E?{=uc 9UuМ_yep˩ :Nt]&NUC@sL-Y2˾Mjzn8Zψ %37jȎ.Mf6IuRؒfVֻ0@v|opAUtRQI,iɡX̢C0v8xO9*Í53)K+Tⳙ~+&5/KLZwNvXKHw󘀷=5mf@#8# ˌ8bI3#%Yߣ/)#r8]0-ktfzjR+rzo,]-7\qPGZ@ԈBDž-riSX>q(Ffil=ηfOAm'l{|]u]jQ \TD>9d;טqd|n(/=pO4ViPɰNT4¸:d'4/^OX#*?OZ5߰<}w+E Ck U]h+'M~rOjbs;(l g欈9Aayyn^!r?NP/V\ḂwSߡ\4嫑 LޒJjĵ|f^+=.^cz|1QUR^`nr6[?@ATCIlΟ@ em+?m1ִ9 kr! i#j*^iŜVYl ~ Fѹ?.gh% ^ܱ쯑pJAM3Jׄ@nncNџcjӾRoj[()A{21jjs'aT;f5|h#B\P_pɼchNVq^M{/lsz|5DԃNRtşſ[z >E8wޑ+.Ew$M ݲbNUav؜,>t( eҍ@߻||++q1R[&;-@6YYh2BߦlmQ?怤)vV˚#)_d(Z"pJ:)ގsBv^g//A*( =pSB1(lh:b.ɂ:P :i"z P[|:޵\] ,uvxf`G3j-\v-ЇQ%xP^iMDn Ħr)Vy8VV6 Vbb,k?|p}^d&yLa7?'ړ*@Xጺ M*G[Gp CYنl('/n֕Nݬ-g6U*qA&JJ/X]' `jT̈snIm6Jc1G̫ҽJY^XN\KT uSєb 2OUb8]/#v*̖$Z8Yvu.Nc -L>^RzDVϜyoߦBBު?Dtq rzR-eH(ds 3|㟼6{@Ae"C7}"w'LoؖXXЂ폻 zفGr`y4U|ŞX],2?~RRiepY2 fkBpHTo7lWyu]xVC>Vxꉶx!0h<+Kh&=)ן>) .7IF%tEӹWX,ȍ`;3 r8˜tOw{-GGjHV (4dn1֟gFhh[,|c6n㪓N.XrQގS/?Zp=pyn~Yހ4oΡ/Cj6_tbZYqgܭ43JmGܸM{A-dR$J kfR=j+IL+ΠBxNw\*W=bך LZGPFfdr/oXe%5 ;_[ b\P /!!G3FC7 W-3ӈ qbW.R*NwrƋn "/ʿ:QTgԥbEDkD1#ӹht}U>%_1s?0g Wxo Uuڃl *l1ݤ93!8"ob@*7a}VS0,b4t6eIR@8u}S* yd(`Ѩ)EĒP} %ߜ52mS_O '{cs<%~JGvfJ[=NJ$qxK Y 69j1;E}76 Nh(KҷMn]qz-Q"#囩qQlC2R e*%XB6'GgG-Nb<bo&KKHqdב{.֭oN 8iQ"碉 8K ;LLn`b,~l] mW38p^>a_*ƒyχe"vِkV 2ƞ^Ich[iS' J,j<׮puK SüJY 9ENmꔥ*@d]URJ٣/.:+U}U: iO^ĺ9ᭂ940v]KA|MT06$dI_j?c`ӐECZJ!DKl⢂vn@$7\8|[0˭#X\@>޸fwP>{V ]Lh dSbk!pW4]Q݉pDqE-(5;):.#rLZ+ >нD 1XW +l K, s8y}ÌQ/Tiokjé.&eEn8'-徭|z#}TӂPr3Dv>oN28)AhAvah;fJL|yRy<̼CR W^йc)^ tXUK+(ͮ#9JX"vDnP~ff2<.~ 4Q=}VnBG[ꔘA&N-*9PⅩdܢDy9+ CQ#:q|H%e#' &~xydF/BЅSy/eȁy͸Fx QBB)ơ_M42^@@óov (dh Hu:ޘ|*`b<[6k1,~x#zzZf,!^_9mЎI:RӍ]2.]#zrobWMQV%X{y.SgDzv*zb6ANo!_#(")IUZm=nʅ{\-W>r7v%NYW^t*e+8'9wPDđUlDAӪsҵŭE Pj! ~ C`K9wo}{_Y=?XE؏u+>k|µ .9CLiK#\crءj[Yk5E/YeݒU f8K hc_ʍY^RSI;̽fWvb!cU #SRjbn7cI*z]u#SnE͉и ~{:xE!dEPƅ J~ؒu2VulS&Uv,mY5XyXPD=?Qgg {xTn]Š(s 1g*ZY"r|0o, 3zUJr%_._/V&ۿv P:/:؃poNE͏7p QNZ~A|>+.?Pu6K[i1SχYR;qK6)c6[pW Ud=lRUK { w}_&d9TP :7 $\ XIIϾaqeDǺzR+Y֋s-4c؈Bߖ )lZ؞C;xs;~s40aߵSb?9/L7xʈEYM N|C*+]127=97ʫpx:Rp2@4y3GWSPn4P[֪}U PET KwkY8sj<sutmZ5nRa2I{iYzzz'aݿ Gӯhq ,[VsIp("sCAg=b2UsM!>0-9VfƏ3z &&FTn_d ,9GBѾ Mb/Q2mG)&7L+RNz55G|(:sѐ`9=ti6`5F,z*NIZx:@h"U$2tݕzCcVs?M'$7in)BGryLXDͯj7x fC9;V] $T@Lc堍F|o%>:so.?<=2(iՉJk]\Ȯ ӧ<%Ea%[]YRff%' [525 m|XVawMLrH\ûnZrJ܅,7cF&g/_sǞvlY&nl>[;q3EBW#Nq8;Ad{$f<1a-=C<80f֓/+vyhFv/YT3KlOn_詈0W̓,W"kiu5.D#SA98dr=1{wNX8 ;g~?@ó{.엍t:Ɏ/b\+riDˢ-N x1PFzNZi\^6z$Fu^b6KRڟIJq2w+gHB|!OvATJ6fe3Y ΃sE3S`_'hiz>'h[3i-G2$&ȐUb~[\\9o#=?@Le22)}rjf%Jro5;~zxB$}] GÚ;*#^)]$Ҷq oG,wbj304#\lgpa3ԨHŇ}nmnN2)Tdwф媗>xw;9aQ( hK\s4/6AUMkYn[$ V@9+e/9SسGvI:jly_QE* 7ulˆ*=g?,:@ppg4P6O??0h(DGe'ù Q:(W旚9L mEnJ&z#hgˇS++5l.SY,dj e25\&Vs")(ذי KVO+ήԏeC\f*r#zsuQCC`dnC^:MFWce_h ǼNR~%$i]r(&֙ >1(* t9S!ʱɮh_7{~vC 6+mV2$45ԛ>z+M򝽅7w?Ѥ9_>yWIK-5W `5lvtK&wmSZ̞H(gF٠32؞u߹cd8*=H(f}S,iSj8J1L"k-sqa*ey7 ^c#mm%,PzˮǭG|47&iU[XIYPCR2[E;kKDl5:OPMg9N*zYz p>KwB*`Mғ a>EAMu?0eGM4NUmˏrKOFIh%TKe+!|MQ!{Y͔KSkT3x,-aKWmT KRYxNض": ;$- seL }lek+.^#]ބt?Ե3YN̸%f0gJ"p218 #RP3;j*kUgϠ`$|u,@.pz njC٨>.?˹eDYL֍f*KvxPP tO)2B}3AoUxa=b#o8:5Yci՛g#y:%#!y )) 4@Y(,L{<%(Z|b$atoi9~CZͥ[Nƍ`dwݠ?$enPiPϐ搑ϡ"FD|R9a.誒5pjNTk lzҬbz;\qo+~bvO}FK$b?;*:vԛN&`Ψ_3o/dD'Yolbw70CU6.LP;V$BM!Wkl!r)˲y\x(|P(A_>QCI݀ J"\ }b(t-4I5p-U }V,x&v)rS)SL s_ &6l &"#-rאlgdI|IǘqWEM_ f{ _{bCZFC JdAO!2/hwZ 8np8( ol;O8e?u9xY;ؒDXg?M칳O(-=MJ"jN\wHJCV6ts/'0|FE Hk0vb& O oX @# )E;0`H))k3.e ◲=ֲ`>;J 4#%7߈|͗uaxNؐBU=fo.uo|/( %Q_+'i\t'7<>ɶ3m,YܕJ'̿=#k l-KkYcRmlJcY{0l)ŇrߠmrnCK]}D-D=u"?f:;z/Z%F.v Wv)Xzb752T*gIamZH%fh5fQ{R=ǒ B,_S Z8)S3b@\+,E/k6@^f)wt.| VE4CY]x6K6ٚMn2=\TWyMppŤ_ikl|nwUpX)F<{O MIB7ͦm;=dBҥ>a&)<se[*EyS1v^9FdՕ|~mE/AAE46kݣvlYEz 6Сw.W#uZUQ  %E{̤ǖxKCp;-f政vBhY9ey~(拱&#~ +AH:v>AhJi*6_2h">}ԁ&9r9go|9wgpF.o/ذ͸nT`f˾X*ȋ_R2+1?b,HgQ3,Kv,.N@jBM6l@#ЍV'+^eն#Lӡu4|a} &=wj?` gYoUW}#e(dSTQ+gqл4ǵw~ȣ.׍*k"''6Kz&ZtQ[s˿a:![W9"2{b{6;0=jJ8zI:jLY\hP2AwP#%ìb(.CZGۥɟ#J7̌ϖrWKNN&鲕j8y02>X=ʮ_wע$^=T?6Uz׎z<Ӡ[ĺלR=׽@_y!&E>Rox_4(H;O3eKw9bk# gL{X5yPJu|vfJj8>]޶^]ѩSVgysդF7^~l5 a8t/^6S*ٙrKn|phd!~^4ô MHZD|NF ##c(CMm: ϒ/ҡԴQFS((tO>'i0P2j k}A+H$w >E܂O[/eA~qjGR>O7*P[վB,$u3O2Пug@~aF9@I Bw2X[@^ע/r]39vs"IGr G+>I1B#@ĥ!.r]pz[ɖ}/*xAdyNi큨1ƕSUG_ھ5zJ?c%qfIb+dp7(P$xSl ,Y#2h} -Қ9NVcyPFXgk 6t4knAԁ$wKb[F8#tiTtuJB θO;tx&;ߚ4Uv Wtz>淉)lKOSAN9׶pX9/Qc4:Z2&9s>C޾Cr`ꕺE)\(1t.Ґܝ0x=m3 o)8k!/~`{} 7Ӹu$hQz; |C&-)[񑾚qw륏IbcďڴmZ<抌OH@@Ѱ]6H3f(Aݴ=p޲3 ^N;S&SxALѩ~3B&J-$?XWcD`ʑQƵ34zʂSS#MD'[\jFލpn/45h%0u(z8=(cmldB?׫idajanУ$ڽ5BJ1:m=2'o߁%[%oԙ6j~Î+{G79Z]XZ u"nNDѾclяZH40ǣsc("/%CߝB;Ex}IA䉰= ,}7i#TYh4˰!9Y}Ɵ80Qɿ8$D=`s ךFw {ĿkRrE!497%ߩہ-?55԰i#sOʟ58-I6Teǎ?P!wy*"g@YmFaI{ZzfM|[*>v)[6t;4Q.,x9?R2u\YqɊGߓ.ՃD$9\A}J0u͇{mJiD'ѾGZc%0o9W0>(Y*3c`!P k ]9@u yE~CwJsCll.(sQR\ *NHx%Fnt!mxY~ixw+@ wu2_/_-|U;P1 F"GTٻeJܱ붅i+a=`d"?vu0ivoc,oM6`l-(hzZc+SݝW1z[) Rw2\v[<5ӄZF7K'QΥmnJEe 9ov>o^jj ߵNɇdTQ]*kmܙ_习QtU ]4!nZ"%\ eC3oZb" >kpo,μXCB ѻtiT%ً1FLJ'ikOʂ,9sci 6['z&ծ&woh'\m)hpͧ#ӪSѿLs^-9ëlx y2[GnHi +tBtd%i{ lN)./3jeAm\g. Y=EZXmK9cN@"i Gw~.21E'׮z':R|jGrt-gׄ.0[ |q6~gL}q9#Ǹ-mCE_ B gkdmm -xGQ_)NF8VʭχxilohGdumӳ>Rv7RWuJ#j4 l3#%7vWѨ=cƹ7SBVwی>6ew.82Hm1?DXFv5/I@`3[3Jg 0 Pl+|ƍ]_)+\G|<$l楋]fJc#=SzLB6lCnW|Z%H=[k͔=q>Єs2ÃbML poOp\Ϥxu(j,Dd7/:bbf͓lwČ ŝF؏ΞK'lڢ3%vD5KE ؟|s˵HQPt:= :-ʮoԢc; % t. ujKYCl0Fȸ`x Oom#hc+$.&>$efm?8ԟt܈jr|Wכ5#dx`_^`VFuRk^9N.dxZLZ[M2_cn0_rcq U2uRG*-Q w|I/4KH%}M=(=-bQ/.|Dv;Wo/ kʮ7P ,|TZbwe$ǒWǃQ_*% S{(6.h8P2%м^7)j_4h {d"A(n!yR) j=F,Y+cZpGQ_+BVP Z59UCX]RTPEdzAScdT0\mxef)EL}"9W7/JeNF`+jD3RKh+g1rFo]ʬh*oI jysr2a|9 ^|Nsh/ի5o@}KE5qwm|EL0ĩk̻W`x%[Q%|3'VrQrHM\@[\_ٱ lʹsJ'5Wk !eM\L@ o i˸ R1[8"3!ef m0Zf]nPe*cCP i TЇ1}q*FH!F47-YbʆQ7*q;P!Ũ-Km ?BŨpVRiPfb;3-9.RUĴ 4W?0xiF$yA(@'[+̎+0 &+w&PjeHfVᣚ`Ks[5 2]{K ug1F]) [OodR)VS{6^c]ܭY(=@4Vn%QQ;6Bpu|y hEnTg@05Pc2.*ǦCT i7Eh.za%ʙDuVKWDpJJ,J`1|Fؔ0bjtr`ҡdvpV>Z ܨE/Y50ڗ,Skc*3P `\VQG#%uaZJe2ְ<f0r919 )epBxbgG(Z8 gcȻp،7MeQbfEd5fmVcΈ]˩-1B጖N!;Ҡ{xm&wjcu A>UZ}h_̡ U0DN2%[hƄlm䨓j8?OB=C4xN҆m,0 y9V2ʬ;4u%,);+b]aK*`4Q‘PcW+X$ݚAs@`qyԢ,V\@)B3 X;hPd9RNe7UyK,~#_K B"̥nL "Oe&]*`uv?ylI@ec K:*C(Fq "`AFb{?]H[+ԇ=Gxq~Ik1h@Ǥeχ !aCxIr8_%Al0mi,Y8n#8%v*KQ- &_(픭WWʪi(Ӄ MƈEݾXFi"x ;bƦv[f2PҏFUܱFb \X_aɂIj8h=֑=d5S@$",Wlh|3N= 1S.h.1;x85z#A|Űʀ!(r6@`^8[`"f8ғ9g1Mx]@00nF0l1LB19VKPfݫq*6SqK>;8} UpÆdr&VqqED*{Ծ',"mQV^ޠ8w(Rc9Hf;^&\ʨ#.N/p9kR..7pqq0ca0dݽ/`5W9InvG-5p=<)/w Q*#xqw4rEJk`*vh$& m fC|,J %xuw+. ]b+vϼĺ[k~2:\U*ptҼP@Qc ̼.gt/טVy9мk@<[1_$lj/@ tp_N. $T r*؝x,=JSu(in.l'*W-gO|ߘ*U3k,Wb&X*cVmeWW,\7Lh> \&"]0]K3QV~ Hf]bevvf ڱXәb. 䉘]_GisJZMgՃn5HUq$Q֣EbЀլq '̭eʚbRb [e@X@AvJLqQ7iwĠ)ͳ- 8%_@ԱE @nJ.ڥ^" ihR%jAE\q]\Pd!}^3g dyZ({wz\Y7<fy+b-ܵCպNŮks*Z1iU_PE\F\x8kVF:bߚT~(K6.#6 TX_p@Bt*qYs߻#o} KtZ2H>. e @D? 8jX h-. :pAPxe3gŪb)JѶ}u.^QbwUV]f&^bC%8JdA)L.$ TRexo1LP(p>{%p0oqglcA{e^Or_pr;&zʰS[ <0-pX?-_4#qafb+q1gA@o,/~^.QM̵!i![9 T%[iϳQZgܡV2nZ>eHS B n__YL7^Rb*4_bdYi ^yUWdLFAtu)UzT( ݸmÕTq̢EQ3ׄ]DQy h e1+kL+,%𑫺&d ndUx 7V<ܠ\3 E T9##Ƙ 2JkPUCZ N7-DRթUK՜KΠqڋ7-D2 CЪ)2p̝ѵ&gADÂ)Xؖ=]Q]spG>`&2#,dKj.)$R Nx 622zұelpA|ԧY.=",85{ (ŚZĬ m?PY!wR/8iQ7,GD $)aN TDϪw?0l=(93,ɚvXdF4`V70V]:AQ  +P/Y*1k;AΙo@x"PnSW?c+no`Z'nK/!Jc'Av1JwuO & sG(f_m8xHW1SyO^ aI״Lkpu`WncDb$.pY ^1fw9WoxU~PRZDXLzgSesr'sDR"mY[4c6[4 xM_p.?(RϹ4cO @y࠯+\#m]52гZCAvJrUV0̾\;jωV (q5hCUZf&&(C""c/3rZPlPR65>eJ6= H9cVVADPܡD (g*mHvbWVX !J. Hò\u7.ZS2-KigTb#<7)[-ž9%%s;Y0_(fY*3kWMg{@2ck3b\\Cr2iDLjnREfJ2("|ʊ K*4j1{(68 ʏCLvAEe}KU2w'qѓpQpE5I@E3^اJyB`Q mP82@{ e@+@1cS7ĥr1D(g0m7 Zŧ+7ٺS]L W&N@KAe v)K=dbsRt@% pwh9gohE%ts:B9ZUqQ}î.ZJgRCGg-qƋ#h8?lf.yUgr"2k$LB[%WƐ sdˈ -7C;tsXl%%%"ԱBA/6L"[傛qXhr(&u557ųYMT(<2-YīuEqMꪦ,K|{:6䂪+ԣ!NsFyQUx&>1( r8"+c&b)`Z]ʁ)K牚yQ̻*U7Ҽf2h rAfQ{ f-q̲i0fK, ur.wV,_{ KV:QM*+VT&%n ѼKgiG|Jn)aM2'RxZ@9]q) R*:4;^}ج-h'c"OB6M`FY#aTi¨JRBn bn^@[`ZZ!R q`c%@z*\j08H¥Jo( JklZ,v4zҦkb]ӋLQx$*`1KHR#ĩh1VǢeVeEJm`fVe&eZ楬I[%\T1|j:ŨY2"'rIXu6"梲q,TDS1o#k("31 Aǘ7PY6P\B7 ԵV@]湆(u5eol u2LUc/fUX˻jꛁm̢J0g=^aUuOiR~yMnJr[ @ %}˼>7-ۡ77o_SX_T>!c&"g^7g08]̷f_M~mmy斝w{F 隳#s5A|bBs}i 3n @p~`İB>V2jʩre.u`qeEUR^9Q莎q:oa Y[>ṕg<ş]G1;0h|ˇaJt:o Uƒ 1Inc0GJ>.T"dlw )VU^{5fZn~#0~f|9Ql.q._1*G`rǠݣ Ygu|To`@-9b.^0 }E(ſ ߶">je bƄsQyU*OޠUR1uO*9W:XV xN 橎u msQR*-6JqGp"kL\Y08/]j#Gg`#sKK`X_a ٯUyMz8^f"ũb' Ep]~iL|%5q u BˡG.SR P.=Oi*h,ܬM5wunQMV%Nj}j^BiW|Lݏ;ծRRk`] ɣȦṠH֫ ]CXFFgyOERj j`(}iN1vv("Ƌf_S%FL`A F4\r\4B+oY]Byy PAQ} aҭ3([gn8 <7,PшI h~Il ,-U,ZF$e_*qjWB\ڍ)l[41( yy$U i?Hؕk0aX]⽥9:,1Ơj-ډPs31,K5 //^`  GSuƒ+ |h,n5Q^Bʤ߼| ߶b.Mm~e yTg%>X?[api İnX򅄢 Sb(Lj*ky3!)em> #m5˻e^|!tx\~ *qehȴ< ){I#$l w !1Z.nم(g-" !Pe2mrDp'Wv80϶!^XEX%;XhRa "]f/ĕ* X4o2%5.JAi!C_/@#0%G2 _PMڋ) 0x/|ptZ OjPaj"S9gZ@rj(IJ1̗ܒ^G "`M>tc;kَ]B=K ,½2yK:jUK5P[Vf'u0 |,fޜKEy8.odY34ǫz 4w.9|PS[p:NR)\&J_Ph4yc9cL Mux[b)W_k\Ǣ|urԦy ⭔eb~"| )mS [ g4 8r D.AΦ R4r)#cÐ:vۉ4&Rjs(e.uqqUIYjamG!H2pō :sU{p9 |kpZ`]>pia] SEұr4QW+tj KQ|b:ȷA@6grJ1tm6= [b=6חCxǷ)bۅ8 Ik(mom㍸u4͘,_6 ƛL73sA6&{P|Ϙ 8qTҼ~ %Xmޥn~auy*o7oQs6{6㉳g&/-UZǶ Mަ{|È0dR"6✙Su\J*dLQ'\P\WBdPlbh z79=/ ׼X,kOmжWS#a4 e*ilۛ]D(BUJNp?,m]ӏ>&D ~2/eKLpGkz;p 4 \PH>5*"8%!OjUu\kbP*a-^ܹta\D( (:W47w Y?,w~ %Po&`fXHyR܌{&H΢{Y,ɵd/ewQ-&eil]0l#) ʁsWN~"7kL[gQGp*8+B~8S.s|&+ub]}bXWy8P؊SS?3ORLm%W4(UQϖ\][84ŕUkLޛp:(!wBp#w 7JTlGXۚbl1w \ɠ~ߴ] f{GĬ}ƅx: {TS9{Vوo!̊xH=|[d Ҵpdao5~#ayiKE8j"lF'Q䖘E`(T.f~hl?ߴgDKOkyE| f'J#)C4.ڢK\v![^XV* X+Q6E( +Aqt/˅迼n0HK fѾ>bX.կ`q_a=@mj#M{ ]1\|@g],^Q.0V hn`L.K bg|5ٛu6. e׿B.e0t²ʆlVAnK` ퟘui_ XbĢQk ?xdbߊrAV˧,7H/g 8e(ؽCIUM8JUJʾ{dN|C`hRCE  'qeؐ%B0LC[w wIJ^I2U┏?ZFXj[R: fq%0 5$ 1f*0z` |@y rX]D5vs)6hfJl |@Eʳܥ+/-`KBdo1g (:k FrD0g01lYL`(L Gk(M b.*\u .k@i*`c{DEk36 w8ni2X^"QrIZz#λaiJrksZv/! ,T~ f׶<ߦ@_D2%.C 2@D#!iR*>c~fWm -50.}hhwPtSƢsT eKE{b1GZ~"QBRYKqѠn^]Pf "YTy*Sy^S_B@s@1L 0/ kDYZ*s7"²b/!] 8D!f"rq J]/JGAD($ԪkIW~c (XnX˫|K%@?w,`DU>0VU:h){axyPJoArhߴ-,i#'oo$^?BqYPRcYq4ϝ@etR)~@Lx3#ҷ4qkVjXVpD=Mb$R1e3/%ۈoܢ,u S0(4ĭ5MrZG%-mĨ\[f2&W 5(X/n )1Jz>bơ6 I)")qv903l@:J9x$5\ gea3!ehab_Q-9/<50}̘4dwzȠ/!. rF5w٩S_\ K cjr2-IXT0` 5XiGdqlm4?~% T\n>MkA5,(x|c-X/ˤAĤ<@°Ũ2T_f oZ4zh3 5؂WF3^з?hFטVZMTrR#+@ȳf/U_[TKk)mr^7F/pm;!Tf3l8a U5"d|ߘZ/I(]8p.hx JbZ .J4Sj%[֢@濋Z8+zVU,2^' ?G&ãTJ*͛) n ",@i9 ?4-)r0)g/.펡H5kȰe2̨(Țr摦Ie`KA[R0IU]3Uw+,t}:;u8W_l',7x.X+fmO`QPNXl`K7 RVC?QFJٔ*p V$1q,%6o_juZn mi`"F@f\3(. $ZJ|J[ SBךc^AFD>f1BywGfּ` $ [?$8CYK@Z)3|WPĥC*!Ze ffP-Z6˫E* Tq C4Ξ"LtLl)K%;_1%  7G3q #"Ҩݺz57+9&J]`7FV#u|t/ W J>O4 7 N՚ܮGBXwMX(āj9J h, bi: rk.XhRtد(10_N:T'Iy"*+$ٚ9c#SPx{W&A@Zu,`)Ħۯ l4n=t@ V9Vaɤ9z&r=և&T֍l{ɢVub;tQVVZh冭IX DX~R-u_UO,k3,&W'δiI8|`*ouS 4MW_̽ݻο9#yC+v0 S^+̤ Ǐ.L@}-qcDau]YlDБ]F(vjVU0srHJ{E`)b텂EdZUy7G0HA~!gǼ6}Ge^l1mQ\ M8AipKj^!YW22{EZ\9'9U.AOjTH.GgIv)X ub0g,Z/b a`B.[*ҬDNLjj-զ5uİX?İK}pz|EgV&9pқ  Bx`R5DrkPڥd1au2.(w]٨)PQ P5U=Za} DAt6(;y AuxZr6sP-\_Q*BQD@o!]* ]A7x*.e]Sp!aW4)wZjR=\aAkc5E`/@-j\ņ7VtIZSdvq NS`%B{ m,7tFXMI_Mt j^?؊XXO]mj^dUg0 /!QBT89.u+^ָcC5P&1ܪ$j(B.ak%ƭv9ۥԴZ\[^-P`Nou,wq'  P@j o:kR3gam> >~`Uu^E o>EӶͱut= hh&ic.sVW2WMTvCG+چH[7Kxe-Za[b,Pi/\8(i0fxWVb5*Hmv2tEK@x:>&hmò0@^0- C`!@ bTzd4&3hPKPRfD%٪lu{-P`ȝ#8;ʊfv+QdePVРB:;/e7dYa%PLAK;qw)J`bihl2kR%-cшH.$2e1Vn\%nbu I++, -k:) YgȀV4,VWr]F6E$aZ ztq,W,' =D/4xuDP ^~wRȪϴkfO}@g Լen < cUO3QMx.{L2Ș1J1J*L;R:C: 7lb`rQDHaG{/JocQ++rak^*0-!e_|?W8 )rhڷ1`ܣY[(^+4*D xbwLU8 iUJb1-{sPI_bApO08)徫kķnel60EhلV&~exچqjNKX TBmԦh՟19VfwgPr[xR*{51* :h722^j].JWK(r?de5zi0K Vr_]h(כ#bXl{l#UkG¯#KfUS7=Cs%PPPQ LtX=ka DZa1l(AdÞmk#jh@*ۊ at2IJVAeecZJ*\1'} _Ew, *8Ů*t㵐g#-Csx PY51VD2s)n2PٝNdrm7+(k|+[r5kS 0W%>Q:KZgS 'Ľ02 6ɊepP(@Vm-oj(Ak`FYu C h17QJ1̼/lO]KZh=JqJ*t{~bP@|oq}Fr6n3 U5YؗP*dg4R+ѷNnyT޵.ShS e*N(MQ$ Jtqyq gu}}DYĦcB%_3ZX~8ƥcC 9 (ε*U_kX```5Jj!ff2({f-,enE֢S:&Ya}B#Ab|m3b̩-ҫÏеDBihh@UcIe+"u`@+K/}#lʭj 5z $W m2f@VxqC½L!`vn͙Arx̳y {wqҵ#!06C~bJqA@9A1e QپXaq(T_>.$IFqɈM? QĨ[6+WRf(TKsNyF^.G5Ǵ),ʕHRP(#2^?ZQi]|?# Pbf1GLPfbkP“W*1KQǖ$%C3Z! L8l mұ+LɒX? *9l^güƒf*( xk*ߧ=Y%zF.Dat1oYl;8nj+`7TUW[$z}n5rMR^ ̠4)fSwlv,䈩B= p& S \hNcjGenोb-UޱJTi2%K7JKVষ*ܦP-ԾTbaV ΁*%jXx`1EơziOAJ3ɂ5"aRiQ1k8Dc@^1g(ɏ1y(&fс-N: yH ; A@W_ܢ]04,x]y#^akb Ƈe6.!QMDdX3-7u ȦyB1mYoګLxiOX=f[7*C&4Z4w1#GĴ+u3/OKq ;ɧRp U)%Tu%+S4Vg5\hsQGsZs0Iut c"c6\VYů{[&U,ĸ2Hܧ2$y g>aLOt,˅[^(dul=W#EP>~pʻdxb >N1 p[ j7vI:~sh>_U,±PEߴPbX2mD^5@*"HsXP _T%9sdgH4]56C~y}TG1S7QQxQ[ pjr1ڼQE,#4ʚle٘ḗj: 2f8)b^[]\BKe&l%%6e-7f¥^c[4Tڳ5:,' a2K+sĸ3e-U9Ԧՙ3!Ik V W!ga1-|]0->cަ `ɂ5kE]эG1Z. kFV1p:f}L żڼj[ ;hK 6臘gUZs0ȶ6jŒVcMb,U *sR\ܶdn<1H5xRYz.U1|*R87]LՀqlJk,1zNpPv\EUdLL% R DTJPH^ VóY}qrK\UF5T` Vp 5%!- 2zڛ?U?+1*_P摗CR{T>8.85*-~a݈,}QE^ 85N')R:Q*wx(4Ɠ˘t^ie\0fDR9x 1* :NJ$͋Z(BXV*!a9dcܥ,4rF֙Nq8x.S|A&96^5)*8'knXC 稭ӉUT(7yS;.QX׈Ҷ@ s9}m_@1(Hj28%mnK1j x&.PpF'05f_0VCodc*,9NxJ̧JGk+ɘ%Q5⸍[5e|惣 ]Z^V*[Rb8hMQuEJxIx𐇂4UQzɅ -E},T_ߖae2u /XESxbsxE!m9W*ӏ>Kߩ* ~u,YV^7y`XNt @W홛E̳LP aʪ{kE^@<ycAe׏iE./eCVgY`0Y5 z4\q#!ΧIU5w3$=\To Zt̰/B4#nH,;QqTp;J8Csu6qN TA._e0Yfj'ҫea.%+&{f-}ʃ-G9e}Q22݃Z8)uF8˨Up@^%-;!yY(W =C 8^a4 &m+v,g;rJ hņ.(J*Rb]C;:>%vqpmLclW?v ~ET1PY>sҜ 1';\ymb v*Tlq3VycXiKS&xe?˨t: Z(aG/1}* ŰxUsa^->#:W.&8 ^U#D]Eˡ!J+1d Yjc}CAO'Su3=M@v9KΆqUb5,-[5ap?3+ Lj=D7ĢgQcL\/t~ !G=EWC"'Sne*%pf]e^ 8%9605D ۄ& ̦셼61dGJ1 [ƥ"Wp+/%}MYgTaOJkG3xnѢڀP\ DKԢ[hB9R[=GT5&ކ`Ժic] 5~.&қ"Mv~*pq.xB|@w0bȦ1F-QZ *8E<y_:A/,%YGr K6~=9nki}*boLxexPէO[)sɁXcEŇ|9 qG * X_2d]EQQm 0='HTOIchB)E<px^!] ܗpP#!I!jWv%+ |ŵh*"zKyq^ '+WrqBlĩ%Sbx_/ED&Ð%4C&}Ko_Z+7@J=JPg8آ SG E#!İm04]& UJN.!ǖRk+݀{pk {UqTrCWC56vd-ļT . uU51on"F]pę/w1,4fRyfͨGqWN (W ~`a%(9“@KT,K䉈"TZ5[ܴx6yG Q[jl)'AòJrp}@s&YI앞Z9Y(&‹}*Y5b3n?Oo1,dp\{H׊EK|B ??BZ&W%QguJ]f0M ɞe4/5-7b-l qiCL Rz~,NSTYbeV&=}n#'pC2g &mw0ኡAi DqRb#Ub16Ԯ'WP:.5S(QB݌S8? xi}xfYSo^AECW(W7b$#V-ۊ/]uj_ SRnjOf%?A[QMKLj4}+%CJ8O <=Jq2Q]¾&3XP֏̺S.9=T ,;.gØvYwrhux"S|Cw*Lx3®|f%]%o6dVbꙓ:+vjV.[%V8,w1qd:`]B!@y0"IX. ߺSa x&yNp+6|c &s<+U+% yqDcՌyfgƢS9{ek7q|3pw1;ߎޱBpUNs|J#Mt.iuZYud8}Gr}T7 HRiFS9>`p۞&قZ !b̲]mHƋ X44SV`taLxYYX> ߢ1.& ydAD / !B 2%b,}dD}߈1t);~}UQMFbw(Aӏ qz|\\n/d@}'%% M 0lVR\-YK7,D6jeJ5 vKKFd́oqE(w.M6WD27EYh-;,#|@u8>!n86̉ac( {06⯙P|}cR`v|JWPug=JqRkJgǤC7g1q+&~UZyYw/R0unl1p;tpl I9eMFeטjJIDϼ) o/G.,L0Qt"LTk0r9n_3J -NJXp>&c(*:iC|k>%VkmgamCQex[o2-` SG 5S2 qlej5U^\dǴT[3C1Cbٚ$}m0 .ZF`b}uUwaП`Ril06g/َ[52.x7FX\}fZk=%8.%.X/Ixx3qF/$Kp&p4M nBJ,)7A thކ-,QF 7^+S)Ez_1qG4jז %K){b^QeVbLAdJ!87+[̢Q)3u sEk0P+x#q%E+8@nyncU+KIfhUHFiye3̈<{Jt\~sį\ʿoK Ka{7:!7@.rԺ"}VF$>WL&`B.[ nj#,_DVsJE̔yUA(SXuiGX-0O(W00nEBӔk.aFgdr!2?s g+'ql Y{Z,ʀ)-qsVLN/1UA!^rJ F2*|&^5ј;qP~&:# 2G x7]|̊!:=z~2536ginư)㙐̬՚"JKeP^!CSB&Xs+QZ5ޥ07] 4Dl"Q=a .iOV1C׉yGYZ#bz{)2e>_.RjG9|l*]S6u(,ܫ/_ȁ;Jhؠi^bp_*BF?jaṮ ,je{G0^]wEuءUZquCqҭ?)];BȈ68L({[1'U!cX*Yfa W,5ܡ0j W-1^%=\Kj"p\s1K15hCafQDJ^, eAUwrYfSⳲJ0TxPN(_Tľ{f7 PcSQiL%If4pf@5]@D 7W3iۉ3lw&gj5Q8x}FhAQVDK!/J?NckLYHxMG3}oN!L~..12=Hټ<;f\Wm)0jg 6cU=w.#3u-<9՘tq*Q?5iX#8%j%/2̛]cBw)Jd 2k\y,1F>߈֢Pr.}C/3x&OeFO2RQ q#eFNGeT!{fs|Jj@)R00) VWg*b7c ЙWG6!m`C?-3a0MqL̦Ytax3l]{cxa10+؍)5f b!q|+ ZqqiC+:g[qZSoXgh10 yfgxY8ꊹڠqD P|vLEjQO5.qK*^<[?*tCjqx!/^e*LC@Eq0db-u]U5GeԿ %_H9@ -k PGaN 2M.XSZ*%CR2޽b'9=Й&5,zi9|˻K"JM1~#TT髹XZXEY9gY@@5*1+qTݝD]镊V֡+%0y,.%eQ: Q>c.^ZNP Pa aX_g2=c#)LZ&/+mץ[U618p"ѣO9-42%*2Q$BERK$?4`f e1LKDp=7eᖪ{"˸R71G<&3wm_u21Iii~jz7e'g^;(ui^"W#n9> p(n,jz_31`M{,^kk.eŖ=Ĵ{D|+ ud6 Z@]J )LS>^")gǥ"\;JFϦ7Uwu+m|7*ٸ#T?(50^d?*{ <!@A+&N>oPn/`aL<flnK!"' D.8b?X"ZB7*s7s+f))+Ųdz %%rʟ׼N(e h.j a纜e#&uX%_i %ĺ):}DˊͼJ賙ic_,j^cj/.W K^҆snpL1G.]26P%3y#=VfX~Q+"j_mvdKIjK09!m"W 0uӆb0<2Plkx+r0Jc`(>iK~GEZZPye7p(<-rVx]1VW XSx4~YF/4䚔)tօ /1bߘH?ӟ `,ekKn8UYCiNU`k[H:FkZ/ /KGlxRtuD^-[ݕk$7{r!/)J8ԈB˖Wg}xvt| g&Yiуُe^XZvG #v(t(_VR,)sKZds[;݁v56#-%e#7O*h]NODt=ayO|V3^XEe[NWb/ɫ}mv/ph[*ٔ~WriSЖؽs1=?>БC1_8qbpXR8͕gBOhIv$Vlg֡ xc }֎R ujSw~v,Ψ@eڌˢ]n ;jІS_qEo3^ljN A@w,KRkBdB]{(w[sH~ zZļEOKD f )I[">0Xn=0ҿCN7_WJ0l,%z %<' #n6n GK&手%JtQwfm:YSܙ‡^ MBs=>ċAy.6fWh9;]JnKH4T)cM|\OkϢz2rImyɧlާU{)_ 1rNJ ,܍a"CNKxJqI5o:,I{_/DOq5xؽm(3D^ "Ƶ.ues9,7UEHo>?2NOlm8Nw7Ua7/~!y*j&\T[OcwŨQ2pu%?S Te>]ynxSÁCwǷagDs/3ŲAn>N!d]`oh31}mKkĩlN{ldK_cWSo@tqi5Z+-?9Q@p5!BR9^!4õ%ۋ݀dO} #l3`g'.( j05tz'&؄Ϛ`<jRoIvJ˥Gܗ:'ieZ~}[D@;aT$INhrR|^ _sVܕ?rB8D ډ tx~9VٝoA X7ʹкYѯ)NxߕxmeYZd=o?#FS,fb߾ouXIN} 0ct<ʺRR7<ӳF~|prQ~gA7jU"xgkU+g-#3hhD>)?' (~i鯃(7V˳'y7̯:H; gLُQne_u:YBS*s ztGSeaƆ;LEL=9A~4ތŞ*|=!.pŐC 0k%Y#X[])ĮF6_X]-u2H)dlGx@}F9USS)tLrw }nm2 05 |S-ZܶF@j |lvtZ'M;rrWxS ^- La ._/Xk(*` FݿE7'^ gmfmꚅb@pP'Im!yJ9ms^g b$La[>\6E/_0~^ES%ngjѭ# =P{!y]ѿpQ# t^Oo<8>A#cxg謃>݄R)=@[4؏Y'wW'r6#NJ4a,o-!GЗs1ҕ7%N37q n r+ibiBgI;_Ȍ [6 0Yjo`C:N~,J*i]s־)?2+&I?4:rOh@ ^q5mz57\F-@ӷ.dptOW@럆+xt{b/wsO T+N;T'aÛjBN-Rݕޤi<ԡ f8Dal+T8.<%ODEٙf1.lK "-Lj In{K0Ъ2M_-,A,)kW-+N+E^y u\Q0վиD ?'[Wbt=GhhXzbl]{;I'EW`9QD'>8:_ax<y֊爾 It%G~%ؾozN^G'/1* TO1yfR.@#\5_a))\wjt>Qn}nX^m%;Ra[.DH]yoDZJx| M({@2rDi+#~iloOO2E1FK<^M`y@%oeTX-!ljU 1w2qS%7jQ&"u9Xz"fnYg\bO~5 42_;ݔ\R|$˜N0U1g?=:Gއ$ͯAoܼnߑ/|gZƝWuk Pۛ٢l>%,cEE:z? %[ g*AE. SvgZ2:٥Nj[L,E!m8qwnjJBovP RvjrVA_ʐmM&:aR͓wdAo+LTEtC2ͫM ;7:iS,aԵȘW̼}gbyO92WUu7ϘxE[u|b|jM+$sxCS{iq6_Tp&B^WhO=PR&憮_.F81|v__0o-S1B$! ž7yΙA7v]̝<GNnGCOM#݉xu07|:n Wylx&'P7/>󤒭g m25YBsu=R8uB Xд|c~To4s(=#%>p)dJ<-%%5+QTUw ԟ;΀'cU A5) 58t"ysP x2Cͻ!Fݕri [W㞡9kXÔ j}qA2xa;|+-V^E]F*N6tmW'sDWⷛ{ST5vG}*j(1ig$J3BJšgh} MX[4#zB/y9XB`aڨުkda}%"pJa3:_YL،%($U:*=TJgQH&>90U8m4X,=]6l җFAGVbzGF+USI:I8]oy3raӱƛ!?s|-< J RDؾVr "C۞13煇>6{FLqjcPH*R0f\;sY5 }~ :O櫠ٯpJ:M&eI@l2/[ &P0w[GFGK/T)?hN9kJ{d?"KQ1JROhMʾCۿ3澈hw&H^.Єb rum Jc  #>R>}<%tLL|+ y0|hzNء A35W>Z+j7T4X8iռ؍O h>ILZ3K_*?B 86K{Fu.e>|xȩ%GoԸT 4UG_E'X¢'?N yHDκx;c L.SZ_?t^)Lwbߜvio0n{Z!t YT9⡌BWCQ\ hESۅ -ffTp*=+,nbW^sz;=nV3nӂ \CJ+t+~a)~E-rkѬ4]]:Ɲ 䭯kp3^b>gYL nW0ڂŶ#g[sح(,cHޮ.5jmn:ɷ'uի2@SC>~% ADLy6qذKU/Jeg_-Ўs쇱בW|;v?3QGA/Ԥ&`{ә80M8e|Z zW3& /2hbv*w*<2> 6#U0;O!9x.|2LٸH\0 Wj7H u`|[WV{Ò-״B{̑% ~4H4FA2e #vϕΌHjnK&AS(_P+nz2r4`Gdٷ)o´bL㔅6+݈n܁Xmc^8-ǧOx6/@npӖ];GZǒ&\d3suڛ[',K4,+J n9|LhJyNJy3طKi6zI \ƴ|i (C4%xX= %=]5@t(E>]:S~@ٽN"x̫K@3#-b,y~n5 Q[!1 OXB!遱gϣw+g#u+T5eJν#GhSQ/Aϑ,&!C\W,G>3w"~IE 4<#*t'~oA}9Ԣh//z*>9ʟ|L>7|mrس'SM._΅L@{4gu< Kq.U%Kɷ(2}#ݵ/[=KL.9_`~؇y4<˓Ԯç T?.?j_)jۉ.cޙBNa@Eu'FHvIHO$3 ʻyldXb4Q"CĆft'/vke`e܎a+9!?WIl=>2n=Z1] r_GD| /p4wU괾{~· +ːP+?Or.8yEתeNCk^4}{^OI. f| v1]mت/a 3ۘ~f+g2XRe~?0#ď|C׍MZCHJ:=YPJI wD1` - 4l1Ia;3&cptTUշjyggОrɩ6 c7x-Ly)ZVNR16uJI&b;]+(ntN\LSѾȓ>a_.b\3%^)`g!7"c} +Ώ g?yY8ǐo@Rȸ?){j F`˵m.TPsZ?a?gvnrsʁ`gwK!mmON="Ф?у5,yl,DžN8qߊqXw豛5^GRm>)5~ΫZ_ ?~/s"K. oU=tN܉ 9O/ZC2~9wy}>$9nRp]JWSoBD ּ!`<N8gk jٸ=x W\R!C _@'Vnz^0bCOhQ#-0w:<<#SŮ`Lrf-n9/%vl+iĢUjrxX1mtn,nV<¿屓 эbR/+BǴO?-uߣЁՙdA-[;f &Q2aopIN笆+ǓLMgJ ZXzdl@"ZGvKّ'/DԍR)FmRHb~VZ94WP%z3L{xjrRc-L!_Zyp=?}2B)uLOH2j{ P`@x*H=#f#|f~Wok-HUF^^aUUu*=c՗rDao]. &l}S6|*Ss~xn]`+906bޔs\-3x.t#㾡EiNk(@@h!LzW@~O~qd88=>F= _Μ;f,uRu9B-XU D+Hӓvn?kxrm]ַ;B|ℬ+(gI2JDF3r==m_2,r|{b]' "1&mb\&T\0!e74 cOU̮R;]"EF /K d!~Xm>{DъX&UWr\bYHmSt,EtqѾkYHS!cɿ\>/X0SjnE/Y5m2cz< hUm.ԢGOsgNZ^sWhԍyR?NQ"S%FyxZSWR=WKTY3T^*sq)㱁z'a$D:L?)u u}&a%'QjwWeRz$lJc,K:ķ=CUpby>Cd(U{- iQDW%xX>P# h B/#Sݰic =,n$ *'_| -J!K/ۑEqv0JbE&$ .Z]J`h(@?gG?ʆ%#;F+*C2xi6ko]|=Epk. P߮[KNq4zag*R cw2#yn0/ݦ0$oɩpwUr >>ϐ?!vG@yŶr>5O.18n4ob>Q FcVM7) z.Q2l>lBq YYT }ji! ќJ7&y :J}4 Y`XA^=Ph  qlѐ՘n~OpQ{/$Kn'U\-sʿm{h3>ȩ3zGg[{ǡGh'}E. N2*9ԏ@ hĨcòȊz_x-bpxE}I"y%FǃeEY<%Fؕ"[3" ; =h5$sE/R*JE6E{uhT'l8;i%Pa)Fk;*S4G.ڟۘ7B 2$Q5 b5I,:dߘBQBjzT)nI:5H:Lp?}` +v JP(\H2j^-.0T>$>jæXq6z!Y]%vmGE[o-lZ͓:m+a>a,hUf6/#l̝IlBt2R_R-=8lt0p|$G}~]^XN5w|"Lrۙ4 ӳ㗭k2i~b)08ەai)!?rrH+pOzSxi{MUA䝲EX>^@S r xYZjt(!\%XԕѮԞNϧB2R12|wTg ġ+o# <@* Uk~,X;6~:1)[< !)h<[>Y]|zwY)v5mӌl)B9kZffZʭz @W'"„A FP H'4H߿{fx"p*77D]7ee2Մ[Cʢ_B?G˾l|\@%M݇脎5!kJ{h1EmR gX\(.3Q~9ԆOdmQΪ g-:l.ğ\Cu_nwK_8ZtDY:)g|UK馆a:xX^[r?T_]" uo0JeH"}D~dhX3 v|FqC>/w{rڰ++R[xPiam9S ]֖9}Ԋ]ң+,:*gWQ2ZeBp- S5§mh R)9$)|U N  ߉a;,wkmqӯFt*'])ػ@:/t(1 ~^[@Ex8==s IE ]Wl+|8J\cdbtSBwӂ4:IԿagHfy7b٭ p@$Jӗg7rá2r,'?4P.jWXMk6T7UNy-R-F<"NEck2d-~Aib$)2%O 8*Em/nZ2z[kBjsxߞ~F[ک w%M+W]^DPpmqJ}k+!hw2KY5ƴO K֚|+mP`vQɭ^4VpfVoI=jY5;myIf{%|[ԒE4RU٣5BP햎:ey.n"L~H9-[ D=ZH?a삳gh)<6RfЉ\"'qf7Sy ?m,mrun=BFj*Kw\aYPWإf[~]!g?szš'.]}J`hnvnux0^k )DK~{TivZ'ط%͈SrGTCzSu.a?n!Ws#8OݥŞJ)ti']. ᧤L6qܰ.-OvAI{rd ?,*UI{eO]Z= >_ܳS"^̽0k''ՓEDcDpE%([YX,) 2e6Fr!d?b#kf*HBF bkZ Wʨw$c$1vtW)?0oV6@'l{X9R"n{h[Δd~ bh|,=w-rV հ 2CEgf͌tڵnWHjC 2WE^&gqQ<%% y*Xy󜝪*OFn\,vdyb)v'fE:0h/w̩gUGBV >v{P}d_ >Zl/ť{ &/3U"+ wW 0e><?SB1i+a<(DGU3H tM9tc̀P`$K )6SD+/~ MQ|' r+?PWel@rED`\y F:ǰ\3e13^!@[ij:fihR~p+ ~[{>sCj){ '@fvu|ܯj*ʧ@*UwC01NE(=hDPlߏ wj)I \TX e9O4 u":5? ğ slcnr41斔cw9;24ȝ)r +W*%ӡ >x|0?P3[ 3~Xqu* t(oG\ 3w!rw<4~\0.ɣK_Ƽs?U8lbw6^beyϑ!b`3o&F(\z#}_ l {6X:rEd8R'Gد hhw|=oj*st擢o+Aҁ" ǪG~?Te  p|H(NgTi`ҘOknKMzYp3C܊Ρ68L~η-팂mO;bg1OL8u k[^n.|z˝:, v+Iy2`8iixFz1|\E7|=숂ޞ;dU&o,[,L)):Zr5Ղ̏!ryѪ}RS:h$B:1\tmIy,mGJWʉ~;|YA ~0 x7k.E1s'DQS s^B\IO1"}:GM==ʝ~\Ra[KIjpYU_RhX?@q̽,ݾ/1@~Ct{o ЛP8+mW 5ΞE 6x{"+_h@Seeg~W{ۆm{AP ?'<> :aje¹ ˬzz˹Z1&=Kt}cy2'˒X -΁a _ j#kaS/ڰ,9M ǨjWS+.#i*əHb2ɲϖq-T9-5Z=[a“q߬=22Gb,IPuՌYY596QJVHg0\yJ4𔄰?ۘ5f j,|*: 烀K@xF*bSoi N w*vxs!tr3t}$=&+G5KV-kw,!i|վ/𺮝{v[i0?**PHz}ygc $bX~3'tTa^Ki;rTbZqn Ȳ/_xߢ&kZ픙X!_On5ZQk("d~WK$Z}pc.ێ/;iwTYR):|C]2t.ʅLSܸ:Z\sfZ~h=37jZW&d6]I696;̀$&:`7#>ϳ 5u)gۜ.o_^ CuTO0ƴ|z>=µ+015ȱ2qsTcgt:0mX/N+K{R~xt˩.YqMtO5:d\ix{t~`,L,bx1is;SJ7U'H'GXAp?z5%_q0%Q.T\tdRW?YJ>z 4,;YwN h+"b+y2~LlCݼUB8{:y|Z:0ycXo2 L؀t'Ȫ"ҦD[B<ȩ'{7W5GyЄ:BMCt2;L4羒8J!;KCnt_yiF]*>EUL7LVYS{e`Y0YkX6JFEP֩䚿e3bp0|EϡNs=-l/jzcd 9L#`˖cg^&&h'sλЗUWò?6{"lֻNHn񜴫 `YG_9Q eV? ]GCƐ;urU>68P]a(uRZ#z_n⾄~׫@ fk9@\ y29r]:\Ӎr!'\_-;EvXW{Z }tQR_DKT@o,-5+u8 ^s4bP:ti%ąMЬd~̊}z^Cj 捪0č1w0˫HDqmk"&cW9~l#E.=RK'prF:|;6ϐt !q<֮uȜ݆os-6Pc3k6hpm[f_GꁋWi*TS7|Dㄩy ~< -0wӤ¸U~YP(`.OәR2 ]$a)"FoR 1l?~LF9F5FP+ML#tRVZ~FֆψPb*%TMK:fn!<'1rUš\ F ̽1$7smgF͠LCo@o;{{E eer뀺l]Cu,̙Nѫ%^c8+!{-ś<;Rqg1 96RX,iVwC#TX$~O\dz:or5Be^=f'_!TC{t82eUB=ta7+XUcw;f_?;Uh$,Z_}h:K`bQx̦RW.6Fd \h F}OlޔٞUTqDPF+%KNj-택L߸- ck;"#}Ta5z{mg0yoXuiVޛH} JBf{Z%VQ]y~WtEqQѓO] JEhp1Yl^֗CІi5ay'j;ƺtR%}Sb!{<_[V )hz;#Žq1hZ@l&O@ wհCsh6w)W1F3%oىJ F<|ɒj=IC/K]g*s L~;*Lhw#KT,3ƾT_K50.3-S؜(NT=DI/,}jt9Г\}d檹o-2sƂ=.$K *X|*[@SϿy{6#l.b`oMZeyB7bNC3ey/l}}\Q=ю#XΦczOq%pE ZU+rt7! ]stҚShjV'd(gPR⚦V EO +cnhuY4yQ$ϯ'%-6A~W@uFk8]1}yhyWfA0gG?8 Wix Vq~JEmBNVV <׌]|+ F\UIst֓60 ٴj"/(w<Y˗.Z 9'4^s}u?(iID}}Jtr%7x+,ZL|q$)!pCŒ&8T4mQ{K8:ߏNJQKxRuj"sפlk->ӛҹ.bXxTy7z߶ATFVQW6oYA>֨b2iR w܇ `G+"Ԣ3^ϴ<~p8on 1 >!:A.O_RAK]gp}_x#ڹxUM ϨkNt!'N^=Ú+LZ V>R엜GlY\н9)iu&.K9Xٲ[?fƐ廩gȪ:kok{M| 7gN27MJbaK1íTNKqQWxnj:dF^U  `:+>$3V5ͮuug23rJBlݤ^ŦDuDL9e w*H2T]KӁiI13iϥca<æZٴ 'adeg@b$\i6GWW%HJ-[Zsvx\-{"Xh@j!vbgƉZ؎vYH d`{V:iwSc8 \@{99H`s>K=&:0P@bcMxdݢ.uG3Nhג^!\Iwϣoh6l4sH j. VI 3(wIϐZ< a:I{l}?_RmWq5Nx]=q(@qQ GюDZۍtS]jumCm\W\3+>c#b4w;c=jHjnlm0|'o.f(%9^Mt+,-( |~v^i%?<}L6^.&jOh\p~ǩ;([ iڕ}  ;oe_0Nrthׁclzu_g'Za܍FSyg^:BB8ۑCvp1?镹'o{KHa%$Y+ӌI}ΞZJ5>?@gHKJ+mϾh8@)jOhPb΅ 3:lCD낟 ' wd;v ~~`n~wbT|{Ґ❑N7Kyv"SĐG mgYͥUE($tLՎM[_:yN>w-1L-^lPO3*{K D݃B6&PzKD?_ya__iΡQxg->D:vJ?]w[d )wݎS7FNgs`Qo]0 (Vl&Cx1{wyY>&|03M5R,Ynsu3"-*\(-hK *%%6z6i{[ n)e Z_킀AuS` M]W?L!W(%eȀs{I() z M+Mkl$Lмn07"邥7Vx_rΦ9uD|eI6*\8՟c<%?k?Wv 6=T@01=CSoQ!\usC؞Z_^ArOZE9c"Ry5q#b(8iXk w(ibR'S?q߱~!%hIsjTϐUbOGw%#ඝбm[|Ȁ?=L#tNJRH^͋ӵ4b5xG(ć-Uɵ鏲@_T S9ɖi7!ҝzñ&6cM&L.b&0ͻ%nw(~*A&;+)ꕸZ.爄p |Md~lX} fyvYbէűYm'4"$tUgB\+ϼr aa/K 1NZT[| B*kE3$+CrF5’hSj;lg1نP~FeGcmvV ՘w!G(:D&u/ [e'N2j72xh.sV"H~D8)"ijW&.W^Ȥ(:>PuqŸX~,be؅'h)7fOapeLѵHG$>Duݚcܒ6c{1V?N=1lKm4XaN GPZ}Aسso{IKY6 攺S * jYݩ CBV wF<{f6`=X P2NQ;v-t2N;_KvhB19l)⚂Ҷ4zt5]ְoK@+޽k.pa‹-QU2Ք yKl>*_7N_ j׺K7Eh$]ӦhޱO?NC>Wv0#ٮuַ%!-(V|=kAikVnPJ (`4.WCV8{@@OqYkrEG(<<&F+c ~sve%ȡvu- Ujks5a<ꀓ ,$uіPI0oJDz3I×'狼Vkˋ@<0ш0Zf],qOZ4kvDrn_(Ԟ=9IPmRW_ead^%tECdNGVJK ,ћ֨qn)`;ĨHۻ"c%R)qnudP*?Q~TEֳ1{`"'bK9ni-)UPW<(UFu*N,oST'jS6&̡g^%JЁ!,'Nëq1=Dͥ授>ACoKX|`[^+{@a-trAcDpw5E4\Lc\[LEsj)H@yWޥPOV%-7鵁Eb.QD<Ʋ#cg=H?s_|&U$7x=RJCfNŗIo? tK2Ք˝r3IŤ#y0{]uiybNoJMsi4d/ C$)#49/9 sl5ɇs=%̘"⪹%+ T}tO)VQm}ޫ+u;HO+r`Iq?4sU= x٢SSтC& տe;PK!;>i{7&M5G]IٗާGy:t0_ȡyH҄F?l9[]I!`J"-KbEŜ=3?]eM<ڞI ;~1D}I,߭grZ>Tq ͐c Rb jpWFMU̿[bk+텛ncH)6 $?ZW5 4V7ߊ|論M)ng{&~հl,=B(OUtB .Z1uT}ECpwJBU#!n`# u-"%xI\&D0Nqۻz?ͬ><+-1v)L440a)o5e%0ds(TJ돚iFn1 {-3t۔&MMN"k~$GtabbJi|%a*R/is[ 1hzk <¡EQbaC:3|qz]]'XypƒL?94'&HU'm1J\H=GH ?NYYRWڏHJ,X!Tv6;x$#6Mtήl2ԨkFpRr2w\vq.yEl:|aLb.F7B3D7Bӳ@M|oFMf̚#fgM,րmb%TI>Kmc$ +nw>CZȺXɹٿbh$)B \__<_5F8 \s3յƚ877IntY sW<^*& t_P$قDwTAc3.̅tKS^7bMerz.4+͘sJWImdXY )5L!rp{P4ծ=Z3oDKc[y>lCAKT)`[[j! GZl2ʏ55l`BC֘r]L_1Ȏepm@:Y",'t>mȊ7/>\Xjצxn͗8.5ufuHWOiM<(IY\Sl ֓Xlj9ѯ8o7:W_ǶcslۤR,}1=x\ [0;qG4%}c0Plj%v#4 .{veSew"=Au-:Gg Id\O=m*R!w#WYuiO\ #퍵D:'B?Pj5+ 0G[叒 Dž[?!0%CQ2nJ~Nip =8B?s9\5?y>g$\hIOZ )w D]ЦA$v^ېZY)8;#ezqe[ڀ@K3;}nE?@(*ӄm,NcJՔ <23C=AW/vTϏKd M:}Y\`Sy_ӐǛC DNPb@BH:vx 9dN?R#&(^7UѰ|*$]=\j'?ʸSxg X5\=%k: oCV&lmIeT%?Æ;%tԙYMjJ{ 4p)zJto:x-|P㈔CJy 9|?qRo K)$>9Y0o9kli` R±jTZ\ Q>㼀1'aV.+(Di\fu'D`ɝ暑G[cU{.A*ci>i}gL^>Y=d.~:WgO^‹Sb0c$m-#MU}ܑ$ZyPhQ*Ut.1JڇnOT ޟls]]ADkι.Ț׌%F5dTh *[ JESLk9*&Jrbь%)nbMWQ<lCY:Yz#龈?0^L.J:[/u٥`Xo_ u,UWNΈ&6+ I)I>~)aksQJ}[9⸋L^.<t2#jq̆WCV,22XRg 򬡡0N!>9`xh~eusP\7_;Wis4谙GP} #a;ݤ+##s Ձ*MJ!Uй;b^]䆵xt:R,7Q9tʛ~J~v,Bh؍P2u6nja ܡ6V#}9! aQoB+_Yz.`]} H++6=|;n{Sv-w!bjzs׋@$CĦ9.C1o]2<30{o7܉{ gjon 59*T4pX]XZ>ɦwI֠~ {"1V6y$?W_"=mu;ŪZ-/z\3ׂNz H="ni236xgN]@yOaR_El_QU-MҳV;m6NaJLRpKzS9~:1Pـy]w'p83~}$Z(KX.&/:ߝI侀+F ^Ŝr%a6sOfX4R!QF>1܌l?oB5utf8ۜ$)o>.XAFCު:hǵ :@HB^/~Xv|XTrs ;qhLCăZTp% ʓwBf* uD¡,t"tnz-[ds b"1`=R;!)9s!{>ߖ gFo_lfN?f֥[bCè9in kTl?V=V&3Y;RlӺ_q*Yq!2l#U]Y1\`n4Qbޱ66˴!BmmN=.6BUci4ª}+9lޞkCDV I4")V;tJ_(9XߋtwPF|caJ7<O='BBK ;Jm㯫h 󩊖=,5NFJڰUwڱ3/+`Y:>P*pg~⛪&ږa܁ͤNoKg[Fc׶V7[;r$f/+q52X;W:FʰOgĿ>K'C8qUl.^STdK 'v.*Ȗ_'mo?1cřT%[ܻ1_ӪU]2d©M.C4_Ђ&A}I=)=)D.QR@Cx8+?\q*p.}]YC93o}Ձ%R2<PD4;P)kQh,B[O_uT+vsձ)8 e(0R8c;Y\ 3&M!iޥ&w!iHQNB,PT:#5 !H (Qdً݋;sf3?ǁh`&k_IXdh|t$J !6#YV)c~h|mCT̸eΦ':(֮m g̒bm]~XOLV}]PN!C~Ѕljem7e`t7Rꛎ5ԼMsLuޛn;4^ ^E%[$ugG-_Vi Ht3ɬLpZ4W?N:]-\n7ѸL÷)5S>˭tl0B c|s?<ىy?kdNtbj끄<>TZxaWHm|ogʏ*vtYk>Pr0FbIP?XLpp﹁`ob2Uv|xfW-W6g*X8}1X''J?nQ7Ex\|b;"b+닺|[HOgvǜȺmaMلe3$YfNMtZX7Cj= 3+ԉ]M͛knjZiOV n yxt jJ |- ?`#` A`#ʖb*9\VƍauN!h=L3"%з% :N^0-ϢYIGL$<4jF3vpE+;ӌLӅTS`|t!rZdCQ,7&kEGV2Wi>Gw wbRz臌SԖ*PK .Ng<",PL>$ TPկW|uhKB7In`1ƤvP&q;V"ٮ,211 '7MM.,jگ*%0*S$X qٽ'J+ДNhMPIӝdnKc3q:탺w|U[|l+eK V-Uz_Nytud|6ܮqe;0XZ dgKUW[;W:ޠ͡Y>,M=6/`[-N19 r_׷x#j>ڞ]9*J(FT/c _`LF&JRCĤ#—1OB}9ʓ,+C('E }jmp>`99#፯3Y˄*b øt߱poF y7cL&gꑋ%bI45;݁&瞪#Hͥ84j7=Um; rۀ]NV7~}HzcďS7 $"ej6/n>^%w8"[-  W2?uLkb]~ )Sw[ wD0>͛`n/UNʂm e'X-.:3tJR/ڣ 'jDBN>3b=uO$5c@"|LBϹpGã-YA^oKЦ.bAWBZ/$9=/2C < 3I@j'"TeY0G2\zxUH޼sۀ/,H #x&0︘ ߥE*ˍ [BF'˪3imyNUxwE>٠mSC8@Og#j DOdk^!'LNa!MO,여43'k+NŒT6c,9+K60\'1IA^DcF}'DXϭP-"ݺa=ڑ&s0a ѝ=O4u^ bmZI 7,6&y,ima~h ;\{(1_ ug.m7GD(U^xb~Ës\G`mP\-"T${𼠬u+6 -Z"#\+nm,#6W`ʽBx9D_ K(XJ[ik!jK dM 1זejrcPYD0!URݣeva>Eڝa\m?!1sުwgD&h(܇P2P(Za"ܾӽ;`a)b|!P+cKf*R`#죦?T21N~Ni#rdj.G'CK3Un),M;WrJ>!<#FKC34b|l^~/S>;'^9>>w9i1l|{S扭2=-?ՐHAzC I2cPo{:;aI) چ/ȃ)YX^:2[Չ%iZ9^H􁯇?> TΫcduJ9Yq>Ť3݃#5wҒfA0bD16OFl\pi2{J'\+׶S-$_4~%,B$o=:hF`K݋:_1ӏ5.ivUYQV gbe"3g8 0YSfTWP͔6EB[6W;UdFݵvo峯Lh?yOySLMe̛~-˳M~хP*W(ZgSkSK=QP&bs(k,^xs$ \w5%11mxtqaP3txY&uQ/qLX3`Ժ܃@; ,^ސ€u@Іd^Q8pԃС I?93,~uF%Xa%̅ oT}N4q2[@N/ V^҅] L!(cP8 pT*9 ([e0?ֈ}4^v{qi)$|9E(_k~-n/"9(5l ]6;kE !Т| H,ZVt$]3~ \'Y;,r˝UJP̀>d8T6iv*m#W2u3SKJH/ 1d8=Qc>x5η\Dꘚ[Ӣ< U~._ݜ8I4ܟ:NW3yydKMLFٜ9ȴ9,g}j\y_IscpR`cG&DO}Z$۹^{G`k+XSL`cHyAB7EaSzDxV|,D_l+ ԁkaimA6a-- vFw3Z2f]SbЍǮ0Cp\Tp?Kdѻ3SE0qKt{ڌ`uy+ %2?|(!'Ud;f MҼ03h}|u g)M \ϵJ顨Ey KCtpyB/zEal޷Kwp e޳Xg @B,DAG4R،[p҉ 4acȮONnx3>~6XsmK_ ꬷj@SZϯE ƺ `5.eqbC1z^~ax͎U|w]cl"eT1i8Y@ÁM#&r8#Ej>?d߮me/o9m8_Dn*6֣|Qhp)72 sGjB]/zJ?V.ڽۡzĜ5gV凩o|f5T"4t72=ښe#y8BS|ȹ0q]gQwrt%/C8͠Ci_yێO*q̀n;QUfoC-75=2x*,9?+3"B|]m,%:anYp'm;(EKTg%RO?4M9,Z.i+fͻ="^ƗpЧlwkpty(Q? ^8<59!ْqNu(;Oݩ@;;.g ,v^\qw'MM$Vdkh:&"yԣZ%Q{bx|<r#ݡOIwzaLma&4gu 3]E-\1ZΊr28Bw'nh,CF<],Wdމ "\ 3#%g?~ t,f߀p[2%{}#Ԭ10 U;" s` AIȖnb4ˀMYM>3R(cuouJߕ(g>) Dҏ{ Kyڥ &mai>;ƀ {oR&J,Rh Or¼n/Or Sr7ѯ0oo6[l?aI~*@G ݎ/]w\ >8zLSBxjv?-5RU+ʱED-Wyf_t;g- D JB9ء/Du4 }=ԏuH(g< ^`c?DDzt/x=.Dm1[;)^Kd"E߅,H桗Ā 0 M aux%k,@Ej]_U+^rtqp$`_:Csx:l^c `&B abܔtjH[hÕ ī":HNx|:P3Qp"sm;$JR?~P r)]Y 0Kwם g{~iVoZICs QCup:DVBL1BMO?gOBm[Yhڜםp1OI81QZUY"h)|E:]|p9^fş. 8=65%mHxJU出e<2WDG8U/:ϋxV UH'墻kV`ORU7EEdSDdb(B7txoY@&vT^/ $3Z]\V~U=3 \P- N3Dlvy ;Dt*R]~PIĔj7(VUQ ;#3zDlJ9LFъUCWhVkZwJyݜ/E#{[OjLJѼ^^Zb)tlmk/J@d, ы-a&לͫswig=lvoj)HpI˿gLMa:!kt'g{<`3H W:̩jӃEԾP$bYAȆ{D@OOނߏx _̷߇ts9n3)$?ۇ:2o{wQʈ KM~Ҩf٬S.:j|2Xx!vZ4 G-蔷WWkoƼV 0Ǵ$_\7=ŒwU.Y,׍vZ )rȡJղLz4mP ۹%`RGbHf&K(.YI۹}BLZ-;:A yZG[Tib;A# / +Gv3 X L˨EJ&E)נj6M' 1 ];^%M^ @öϙi~.]:OxF=kB>XXk|tAe9<<>9~nZ.VnQ,֟k0n렟6,wС%fwjݱ *ژ$SyOSpTZχQ Y:i!xQA+Bly$vMb#-Wdˋcxa@3'\)OzB v]~et/G/1hǶU߈-BLK@e8RwwV |3.)h](5;.W2DO"3@"mf}"Z~ܝ5cw6d}<`zA:\ hz5UmQZ9~[b2@кRسzO] {USOA֡?~29Ka_>x]Ņŭq}~]KKt|>׃33Ȁ!>.R5Mn^ё7 W(ii%CΌh%+Pcf|`C/zfd˹`P{YHĵl /t낉)Bo;PC 95z+zEq+ ۵SiQ BeA瀲&(d| c%$y!4̊c/KC<2`ɘ6>6@;ILW1K*?_{a}7۟eFy9L QcxE6pNP:u]1I}S/m2-H iZTgX~=t!^ZXjJB9"3 D=CI,2&3bm.rJ}C̻~.kOb1MFְ2Sc1wle %bڴPC*;UG[nb?2O?BmŐaH D+~S2Z,d𧱮sV@/pf0Z m-E_j* XI ^||BFxQOdZjsRkfGJP5DY~@JO+0r E؊TomNUC-V-\"۝&θBof %f?#矋 ]a:mrag^^ڊ"'m‹665u-95b(˰IGcei^n@Sl+eADԃ7ԖחXC)&r M>wʿQc^Abd懷&{pU_ۧq7ȜU0˯4cS7!/*lkjv R/ A5$8[+'nv׎5zۿ7%&zw8g"mQv`f ? 5\[Ni"-cokS\K7]@rohUA $ϖly#D'x3B ?`|J9?eI[G _IQΨT~}"jmz[NI`)\]jP'*Lo2m\>;wyHsvu ۀ3,_iXH.6)If㛵c&%O@YU ڸ_tp*:1,B611+3}U'1۪aO^6?B WKl)dװd6N`dE:W'M]= P+BSNʠBi_wv; =}w3z!j1Rǃ95U") cv&KrUyJР;RΚӝ]px3C{0y(o޻,p"Y61w+!WuİN8%oy!msyH\p*ƒ:ûD@_| )8>am3w͙i &:0Tty)se bKY4XwY0GhTr컓ZBZ{jCK@L77⧸x{GJ xM@ct9p+Dkq^K'c"cɑvi_50yӮ<I~_#Nտp΄F5sj#}Nإ1kT/aȗT jױͪK@6Ag ?q|l82[Y3 ؍Vfl~"n"=&sXEĈˊ1ؘd6HC0UzNƹJ|TdfYAg.+X\oh֞חN^֜Re+SwD>j1܃SKlt;*b& P z+ {s@ KwHZ]PuʁqI* B=j80_ˬ@YjkwIc6mgbImÖ5s"~o,һ#Ē&3k}_0`ZWe7nHS5LdM2OOG_ `gKĻs <t7#f#~iMV4$ Ez>΂̟˨զ F-jTlx[#|({}Yp8m'={ȳW"\."Z7=5>8ӥ 8|,Bձ5Ż6Cy}CSt̓Gl 38`Hs8k5K`Ecs_\B~ "?(V6L䤷~fyoIx@j{d ΟIA3bRŠj3 T5+gd3Wdy@r"xvgATLӁ̤@Mc3ItSio BUf9◀2TaϧٚK@5u1"ɯٙ^] lV` \E:ӝ]6 sO2 /02;ۛύޫ\9mz!ѻ9R4A4\Nz_Km|+eu"U^YUQUXVMMt1GIԚ Sirsޢ97 ;SgG-w6գ伵 +TPgLGV]Qoަڗ+Nv:~C2;z,hqsm>;۴k!)R@rnD-poBl،7ɚ&!x[_ɵ{6WˆMdd8IƇU dR| M=>Fd`NTt&Kۂ?mXISgجӷުbh.^s$$P ̏J*hy[y'Iq~J^Y8x  ⺈ajӳ\Zю葚$LEE jg&^1S'wߔpgTT  pzTҙppI> a'؅ÚkH=K C?/ÚDQ.*QsB%V9({,4$vI4]#fV^6Z6ퟬk׀COǵ\z}w~={ԙ==^7ϻI2,D `zy{Ed8$JsB\%KhLW/6%w4eVk:NtZ/[ r%7>;QRqaR9I e9 (y!Hġ<7Y՝,YJوJ:%'wL32|k}K,]k`;x[Sn;ol~MsU:gG&[Բ2]2]A`Α(ޢ j:#Pz^\x@~h׏7ʬ' ŷnez*7=CD#*(iǕR{=Nԅɺn+0"?l.uNcTPUrVSzlf=lk7*mi& gƴ<0qAㄸ{c13ytѠ8LMPw "@ޒx- 8>ŵ)qsyV`BR ?>:AznV/:3:lQRNq }\@7y͏(JU xMۡ,1Cxi) DWFэB Wfm7R]&ƔYgsxEi/8w @SӬY֕λ$ <"2ɝ? vfK-L.- kc`4A4o)ƶt~'[E5-2"ڽs5pW駛$G̮vcL&>S߶R<v6)d{U$Aƌ (i ځO !~KUZ]ċkUEނl`$Ə5ypn[nSqw@TC]i+`Fq_w,j!SThP~emk"E߁- ͎Lط=}"+WE|Y8S kw?b>B*M_%2y{DeTv&fa u d%cLo;+Z,1iplM0l1ȧ~or\~y̶ 7 zs.EKvԮ o>m?:F[RGkzcc=EPQc%;G1A5tSbĒpLKrQ7DIEQ1H^bUE rŷY:芡hk 895>]x}Q&B #\^V~s8BP *[ M}r8Obn:ȅAZwu`j]4T9w,6|>XlkehΛMG~֦5On `LÄsjIt.~o_Eb2H\f!"2FyHa%6\^^Ε`Q(#Yp|{Q`EFe["X*)0Ke$O*GӂT@>NĶ|Is X?X/A 33ߊ9UH0 4!,4mtXjk$؞\aUH'$` T?N(G3% JɚXvBjH(<ӺQ5E f#B(FԚKhkU7^L+ O.!p+0;6|%~TdߙnvK&X(I]f'1+Jr”&<#Lƿh9fYV ui󌮎c 3÷doÿX{SNA٥{$bU!bx_KZF*7RD+/2E)  W@6(V\8X뿕EhD\PE\yP@T`~X% ]X~P,) tĨ =F]i}\7?|G՜rsia zv'u}0Wdm^ȻͷZ5Tk=Ns\p/+یFΉ]qSo#5+x=klKZg>2w=IL͙0YEf'6ђ奄]M={eЮ1+)/Ŭe \%P">d \&KBWcDץ-pSiu:J?y#:&MX.5٣1>778UMoWN1S}F(wA߻OJ, |Cjn1aD8λ2icQxӣgsDmZI?ycun?{[)sǒ$]Ǔ$wq+r7fIszLk6=w#[Ĺ>o>hzm{u\mn^ElJ3&luA$IX)cVVFlB$1fX2W*cp=Oտ/']ŶBPOݿNs_}(d3!Eo WVuh^c̛b,m"P29BnH 75R(xDWK;s*Q[ f _ ꕳ=*ykL4:yd^pY{PH.\+) .-Mj~ `v bfHw{X6یWwvZԣ˘y?^e_E iSoi r8M3 k~cۄU9':$=xuuOL:ۡE66& 2x8##Q+ \ Ewrq%{\Z`5mɪA6 lci[H uDMvBz>~. ˏjX^܇ˢS{JHgq؎]ĝKXϮZ<_ DNgsQQq5˾wwwCpww|p܂Kwww$헗DWoc/&WIl=AfZgt4hakO*Đg !wcp@Y=pX2ibe ֚7{ƒfM2ƸOx;w=qO"47'Q6uҹ$<_ՌgGQDС8N#%b vM ?s-PFF2<;w0.GQmrmlxL X;IAuMF#<)+Ufg>l׸) 6)ףxD4kBM>FX{,a!p39kծIHfX魋H)1``H}:&77/ `tIj\.-K0=a2+rs1OEE.̜U8o=$#tzc Cx8˞`;APrYf|w#ՠOt1n* .2Í.0  m9̘:ςEa,h (KeU*+IA5KDV;{ җem]80;M,Ղ:ʯ簬\4ds+ug"a53/7r9C&~3Se'SQ[9;|G ]_cC7: |T0t?\˴ O6{IUj*h tX4ٺw!̯-dv|1W:" T^wjQqєXXn]cn½2Н, ]jrmۺ5a^aA|9ze-LI챪 5-WV^⸎fwz\~/vcRβԑՆDߣy}O\1Ԡ1W?^d9p*V;>L@fiq}E݈h$ū.!~Ym"9d iE -J^2hn:#supNY?gp&*8WT2::Rf2 82:3C *&)Vw>36Zj!6wmՋ5hm\vR4EĻU[U.}\}{uI:񇗢rͅ2cG#^i ŏCIcZcFӴiټ)GJZLn-/{).^aN=pk8y}FYgj5IEc?]NNAD&Ws'm)?j9&ŏΒ`T6NRԉnrc9Fa&@]1嶀SΉ'SR6f]r s=m<+gķ[+O0\0ϵS~>~5=8(wi5~ՄF-Os f} _EWd6y>m&?1?N!EV5a0CI_+$6To'YQk_M網.Z_` ՙYBIfIpۯ4/(%UӋVV{ȘU% w.| zD˹٦_? qT;EҐ LZiGtI~Z_ZiYC\>Xd7,K3D=D#,ߧ{~4!31/KN?~/Sl %טAK&!┇ԻIXue7O$)N-3Wiߟ">9Pn&O~BP-sj_$h2=.\2Bd7H+FaV/A펒li_e@S$JN%sFい;8NgTB%u*JE;0u6Z ]p]]&e&B"Bde@bP 9FAD~3Զר]jYRlHW.҅=:l*pRTlp䨠-rel{rTv쵲+PH@' M,QyP|r5R.Ti_62YTqI0F<ދ9?rW[o1ӟb?JlA, Zway-.hO:CˬFACemM4laod{GwdKMvq2)y a>'Vhᙯ%Ex~17;',3=F^bHTP%-1O* *b:Jm"$̸73q@Ǐۿ'=,^=M7+̙0ܾ-*^<;Ks}F:{$)Ǹ˿O+x:n֜?8X[zqj{lakͩoo pqQqm8e<5=d]\]]8e]\=,,9}-dۅ>?xW@ 78XedxxT$$DdtTtt4T44 L\l LL44lBl<|t,"bB|b\|{M80`h80p80 MJoҿt8,6[˃[mcD]J3dCh .Rk &TWr:~4pW7-~zZya >KzΪS`(U*6 tlLP'67Kf! #qqNa~f,p`SxRVY{90O)h2%:lgѾ(_",_HF+%#(_bqsh*!]Oeo_N*ؒu*3N"x6q*t(%Yr$ my1)ߙ8|_iScF[O1qxѶϰs-N,`_&^4<(kI_L_v'cK ~q4@S}^MҒt-sLe>ny$7ٶmvj%dCo3A'ypgu4_٢UlWzMi/|,{^ɻܪo~^w̧_:~g Pr!Ygvx) +ޓ1͵$GJ`:_$בEC2X5l00l ӗCBĴ\G;oC䬟wʪv7l?mf1f>P(} ,o:uVKȹe;gee=eERkk)W|8D,,m4oGBW)Uς'DBgf\ IGC}f}٩R2@ă~Ezx <VsՉ0#mŌ ϋcELGFy|˪N+/鿼y<{_{Oב=#g5`ؚ?ßXP\) Ӊ!r}#.#{=s6Ee5_il~Â{B<mOrR/΋I-Ud s_Z+;LPDX\;<e|FZ"/WǷχiui)n*)iC\RECR rn`*<K }ʜ @]W.oMmN%E,p !!DqT ' b)^LDȇ)n}ʴ\dyivm8}t\4|d0").i̮f9,L.逐PNuyU;*].~rmp ԼbMO5o(2/^GK*3FN6Uwsg!w\a/ f4M^~,g)R|LZ:BmKP|4 \4^\|Xz|=6E4r8HTƎ$u6|Ļ"^8iHC+(\4#`ӻOk"^ lv{ =6 JXE<]>Ŷ4+4=dcؒ&F[ Sw)3Ulm}-wa'*EޚR"ޠn3?sqy38|16bnN%S6$0ؾ(cأy<ᔧ&sIiDkt/ %D&}0i6z("Cʹvb ̈vyfSg9捉j\z ^x\%56,m85߯5RcTYdݐ \5ɉo}kbӷdOٸݞSY;~D8h=<?+ƤX] 90xjzU/}s[8"RDqk:r14д,q0-k(DAهŸx vD 2]Jm\6/τ7YGpk&,J@ƞ@) ">M5N&e<^pV8l2)j'YbU|.sTx(ܟ(GI0,zl,EYQmx`!eU:[p,m&qG(nE ,Fepm$1YkՂ.$>$mڕ,v@aζrMLBlu<ݻrl_,Q3iu]<͘cBC61z&K4HBLcQbMTsg!ϛa;ٚk&̇ Dž2Q:/Ќ,ȖLyCQ̚ϓțl˹`]UfF°(UxNcUo%i&M8mDR:՝jgAXK%+->pjzX{A)*s`<2UKchYhr)eNe|WV_DLS^/ŞOFaپtQ-G<ہڿ3hו[jRj* LVؘpQφv3:IUǃIپM|جI#LnNe3ҙV[wT_<%1 j(]_ޒY"sFd6 k=dnhq5\㜵ye%Ż6Vf}fn+Գp,.k&츹i鬤 q O)#Na^fK-˗Zhhp([V5K"PRu*g eSGY˺\DVFĆzA\KkS]ր١ZeL|W%UNv#@m&IKFfPH-uQ=eݝک-u}vJ U(Z 虁赶s!~L]l^֗ VU_D?ߵ(~S(}/^NjH.)?w>Ӹc]#c<$nDW\5! *Gp7y{x%0}8 lRm 35Ab^٨K✃VsӍ^#*cT7R'YvPNp\u[QggbR|(n{:\{X`I]thÔWIFY\rvKёfjvcvXaf3@~)Q $ F3̑1*Õ`"¡Q0!6na{˗îdFHVz O2˖zl_M!5h]km;!Ղ}"u(-ז@bXQ{T hȏ_Xo<$ =u CD ޟw]H!xXp\Q쟏zsfʛxQբqUNm +Vm{Pd_бr%]_OZt{9v7^l gG~PӚ]7 4ājaڝsJA'"@',As[ ⓥ"1 )0EVGC^%{G|$,k]xg2s3ljLͦh$ݫ%sFm+;Eՙ\c R*̲?MnK?wNȪGmf7]+M^M0{춀s5oe G)}.i_"=+? 54h||SS ~:zzy:*%}M /tc.V2 W31~Gawf6tLǥ.*ǰsVŐpS־?]wz\ v[6-QBjj״ܳONr*3)gxT(pOCTL rZ哥~I.,K 5^sq%Yls酤.4Y>[,AL<:Hj&Yʢq28&/f-wڰ he\j.&A>yr,]l%:%1*>WnS\UXv -O;)WPwfTʹ\9-YGz(1- `{SMGk ERw;NW;ʯ5Yz+J>J{_mqn{FXʕ[U1U*hE2^㖳{Y%SbA}{laSan{^k3ˊŎ?uUx$ 3S-/}GN18b?lʙS2jMNh5iK% &8i|'K&71)CT=+ѕU!m,cq5tt&fE Qq&"թ眃Ns!.қ9z݉߃uͥU`qj%f #g+c&gV$P+pGZ-iXZW['& <.rڃ,Sa&-y@:tzˁΥ^̓~Z2V?2&©ʡ :6LQF:7K7WvR5?uD=V8EGlW4j4Dy2MM7(.Xo2[Woh!SI~N-ϐY#"%vi2HxAߢ+LQ:p̼7m~/M ѕzq>w>j]9?žZ5/^>.[n ne3Gq7׮.(sP-xFѮ?lx2yaseH݁wdzےt+8XO2%= rXJ{~HD`[ea)=utzb8ޥi2G9a3V3ʏT_gMsykJ<|fG)f'M1COeKu^VXAl,NL w&#pEmEۓ#~7x~2Xhf~!ihT/Yq5ԛ86s|ܢO^%iRZ<:U3B~-x&3bsqE] rH@ȇUF"ꝇ34r*ܵ 3!Hq|n ˇrt ˱OV8LC2yU %܃e͓ދMwV41ol?l7u`> z_6S8Kø D E$<)*xO?!3TTcO %gW"!igJ/$Ěl`++^*`iӔ37 ļ\'ZN,NCtzJ&*o8!N# ,u>i䭃f$;K4jv1Xa4a@M!G3pDt&߫Ɠ8^ ͨ1*?)=dxS% ѥDܕEH )S lSNVF LɁIkuYŋheOH7\ES89+ݡBIeM29 l`ʔB凬 K pDBB$*1XǣJE$`~pT ^҅XS9ő3]?(w\EM8d#rb2FiY.6dPժ%EPSv>+˟fDMz$ WSt_xPW˧ ':mAl=W^k>esT&mGϲo* ьfkMs A{Eڣlԓ P?o@ GŒug@_a:ڱs ; r#'a3$ԃgۿh _ͻٽ%3,"t]ǥZ.|Rрޠ)Pha>'"ZֻʸA6x<|xoصBB;H]@ce%Ǔ$utEqϫ@x(N̽r֚͋ i.Fjak"vF2]FDLb8f%j8'gRTݑ\)IV7\\7wEL1 ʀ|_bDv9 ,!!}4:/ gLEf}ǘiת{ g#ȵ R`=)("$/2Y }1`As3)UF%6:ʑ794QR|֝k$OZj=d(E#I<>^;+.#16LӃLaASV# tXIovfdZ8(#Jc(gt`:QG˖X@o9j/6i>;yI5w@=WCc@ўG̬;n< Lg-AȒ"eoB"UڧCk =Rr3{R9b $m|_{mq]- G_g|v:\(Kw3Evq t E|\DŁťƣִ0ws $Lއ-22(ta5i^v5T-ˏP!`R:qNC"8]aJv ɚT<-/K,/y~{ W DՌj}{@ͧ7t7M.(0 M BU`=cfL$!:tv)f'\UҘɍiE&=̯͘ A_i2 ! 0]{H`f4y9G$]FA)h[QPUZ:\8XnP ڊ?_TPU%_逦._JXh32Om+Lmȕhҁ=8m_e\>+6+ޯkyI3S#Z/ܐ6;ͮo ?ҩf7末2#df(q`(eR?P_rl,?U8@-M*%}y_H! 9t _0l\j*n.i)M <īŀ9#txB tFGZZtvN΂Fj_pCKjH%G[F#tUpa*oj , P3dBֶ &rA|Oߢ &x yݐ w6&Z vJg  3IYRߐcP0{j,Nz}KO& g1W=MkĪUeP+^zRdP)Qɦ,,Q+e9 r4IoB^`1.b˷n<[~_ 6WKK|R2͍4X\`Y c[%zTK<ohn@1<>RcrLEzArfnfn&^I䐄PJX^\OwRr Mm 4VV k|9tVV6,Po&|gw^(Ko%!OTjj3W`͑P~VUz{y(3M{ȡ6'"%MD]G4+KO vâ#"X8x\jn-/ghZcVX:YK}[DG4V{:~\5U8szug V\8 l9J Kn v w ^Px6zgz\;֦2s\6Y=glRx.BmҼs*ҊEHKcj.;WSu'`{;Cr:4Fxe믢Iý>#ws=zVQ4JZ xV*' N&tĬEd|-i^zJ~OƦǓwqW='B!sh<>7 2hyj9-.):u匊́ B_ {=0 Z#m;;dHf/|+۞hX=;0;V58 %]#OIdeeκy$mk_-{g%_ơYucXaٯEԣףK1.8 ?z[d>D@駹zSE¶<?4VUz;b_&:m9\kMR=ւʣmp5'=ݚ>sn%ϗ Μ_gѩ||_5ySkiw7M=Sӻ=L}JG؟(A 4\KI0lyig (!^(aho3t:K; +]BOvZ /soC*F`Zz&humW#G'+~, 깓vlJ[˪|!}r}e"Wyr<|vt'Fx3;bX6Woښiߎ&鞠7/[|;*9{ڃpsߒ.Mt>1tNɌ67Zk㻒i[-hPKEPJf;}X@iX$9;يcY=Q5'\[%Z6ALqgs!3/:fKoa=!:wi TS9[>ygUA4U\֩B"#P{Nǥ޶\^ޡ /Et"ţ33K})2*90\ nٯod B7C/bn\*۱:7~.u^tЎ9olpYi\@~u9o 5:2vfۭylw3H66r_t.y(FSO-8ɦ(FwSlUk&<)_5'Jv#Ү]mU ߤ[2{uNԣӓӬD0`UUquWZ~5[u%qY~PQSrgF/xyn0ߝ}[Ɏ:ݰB_J3+r~]>j$/Go4cjSI 񧐌Xor`(dl{b'. I61>QH M$*7޶A/itWxk>W$,M=5 dGE AEyLz~]V .ǨtQ]I&g#%`&bm"qvZ"G mYH\_Qmcﲳ&ϓt{Ƃ.*S.Zf=Rg'lF#0~`!<^f-Hr?g6Y[&ggUGe̠ 9eFoy{X p;btG V=5$ ru@oĞ䁉1>ش_rx zpm|B66lPݙl)#/:PyB0kyL w=!~ e t>Xuw_$HW=eRG͓(,sܮ{2[rjn& jx<Ưs`䦨& 9(U1X!M.uMeUG*>ѪTKw4>maO?Um ]4d{\urޑπ1Ό#;𺉹Y0m۩O5u}ɅZ _ N__˙7EFXj󴹨BW5<)W+Ɨtd~Qʜӎzq,CXn<,VY![6_p/oYq~)P:5l'osxVb[s€H|3n!:d[qu8mL ^_ &<LBmv-%o9Cxm+c>T=t>s|杁Z72ZGÐ%?pQ ;-_p+lJ;(o+q4bhy%^3#1k* Sd1SLVKG|F%D5N)ޛk:}tB G鏁!yՆp5 otم._5I7?iFOjqV9xlx[~Ȱ+nT^x^*-,-yqQ+-]6E Sr2/ V MՋ.GJ&&?6vMO0w*>2s&|r2䚰-KwchжawB1* E=•n.))o{Od#t6q+/A8Jӻo)xܯ!tu#E=NYkH"r.piQV3{H?R] ⾉t퀘=☉jgY_=ACp\V:i '2L߽֫ N}& ʝSN9h|.&t#UV#f%6>ݙ+m6,שmnCXVW<"HW.*fEoVL܊ڛFs+F؄~c^)K̓0ꆖ{txō:O_Gw sMڬw~r2_\}?mrtZ3͏vVSK4\gd Z Q\Uf%OљujpbHvԽ82(S#O@Lu3&].m7qvn D$މ2l!8G+F9ʊZ^{v,7 _bҳNF/{7qE\2Z8J`KP; h+,\zrQePF8W+"p xeX=g@7gیu̡01;}ьr/(Hhmc/T߿/5}Rl| >]x[gDQQURؘY/ڮf4,{)8Q)忬F*Yy&df|:2BήKV..F5ySe)ZteUɧXS4JЩچ8Am{@-Xxn=l6{2Ч2LL%;_!l;ra׸X,B'p&EADSLIFu>Fl\BX ,+:oD]n/7( xc -ɹˤNNcA_࿋pSd7hVQdB6+ as/Ty?9v~Ii.Ҟʑi{8/^v6\P??rTK>8ǁ/g(+;X~}sfLoc~?? ҟOb&M&2Cɦ1g)^k ȱԅc{x? ̢\[CotUn,Cg0R2G14$[Cob8B -'OQ9l-:GNjҹ1KAIș]57]5;Gk[JE ==+tjSd)GLS&kYà iLt/*aW1]K}g㋿qBJ>D39%|sJP3 )?GOS\#2KSV WetN? zcщ\Q7y_h$go8_=m |i9b8Tyo|-JMM^o2,7XQꉐޤ\8&wқ>'62v8̓o\xtt`d#eq /hg c` 9ޱʗ a:](ނS&/rӲ/e4vto?7y\Ґx3Ye6\i뭇'տ4RW]/Ҵ)zC*U]Ni@+ }I_+Lc=Pybhf;|'Mٓ{en`^N*1V2'/ 60)NIʃ0cerN"p%UQmlHSd6vjlvāv\a,-DȭъNMJxqh@Eu.#O?VF< d&(C IY}nۖ, }gư$LI%o7?kwiSK\Rgbw/E6G⸳ )ئ\=R$ }-#IfXM6VC|7~VO7+2m X495Wk|Ig>e#nlT.t#yS>uϴ*"mR`"Mf}hSqّOށo}g=*ʚ-Q5Cן`95S i9YB:!aDžhݲ2\>IeT\Vv}Z/7 Z9>7: Wy=s}Ǚ En I佚N\e{vh{jRInOJ7w=>o r6grZOd ZG^Tڻ$ rlgiT" 1֠L# #Y*k`AziDb-:8҃"fr\'8g|rIOjvhy<˗]35??n)zUw/Y5{}RuloEŁ ]嘁vJ8GxD|ѐzfC-PZgX/re'뿁oyϘM;/` gȊ 4T;/͛4@pE}RV/P}JxxV]X3%37g3\2.Ywڑ93?]glsE3|ZPn5jPoYk3͋.[9.Ö)spF*~al=@Gb*;ލ" F=R-C WI ^&4UE"'2' BU%ӞMz0U48MX`ZdEdZ>~/ha[ujosHqys?UZH{rT~GPtB Aǫ^4=:rD,2*Ⱥ? R_$<_[L9[b.UocHM|I|j. x6D.&hMj1Bg@(TpaF$+;#D"V%-bHӳK) f(qTwVGYn- v 75x8\¥ִ!2jqbCȝL[e4AϽoϋ:0hf#& >WR0/7z^* pj ~hP "\ @%eQB1rH$ɫf+A=VOxbN"{`#\cCփ0gN:~"gC)bǦz{O$o9ܴv}1N'KiSQ];k[OCq]ْIؼĒZ؏[?iSWY Nz.iArxC>wiHӾي۱&mGhC0dG덪4jRreE A6l|! "}뽒:ݭ@݈z.ƹu*TZ:,-'.[]6F ڝ"8,@W!cFliR!'d:TjE|k4v:<"N`"BW[s9FHK/PC̩(9%mv@CYk25 NzctҢv{3\6&Nje˖*9gJN/#'<9F:c7Ct9*u%(|h`Lzo S댗ܤoO( ʆDC3l8aڙB>5Hfh&s袍4Kn+{~_fIYuFZӘLUkU+.?YIR2$4f+\i̬ic2Zsi H\f(sie;ڙCy՗f3 {TT-B5Lab8ͣB q+P[zu&=*iOrRv,\1.)GӴ|iv971KlH'cG;۸>듟.>o[9߭B6MD@MmXP7#h!qTJDBpv A |XRIC^+KyPulfus3 Hh1{RWZVc?WUdzR} ۩U,[[-+ѕ1c E\om׌đT`3y-0go:(8 ue憥S>rnZ'EJ6.k2N1m͸';iod' ]&@S54[NՓ1=>#W Hر '/:eTZC@v /QtN`bnV A?O.!7?٩y| ՌgH< <=5%ղ=-vD"B%Il6fC'cWqYn,O׮V}T;Voŵ:͢ h:#_(#qeIEVZ|K!0Ƽ:O8EF0 TF3u7zs*2R:!L/B&IXӎ<.:Gjbb墜="ǩ*fV}#̟`B^!w{~K9\T?_R ^XF~@;MyXcnNAlhFtԛ3W x˶h5I]i!x3C0*ʜyňz}ohb+%_0*>=l6BSz}Y}1" w-W]d]Ra@[R*z L葜z_PHܓX 8,^\y{Xژc:~ NK?o:` B)X\Uj{z궻?AoGo{9 / u {wqѺ#c|96ʘ%V#Z9)Ȟdwq~h] &.Fy~߅ +7#C܅%n}g.7u{uû':O"? (JVO) SUu&b`Hjaw6KHy)!svSR#WS/UicɣAoQ0m݉DfR[v㒭4zjgh C#O\;0tP)QQv)΄AҠEz"_.-D2ɴqz (eXӸ׋BI0` )ŏgo*͝iۇoN$vs7jnʆ3Ǝ{~ V§Ҧ"r(#)̋-k) ֱ>TFǽOq;vw&@$ !hw9mEA+/<+{wt:2ɤ q F3u3ns4;]i$W[A~Br! fYl.uC5ZX.\Qzͻ ;K} l ]f;Da+bKiⱩݲWg:$.8|Vjc0-~^;S?U{RgR h#@?!yX3}0al֝w'r9IEl0#Жpf3@,w\;%zKl&OVaޕ3x)wU5={Fh ҨnWZ4Vcvs+cGNO<Ļ&8_*=bw95NγqbhLeLR֭1>1^V/X*6p(}JԴDR-YAThΈ P9ݧȱ}x#(3Y_]g!4l`+KM(`mMwz9'NMр ^?O>0=c"g!N@,Rk$~.*C9ՙz53 ξ ή}RK֯W'lEC>oL}ƈ[t\!b2mQJdD1S )g_RbG犙,eQK2װ<Bwx})@?g1>] lq]~}Dx 2ŜUv+; c5_K>|nbAЕyblkUP0.z* D]'{Ss77`1lw W*]9jpB]1wN`,3y [mvK,T09; #̍rF.2lnӹf@Lė".!9]Mےڮ(N 2 5zfEg~=”ٸJJ}\kr ,9`@Zm4У;+qMyX1{| A;My=i'] ͨ("iܠ#5 U)ׂ0dX1C /31'K*J$ZC!t*FoCH<{¿< c~t$1BC94pM-&5,YT" Ω"VdaKpT[fA3kx9H}2{FNME,w>0]/jDX{OY2Tļ7r_ F1>hsEV5X(S`Ànp}Y&h gT(N%g3KoMyt+nlUa&80wƃA\mKVeC:9Kջ]cVB 9R< !J)b`;F,TB6jڨGCJ}f,Q WO;N[ YSLdTwm8 .93ΤlDJM0&_>yA·VЇ2й/?y<-\7r32)iXvmDK ?Z (!zf ,C&HnG˥"i JঙQ넮 Ge~4[k";[NOGQ,2onet7ub8cW`P)n-O/sC7v M: ⏶b%pun?J(.Om0nhhG (ig 䳍h.Da(Zm@M4J 5;kBve?!dGz$#K6v|P̊ϖ 3"`]\v I i`m̧Rs }S+FE-&A8#[; F_W-}#,x%ғ'خ1aϹ`7e/>(taCFQ`yED5$6|}e;!&-At?& )ɢ,%mY)h}ټN'nqt1~RƗ "Q'=t`/H8/)A򲔣T86 YYxli rBaH xhTd) :+NZ%R 3:Vvl5-Á:ZDIi@x*=9RbX4,X+^l];:"($ AQ>#FH9|G3U$UVfZZT 5 U &d`׿mm~6{T`%uXP 0&\9WSӝWGk ?7nU5A $bࢉٟ^=;8u LLKACT*Z snmi<+OI0JH%͝aǭ\[9m}p8;uZm!"rí[?=Jk:] li cad$3'|{I99Qo \w, A] _ꮮu{OU% f:B&x¿G?gוzxKa xί2M ,ƯآGY(N]17 8j֍k6V9kǧ/k8"0p2ŸgK@Q@$-փjja1r0,7JNJ\T.HEH=">"і9}ݷyHddrUg&w2F0 ֔3#kc5_z '>G7<yW\CpRDg'ZfPDijLirrֲ/ eжI2;2ӹ'U0R.]Lg4tMt?j{Og7Rd`oj]YU^ KÚ^ gz\;*w{)=b^|à*ESOG}o_R \'-]**8 5Q_nX\˒Vˎ 2 4>ڴ {(B>F = gKHnOS! Vet.~Z\ Z\ЍpGɠ5?;l:WVGlWrCxN~} ׆J~JokW>e_945#+oi,+Y^ AJSř`2aY7Ab9k6dc{,t{8k&PhKw~'hwvy8 eW٧rG20 B2b{ܼ]J4s>S $f$j`͓xm|x0}' 2k_Oѯĩqr՜*f{g5KS<_?y~TL zL|㷿m_2s=3+aZcf{, 5fp'K㙛HH?$rnFh^)]79[=\&}:s_xkob7߯k3-2e e?G6qVV[XM֑kܗJʌ)Hup ]ݹz }nߊ Ug̔t3wzyn_zw:V r-Z0|s >59+.R1dҍUqvҙqKh`leMEb@OsO΃`Q6@f+n{Jm1J% ?ܰJwbFfPy w{0cef ~%!}> -,eGdy$s̉5)N FAew=8өō<, & In_ق'ٲOļv)1U.}I[C&&#iw4Hqn^2a:A`Jc  e,kwwFc[];kтIv*O丬Wly8VhKCw_$XF)(`^wUȱ 8PޓndJ"mKbh~T p:y*}˽r_WKAEU˹,7Wqv{0؍>ԠK,U@?X}c~DBfw05xիmLztu785 ЁT2cz(Oً}睲}&tk% Щ R߾ƒ7& B2#zwRtr`pcL_ÝrϚ}:#.-_E8峷}j7߅R |J%=3;r  ÒFۜEdnyk| dLH mшhQ<U]pi(X(hЁfCw+(Ef0_]6cF (Y4] a<tĄ<<Чܽ,By?^r6Z]ڷcrmGlnBHB[Wlvc94O{c~=2;||"FDbf|Z?wv6Wj\1%]|tI75C(Sh= Y36)jw "f1狊k{ͤ(y n$ʡ/tl~$5>}}#W[ك_7`@׵L*\9٭ B%j$u%j_>(lG'&}ѪrU@\WsR${H7zϦ!&ndb"b8naXFx5k.Ѓ~;183\SRw&\upId.Ξ^qv"-Fǭ$'9|Ǎt,iJi^ƣ(5(XuHaz!4sDJgoe]|?P){A>F,˯dxot7'-[{YY4CX1MzPN9(H֦6V :-h'tq6(y RuDz#la© ԖW GILLJ3y𵪠>e6YbLg&ǦP>eE !3rvu[!gwDCGpӎYQQ((R]1۳-G\I6J H7@^t#`(eb3˱Sa ZxG-除lI2,m,(lZƍ'}Ge`uf֜nIf'+\̚`] },9(R" 6Fn_h;`*v}BW;I-BK#%]*lk+2êdw[>f,Vc<*o˵’ӽ^>%ЍD#kDG4}b Ȝs1t#")2XtCd;TWx<AZLJ_$XSK;*3|{HS$)Dӑ~ pW'a38 ,nRImw2—9 #0+I=&Wz1ڶ[QR̨aT@F9R UV r0lS& 4F !oa!#d{W]#ll\TF5a H آ0'**l2/j˨[@u8IfHÈOCY^H5:G BG*Ǯ \l(gnMlwjTRe#uM4SiNwRĥ@9Hhr<)B=J@"L$[،g͚85i_Sm3YӚ/+ǝ}%cI,6 R^% ^5o l\*7mH,2U y%  W,˩Hr \*_ՠ&g4BRTjq8i#[Nu#Jtz, Q%6o2PTU0$:SAr\6o夺.jĢLRY15fa`0BOwHk6|>w@|:9x8ɖlD< [D#V2k]Q#ѷ,}R=vxTI*(,{U'ԔKl6}0GKkn2dRmt;~OE!Dp3|1F^*y=]:y P6UC=IABfܷ!TIź/yG a7'u9R.KhD&v!$45qMSJ|}~jA O֍ SC4$;:y#9H70@gUF! h˾m+ƦXUQd ^KqQ5}q nRA] lՊEaE%/}/:ډ `G8;,/ 0dyk7rdJ_2,.Y$ F{=R8?p|w *ͣ Y*E@6F'ldUb X:@KIHj#UG.Yw/c7%2+%à ^ /V^*V,a)񾙸zs̔GVÛ 01؛X Gvp4]h.=YEk$Sajw*S.8,yIE bH{6iI ۨ4.!JI[L:Km0\kM-Ztj)@r#"9]#@(=b>jd¬Pg2Ha[@_NOJHѭrb,jhlAz^N:t \‡_Q<dyZƍGnıDا9>lM sĪoN| †a8 | m=R]5bшV |_Uvyk(x$ ̭<`c֌󛞞^Æ(CxzM93jXg,liS==U:()A&SѡpLP}M;9!j-+k ]akN+ֈRekcu/ُzt(W8O锩ks!)۾u6Ae`!q,u3WiLQYP}M7?a3K!:o Y GY`Q!I'ٜ2q*X`|P.HȆ?UYJG +B=*Ey-2Pkи~ "pi!uy8 |4MTk؅DZ"RѺFosVJ43!)7o᏾I7 >m1?n=%(l`e͐(hN 0Z۪ޔ_K 6b[xLŔF.X^Z=T)RT#ݶ'?]D rhGAcnk?-|WR ׮8<] A?Ohي%x) ,D*9 1Ϲشz ֱaRaL}̌BUftFof])) wz$W*gڕM[['1 ^+iE ȎׇG|e,8ӹ)9Pfўp[H]ԽSD+xhrZ-z ])*(sv BѴBQܱ_Z(C`XEq#r>+Qx! ?{wu@[W"y'-X;"4 ɮpS98!lq -Q B>>wP5Tnkco(!W@'OcF^qLu 볗d"~tHϏ qN$4RM< , _~s2* !*5 QCW5b]jIWYdֺ*fBw_/B\ܙNrd^JhɹȬVo]L&40X\;ð'0| m"?j52,ï7,*$ tR)?"IO5:j{Tfײ@^5#:H0:10]TkE!}M=fas|10Z@yٖQRB~Єg0G3VcydB'_ZCAq_.-QaI͜|Kd޳Y}71L7!DyZtOjȱ+BCjL#dmSݥe|4,{0+R,Ntm9^6;ˏ UjbD:H:"L)oz`~ppCq<4xPŖ:E?@`62uь)b{wH"9\+xU4Γ&|+ ?WAv( k)KHgF| Ӛ|ݢ{ʐh8B~<\욗 w,kB DRXkʟ?M}QF^gḆ]$H'Y0cFܢh`M650t J击*PX¬5B=+N_#zY8hƵQ݃?zyEkGxe+>$4 !I"szv8 HX\M*.^,(s?؃;0g{&n&b01iȷ}ҧǟE ٔ^ d. i;SxU#NϠ*}M7tkc.M-IZʔ$#%lYƼ,G[`2,׏ut .!4T BhXa`R ],TǟLO0#ѵ9V΄:eZU6Sm ~q]vyȊ)O6~AoLm|iAArw!xb^Hx]n).?B Ct@֚K,S= qR^Ŭ'KLP_yh!GZ OGWLiӜƭa:a1F%rm?DT$ d'#2X:+-??ʰ6Ђ 16]mZ9Kt=u R1˥z/XΎXSf )/Ai pIWenj *5VUo'@[A4 />0hr0´Ȋ3 T wM3t`#`<Sb&=80NhS1 )R>\*Ka/NI*3H2 ,o' q3@LDL.w^ENN̙| /#|=$<aMT>_|(w^:}iywf36D)JWD1K@F$|e?e6ҨV0fK)ShI.id\W|Dr]U]Ckp]0<o!e%{# .1!?/-+#L#j]&K1ROy+b* C0ɰL3 RޯO**1ksDc#}XtV$[5D>wFj-ܥܿNрGI$/U>Q%B%*r>tI{?CO0=˂ZlyK y)kHk;a+ߘ eڸ5H{k2ہ8/W4K1.LƼ/f9HrʭV8^<]9\k,WȰ #Ni~QFQ JN&0 ! mVqM3)l==!&|,_!'17=ޠgzfnċ6̪ä}7@(Zcҩwt>˭xѿ rm`)a?M=Xm܇Ta1ĹYpSĩK0QYκI,"#d!|gу1$ϟofC)"ڃ_dhfQ[oд^O]G5`^$ES;\ u>)p l3FVW1ЯV9H~2էb&ab_hfD.}+h(!5+\8-’FUŦڠi?>u, @S:Mڙ͆G }卒1 }Ҭm&.&^ z*g\Y+1S{ךּё>zQa|9 坔* ra :aQ%4Vn/Z##]H(_rs{mVL,.%,lKű[k\.}]\c=,o2tr(4@/<]Y3ej(2[9V5ۺodtOK܊` ^%AF;*!]9z(0Wڧ+_lUE Z/wZ/c[^?Ca#w "(kyQǍ_&/p4V&RCҩ"B^_^+Cݎ% ъ+"\z<(Q,p1!51NhGKf9σJw* [LcFR(W\Le;IP ×lD*ix I5E~jM,O\ȐuAcQMrtg Їp/<̙pտ*eܿx8?ܲĒͶ.ܽڹ%bf*m a> $ָ x,je.ƂJ{w9z^VY)M*҉Zxy4~'ڽ8O_]Ax։3Tk[3y2i0}Ȼ6ȗ~7HVE>pRp3oa +hij[|T2gޫruᠫq<ӑ0fIǑ3"=%n7i,Ziw2#Sc0̌dAÚ{phN,.m{.FF:̑ѝsR.UW5LFW(FYf-k{uXrX3W%̖cqߍ\&M'hj$KI㝻s#F_jȑ/fsR5Zu i{XWqإfi!="rb?Ϻ4M爜DU+Ήe.扰vjg$T ̜ eS6yj(}@mMIð@4s (%7߃k'ֻP[6|Oƫ!pG k`윙J:/|} ֚2ՄOhme;I$2@q?^kud a]GEP-4/|,aNlYxIS|;w@Ci7+LO2?nN!.y97(n`M,sp{'e<7iΖ#IhH usN} NiDG?!K C9{]Wqr0wǟ2Dl,'~;(7 b6mb,F**WT-~UyF;*ھr~x^tT~05zP"JNY8I )8Ԕr¤YEK)W@v$1ٓUgA`+#k G f{ჄmcK $cL;+sAK$ۉ`SAqd!5X,)eB]mg7!NԉRemLc{Q9dg`Aʰ) x؄,3m8BK۸#>>7 ^P<}n3gw"!?̠ǎvf] 25Ho$BKH[-kso@tf@:\D,rfrӶB6қ} 5Cwñ΂[W2W.]Nm̍P8^T~0[6x面̧xGu^mt 0s41IluzRs{95ړwVW]MTѱ{OxZItU`rXbJJƿ}[DWpۣ:=f(##+6 FL07tifep\>惶 eq:rin';A}?yg%*՝d'M,_]MM;fAN$f2<|Y[y&yǦ^\dX&QQ=eGowD!dw':/`*m& Yq؁孫 )N.-v<7dB43Ham=g>ZS^-`vz+ĥNퟤk=X*R Vc }$\_MHjPy54 Q Gd]eV/U>EnJ[?Ɖ^=;Ȕ?&!fԖLT/PQ u"0۴L聋v ^nE5R;"2G iBP[Ǡ*&g1\+qnբZ`I)ףI )'KՉi?JZOF՚֝|;Cӈ M)΋ !5)jȘ߶zlQna" W ê1WCHdNVy>gU8~˓ L ". t唬RYl)u0)8o@p5ȘVوH^CUrW͗pϯ϶"7M=!=s(7:USmQdW2\Ah PZߌEjX /Bj4ZO =2jӥX^t0lݨ7ަf)jĂC5([y$1zI1MWC:T I zcem6rH{/2S ҃|䬈ݲiM*I !#h.cKfB8NC0#sMMCU8S:i]LX8Z1@P& Dr!lZOEBt5P0& c@(,ЍxMF+gHK"W+cd}%ݱ6J˜4<"'O NAw@ ^F(5nZHz0t*.hS\& 5*5ضM{7{:[_ - SKN<\ {v&Nfb۶mkĶm'+\I2mۙU|bsT=vtO&-QSH=X.<+ Cf->=U}Ĉ%\:]>d^+U >$=+c,f^6K-]!+c:W.^LH p>6W@C6!,Bn#C>  \"6 opWCOS@@ v aFSY ̪$V"WAֈٓrr%uibGv"ACMxje`,x =;6!]4݋M Y{tΑ0uˠ>(O &` l2X9sz?e_&+{pѸ&se,42ZU0m{?!%z[L!hnsa;±B9KP`{0]P0#Α9-hz<*d%d˚t'!z$ҷ-kKO YLM ɨ#YB!̵9h,5hET Ӝf! dWk eX=M[:R5UkʠyE_I[|92r~GoDc,e$꜠hx@EٱhrfdĭX6a AK5]nɎ9$Pø@;dmգ}h&%i$b()u#Fi2+8,Ϡ*UnL~=<6r`)Ai#Sv vБLo ~Y`^8Zqt~ݦo{<3LRuG>=?T t;~MJ+00+*RΉ_Ԑ)-"8j|x*7ր!%#N1&J<6g=y&":cS8o9J 5zgjIb]I6I)\HYxcGƔ|U\2vg-ÆA:M\q(|1@9~v0'A`g'qlGԒ,z#hPp*6ҋ;"꙽Q}sAd6wtYPR F:{\u0MVh7'1ͤܮM{x98Gg0!:_Q*Lh*fq?HGHp򿙧^y}Ms7q㍋f9kس)?GoiPBU[biDإnKDEWGrdi6^fTO_1'vFZy7-b3dGC5%8xr,  ƦlE3Y5^9{th\NqTo &b_8T(OPcm l g(N̩+q jӰ*kxۨ dsg<`B8:!X8gm@[5ֈ;m:ڌԁtjVR sô' Cyaf熃5\qUum4~Ao(g)HaO HӠ|(`t3Ulk`@m_Y's`yP=u;In(@Ö+2XC=U=c1g F4hNEVd>i gbr9{@6\Zz\XCQ. ݄Ͽ!+U E`GTXAս@&ZjQ2Զ2 })Z^g*P Ӹ#b#R9$1%^<)yyBb!0L|7 )9'BI1oyͰN` V-. Oc& UY[KA])"_/1)rl&k2Ƣ | Ɵm2B\#:NB!J^P/{ꤎ U #i'^skIZ-`Q#sfȋFyk3T:)pHQv ;co/܆Ws fX.0m`zwćrVMԱǎu9h`24ie,I4rjXh%Fз>1pJ2^B \j[l[QT*sMZBٝ ևɖWX/:٨N ƹ.Gj&!{rY)F/DbYGlzkHEWNXОgy HæEmߵ"Hv3B0>-[L " ~;Rtsۀ-tihX a~yJAŏ$y,U) ήM#4+;'oS{Egh9~l7):jJ<vN}}3 ɌD9Sމ뺢_Z@q_.zz81* Ȣ|Qx4(ͼ7_ :,<0, 0- d`դ.WuP5T|^w~_Wӎ[ ۂp{WnW":NoqM(z(YɬFmنA#r$viR>Qj(Z1"ӿ4x. SpZe.m)=xPDSIdUxqH=(İi [@Ry^k3 >pR*!. uRN\MMh׺ l5ڄ1T2ӯmF9{^?2W+*&xEr8,%@0R"a(bo c|:^ڶ',~bt*j wo?ٔZԌyzv(ȼ?(ٗ9( OKܕLݾ|><螉ݰm cperY7𝭻vgow&T|>|5ygw_3O0s׭w llťН8AI#I ߞ 7 C^bh P.oÅSZ2OR獂yP#8F~)W g[-GKCgKJ%Hc,GF$E)p F$JSQbk1*(Q-J/Go\u ! L$5(^S՜',|%s`*M`nnLdUK$rUIÐ/!ÙqUGId!thLS0hT`}Ug,4IhW!bИ ÅTi1+Ghi@WIW) m}S6 Zj4T4 X!&QaoC*p#"[!)V{B0s=`:X%8q[~\M:3:4tf.]70ش, *i|reQ=so , 8  &4?uq1Ͷ%K?7R~#ˏzuɚyoֺ|7C^?|ܒx0,Lo!rb^\M&qfj8`9fˊWd` [Q؉X)OXe`c8tUq,Clztz6i%oա+;22J^=/iu-M/j%sؓKMXLy4%xZ0օwtBō-y )ܫuim|7D#o|tdX~)I'K/i4]٦5qR53|p U|ogQ {\!ւ)#p^j KPp.M)Q9.R\ {dcL*]yX\A!q#m>+-@Koꅗip=FE\Tįzl _:8{,'|>x#&gp[xHAA+Y[qw8g<f8"#3cEi;B-sxփɻ {p\yL-EˑtmP%m S :m14T1`^d}hN9 a Xջ16ࣞpUig* YiշBPsPGFQ*lj .8}T+TۏDMF k4_\WӉuxMY+lijؑ}TM7N2^.Fezk%*ʷϪJ2M*DM.Q`wuj;(f8V;V+ Lӥr Ä#DX9~}R=qKdLbFS{UJRd&T.tV}AHfm=TԕxL9}k֬Bnh:2}XtOAKۖ6( ߎs_GQ5Jrow2p/3"P__3eR3kf9QM̈́+k={~F~edo)9"k=x33C5_=A#@>8 %&ֽݍL|3;}_\tsu9~hͭCyh Z''<#cv[Md/GYjBJ*W)&۸?~i#\_OYw>Y6Q5-*ϯ qP⃤k)]R;s__ K=_/ueBeZ 7G5 ʝ`nw̷5U ;_GgnfJm(`3g7w 7Y2tBwO Öjt.͡=+ئ)z}vqϻZK^m`A֑}a(٭@ђAK6vMnzFQ=w5.{V;i~HeGlFD wÞBR:ɻNB5gmyHq5"iSS*Ze]$3:,)׮wO¦(N[8|~y_r)r{,w5E},Ep #qgDp$RNoQf$YдD{#<,cU\\fZ_—iDĐ9YΈKz%_ȷ5yeD_ة6:D#2[ڇT6ej|8ÖwWi-j Oפ 7GqЦ'Q7"EbbAjcA%,wf@O6 K]dň\UسؿZwи࡬1C.&x|O [Ӱ6<LD:6=D=C%*_<2/+~CdA{բ@"HK ag,XfZA2Z*)<}#Ga3v|/|tn+Ԟ"f_/ wȧeU$VL60lrKNJz"PYL7 J&Jm-jb!tWwcn |h +Pi_7Ygg|"Fl` _Gh%y7ZiYωf!эr=<􈳞;cDd-:FIVIy݆ӫ `>+'[ ?ȑf):"qm<=s[&s5IB~k"}ewCvUvېۧCX"ld< [(, `J<@ڊNԌ@ fBfDYApH›<91Shlqu{,E5/Bߗ<Xq? >0uAW]zES}=Ҥb0i+| qzmK"BM{ڷsK2$.0"w@5{3nblT' 2vFRzOep|$/E[|j䱾E"U(ojzSX:Ev?BNd%8'vGUVjڄmZM=1g2\j#+ ]uZiͣ1Ɨu$W$+gLò/Cxm}mΫ7QK,ޡ.\( eH}*T0[9|Zy]S1OCS|0jȳQ@Z^irg*3zzV%V'tlNƍ̛ Gѳ`paC@hGNA^lȻtB.uku.(=(Q˿avF\SJօ%.Ypi"RP*ܗ_r$܈knX,Qnfx~':u+zk^G@Qc@\7W}_d_ b?a9/l%2Dnr<3/ =YhVP%$4ZY3i`D6-ГA-ld薓M: : eÄexF!?5Ⱥ-MCgZV BicsYyYY7yb+0ߡ8%DPFy#-N0F%X [mQ$71Xscp#R6tوYQA9R5ӥuk(4,W+'d+d,~ԸoLlٟwnL9<C'Q3ʺ^dѾdGB)=,܃_L.0+ŵ:"@H.K7HEoTF~ 2rÞqp{I{i_j "~Hmg&sC5a8a!2k;ǓM4?7bS?&!R$bwwv,Y7~B\*F%2*ZyզgDƸ{nPj-^\!5HOQ:+QgJ؍NHbr\qg䬞^wa}+|&!"Nt+;5R@FZ5L_ͪGI:& xIyIJ*CG f89ܨ䃄脮mQ7E$e!- iR`Z6.cnW&B X.ʓ)X[&}O66ߥ˘m6x5G#W?FjQCmqgIJ-*Nt 縄lsWKӚ:既N3FDA݅L\Q] m\jºAFTt[#ɰ]R+jJptn(z{q4m#))Ny_TWΑ ?p:S #mku qF[3Gq;KڃŠ-Q-R I!S]dz0NJơ@W]ISl;0WO.tt1C7.&h/Ԕ YT<TiIJVZ'Hg17Ï:PFtH HMϱDT1GmS%F!-4ůrNGhn#mFd~9$E&^FN9欀UO,av)C*y-Z>MDIMUL)a S/k|R*B(*WoPL7нZKo)ٿF#3ZQ>vb smDgkx)b;oI`.Ҳ۵]"sb,%y,) zD{pfM]jG.uL9Vg?&87qI/#c_NRHt8avZ,si_aRXb-/AìQj/hy3/c\8[jt%Wh0`if: R\Ǘ$% T[%ġk*.w* /_m:mHYsp"]G4HY 1bV3t~>1:=q$-.e'F0xA mDoƔGy5UjsiWdvHzf)fDi_'z!Q{z"0L A2יC׉D013ZL+ DyJ.i^BTPu>H!+5yID)\d6v^ r-~׮l m4D+^Am}jKB-KPKTf>>{nv^=-eКEn0!שْZk{tY_!Whޡ6mFG CaG`/./-J[:*4?sz (}tfv'}GE`]\¼MV2I߱ l[JdvԐֺBZMNKֲ`瞘(g7M#bț#TbmOD2:vm&Ǒ "XqA[7^/#tP0S~`B#T~ ^BǓޓKvMӯ>Ѯ7ޖ' 2.'vP{AN.ɕ\j!:b_*B"Rc}?pvitZkxC-vnIQ )}^s(J#fMnG}G&0%5^Y*b3օCe醥Lulq)d;adEOtXH(RWi.s;k|FBWsk|hVq .1׊Avb`+).Ѳ2P3< *)0q޾IXO=S \é[4XP_' o<G1΁^|Ԏ,V1r|d|.DAK.zg'/xZۂF)x5/9hSGRˋ,O7tHgQeqBC$[?6PZ~Xց]V) ]=!ئB)x69yց^ʘ󑪉v)p4cGcHBp<2zsqOh^R2/`F/tkਨRS:9爌jlU   B*Q8;hFgh(tla Ko/6o1mӥ=4GoA RgIH=CiIvZ|ajxcKFLN6k1lkoy 5ij5"\P6ʥ N*i@`\oɷ`Z'sW%7ʜe}MՍ\gzmZZYӘ>%Dh~=Vq&JChsA5#[D:9\-(&'*_ ›ǰPl,vWEg{eIѫgb=~:ZZXd)K@Lr ecc2׫1y%f|4td!u **]"S'[I}kOqջ8칋ndܙM>m׹U*CВ('rDbCS^MC? s'.gM<9D9Ky=H%U肖%QϽ/G U4I+][dk.:nY>[ϑ;*jYMƔ9}V:<|]k 6 H+5˳CoO-~VKcCRXnij7.F睕P @)L!?7T^j̯&P%TW[-TP/Uᔃw6LUlrPR%f=Qm2V(\Kߝ㢋xnMo9+~%,F]9,']V5NiH333333333;͐fL3sN33333SMvVT+MK3' ŵ9' *>r^OYt5'J!Lb!E#+~mjϋ萭˻?7b[M)Ʌw8+81AW|pƝvfL ã&XAH/zdMGZgfrT?ΊLNue&2w U4tHEWԹb'D:E=2` XS8Wт~ZVD/-\!\ScV׵Mf8|(4֏sǩ(ƀak3LsƊ!ja' b Z;!: 8êG*A}Xsd}k84u]{|KQkҮ/5yة -{t݉M 쎰wC_?10u 2v-0s=:̒$A0G$}2?*;d@g)PZLvZtbz~U|_Yh>zyF)]|H]Z=}Փ}:tJhMˢ;{X陽U%qxռ0́U2h"{#59@ 1{)TT&G˔=B v|v܆=S(e3-rakW =.1A/|۳]/2?*cfdG T^#3?Gg:8ʘY4,/5M`k[셦dIu{gag}VqoJD!b iҥ, bGӜvtBJ9'u3$z W<Hi-\5=tr?G\]\̳١m1c])Fa’tLmNĕǴ4ߤ0w 0H;.{l7Z)߱Ӓ9',`͑l0#KJ@]=p-Ͳ^OofUP6&=!L$,3$v* V>tM*Q9HD2ēi^L*󚻐iʻqW31 ,kt|~ܳevȝxI gjKYrU)F$9Z hK)f\QA3!c^ZU2mwKu˰rW[Q0f~?&q<"W؈eКnyvL˃iP9m$M:nb|J# s%>3B e[;s>GG/0iv sxFq],VB;l1d?r++=+EHt?0F/Vv':W[ck^%~xCf-W+Gb]Ru6& 7fqmPC'- ^6X=gBT( 1ܦ;ᗹ1!*\3G=^JBqFOyd+g `sm":c)f(J w ˆ~Š#T_fQKIj  4"MiM$!# 45Pv Я$Y"d+>q jARhyM2Ӭ*зs%"Т c4 Vddӭ + ge DIɭ|cvjő@_B5i[XD(qYܙ=!XJ %HV `w?n .GaLIk(Dy }B/a|#|K1y_#_a 8\&TS8 ۨf>#OS~!d-òdIQx䩥<#0#V >z9XBu!6t$I?z 4V݊\ lk dQМ?Hm7,',K`QrЇkJ>Jͪ}߫ksoDA?q-%tYpصJ Un,qKKޭD1'pzd?VkyTZ؈S>)o >$>"?^}jycw!W<<[fQiޝЬƲ ۟ՉX qW<~jض;r,ot :1UقWmm/E^ f ;C,zަ8@|tU)i{WΜD^uu X$)Ihlf,{ 5MN}YL)3?+b-#N|OȄ <g7K!oB,|\\Le~%6Zf,(}EaU`s2x#`e^P0CKw(G[cSK*\K"ZG`PMY2 ^,q0PQWRh˟&Ѩ[g!QvЅ1ꎖm8FN`.%,y9-I NïR!fKFcS[`LX &>8Kʺ a6ɣ/.<[GCofs iVPi&Q`h)WB"wg_;0RCݪ+laFGUO*h ]1d⌮6IWK@yY1(:d+# wbY:voy( zf\Ș7u M# DjUmB=#5jB26,o*]<؞3qHvgG1jz 6kW\!d\ c=F'[!7T gu۳avQ~e9`)udBslQxeE\IỶэoU_,<}u 8n7~} K,U@\qbUF(: y"-ܫ{-࿮)CEm,m!x墥c)/»7ϓ:4͑n~3u |$*h \ֻ\TT4Bnoķq~8 Jl&$~)˄`/e94fY6fP~p3$Tfә{w+*?D6]n `'[{2 5KI9#&`mgIfXtneL**8%3PJud=G8WCFEo"y3/@nqӲ{@d*b\fڨ2R, ѣvZ:J,g2~/I,Gwlj"(%T6brh!&ϕڅzK!Q; .6=3/>Cԑ+fnC6(W6T`wN쨱 =`r=([YpiRn_U,uIC}4(;c3!މʇ2^ۃ.gǂ?ҰpLUQ)>$uqqej]9JQk}(<| ŒۥPtѤ#$%2#-2yY{6TۖG{Nbc4H/j/߱pü wӶ  sp,,cGqd**K1 CLmk%)-sjk^칶?$1MCSJ' Al<(dYIjie[o]]o8m &3OQ+&@$ `nG?d[ծs.A }/IF9f8,a;a$'`ڶ3̡_lKWi k^(SH:|_B6q͑ Ac"79rVTcwPma|kn9d%Ql*˛,e 띫Z1o䴯-d~%p.5JysU-9BQ2<⤝W\*t֖fg6ad$^@!6:BegdGe}< Y]@Cщ21!ֺd9h]5'Y Ŝ`Pm Bb9C2 S'}|dGҵTZ,'*)>_R7rJyX$~ f *r ;lI$AMX*jCĩ?DgD%u o_H !sZ8TnEG>BcƙLBi!LAm44?s}${y0|N P=yrXPD yA$_"_j>1^O /`Ȍ E6.@Pm>[ǪXřP.{CWUuZNˀ48/Ҽv@ R a,nMu|͓VZs߉_O x%:8Q~'z$B$IKqv-T~$w$pAȿ <&M'pQX+<`im؁ޝ6<]x1f=E1A" -?q|ٸIJ&ɿˉE{4V(W ft@f*b,H meAz2m`_H\CO΀W&hwG:+.?R\5JSRԮX驂qyD%MxH%Qb6eD \B 빆'q5`@t6#[?,3O㛰{VdJ!"`&L7䃭Ԙ!K}!lРVb`a[ •6jyb^k:\y|dbnzZ=xJ UA)ءh${p7,b?Q&V,!mWW-4Kv$L5Ǜsaj3Vm[g-Cs<؏lTbgꬵp1/+ A]N9ԱX7?f< ,@A#+cBrX-`iv˪^V7ǣ҃o5G1"Ē~mTB#@kkebaiJ`G(6G=6ߺܦ@Gd:UPS.YGhz..z=^AvNj)Q4$e}IW沂Q@Ɨ|X"AXf #_:˽*#8"HXr?YY3՚4g _7iӗJ_9Ů. {&_,fֿhe,@ȲY__,fk;B 7O{;>>_;'H( 2"xE'm w?,E׮Kѻllv Pu/ޞx7_Wu&WL41b+l=]ڻCS5*ill]x?S`oIWQ*=q/9D򑒠2}}( |ˆcfsl b#ܿNL~MzEC;홬ZqFA}pBuͳ6y,18ڍQPq^:BJ YV>>Q\ź[VYҌ,2Ǿ&hCk0c^YjCԋD-&J1祉z"H758>Tf|(MlVُۿFmed1ªkm3MՂ;YAgȦG-QX|ops^VʽBpz󧨄X/B9WHj̣@sp <Q0P!.*PV -Vr,,5 uGҪ/|_Hyk* PF(\ ǒ=`׫s*pU-GW1j2H3XLxGȴ_yP29c <&fMfP+qYWR[m#$ǀ'*c5x yEY\;N[J\g}ٻ]ur`!Q_6s"_cN!\x9 gP kk),^b5U; FrF':FtׯCgr@_Pa<=(xFM ut?p6+lv~rr@jXzL}g쑟P 2Ev0sڦ7ɽ);Y-!Lʜ#m62.+uRH֌@ s&e/ +/b Isv].f kӞiT.%)+o !Kl %nBR4N n'"[嫫FV=:jf6++ߐx$Y4j<,t25ÔIA`(- 4잇 WO09iJ l9htjݠ {;s؍pcYSa5w0 <'Ey_mٔa锈'Z]JԶD\@&ZYRb/YbF>٬~pYSF׷kP ch1Z䰖.B:S>/iSܯs`k?)~\:,Gztz,$ё]-\<ҲhЙ6V֚ _5!1ࡑ;n6^L +A;Ю߶9)d !#;DK$Y]Ṿ,:&0gH*rFMczbg o]OB^&3:bxKs {fSs&zT(x7[6ZrQ~I%'8t#,JXHJ\ DSЕuų_4XU[47\=>UM[%.̒QNr'/:5UΜ"> F'L_7q0QNJ X̗">5I锫iQ>*HֹiwSֆvͨ9 ʹ_US 3M |җ= d 9K^V,wX2i7Q-|"4r.Uh )|X vqͻRYZ:2n[G,*K"9K:O74HX_N/̕# ~p "wZNM~w~+] CDPO+ׅ}xĈX!P .V-:5LQt{vϭesP*Sj4R~AUP/P;o͋.JlJYs|Sj3uMt(Qtm`폍{׻WنLa0kGI.>x?CgK3ǽ;_^zҀ|ً""~@X#q0E4 *PS(F KTx-6O̝iYi |Nzh>w 6\} [ter`$SX\}Y&_9m !kǖVy;/.E좁p}alnwqnqڡ!JshS(R-O#NkD?I1[:XB5rt *ތ Fyq h1<=vצϠǻ56kkl>wI\c;EOzan<\'P0pmy aa'CR707( ıC\"4m@%TF2a_}цz>.*R9$;&*J$O&(ͮ*@7 Ƒ!SHu4Fbv88I=0DجU败g>֯@_:ŋ T$w~mkk"?0=vA8#A, #ػ1s)QѰЫ jp:?=ꉊOq^f~w%kιQ2аv sAr`-֥ۗpԧ;$sD25l-4ՃgvGs"co@:u ʁɰEv\!9RNtb)viVTvdL;eE54?xfz'-╋&[?O1ֻq)g}IB5Հ=_yL i}},p>:YCQ%Loo2ɡ.+g"T"0 *7WϳKthgjL27A@ɱhy(eHdnܴ2Ja5VL* 裳1 _PGX׀$G[,LsU [E~9FAY~׺V+/x~0YˮRyl||88rhʸgwHYK'.aA8f/Wܰ@@_fq׫m%w5]95+@(9!9u,O#Y|D}5fV0>' WC)ڨKtJ6Jf i8$ׂdg&ZJxLTNL2yҋ =(EP R4BDI{^c$#=vqVwߢwʰ-Х]fQ|7t5a`&dV,HQ4lMPCdcED}o=+w$Aj^*Zp,Z#,údZ3E9|R΂ȆΜ#a9Wa'>/8?y˼~5zy/TNYjTaQ~iirmq?IP·`=n~fuAcV="!ʷEnмf*fLW2gc^~աDH{S{4[kk4ըLPfr[ٜ (v @x H95.5 "G5 _΁K@2,9F2 4THXHEe1tCNۣOoVF2PC?9n{HV/;ڮ>jP)f(a;.bR0ޢ/*uA6^k"`@ b"k`I'!:4 .A."= bӡI&vw@^R>XSѬ7@.c)Bno Ӽ=xp/Xh@FIgh"2PC4Z uߺ4`o#1V헥%~o ;\G35a&ݙLz"-/!7D>]JZu@oPe&)%Jm{sp!*Ld[S3AW,pA!'+5*je=uUtJf *i̎m^M|BaMdI”IMUs-k$:h%č򉺼:/Yuf)#!"RU@`Q9S:L J&/۪ԯO# N&)r(]zðXb"SQ!FO;2q #&q EKj5Qhh!P%3"* D;j bo'%[}y^dk5VXc(m8dO9OF+8Xb~[F)pxXcjU[fȐQr{ѭ]F6 M):fNHK=8릳_E]C},Sժ>QG 5pcaF⻨ڡb"xBIIJexme꽶pjۚj0r`.u+NSLΠ{Pex\&\>>OCمOb#Brրh 1F\#YgFBMn@ĖG*h:{#j$YTaM}ᇦ;i71REǸANnN[H SX;y #ʊ -\UN c&xjуY^4԰fC%_S<@ k"M èuKlT*KT^p=w/Bk_4yVeX.^_*4d/_ӡ[.OpJfZ8_it *7c˲um{mj۶m۶m۶ڶm}7Nsw_ET9ǦGEΑu7STe[u~s4At9`Ie0𔇡PU+nN`$ >|Պ{'nsMPx.AMG啒G*SS1rT)hhp6e"stDms~9Cy ClPXQetdHE1Aܒcsop,m_k̿ϛsQjPGΔG;oa[:KLUk?/#= \ZbF`Fe"rX'һ/{x)x{+pƙ|빽ad <017nprL?\@zovKSMLM$p)enf}J2ƫƱk4B JaKg4EibO˒"3;BgI“ΏΊ %HҴ弦|]^PURFßae*($OPYŬ(/XTtHƦD =Fbi5j<~zvQyɔޜk2?)'mu|^_MGDA=vBSyamfTuY HFkylT] l~?c-?Q{it:gD ,YɸRQ?sֽv{%=VmڸB| *_+ZXo^_SRQm3Y|ʐ*8pLM3s0Ŝo4 XQ<'KrLp̼4\|c+u)KxDKtVbd|0p"P=+jM2YwŜ9I~.A\LY^z* ň3]gEDξUZƧH:V JHNO?@ᬝ>B*/%6-=E:>' ~*Z}\%?+_&QZ/gxLGYݕ;kŚk@ s puI*ˉ?M!*h87.\R6I: =k*T}F"LZpz 9;Se̶Ր)d'phNJ[ͩl)fO rT;]vT۱?JD馫q-.lш/p}@"o?DUVtwid͒vԷz뭫^78= v՗1+t  ezQ+lt-`MZ Fitԭ,r5Ai [ I[O.m%܉RZZ-gϛS2gSЪBNGZf+ Ш#zS ړs,)[*Ŵ BT!dN4AA,bT@XUXP'FiJDi?0ŞVXv +D!׊2wJN97}X#DʚT^IjeB?1zc<>Q\E|?yH:[{–Z&v^svI= kd}Tjb{;&Ty+Yz2y3fœSЖ]~:#T5M 43n. 2:1<0pUVzAvM3zN18;ܾ`7n,a^-U䢓䐅͉,A^JYxSH;ad'Mb5E?!Uq8wnSe7} k  G^xgnPF`5맺n;=_/\Ϸ7+-C1z{{z%"$@3gW_!ؚc5ڶ-ʲE̓< +($"q]y@\m]H\]r/?ABn(_m5nDž>qL `'"Oj9U,=RGj}6ټ2{;pH0u(IəTAz,i5zpbs yt"y5!7A{A6bN+?3J4b4-1IQDT X / |50Hv"q,m*mT#-Lz*n(W~|9)5GZ^ #wN[ޟW4;"Z'5ۊ*V6˵A./[|kkLOe}ϳxxJČ,_`co2o-= |uTUooؾTˑxjI m컸}xƔtl__9 j/@u}?8Z.\;n@<78tpYa_;oyXO&cm9F"G1LlEݟ9QBTZ)\*JНUA&x Q.3/3롹d![2>n BBP!i#B ==C֧d~Un+`}4.!fU#&QUXZlƓåbvF(Fu8<ġ%/aT2Py3^r~'E~TJgFy%Ƥh{P0 !# ?$1^o"gKZC+j:Ի-Fv8X ^ 5o2+c9Akvq۷>>o| OHKr^ݺ>ᑍRwEmMqEOφO--3_˯:|'UV-8Uu_QA =~4%>,G88_%zZ|Y5lo|]]75>>xb|ngM,i$C7s-՗TV=ɰklp6zj)|GX+/!8t7 #vdCp]No11/RݰfLu*o"6mE^wM8ty1E8Dh~ ܛdMyDg󺼶%YzBwRA2{~D; Ŭ(ԕ8aNtG^r`IK (ctS ܸ/aqG b6+-(WK1\{Qíp /foeP/XHN/*sXJL~)jB: ceR[s# ri>oBAdlTZh2iԾdTW j_@oУfkD/lc(d``ofhcO(gA-iodhfcg!3?6&BZ.  Zbzf&F F֎ ,w@ `dԳ5231u42!;ÿ64kV?e`hJX0 t2#{BE32<*Z;a'p[.;"_?`PI64;vkZuN㉌*(ڢtRT@@qsdU~+]Yvz5,]V 3iޗ;(m]Np0N/1[$aqyl3műQr_ &PzGo*e"ll|~etȾy?_rghF2is~C% )D(6=a}Ccmm1@(j&MR,\y@A Rdwي?rCI0\&w;t!JN9Y3~ʖa@X^oZзqnƿx)5˂욕aۅMty" Nҙ;{O4V %,#c6 ۗY~`F}N=yu*E3 kPk)|9!b8Ϟz# :\.Na+Ԏׇ\w]*+t#&Y]^ʨ iq}P0 JdsaX,5 SH` k\'ȩvK>ʉw,'W5YUg5hctD\H? q!ύ /(.GZjcYoF =m[\gm7ZBԯwvy&Ne3 (cjlf_ﻛŌ~ 7HE.(3rO `S,xZYFK~Q5tm{cOgDIR?>fa5$w $~D4ζFHe\}ˆ!\{zv~k'ؼӝYّAT{xIbyq7ujeaVMv]T8KπZ8{Q@%{x6g(E|c\̡KϽ9["tbg_8Cfd /YRՂӛ}g >h5 T#'/L~PH"ϲZ Ik2u9{N:}YNc$i+{NƤ :iqdҭ@1ozَfjt^;m\jѐN&ZxgY:3戏 q?HE 5i4ܩjn/X oi%'sBDhǧKhP4)Ly84P=t[J@h:8EWЪ0v>P vXVbƏ-=M{S[! 'x\l.RO2t;l*[uEg@\, 庡&u)GjBb*)6r+z ]R@ǔzl,jEv۪?s |"pM(tb{)Z..ǚ$3uJO:3w/ynG2_~_+c-ḩ /J&5s|uWQ;0|V… eĪUǻ"{T Sٛ{ۋ{h?E[gfs 6X q@.6-V(F}[B%Un3 `4qm~ơ;mlpZ~:{}uiykgNiz5Z d8JA[HvUW*ւ)4Cl 72WvxQkVT@4]PlF}T'R,b3x24\R/ A|RR\Ux%Dv7A\Orw;i)BG}ʅwuadt8IZz`eoiEϫD6?I<33U[H)FaZn{YG,*&y?$Ӭ*ǒ􈎩T /}X_E (z\bT%#1 9GxYR2k P+tp=gj˺|-Et Db/^TRF^\Sx6k {l1[ԒJJB\nge5YBMJ66#`ھdSzfC q%%}%$$$1ՔZ";9p3'!)x38+٢XLifVz'*El.An@1eg@bIjgyaݫ;lv~fWڡ3늎E f\VIAL3L܋) J(cx,v5.D@wRpGTS7ں.=%n@^pH 6pԢ0]eٳL.KVQP&ӆUI#e< ~9Ɩ~P9ʤ^71p:H7 X)(h}\T>/tOY"-1˴Jt a/V00|Q$ SInI{:F̓pz :H،,=$͒Tmp ɲy4i&R yj9@O!O1 bTW(y1< xV{J~4aOٮ{ݴ2cwիʟ ](ϕm镯Vޯ{N>i|h|c_JU~@ޠ?+X̅:&5XH="ASJZ2 jrzjYK9 P V78I\Or$AOd±Ցj]ww?u0p!˂T3yJ6AܞTsM$,̟2 q *Y0ݒ:.PpD?Y*יmToB9HVZkRg,notSqEy#*qys|٭ՠ#}A|M|C-vaq o\~"۬ N .|5]_Ak c$vZ56Oh灪L%m(wJASBuGi*ز H= q5/zmx!lQz]xMU_z!7 W`?1+eΜ<񺯜^A:i[ zzoc0D{NlGp՟{C h1")2wpf~p̎5sT'5F/Fhm[9kThQo LJ7[zdKgH׃ ?cC WܤLTDV{8L8j8ԵxB [Cf/Z6S?D Wv߅21=%L*'V]TZV͉bJ, j:7}]ЙU/5j;4EG0hl n;Qy;{zy"-'t.Yǜ`,>-s|*JH ItЇ;kk~ FGmzphrxSV{2<r=~=Rpԉɶ'" S' qr&(UetT$ QPy>I;@9!6<%`?*=Xax)f. T_6,'(;s􏈻*CR۟ FjB)SniJȇۜD]* 'f>̟C@{_iUMHn3CB `ڂg'QB j!+cYڈp~ec1B /b"mA1% iMla {7\)[]_Y/^XV>7@ b  "H{<%T<ǥTFas2nj*ߪsƘ~g]휽BH74ZJѣ]%)77—y_yBwq [L` JF,|=!&[Wu 7EđLUm ]nc1ڗ*(5]t츃wzq'q'qaxbrEqpkI%`UχWA6[T iuG|DLanOʬ8en0"ZB=|? -jit⣓{B&#Eb"+y΀"2[>| PǔhRt;'GgFUD~4{[J(W>D m!J k)Vh*15Ρ -T_8hver˞ICJ ~wi_Iyo j{BqXugޖ5~r?WKqf c=y :SfM'3u80oZwDf֥m* Lftdlz$2α(9tp-逾B5gg'Szj_ʅ|(egzUn̪Rhd= 7IoARfڊ x -4';IHwyhȘ?/2T^ v).b?w~>jh`JC,$xDN?ݪWBW[Y^9P3鴑Pb@{V"9UsnIn7W=5!3?@`[ E;8%B0GB$r?Yn6ƌ4@V^ѳg;(3X L{’XC(r 9ul1RB < h+yȟ:D9QxmM:ÂК!'^Zo=i(g,*WŨtZ[}7=[d×jm J dyL~z}RZ~'iF&p8T_f<H47JOp‡f:MVLQY9 ٕQc#0CF&V3VhS뛭C69_G0s/쉴@hhN5T[+c̫7z+(3 <[Ծ#W )oN S%Ԋh/L/0\|רh.XizuHScgyC3Bt p^[-vgȵ]cnb͞ p|=Ey,Dt6o>(;w<|zU"]a8Ck0_*4[ih>_ɼ9v ~׵n2.`{cRUr_o&ܲ ZZAQvn.~>ul'c}8T˔{,n)5[88K08[a.C -OV-5J{9lXQ`\pg!vu3 ujNKpg+Е2~(Nd(جfYYR3Y=mfUAON۳lf'~\,NlQ:gct~3ۺJ{Zm.!KBqFA̹FI4{Tخus:m7q{pD.n}Ai, t4QJFՖIzJCJ"x9ќyJZ{ֶu@CQ ]ZI~(Ko]ts%qaԀ ~%cI#$/J0&)k=4J{ -^csG^-r\tK^P2@tYZUS`Yj. O.TDI£ ޜ-# Olpv3ҢQVQ+pT>='Nk8_= +`6Nbk_.fe?!j hVŚ|_\ 9k t` ӡ! yf  fςm`[Lĺ~Kd>zs >Zزmc,7=ڵ0, 5CJkW2)_ꏔTLnЄ O[Oh1c8ør kj7l=X3&9_ >on:uqfs(G&:>J,g\<1.xԯMXQA 3u6~3׬&ǝBo?Fk!2\yfٔ*Fq(0y+0 70ȸ |/-YGqGB9g(gYfZv]G%*[Y8SW )抴҄ y*Xj |O\¼G?U YT*K̩$̏ѕ1$X䕜3͆ [⏒k2^UuՔi%U4H%'+_/̌Њ.*J+'gěȔ5æ9`"'̏MȌ~V$C՗5LT.*% 2Y n!IafE&AMiqO-hPJERUpaξ]KJA]B,S^ \ :b<mWRaQC}YPD'cZ .񦬺j6٢" mHz3%BO=RncV4vW?$` Obv J<|ʲjP2>j UIpc;yٶrp ?]84A preqI} T 9tQMh8ڇ7f>1a,FRA TіAs31#ϞUXoBXdڂ'Hj52ٮfF؈FkkGf͂ nOfZ7.Ϲv@\1b U<'qr[!Sw.谦UzfQ&\{Wjб4napoa@T t4IKBbynxKi4G9: 5V^R85B!vZL#욼y)̜cd2k1p7ylXk3Ps%ԊqLI$W| Uz%̂lWz\9xo\-\~vt7ݰ& \yp&z%KDMQyԯxc „g#N#gz ȞT}#po+>k¨v+ԙ1l Y:TwZ[ .RCdV1ҧL)wO%UuOcnER^1hoqPMN[pF UkU)20ҀlAq/SN+aO*#oh^Zd@dQ“ ęRyٴ)f/&M(Yr&TɓV(vISӢq~?8T뽥 H-KK JS:DOc1fNã !nV[k+$FEFQa'hE /alPq ~4dNf*)oV6r u*UKJCjdpbK&Y>9\^/ a|W=$Xg+ߩvxfU*4Ո;jq}|6W Tƪ㄃&Ri/"cd*e''fy.A Y AdG[>Lȉɫ[CԊL̶2shiWfF:g?=JvL05Jbq ;6|(#4Gǥ\Nd?qcMF&_%󾓂0!xԪ߅r*~L>e.^t9ؑ_N{sϞE~ݼB;j"*\xg?Z0þ5)4)]oz5pge,Q9dc66ymljw7G17^APl:8LjT 򸡕!ӣw>#A>DɹgqR(S$P9Sjcx׳3)jj܃ 23*7r^ʼnw߸imX Y F֋Ӕ`,JD'WɺM!S $[/Wؑn)eƮ $A77 wzf-v;#gۻ ?=c:ciw)0A=\Y$>"_ УiD1/YAǐ9$DZ1wi"_1A3[)cq.l .:=Ic66)#cu.{7u1z;4\+ 1ԭ8;e| 鐸9_˜M/i (8FN&ƜAEM8v0CN_}I*2wp'Fat'Jpl4GplXΟ Gё-1Ed27G^\f@,Iyv?h~`@ԗ ).V?!}M\c=_9g }(kŦv[ކ:%~(_>C>'R[u(˨4R/Aj% #>+0 >7 7)``xW9%Fj=<02, ,mOI-A8ƽ&a&Ok5#N(6LN$c$Ko5 S O[0+mIC0E~`-zttH4S.#3f/k0Z-Ee$8A8j8aHFeD'J)mD7_cN<TOەOCMR*m dh6D%_'LnMc"݇wE2!4@;C3;8 $c`t'Z>S⡒¼$,ə2GNG2g#ΑEƊKNpH!8E ]ku;%ĭ#`0guL`CӄHхa#BOw wp(EP~#4SZ}B"JP0I֣aDKbQV0ook zZ?n|S r!#s=eQ` efd!dde ddde"0?snfM0e΀x?/H_ 2CZKLKtx@;s5Xٰ}z@w`-W2ЧUq~d$6<1:SH53q|u#)L;=2}|qAU߬5ĹZѪY,؉n qsedXCYձ'G*\ʹz15ݠ,`D~pkuo??0wE=[dEM+% ̴NΑMqMd 'W` fLw9xuO_1 i Yoϛ"GYO낲o`7Zn3D/NmR1噐 E^LE y1g"jc;P}z= -{1b]54j>?C_[ @LY5ǿLaLLl̄LlbfhfF1+_ar8w>++!?,l,YFBdI/Szٙt5]]m۶]m۶Vm۶3}NȌ^ϊb031fF 핔»EDzA<$mMpL]3IW]:2͙,AxW3߷,qmr2X3Ϛ>Ӝhͮ X6o?c5+z^]᷏rRb;0G6![wt~#___;M]페]p b|m̸6z`7 (uYZw=GalqɀJK`_v+?ۤRذf]_lvuR`B"R=6k=Ev#bLV)W.bjy1Ssc|]m]k s3cx!j~ \ &;uG!JY|@arD}JE; Zr{g׵|;uy+W;$~o)(R;7*SEkTF @"oDOXW͠XBBY'Ÿo?ƀHX yֲ 5zNlrYy*u)xՄN5THFX3,-.iY%e$g3˔[N 7@)RQ!NSxcw,.qS\(VҦDHh/bwg >m$k, oGsJ ɱ_d HMR*ֈa尐ļx!-G./—q)։JCS>t

"7оE~<5C`.كkK|FlXF^Sc#"am3ߋ݀72LhWuB\1#Q}pY%^/7L f0k#^(mQlBdplLPL<_C $ 5'LG6*obM2pD24{\|B[6g! u1jb}g ahG.;I4 26s3FAyMjY#? 303.Kmf4񟡱h屃YM<4 ܁,"X&8e`8RGF{>!f4o~9$CaYk0QJH޶$b JfGPLZ+v2%)uPO.gpP-r,RcBw-f)"czfu~q5)5+H'oI& +,[mW4#Ɂo{Dk'GGGҀkѠoi+<,c ?tZ oDEr,Y/ 6[ p>83O$ M}.@TEZx{Zbx݆5L>z2Ӧ|dEht`Y2Gy7X_@0y5G"G*D)Պ(hmP:y.L9L:,D^6dl /To>x(j`d#XJ▆ 4߅CCBvtd6595~>Am5êFϙ4ᵕ oD<"V5@ hӾe#zJ@1Oۚ2,{O ֟g>;:j##8Q@d*D<lZk+Pj7VS#.#ZKJJZwkexєL4BW#KN L\WS^N*:*c tgF]e5)W￟.7XV؂P]`4Sr1yؘliP\Ď|)R"B|o/5W*f 7ŋbZV}\$E qLˬtmJ;;6t"/='ՠPzTf''DmRZ{W*<(?:v0-*Qem!!g{.6j / m-b!Q4 v#;^XuHʆ]:Lj7D=%mNk84nT2o~ƾH|IN­*Ԕ܄"9LW"3UBN4P`=^eF#VA7wOkt`mΙ*:oC<,QNbv C*1&/ *%VϳQtVR ҾՈ))'D>E$dIqf2:UMjɹ%)!S CƬTF1B.&oqż9n1^n+*)pC67Ve fӷ @ijy>mNN _.N L'B ޼߆jEZz{\xLQĔϺUGrb]Cq hcaCy%uK@&P PȩVO_.Hd$)qThإVzz̥aS˶AXbNtz9T*8o?oL>o{[~~Vfݕ oh XóՃI5C"bn }RHՍxƆ"qߖکӲO)DϻnRAJ踍 "O=͈bqITT'lH=mF'j-(']jJRrK/2Pq4] T0Xݣ0X&D:-lvl3r?FЪ9W6d'n:OO$,"3Ղ5ڑ2y|Y$*R(`ۖ~TF>}Z +"[QoA_`.JYCDWD"qޚQu p>29¬ |MC=t3HvwVH~TFyh{`"<`ʿMieO20#g0JJC5H""7 %@Uc۠4hfˀ1uG nPF+- =LE`y`B9d%v)$g/NJNߙX.M0;dKrN;3lw%7X8(\$70(J,5l6emekHigWU K1v'3Ym'-#KϠ,b(-#2XYS JVw?DDVؕvruVUk-h;>ÍTYťN?{o,YLKdU.u,%'hRT55S6=)NقOj e+{D]a+5YAYmɞ@P.)rv!\s[ze(H4 [#(G<)Ѕ>*፭ή,+8+ ciнԎt -))L`xd]SP1n._q7 HUő/7'BL\9YH|f(žk-5Ga*M8pYD=L_ nE"\ O](3,wSak/`16X$7a73QmԔsy`C~L ~Œ:L7G';(6T[yO)hf(|Ƣɱd9i9jllʭ Hт2tۆwmyL0|`$i 6cSkM8tc%#2 jm 4uTBsW3f }ƊyeEUX jncqS9pJjȹxdǣKM9Q`W甞~W)[7٤7jzꌦ] tFp8ubtMP☆Spcgzj/ݱ>Y0%I܇G/8역\4:_ۤ%W7LJ{_rOɋ8dr]k]z:5 0{2aΡ9wPc9 %++?#3F+8\va s{Ş0=vc1U5etSIe0JߋO3KcOoߞ7cff_\W`9/"d"K,d/Dk%33'1@]Zr2c`_MHA6H1J, a܂m NSqc .(vE&RyOVJV:_IF,Tt'"\ݴ& zt=5{tQdK1{E`B osv2U# 9REvNC"be@sD0B8<7m}հu|e7ur`|yze}|C~SvCYD^F~3N-[mp `)ο{V[SGLrl]~ÁhɨanF$Eiƨ޽<1$ T[LMs'6Ɏr*2(C2]؟{o0 ᣕG^D{N<#7Fb{BN9x3u 9t췇-NmrIɘc2<1;OY;_+|Bшhl1Cc$ʭ-=gw6 VC"wJ<GTgC0M6M 1-$#c#Y tVI~ʭTZT^& ?"1!|nuBT3V5Y/VI]n] iB(#al##5{"Wǎ3AVV#KؠR6,RBrɿ︤ ! fdq nZH8bRI!gtkF2Ȥ`>YGǝ>Ӥ`Az^1Mtn9|+$0Yy/k;rIQj,i&(o8rޢm*olnהeXڄ8٤=#}JPD+'+NRMɠo񋄝C!HBeolomm#>trBrl_Yq$Q}Ԑ_3)I7F5M7hndjj`V]iZ6YOQvT_MZ&69>.n8`+2V\?9NISwm~g3syչ#RXtvtssQJ{` !7wV(wEG4SɁor)?PMb_} k]dm@/Ak7VA%(X*jtޠWYer7ڞ@-^:.F/))& 67)~q}]`aMp:>mww?뺺I_v,T=aU^Qs엘ŮpruCA4<ܕs- I¸}^\=+,ʡ港Ar7}<ƔBR :LkW]^p;y;s}s>hW^?Q*]΍DҾIk5(<#= -I8d-[&_3"715OX FJA%"&KI5df>${I/\bWmEgCmz:/:]E48<`o# RqM$Vhk[4 q[7e6N6C0ۮ,OnoH|7 MLUlԨQArm>]NƗ,7P͂[AZXgQ᯲;Q>5]m޾քOaˠLv- Ϸ(z{ jn[EZi_D2%\#mڕV)5oÏ$Y#$rp,,*f]7Xޱ3aa?Oa3ˆrfJ)-JTq`k& 环'b"6#lz4ϓˀT|CYNqJ"_V{taGC[ǿY sCҬ3?c@ۙ}8 .CopjWWFWBL tɫenMm|oɂur2n}SA ]_j@0CܺV  xB}3t8QCtM5HSL&ZrL; b5'h(I&k4۶:S}z-N2F} ib&K[4M<0ݧum)W0Q5U5oaz 82A}^\8H+\؍??b efӝH3R_pp(d#gUx j"k?Ys4ۖVCJ]}tuRgU )/].QQ>s0' ڥ#4$dldr[w=b}9sZfjtfYr[>Uj7CmqVJ$ qyZg EP0fb;1,?Ϧ \ק^vՇɎ%rl"98N'#r e87.7-qZˮwiK -E#sT \ƦO@ՒJw]W cKTlyv4t?W-Leg~^Bxӡ[a*:sPk{S iHΣ,"0X&9J<[Pt_/!w4cfߚy)}? TXe'gfx8PBzW 5\Rүt":æ+e_E%]RDiگs]%\ɍOuc:gI s/܂4+VRYwIzWW/v'%~>ذOPdsV_L"U\4A ?jݿ^#N ?uFt_ID'L7.RazȞּׄI+QkHÀb֥jh~y6[Gܷl;vnIMn!ibwLUVQiOֽz]坧z oIIal]SZXNu*((^:szeuxP: ~XiYh7w^v3:$uΙQy`➄i; Ꮴ,y 6g.$!_ "aMdCa{}4|/W*ݼ_~_5Qi-@vUs:R)sF?Jpǿ2xhN[s?`6|9T^a*z? *r4O2bJ0-Y[!.>arKmUC" ܒBY$0E&9zsڈvyqG< g'*6,7aJ4uи`̚k^t.Cq0̔)!:#tG 4 7j.cjwS%|13Q!5q Y^il22./uȊ}؆!"+(`(XJ)Q՘VD{s{ ؆Hs*!e79FnanH|$ )ڰdn+bդoEm5KoC G4\%xxVaЕOt&69ltw.jg6Y{mm\hAU{<;TܤZU]>tkd9Vb=U1`BdB^y:*o%[!nK 04ϨB`0Ku.*o\`m[6/pFTv04N}GwkD3VHh ݔ[l`@Y`" 4,<䕨D?-sY%J\j2ީP ~ܕrP70V>N7>Fѳ#g`s-R\ Q@Eh>D~w).^Z/\J/LQU| ڹ Ε3E4*0sǎswvQu0^VSMU?V$ē @ #Ѽ|D]SX{?ԉ6w`NWGY*l%CA EpR;=ja z&`/34)jׯW~Ej_];kr;ii^4 ?vhչЊ1wxGw9U3FƲM/VC+p79Zh-//LQQ;I *,qTE">,gXYN ȩzhͩZ],U,q*uV*|XY,WƄ77ٰ*؛8QOYEWW٘/)j*m\,k[ 3+33$JA[]/N[phb_HOP.P* iFA ";=j,-GWGηZ5+lnlQ (L.V:F/?*qn0$• /fWQ[TYLS(sA3UF/ZV{p"UC Q }bXV] hi/25u=WP' mA'O՟ꢭ;8aWDFQVd 2e"oqn_a7+s57CmOOZ x^ט |@wCMr0oy_jiwW@we՞ )9u{},r7yއF)O[t~Ġ]v° J3|n8[ǝ}~p%^vfvޝe&2BDp4:}1 zq,$Q׈q2W] (EF6j+/VxC(9ߞs7$ڔ(Pw:@GZITrRbmFfдy#4GU0,PBO bpn ).o-P:iR5I ,\6s;rUsh#EI,?y͒5Gjorfj"gq?N(T_zɑGڰu"E9) Յ$`*$ņK#zSFaNĎȪ볟 iNG+OO^6_n_: H0ph9]l3n,&~ uL^~ 7N#^V }v6~AJo 4 E>UWNpE18L4. 7˄K$p#PO}93yu j>>^"zn;(*_1"4+Fq7/O6Z7?SOH\k'id_C1$9Kz_SW<^Ȃa;QJg#\n`[{>߱K)jR0j\_=m9v+#$% |Q`I1n%vhZaZjAc|2ߍ|+a暑Dn ~ &e^ ّrY(4!WD6();kڭ"g.-׮;mm۶mΉm[ol۶ɉm~3;fwvtՃ~U]uוqkugkP],bPk4/Ճ  p8LjU`uW`yw*vٝQ_7b6D0ip"xG8Ǚ A ߃I]O.=LS]`eA%ot6%-ϟ2%"|Lr>ohW59n{R5yA5.ƍu#}l1amtu ݺA4u- $4os͊po֯ko}|21@OaJ`T s _Q@^3 Xt+6!>1is;ܪ.RQ3#i8Lq{A ? _0U7`krU߅U4!w|go`dƳ5a1 WJfQ,lCA ݣ iKUw㴴R_7hud_f,@LDٰ/2u脈jZ9cO9hg}A F DcAO̅sJyOݩ\S3ip/B&3eX傣CK'csJr333 ׍6ԪYtp)l{ 23X GeUFC?bdhɝ&Ȱ.Sdf&KqHf "Lf5a(8812J3S%bAXIQN*{£a8Udla SEMGcO">|`SzqK1-~d\ ~Bi#|$Կ[+y"v)7tuF6 ȑFʄd2͢!1Q1[0)4mAA@{H3V y( ܾRvNr*B$#]t?rA+t?nO]N9kq[Q3z~z[3PvvG=d:Vޒ&ۦ] p5k>ɗo};)k8r鼟\Ȅ@=k}'Q<7h=Rs V.L;iX8*ʖ4*9=EtxEvS Z iJK>ħ'FFY#T$ 8?]~N-g~M{Gc&a"bhUziU&Pɘ#q6x4d?GPcʣd%bec!`g&/cbc&df&bf_7srqðrrGB_K,=@H')W7 7XXYXؙ,pWH)"(!XWJS PQiiRjm@"WhݞϮ7%X4A=4 !;tJD b%pwȱ?K\ܢ`RLD~ h3;s~w3 ^LR! 6DHu 7u7)B*VQ}+ sݏ4*܅01 i!:5{4 hƀyUjo΂펢P8`GmoFrK V/d0u@Tn(酀Ъg oX`-h^E`OL B{ bk ⹿0!100[3%= ]oi ytc=ձ>0B g՟ѫrvkm  ,eu\ D`</΁ҭևEtdr2O">sj]_$HNpsvh>ww YD)yeb!C^L`5Om ہj؅ Cψe=Iw| 2hh[ҥjb@P5=pk#PP4DH TSrVީ+#.Pٍ)DP2nPPY[Xqa1یT՟|:&w \{1'^q tAw lE }@ /Ё4+T vMœ.w|w-v_^ 3%*|~C~*ѽ`"e{=ܬt^u 9*2a!lI~0+@&NLonx{^[(o7n1Z)!3E <)J~8<2[LXh;$CC%$؀}m@sGa8JF\sYkѬ醁V *.;t&K|14n qe [nv6ךQ1BaS*}dr"ie]ygNKv5"WBӗ]%쮩Пap[ FWR`:u чPr~)OdƧ8&ݱ|>#%Х0݌….?S{xE2!L!NFH'rݕTl_ Ep2S}Q>"ҿ)ǗP\9M$:;=YUU)Sc8jX66gI;11{2_h,ct_ՠݳܓƲ)\nO1G|))>:"M5GjͿ Te#Tl+qnjh@ңVp5^#YLXEO?Ϫ` ~M쏭luDRFFe(ͬ,}ȄǸ9W$Zί|3h,%|$JRa .ֺzR3=<3Z"]n{)mWFָK|^T53~mu.[?4|8QLߟ]2 *^8ty\-\ ذ.ij1gQ}XL;{\1 R4\"v#"I!I#U}ivګ8j)"L@4[* @R+uIֱ ^/*CWghtAIf>f] aJhc\}1дZ 1򧾹񮢅𺽺LJNr[V%B`\;l/`xNMYJ 5_% MCC0|]Ϧz:_`2Zk޼ev Frrȧd-|;o rgur>~1[lB8}jnb^^OR`}Jhq/7{%-nDVѬH&m|}+UUƍ^SeM?tnS%*d/ Ft _-@Jjpcɳ!,Hr{AMzs}N:{ompwcE]od9O]W zSzn)7I+NzaQ͹ֿ|sȀCW}'A 'יCˬങuEJQb?B x ߦ1=:>Tf5=el>Pon_#HdDEmcu t`NW/~KBl{lxLZ>dzhJEюZd7DC_㼿93Wn:Ӌ2}j]#)a?E+ 3썕_#3TOn*>nbKE5R)Xt[gS P2IVca\F]>o.\U\|\qsZt(ڵu5)ϭLL J\puFz`N޺0LFa:$+5B7EW :;ǩ B _!OLxƞfTFb>﹘z17¶l2[uZW9j­m=@ټC8~FR c9`$i1(}{Ň: 7?jZ,וW\&aT:e'%h٘2"H== tFvG ܬfߍ)xh Seό[ M{l՜tke*7Vq ڏoe[}|oDJakǜ1/Lasaqu mG0]m .U3i\}U}(U~; yzq8sO@(L7 2t1 ?OM)2V$o"mX#ՁaiҤ)c?ĊH"<.~9ac~0];f ZO@b?LBɏtMFMY? B7u OR sftaI$ow0rSrߪDGZD蔺B-\p}^LʬsgC,ɧSo\B'bS3|3 $Vq?Fo)H}JjuT\h;mۭ/ԍQ4L%eqF#w&;hEM@&?/ !}P39ˮ3+{*!q[$>1)O+rRb4;sTˢGľ18Ӄ=Z2x8U vn@o-Xy!:Sj2L7r&7{'l<5X uw MAhy"E+ ,Um?zMrmdg&u-?YxB<;hiIZPm3m_޶rM7Y^X 殺 Ec.KR&|1]T•(.=$1损۠#ODʉlϿ`|ԑ=ʶ *+*Z]S^|@$)極;=:15/PXb(ԋœ?R$р# \e7~:0W]Q5EPV@p&ր_o┰։n ']ϾTMVEУW]PK5PS) {Y§Uj4*诮kgXʽK~u97&}rȄsFϾЪ\ UqA#71v_+HgL6.gi<.ZQLJn*jlZ,r%ۭIӿ袜b >:Wc(0GeˉŖWx5'<#jTw^(T:0J+NȂC޵<#m AوEu{vy G2$n N5&ǠX|Q$XzYF}bLEuٕpR cb~.T[A+I,|å`a L"JbY+f٬A ! `\R fS aCloT A HھLA n$(\V Rk. |uˤ-R:dqϛv-M[/`. B+%3]WC`#;-*7@oXwqE =zY^^,k&JJKzy董L0IdVu2|Ũ;-8ҘcLZ|] hib~خ: Q>@N3LTi8qh&mZo*|ۈ*GrqA,r# gT"/m?$ :eᅔjQnK5^G8i;G&c4sc/  7Ԋ]u6\s*5N@ uY2u)jx7lG P1gm @'sK?jX^D65MZ$GFwӲ5RhDfRtcPu`B Œ:Imvw ~ pK KS@o*7 m~lKڸSzDkK%`Oc4=lIb[DgP`\geƹ)he~$I*<&enghVu%jD$6[EG.iVZ֒hs<:AXҦp%bVBJ8!dz*Ӓ1j+~fKsƴ |UzexT83}~A&y33zRF1!h".J{R@pnذsYR(rg >ϣk&F֘4QBv([ f51Ox8ڀы-ަ:aaB [a̫SnCІS[ȎǴ_eX@d Ÿ q,8!UduNHGf}g]*y}#JV3琪r_qʛ z'E4BQ<ʄ 7N S+^,L~$k/H?ccK z4J핾<;ܓx2=yUGFm 4ZuQ1jnEXbvM¥,n)ے$\ɫC)B\=%9ä IvTodzٚ؃r B!SnnPg:(+98(^ƫ1ZFahIrq>V״-3;fCյ~Q]qywqn{F.9]$uVhnG__$ t]!}iGңIS-#$X7x#'P{J8'DhS$0wU, &I11x]o 2x7߭䜔{H3%'M9mhVn[/=:  ƻ+z`]=Wmj> ȡb ,2lQͮS SZ焋 J#oA;B8J< iԡet<;iBa'Rݥ?A c/ȂDè 8/Zz,p_N?iFb\v8ZamnR(e9ybQ7ǠĨM x,UP-P#oTq9nU+ 3 v QexxFz9i2/d=7 0>9uԟ ='MuxP|4W$(r&憚@1}P#?hjA G J[>i[ex9"oSt,/^0i՟e`Zl6=wM3SC9;p]QBזʏ]b.BfQoʾyx=7^X)_g3zD;Qֈg GrC5U++?v)S+!9)V 7־ ޗ;J {ϓG 2|9r7bb T elUDӄEsrϞmYl>@xLWEv4ߨiks^۾?1=#f҉ZqAXw2|Od- ,N$[~'1#G (m>g*+w@ sH̕lZ++tloU#K=xoff ߮H9 s]T(-ϜIn|po)ƸlkX!n鈾bac3.5Lt."%df76y`#3_+GBx4{t2+CdqȪ~ $qx‚B/m ^(V>zl͒ 1+\$?{"j|x/&]l:!3_~%a>wgRY.# ߌd!صۯk`vRi3ԚwO^a:|)V甝y=:PʏRŇi1!Vsd]xk?; [,T1ۖɑ<6)nuT[ZE\?%s^VrϨq;7L}'iJzkiy{fo!Q[|)q]jՇ俜]C9 tq 4f@4 %/Mԅa6һDm͉ QuuJ.f$FiH1,7.K}=^!CLc" W#uSw+k g5sUsTS6]~t9RSFn=u^& D~B^#(EX{箫r{Iʒ\T鿰dCVj*1E[~r9Ic[ s[KYG7=(mX4IziX減X,qOJvRM7 oBopbu*[{U|o)4m҅ UJ `j? Bjq, "֫1AͩHr2Ywz^ @{bKYHJG vu{]]KWaӈ!HR`X>Zh*eݿ x3\p݁׬Wx;UjVV+s&ߣ1.Fsd3 6?.l gaw(,D\g~R ѡ3.,0wH!$;6"n[I}= F݇B:ڥlWajpE6 K.1n#e)^> W:d.jQdڮblS.- *B蛆3ˁT#'R,lTh]8Z,U?҈e}i~Z[ըKώF]trnnj j5Fb3Bib+C#2B}sGR_^5*!_Z ~ܔTb_ NAaa@ 9c?#ZR"eϧ7: Y)Z= th$qu?%M/x]X>8]h=@6 #oD*BiV)i+ 9gblǨ95+l0=˕<#ʚg8{DzVڌT-b.Ka̢8d\DC{ =m6LܒHi> Zťp8FܚWǁ~ps(72K<.&2" 74eqDa:D7AJY"WݰE6܈wJcW.xSjqV5֙J}f{ER_juNhh'[@ilC۹J%d MA>/LA)m6Ӓ{9Ml" w/zGG\G!zZ؝Ӕ6<& w}5=%( ʏͮvbs.i0w,JuIDvB=dj@Oy`/owYTW v'*ң!)ϱ L-̜RߙyD N 9г߁iO /G/\D;. |.זu1r-]˜stKϭ}HՕί5 ZUqGf5k}i_yPb]NPOHF s^ՎF֫m-xN?6Vy[YGWGf9b o?l"<#."ܓ! PX9Qm Q&ҀquЇsOFz{ 93/*3YQ鵲'H੻ÉHu\0zqy(Lg]\ tځk;poVT/bԼ)4캰AA$ :T&-Ԛ:1e<Ǚ%Q%hA:}fz^B_ _>N!z >w3;r #4Ƽi+Q_>9GPr Sn˔ØD:)HgM*7֯ߊ_֏\HoB7hՕ />S7~HXp?1^(8n =&S9_ џFzW ܴ/JЀuAD>0\Kg썙#]@Gi|5B}'bn'6N|/Ƈ6_a|[<?vQSxx&\Y>SÕёD=xFsyxS%9CuMi\Oks;ȉ#fe Neok'7wk*oΛ%>G%,T#!MCfGtDO1?VotZPµEwjBNz:,=v#Z1TQN`].?aÇ@,vb^qwȅ%9Ȅ??X'g$F?q\uX Ls!o6oQ jU E똶wmf#*ખe%轡SM-NRT#_dS0#X3Sa~(3%sCAQvalnVW{nOqvu<6(Du-f"gӕOV>3d=I[dF9mYqg:wjʁ&-Z)o1O_Xߚ򀞫LmŅ&kC6DݪgJhT~쿱Őc.l/IjS}D8]*fgX ,--t d}>W+Q{^Z"4 ';fsf^妲hW\N?W>_~rcR @}.Ĩ ;#̑(/:ȱ :v)2Vދ ]Uh]%҇?MĻ˲aXH%XOӥIQcu:;XM.gDŽa#FQ9J͚pF9*_nӑM03.Lv>̓'nڪUyPsL&x3KWTBGFՏMy<绍 ]ƈ7O>6ʕ%[, "'\=5OK*yv \%uecA%D&N0._?۟ %`&տKu|Vlݿr1u쓲ceǫ;9;oН:Tkrd~b)Q[=U}8M++E|#6H*ChT }hy| k rGm/=_[d}Ԥ՗skFGc}Tؐ٤ra7!`g4Ĵ~H(IlzF2kU zUr3k@O(#@U ED_u:Iٜ\YBUD`^dO8gJ 3^Anu sBB+6 RtSaX~5X\\C&b Mю$F .z~:HO.8 t,(b ̙%4Zۣ矹jPM;aYWM@d|eQYM aNG|B@rxz*՚+INhk g@KL9Csnԙkln̔3M #{QOɛ̌rxrRLOZ17FQSYcf视Gl6~Ebed 1!6-0YvժKla ~gΫ xf!ѯQw6M@ҹN=t@VJ]B`m} .=ԌS٬e(uz lj}E;DN0k(/I߉D䙘Y4~_ z:h2*Q'0E^/;F 7}.ftr{`$!~~R º򁋁U}th ltϭvq+I:1)#YDݹɍ<p ̘לْ56(c/2\Zߎ)I7j9Ts89vDRmvʡN:Q_Fhl*p<܉Nd-U|L$Q3Yx$6l_Կ-tJE~& KygYo7/ol[Dh95.>[ †YѬ g*@s=YJO|`5tPq?UN$9ڵ5hb! ̮Azj%O_aHd"[:*Kt4⇆Pb.>xG;>`N3WTL:BWg8aT*v|r= )>c9G! 'V њT0Rc/6ҟR(Ao e2wP_sf>g F盽:C!ЋǔP}̝%.2ҥq6ee35a&_ }ڼ']gpmM{VGyC7Nzl2bƴ4 䯩{ TIk)Bjϟœ\^E:أObpe&- #YT~uuWǣ=,1qmFYA@7߄XqŷvTtޢ\[$7y/ʼo0R +"%s~:2 awEcU>W/IO7gdFk!l>l&~>̎܁ ?ϱQhR敕;=o{t?#5 ڛ!%jٹAR-0[ @ZS>Ĉ#Ujq w&E!£a,JcU?"';%SS W7v`_b)+T)3W|))D@&ơ)Tl OӘtgxOL4uuR>m,-R6ЍYHJgڠ}ȡ!^u$NU ö!iZ&w^=AGi)|௢D4RaH5uuaމÈCR)'r;*VXaփEy!ElQ -U.>*2+a*2{ >gh=IT 4H? D0j~e3VaȶUx4ɕXn&S8/ѼdND(0-yw|]3q9$=Tg3_m4,_94蟃nTJ/0J"FwV&<;aP'ߋdLx>=iAL5𚁻l!nc GDs$F"^|z3U?@&[;nX\Vj)(D8I7gn6gv] 1k7-1qr 2Kq -9VHX|ھOj\R*K ݻ[Ӑ<=q5Uj 9:1LP+!Km#+)4)IàiJ^&0kOݜf~g6g "|Y䈸}w4%5unO4V31R2_)zO:9X^:dVZ"`;H.$ag{0m*-r#^ΌP<Tc8+e?@zO/y,t oOjkPXyHn:5L^}= :}VL*X?Dr]ԈshDkk|\W!5/5K5܊2 jkpAAUSUsA PeO>ꖕ]t0BA%Piha'fAJeHiFaΤ^{IԴu(Pb&QYqDٚ{6r&P9n>EjѮBca㙙 Ўs%0tY$Q"$Lt1Ԓck;,>dGT'N_gs!R8y:%1 ѳ~7y.9k2רw OU@0.BN#p[~9{ׯ`]]CY##u³ZԉhW)zLЋC't p17C>\HJ%8=J'cfs^ȶ%J)]їQuG6dIydI}a%o#˻d.KodnqܝJؼ"qif9FRķloxlEF"A_ᴜckSMh!L0qf&"SY1YG9Grmu5y⸈l[B%r'%؊` u2H`(Ux4(AoI݁z>drrlL 6Bw<3o>İW>'TfE_bcrHcR18<Xx4{lk}i^$N_U!S~@E35<2i9?L 1OFr t1՞O4Ee8/ku!ݼT;4ekDp\k9ՐC! ߒͤ`[:U4ҁ?B<-'ץTLbdV z{ς$c?U]$2s,a;wMrE1K :{ k qtH%k,0-t:p)tOrZ9S M+YKTe;A(gZx/ =[>$ zNo]q">uz\2wqAF*ԍN蠓d!ae9C{ֲR/uq#ɞ7VgNqiQz7Lf$URa2 A<>fΊIRKwMj4cl0m3WS=K% L ELJ0N]S1#QȲzNF y=zmgVLWܒ~RTrgpG؋f3QZKSI }c|-F/jD^a*jI|Zvp& [#հů[ NS$j! S r7ҵ)7P4C4nF3t&C+QrD>لxպ?'GAJhy6:U-bl9Lehx4 :of!ݸDm~Y~a6йgP(5ƆM:AdJDv M 4s $! [/XIiP>u<`jɯՅDSfTk9ȋH#6O 3r@Jx!ɡ"0v~_!r>ᓺ6Fu}ʊoWbrdUuFAXq]|ԍzDkDzg`Wj2]ýIvV&~?y?cF|si>jo5Ft] 5 3S5XI?] p0C`ͫ=vd+ˌAIO.zϷSck2#',DD,c,ɕA28A6BE@|a- Ёx 'gH3eP+ufX0K[`2 kLcke/Wy|XΆ>HF+w<5  BOZ n5H@Ĩo lݜ_j釗.N?'c8 ?!~'v@J9}[P*j.$#촨uc < 'rۗ;ϻG- I>-7FzrlkY/K%@R{wn-ᫎnG&6A,mUYf0&KM"mlCR(~Tvt!. ԋKR7P._t1gG$m$/L&cAP!j(';_'"=wZ 4;"3y7U;#pv \e2t@V !-N)wO=$VAx3g]4;+~o ͤxT@Rc,LF͉ioq#OhX{(Z+#Լ~eW Ib,F*Cَ.lpjBVh0h 08n߀u ^ &_|]3o]8f g|gCt1;:V.+v8;F4mn 1\2^#n@MK2 ^vt4Bo"NPwkrn%\]3L|6N= Y?VW%]L*Wr)׻in~fbEYIW{ n ?~@]L"ʡ7j$&S7mPm)0`|.PMzZHy,A. v Aeo}(3\V.h.&8'99e#B&D,JŖĀ| ̧l]2l9AƊ஗/-Zw[Ttrq- 2H') LRHUczϰBF #3 3JDеqYlrK1ޥ 3 A-؎Ix\r/k0^YR)t.D,{኎)wҼ2fJvSqIIkt"+BR1D yҷfd}N"rx,w棺A)gͻk Oɟl{5k:be„B ? N6u NG1̛ZG?O\5s)5@T~F!&S;I&d$Őp6G"^RbϦpO*NJH;aPPopBq0n.";r.9qAp]* ^1~i!"Z ԁDYֳfCaFjJPY] 3"RyAlEC`AB.aq1}4 2JP&VIPPh/ELJ3hjS59PF;DhtEU C0:K\_%e#j(uZG(*"Ղ M̽"^qK?pP8֨caAVٱbu#W"r':HG(EetG(ł:$*}R/D;i}( k͜Ō"[N_nB'"sp~ji4^%znL0{^4 ~8Q',~۹Jo]$E)Ey|WTvJ# =eb;׉}ގ6}r+C2? -di ĝ,y8AKrs&zhjI%FVB>yJ9Jm'ɽUoZG=L-& d&t}Q_o"s.(gǫ$1 g"7;L{{nW)n($㉶,N:8\ӸPL 2 8гcy1mOOmp=!/gG~+ OLH10w j]-R9.<5 t?`B8ieBkꞈD:;^Պ{`VHoq5XcHU pz)i3P-X4&(&QSNِTl ."i~ n_$'کq}l(Nɖt 3/V}i/.im-9a~pR4 p VhS\P ɊkKR&PjkY`Sch#&Ш]Xmd]RD|9đO +y lIc JC* Si2RREL@('rbTyQ#2{s|Bɹ}Tb]Lq:n4S{, Z<=&C01Rl Z"7Jf>JF_hBvC\߶8HᑃKBgj--97cyιoakE )@KV$nr 2|БZb{;r[s咗M w0L mO,Ү~-ƙEL"aa8 /J:ɰ~O(%N=еY [`4Ftnoגv<[&G} r%21H`!v)lL} #pT$ Lc{}"eMZl{Wn + 4%rVN绥oΒ_ ng/~*&_YPPqc`FH\Q,Qt$eT^kGgq*Rc"{9*%:Eɍ%b) Fom?{6$@ ;PZMm1]Da+v#D*ԲdO-3 *u. ͥ k1. d5RDAIAV- Mo/ᤏÿ9tSX~ Z\jdqbe~b8QQ飼%2L:O9lJ+ PbQ;hHT«`r}h~7Yf!0OK.J$ڔ{>>lęK#\E֢+<EkpM5,5yvT˗!WzA"Jʙ30̅2=Iٿ {OơNV~//tdt;"Gx59Tx#䭉."it_+2v`. BHQ0\' 3-)~hJws%l/6_GԘq1xb)[t]ަ0:yKǖ ^G{R>\oAm6YDL `?&s G*]ѐO̸ E~}v1],ٶFEcBa':MXWp0Ԯ~N w b|VSaנY$dq|%0nL`'a(vcYtIm.-8mbV,sGz?"ډhVS~PPHHm u>%o|;a/hysCʆ ](o5]nGL\ЇQY#9 nʕWg==1LoJI ay=5QXƪJi׸0Yܽl_Ӝ(e[լD-D/1}?Nj!nS! 9_E6/# &=[\Yp1!Rp{i>F>3Ag [e6ѺWX=b\R|Q  ~?"BZ,bEx|Cz8&pL\aHkq|ԧf7n W&"痁obV]!5E>EWJߙ{ OJjAE-Ogtr\6?pS7mH]4 BTYWO`X_VBьXeJ5 W? [)|bbβhHSqf Nm`!/RO 0wj.Y/>n2&s?oys :CKIhX(PfƌWXNBn?ho#5|m^z`CܽʕeE\bysG }QAxvf,@'? auW4zWGW(b,Q 8ߦ 0eRPppP 빨)% ǃK .]BD kbh!@j ^,~Cl#Նr )]E{7,nwlݍ,Lmiv,%8}xu/U%BR#^|wʻ4Cz5d? bV#sveQx RP,̕=( <=ҁϵwfq?-ݹ0uX+h̞= s~vꤗGq~[#jTɀI7Xo?UO5d]"iWbqXV)'ϐD=T6v\h!z.JG YlkJ~ ?NS)u+[Elΐ#eSe5̿ .ZYϣEɭJ-FOճ9\?yy yz%]U_31y<F 9 c2|F,t.B' &,P]MoΝh` RQg;d '0L9>8HS쨜>}ʳtCܙXՖFy" =N/+lxgwi \@!*6 XN˒E1$AqgnAi6$faz=:;jR Tت1pYpų)¼D^PgSO\ Nst mp|yXQ…`Ә50L` s/AS1Ԥ3bjF/MGjI"V tü˝X:D*TfusϑU׿a]z@F%R`h725qHi W>rfkFeLiZ:P^E^`{Cmr gXrT3WN1qOLx⏁vj8Xh!8!<Ǜid >kN`~Lf",#^YKl=M$vemj)HSo0UAx_7“z.&fe|8>$a!̖'b-8LTnhճW2 %a'0f8d?M2J/hťh"bOuéogCe̡.NV;ǔXג\g\Sd֋[N{~˦gIH GYs)L=vi#Y,!R/sSmt𻂅"FQ(v{kh%crQ0}K+r׮TE پ՞E@aIuSX,GL瀁u' .5N@3tw)u(i ’vjKf-8rȔ>zTy5O Dpk },5c3aפ!3j<3Pi{Y% nVʋ% 7M+Q9pĄ7ΟXGwVJL(3WH)~rAL+ vdeT1Sj醨C6 ز,dZTTg2[l#Me-f*6FUg!b C.Aօǎ џ}uVˤ%CR[p`WM,ϙlބ}/ϬvF($VoŴ ̕{d6]t|:@@Q1`6+CN}{U᠐^Ol^)U N> '=3h_j爿v&?bZ4AG[ mlxJ2q"Gn9ŝ7jmcRS0 KF S6ƏNEEp$$gTG9bboL5(X`kE&`*/1~p\%P&28 K bÍ-JA7-Ew[j0z2$b]*GFyt(܊^k~DD)WZ21O&њc,6+~f+C . IT2Ā⪽jփ@q8u~Q)nؐC$}VԢ5u0z:ܧYwcM!w7PkPk^ϲMRP;6(.D*ތyxVagJMwQ"w[<@=/i'~K.^0){U4 H"BR1شPgmdo8e[#:A_ӾҷnCk.-LCcuEC'zԜEGAA9\\٬OT,p l@ *"" ,6`?`o;qm篳YdI-s 8?mUzcCt4x|5EIO!)W,R$g[(Q뭱|Mv|``ؿUVMکx~2],ɫ˓y^s.,yCYA%&ln^(jxl{'Ls^z}:!hvD- NDTuxﮆ-ܿm|#" ojiO0Svnz6uz޸rv4⭲)dEװ/{Ԅ9p㯝ٟ``Y*Y.Ǘtet~*%y:mm{L7ڔ~+<;ӻ\x #N ֝\mGJTޮZ!s~o?:40þTӤm]?fydžjvǵx:EGA]"6Ժ߰0/+g̸ޢSbAw ͎ܱvjƒG-:W_eY53sb2ػyMw/}ھ#J)\MΙ=L;zZpU3.vcJٽ.IX=*iS\9?{^Kf檦z#+n ]#FY?[:&{QsCsM+SK.+i>[KOUIqhJnzrxx̣=#Qce[dߖdX`gT~pobd1O_pS(|Nѽbj[ҚjG65ZadtOd_T<&"k}^獤<oH s[xλầd/XM6.mu^fZqzeՠ wjDwեBlo.]%C`+7>^Li=uQƏǐZϦ%Z?'C ˆj?$<9an.ٝ*蠱Oݔ⭷: Z?Ng<9m!YO^֤0A޻mS}c,Vf_reZz/^iHUW\ٳeO'w}f{_GͲ2TN%SOp )zn@>jf-*M}%MNxo {HN;7ɤ^w{LNDs"5C_cgdXl:7`/c}V^$}CEv?kOAa3NjZߘiza{;&՝nxB(4[4 k59`ewܟe+Í8:BqrYzv.-XXi5@5ϽfB?-ԣ昑][[,3ѷ :Ȯc>uYE^~.hZTbEݽ:iwF~?rʠ^OrQ1T]Rܭ} [og`89cͶJG>:%a&9y&}_m)B6;#oZI޶#~qJ4((a8ٽʓ 9g|!me1e؛vu96gM7?뵢<8)-8CO5I,\]/>roEUۗB:6,:wz5w--bj{Ͷ"5;:ŗ]81l䆎qou-N=2sG74~jK4~ڶbkǖ RSͧ5EKKo ;$uPfL :\ߜhs+wvKg =:tÝsҀֺ s:.5{tNl ֢8"4@m8'vnØGbSexؼ t)5~I.zwMbni/ƫmH˝Y^-U!&)eU73qVVTxFQZk _Np1(X߳*qRY+O3f>k[jŀfL_fy[k7X;Iw68԰g]WOɼPłÏVIͣ&:):s) zsŻn5gԸ;8ȯnGobcKԭnzjxzˤҥsܶ(kc .I9g~ͥgKWoym1jBr%Zӕ+64B^Kly 2Gm*nWG?is`~YiuFյ[_q!kXVVZ9/2{ɤ3ɭ s:yhkB ΐE-~H'cjfWsK>sY6V_̜RuG}^gۃϣsO35vk^vsW`]쏫f^&6jUe}lEceKzX~k"OGDd\]`.H%:,!/X"hj!Z Fv>*-g S$E@X(Ogw |DRY@ |bv^cD.γR;@0HKi.9RIp/MDEaB_*0RJE"$cv>Tt&4lTl0:hѦȭ#Z?e T8{ƌ,;cՔifW J^Dt?~)X5핓VΛ~K1~/Sܪwfs"j}zDi:/-Ј}nkKJTّoIaq$ վWS[R"`DQwCUTzy;}jJ{GhW٘ ~UqKܦQ%SW&+|Ra܊6>[2e¢>XX;aӅ'% g/-L(|Z^S%(6.)U^X/WQf@@|<Պe?{ZҪzTƩF%> |0;N9& OI6H6 Ro>,CĖGv "n?6c?<]U=2+P=WE*j\ 3P}U[7ݿr94/DuzOKjW륄;W"G²ch@bSe,= T-M{(,Q6Y;>)$jZ[)z!#/ jZmYG\kN9 2NtpPu\/O'%ğ!eK%k'.6}݌۶Cd/M9G_d_;iJ$\|> yy;&&U0{23M='3 Yt}\^|`(p%d >ӘE#՟m'? M0 S]}/a 00H3A(BژC+0A d8h^U( 3AG'3@G dЇI@!pؾ8dgp љqH\4>Q'F.)ٹ^r22Y_Agz\:d4̙o\78=_:N(!b00@LLYʕLU1=f8@Y {o= scei>#@ΎRؕ ==>,7-_pcx` l `SW@ͅF0-!^BK`]}1Sx4ISd743{W'&9}K%(;X‰FɢyRYϞƲ6 n 4HiɊ(VlsW X̅D.vLMpXc-H 3}-%v>^̰t5Adn(ˏ+|>b0chr:"o(4GO1l/ydgD>Ŏr^L.BC`Wq Li\X./9kpCL]iVF8E I6 ag.4c>pKr %ap9M ٵQBRR|̿uҘJ6 /цb1 %9΢p#(\˗b|5;Z h$6 8ڔ2ڼ4ͱ])b*۲G1SŬdm Q_J 0X匡@kQ~[!鯸 ۻL~B Ǡ$JT~L#FC5ZB %(/h *| (@•&)?+ZJ4RZ %SZ2)ɨp&J䣠!0AX3/}9R$a?4cl&QW nR;BQ 2jtc_8e{r 5BR>S?ctMgev0}kx`՚?gDMJx;+!9A\x;r䆬\6bQ SC_C('Ygӟk ߈+ҿln+}~ÔE ,#4E1o3"&W%?LKW>⍕mI.j?9jrCV.yoM/ hl篁Jp=P7VV~VͅB!7V~A[; ]7/[+9OH'?\`y#+?y)Od{LH'ӿlc@^Ƈ+Q{Y|w/㓣&]JUxc_,01df7k$9w#nq3PV ed_%J%3owqd1@&?a/;C- }`؇ 2`\b [l v1@I&IbG*} ;i&-8$/f@:H)@0IAG u{ -cclGG(}>NN.abSG8 Z0eDzqeaB6= lܟ|پ &P}i>{_4⍇s1 !$ 8Hy}+3CcbYHSC>*{ ezq`h67P>Ν=[F!<J{x} y}_$̡QʑKpxQRhؗy8|yP p0,$F"<)9}i08"P. qŌNJ!(^ZR\i>7(/<83|/ ri2>($ c gx8|zwL#~qYKpH^_Ry8j͍ H) x8|\Ÿ4&a:gx6I]!`"\:|pm!?r*B8Y|ȕ%k4iƍ[4+ M#!0@|4 bQQ;w8 h0{F~lx0ȧἸ_aoh87N3 x ח`|Ii8o3~(>7G IG p!0:iq'- &4gtË|ɳg(.~t9buX_ C<O"~R*sqIBeb` W$؊dX#jBjDt74 t G+pqfc@?[GL bFa B2Fц(f*\D*+` !243PK ZQtest-files/sample_directory/PKZQ$O}~'test-files/sample_directory/favicon.ico=n@ ?l4TnRQ@\Mna 4t܀*Zg]0cg~o֒%diE|U2+s|xsh4JYul6s粬븎yuRw / R B%5nׯ]G:lR7ǺVhxǬd=aUp全 }PͲKPODr;iik[> z]zz- $ {"H? Eo3B8m•A ] 7Off>*S |:Gױ$Y:JY Ab2Ce'!\Ų' g# Ek1|`D)a!ND40&sYq(  p]H,rbv2JT`Լs1s%R"pKF<*5І!h{C!$,!IBG$If~CȇҀ(lf98JS6,CA_~n!֬?{je 5Ec5O]( I "rV=I@OKhO'7Fb@z M4WfO[ 1l~P:QfjJU7[+nsN/Ĵ{8$t$^h i &3 ^U؉d=f*9"LlzĻ}> QѸLc[|a{mWS7Q #j3~/U%;G|1.]ؿύYjE/X Q+Y=8m'3U:4|/p#`%4c<%,P#o|>Q_:Acm)p{mceAmB|٭}(T)h6]i#IW|Ҫ /M&>N/\ PKZQz5 test-files/sample_text1.txt51rC1D{bǵǧH9AaF?(?鄀e?lJ ŪM,uP/a *:t;j6\hf.mv֢%#R⇴ѽ#Otm̒ЅngK&uD=K_I9 4ғ_%)\3ɑU;)ҋ O1򜤝L YKZ? ]ѷ! Yļ2\bcLL91L1i)nRyڹa,۬niX\]ϧPK ZQtest-files/zero_byte_file.txtPK ZQtest-files/öüäöäö/PKZQ>K #test-files/öüäöäö/asöäöölTKF <; f`&H`tcϟbd;,m~?Ū"*toh+TjډBMBnR7ݵ7}/3R*[7Lr> ="+}EVj̽|.kķwvݪJӒ)-HIVV4Nt.DZU HX#FP tO&i?,D<H.?zYZz]Bly[. VG@(9` C]gd5];2ICcX3Ac4ѺRt V;+;'=J;.8Pe(zQ^r*bK];,4?7s}(A_w<?}F2vMa=_~ _^m"P<>g>4v?3BN|MW\[fy=4hGx>ˑs 2bmV䏞'S>WK]?xXhp0YhaqN 3!ɧXJ =,<2 o],qڹWp/Gj[ #m \i"2ˊײk` LxP&md`A=/҂P7! ʆ|~{T|_+¢iԐȮgd y%;S;)T{s#֠P2 B (h6of1|/L!f f\e ^%B*2S#ڂPE`Z! '/KdUBr +{@RD}bs"QoD=JgF*"b^%`js[[b`xc17$1L60q'^.o8eѶAS_h-/zS`IՊӊV\H.PtEZBs_~G:-j E!Ƚ'fp mɰ8ܣ sL<3aע.: k>T!og9}jQrpY {U*ewm]#ꪨ^;yv-yTgı2][39y ZA<#Vash T=KdZ„[\ ITC} [+sbpepqҝۯ|~Qy(KY-x)ȶvڅWeH(z'`!"J$m@0i pU>?ߨN563<9t#-` D=AsjJ}v9!wCʴ={Ew^TtqAj/$@G6f] MǗtw' DB/gǭׂZz+xHf1zu1Y);_wVj6D6ktVeW/&q`Wd@"sDxW م&u`Xd<0+ztj)R709S;;d3qЀITJb[}G32HʩM)ߍ ֎sFb7=~MƸBFuʌAʵuyLKHpZg8:{1!U #nW˚z6ߐs\UL8GIVM;uZ(2zv=|q\d8]T_eq(W1`#V^I=o&[1|*+N02e̮=+L,·gx<?,Ma.xl#.E@O #Z[ јtpЫZCdZ\=>05FCV :t6V$-;DkW~)]QIVtخE3Ɨ?nB2?вD˺~# ,Q:ZΔ2- 6t  vN~CedS~IܕgfJu"q.m4 'K$)af(L.i=ϛ`i~gWd8 Mfek%cxe$NS{fqQ Hj}l(^_c xhKssꑑ"݇IAJ6oͩY.?maBU%a;Iz>4-ԔM:͢k$$ fDzrϝwcU̻_hRfpEΌX"00N t+9LOjO#9,^o zoD.}U,IZ#GDO}j [2v^}4`1+/[AfH~G|=U'R2ߤz |PF=e# PtuhQygI8v6{(6LxDT}S;o+!8!Uh)™pMn5MunsY`ܮWP>nX.o`@)[7^؇{Y;$#b+ $ωZ&"[T=l`z2DcձygZd*x7'd؃GJDAm]ݓxQ m@ƕ(wr }weݫ vBe;qENp{<]?Iev_sY޻Ϭ3^̜=K諤C  2Nt TP7"IR tpVJ$~O6 2cgM>ba 9Rx=vnfFL;:*joeN<|U\,E5g u]tm q%$BDŽHpיKn[+ 0հ:. Lv#nk4SW |_F,+մ#EFI_!}gcoubd?SI0VEeܬ0v33.Ж>,S2#;W(p12lwD;I#Rsotq6w{M 32u]+Jm\ 8baAb6O$A ]rք lv*"ey 6CF!);搹*|^yxAsvm4`hľ.ǎɍW Aiu)%0VGY_II1@ˁԘ&J$Uh I)k1q`Cs3_Rel3Y-ɋKi{ '?71< ΰ*eEgq.7!CPus8$0b&ZXo'jzSޣ 2 *`>Bx|{dcA<5q{_b&A f@fztQќA<øs<4wM8y\'}xR6?BR6 >"A'Ƈ خ<*qZGaG 7Qy] X R&9L!{%panuÛF;uXh`}g@ Cayu)nb?Z $ܳz-=US4>E"ݠ?(>0~T?qީ]FdJW([˥! ;&;co_д}\|A}4{a!knMܷ^V@=uhO>j0"WJ ƞGSֲ z\|0OH.jI6(ۣ+iT{G`Xb&H}8`Fќ`lQ 𱛢(@eq1!z7hHЂ)aģ5G Y` KᴻR_n8E3KAȀv$.L00l"r{4 F JL7٥9kVr~xDܝPy ]VIwrV/Ũl[xD Vw  d:yE$I=忼A5%nH\0gKMڿ4(KI}|=ϛS6= $Y XY}yE|Bvs/LLs`*Qklb[yY(HYgGOLׅ?xb>ܢO`oePdY7b6^V\ ޫw&H9u.lDF2頷49N4'P̌Po 鍪'(hǟ)Ά,\I^mzA V<\oLg;=f̄k‹`Hz$.*._;qֳ  |E$LdoSĴ#Yums6 sS^gr/^3ewT20ҿѳǶke+}` fRsSwA2t5?sY..&Ƽ #A-\%޾<$n R]~C63K^=|5rJY&)<|rVO!4qRlgL "u )GQ=nJ}vFKjZj ;ִ$v1~rr|N.FRh4Hϓd _u-)1h}+PęmqhۜQM|K?_ Xρp"7pq5?=)n3~fM{& jV/jꌖ)Zҿ+<6`264SY(e3^xwBvRn hg1(b9#] AsYtҀƩ=%ԸK #test-files/öüäöäö/asöäöölPK3ZQ?}= ntest-files/sample_text_large.txtPK3ZQz5 test-files/sample_text1.txtPK3 ZQA5test-files/sample_directory/PK3 ZQLtest-files/zero_byte_file.txtPK3ZQϪ,ftest-files/after_deflate_remaining_bytes.binPK3ZQ$O}~'otest-files/sample_directory/favicon.icoPK3 ZQAtest-files/öüäöäö/PK3ZQ50:8test-files/가나다.abcPK3ZQ>test-files/file_PDF_1MB.pdfPK3ZQ,+W $!test-files/бореиская.txtPK3 ZQ Atest-files/PK3ZQ¢ 1test-files/sample.pdfPK zip4j-2.9.1/src/test/resources/test-archives/corrupt_extra_data_record_length.zip000066400000000000000000005371511414265447200304660ustar00rootroot00000000000000PK7,]8AndroidManifest.xmlVKO[G>`^e  .jIQ HK\ JBUAeU]tU]tџUUWYtU67}|yfΜ;g)FYzm'S9'7 y'" e;& xܩ!x EJ+ %X΀  _  #*qDC%:}:-?Ke14܇e ^D *óD{|jQ;sH_[/ʰiQ(lV;YC<{}r9=v Ctn*jI@w4[GwV)|,&ei뽅hWPfb_d]s=z%5>8VXcJ[Lw\=\P#r˜e>?g g/b)krU+̿Mp]"V'G+q3yO4^iήXOp?y}6vl6"\;6'_HunfJ[Q9Ʒjexp< F,w$߲.2;3uWXm_ԩuS ;ggx u~Z986D4]+ϋ*+U U~fbKnZ@m{hϰCUKx"j`ZUuK08:˯$0Y)J ף}Y {5~(T3ͮ~6<hRs-~jSM(.f7[Kl-(;įCt):B#!fSKg9,mVں5>8/b#|=_$/j 5^6/f'|}_,΀_5z|7 R—ѳU91|"}ҤmqmQJ'hI _kQI1\EG9_vCbk6KluT/vOǨp$4w`Ltik5k \{/˱;f0? W7 re isubp2mJb6 iִ샤ߌh|^~ _Iŗ\{_@r?`YVASWW}5[kݛ}-dPKrbPK7,]8 classes.dexy}{1cMd,eX%"c)*dd T$KH1He+d-K,Q)6[z|yxyss\k+ehTRTRm#:2f҅kDhz&|*M)5SX%KK7#I+&Π+)UݧTFJ}TjT[#;ajJV`ͰIB3*@=7L0rX_`/#\KPqVAxfǰȄQ .e B$(efHjP n' T J[a7 _$\ԇQ` K`6ix C'?P@/ .7Ѫ1 ^0FtYl8sp"?j|{@*k`;iuc-10>p_7hš4x PBCZ@+h !xzCa$o$?a `sP|a+gnZ %_DI;2^U [*TT-XgZ5:,oo(>i0(T[@2/4N0FtX[ %?ת*4N0ކ7-Ax(QSKJAlUZU"i (]yC` ЪLҗS:۰[>]Oa| G Zaeb02,mS0A>Cg L1 |9X'ZV`$|;< ?C`b[73< AmZu3סL5pS02oi'c 5];0ރmp*|KPv?P;Pp7tga&lP{C;ǰ9“"d2NA䏴Ԅ{ ^ 6O;\bٴtt`5lp JD s3 7>p?</G x^y} `PԇvB!8 2AsNjAc`A;t0>]p Jb샖+a6,uÜBS@ 6y(tJB/]6p.AQn;x2]~8E1@C'`<a Lu:CQ(eTju! -50@_H!<0 >Oa- `/oZFp'4Vp?t.0'!ExkvE;k6pn1 A0p `Lw`&̃e!OJA% w@)0x "XY=p Ŝ ! n<a[0 >al sn 0x ކ9!WIj@s 9x &4 N@)7a!cp .C4 4:£Ra S`,/`l8 ąUY C7Oh{8\́pT$h#t^ %Ȁ9l3rAk t `-l#yqAch=7 g`LY06N3CE)d s`%3p \^P@kxzPcא pE_U4#`a|+`/n9.P@s@{) 0,++{+u C h ]'< `8+ +j!XRX _ ;wCX JG8G/8נUy(Nha f'6  JB9H :BW0&.̆O`9lQN%O%ASzB o,k;8W JT 5  02`.oϧJAUhwCxk0f§v!>U@h AO/dX_ GO |,Ԅz@=X">UB5haHq0>Ր | g8AGTIH;OHJP0q0Vz?/']BT:  H*&~?,\(B]h+ %EX{ DET-x '!   3a,dN)|& t0f2 !XاA !C< #a2| ' PjzA |a#|$cPn.:CoH0އvpop΁.S!P*@-hmt)a,LȆpt,Aq( &4~ O*̀ T1K(ա)<0§O 8= z G OpCO"ԃy3`\`Ix ^)06|3X`+ " R JB%-<)`,dlX ?A8#2ԃt0l.B* 9t0&< V:ȄoP024 0ޅN8 T##Ux§@63(CPA#h]1x WurX 8 W!,eAe G #``| a3삽p yC{H0 &4 SX`|_pT9/f nO@ x>Ͱ_p"9'4B/Ha|ZqºBUC Q0z ?4 2TZpt'x&;0Vp.CDO p46z@Hg`0VO D5C$A]hwCH(Xk8 =C"$=p?0^y0 WpU 4K _}@;ݡ/ *L=#p5ԂdBx^ *;a7d^8 @ : }a,̄/`?TJ]96; [v {`/_W p18  8 4,p.?p .5]D@$((0( P C ( 4qp#px("T U*TPn$ 6ԁ۠.ԃnp'4 C Z p=< :B' ]AxB7xG;xTi` a0 < 0x^0^ڽg1 ^08x^oo$x ކ02`*L̀wa&̂}>0ѻ'0BXS RXrވ{VjX_z_K`l- Y5lmv7v'^A8p Nk^py[ \5:,!AKuYqU\*.3K:%K'2AV,Ս`rbyX&(zŴӕbQ }[u+$AMuԇp;4F&Ash 6Ȅ,6; &U:|򞒙b,Iح&f؇>.{{i~bGSͺWߓF/J4O{?Sc};2ٖKg>DFMZx)%2O eO0ckRF4O[|Ͼ~FF͸.y )7\%-]MVxd' vJ,q!w'K =q}S-pdߍ=i縹 ':g%ުuMmuFH}nl&)ߴ+u3C2ܜbǷiJR9v)|*7QDO9ȱ'H6{'M'bOnd[^A^'RMZ 7{K5ٗ/Ζ{lئ/m>Ic.:vԜrN35.II{&&9حZ=W<9v:ėؕ=S(mq?=fx={c(\s?ב1ɫ~x[ qK=ћ 9%cra'9痹Ƽ>VxX>zW'ެv'|/I=iݜmuؽ׊'~(b^'izc=ku Ϻn~c?籇y"D7E'%d)D#:C]љD}:~)><ϮSNp? ' ~"}:wz)tpgW[5]jP5U v4;BN>aԵki4Wt:3z92:@\xՀk52A}5 Ay3 {ZKF]x0<msIqT/hGrA4Yh'΢]D}Hh7tziOD/#tZUh]zD;v}P!ѮCDz=*]h󭍀*wlQS8?D3D)jO%%ћEo, (ZEhu[EDk$Y胢v(hFiE-.:NWENj.щ臨yVh.g}N~y<s.=E^NZ$<\¯.U6늹2pJeAz>:O|;/,j>y 翦it yh'ESEyy ܅^$EE?;o/y{ۋd^`{ygn]"o|D[KvY&Zn\EaA+VMn\,'mUjN\ϭЄ>c5 rauuދ/YMζkڠ6_紧h=h֝l|kFGf Ӥ7jmMY=doa?L-IgthՀrrMVVM:˔%gIYR~%gIYR~J'2lU[VG[ q^6o6ov.]%vE}L.ֶ...jk]m=wom;|Sm9߱YrA]57[-f]dѽO>97et/&~muJ?"1uqsM\qcMe/u 9~'ύr, =/zA3.H{^T [%0T-N Ak oZoeU\qUU{s|IkOIkNiWã>펏O&-[kޢZ=0RMzT%ox]|wj; "BCn5Ago]WIм߹A }Xw<7ߥQ=Onw_Ww<ڐy߫Zfs6>[2ngr%VKжr޶Uԧ:.}\ ݪDwH{%s?8EC%SiV7VPs.0\)=;tTOqj#_F2`k{Ѣ+E!`FjvSr{D~[V=5z6コzd0Q3dwcFS"̻.l}2dqMU3Dߵ_}m5M2V~UQO~hS:d^cujc>h]} KuJRd^{J-K̻l9<>.j򧪧֠Q7vJrӤ4)7Mm㏳v(o)7IRq7h5o+T?P?P?P?P;5h=3،VWsujl㇨΢/}/f~6~YݠXhu(ׁ2/g(|֦,3r>úW?A =jˀ8sT*2:B[I%ZY}V2!B:A"G G)wa.2-2/ "!AΕ8KUOGG5S/rl_RH d||?\FUsf˒eҽ7:cr^>+]*MoâOYZJ S[>:V-OZOs{NU7,j[i,zjoЕ{5{M!_/~ 9!o9DpAHvu9oƪ^6~,חQ!EE 'lq_Q+ W.sEh%k_q~COp2Ϸ\DxiiD˅/M)o'I- %%'KxHx3$ѧ湔kߩěs*3A4zL7{/ +oy8UuW[ZI ߜOS9^~~;h^AOh*Vfn^3Ử븩>*oS9.M.уGD9-l>{ܧr?`*r?`>\7ZY)'‘#\}ZY08;M4zvQw};MkqХ3ƸbAӥ?N8]tH3D):K=E?Pts|Hj> H}k>k5StV4Ygy^e~;-w.&Z\hIRV7.gøu<)ɺjn1z'./:i>#E?NZ*Ut]-uY-TglgggNI~vH9X]m{#Xn+vpWzg]LL%^ˆ>ߙdKUTƥe^&U v_(3Qk.leaχsXHg/':@Z}~T :WEZ-]k2.Wy]~^N~wfFy*u7:M0Qm=bFU.ҙvjZue;k8QYɀѢjUw>Qd>Qs>}!K ./e;T3tY=k%Z5T4޶ZɷVk瓬Β9duj)+e׫]όLsW%lzX}t~.E[ m %u2\==m|l_m}~4\>No moE3]~phu=j%gOoM*Be9߬ s‰ϊYtw7<DEq>LMX]Y]'A=-j.Gg5^ҽfub5[fa*iV#t7KyOPYVYGmmeJ9YſCX[rJ{璛ʐ u!Y4S4K߄ NXq; !WsޘzkAYj gIȒ~)Y/]&-zŪOsxyW.dIȒ%#KG,Y?dIȒ%#KG,Y?dz%'( ^R ~c뭺%'KO,?YdXSΪOYҟeI?ʒ~%(KQ,GYҏzKJ$/V]ʒ҇$ olʒ~5_mUVOϔ>>w뜭lw{ht%D:hA] lpQmmR6YGm6Y?mv/>S<_u+7OP7~T)ϱwy1y_զ%]-R뺚j<qޠs jh9?Pl9?H9?mG gKdd(y_PLJ|~/eȦ9FԟK6cHxa{%Oh$eÿHWI~~C3%I?V={/|A VmaypX.s\={O")QtϢD{^Ev嗲8iojor^ߥ?^?dT{cKOHOHO\-LpNJ;uIYIY7N)̛*VO)9^d=hi5n紌gg36m9ַoٿUEy$^;/lâ+'zyE{*mge9's2y$I_G q-%L^~ZcP}y6|I},bKVom5^,_Ekb~]V"Rjy_S*28ukww?ct8AޏbkiWvpcn+]m|G>ݼ_" Jl+/ZOhW湱T -]xO| mvc1RR~QI+ڭb~ڭb[h Qڭv_WW^qR o2N%$~O?aaQR⍚CI%fQ~(qH2Գ{MSu蟺jՓE OV7?9gx3%6\^ʯ YQT}^jU8 5+zOZ3_Hb0ʵ0O&Qw^pU{U;Gu_D}TG3 [l}lXݤX,A]f(_aμϡV]=~Րt5j#6} }Tq߮XuՐn?XV_滜nXS[S'! jyODNC-)^aFto׈FMzE|_KU߼!:kW]b]5zvc :Qw=f%<Ԫ3Gg]tYuc tkOLYR{R?Ϫjf_%Z;Uw}e=ohw}et]o7VNꮧL۾9f:v}F ݠ oNjSM jF:эcS}N Gv=\|/ǖF/7sWK9w8Zҷ7MxՕjhU2hn1yFk׉JnP潾$|?垷R ͺVKڳ=llޫ_^+}yvyּǣCzd犚@F]=:utUWd^GWGIQw%}gI庺wrLA?+~hbV VV%ץ֥7X=o DW{=xdHq#Eƍ7RdH~N)2~"G)2~"G)2~"G)2~"G)2~hw?'EƑGRdIq$E9)Iqń[uK/)2"K/)2hw?ǔU7ޤx"M7)2ޤx"M7)2ޤhw'EƝwRdIq'EƝ":EƟ>V{ڼG}>ItbKg{+{?{N[ͷ:9UoQ0T]ھ*/&dKӅMc[-jI7u{V/mMrs[jk7}ᶢ|[׉|SW2}ik%:hS~[?!ʞ}>WUlN]DO;?UW _#Ws~.y6>)??_K+^Ca['7-Aķ=-\;|˟,fK.ۙz@?T_4rg|h]İ;_?$W(tgOCnǗ.|tKJLyO017I AuE?h% y:o>X/?2<~IzGyMOyGj_jytso~l ˵ƿ1:|7|_#~z>GF?Hs<2~LO|]D񝜓̣~1ψRx8[y$7_GZSwF޿*rߗ3Nj Iv~u;}p"z(OF/n Qag់Fc}1+Ɵg۟?6?A_<WSo0SK6ጹyo?P<&_ /D/_c7< ſ i.7ſ(:ſ8W8sO.Og_Ŀ$=>/k@ſ,:FC3Ŀ<_z|׿9i*7 Ε|rk|_Jtw5_)㟀窟?IrˤQ;\?.o#77P[ 3s?gI\&aVClſM%s?=39!{ab(Vl?SnNS~]>w>s|$v>k5O9 =|ߗI@>/mEG~#ͧ?O?+)?S~T=ȧ~mg>'_o|\S?GAL.Yg;kg<7R<> !o|_4G[_M)/Ӿ俜k+EWs|-UL:o kߧz~'Q;Љ0S̓4K/sҕ;fq{{7CN}O=冮: Gn;1A;?D "<-n*ΗOFūQkA-> y**ZN8UHM=2vfN[e)ԋTc`5_l 񛰣U}U2I8]AUTi񏰍?ݚ]uiA\jA|Gf_wz*ᒳT]vFQ˧&N8ޚ2G T׏C[{"=ahBs8yo,ָzOO o{jygU/=mwԤ4oc.iۻh*yw})W{Sr\rw\]UڻmD{@.?ۻLR]Umg4]ޭ]ތIW36ORC7b͓T, Gx})w99|*C}*K{k0|lLﱡI#sql:65԰ǦfXc3&c3Frlj:6U=ǦcJ*j@.u(j{|9j{cUYƧnMc+,mz#%ާJ6|(=nق?㕎"ovg؟u/q7Z9<{>E1?6i!ی%|S'җ}mE//|T^9yo>GƼ92y1(g7JQ؞o_sP/@ئ_U])8G)wlST8jsۃeT1_/uͥګQ t1ܬ*רCr*ys'_b ufavc52ڝ->V=9tJzYj@ysM'IYKh_Q_Hx2*k;+(Gbj_L J]𫞁Ve qhpjLo#)7/R=` T>P* *.t/=b0dreD 4W&7-ΛY㖠? [4hOQ.&5BmcJ3GN&׭#aIwݓ](*ǙWb9K a?3[$Z-dO7ZoƈxaDߝ}Dmp;ܭq9cuy{6r\X}fX]ޟX]+g.<G8eGdLjqkƑ֔:LwF.`6jn¥䚭Y-ˍ]+v[Y͗?w1]zT)wwo"=sѬtQ_x4윸p]v43Z8]O^}뢌1(;__?NbՎ"Eeh;PG=pPZW'Xƨc~=ԷSNW6m|`1ҖWMѾfb'|_bmWb\ ?+ V*E5ɘԔdڴLi˩K̹쬾ɔIQ9Q5_z13Wgi ^#Ov}7I#>aߐ}LmGv:">5Ƽ3o`.qb͔Yo~Kޛr } Ozo`6TDgݜUu[9+*yQ 7P,k];ެ>=IKdvGpfΗ@厊Lw)*Xی$Fլy?><MmTAƖm15Q5_UЮd}1-o@ShUslcJ8>Wg;G:J_0u, ^^@E_6.TP5X~2*[us\|vc"흚́؃t;ʖb"\ F"ʙ +S95><ǵ@lyr/ʹ\PlH4R>Ӝ1~ZA~q3W4.R-C|tAcނvV7^#>*ڔT,Q>{T/mw.R,FسgڿY՚Om5PHTqjJS_'geQ>wkuRJ)mڡh8WoKn OK%t){#5!m`"5MTU(ܚP9h(!+QV(2w=_l+Q]ZH8$FyOmf] Bɣ%읉+e^M8SHN;T.BzEEՏ:~ͬT¡BE $ (pPdyM8Hճg37 W [{澢yϬ*.0uOyo`ߧ5s߇淛 Pr|?>m! 6ቾA+|vݑ([C :56{Mo nt\AM霸kuN棣%Ɣ yԄ;zhz*'ݍ&]\bP}y5<^qYfAсWc"1vIwhc>FD_#/Dj~yiL3{U͸M ,X86`(SEȈjpz/vMRF 6މ*4aFͣqDę<^kHTCqJz`{0A?k=誖yO9J1yT떴 [+^K]{kœ(lH_l>֝cj=X[g7*gq͞pΝ)? Bͅ.TOhm@•w 9"q:f5FUO=̿ݡgM9]fV0!6Bk3ڳ"iKv Gzt8&qkՇv/۪Z]C)?zQ=v;aأUP(Y)EqgYoTy(h(,jqkUTVQ*8JEGߡǨ舮wgp} $\0z#nDx'ܘpZDj焣"pzD0h~QƯET"]F͠$e#m1Az|v6k|OycV7|?>')@o07%טѫ~eVͽB]?>U:hs_&=f+hƛUNv=>i.O3guR?g_•Vr=mۗ>θ212cl'Ǜ|/rM<853dNNJ9AYTt@6HIBE!9XB6"v)bǂUlz V`/;sZv=g{3 T0'{> q:2F"MahOёMd,YX6AY K3)eVPCJVF a!]`L,gA y 7jYOMF+Hŧ ɦ"]6h\ì}$~GQ;Y,inl?v2M0(h@#Oև%v Fj9U sa'{JdJcͭPтJ淧;;9̻".gCZl'AlBA:3c :w\`dxx;vp,#?Z=ZɇAz$@uVdW@@=)j|rP̜bcdַ SX~Aֻ^~|4ǻ6ѷE};xGT=J(A:ESЂx9r ImN(Aey5;<VxMF iBh8So0o8:#h9UZv_U?kU£lzEK} F?Z$/J(a(_pZD++r@-m|k槎#YA+k5ڿu:ٵ0,ߤ]r;dc8aJ՞ gط@8Jɇ@J W{!YBy 6=~펜šha&iʁP)kl @l#Şz[ #a3L{2N/mf vP{F)IhG-#i**Rȵu2Zu : bN@םF!ˡ5nt.9wn_ΝsJֺH֕Mf i-a cH.RhLP 6#)| wوTxN1nyH&qޚ]޾%#Tx <ѹ*DD~ǩ)u^8^2B/|1+/_^+@AnqU[(?KLRz=kC0anR)/E?6//υ^ly0Wq۾,Y,_X!f 8s`?~|56 o8."1q(ehw?%/&їŮZ=֚nd\n3WzFbz_kNZe=3[&!!՞\{Pdly\tSЅVF&FAzݪ怼+-a{9xVAH;d3:YJ~H^!VH|z HdA˳{@9D@_\q>!zXYתH1wz3gH5K@25Z˪#H >v:C&FEJ֌|QlP@Kp0L/%95ux.x*}}Pg`,&&8 G0GMjI/NT ]@OaLl^y!{:˕zv+5=eςgv͕@4+n'D#Km*1,u@t0gJA?")¨s(.bolZ f%[fG:i{B?'^9J}"{őt5s@7꙳hViT(ݔ,LKs{HXs0zla/KW(֩2b-=JiNc)tS3w$xыa<&"W"RrIU#%fՀ\0pQs,ǡ^,g L[(=FH||y&Ogoݓso˩xZi8OOиGJ]*cN5(Q^WV5m!v,O>6dzFXVlbƀ22_\@2Ơl Xg<AyB^ 3Y؍q u-`zm2'gmq+'DC! *AOnfpi6RHӱLu2V;'6פ:J&]9粑a9MfdXվ #[-emus՜|]kn + e<VbuHYր@R؝~cX姥G:ofj ݟY%V~+k..q!ym6"jѼ@p6}ӣez&Cѽ2g|ytpۑ+mM\M=2[њ,СZ[V.OF+rZ=},.-,![ Ǡ>/*o1]TZ%J]ܝ-,|B^^B> ˓_EmeW b4V5QfJ>tl3 7u;F闕MZy#βd*# T Xr7݇*B>I#ԸV>7509Wk:CC< s ,_Cld%9y ;8*}̾5*ʫK֮B>R!Q^H PXINY <5dz4_,/^% :ɾWX`8B/@}ZfcmδfSm3=s~8Kfd?NT?B_ʱ=rZ)=~Qi0lajx8ګ59>'A{FE|kzV;)R^?&[\Gˊ:c)XHg{ 5KչZоjۖ:7Sz7}}/5y5:L/xn ۼ^dpk*,1c q:$mzeE4@k g4=k(hAJ^H#Ofxkv̫+??*1O{gAٚ"bf\u-Be~47xi@__͛/ ey M!\Ffre-7C-pfLP0Οm"jMmk˳Q(_w꥝zB3D<'oC6™֍SԻ~Ud~\vfx\YI/a0ǵٺYcM!lm.ۙm !Y!/Wv޻~]Wu"|p5] B|75WBμڃp,$ߪb{!W:wsܵfJ<3dqʚQ5EEh=Fc\T dfy(cW!fd ұLvWVoF3X ڟI0۷^P"J-Rgz)?g}D@Z:GTJp>IܿxAwtZ44|!$.<4$D`;P3>yy7wy/mș~3ݘP\nB0ݾ0Nwwtb޵w>x>̻bݪ0& ļe2D_V!dN Dq*d/]ƫyab2Lbɰ=Uļa{qyw$^!RK&&NU?Aٸg%9zMtfТe 4W@pRМW)/>z=tuQ Y}Z@;ۗ$WX[؋S"Nd<;/:+M_&n*Zl+.l5 y!H/ 3wXfE'Яs2 vv?\#sI S7]8 Z qi4;8bV4ypWK#p^%7x,E*(DE }މA;V / LHR*F s#忳x%ܗ2W1:~'o mdE%{ѦZNX^ْe]h]@e/ֈ~; r!J0u*J՝w#8Nf8G*N'#xR"7tT8&.#تXX8~Z (k)U{45|*3r_E[HKKQZgSazZc [ Do-wj71hpjgHb8i8ӛh(qgAlx!̩a8UWh.um{QGKz.cE:Y P>\,F_@\2Z̝ԟ74=b( ,g#xq.$"r!yGHl@ӗlHoFU`ϮZ sidsT4`*2]Ƞ',D4};_].$HV[Lvnw\pz1HaL1]}f3.x@~}Z$O&M&Qcs(VgQ9cq,ĕR ;2Zл3$Z>%B+0RE+ɮ=0 -=i^HJ8#oqa:U{=_~vecMg q5ZYoу0ΡqtrmːP9gvޕs"w8tzV[UqeyCEzkuڱh=L]#Ͳq*vl\uGv׷v;2o'RN =OL~/gEe{+j<~/l/ޔ[m5W]&zwO?,*XK^lxbL{ ·r)2f@N%J:Kя4y*-v Kj0 %(| cvصyY{5!Nѵ}3*G鼘f8sH:-. Z!X)6j ;;|a?yuJqb5C{J2,ϰG#YvqH=V\Ը UKDΝjy͍3Bmye1GO~o9_Ҽ $/xlMN r2}LK8.Z;V Hmq7 o-Z*򈻤DtxAyx8#?nBޝ}׊ӹZI_. A{uh{Sr w>*7{FBq}f@zפ@L⸕>F)r J<|-mX}Я:29]REgٓý.W兯,p) Z\[0~yrVF^%>M"L ]p;eyfNkcy%d͡u?4nACg!g_hylN%O=z3z[X\w%kX5Hw>fkzDgk#K[~F=~ݷ#GeaE⎇>Z=jSDJ#p7999E,M>;"D9)F*{=|%SțRc~P抓ASǛIȜQ+}JO ˛Ld(1Owy|OxMO7 cf *x~G\*?x&w)[mݸj~Xd[m'w{8XEy_o@=}6iG6j)6/DQ~nn{-C?5u{I.Ojr1o]客j;63 eJriՒ_DZ#棊iD}oqK"-SÓv O:ň$ΓsWHSX<0}e8ai2aD'Rzt^.7 1ñS[kEGՙ]H3K!Zc8r0nO%K$ͼ͞!XR{5߶3Q6W5@ʎ(Z3m2-{[*&x4S{[nOݣCvzbLgdzKsb ޮxoG &,ѢO>?9A?Jf)jGdftd˷ +&x- Yhe*S?=;Ut^[uɛ[Ҳc|OHЇ ݅̏v7gcx?}NR\!G3_ U8%}V-dI*f_U5X \ ;qaBGB܈JK˄egs|H+'#IKeR7plHw3,OΩ?xwi^SJ },@@@Ip?!.9x:G%p#@gGǽ;wK*VC٠Wa3 g@̙wNȾw>},ķ_煟 ?/^e2uV=e>?3[ ?7DgWsyy ;w̻㏳>zȚg|dH yQPh0pw`2s>~Af bz9F5\w *7X~LoqނbUusq:ĭCI:]Cq[:NCu~-WlS_I+ V. u-߯|$nԄV vq3n/;yI㿐jۺ,==|֝|Γo=`|!4{L@V(aP_Iwx}We˕7\?@r=;ĐЕ\i]h7a9 6C}~n6ʵpj3/1>kt-c|6Eۈ?jt-cmt-c1F=kt-x9ZGvs6m$#lݗ֩+c%ٺܕ&wq/SW*eٖ]l|u?9T|u{Am۱crƣyJ@V<?cnS8>mm43k\Q9ːzƝԊgܩ .KymlCu̥{\nF[ՅqwwA7qvwQ7q m/(Lvƥ]nyy ]62mn|WvS)]=kk{F$*-x.mf.+o V[txui*n5Wm,%x9CրP9w Lh.ES˻>JߏHsq喫SOQmY_[C-*S0}/(E>FO+ZQug^JN'tSwv;:ͅ7VrYvxMWZ$XJH`N>Oz򁤢\=Y>/wN ^~HqC/W!sxYAzXSr|9GxX"/~si)ŝxLޅ rA'4g> /-wb9W_i7|J9=K=1S8<¥6fKOTxgطs>H0g8J]g >\+"O 酀@`XRQ_~R<\QϳBZMGt.V,X~݈DғX 鞺d 0% \[ssax h`W7k:/@?%)_vB[G" x[t =V-KhՑVH#! upq:0Z8fnu|3souNJM(rm5DU"& ̜y <;#A׽3St&L2 "vtNSI8Y cgxnJYCoͪlnl/"_{9u{ETN{R#y*9ت4tX ',7}P ޹sd+بsd{GaT2Lwb;|rH΅3vxpSÓb Щ濫y S\_ y]Yz E(>?2R{@{HHΓHdkxBPn>x9!RgM=ɫu2ija3{~Q@Hb(42JÜ};ɹo:C`:xO4wMrd^Fv,G# r\qk ݹ)!س gXN1g@@$ŢOݼ\7wYG~:aO@ ѣsZi.C]:^h ap(^BߚGO> @.KF| rmx7l$ ƓdԊy]ac0UIk ^y29v2>.Eg>Oc;D ˚7ʳC|_w0֙gYQo&hAX!,zfn?*@k& 0uw!w3C_?yy&Es«>\يkY_6-AkHV׉Z'> GԻͭ{/g1?5c֖vj~}c]Bt/ߧCMkʜ5ɁUo|ƒ(o$--Ox_?IBs`hR|mVC0֊T5 zﳉzS1ง$?]ö2"Y,G7i柁i76OxἛ nn ןwj}/P@LoX!?.|RC ZFѽ.<.% Ɠ;A|_,? # 'hWKQwnbrt>W-۠ҌAMkYMlm0 :HikL%Up.5$l j_ Cr ]2\ǭy]+~Գo 8&xK-۠QԷQ:kRqHj#%yA@ɿ'0')U{lW ?l7x2׹#/yif/y6B:w42ţlW5?G&e:IQ"NdW\0j3ܹH D^ By>zY4 oOb:2$(k^_4Ubf-LDy4QLh9aU}8*8 Z ; q o) ǔ"n ugɹa=R%G['^wVnt.E߃L/]viD~9M?%#v,0 `5qQ*@ch)]EFxG(wGh+xGl $\TRs2>_OM,S8Dm]GA_1{ VydzE: : QkP'QSLE&5NgN];QD sj;|OПۭop4WF3Axoy,̗~Q*9s9*UG; %%N1|Ɉa>KFLۇkEN%Z Ol%̷ tlӅ-] \w>cAw_BH€rGW6Qc4-_vEvz5b4FyݜNIRh=j_3BnHLT*E62d/\("+BXq =ґiq^=n` z4߾ǜƙg0\d~>g.E=K\5ʻ+j??`ϠgC-J-&(rL8*= 4YlhLonZw^et864?u3lFOf p,n6l,awt]3:(Q3GKt?bO_̓h}2TDlv)R!́)b0׿UjK!py=tϲ]ACeI]--&bBjڴC#=$"Mh-Lrp<~5 ٤^A97joyy%ɛ7Ooh+a \!i8~]z'_ZmqťW}/9kGޫIGplz#h,䷎wtkxu$ 'G ek)vrZ9~k"9<89\#Y//>y&6Hۇ)u_6Kh]mKט3b˷x>N VE1:5C[L*7~o9 kٵ|2AʝΜ︝dVTgG>jejG;HGC]mZIጓ?I>sӧ6: 0?fKANzSʙ1X^?=4Y糕9i.҃xZ~=Yn|fɊz6w͵7 .nъ3b\,12z̻#JFm\By=;d04]d 8q1CHY Z[-5 'V%}DVɮ%h yLXzbyqP9-M5%AI ={,nvn'f @W&'B#k@g2tu=/ujk.1+`vK.ϾGVč~EttǨ:/OKC<y65wGu;akOSf)aPZ/bVaZ~X%n_'xz gxf8RգA{>wЧ&V7ܞrָչ6c.&|^=B8u2 I@r٠ѵ͠d+`Og^ (&Tziȫ bPVꡞRϣ^{1G:Z퇕7ҋ|S>ܱulHHcQSYDH±4ER.qMҨ=@oz9Sebٙf &PDIoA<]߂ ..ASGr^ęaJS7LAf 3E;0NE[n~+!kE A|j][׊~g{k5OS$oܒx1\r5zΘ}|k7q0>~=8L { XW"&kNsq=a?t2ot3 C}/i.OaXAڑE]GO= O=ID߾j/:Ck#dm$n>חQZ#nO;rY kȰz5.dMm,?K͎]wxr}nַi?ua]+L1Vc>9 +`B1WaoM/D<!ykfg[f=?y4Y|t ߞtMNMn?'܍\nO{~Kl"Yգ^;Č-}V/\O{XҲC?P.L1|^v%va"?RMݪXPW}A~y1A'\ -/_[g gӽ:>znȚ o\|HDǕ_aڞ}*x<_MC}`{W5fi`ϵ=dR'ɿõ ٽm~Wރ? ns -{lhk \'~Ox{[S:{&W f"Lq?qG(t\∃N<Ѡw'HC{#zwLjqB9)xe4{oAOX+ 9gj}Sɏ>=[ܱ]] 7a\]ti}/s8\v.Tw-g-|/)V0=ٷ`pi5(-g NpwZ~#+}SJ*f B={D+ƁVkĪw>z>%FŬDWIH:J  o?ȁ餖Чy&HgHm0)pߤ?~I-=o7j rEp&հ *t{y d&QJꦊyR''mv Ub1#U$0JH&WۤiN!@ -$-ɔ&!KbLPUAQ) E*]Te׺s}oL& u{o֨|X:G?-?qk7Von3~cel0~/` 0 kSmɉhȔ WDx|*߃^%/C^'uBǡlwCy}Ul;>?%3. ~7,reAc c<Ͽy"?g\iin)_\>nޭ6AɛxonzVq }zFwt oxJwv(3x~35=zj[`GQ(+׸}r\GX|ZDžr;-HZJZ,&Z vqw2BzTͱfz_TP~2,i^*ˮOU4][|w/Y uuEuչL›sGE[~[D›,8Ꙋ5+g;=?~?sϬWnQߜ\s2+1ggIp<6ߴ\hzbOݚ1{`/WV ?V#S=P/*g%_E$|C$~(m2C8.%_/ s p`w(gv@_' XҷEX(vQxQq[a(v@`5ߖ%ĿQgM[ /Njʙ*__?P(PQHQ EWoŏY=!{pѵ(((~QQ=EPQEXQ<}v:byb^ J{wQ9ŏ^H튘/O^VղoW_,*բU"<EV_^o,-(>X~"'{WK7qN%ˤ?)JߐKYI:)˜_ڪyɊnLEzǒ/kRT77PjfrW9eܴ{.L{j{bu.iz~'Uq#mǝ(XnC %+RP=M]?AN Dk,DqCޫqHQڔCb(oJ3Lg̼/G|M X_~Z2}Kva"; k5?H}w@uHr@9^/R+e9 lxalAII/!UĘ7)p,oɯRrf㕔䡫+%G}pΚGktI7!}QFJL>sP$r$uoXiW[ jk0!YChsv7︂ -ݡ`W+3 uwlHHގJ v+Gtu;!+wUo+*{݃l v_uU`/cBьaIfP+g f=ײڀ6{ͬKn$S<d\˰eE$09fHBGLnG1jW[:v#̇޾Hg_/2/NdeM|V` ҰE*hvYo$yF7es"׹fN`~:U27$A/`xX_1v .G7 r͒ˬ$-Zar3Qz35f4_w8rER\:2Owt0-֑֡TQI Kt2WNEu@,lCD6m!醘w[o+ u^و6Y.mJ%҆ mOB&NpCC(nH8&18CCT5P)[I=EAT tPZ-?zKM"9KQ :ƖQ@6嵠dLvxjqsNePf%q}$..W 4S" h4#[ܳ"6vVAro*VRbӬ*kI\\0Y{WGRjٜDml,$$pjoEHOZ;q} f%NdF#Zc_푉smѢ\Fͅ1m gsÍn>\mlB%D-MZ{ ֟ ha)h׺ƚN#KTZAZN/\~ ';wÔ(1@Nm?fsͣYYy#:" %%i%`kAФ΋nܨ G iy-'1RSJ2Y%|e. mDG@^`>FAKkɭZ<}X AX&Gz6Mۙ(h`6F,5t@ӻ$.cgh!IWN2 vdtꊠIX~[G௘;Ѫj2Z:Y nc5vf=Y uFmcճҊ ɡþ0ܫgRI1):RT GQnP2\ОP*E]`^;)|@c4aO8 ]|z 7aťF;hȭy yq3yjGp>-WV %8E(KYn8YP/9iM;2Bi 6v'iY4gN6>&WӜ۳QNn'BMWU0ZF<62on۔3Cxڳ< V4;2.ls#zLi=$1ɧm'I~/ADac0qYx*B5 ur`G ‚ G( m":ڲmw ha.ߊSG[b ϋ12/Fl^ m^y1ƊשbyGSl&El6MqZ .X`F‘OytcvdS7[iNW; ; Ow‡xx# G-4qtc G_8pX8jrᨩzQ3 G5]8jn{:pԩN/y<ϯx6rt!H AYRl!HBF4q<Ƣc09ONvƣgOpf#u4# Y5G:췇%^@iv~Lj=(S m\7+y@5>+eL&:]YixiԲ i;A,eqkK\l%vʳse' F9%6qI>oFFOfVZ`|<ׂHt:j17_F@hnڜJ5<;ǣ0]M~ʞ"JWaY, 6 `֪XtȆbnH|Ev @FK{C)&!ۣB:ArپQa -{]9q6F,l*HWS %aJH476'er\8l$;D6Kkl$ԝ)4کF[ҢeYS2͝N~FMhB_X`T8 Q@ f4 s̆Y+!Ak 243:E5'LO%IFv2\1,E=I̻(V`n< v$L^>Ii1 X)E%85xxa⊗* A.,.9S69֒F ⚫IKÀ2t'LQ=/NmEb"p8ԯiɽ埍+K8BYuג9Qyz+C`FGƵqI FHQ R Yyv3;!QC)*{a1`,= )\ +mAdۻ.fݑ` sn Xv: +yjEt9[Oky |2)6AeU"n;a ìU}=򭱣wG$k?0f+zS8ӝo}z/*Uq G42XGMP,~VjE3\Qt}-.:+T,?$unx^jk@ AsA s,*ch4doȢ~`e0_ֻξޮ0s!Zڱ;w`pہwoGHs e+:z:Ok(D{|r=9mcH3ĘcpWUٕy9Fx]UIa-\;С$mc5N|y'={FWDrB1 !6)&"۰:0JE dϬH[xT>ƬC0͂U[Y:+opeKfpou-)$ft9D{_!l6>D-CC"ݛ0=+ҕy"wڰLﻯ}w6YVbwd``\>]=aj,kƪEۼ- vtD z}1ϕ`,AK@vv4LyS"f ox8?cLe/:2QZ1CkZu BY>\iG ֭(i\hO0b+`=eCaĆvVj][c jw +ڻjJz[.*Ē|C.YЋle\lA/A/ؠ-,R zm %3XMt䚜y> ^g> BB"iVUH`w %/+WHD3ӬJ#N<̠Й0\Q'W?bv3q-6Cd ].UGSZxdӘdV%ݘعq ?4gS9\ADBc1dXb 5A,f]=9#+`U PW* 0f@D\ٚS!ADih:C)"xs/ߦ(uVWGY:l)`jPX$5d 㘸E8L:|HYBE("$SVTa4>] ʢ,YT/1%1m}/@BMQa;uJ[}s\Uo}!F}Xˌ4cd64;֠kinn1ShXf~e5; #a:jDf?6Yߜ~b~Sf~J^MAm(&՟Ln-[" G@d4 \d68`7zS@kB3Cx.8j6Ucu?/0%xl2\ylbNi<$9cm0Ƽbz/0w J  dA2qTP`j[ `.X.X` F꣣$f?+F4*1?4.BsC=E*i~P`#}%:ĹNzǖt4&,#Kl߄Wdz5 *b̜<┋8%y틥mڊ9u1E>c]fƻ EFd fl/ZXˎURUh6mQkEh'5qW&< _ha6gt` JւHMO*H股̤M\*ZV,R42DG'N1xQ!IfIڠ~qT]M"R 4 ,D7Ϡ0NpÈ$ LWnMͫn-y cƽl_ln4n@~@:QTZٽC>vY1.BЦ!A]֠Vhhn`-oua8 l$$AQfdS~A(\Hf84q ́_4ps%-#5abW6 #_B^t+a C9>A.x2as[4s1 y Ӧ ܁!Vw0, A#~kJͦ2cx"^Z1fʏZy,䷪mp9$u @"ܫ>L(seu׃ r.b#,ôc \. S Ea}"А7DG ^Q c>AQ\D~+Q鴴}EGyk%c aUzqa/C7X՘us*USYeҒc06,sI$MʌEV44aX5sA]e"tM[f@uiH-^ "Q]h4d &0X=Oyb`aWE5*-MЦVA#kl% _Zؒ2KS.؎ Q(BD>R^ ~ /QGGL-!*6LfꈖK0 亸S,WdMH:(Ty|̼#C-$ Si]L2Bwei-FqΚW-&iҗ$YtYiERY< &r(@:'<,Tboeњ h@f][#D2(0iևEv=!y"u:qZGr a&@qaJ9Ұ {ٲ<)$ ɀ| F3b|diQS?B٘M2bĔPj&DHͷ сzx \Pқ2ΖI&b/+`EcTrbQf2Ɍb&z+52ݏre) tqmKA\:Z EY&$nR2ڪR*L {K/m^wɆu]|نyԸO?9JFn"I!R] 6Mx]l&Y8hsTZ|ulYUsa `BE,dwVO[zbtIJµ0'"\fAL ̃7θqDI IV3##%@Hhz$9ua"o3lA#:p)#;m/f.3='0.nġB/ Ŧ۲[[SFQMX$&֚"(Uv0\[{}eAH2hTnlId3՗c 0Z2ڋRBh1rt -06)]ܐЦVi6X+F~c<{a誦%zc z@L#d3)l ximٛ^ݠmypqa<,; QL7:4m yZ[/cp "Mx@M ڱ0M#j0)tClGhU7^d{Čjt# hrk*Mc A/# #V $֊A|8@Om0u""DZ!I`nO rؠ;h"uH $$HMcL_n d{20L}ق 7+KN d8E2N mۑĎa^^5c)?x`M~ ?9ʢv|9&gj1q,T9L5Eilgx?_]%?h 7Qw2G߿^gjjxsQX?:j`T\z `ЏM_1*{u*Ƿy6} `Iyg(ZZTi船_\b%P8sįA:vq*ĕTR*Yb9",kzTaY b0ʉp*٫MJK.T́^A3c[;JfKhU~A8'>.Rid@1,([& XM["| ڰ#= ( mMkAW_L`Y2̈́Tln`O0n 6Լ=:.ݻz7e_4mu<ρq~WrC2\sv\-Tmcaާ m Ш-|δJGNM 8/}tЬV.Qo4vCkX F;6\烗 @4rԙf(2 jco+,̜B#y vtYqqDR#Nk_C/6(Tf!4!t 0e].3+|*Э~Pd@̒Ix)W0C\CSOziRk f}gb l)r?kۗ!F<A8Dg?n[GT1057ʍW&lne2GiX =0k` V؃9 )#$5Uons [3e?<, 0 Tiu yt{ X/Fa\ "3k]7f$YYDys='RN.ٗܡKeİs0y mmFQvݫNqcy Rҗh&&Ert_ '"('RC٭`Gf hlWO#ÖylQ[ 1Z&X/: >-udX]Dit468F%L@u%@ԍt4S/+aH^v#`0$I>Dq iDǧ9eOU.lUbFoEQ݉ HX 1 \sk7D`hEeC%B-0>AD0&40P\I,'{x#J0ޡtô&nPE7QI+Rt&LF)A+B%qSl0 GO8(Do|BRPdNXvV,jw?=d{s-YZx|y\?]+|9 ܗ ;+Зcs9z< ˤRQkhdʘaA;E*a>)ө=sd:˩*қٕBƐ2,Y;zJ{6:^. B+&;‹Ȧg,1"ݧ, &ACŮ$kK]iBTj̟WJ$RP^,St (+ ,}hb1h5? |Y wBGvՒGnMˡ$psş2d(+PLuI~iR{ĎoH*G-:`y>Rś>|T߬+uEf) +_,-N?3 3-b輼8`?;+U>$mqwN n[׳H Q<(M@8"] D6Ǎܕ^$)>^V5/a}%(ŸŠuNܜ9TsjIe oFW@,8&ǣ0'uӗM츼fIqO&+C{Ýe2 )b:?799id)V9|Ƨ:k KdL]=1J@"Q"NP(A2O҂4 {˼o&%_K =հLnwAnIf˳\MN.\V*5Sω"vrX7sؕ[O ! ݴ_۰-!֠|g/Uv_ߨp'c1gW3/q76ٕ a>*=v*hbf[1[?TxogV~eFԶ|l3f+0K\5UYӹmԋYvo dM>$TC$vtm O+Hq9Eq1?O613dn(ݯ(\|!'?gkMGKAqTvܿ8V?b.EgKClb:iXѹHyRpEQ-gX;W?˜f_Pon'Q Qٟ]pyʿWrU績۩PJ;y6.. dӀ¥\޳ lZaVKMp9[&ŧ:J`<ƽmQgr%x!v;0vt8tճ@ʡvu0GʟJCyF 0uXer=WUzS9{ c⾦@s3 ->1z}3{6<&Tou?>yU7=+ 5VUpχVyɕm㾶ԯPm%27T쯘r "Url wAv6)>3ewkK~rI6\42j+pnRW+]4^}DžC-/D9Lkr<~|fH_`7`Z|hGQU=GKNE*R l~Suܥ%ϕՕ-p.gt;KN8A\NW|G,sV!޳YB)YN9 p.+trlIOls)fm! <rzxElAiX 67Ͷ![3WoqY/{˜+ R|okسi׿zLͨ}=Zk|F| P,wV&`W~wZpdP)} t(tRJee-Uv TٿnWm=O]$RV8ƁQZ|)+6.g@&el=Jm `Y|(DžnU_]C]/ Ի+(Cz\`-o6ptjfjjK?/5YGP᰹Eē&Uzv%݆}Ez[rA%B)=;uЊnr/_JV'{ɖ%4=!6aCaY}ϊ#!%}h(=M7T|o{Tx[ P Sj*WT@N:Eu EOg`3f NP\̩$6AvtAXIk;aݯ*5\U.=#sDC"(*Tz8O#W& $ 6-cd@'@QssP:a(-zb=uiۃVeoTo۾iooWe!vv\,h8  <8Gs>s*w\y{~HeG\c=C2uB_v4{RW.c_#=vчBEU,TaH)A[x+,;tLeuMSch |0až g4fB.-!;CrC6y*u"K)K*T~}&A襙04$6{?1%&OG߷%)24h$l pZ AwF[?"iLa "V !h;x20!`,oI9zD i"CUri dmx$2RS*Sye*Wesė񆙡 |dhjO:q;_(k$/ぁ@{ Tb( [&f-٫ƠF _3Wls2Į\k;(-B,/ qhȾN[;{gPdؙ̻6p$`  ~(;]<{%7IKhя 9q;qwGfM3SSs(*!WHB=# Gag^LL=vVedY0HR`e)el$:N > !fu0EAU `S|s99 kUUfߕu 57͙JMNXTwTsV> ÂOx@?`%g6$T҇ t~k%~^v)UX֣E˯kV|hΛ[fTqjF0*CK#@}h!ܖ<ƃ5a2p澒aQ*zؗd9==ˊi!0`;J~ʡ+y +U1D@u>#WVSc[qi٣<~'Tk?^/x=G-76Ҩ}#^,T5n㓠zc!eMma9b(:Qw(%8uְ+-f.mTV^^nVJqJU9Ŝr2ڠ>۪Ͷwi:JvmyDžm,%֍C|Jb0o=([fi 4giS<3BHL&Z>[`4HVFedauv}6Zv~mi=VUXZ+*XB MC04 {?|ph04-\) M+ 6.СfzR7M(K*79K{TiszXNGNn2:tסJvzL[aKIJ%U]Β!n|E`#k/)<H$sS57n5*q)r]W>..ۃOcRtܲ}_XB|S6<)P9ZԱ Sx*C[hY2v;/BZ{uHu?\QK\C9ˇYȼ+Tu|R\e.KZr["c-EZr21&mӂ̶ dX=H9;PZ/sqvWVqV,Kh^`?'Kdأe8":f?4e ?ǚS5LAE Coyv{aك WW6'p;QYVWďUUNمcyR[zʃ꽾+7m~#!lBO`Yji? וs:}PPJ{?@/Т/NXSZbn(Se,>2|Ƴ?PgϦ\OQJj]z]>C`/4`{-k;bv$2~+wo[Kޗ(O1[U>=M6NYI:; YܿH r{F%6hh_ĵnӭlOonm9q)&9WqF]?:1OLf~LQգGU92uZ8 džL/! :pO)иRlvS4 nmc7 HYYXAW{r4:̴2?-8r=;?ϢEZӽAa;0@ۺRU_ \Ч=!YXTpY[OP HQЏ<3MV)Ky6xM{QSN\oRoAa ou9qǝ{pp%Ƙ:ptTt8qFRt<蔡E:TSN5:5,Bg1:KЩEԣ 4BRlQ)^ ,KRlG)6S}SN :,F tt8)ADž"Xz  蔠YN%:UTSN:>t,EjtjYN:.t8)EljN :4s:99As9'tɍ]vcX+v_ eC%9=#͟s`W!K{+<v8fFf.`|!/RR<oǕc_rag [\;އ)2 q߫d~|"sBWTyr宀A; 2ߧ(~~+|SؒʂE2~XOayqَ '<JyIx"8}w yl_{ jSnXۻߤjyO};^r< 1>+_o=á~О(/c:7WG䇎ρN~Bۮ_HzoCE߁n.8|Kaw9p}ayit^#{'%E}t:)}\TxO?Uz+y^ `#00Jy_׀ {>O!X_p(D-9or=!|ĕ _%WW%𮢌u~Ю"+o57> cg% y^mUiB8@"ggUg z7@?~WU,51aھUѬ;P5^@OHO;>/ ?^c< ӀC"ƒKrL@?!ԗUՇz@E@/8aX~_#@*41>П"ԟʓ]|n!/#/_FUr! )r_&mr{=B E#Mc>Ok'W}W<7u]q_=)L'ͦthN誋n.tvEtݍA(`K,bDUR lFHI#08eҤ3Ɵw޹?ιPMF';2 ,=VQH~!uLHPQ-j'80ua4Q8ԉ(fEV.xZc*E̺nYqOاҎ+ VWXDu! ~ NלUNV?a]P"#DD/Qw< M" 0Uxfrgx+^`Ѡ(ל+ Z\ܶ k;hl0T5 ^ JfXWOoS|J g|f9Z.9-Zиʩ˗Nw5ϐ?Cm>Gi}-KVmj~E.U;ֶj_2׏(mZ MgN;X0LZ[NZ6,{A?,k6@;tW1;$4b9*fFwf6fo¹867Q cukLq7t9޻(K*HfO1H_HJ}&*(~@Kݣ6uY]aAzvAe4"\@BF;Z0`H&F 6aVчSa[:Fuˎe8,XV-[тoaIo@E͛4Ǖٱl6sѾ*=PpA vf,>%`u@(7 J˖ so5b XKLWsor9'6p)5vLi]} %2MC .h'\XE#җKxe, U4XTD>֘#KhO*!0Q%:Dp:Jt`:JtuDׁ%יSf!D>f,weAD>D#&&jEojPT!c5{SqEZUO#d賷-sFtNF=Ǿsz+svQb֢-HyeQ{@=b>AtMQ%:D:Jt`:Jt!uDuM=? zD "D(wlQ#Db6 "bπ4Q$DGD9!JDȾ ADlFa+j>Ew5%11Rf#f 1pkзDb0 5=Rkf6{܈Z͢+rPky DD(ƐʓE::وPj6J;$6PlD Woz-cnmx0,(x @™Fƣ iy,S{^#dyA8X[6 ֐`NDMdv\gre텊9xR#a01uV{ٸG(~dإaDs*|e ؤxa' F,%4b$9tQA$g[Wa#7DgY;0Ղ9vjA{ 3 C9I_6ҧqOOH+P;mNV{ړOSFǸs~-dMM=ܳ+LɜC3JhaaZl]5ȍڄr&Gy Q۱13'pV#7:nmN0T?pVRB)s)ԤyiiTW`(s}T@ [1`@Wm@Jxf;3qq#sMtn7h&>;Dׂ4|ᘽmz}mbr\}mE&?<@#N@ sz@u6/(/C%IG\LC$"O7yhᅃzS,r9+6,{`(B%Qwɍ.y)7nemԦ6|Qdϡ=HmsEMW|2{th|">ƶPJbgO_ķJZ;tôG|[z-G[n\g7o(ַE+'|؁xvw}@(%]slxgka[Cu;=y?o`c4O_:@w@ދߐU#vԹq~ Gȿ y96eCCVgѐ<t @`r {oU:PK& @rPK7,]8mistats_versioncommit de0188a1f9bf999a464b5b00af72e95d19ed034e 2015年 08月 12日 星期三 17:44:43 CST * master jar-version: MiStats_SDK_Client_1_3_0.jar PK7,]8*res/drawable-xxhdpi-v4/app_status_done.png sb``p : $5V300F.:\}Q-:'*+*Ƈg:ʤWf_񗷼KVf]yٷZKj.{ CbE慷_~P{h4ʟ\~u3ohSUґ7?>[{7?>l\u/fk5ח>NhYї>jN{}Ҕ/oXn?F~}dۛ7UiG @8eC`X3pmo.( 2eF{䧋YGM_obqzч 1J+, ]#T=;-..?L*w:{O^:?f/+6 17*rU޹,E=3΅gusn^aB[5_*\/O߭Y[$9)uG"ƚS5#slzoȚ5ijhkD?di7L762Gi̓ Y՗XX_\煌GR֗x}ѬPy*cɖЏwmmn1ۣ?˛ .<~Ϻ+?{LwuV K(v]cwn||O҈a&o+wyUEJ*?y&S:&PKn`PK7,]82res/drawable-xxhdpi-v4/app_status_processing_1.png sb``p : $5VW>! c|t?@oƺ~{z~}7/{~u+*k *}kݣ"Ӂ\]_[}ʜ#⹫sŽcR+o~.{Z_*"S{}}8_I_0{ۆkoz0?B-Sf]dpD3oHy vDEyF[ <]C,NϝZd rl Wⴶ~63eiywa˽;eumߵd4FtgO*>KE_Ҝ!qC:}Zrhכ\~+g'w׻YaCu/ \X{R;3[s_'e7~7ͱ~E=2]˧X[ ǿЎ+G[2rJw'QI<MF.k5&42h>&~Pe{T֔'"Y^^3CWELw=)|3,Ũ~X>H.w)3ڮ/щxcW9i55e$?]oӶgI~4[^kR1VWOrsoe1{߾;yUazceSBPK b#PK7,]82res/drawable-xxhdpi-v4/app_status_processing_2.png sb``p : $5V300Z.Yξ(.k~vYqM;{5@rQ͵++MgҵZqlGgWf ,Ma[1_um4TY7I꿺=lE O>n@n=`Kr5חIu%&ny|>>H9:(%2+<˭pntMd043K6\{ӃqAwh2?DOl=8x ^׍q1C<:!EW/br bo=sdfAͬg^LΟ9xu&y^|풳ΝRfB}`&+`NRM0) NJx7abr5^2WG[0Nd0,~M*R:+H^J)QT]MCWWڸWL\ȕ֏r< e?DX+;yni |.8t[Gn278~ Lv_ oIJ_4Vc)|΅}/|Jtiݧ/ZE-0I`Vg^"*PXGcnܺaξrCU/mZ_3fF7 L/:8ceD~:۝&5ssDW5D01xsJhPK\gvPK7,]8SqIv=res/drawable-xxhdpi-v4/btn_bg_dialog_first_normal_light.9.pngPNG  IHDRWzτnpOlAZBaKuTnpTc (0ST<=[IDATx_L[m1 $qjh  k ]UU\eFv !M˨Ȫi2eWKL""j, hR6eD e0B dʤv7{IG|G={2al&@zMZr< ȭyKn]dZ,Klif2LY'cv@ΪJ[f9wi'(9ndVn<۵NJe`'DΝ{-\VVdYvG"CPp̶#ȉ݆VK^kii .M2q7 o˓,\p(]WWג4H2p]ohh4i#q3_ww[MMMa]+Ikknnn'McnpJ&T$ͣÇx< Q^8,pu= =\{V-n6P999y~7Nl'pFu?P-\Www[Z\kjjVW Ѹh4v& xZK= Dl\I&n>ਮn*/LLL\ qHDYYYHjP($cZp׮]{Mf-=~Tyϟot\u£sԩB 8-Qyf8WtT\G0<&,q-@AQQQǵfR7,$q5t$$qs/\Pm6D=n#Ga£A9¡t zܜӧO cp3+** 16U, cp-YYYBa ՚+Z,\pMf9S(4MJFUnܧ+U$+p7666VM0rW'kkkBaǏ cpVVVr ]]\\ p C(]/ 1s K a D8 ў{}ɓ'5jSg 0?<aQˍՍ6LVQց ^ 4³4==}E-<˃[n^Է3gܜ zMhT\?>x *Lqƻ>&cp? V_/--Mzܹ-\q&C###2@\T ܻ}   \:=D"!3p#555bgó+**ޛ0X>xdf^:^SS^SSSIy .k݂@ Ӿ_,// -ɟDluurMI%`ʕ+wv=c/=W} HD( gblI?-|UV7nܽxbfĔWa6y['>GooonNM0;-|][-np*q> `t@jllzUl6Sp͇n| [^^8;;nX-Klj'KUܯk!9@&`:[ٚC K#IENDB`PK7,]8ճO>res/drawable-xxhdpi-v4/btn_bg_dialog_first_pressed_light.9.pngPNG  IHDRWzτnpOlAZBaKuTnpTc (0ST<=9CmJIDATxLsss"N,pQNN;4Uq&횦! ?mlim$&6&kΐ[?M йlMa D[K)2N\y>*~(dMX|w8\dyi^sX$I):QTAEQI980E*xWW+W{FKTd8%G VWXTFDV` aARD X佼kWE}@^^zQU~]X7T4,*9ܔn+p۷ﱍ-]4M"q'jxD'Q*E]O|e[5 d@+pht{O 7 彧*^OLUUe#24JZe$ >ْ$i2*( 5QAJ*W0s %\]3Dwaaaa(UwD[" Nss_[Rrb_'7 7K\' >_wv_! N'OFfob^:LpO"z]+w@,:=K,L "mU2zsvm p @lrrrhط:M,p{cuhCQTHî-w&]Fˡ-G::> mN|/¶-g= "m&h ]p7K&{٣~#bb #G:z\wwuzl׃'2>@KH5Տضpُ{\|[`˻#'2 .@, q`ة~=pΝ?}ѱ-7}cOC0}=f{gxv_z$2GlqkŅ3pU.KSSS牓-.Lu|*=.Dr9_Sf{ y o|u^ٵ> lmu}'d\9tP[j1UꌺWdd|kk@iYXj`-/xː[ Ȳ\ GLvܻ```jj]]w\5 .IJ'CәgFޮYbV*JeN ى|^ޯhyv|E8r uۯ {@IENDB`PK7,]8<res/drawable-xxhdpi-v4/btn_bg_dialog_last_normal_light.9.pngPNG  IHDRWzτnpOl;YHnpTc (0<=GuI+IDATx_L(E(BkR!UX5lvxa f5Mلl5Mz6*1#l?0]e 3,t?b6EA8GayL2o37 xK #%ڢ$eY 5J[J&D"1g#L`||?22Wzܹ3 _@, B^5TWW"W_⣁@tWWW73$\CȺ8e-LMMUUU5)~5|7I&Qr*|&r5399yCCïהdkPa`5%;4_%r52777vFy \ "0 DfBPGGGөS~$V[OTE%5RYYyPq"W'! $r5oJUA`0p8>QI$v j!:N^^^oy"W3~pݻZi,rAqqqͽ{+q%rE?~]@رc5*E9UDfJKKk[[[ ssscw$W#[nv|O}'kӧOxggCCÏxƑ="w8f"w|k'N(((xr8s[dT*o]_޽{ާGBnܸYvEQE$ɑ?'6AOOO#F+}XVV1fXE2 Cyyy ȰL:::Dht6-yD%P @9[؊g022TRR1$W㝅)<]`0p8~ V" *_UN5GC_xAsQQGj z /v_ٿoT|u8 [.}.ܿ}vɓ'/l 0ZFn$it:T5BSҿ YBЖ}V__Y/CF&7 53/}ؿaR{[[[Ξ=G_Z_d2z-.}tZer-ZmjR N[+T*z=Owuuu3S@,rD]X,6 F^kCi%z /!q˲d2H$fėHd:OLLLL=̩Ϊ #l/گ*S#1EIRd_QYNYIENDB`PK7,]811=res/drawable-xxhdpi-v4/btn_bg_dialog_last_pressed_light.9.pngPNG  IHDRWzτnpOl;YHnpTc (0<=SIIDATxL_'TYGVTDTeVۡٲv:4djeuͺ-FLlcsY%d3 fKT`p/oP+y%w7|X-qPG"j (?4l<2 #Fbh4:ҥMMM~c0n\ DO ho=u~Dćo-<|y#1jVXM WCjLtv(-+-?]\l܀O4E.>_cUunD\$RY꤯r[QQߔՌY'@:"W#ýMMAW{۟k9 u5cǎQI;88-hGɾs@ 8/skXvֶ@.!r5bŊ?%,IZwv֑`;oɰZϋ\,_bw]}Ï-'THjf-+~X'rM`]'JJh"wRJoݢ-K~Bh_/ X)rM`۶/L=$55D n=v̙׀"5$\$%%\.--2Egm_\]mYzV`Xjb,˥K?\$rMšaݦJEj&99w= y"$_zj]jfeTk)))yyy@5CRE lظ9Ik+kK.&dIJ5cX)k?!5 I䚀bYXD)M$dD"50C䚒ш$$b0"rM \# &rM ;DD t8ȝmj@hT/eaֵkVT#ɝ"uv@S}ȝ55sG4Gي܇hq }}65Y fIٙrt?"w@%{]I `;.Y/>θ+"w65v`&{]t[.z{*r6fDu^]]r-_p s\{?~/?W$B ]uv#G.313^gms]|]:3_k B ej=iny'qI.ije DK^նV%}_cUu'Ig~x|4v]/-+-?]\l܀oc'0wͷn]+,|ӦڏrݣBIhc!u{y;~&(Q[X-2/P$XIENDB`PK7,]8&res/drawable-xxhdpi-v4/button_done.png-zTvB7&bBR ^wQ%FT)"7;;Ҕ:" s;3wgΝyvvhPrP*ϛd;>@Lo$Zm`sݺq?:KSNCCT6^I*O,)^7='zzx\}鴁:{68/iVMYo((LwZwԄ0nP!Hz!g,fHkkQBSi7/h*D$ !oLhzS ~2޳ P k ne֏n$AKb| v]Ё;^ "Ec}bƚ4B\#y#!]"/t.WzC6VMPj!1aδ7soYC|-P;D+zRj["zz:)L@@'X` !xtdBQ<Lܫ3b:oC"o((X{;bW0$)Z\%P(88=5v:ӝ,QR LRA˲2N:•4SCzo*rNv0JVeg14~b9A^7@x|gl(u( J6'E^|X^zֿ1TkX-R6@,CpZ6ņߌ #H{M z Sy_}<9go(D8$GZkJ)s,g+bEh>-ꐃawUTxgE✐vSLaC 4u01- T~If*Қe:@;@m7\ ޯda 'ʙ^Wb0ߑ[x.vv60wCJ{$1bhI=LM?LhiWV3ddNjSXgU}_.SdU gr.tt *n%dzlg5Sԫ[1rC"GJcZ@ )κò hMXCnȨ; ,H5 ˻ :\qzwV:i{cڐ.2,v8r>s(T-$D yWpWfO͜c2*"bH4 |WpBeKDkEMI\k#bz9=\1}*TIN0s6ږϊ#n@M)Y8n }bL3f3 \Q$G04t^VK'^~%éqg?WY2Wq:͒H$@wf^T.&X=7Fj:AC,"l4Y l]g$``kndz'Ix##f̗OtxgkTZ]YT+Kkh"DFTa fq$N&R@M kpB~{ 8ipJ8۸"KnTji' L#?O x&1<tǪqn3n2*G>lx'Z obgd݃sOӧ%!>yGҟ fz jBWOxe|Q:% Ctb#x|RU7>𗩬!@ 0}Z O'B?I`+ip!S uJ9Gb;a7vhMzC炜q_٩'^I1 ?v`B_n1OZi[Cw0l5;Ǒ/ܑkY>|gDDJ[H"OS *jKӱ~Sx!f"CMs:xZ~ D9Y݉B3 R9S%Mf&?! ֙5|+!WS18!ȑ}C'!8ie1'KqBXF<^oE5#*"CqtgKV7w LQJ]ְ͇KdbcʷKp v&jv"wW<c|!0. |)W CZ7ʰJUS V4y/|ITH-R{(sђ-΅=mFO‰V2CI\Yr(cGPXBx&5!Mc0Tt?>ol@1@2"Od*(|`{6 )"jq%!ouqA]T'8[q9h>rL`Ҋ6 jZ5qFiUzrCr[)ƍNyV3^'tY;M%7ģ =HrgQ^I`v܀H;2YCshqM~TKz?DҾՀ=B<9VN($0)Ҫo EYUדi][ 7~ʝL@`daP;*dcW# ك91M#Ʊ!dϕ7Pj"C¨E6@9(&imp۲ަvyq-ʠvGTP,Hsۢ8X1Wݳ[?m=|6NOt%UbHs>! xP mgJgyo8.ۦ{ Fd 6FHz=ؕq"y1%n+<Soj_LMuS3FJrJW}:_֞t\^qwr}Cv1}t4ƳIpB(6 bv7J=Y*>.x::gE>3hjʈ"<6ܩ=~;n? =Z nNfH8H-3xq1@rGmPj'sS[˧vnJ㖁ۅIl$mށ gJ[}芸3G2D.Q/Bwt*'{/&p#2vEr3ݓB迧RT%n6jG9"5E~[2B 2/+X4˰lWۥnEx\?k>9Mgo|$ӤH17jkW|-wٕU7lGm?~{W:~8f-4@ "eZ!a߸ai&mXk3/CM*[s%^(Q~<agOZs,.{X̫>b]s*4c\<(LK n2'W v$7y~əɝV0 d7tc=ad}NxIMJ7>6S%rhn]˸vpA雴R=(E=gŵ6lrh=&N-|y ELK;~'cJؙ|!MxljO[S`hnQ߫T鿃!5qū _kߜUHԸ$Mf&5׳;[Y5T;EF~tuQ~yb닸ACMGDίٗ˵T;5~nFT: /.:':P. }v_y'].2uܳ%𿂟,=Qo޵;J4>a[-9'+W;.0*z2GPi__<EWЬjXދ+Wso禽%G㪟mڬ&><]RL8wFz6@ن@u!iK#O؟Lv(>9 t x2^ȑWPM_i%3%_,-O7Xd9X4n=/]eX6w52G%᳐q~d5mKe["sP,n)~qJbJh[(팕Gs>&h^SP'm[K hT2rڕ\* \.1aV9?2?7y"F%sAO8,R^V ;Sʄ]J&._Z<4|!ԩ詨f3c9P`BeM+yJb֛rUs -u'Kb;f?{}?h_JZx'OI'FHA'V[5dc-kD)X6Sc[b] `{u "H݁` ֮&QҗnKU>fºֽw5BsAU ftu&.Ix_Ǿ= `tWc1Mc1)0!p2r?~^DdrLf*@T~J۞^AgtٶkԊ Cg?|D;غ1$~\,{/S8`cYOITPÁtyiwgɼAvFt#Ni5mLc=q5+U<#_(ﮟrd~cK>_xZi ڎI, % -<|vn7}O]lS1?gkx{.q2BeqS)m  z<50*}=+J[-*z44nzG*=L(Z sSc'}|N_]X'h/7]? ڿSM!7#ׯ6L<, ^oI0#0cE%IdΦ$+RKr$2_x`]Pjw, <J}*ph=CuuQוb&}_FS-&젢8_/I/ap X{Pi}ȕbl< OM©73$j&cjL1Fԧzq;B+7`mAn:eЃnd1s+WEEiI#뮜ZR64psm]lRKSl)B?z#CU'FLОyIe̒?܆>{ ʘ M4Ŧ'w}i|Ω2D!ZR+kB0k`r~^kM9 ]Sd?ՑHϿ/$y>eЛQ FȨMvb.ՔBWn>w Ɓ WAщPGCyJad6GNvvޥy޴-2|g9W~4ˉvLI:`='=۰o%E}etl.dXec9:$?hˑKRu5 ]JruJ,2 ܣ\zKvGHx?'.VUPBy $ѕb["C`66ʖJj# Z0)sG'1|1uCvf_t.9 s _ F^Osh}i&Oҹ#nf ;Ĉ ls~Q E.2Mb,-JWM" dQ<VmlHճnh@tp~s'4`:ЪE]`"B}"A!|YFqU@Oe0kKZKrnpiTs3_>;[!YGǏCpX[8"GBTtB?OsrML_[Cʭo|/E~U@ q%69˘^>$F[-%v% n Vj;۪$ wfC2nmhF[&v!ǰoy jY@ @;CJ;f@?AJ, cWDrqU \Q; O7+2q2i`ABIL݀96/s=(Ep {7\ G[&iSX[if cnR mVj19,"Gψx0gGQ's,@oCJM뿊_Ma,^nn:=gJvkz6/JN{@ЙifS>c&t+M `%ߣ (*kVihKr%CO(S'4VHF}dJ >0J%5OQ_Qgb\.-ɟܫd˨OXbsT;coւŎD;l9LKi#U>qngFD!jQI$Do򭎁2܉A.Plw@9π'$A[oJ/IqqM߿,Sx"*UA7kö#o-`UOl԰;o# i!~ӧ*wɒ;=; +hJ"!E}y&yq, MxAPϲ-#i0Su6s9!sC[5x.7 ؃_ߏqN&i1  " {64 c(VJ1o<, aN}}@VuW&f^6,ds{ CƏ=j,O5bwwNj4;x-* 1dZa Ԑ#u?`jr擁ėt>e7Wu ,bz,7 vl z16kg$Lѧ)Me;/=G(I)Ռ&T &gdwtgVoj)/NoJ*b);C{[@騖| ælk}ܓ|8trИYu~N>[iFF)2:2`}6Tom8>CK⼩GTh̀ejȄ (wm]$BӅw7N|j%jK/Tc_5hčBޛ(ܣSpKtFXa..UK.,[cї΋~, B ,q|Z&ح+0+%~%&ԏ.=*5c5e'|NT9ie6/./e,g D:z׽ԗtrv}EDAõ+0LKz pt |T*/!R|KRX{;pӋ^'^oc!n)e㮮'2;'v~zίYGsi_-:a2!o͹6LOʩYLYpB#En_;&4pf"\h0Zh ҮrbJ^jJ.y5/VgTr ]y ~AdK5y7jF$G^5X\iG\)s"K<œަ1h8kڞܟT2YcU6AJ[%(.zGF:軵_ǁ}8n:&AuӬϣvCzʤ? xfQrt α|rßHY}f?{ W^Guux}Vi\؀uxPP Q5fק͚i> ީh*mX"Qⷆ;U:}`R&~kgW:_>)m܈3d=ц;7fK{Äxߤ `d7rӵ)VMUߘ}CjF?MJ^12vpqqJJz9Am xD*/z:bTL?YL6&G(_5 BmgKA:21m㏘os.(4New, B"[fjB1P5"퉗>mU_jL՟>w+k1fY9~홹OYW#l 숝tA$XSnȃ:>99xd^FB~JFb7''T޻C+t{;Bq2UUPhW7(ZU} ^<>lW1Ub{]{Oo̧(ؙzͰ(fn9AEgp*]p'w?ToasNb֭Q$h/C\ukժV)= t3&6f=([N cсpd 1}͸R2_zo䵴i*ei-cS7&IY]ў+K S o qC=@)ͲzR[ؐ_DI,灼WB_u[.q6qmH/ 6rZ k͛c{W^vÕj!ܛ,pmZ&^*Ó.J3Jܰ)Ǩd{a%r|wCk"=fW|!yIVF+="5k.%w?hf ϧkR_p˻M= #P&;UKdR&-/ԆNy-OS%Ӏ!ʳݷSՕh6FT6g~D#͙M 0Q`q4=`RxKp ${U-w>,l3Zh\9/`cWrpT:ul'*E^+= E^)Vjbg6 FV&^}pxx[5ysZ1mpۼJ.nTZFh|?;u@-~Uы?0֤Uαᨾk];>/,ra&U!7경Iuv?f]ϕ5?,X{[QwCZo-AL88~K Q/.h~Y\38>xf@#PKJxpPK7,]8+res/drawable-xxhdpi-v4/button_install_p.pngWgSEH H "H =!*"(D* Ei;H^TDHxg;gpѐѡu5MȮipKFFeb:ޏ,cj뜿UM{o[sƴܪ͓ i#?4K̆φnΥNR^헚RRQ$o߭&gO"t $9fz)Sg&>_Q&7֑(],vo+,k~_L )›բB ă[r[UΎhVE}dd`& uf kg.$2H8+( EQ 'EoE5>zHmn.V!>  ||hzOE# GRd~[sj/f@Pcdi>}~ss\SWe*9{td]S@SeMɣ}j?$2və@]}N&`W(U6`4"OF\sq.t<2?z=<&j4Z+0U?PZjWVlzGׅ.*{/b_o1g6(rn_|K?b[E`5`C 4}_fyRi@(F9\eqD%˲yk1 `%)Q]@NXn"Ƴ€InK\Wn o66 w³+,^yƭSFBwR_gR^TFճLDWmūp q` \6v8ޣ,(E7XN5 2U [=L*XEd:Ѹիrlqz][)[-Z@ͬk76k+4J`\=/ w }}K;K^t,3!㥟3EZaWAj~Q{8ZQGU]`dmkotm~ :-©* s*Tdrkr  +OpiC$H9?1NXy/&I01apf/{kS&ZSbKzV |osΟcESfEoMЭ*Ry-}h{r*yow d&M.O`8sD)s'@q"q|gD>69nc9]en)5}8pM3wUPtYw{@!hgF Tx]{.tJ}ZJb`F[32 3 j?ѸÑA&[]yhm8߶xiKk3gȡ;ϫ wA0a`\wC8r>MPJGB| בON ۨ|Jk@؎EdDz6 ]Io{7 CzpxْX]99"z*L nDB]Y嵖DNs(soL+zGMZݫM5p%T}sm*B=Dģ#A'{@9%ݒjd›9rK493I>PϢ04lq2E.Dp\y_SWD-7Y./<ۤ\CQ 1ȻҀxt,Q8Ks#Z[KU@A[c2*K+Po%@yf{$}TYuSA<[YB⼁b 5,o0 sy+hoV[+s+2 S݈ L%Jk{!$g?"#H[@&^T)Rz *I <8#F1 Goq$9 XU)!)mY @ZuB}\Z@{O\r|/c$Yv( yf̼pVk wPE.ԟrFɩU*ɕN+yl"ګ~ZRIq< MW{}R1.,S#$ț\c!6z؞-.?W.s&c/,0V'@ttAv /%Bw`ݹ:}-Y-a*Sz tQ~;?}ʍ3+2Ƌ*2@&qUk·rMhӋI0)#]O#Uh:OVw2yk6XO-1Q!B҂n_Ͼa#5Ze[Y(6>Xg [}D0B?E߫'i,Q1Nt:S_鐴[gjA&s;e崀UnUƉY4uŻ://iy髦]gb9u3/Oخ!`bPʰ^KED]*4`a}gH;+\SJZ񰽆_LqK7 ֓/ba/jJ$<-Po}3hkQlljCDjG g}e`DxeXi ̶>;ʏk؀mH;1mUȳG"U=#.A⌧F|Kk LC%s/^U%UydACjŇqw eYn?PKPK7,]8,res/drawable-xxhdpi-v4/button_installing.pngWgSEI( @ MPDjҌ$THiz(@(=HS tw)ХIW2ٍ̜131`cdcC"ttH5K3:d3# Z0EUF_&^fg[_%풞\:|z>_-s|W◇᛼r͞u kU鿅 ?;}8ֆVR0*(uj =U/gSx)"U#QBT/{ZW J_Z&fļtH,z-t'@l.dIz^!g=[b#1`ۺmܭ"lb~w)F~J93%{#Źmȣ1dhU@ )RlCN+)~併_ˊVi40E?b8H ̊8/YNVѯ%ԊmF?qiɢ%")[@tt=~\0,8:+É[)SZtEJS &c&MT/1}zDG i%:hon^ⳆNǹ:jMk 'jZP߸$6穳H]HGTҤ6AaqK.Ɋ#'j]GǣfDׄ  bb6phdUy:-p֫ !Q;8wU_rnQ?z펅XvYwv&AXVwW9%iV`HnǛ W/1)VbU>\=IWlԆ%?!ݻ~~2ߕ_ZT+tym֔Ln}sU6ˬ.Iߴarr:E5i/:ٰBQҁ/K*KtT ]"QoX"2D:<\y͝A]?@D/6:^I;@x@7'??1ZC/qЉ)JXGa:W`h+fSL2j#̸LPĸPbuEGDG,nPOX+<񚺲|1[wrQ6k2z K]r }92xx[*:+Z |w$Y9"BjAE|} 8H `Mb1dr:~y8Te7ELCT2ׅˆD: J/W5,8D$G+9#u*EsT|JV4Ӥ_%Q}ofYlc^0$zb ݲyR)t;0i|j`_'oTYr'RGked/]LUs*V -(d=*::pjM/zlH]l_j.$8-̮[JWdq( LHw+?Y=)|ޱsjN>c~! e}0azZAX#Q΄UؐtMhX$d m矵Vһ5bfp1CtO:"P|RTr_/>C.Vz|b| cjx9[爓T_GC3N$+fǗ@0+vjrԚGd#J[8>ab~T|woPK7,]8*res/drawable-xxhdpi-v4/button_play_t_n.pngYWFBeɥIiacAnXCBWiYAt͜s/d}۩ieqaC=w)jn|E{1;516FrG u3WLܢb ύ`OyExgKihQaV,rBJr/|G0||~Z^m)qS/1&m[$k?FzlQVSR0˹DМ1$XgӅ"LXKk+Ǯ R|@]~AB/obM|]WA CmI5}1џ0@Z33ccuaHrڀoX-Ö!xS he^+zZ *$Z퉍|^UisUWtj *-!P13C{iЀFO>}@V6w]Sr_p2mylf%>fT|`tѭOC) KO47kM]$xS9a'[USkepQj{/HM_ps#VU[.k,YÓۂq![wYTb(\xq̛;G[\+՛ȨS(;)z"XU<~2Z-)#Kݠ#zO}lm,Ps>łg,=@";&P~#C&斅m xs\xdԔPq{,RT*+VZSjuKMqьGR) 1T|..T°{J?Cƻj3ɋ|jy׽|s5ӈKA4ZkYr5=>h;mxHYA.&du'|Y.36=BsW, KNst_ѨTProUձ 7n#XOǵOhIL;`ӎ~'u]Uȭg6VM|v'F\t54/hoLh}VM#=!,Mԑ;XJ$R*p*ZN4凷Mѭ  $ViܜX< l9aǭPKzggW> ffqS;3S:.Nf#VCc|a:|irO[Wy Yq܌MOƥ7IӁ9ȉBLz^ 0Kk:E [lnDL4Qvu:E,wZgFӈl9hnO !k~{J <<>a9䊌u@<.G\? z ./*q_IP#1˙kb2aYy ͸{S%N{P=ΐnFNJʖItgwGu@4M$<Ԡ_2vd6v3ZDjcjKx/_*V?%hZVRbJco2og螝/ps_AC1' HxI!'x"pe٦5}Qwj{vyoz3i9ZZR8%:5 &>+ՌS0s`ִ鍤' jӧ*]'?uF^6?Ie7JU-%~(M[W|HS?)ՎQϞSHw$X$&]s:CkBK3z.0L*~+OjE7Qs๋X`s'B!B*4:jزFu] [`0$ dW3 kX-'eOv(y9yuA3ɫZ85e*j[tPm >AKuUDi|[QHνBѝuUXS jiRFK W11U%!g- : 3E5cSGdxҽ&hH!يv|=A8`t{J2rACj( S5GuAU9>9%;:%9q[15h"j["`ܲy8bk%\/hf_]R˙9GkUcZ0mmE~? hֹƇD9ݥNuJ СXEZICx<ٷQǭAspVid1p}]V)ثoxԊlE` zPtKxЈ9~>(OM8'1U#C)+9- `M ||Wr# -Kv`ll/O"ӏxMBn _?֣z.%UЈ%ZXg a7wYeiJx@콢>$(yhZ T&,쇑.@siM?_kg9"˧**w}B-#80xXHo=SXGORXM? X&,|k2_p1tӳ^+̘`AxU/ߑm(e^oZV/*D1#Y@v[,7mG҂:L +2k'puXZl?:F@!1G4P=:d'iCV4?r؊XϖWPspT [^K ? VH4nl*ȗAn˟"wm\fVݷw92sF"VEW.HևET%_EO٦M^_\ߏIvLu  aԹ@bڂJb|(si<F73J8&# c˟V,Q6=moVX͸Ul8w5)QH#p2r*&,0cZ&}HՀDW~!trn񲈹HL4=o*vQu$Jr9(4Tl2H^G)DoD@ +jYeAw߃ZװdX6ܨW(&$Ldty} ]pܐk>r5y8ȍ J7E/1e+n!.lA%&[?Gp Q$E˞ɻE8Gӄ~8>0yf퉟V:9`ٓ=uc>ΗOv#B8}xb\~[)跆D oW4_9']ܨdPd`=}{Z"FQz/;5KnURfP` Em m{غ0FfV}: }dH53˴de\Ѿ#n ?N #Zbt8Ur*QV? ☦'60" :%1v: Uל #m}@\Vߤgw /]bzށ0͈'9Ms+45^S=/m1rbĤk}N{o-cKmF Vb󼥡b;&uI=ь>t\" ʹAVN>8na/48@R[h)\;Xz5u8aZ{SP_2r½wytJ{yguE|Le&"ب\ۥ v2kH$!da})xWDk,B*,?T)V,BO'a2l4(@lOXH|X5fHƶbrj@3S6Sp*inͫGh/q*ۂY~uOڑw;6' ͍ls`S4.y3]]wD|UѦKxt.Zho8,Y-]%*f~8gHC\}9BE!l|mHiY.G_gL nF[<'zFҫ7C@h1Q장G9ۇ?mX%$aDzX47+QMD,ԛܓv(k͒Drx^0MAw74qSǟIO_h:Rn.q&rTStF[N/ȿnf""P"ա`G7F0KI1]B49N1a/6(w KLCj լ([M|bi |fvsh8` H_gmS8kD8$i2H{Ck׻&?B;Zƍ.ַʢK^hi~<^BE#ɲv4y#x8RzeXKۚj3)k,}09tH-'hX&/ ;Jf*Rqcjt{Խ7D2!sw nߏӜ1&<[Ѭh)"DE]YwO%4ö$ڦ0.(IgBH=rV(oNj czDvؗ[~.x wri2x2};> nH |!D5[q yn؜%⳼bdH/|,եmjgl;g[;L`Jnj*я 4/4)|ic偗7?mCm S'K/$7fsknis)I]PK {naLסf׫Rv-7ot|[4)x)6lj}|s2?+3/.EKAx[FSY g/9o]KcX5x&Z/ǒ/mYvhE5h,}eʜ}*uX:,/J?IJ x%e؈}qGޖ3#Teyr;*{eL(esԻ'wǧ:j%$FQ. 1T}) -VFI?HtӬ`~kWGģrk ӘkQ,J{yJ@!u1}@ِX{ĜD`EQ:6TMGBʇ9As!B W_~4JMs7~XlLPϚS'nFfNC:WϞВߥw!ByGpXyU^Avum0c6ԆNm:0 Z$}D(4Lxh:.͌r=pZ6h=UhQt^, 52?J+ܭ[\I9xd6fE;6'@ FksGZVk1 wjPݵjQV|$|4!!z,2rxLuıAV)$E}hwKh J٭)j?4*isVc{!)A"L ՑH>Uڌ0Ki?v]sԧ%*Orʬx,jڮ.5+y>9ޱ[zφ?_#RfIhnORf t~.&S 0Og6M&q+0&i#wۑj',vy4J\)WsRH!3s8R0w3ωwoA)Aӧ2_@ޯD_aݐq{Е}zD#U R#A5K]j$x97vM ]#H;g b|& Pmx\9dAGFL-D،|@S-!ifOak?M 1WKtٚj-]:}.9<6 '?z6=~W#y84 w\{^q[ B&S9vWWGS߀+}naVCv<[|D}~0/K?[yxiH| ;"axv< x_\7A[| ~ K:DRMOI\9çv@MhN}64%l{roȕVzU[>+^% 5;S"!xLj0 Ղt QD]ͥNNkvT~^ICUܤV^i Gͳ}UXsb!X*o ̃c"LCEr0x%z(>J;w `}u|:یOWv+̊ezGNw= ^'F9bXX"?g|ۢ ?C c/a;dF SVeK籋^bHGU.5e1(i=ki*Ay>0_m=țXb:Tq(l2Ѝ.W@fպh5C̸OE m}6j]Hmjf(P(ML؎*07X mBkKCJՍ)Axv(<4wMkŠT(a[ÜccȈlBK w下NFgNh-"A(?~Tvg:RU(kG6_rSӳ^V,2@() kì۫Q-OfC@dHmĨ ~Zxsw_A"d?7OK f{Nyb+UMhp'Wc0Y sPUJDw @~+(f}9aQujj`Z̋;qU˿ ^U,ccz J ^"p}ި&Rl,ϳzw6mS"$ѓ.ֱc3 ,Ef@GYVh$P=gǩں#<#_sb%3u[5=d*j[&`Ҿu8d \Y+u; 27/p, (~1IEk˴)X}$&W㞗8MJy,86lj*4JBi`<1TMuD̿ 9^÷3N sh%̌ȜiğL.w(rY>$EڂZ qS36b`Yߐ:GWFew"]}ڪ,zm h6Hgih}cTFs=Գ0Yu#vS B6/+cl|?P `~,+j\ݬ#Hf\PmJe,Q`mv tOk]01IF^>g1dj@F bR~۾RDGxGl)3_͑X! zq «}>pA@)aԡ0P& x w帱onۖԁgYIUX{xEk3R`P8= B S*=ʧ!{HԉfvAo!1li즯g-]Y!mGиoӓ?j^Qب"_|kJ Lih%U`,F<$>ꢢ-gv=6OWlqb$3  _ը#<|mqKTTh6Kقa4EY7 KMM^@`=41K>p~ W)c@O+Iw-kk(y{Ɓ䧃wCEn Rwt&)sR[UqBטӾ;n[oFޓkĨGqiyó&BzKĕeQcFn5Έ1L#t;[e7*M"n-gEޤO=h@,$1WЁf';ҫ֬vՂY~8QlTBX/nٿWL;Y@>Sիе>h/7DI ۣx. & ra|?H>;';䇼[cfkǒRWV$vj}y-|r%xgTR;mmg/62/FD9]",ECf0Я:G]CD4]]^Iホ eSq_Nk\WPHtxe]) wL}9D?hFrM 8ij-RFąGgz@R*!u[^[(a>%0;͌-I[R2u N: x,v~,b~'#͋z?f+mz`6Fs{@X5^,Lnt+J]!GH19\8nH#2P?p{ˏ"ʏ6g.n!O\a%O?Gp,qDy·ԽJ{,?Gv/FYg;5f.`$9bcH e*g0=go@f*N?ׅg*%bUHbMAs:-| %NޡCX3(?\GՄ`)őwoQ( W&6$ĝ,LUAko*@jFLqErJ|~a{π-bo^KnGDwc4?U-ԅMzN_}g:Ɉ-2 4~LS7ZҐgƶ@vM@ӸufVdzP9ZJlN^9yKWiv|h|tI}CtdAHmp?trAXy i!@ T0Oj%&RFȏ cƵ @?Qvb7L&4J:LocoZ9ӓ K4㫉5[p,M Gj|&\{SvTBU[rƍ3f8g%0 )Z T(%lJyb<Rp *CNh%c0{~)/Go}]eٗ􉇿gڪz@Ge<}\ԮD\{ i*3"tL6(6-_J߾PNg%Y ZF[iIy'@q4-vX_\ ]\Du|5&Y-nZ{PJ8Ka|D>>@u)'H>i"v-'2Ʒ/d&/̽&jq4d1790qbr0r .%L(H74EH֥h14B}7z<߿D8wXk'LYj쐋g@,{!ox9*IEqwB#J"u3Ң.6GȒn`oޔX2vuu @ YlEݏ|%xx-4Lv͋(7y ФGEkc͵cѕ~~}K˯,,Zrf %b!KoBztJFCO"ZdLNqAOǁ3c>:o<0,W(zuQR\w z'Z<-[ёkTc#XjxXReu{P YTJOOK y{<2p\v~aL?3uO0PKȮFPK7,]8,res/drawable-xxhdpi-v4/common_info_point.png sb``p < $W |B\\:_I_0yJ_FKmMEZUl#cо@ !ߕ}fڏg<3FoY45s6G;'y3n\|%{4WҘ 4s 0dHR0 _ۙ *O Or9+cD@jJ"#BqLk3"#)A%EFʴ @ L EI3.豦ҊlMg -kjڪ6Jqr%e&f8ܚ,[%Ej]Ñ`@& $Kq!Ñ`@kˬ:MFg@#a3;7/"+ %Gb5[Qr_32u5F]Dəxzxu^:Sg`t|Uf]fX<_t 霩Fϔ~e ZIy S24V%L:0oi2.YL3v2(d8G府M&{@k/R#bHCmM=PmKy'[V{Y'+@vT5O;ʌN3;Bhu flU?ݶJ}W y M3kQ*!K@טdtfP3|h-:?iaȤvז,Ob+ %'ml#VJs}0=Yjϝ*PTO?{/TLdkin뙏n^r=<d&(ʹdCQNr=Ǟ+RPyeWMLzw| M$vW;)9>אc,+fi<7C/7b1H#7r)L(6Q~ɾ> $Ctz|;>]ClUڼ m= ƹ\ӆsuVI JیUUjo= ^dA2b2,"#r}6Su&/s9sz ʼn!@eA84>¨Hq>c]\_).%"4HCHC,\mc-!*$pb~>!uŘF )e1:TIԡr|7cs*ԡd4e {ey>u;Jo77V0@`61D@f:o{g!W2>lMgi5{Neqfrd գÝ!D&֛7+҈!>~?z6IV? C9QYnabZcX[.:=t~ 2/dW!>ةjr4;EUQ.JfY+VB| H*g{)E3mXEFX]NٝO}M>(2[x"/g^H4/U-ʌ8% t '9hrJ/O_4:# ɴxaum3<|&~!(1^K/ͦE#GrTBWQ\%D*5ۛC PEPB}ryi.KaYh {7ץHL!c/d\0Bh8,ڢ5Q ʑagkq-48 2@ (P2˼ScCzc4܃wHs^H~PŘ?GC0"˥K-ՆRlS^ S!D,T 0E_0Cf,ٜ%0@ AboZJ1Hy$AJm.1S7 @Z-cFLb{% ,Hˑo?՗3lPX!), VཆEvC@a% jY!JH\lZk\׊,Np^zzDb#F7@KpnTت:会6>KC0yMݯ{:) ϩ$sU)"2~g?'Iz2jb4j dn#|H?8AZXTU CT`?X&^" p7l\ژeaS:ج$ N ] ef34BKߗzn(La 7|# a<` g_B{jzn $@8h<C@G͇S{V}jVhP ~h 1@35Dv4Bޙeakߺڧe p}MlcTbH G-i(L]흁#IW'|;80dTa(D>Lp+zizl$%談C1@IoHC?&vSq.znn0\;G~mg@CPJWzzU w[0f—[ ,JctN1( E.4lՈ Psz$wz"P{&7"5wJzCa嘆~/q#&3D/>yiqDmnf(v |. >d%Jr=.q5v "λڝ Ե:w}fGD G\ǦHW4mps`KY9Ox\{vS@D>1O=|'&!bc-<<M/CVIbO5s{J||f"E ᩻oT8ٻ#@),M`SB9՞^S{ AI"Sԙƚ9d`@lP򪔓h^!"`K3@wve9ztd-^]j]UYbn[{;I4&zxĉT4)*x.mIjM$z,5Y+*W z;=!q8Ӑ=9-ZgYу]DvGO^=lZ3ݢC]xnzxɈZ7.~"GIcs-2ȡn !+^\cwa^)\~p7ԃv޹hS#Q"<^4ȑn43ɂ'=Rc7?eBz" upLᇏv#y#sۖ% \ z@jye/*Q\|f=C3C&Eւ겶,pn&:m=i>RWyZ(tYSwyhg=tz9__/]:h~S+rU:譓>8gѳbTKwҫ⶯;?mgzΈn"uq2-J ּ8GXvbfQ";xdD⬂פ[uP*Ch: tNۨq*C-_ADeK8F'S{>ĩ[Ƴz5pُ.{m9%68B1al8|z4@J۸5Ը!Cah:2~9UQNz`J="`\[Xm;1 "tz0\%뫳Wm_±7eu`3LZ4 _Jf 0}9Es&=uPCߨ3g@J z3*=&@ Eﵭ(T 58;]~0AD[b~u֖JN]{@yNzz&X5O\x-oC Ƶ/s Y ުm;޻C `jqƃUVlu9>z PU ܢ{/9Ep@6ƺ4R6{qd8-=B$Q2m{]t/F]֦ HA4:|=7&Q~^p K;>]syH 2?sOCK9R9pW7cW 8=Xri`ulVd?P2CG 9OW U ¡_J]p.p❄aTMcL Aӑ~>3r6 !Q˥Ao3 ]Px;Sgd*GD9"F; S?vğt}P`G1a|$MXPh6~"gҦVYWK2bvh:R8vhshު((,2~犄G$_e\Z0>2| eX*z^\%m݅'JQС?ILZ,\}pN6^{^ ϳbm ; U9>\ՙf2 :y@y$><%_SgfEh J::f[U\ZBcqyS-hxuyu-/|qmR.15} 9Mawm ]9m[9SwFt-'zi2MA}Mg{KTf7IG{hʺC􅯿v⟿mq061#݊=:E a_GKM^ r8>YaPҹ~ؓz\{ 4{<]$ Ӯ7NԿ۟rzF~.hV}~ ݩg?Ƥ>O'Re8Ÿ~d6b) (:]G|*ȕ/5qV:y{z Pץd9$~2U ^J f9$4WT a(^33IQ=glpgS@?~~7vR2에&z!9_}/YSS (vz^}/)Ɯ3@H?Hudk@{$^z$>w2Ar,m)_`IENDB`PK7,]8$res/drawable-xxhdpi-v4/logo_play.pngC@PNG  IHDRMS IDATx}w]uۦϤ$R">}ԧ4QGE:PH(! !B'JN2{s'QIr!3srg^`__OtcQn{m6BFw9FsXzQ(to7#=A}>:Tz;zC>t!@9a&(~GoxCҿlz 7t5CrN""POg/6~M0 "YuN[&;V~'=78 'AYr@~@Hi/fd $FAB "O5!d_; MIC!x2ppF\'&i_haTI5BDD@߽/AY7;Qɠs(hXnh`'4W>og&O=)VORxÅWtJ'SA-fMA@C""@$A1|ߟ6w—Xs+|=οDB<-L.en4祏K 8놈8igD|3'Oc9}YqcaܲiZ046'0D${Af9}_\<4+= 鱚9׽++=$jR|螛AD)AĐD +P|6Ny~"n7鱚K\@L*hˇY@Q"1bRC3"jGwSᝎlzfcokP^+zYͲo'B(M/@"Ǽ:BKE{)s{| /6=;j0y|(@Vl&%[vQLD": "!abHQЩ9;]%?i3MRz{A.,EBي>io,mHuX@ `b`1DZPPsFMacSg+DpͮΜ{z9 ?>A"J(Wi}Vrf%E) ` HROKW,zzة'7?Yҳoq @0\uWhֱu⦑x} A+gDMˤ75 z!DRkFLz| WeC `fl-mXU &h bV'P Ը@q0c-[\(p{mNLbz ?c] ]]Elu TT+JKwHA6!NJeex ;varh*|\! Öޜ[lh.O0Xq!`K"zΞW/g3=V/hfrҵTC*wgcfzgtė`&Kmʀ s4VoͰhݲ2\8M?oZp7!HhF-=L4@T̺@b#Ccq X Q<ҖhB7m{upkQ;g'g8=@_VgnRmTѴ)HKLB ց7CA @b1aY@-e&;z},,oA~DZv{#S Xq:1Ǻ$ {@a>&zUn/o; 5ȷ rÒH$ѐM M180WGJD52svn19`é;νpଷaS%8m3An^c(Hzz"Ջ2j2 IuVGcg4BևL%k5)]@]rՒ=voȇ!D%jD2 nF%qf|'v R ]w}osGgncGѲoAnc@^mIy0Z]wѫޥY2_H pqOzT$-AٖX}\"p p癡a`x_>|䮋޾ }+9?LeL!+_.,kD]5D$tdu\($^h)K;g{@ ^k)-Gh|~_lJU-kz?He}5W[;EIG<ݯÖsmj0Ľ~-0ێXh/$Yidw-u@T 26ŷs̛@;fhL]%ItɍjTvU VUODyQd N$YnkD 7S3gj5v4.PŨ82$d^&vMh2wH[A~{+[CZ" ZpBFN]yx"aYK|U;* R7&ĽݯwzW[4VXnxfG1-Dc7w&opC: qW@4-uC"c>42Փ뻲KKDmi>bZ  lť,FW"*\!mxZv8#$v<0%UT=~oǗQɤUWݱ•6(zAȨTUnKRbo^'qןJk<h{zỴ_2G N* Wݹ>y"%Q[n]~ &-RnXϡ 9D^ćDƷ9*aD[@8H7VqdC$wmf-vܒZg:( B@ +]_hHdzA /Ǎ갽X"SH#GF 1 1_XI.d~Þ [G!֥ȨcF(c V q"11.w}\Fte?|)6D'>seݮk}+^BZ;mn׆WԆ] g\Wd:L+lH N'y.y3qKeTv`šENZ>6g%ubzeNFϿդD6u2MpFq- /S;X\][&0{79ҩy - -z<iE u{*b$h1 yӓK1^Y1ڿݤt#gDžLhW{꣋0~|&PZi&7fU2)v5+Qa[-ek͏$(FHAљ]ۋC=(N2K>^CSJ %TD/(|gkՆ'VeCDLf9^[l2WH&t+VimG0A]$`;]'$w+V<աRcf?x :p3^7}C}{I`nOuF^ۓJEHl`@bvHBP9j",>4f4ЋJz=s1ع 1 ŪEDP6u y^'I<˾̮Qw~tLKhIp6L ̙fwѹ+Ǜ]3+/5hlH{ Հ{"-aH񔏀٨ #¦h,&Xv6ıv%~f5QMDfـ7gS畐mjd g,zw(| F׽\ n zm,=zlUv`>l1Y$܁Bx^|p^&YF+c bFf˔S{`]A@4d YG2ܻ]2*Diah(QNT)"\>k9vTƆZ׌q4 ܭo+Bԁٮ[!&60e̜j+^|/KKX(wr#. l/>O"qfQ@,Yn̓|oB( wdsK1s{f^i߿ܧ =b C31aʫo9绘jbE D3D*B!k_J}Hʺ7bm!!*%E~г*Ƴo6JEtSa])w\ o\ؓЅ)Y⏙}7_I0?q] DwׅBtN/2To{?Hz.ٺ0OSz$M؆=,@P$pIQT1r$rZ?kX* u!hyv̑![EPx@ǍgW>KTU_~?L%2Gx|7,ծ"LH1N' {&ݨ$ضMvgu${c$WA(OSEwUU3UX&%,k*]=č' B}oIt+S*2evIb #{XMpԖntRK)I ;1&SWx? 4& QMߪ~"I]] ?r4?.T,!z5o0+FiG{-7PLO(!5*HK+"W^zcxp&q?@LhY8\R\ȺTm˳ﺵp v$g"? O3gtJp!Jbxˆzdcl$H 6N([ yz Ln x_ ŭUDJʽ]*rqŏxzn: <V/)m7PT=b{b]X]4$!eF Q7PPGal|߭w#h&Z^L A`V ^DJx*] ve tz6 ?6c%3Q x{AT E5 M#mz!JORkps݅2%fn{?mJv̫.KYlDH'tW9@ᇗs_b:6U-fGԮ[ҲoR/0R͗OLbQeVsMf".wJMur@"T",!3o,0SC2׹wuPQD~.=>^AȀL 2*Ew?(<iȡ͎Qri]S%zsO5? :y/~X'L@170 HI'N]ݷG-70,OhoBptm/Ӊ)8|G & T I7Ȼs;_APZxZ3>=|'  9/2(7I>NI{h6 Ǖ ]A~N[F'꬚Q{aKy! %ep%*LtjQ~{o? B߭ nzU:x(- 7$ Р$4x<*0x*Hv@.Iw f:@UCRɻĈv#9j1VX% + `nNۻt51yȝ5x|U$HyM-$h , mT䂙}j_8ٱ{POU29DJ**\LHXol$0$;(F0. v/8 —ぞ5gX2e[yɏPv{m{xNyIWS1Mw@ @tWaE@ ~Uw=ju"7B4tU*) &eT+&frGxHnbe;V>@>bִ]0]Be ωR珻x.G|Np_GhMU2QMQ pF)H Pu.Hv25 X,N\3aN13RD eozY<jx{wrb6("2!Atq;/M|{tBZ=U!"!,cCypRk]ѕCöt>h0@3 Y[dje}Xg^0e_8[=5IRbZs$wewjaMʚ ubi&u6P;#P`b{ϱs ]5Ͻߓ{I|vSA\P A`z@b7G^'vx;P K^|!~d-pfm;7d6=VW?@T]wyH!|z܎$$D̶Hږ$5h 9 "R|~^g"cw$~fYWv~/(!Vu^^WZ ވh9 ̈瘞6gu@Sע:hbol*Zc#i&$GkX.diREomv1C(Hb'͕/< L)E.GxBŐ7 -lo{9nI}_}+JA"SH!-GnBWU *~vY4``ivPVF =~t:x=V*^ŏjTu>KvZRVs":1ɝ5zlyS˃+zt\< x!\8.{o@q7:O3+F,Z݊!IuQa}[$7QkŌOfk0skS=(:>]M[) NARPNaF%"?eU1n+ci UqePJǣiݔ.D^}d1jJ3.؍ER‡mo,a,4T~R,,].,ׯ[唣A6yaÞ8~FYWruDԚglSs{FD1Owc~ &|=( =(S9#7sE`8ivfA޻g{F|>3]JB@7Z8-? 맾fol2l$- &(ĴtZ~-" +Th$;m^CdEGA_ YS+~/x`w& "!,8%"ZN߄2i٪x}Hhm>aC܇O'RK)e#wŬſ(mClԓɴ}򔎣no.!䡌Ʌ;U.kC }l=`\y)ݻ $%ӹL 3NEj兩 uOH .aB,=Ei;R=W߱Q]&zj-Ωně+3Vn.[:ѤAvEo!o˨E 5(k85& iIw eold_`Ahl'*gq  (+] XZDTpsɾKр6r*M>3 +S!g&bAZi,V̈z Nzq 3^^YqO|֊1^mEEs5k dyQ[ \%JDqk*-8[:X=`9zb7i^oJ6 |nA+DpnZ8*jW*g<}tYѶZ xe o*Gݯ/(j9 J%R H{N0Țќ4@haف>]R.T"&OGkĴ^)+z0%ݨ̍u<Ȍ8a UZ~}_}# WةxRD Y^[5'5HINOn˽$XQرI{ ?Hj_^ۛd%`ό8]yJd{hQJʮ#EԷh#=f}o~)ave3]^r-' mlP+Һ'\`o;YAp lh?}eiGoO,#mR%,UG#~?.&iscpЂG{bxFUb}t(׺ŹM5-Z{r-";`,ˮ=JvAŃ63{U iPuW`^34m1S"uNPYWP8>tUpzn wBu]?gLihBbFLXp1'΂-H ޹j[ǼT3r#3. ) "@gM^<:_ss4,d+L3Ƹ H1Ѭ=nPo]5̈W)^G; +=6{ި.ڛPb "C4]&v Y\iEJ90ym逶\툄j$2]LBk4 (DžZԣ$<]u9]&gGi ]o :Ou1~"24yB ՋmymL}7f`6[vNS1Q"A"C/,DčUGo^$om / ^> ėBF%CeV"`" sᗟDi g=8''f39E 3Ҧ9u ׇqVx B!csԏ ƪö*vQ4.:Ú`;,ūd,)s*~:!-^1 "w{:9滯@f(C>ДB\Y{z?YYωMb7Ǿoj9zMً$B̼,i[5҄b&}['?* @a^$xj :~WZx`?ަP-A!WH FBe+ Nڗ4),R DqEhf2NW!~OHKz'!ݻ|1OV7T,Tg)B=@F DR> >:lhY<GG R&[fjPB8UvRҶ*٪w3ۏl5Z'Ef/ *Ihs'%MA}uL7H"# JI/Ֆ2Az .C..t|}N`M+ma4PwGpdC~sinR- kdM> JUgZcN\ =$9Χ*(u9¡g '_ː/udhFzO|Ɏ=VA6Z\8٨aE,6YI  Vގba(p;5٭u?фLtqZ㫲XB^ukI4YEI֞?Ŷ\IhbUS}M[v{ɚЙ0EG"TibmXF_b.%/ +ok']Xŷ&F*SAYC4N nך.s: p3:@^ zrq?WTDCڶۋoTQ <(EIg=>К0:YGqNHq|N$7!K#OG k턅SiTo}BHHb\2;Ո3Չ );0v|>!SV[\asɮBIfz8.JNRAO<"+]O2, n?w#,:lT>KC LC)iYFU?_0E/Kٰ͛ ٮ|0!V,"rV⠇{M! : ! (Ğz4]fD\EmOHJQG>Ej4Ýnh쫐~@s)O2lB ꫢݟ}GQ+\Dz6| JcLq´ޛGI bPE J-'mO{.@f܉ S|e "Ү_]~ة*Tx:I6>pAh,s㍒Ʒs(;[Nz1>`l1uIS =I[C3~]&VOg$TTMD tWH:!mw-MWn5Vpoo [h,]WMnDZz1h6 (RP-ß{mɮOͪ# J4mzG?a2GyΆ@`H. 5Ѹ;N:Vym0SuI_<BCä'ׯS)S;deWJtW^|gفNPMul:Lsa(ކ5 A RF[#t\UP$"5>gUϩ%9^a  !(XNh0QQ:hIq} SKM7 E/1;AP, (BLƪR>+1MK] y^zm/>6&C}ఙ]Q1c$V:%zz՝C^o|~ =7 @Dzj Y,)YzYa HR.+63K M{- wH+{oy}J|q0u"yH<oxNz;> y @8RYW)[zw=H]?qk}9V%I 9m1VL3PJ:*ŌzAOR ElAtZ@1ut{HTOvQnxB(8o.hPܦSѾަuI|%t0bitL>u=2qNBkp"ŧb7m-b0GIH<"Zn,{".D^"=}˕iLδN+C}ظtmS|k&ŪP013ρ}77 '|ɫ1#$Uz"s S_鿥Ѹ2ۅ'H/~ζvVlfc b×&Sw/*w̷ъ:4wNϦdSX7+[Q2O-Y8)l[wCT-N=\&t*VL*v_R{86 "46;`M3}GaӁ 0blk$A\@D9ԿaLi.Vd٭%u(HNfNrrHܬa^ 04gKp%G%So--v֪5=k=[.`Q(W `V!X(+hf۱4{ *6؁ccy'D+fT}YW~+kBaB$RSa^'[\3:UrK[pdlŴg/ΛDd<9xM*"iW kJP:>mAK"+=I$|6vłHfW^-"ҳerY3,9gѐ%e3)\V*2v]-os86 Z{k)]~URDs89[@>nq܄3ӳfrk4!!imEmC#z}PaN4yM@NwO>|Q0KSs,Ხ"wGuyRg!w"4F U܃7}|Nվ3[4v qf{i`Tyk8,K7BOSaly .q 7}Kg6=8Wh!anmpKaeuQCA8R !<E"w~$zӬ+ +Us+g2[JuHkQNXLm6q#r=eOd̙=0wbONdz _e'ADTM%믘Q>m*2=˶H|#T 0"~o^5ig䫮$}UeKbeR:7;on7}\¸WJ_?xt$$_($$pcWKעz aGpܳ7~%"BWo6'_L1wzڃhxB IےRƃ^-2i\07Y4OW."83n+à-o3 DML툈7s \LSE;_.y x,+D2\Qko[x% j@(Ahm8RRxT;&(^fڤu'хו_@Ţ_@p!RH(mjH X"THAT).tJQE 5Ҥ)6љ8ﺘNIQpf~-\\97S0w%}F|j:g^jkE z腕n3.];|`Ziyznv`&:dUkciԸr!GĬH\k~YO,]DflX']mޝLwtCVx%'JU߻^ ~=l~xVyeXDF103-jJ ssgJ[_-ۤӲ=_ Vp5Ek~*́B (n (ilVIvGHBT(J UH 8Zgc0Jƙdz=mji&AKhS!:׬תdڎ҄Ƚݱֻobܠ؉I =մ4%ژ]6MIENDB`PK-_OUOPK7,]8$res/drawable-xxhdpi-v4/progess_0.png sb``p @ $ÔqOS@%A~  0aC 200 {8D~;fW֝\o]n3܄F7C]wp/ʢ*i[ *u2uR(J ڪ|ƶ%i`Ҍ&i >Tumo+Z4.j a<}Nvr6SE%׳ќ6Ticrʶlo/yvor}KwOyWM7%^_q)r}ɳw.ݷ:ow ڴ kT69dm#>Fcx334J 6__mww>!I~w8 3,AB  p (1$ˎ\GxX/ܸj\VO`^TyNi[}Xu̫V\VJ |yiYm=mOCNի{;ӿDիnDg\{J'[3듆oTn!ss<3- bOW?uN MPKofw7PK7,]8$res/drawable-xxhdpi-v4/progess_2.png sb``p @ $7]] |B\ pj, f0phXp 6Pp[wUZ-cFũע< yes_qqY'cC\o_;n俶[wy0kgoשi}5;fQ/fŸl}nK. }_*{z[~Y̶lV[?tzg\6nZmn5E^mլkmw? O.}฿Tu3+jr88 MO<=s{D9ZI{mg~QIм,ɟ\~"{u ߪ{ឣhQ~myrMiʰ6i+SKfgVNLʑ}ѧ7+=syyXN5y?Q-h,}OJ:NI=~6Zb6ZBr?OJ9)w'jz˓). '{wgXz*3.bc;7)t \]=1) PKbSoPK7,]8$res/drawable-xxhdpi-v4/progess_3.png sb``p @ $\R>!IO^ 3(8$,  4lRub``tq 8|72z[ϔ.W]7a?<9ǭEW&֚m9EVՂ;^TtHhG~]ݦ:!i,d9'޳;Wˢ+N9/q:gF“n<;;e~QSSGϸƸ`f ?=6?\be{"wx`]ʹYq q#W;#)ړ^IKZ$~: S*OZ2?>q%S}Q3ä75n(7(hƽw*3 ɷsܾ<}Vr /};מx\y߃՞ /j4˖eCX5[,7S\mzVV osKdږi.ѓ;5i~wڙwSC79.ST20ɛ[2Lyƿo Ny?]|2>=;{ =fx.NT/{Oy+~_w,=6;Ώ_gGW.~Q\8#/ܧuv\[vh/w?,z>!Cym{qHգ#'bpl3ڶ^늮^.Ca;ӕ󜃻e{~Mo/)N&/L ~.PKʀOPK7,]8$res/drawable-xxhdpi-v4/progess_4.png sb``p Ҏ@ $R>!I~w8 36"~Eo㯟`7x- 0N<]\9%4PKm2ѿPK7,]8$res/drawable-xxhdpi-v4/progess_5.png sb``p Ҏ@ $R>!IO^ 3† 8[azZ㪬#5 kT'&F^yבƃ-|ߵ9u_qձ\lҶ7eG, ŵXx&f]Gmϯ;SeCT܊ )omͬYmnկV~jo}hˏߧDߢ--{οĕ+hڜ97dM7)m,bq|QZ]iЬm!lٹ9vwlֳ5bg_П8kOՁ_x?-'߳?om,kmy0xu߄Eo߻>eP"01xsJhPK PK7,]8$res/drawable-xxhdpi-v4/progess_6.png sb``p .@ $/R>!IO^ 3(8` .l3``` tq 8vIwx\Rq JH৳Umb?௭o7'1HIؠpAg z'X'((c}&abpe.v4忾dm= g2 n+Xt\z?JZ3>6{ٮ}N -흸&m B6h}/)puoC'b皤si`·Id#7Ellbbwfslu`HTjNR+3,:^JlwZ||E+]Қ_ ]|9Ypvв+Ev-<.8)?/O?A?vI VXQ9_O bGMa=Hu䐀o;<MYnSuWeE7f䝨pj|襒E.WXj)ҳ5U}ޤ3[5kE|)@yS]f/bxT:}. meǽmj,uO$ȹ\zx^\t1e&Atyztr.οg0Ԉ`q L} ~.PKU(PK7,]8$res/drawable-xxhdpi-v4/progess_7.png sb``p 6@ $7)/܁K $8WxP Å I100x8D>zݓŀ%0]q|eO۾)G7s)?SqH!s憂f5͹t݆_~lZW:u ZqΩ* Sm,LDZ>*aX3kjE#%ujOJ[Ux伵+]>)<镵sJ/t<+; 6^|jquP0gV2.k2x:W˛63o)gHZo-f-=K{q])6" Zj/瘳if0~~2ٺH&:&PKPK7,]8$res/drawable-xxhdpi-v4/progess_8.png sb``p @ $\R>!IO^ 3(84$l&D7000tq 8|4f9z;5s2v>w۵5z/bΎuD/9&Izꇣ86Yد`~[DX]>5RMf{cz&LsYç,VIaafٜY)&߰3P;޺ij;_.(M=}һ- 'Xmfs(bKaW6Fe20&3E`aߊ;fj-ZЧwTȉ:C?,|E'?t wo6:8WyS%xQȜT Y}}x5ɾ+G4?/n8<}fBCV.2>zy"7m=竹cEsWN`ݽ/1#~So) FYZ5Bע^̗{#Bgi$סF?6lӎ2-s/uΘ;koǒ\oj !O y6~X8lOՙ+3<|Y?',oP+\mLߣ2Qi*K͎-;~DQ<8+in>|vHlWE =O9O~tiBqU޿(c)B/ڞ/5}7hۉ^]?"]KJt8U>ܺk̗M8iNvـeSBPK5rDisPK7,]8$res/drawable-xxhdpi-v4/progess_9.png sb``p Ү@ $m€qOS@%A~ ?0!a Sy100-tq 8|6ҽO_ӥ| $eݶLsԡxksz35tDkgcbYh:9MIȖTg4o=Lʟ7j(I)(}Wy&RfnUgp|UAb /ۯ\~쿲޾]UWT*}XV!1unF{cvs?|W}zPQ ȗ9?I(_곞7m3s?dğ Ompp,T{/ؕZW}qM։k(b=D\1%<}KuLNKN>}3c/݋oQ tȬ)E쑰ϩצњ{u,n;s7KMZT]Wp9[9FOvjpYrn<?1"{c,*"ҷ̛U| 7|tZ̮`_/nHЈ5Zz]?/&;u2nǹo!I~w8 3+ j3:u1D|mP K\%H^S#;뎸(Qe,8}^(߷BgtZ>K\vJqo}oGqqcgVO[أg`!\bkܪZk^"(<>NA/h4zbZejV_ .C*LTBxffM9^_¯s{' Qi}1k~DM5e^a߳sᬢx-=^1o#7IFe?PK7gn0PK7,]8res/drawable/btn_bg_last.xmleN1#5H@TT9DQS((w%/)x풊c~ ۘ'B>O[اg!4ܰfi4ܩZiި"(<>X|ӗK1 ORv2LVZz/~w^ʡUTCxffM9^_¯s{ 1Pc\GGM5e^slBZ{cްaGo ({ePK(0PK7,]8res/drawable/btn_install.xmlKJAE|& GKp$?`8m݃pCzҝ˭թL$@_8 \1_Tt3Te'0-j\qB=*:d}UkirNga- ˍn  RF]XW}]ffvH}臁ͽ;,y4tjOR{]ilGsZjfdH1#2nma_/5z;z;PKPK7,]8res/drawable/btn_play.xmlKJAE|&B GKp$?`8m݃pCzҝ˭թL$@_8 \1_TR =%g\)HO`[ԸJ&z\UtB^9oESR?$[}ss^&d|x^ H}臁ͽ;,y4tjOR{]ilWsZjfdH1#2nma_/5z;z;PKiPK7,]8!res/layout/activity_installer.xmlVoEV X#B p*la=z7]oKCĩR9UZ!qPx~YKH'z7?<+׫Y$;1Sb쀥^րG` __?ɐY/[ n/_0hUbqmvRy${ UiQAtq.L\ϟѮYe>o~[;C/mp gD ܍V۞Aߕc^x/CW]8p8cpyC³ŷ|!7u1rRϟ$gOtHNϵr-ˠ+ xCx:,7*jM֗{@Se~r 9~iYm/e*#ʋEs_HYy'CR#լp#W%WS:d}d;i8Kͻx~gN%spF}^֩ \E}jGLUej5¿hA!fX[[inQ-N2o|3ua]S=O,sC.SjER--g"6gaԐkK AEO]ǬsF|dj٣_͜{mÖM a-C-Uc0/G{N掶2/PK Y4< PK7,]8res/layout/common_header.xmluJ1Eo:t Q`ޅ NT]!q޶) pxy&؆jX#)9"rA c>hZ7꾸uS9$vd:_rvhfS879aK5jxafέQ| !>Ȍ|/.{ yM#|,5QힺΊ٭ -! PK:VPK7,]8res/layout/common_info_item.xmleAo0?7 M֬ H.S8L%I\Rv\.$ę_n!p^z䵿~xХG> 5]p<S T '>@RTk*R:= 嚂@>oz2KSqi4j^4U,ϋyΡ7+55 v]V3ϩUZ+qpk=$Y.JDC'6避ȼC?qtSn{hq1G3c49#:^jl·=}dpc;ש~a#t?\&vnjl8yw[}W9KwF;w:z-PK&PK7,]8res/layout/install_overview.xml=o@;oNb@+X@LUՈ c$$Z$DlWΕ,eB|663s?#;#2Pիu^߽8W"fu".{"΢y:t چz^CoG:V0:tڄBɇh8%3J]S;y|r|z9||9||%5s|Y?[9|N/ˑ+$W3w[껙{=PKhx PK7,]8res/menu/init.xml]J@͏I Rܸ"ي++#$ 52WX>F'ѓ:CCq3Hq@pO38ѻI1$$#DhMBJI7ım|uoKIRt\/k}Yۼr܇(jUXr!)֬| D ˣ_*rwߌA /8e Ge{ٓfyoY=G91?;tOGPK8]FPK7,]8azU??resources.arsc ? z=_>~BqCj-T{6v 3>Iq(7@I[+ = g  $ B l  7 T #;H8.j}GL^!0G[r'w3=Ye8res/menu/init.xml&&res/drawable/app_status_processing.xmlres/layout/install_overview.xmlres/layout/common_info_item.xmlres/layout/common_header.xml!!res/layout/activity_installer.xmlres/drawable/btn_play.xmlres/drawable/btn_install.xmlres/drawable/btn_bg_first.xmlres/drawable/btn_bg_last.xml==res/drawable-xxhdpi-v4/btn_bg_dialog_last_pressed_light.9.png<>res/drawable-xxhdpi-v4/btn_bg_dialog_first_pressed_light.9.png==res/drawable-xxhdpi-v4/btn_bg_dialog_first_normal_light.9.png22res/drawable-xxhdpi-v4/app_status_processing_2.png22res/drawable-xxhdpi-v4/app_status_processing_1.png**res/drawable-xxhdpi-v4/app_status_done.png #下载被删除了, 请重新下载SettingsggConnect Download Manager failed, please check the Download Manager state in the Application Management. 基础服务%1$sMB Google 服务框架%1$sKB Google 账户管理程序%1$sBGoogle Play 服务..Storage unavailable, please check the SD card.%Google 日历同步服务(必须)00Introducing version %1$s Delta update size: %2$s(Google 通讯录同步服务(必须)##Introducing version %1$s Size: %2$s 商店服务 %1$s update!Google Play 商店 一键安装重试继续网络不给力e注意: 务必在弹出的界面中点击确认按钮@安装未完成,存储空间不足,请清理系统后再尝试谷歌安装器 '安装包校验失败,请重新下载 !我确认可以正常访问谷歌 '安装包解析失败,请重新下载访问谷歌相关应用前, 请自行确认当前网络的联通性。由于众所周知的原因, 若不能正常访问谷歌相关网页, 则您也不能正常使用谷歌相关应用。因此, 请务必检查好网络。 友情提醒!恭喜! Google Play 安装成功! 下载未完成,出现错误正在安装 %1$s/%2$s:   '安装出错,请点击重新试一试=Y请在弹出的界面中点击确认按钮'安装成功啦, 点击启动GooglePlay %即将依次为您安装以下应用: 安装出错, 点击重试 安装成功, 点击启动d

    本应用通过极简的流程, 帮助广大谷歌应用爱好者, 快速在手机中安装谷歌相关基础服务框架 (这些东西是安装任何谷歌服务的基础, 在没有基础服务框架的情况下, 安装任何谷歌应用, 在打开时都会报错) 以及Google Play应用商店
    通过Google Play商店, 您可以自由下载和安装任意谷歌应用。
#特别提醒
    本程序可以直接完成下载和安装谷歌应用商店的操作, 但由于众所周知的原因, 访问谷歌应用商店的前提是,
您需要确保所处的网络环境可以正常连接到Google。
 安装出错 安装中... 正在安装: Установка:Ошибка установки Установка…)LУспешно установлено. Нажмите для запуска.M
    В некоторых странах запрещено использование приложений и сервисов Google.
    Данное приложение поможет быстро и легко установить основные приложения Google (только важные сервисы для нормальной работы остальных приложений) и Google Play Store.
    В Google Play Store Вы можете бесплатно скачивать и устанавливать любые приложения Google.
# Особое примечание
    Данная процедура может только скачать установить необходимые файлы. Вы должны убедиться,
что Ваша сеть может подключиться к сервисам Google.
,HУстановлено. Нажмите для запуска Google Play/YВы собираетесь установить следующие приложения:&FОшибка установки. Нажмите для повтора.KbВ всплывающем окненажмите OKОшибка загрузкиУстановка %1$s/%2$s: )LЗагруженный файл удалён. Скачайте заново.$9Поздравляем! Google Play установлен!Google Installer Примечание,RСинтаксическая ошибка. Скачайте файл заново.Перед началом убедитесь, что есть активное подключение к сети.Рекомендуется использовать Wi-Fi подключение.2]Нарушена целостность пакета. Скачайте файл заново.OKНет сетиПримечание: пожалуйста, нажмите в всплывающем окне кнопку OK Повтор ПродолжитьGoogle Play Store УстановитьGoogle Store ServiceОбновление %1$s,MСинхронизация контактов Google (обязательно)/Новая версия %1$s Размер: %2$s,MСинхронизация календаря Google (обязательно))DНовая версия %1$s Размер обновления: %2$sGoogle Play Services&DПамять недоступна. Проверьте SD-карту.Google Login Service%1$s БGoogle Services Framework %1$s КББазовые сервисы %1$s МБ НастройкиLОшибка приложения загрузки. Проверьте его состояние в настройках приложений.2]Недостаточно места. Освободите память и повторите. com.ericxiang.googleinstaller  c @#+4<Cattrdrawablelayoutcolordimenstringstylemenuid4 c*D^ .AThz+<Qat .CXeqy*<Vs (>Sg|.Fm|)8JWgzapp_status_doneapp_status_processingapp_status_processing_1app_status_processing_2 btn_bg_dialog_first_normal_light!!btn_bg_dialog_first_pressed_lightbtn_bg_dialog_last_normal_light btn_bg_dialog_last_pressed_light btn_bg_first btn_bg_last btn_installbtn_play button_donebutton_install_nbutton_install_pbutton_installingbutton_play_t_nbutton_play_t_pcommon_info_pointicon logo_play progess_0 progess_1 progess_2 progess_3 progess_4 progess_5 progess_6 progess_7 progess_8 progess_9progess_suffixactivity_installer common_headercommon_info_iteminstall_overviewtext_color_resumeactivity_horizontal_margintext_size_normalapp_nameaction_settingsheader_base_service item_service item_loginitem_play_serviceitem_calendar_syncitem_contacts_sync header_app item_playretryinstall_fail_networkinstall_fail_storage_not_enoughinstall_fail_hash_failinstall_fail_parse_failinstall_fail_deleteinstall_download_failinstall_fail_defaultinstall_successnotification_title_failnotification_title_success dialog_titleinstalling_app installingintro install_hint1 install_hint2complete_count1install_complete_hintstart_play_dialog_titlestart_play_dialog_messagestart_play_btn_textclick_install_hintstate_text_resumestate_text_preparexiaomi_update_dialog_titlexiaomi_update_dialog_message!!xiaomi_update_dialog_message_diff##xiaomi_external_storage_unavailablexiaomi_bytes_unitxiaomi_kilobytes_unitxiaomi_megabytes_unit$$xiaomi_connect_download_manager_fail AppBaseThemeAppThemeTextAppearanceTextAppearance.CommonInfoItemTextAppearance.Hintinitintro_containercomplete_count btn_actionprogress_container progress_ten progress_bitprogress_suffix click_hint text_app_nameimage_app_status install_hint @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L 8 0@    L| 8 0@P`p 0@P`p$#"!        @@@@L\8 0 !"#@L`P8$@@LtT8%&LdT8 4%@+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L+8 0@P`p 0@P`p 0@P`p'=(&)(**+,,.-0.2/406182:3<4>5@6%7D8F9H:J;K<M=O>N?L@IAGBECCDBEAF?G;H9I7J5K3L1M/N-O+P)Q'L+8ru 0@P`p 0@P`p 0@P`p'](w)u*s+q,o-m.k/i0g1e2c3y4a5_6[7Y8W9U:W;S<Q=P>R?T@VAXBZC\D^E`FbGdHfIhJjKlLnMpNrOtPvQx$@@@@@L`8DTpR SV TU V wLp`8 RnLp`8RL`8SV @L`P8Wl @@@@@@@@@@@@@@@@@@@@@@@L 8 0@P`p 0@P`X?YZ[\]^_`a#b)*+,-./0(PK7,]8META-INF/MANIFEST.MFWIJw>F7 1QQQ\^Rl=K۞+YI_~ |\= }}/= 3y8<+Au/_V >>&I|© O,qܥɗbL=Max;#R'1]UX^֏uçAd):[F9G5UˡIgv;(slAnfqb]U:y{|$\0_uۑBV\",MopQ=LۜJ9+qsfIE S,FV8,zee .Ьnu!HSރvFz4wH,'@nUos S5;؈&&itvm0̀)}α΃v[4)p//=d9謎tB(|Gd@8u~{ze:P\rB٣vHup6oӒt5DM 'P< CzIn'JH[~{AÒyĖ9q8vJc`fStЩk&m=dt-}բdS2|j~hINyTCf,2wDSx+Q}#[NKxW( /ljg֗LI)H)U(؞-dy*J.o JFţ,zb#;Y~6S^&w٘l,#K]poוּ=i3dma@z].#+?$y/,Wp+g+tBYJw2Ey~MkT k\FXbgGHz+.IJlDjs]j0˿xLd(Q+:/,Q ?QzȾmIvM9]2E1j<*3n2g8n ;VХʕJ)VCt572q%aqkW)&Jl`u6.MGbD8:=0"uf{# 'ñ* WS1k4QKSw?ԠDB2nم7{ժZz4,mc/CIcZ ՁC_Z~qtaׁǘhr)3}yVˋ3+,jq'??PK_"xPK7,]8META-INF/CERT.SFWYH|F78\Q@qׯ_犝ey# /+UZuSgOOV 凧֩[f}Rn>3U|R>=YTNflI8bo.̿VUpo1eOKz}TKXq8H0Ŋ`Y/}B,of?2SF~`M]gR0A/pZcn\1l9tf+F,Ip\PNpe@ϋta 1LeXZ\2T7t)3t< @]<JIcK7@gV~bitZ]r`VUm-B3`C.5i/YJW VuS9w0'>u+ )44)%mwKg~92suU[lh,ݴ- l!&Ȧ1uuzٰuYEIQa?ӽՓ2 yPmc@tos5L$LE?<ɹƒ MˮX0YF/9<1qխ0=9`zW4CKZ y`䠓;OƓ` Jxp*(1K9PGZl"`Eˢe']U!g%4gb􂚏O8^ɮ/}S(Qf+'eMyWJFMFR{M@f?GGƍyv|jw7̉cs%[$a@ qn~V-=r:侕E^X g//#kLp*VncHjٻy( i:l4~$D&Z{A uYBsCNu ac )|J 'n2zjaun_H cXU%Di%KYXoJgj+BUE>(7*]dB]z֬'}?US H6|F2'LNݞt#`5ec͔O*=:JW$J^̽Z[^z'CH< \Z'{GyO$\ԑăKIMeT4ngqV 霱'dk.Q4'BVʒhɆXz\b.4f*aC,.&1̦daҬ>*HmR%yJ΁]|iZ]m5TImmS,^p< axG;σ7 bF唍g+5 <>zkc>J_!֊C,|$v}Um`Я>}O%9@7AtwYƑϖMyS˂%i'ܰ6J7O:1B?3/+)rT-ߘ-M [8lצYN>e<{K%m(6?Q_#S9Ğ5'7\:bn,e\륚L0pVKH* /װ0ji"H.jngibdhg{u ^Q2_ӞPfݔ]?x'u$+}R-?y-2鴆4g;xd>vڎ鏛 .qn<[\1 j.l]}svHJp^VthęӭFtL?vQ3aXM.\2YfQ=}dz?ݔƩ2_F:}#?vX/9!rr.6\kNՓ]j+.񢨛x䊫RPK}3PK7,]8rbAndroidManifest.xmlPK7,]8& @r classes.dexPK7,]8mistats_versionPK7,]8n`*res/drawable-xxhdpi-v4/app_status_done.pngPK7,]8 b#2Fres/drawable-xxhdpi-v4/app_status_processing_1.pngPK7,]8\gv2dres/drawable-xxhdpi-v4/app_status_processing_2.pngPK7,]8SqIv=:res/drawable-xxhdpi-v4/btn_bg_dialog_first_normal_light.9.pngPK7,]8ճO>s%res/drawable-xxhdpi-v4/btn_bg_dialog_first_pressed_light.9.pngPK7,]8<-res/drawable-xxhdpi-v4/btn_bg_dialog_last_normal_light.9.pngPK7,]811=6res/drawable-xxhdpi-v4/btn_bg_dialog_last_pressed_light.9.pngPK7,]83&|&&>res/drawable-xxhdpi-v4/button_done.pngPK7,]8Jxp+$eres/drawable-xxhdpi-v4/button_install_n.pngPK7,]8+tres/drawable-xxhdpi-v4/button_install_p.pngPK7,]8>o,τres/drawable-xxhdpi-v4/button_installing.pngPK7,]8nTuF*res/drawable-xxhdpi-v4/button_play_t_n.pngPK7,]8ȮF*ܭres/drawable-xxhdpi-v4/button_play_t_p.pngPK7,]8"I, res/drawable-xxhdpi-v4/common_info_point.pngPK7,]8_res/drawable-xxhdpi-v4/icon.pngPK7,]8-_OUO$res/drawable-xxhdpi-v4/logo_play.pngPK7,]8$0res/drawable-xxhdpi-v4/progess_0.pngPK7,]8ofw7$3res/drawable-xxhdpi-v4/progess_1.pngPK7,]8bSo$4res/drawable-xxhdpi-v4/progess_2.pngPK7,]8ʀO$7res/drawable-xxhdpi-v4/progess_3.pngPK7,]8m2ѿ$:res/drawable-xxhdpi-v4/progess_4.pngPK7,]8 $ =res/drawable-xxhdpi-v4/progess_5.pngPK7,]8U($@res/drawable-xxhdpi-v4/progess_6.pngPK7,]8$=Cres/drawable-xxhdpi-v4/progess_7.pngPK7,]85rDis$%Eres/drawable-xxhdpi-v4/progess_8.pngPK7,]89ԏ"8$Hres/drawable-xxhdpi-v4/progess_9.pngPK7,]8x)TLres/drawable-xxhdpi-v4/progess_suffix.pngPK7,]8:Ot&#Nres/drawable/app_status_processing.xmlPK7,]87gn0vOres/drawable/btn_bg_first.xmlPK7,]8(0Pres/drawable/btn_bg_last.xmlPK7,]8Qres/drawable/btn_install.xmlPK7,]8iYSres/drawable/btn_play.xmlPK7,]8 Y4< !Tres/layout/activity_installer.xmlPK7,]8:VXres/layout/common_header.xmlPK7,]8&Zres/layout/common_info_item.xmlPK7,]8hx A\res/layout/install_overview.xmlPK7,]88]F_res/menu/init.xmlPK7,]8azU??T`resources.arscPK7,]8_"xMETA-INF/MANIFEST.MFPK7,]8Z¥META-INF/CERT.SFPK7,]8}3META-INF/CERT.RSAPK,,Rzip4j-2.9.1/src/test/resources/test-archives/dirs_with_extended_local_file_headers.zip000066400000000000000000000003461414265447200314040ustar00rootroot00000000000000PK3#Sdir1/PKPK3#Sdir2/PKPK33#SAdir1/PK33#SA5dir2/PKfjzip4j-2.9.1/src/test/resources/test-archives/end_of_cen_dir_not_at_expected_position.zip000066400000000000000000004624731414265447200317670ustar00rootroot00000000000000PKYB@oa,mimetypeapplication/epub+zipPK|YB@wG& META-INF/container.xml]AkB1Cث<7 IA `<ol3ߌ^bW3X N>n ɛvLzT "'Rә>`bC蒭gzO@8 "vЀM)xgk&?Si1w'ft-iӾPKYB@ $6 OEBPS/content.opfn8,Dɵذ]]lEH{#Ml&T<9b;HJj 0`o>8qwNiPZnM+E8ϵѰg[ڭrp,$ɜ2[5}k핤 F0!QD6%>I29pG܂&ΐkSyXˌ 7DX'#%5qr/1]{ބ!yZ 9ci2zb"iDe)QMUK'H_ӯ_eU)H0'M6l- DiMf;9l>pRT|V+ 26bM_C\qmhAȺԵ=|Xִ9$km4H<غ#u={,LL[mks6(},guGk^icQz&Dܦ*$i|SN+vjcKq2p4 ⍈C8ߗuT5vIEKNhUcjn 찛vO#}H>5k];S/;^FiEC뼞-o#l2wNơS_Cq>u6O:SP/q>u1۳ߡ_I=RxT޸6f8+~q6f ;#}Ts~ga$$ ә7L%aŰd>,, <p @=X@c~m;ʼnb/>PKYB@u  OEBPS/toc.ncx]o0IPiI+EʒHvi0i򑴱V9y_ƷϬi cLl-.BJ))g1Xl ls-ˇ Bt1pm۷ BqBIѾLDC( P_5&TR~NX'G20 gGq$qCyD3,0ˬ(=e> YnCIMevs((D_ʹ*J)$)dV">>Tk ޛTi!KvYJLVTIC_0=f/nݳ?[ ꒼lʚsX"+g.%YO)>7 &aU9a/[.BtF8US=9rj|26zFF_1:FsoD bE4ԁqgzFs*Pi oQ#+07oPKm_?"j OEBPS/Images/image001.jpgP˶/<8!h`AwgACaA$X>lp' {sus~U^QԴk~~ @! ؀C @K<4qغ:qs;p[BYqY@!ܞܼ\< iOGs +;+$qs;RA_PGQl[Cl!j -E') qXyB\<%.POW$:u-:Y / :>^n^>naN^1Aa1^a4gKk19PdR\\Pgn^QQQn>n>> N/WsONJrp9tA\%o'@vqձ.^V:V.P7g r?d]κP?e uBd_ r,.ҫ);;XX)I2( Lttt tL G11<%$$TTT .!!%))aLPPЈP{]{?lT4t L,F4P  PӜ);6%#iUx ;8~ x72!j]W׹]>[~`~'-W+oB  0_=%Fja;1tT1ľ =0WdteJ^ bh dڒJ{ehf(-P~2{V6:a9"U=,f`NVqLj.tT#Fҽ:m3҄ @4|x)b>Z'"J_խ@^i{tv񸤒Ks托fQ-{a&t!4%`Jey1e[‹*.`|EW#Xml|ju;r:Ċ,bklE $I8hcRo!D#x_"s}{ lI1#sUc-nDF"߈ Ou~;Q/$碹 Bj]vt6"v9W.1Ҽ14#—RwۑE^+.%<G'z»~4CJ 6`:?|ne[BqWpNqSfki(HZyd㲄H3(8PfHJwcc % t߱릾MhweÎc{ XYߋԻ' 2m=(pcWFeXitt=}2zf|&7pǘ7B) =[1+ApHκ@?OڭmL0 XXi 2 B^,O^=U)ه/pHo--I*NȿZd8Bw!mf,Y̪k@*O2.qt WW;pI]ۍE;Z?S8+ү Myx0Avqokt1m_4иgd /b$ޞ= / s:OlqJ+XlG.iM o,-m UgF= {F$^,df8ooҐ+&BOz8Q0=_6-Й `M&!fKo;}ķo({[k_q̣Tz[]Ao~p-14FӶI$d^tD M62yӢW%~$W҄$?l Աs|isI tɧ\2sQ>o*lڗ|RW<=FZ>^p*P2gG{fuo%ns|p'GЏ_VrJ4ɋ2Aۅ]`G0@ 2}T4D3c&],mI5%Xx~ހ+xKfx/2ѻVy?~g3l `lȣ/Atu{+RgӋ.a j.o0G׷ ^1pc֞p5䒭+'XpA"" n7F<B|z8Sc7QvU# Guq]Cվ ?7jԷ ~fN?8ȩ׍LhrE{R'Ys-Z}6,u7 _n L;?0xlNj_DF407r]mNR1Lr(ӱTSG?:b%n v};"ҪsKIi [Mcf`z`e$ :(4l$`o­jpuF"Gi]"?Kbd"5pĬg ^jv` ,K"SSSEfKйSˑ#~;{o=Nwk[Rڇ|n17 #C@K: t <;-{y}eӢ/vLU#9rjȺF0,]ּt^ȌZoj a^2V52~8XcH  v?g!zmj=[G)0gE9~J֙E uZ 7j- \&Ѯ ~Ͽ$?9kی;ͳc&$)=ɨ죭HU:^(#fP)][ZjDtcVn Ljtf);}}IMIp!ނDconJQ*]Je~yܚ7σY ZYPδ8?k.9<<:\O9٣I_u$n6Yfa!GNħ5YoFn-19NӲ RA_S:, 9#⨰ςG }:2|zzׅy.EXڂjc BE u$ڐ.~* BF:7ư2%a$_'+7U1`Zާke%CJ\YFɸm {(?$M:yc妼oe"OE8fX e6 T`3g bɽY|۱1K8f^HeOȊCj݂&OIS*;K/9C@{D*Wz{Eoe)( 떼eϺ\\Ʊ1\7( 6yc|XinaE"XG:X3x(6^1g% N'Рc2׷m9D`-{&Σ!΄+ld!G+bv"~f\cJ4*]f7O#`Z jc?*gn\#xm' UD'VM˗ 0嬇y71֍LjpV&ߴYᚔudž~oîuCۓl6krsn7ݭh5_=?:oz%ZpM1UbiyZnmޭDp'm=ajP?cp-'gZXUSr敦z@J.Xj h7%Meb~T}G+UGgu3Efoq2l ѳ+NgVkA.oX|UlX#$m 6r읻C! -=7 e_@ =hRE#zC8ҹ6=oX^!a7q!TU'Ύ!.-C*jE Ț.͈ 8/!=@e M5?_ ;F# X B5eaK| : %7;,m=""Z0Q ʱʍ  )[A̸Jre[mZ. Ս ou]I[TAŒ/m3Fd'QR1v]k#}a[Z 7vΒ$T\>4+ƈBѭ%B2Tk 21gẍ ;/D5O}L rIjTwH*tp#܄l ڎzY L%QąXu7+HdN`_Au9#jJrYkXxI;I&Ỏm_XM2)lUR QlLZC1ڤG Qߒ(g%=Qm]\a^WP AIyO>T5N>MC@&h3RbpXX: ZO2OB@o WpEĸ#wW("r ̣| r?+1&,﴾FtϢQx!xbg#E:jmI/c _%s"!Ʉ'$W>̯. Q \iEBU4مXy-p=9pEU"E޺Uv]yCTVE6"Efg7,`l\BqAt+yGԢq.O\or*{H VUUת`8=v8C[^Yv)g~2qg݅vhc^].sX 4M%<.!T}'ba]?gAI9a˩ ;E;eFdWl$n<}/N׉!KaJ _%PFA T}릤\y4kԮ};pi.vݻ$eJ?JS{TwlEi# ,⍢kZgB|L2zb "bmd6{V6J[߄,x)]Зn3yqnS܈@1$#|[>:)QLՈ`;ii)kzl=qO3҅-uo?Tu;{M~b~ʿp|‘N9*LƘp Q G#gd8w YG]*K~W.Lp`p* q)⊸EZ2/pٍ\VL&hG}@^'wjdHѐB ?):[ڇ*ܗ#UFIlzu;v[׳? !ӕ=Z[{\n;O^zj^ԯICn5xc`l:ed ƷٳhM痕iz g_ps; OnǾgﱿHaW4 4Azo8FFzdEgS{@n]KIwh.(Y~H*sʹOHͻ(Y.6]{-r_RNbWl=c" ~P]=`2{@I?Kqe}=֓Yů>U|SY~m`gK/n'j@XɓT͞XА{3mzu^؋3lspg)b+奖`"In6wyGEFeINW0]ǮVC._I6zv^R JvEyw?FO7A:DS" j`B m5M+J?W#FWѢB`G/#ޣi%QW"Py$L 58g8JGvci.9:_h?崯<;]Id3(XmHc{wX)ty0? P\sMܯ ̯2SB{54RjbLJ讻)v"\:}F}$8D #e@qh93kt0+ӓq n^}[}? (wVGhb!~"uq*.Kw\À;/MV#_DduSaeZ[dc\ [/O7.Ew>OH8u$L$(vRuub  i?СI/?}FS@j|!kyHI8Zc4KcؔbK¹'?/~<|D&|A&8g<ݞ jJ$\[ f}?9~QeOnzFj#EDL ܔY[~DgvP+Q.ve|U7'@:9eDS!+ 2K"G^G=@ĬJW@ ;o ZK"3[gwf928XrD}[W6f9TuF)lx'@󅦘2@h(Hz|ʥ}6?#_fuzL(?$K-SŻ_*m4p>V@y/p:Rw UChzF_@|0y" B~l&]հOHYѢlџcgM=eRo%:+̻Q?cUĮ'S)vku[ H-]I[@`n~mFaGG蟃R,%`N7t~$/s KЯ5ߥ?@5v؉̆T:>bI.>n wcF;8^beq"&7Pl;0p\K$\ KJP툱7"[f]'[~cx*L:xaAyCNB w}'j:ؓ܏'2Llڇ 6 T$k<8`6.m N}YqvEq0RSYu(TBMv6O).yz_6ԺK#paG5te w?ؠE&3}81*ѱ3y63FSz]L_t=`&&D e8rAr}sRV }t#2kt]|oԏnq $p^(S@ACL_ā*LF~K~ţ@Θ8Rq9dc 2=Dwrzb.l_Mi,%8L:!h 崟x!hpB&i`f L ]59B[ \ kMػpEY|6a(Ȅ4YTU?qτ2qLђW8E7L: z0jWªk_BFt:ҝ}vTR* +h REIfl/C^oG/ S"1V $ kFjؕjK6gbEJϣMz Hmn;RRJrEScf0 =0i4xǨ`>AR~"pw7;ݫgЕUue$ iQ2Kc@\OcGWF" ń)S5C^n@AmoA3P'I4Q{mP|\2C'PO4cEcoxܜ8ΚeY9!d{Oz;dqUQ9b`wb`G#*Q/K`uO+`"z 3`=Bْ.?tcY{+jd3T~KmP*IE @ C$6j Yv>#>:]I1`RtJzcZ%= k}oẍ́ 6:Kȁ2K9e:}4L >X.[s/iI8'Ct(0P⎱2eB@fZ5# IjtQ:èAG![?7~%bfKT >(rX=9]/QtpU+vS>EHyBXB$u445Y&*)5\Ѣ5)g WTp'Wӣ6We b #"KUPP8 WqYP.)D@ESD' 17W/0sNk?ƫdhWN\:SU+ zg6Q{JĸVu'n^nd!&ٱ=jn }^zN9_ՖSǵf#1g$$kf'.%Pr`7^Œ=nwq2Iu4HKo)Gڌvڡp̦fnтHb[khbBf9^yR {;1xG] rp&@OA_ 9):KY4v:QvyY0TWhF6ҥ/YD?[cͧ7SCd2a f9SBay~e᧤++h9, huj~3[< hځ颍=~62`=QA9\pfibADD=%o]\Ui%%|.%\ĊM3i]q1[ ]tƮr:RWl_{s<_dعD[E}<$~ {`$e+ /DÖdH`G=,ݫBx32F{Hm(/p Qb=@@͑)mh@pLbg!_i+=.݆ERzdöJ]"UC0c B`1ݵړE>3GWIbuP>~3}&vb,r+ jt%戧؇kRDeifM>Հ4fh/1MVX!,uUЧ$E/ r2~ݳc Dؒ2?ȗk1OkG}7W+,G/bYP7D=Ɲ*8V_oj{ˀW9v͟ߪGgey]*iѷ O9 k|\(Z)m/n(Rh1L>㨹t>G{OlZ[fr!&tL23$mI+̗>VrM O^ڨؓ8f*EƼ3x~]*.^[g5YDӚ2Ti-; >S.K#K| ${ǝN&2d,;zD4Z* .dcl- ZDz>yxLq-I69@@AC8RSs^V1+M$9H.EUiK.u ud,R'LߑKLxt*$%X EDpqIi'7y{,Tnxk"ϵ~ 9C#2Nƿ+ * Ċ qW⟆CA /6e8 ֜^q!Wv⇼s{{MUzSEn0" 8\[DE¾-xNI\| -u39n,*Zj ZS}鑌DZ|wΌ i'eI#^Wߔmݢ5Pg1ƣkvB0iT_l 8%$5V8kIo~S[󈢼jflq =ԗ^ P=|,Y nabv~,h Fj332z= Ȣn%鿩&h_nc45Z$I1Ϗv.IhlNj;T^mQjBS>jn6MiwMO[T0SތE*|!6]oMkzJȽXo#tk&±(Sz2/\]P8_sBq~RT%8,4q DdƮ+ivi9)4{9MaEC Iq?\m¿s_ѦrrTݚMj897S=6_ONb ~խ."c~WQRlo1&*5C.ǻ7^ >ent)CՂglܲQZ–ԡoY3~-Vx(%{^ |QLlET^""ivppҥ B)sc[l2SNMZ{i. IOQ7УgV's \}7oC,6Vt=3d8]O~H}nE ֗ZQxIR3I ~{ZElt5٘6Bifhu&`ֵ`E޸=*\,(8UXA+rMk"+p1:ltQ[zˆUH$ {ࠒdл[py;Fd!2ڌ՟'e@gEwlaD݁M -gu0 #卌UQ=QxAZK삘QYToC[s#g*'تUS 4u[(ՎK_S⤺iQåxfDC#xH#aڭxr|˅yGPPU{|FÛ0bbX?8l2fQtJQr1ɱ0iZϢr0' ٚa1=`D/df,7ɐuT Wq` y0u'"~fzqG4n9~+Y_S^p5 ש;po{z8Oq/0mI-! dl83MV,05 < C:19@äoZщ?"7: 78-`&yzOM~]?:7 ph>Ve_X|M *4?%1 h!Jv‘\W% dxxXḴYO=Rن. rvw/q75Z=*Gwm5~J7Å@ZJ?ؖ{96a5hxNzigQk<zox,oݾ6/X9G{WxU ,Nu25uvaSZL-YYd79q?Txe@n&==7t^/迻ʶ5%}jmG*M&0"qea4HOsO2q}%ό6.Q⧸fzؘyIIt afǶY" T5{]݃/r#obj6qrb6=SxY Ʉo,$B }$q-zAnI]vNB&{maT g-Y#ȒuwV[5V\ H*O&oI}XѢTλj~z^tah3T6},]q1ء]wSƬ~q)Y+2X;nl+[AvGOўN!ܚu€Ae;l`glfbdayHuJ9P3_69JUr.:S"k/:l ڌst돽%r:3*t9PU( ٟ#rZssgw5~ !WU$oE3[e eG@1_aD&VS~6vS)6k>p0IY2D\ѿ KcIw}duzm7zmq@Z! KRO 1:Ÿ{OX pQen-A9MfzAm7l6˓;P䂣_G*rif3k#mݮ{4z0kV_g 6gMtY G7|Y|2lԹ.KW 2|4kUly+R*.%CTҌK%Ol.'\JwlIZ!)uDs ns?/$ߚv]cO<`Vtok狟J{nlOX),ZJas3A\l?'uN3=&NgaQgrSr/=ϖ ([s  e`{L6ڄ1\/oWSXFcGW6bɌu ge9h osd]{3 OOͥh6+4ɸ˧7^׬3YP#8sߘdtc!/WkB/RVTe_-K'Ƽ[s.pؤ;Lz|8x܍ROXZgeK<J+]KĄDl5_E?u8g;*ڇsO#dvLd_kxD ,;f.\?ֹͯfඪ/یMC^m.{f Sry7R, e.z,4z|H_w~_>; &)_oe$v%1 s޾6?әZT}>/:Fl rŐ~ءAjŻQ7[1r^qٵǃڃyF 7{4+Ѭ:*9[@(*qVjcw8ZmiɾSݶg(aC(c^7%pxfw6j9]X>h;7\[3M)F\@)Ѝ]`P[_Agp1&sX{ȩˋ*V-d}z^huhW)oWXn j=VQ^I)VBy~ wֽ$ơ<05ٟ6lؕu= l9]mg9>0y~1'L!F/' fX ~Άa3r ͸p&hl/7#HK~FF* ~g5!#i$)mK.U-'[*y3FR0.]A.jM1Ro"|wmNꋤۢb#uǝ ~-&Lybɖu DrqU5՛>1N듗j/U U7J!Oڔ[%!kh3IЈpb,Ԡ憓̫ř% \RlTϝzPPgAHެ5&H~ i}vV0ψ &CG8hdǒlQ9j5h7TELzc##WIozBci`Mv $egJR!5-Uuc.@ٷ1;C}l5].lQ Ў2%zp< ;8G64x(q[PEۙǎNW3SvA6w5cu!Hk6 \\R~Lt;5܌ k7,DI[_ c}9ܐ˩L褴A7BClmp qDbaakV1pKyF0jzޣ30QM[ZN w/Bw?yʢ#VCuW{}S{[v{9}g+֞:\1Ͷ p1}7]+׮X!u<$oy&$%v?L +` joDqxoX3-0&'ީ_چ3"C̦e!'8:[ Ɯ*$J"]ɑrvyzO SoksCߖ-H;yARLm?*?g\):'GKrpQFf.yId͜V EЖ#*5 'Jjt?[RXfa5kGAiϿr2`X!DLJ*¢޿ &]  dy⑤ɐ5c$ (=>穾z{ƻ -2+?&?a-C F]5]zZ:"VsqZ8o E#nXEy&5>"/rj}#MT.ikm7mt`eXȻ̯lq[G> Zd^q4xrk`cj wvc 2/Q2oǺ8^Z+Ěe Kv:lAu=|&c--5Wh}hZH${IMx. *vCFϼ踄AߦVJOp&g} z׮ X}ByH8 o(_7Pml 5x.3q4Y6ݧhYx{Pʆ*\ 6`UՀ%3 >Vbgju]'^9nq3'.гWXdTfvkRY8v] x`mjWJ(W΢mi*j4$fUuh`1E)m%dDlᣵƐ_ QB -5Lt7.`ωpfp߈k0vkvJp㳤5-1"ސثcxkE\12 ٱe쑞?x"$I(7]Y+6Co[:r/HRn=ݲ]Qr?BʏL2樺-^C<^Y;sٔ3)⨮ȃ]-/(ʙ1`Ŧ`K7N/%D[Nbu ᇐdJM1}^z-Pl rDmPs¦+_#OqYջڠm=&VpD;)'P4sMwk::֛Th?Là rh}`,4~ȒxmBTߎ_\ys咿^Wd?hخ-ڤHV=j>m/Uvt{ǧ:w:ߟ zKOwtf1je 0xh׶uPxce!J^5F}\F@@A)%2Sګf/S fmzYcv;alW" 9옸Z|nLgMrᅘxfrJ0gkIP㕎󟝃{?zF(6HT HOX;,={t{dmNڣ=J /IO!M ^_qڛ8fn4d%̗-KڸfڏP;[V%{yv:e@0@z r0`|9.yq܂d8చJ#'K6/#<(% P.e +m)Jɉ [ syXyD%h]ʢKk-s[T<B簗[߰\üƴ9ΐ:j0}z̵{3>c R:rXc` *s/nuϾ=\ uQ"D'o : ")0<~H̻ ʴ['/Nlm 2G˖x‡MhU}~7Ea)"ɦ]춠@!n5϶ɖ2cOe2⤱0b/X3oCC`,W'v8zSC^-!C&C-] j`Ūg)CM'-=) f7]=jNDPK@vRMc3 ٧絳rhv=ZMି\B ]bxcP38Q >f)بW(1-e7HҐ.ocRȠӟt\5®mgT'WㅫEf1k﷌xN:0Hn^$ s{-{RqDM4+v%7E)7ee"SuP=r ?_W2-M !*u+s|w续vRE+>+(׿='F+*OWWO%pǼ'=Ǩz맚Byjh'?۴eX;K-ts;Z&PMMRo ~Y~"\WDtwVnV=?70An6Ut9h.ux=jTzw/^ a-rݳg!(()>Ǝ0~8d_Ҕo> <<uD:BrV6jU]3.yS2 2*?|]U‡|l: UyՔ>?_Z }\Xɯ76]q7I &;Q-;1I[5縓/NN oljiYhY2޵|z1}m ~!˳--INX/: LSւ*F:E^(t95e4+%|W=e >{֓QzkDb|zh>Y߄,= LrD/8xw{bt%bĊz~_2ƦaS WX'&:Җ3Ҧs+i͡ #CL#sLLd't ,_(-](A0Wv&YkCOU >yJRvB2+x--Xӷ]{2hg0Rf^CPU18L??lp)*=7H;JS}<./(׉T/Lg%yԋs,ƐBzIJFCǺ𯴫D>ͫ11e(e7q)q4}r.:n$Y4ewyrQB\Bf=mjkgZ|۹64meh\,8d x{X_8m^)f)Y63]6RsH<ݰ+'@ncCtCǥ:+l?=~tP:Os?5+ŅS0v9x(ƈ4 ǎh.mۀ 4!y z*OZy9M]׽E_Lmg5X|/5b4yDL3B[)U^b%Cz;ae`'JPpB}#glе7^ryA 8NZlm7p{%'KMR?FGe)Z,4=2}|؛蘷5HO/arT[o]rXDŚH2aℵZ~`Sd卓0VOeOGEqp`3 aO%'s4뗫Ι9Jns~lMSfNiU[,,-<E/@tب-Yh 1.53 2Sy.!C(%mkyj|yk{_xjr9Y^5) J8(q]י+g?ҩhE7{3M9uDV+R4Z/\Q)DK7I`کk#67$:v-$hC\`2,ejd8==ʻvKag.BKрd<_mC9~ o9ug.ؗ#-'C-f('ߞ)dOGg-9OX'2[aeZ_.ָ-rQN}=LBAݔyU[5 ?9 '7ꐇxp-wQI`H R';=jN dGbQGd9ζ'w!)k%_Q͓͡)6(|::ʈơz *xlN$K#r$eaQ񟢼ͫFzٿ~19Vk[tavoݢɨ *r:"ŧ.f쵴JYYibYd۷8Yӧ;B;^684||?)ה ȗN -rrPM?KY[R=\ qp;,c’CdV3c}cs nvy ?$] <9Zmnɍ[皃7֝Mo:E~|8LSH"݆J8+H5ܷF!HwiQϜzdfR̠=Եwy D[lt"1rkNֿ/&̏Dz;sSy$\ݼN:W5LF/E19lQ:c[n!NHZ?mןL0׫}ls,\UvٴK6 8qi|* 82+xp?ӧ5f3p卿kVanǖ>C|%qCM +WzrEtAAaqWĔ'cpm5@m?sX5ևZYV軈a ĝ5T'QxjC> ٟr8WB}>-~Jt4K,aia_V=%KQzY#E,b9Ы}wh`GDvitK[TJau)˻:h-Es XSh n!*6LX%!2SPvFfsoo$yukHy[dž>&wҎ<Iߢ)@@_VzlS$Tv:i=!qVgLIb_u=@ 3 ?D5 _̫A#[>~Y,㩗J{|ч8t z)A2^V0ڔ?WOO?BBoe.+嚷+UDЙT*vͶ ,9:;MqY<_xR^\>k CnVr~b:ȓ2S `Z4+Ͷ=zz0i6X#>rStRrFo@WE|h"t7Lt.h"C&T f)068ϒ~7~#hBMmk"@l(6 6l[R%alusS?Zg{DcY4vg*JŢov.S&i/H5ZJohH2ȑ"*ESh8VQ>&RCn# wxs{l@Ujy`ѯ>ò| 4T!j & -nK[uBB [5:䴷4;88p<#κ]Yl ͕\JP$U 6iaw>?c [ N]y^u>TN)q]OyA4v|&Xp=HOۻ=ڳܢHzFz%-IhZk)Hm޸˧ /IZ!CuH<:besQC+B~z 0SJףh:^cHVً>&Nh :R0H s}3cz!D׉gMk?/7+ia0CsiriKlo@-75 Xaq$24fF`6EGEMضپ OYß# hLs=G;k,?Ja*x.߸e4!m/k iJ瞹y/{4m`:q<۞$Qu*1aUY-qYsIc|B&d&?m*́t/;LdU-xU-c4CO٢1#p+M))]vtZK >jcz,~˥S]U]rnٞ0ސRhdMY ~zI[?xS +A?~8q[W R^ @6Ζ:QQINTS+O6sdc}K[W5_+2'6Vh܏LU7Sp'PVOJF E3ouMD&*`'[͐Z7w?6g$sݩh/5rC\di[$5ǂ.;ǻDZxj5^X$Q7y"6r1_Ra5ogRkK+;?ߗǒ(IUx^Gy?YX21EwW߄mH&m.h|)?w`W?|<JxMđ^$gPzqb(O2ǘ)'d$*zJ^-c&X9!CʼnC̣avv.I O iFJgdDhkR7jSϵ}'j!W 8kӫ WD L?MY_fW\>M?.܌C_2l8P~aS.-950 C ݖ!@ج KHX  g#GAoxVn/7dSt7ILg'3^dNJ߭sYF_C^.rHO^QSV/td{}(7ӂ'@so5νXHFDʮP䩟/o-xP4dݔmix9aYy{vdDӖ >cE<#63=65zH㠥ƠB>+ovO&:j;'4?E~7AQWt7m6%L@0Me9Rv N~ \y VђmWrj1:@|4^vuWBfG|C!ǝ3}: zӢQ{@pgjo!Y(LN̶=kss䈒u5yTKK0sIUuH:v/D8t?4;薟ʛ +X$"'u9V}.K̄tS:1VO) B]Ǧ]_۽=|aq& yMu>t}\"jx;(ښ]7 +*y \Jn҄A;rT}3F"4BJ?Wwzڒ oYI,8 Z)K>t7/0eЇAAp\ 5qx>]T%Yͅ'NkuÓT*ML3IJt/@nvT~MHk i+'wzem]һ zNtq赯z~ >Z; 7 %b-o@mv?*LP ʠNgE5 5DSxffܟ>W駰c8}⾣ 9_/{ i:U>؄+!doֺOmPW_ۇ9oEנ%l;exWЦPJfa+&/A d&~-H8v}O4Q3XpI3nJ, <.2#nw!f'kz$(@dPUB0 o[MP3+@ OFV;K"AR\9Iqa-o4n98l:HZY6hk߹mߙju$] f-Bo4fbCʺ򦜮ʈCΙ6LbР ~2YhIzS-M> 6?wr537ݩ^S㔏InW[18b3V̌4/j=Q$`~^h|iK9/7T cH+φq {9CNh%n ٔYm[,MIUN6H8KUcdI(h90G85m󓪪|!3+Q{a׃i`Ǫ~}QeY"S]9 u91 Z5I,oπYK~051Mpȸ){OJvX˓|{1'_,:tԑ8O^;(뙂;\FǬrfDaWq=Ս*NlЪAt@ԓAOnQOO|L^Z5,'48#CnLOJUۡYEI%ТwwC":F]xdN;1XKI|s]v18d}Ҏ3୷9|G!fwuTAC~`9jTM;+^ Er-֍sSZDgQ.D"V4swkɝvgiTNʰy~eX2<=Ӳĺ2,qi$3Qmt%f')S0|n}}3Kц^vt7`3[~1-km4.*dg^1kojŒ@9[z_oA=>%]l4 nI蜃e"OCOܡس8hCC Yި՗\bNo}[o=qzݗu? !kO:캌J4)6cbҒwǷ#{j@csӔa <#$X>>^k-^uH(ul)¡~'әp}0S{[#$Ԥk *L-)]rR~;IQv߀W XwdZ- o7tE_DxE|@dI\G?% ʣ+#|8 J7snҚH{R`C EGܼ3eyRLHAlZ^|ex#Pt2&{JO$;إq;%aYz뉬s_d0q@,{ۙ04qcsua]<,f+0jUλ7}}^ͤ\c#isddH5 T+V3y[3>jַi6P!>YnW]v<&?r~2:MJ9[wކ nʫ? hkʬղk]Ǩ>tvL\mZycFryo%s1ZM7(8 ljg6Uf<#}!Ny1҅G8AE92aq &Tt)pV5vBϡP{z,ȴbxy9ؤ$P}&z;8Rju_5ʘO1(?m9_2oZhW/kJpX)j{4j+a;B{SG2r~\JԲ99Mn>D/*n(EJZD9ូla%C?z5c)H?d K5el*5dBJM58&4t'%a79PLNU|~Hk낅@AK1I29o NK("qõg%תxrVF!b#(<1I>F*v;UdVvGx45%o-"vFkH|P40WhZ4BV*DI|&㹕) f1-XR3W^nŠzQ<ވDXJRc2gyDشn7q˝hEǠ8.$kW]/='!Pќ 4 WaB&T$'*\2҃L2_G%KMkYmÖ+Бuۇd/V58q/յ x =iL. Z& KCygcFѻ3[o`owgZHƛ:A:UE^<;:xH  j,nx Sv7AYA"xQ>ZG蝉(:dm^h JՏ ҏUvzGA2 F[-QB1# CDAo'F|7b,:+. 튡eUNePamUT蠥\G.ymY}5QLA@?78JL(qm7,w[Z*nkx+ց*W `«Q`NfgXfSc}xwʵxS="7pS<CE9Ę}nػtPc~-Vu)Gٌxx fg[(; p'ޛJykAdjcl阥=&S;>,ROK6|@ȝ05ZhNR`/ r5,w'>IQ|3WPJqT(/c(#wy4_tۼU!ssN<`|9yHSܼm9Y_KZd83QQKd<5J'јuF+7r[@?VP0U1NSd卄AВ˵2UXmΩK?x(9?u x}FxA!'S {gfK3%XUnb^Re!&z!YzR 3&Ů$k/0m$UB$qC.יе#T{m~eTlŔy#h4$/sFiu6; X$v;+CAw[.,bsp\"\(- ^0]Wĕ5L&1?~w,plT]#o~o_hxKGDX0ۤp zY̓ @UfPnۚ?[/wI;bLeg>|/P3:D{"ݛ_gjWe\Vry%/yԜ!I`]aTɖYƱ*΅b%%TgbUOZϡӽ%*ZLD2@C9#4/nP1K#m\E̪{Mgw&td<ׂq/G2wW a~KC0ȏRbbsJhzzҿ~%]I1 a*I.S^kOHm.Z1!uYi At[g]h?K[zH/aMHd)򻧞+=]/71ltdr~8w mO ouQ?fѢ#= \*uʡP@[šºl@e ~ibwFloO U` =6v3P7`aK 8f{ d]@;Om 1xdX4IElr\P:៏uOSW_éRt,@y*'s;^GrtM֧TȦ㵱zyČv-_C.T PrrGmu">X ^*ǵYqjC*UU=DŽۏp(vΆQPx] !G`e$Iy&-cR0*%^wQvx,_k Gȇ`᷻ӷ . F?&"tJmr42 fqymcoBY$x!b^75d.Enu 6nȌ7rhDO:yhkJB cg4A$8_}}rX쑸2F"k /Oމ {is‹ a߇r"uw}o]6klR&fMQcI?]خ~)NKS[~;gxɥHQ 9$-KKS T'ˀ6vՙaY,,% ݵ„rAeJ79#rީv%Jmd hUҚ2 no>L>8V8&՘4Go9 JהhUK4t;8bQ+Z=J%w:4t# <6PE44AY[wR|+DNec:ĮVWV*#m FQ-vc-w{ ->kqU*?K >pͻDe3nO\ԧ̃lMȈ~BzptuelFB,`/jh +Z ENΏb܋# %ԓ HRz# ]!<.塱 c[iӒUh6 H1|6aߺH(vCM^Or`yPn&:&9Y݃HǸ2a%L Bv-[ bMw褨ӧn]Kl5&.PF%t. đQQpSfDjm/ G^Q}PV림U)›8 MǢe_#+7uKzẎb9BIbѡqRv|8JL/sT3t6sDRuЍq!mg 9ǟNz灐 c튥yOIr3>>RkVTj UQS`3!2Z/ \*V SsF3zacS-r« t57Qϛ_0sTgE4Hf"=wDD-mI3)<8ausz2miZ*sxT^`lܲ1ZMj#hd%Uje Y 5_䝃ESN2ºT7}";w%[MbyruV YvFYⷙVL>'-oGl!żb7f祧=}YgT0͗OisŮ2&ELG"رc_wA2UۏVӴ(M֢ë JV]/~obGFJO,Y[*;EeA/OK’Zs@ YPHF \ VvQ%e=J-퀘OVɴ4?]XvUu*~&=~ڵ@:HE̝-Z]5a{6Z,?6CUy`gW)֓"[Ύg< wTq1X9/̂{}*H \n'_j`CD>:0;}&DV~P(nǫjL >EI9(7T֩/fV;/Kc7] D><xq9PVQynBIbi(vK[""%Ѣ9콈Nm/c0pcpbǃmWEfR n0l>m|mqymIU_~1iԹd .@7P='y.uUi ,c>/btidO>]x!&*h2SÖ ++D5ClݑOh)_#qdbҤ[mqUC{)X#n <6k@'4?yZbNu:zȞҗ_ td)q5'{(9F88v~VSjߩg F| Ҵu;tɴj$TNӢLCOi_3wMԀ˷ r#b=g ӭ;0L#en9%㪽}mo'oIX-mFSZj%μ21vlZԔ)(`M| n[dzt4=pY_ŗSu \HenА7+(h@3 dC1zw̫nʣw+_vR<%eA QL.s}^T?KӒV4yŷt &NvM4ߴGj;&H~ ѐLg8v_N;&yQ̔= Z(Y:[P]Lo-6h(O̘ ; ,:S;Th )RX|eOyA"rCӪ|ObPmi'%Tuk]3k|S'aPs)9h#5AǮ-W'b)}3O>GJu\LduZ<řHSi/q6&vf\ps[3ۊޕ\%'v5o_~.<ùGl i E69Pe* i]tE#mYwAFsnGZ5o= i8Vg'^'={c~ƌI;q*NXtgS4o,-F씄I9N: 򈑂MB!x ;>F4\=M6f1xEa%'I :2Q?1blv鷿 0<%Q{s+i|} CA9Ex@ /aeZ.%bj E3oM<..%~<{Ӓ k~9dC񘌾z=If!{#3I9D5EdeOJf2CQԔ${f),z)DiZطQ?m\ꖮfBֲ)m֮nueAY2)HޠH,G>UZ/A>[UAASKHɍ?PS(ڥ)qͩu"5MbLjl(v:,6o7:;YCu0G'1譓e>+v_Vni 0rh3*T/e78&/)8}O\F@'‰}"5E1JVA'~4/RN2`kevoyVVTs 0jܔ`w,|Z[}++ M ux8R֓vLYe ɹqլy!':;r?EPVQ=dP-A˻_-sKknVb7[PwMiz4ZvUMK?Dzb3.Sư/H-27}Jgn?-%,*PHտv4}|u-"l֋V}JWa 2q65Ŷ5{bژq6%'k2!gEVW*ǸN.3ȂeCЉ)g+@p?#ę{3%7C]eKzO&=Cҿ -~x_ҿ[voKzOX%iɂK E$С惏$A(L; Uau(apC Ϸe#uf,hp'Ŷkj~n:s%/vw츏UO# b*7ص ,ConoSn?C'DyuE;Ha ̍=f0s3 EܵNGO&S#w{bkERnZӴ/ ptNτ~JԖouͫDN~t{cيս~Scpbo@Cq]^GQ^[bK^!>hbEƘ?qeYz>,y>}s;iu"☡Rx@_<˿XRdq,Dvoyb/gBlF@팥]Q3ؕƲHbֻ]#8zުYyaAs͊|V| v|2t\Le6ƹd>§&DmMxqj95תK[# n7:E_ŏH9aNX贼ր*Ďo=o .̘g\W엕ķ4N͜m-sqʱA.hk[Yδv f6-]BW@vwgK Dj$ 釞4q27bpZ&{(rQ(8dKWPVzL&tm+Iښ&it͂>OJ#\]syn{rhXdLK-[&洒31 (VXwMnz~%o.Pá7b'nz{7kniyN#Tkڎ* dIacr+5oc^<,.PhdkJ.<)F!}N;;S5ʲ[h;g*w8xM u.I\Fx?Y&!̈́RJj6{03o :l1?lܫC9\T+{jafj"XX2Xx])-|{PC\~81,Rd|99ES]J-qx(}!ۇگ/PKYB@OlOEBPS/Styles/stylesheet.cssXMs0g&ALo5_C? lĀ\v+l #l[jvŇ(֔de IVqvM`4Q$! >q_\<.IDKM>/ᒢ Jxzk^Jkox7Clb̯74[:)K{A Ait;=$?M&Iqǎ>Hss+(ɍ='Ӗ-*/@U8TXNd.|J=<k?9Uřȸ {"fNXF/"+= Ɖ-&14L"&vg`.͆HRz7GT{>O -+@(["7x+h[g;GN6;Zft=rl8Smӂ>olv۶h!~+R4ͩ !>?GEΩu ]0tsFV4Tdk^6^}W|mPKYB@7:wLOEBPS/Text/Cap-1.htm\ˎǕ?${1nSe6X)K-`FTfTU3#R%V #Ԃ ;mddι7"-?$%dU>q>?zѵpr'uh_?8O4ߘ6xćGSm ~݋^=y_=szN: CO?=i={;i34'XO;?%>~cM3`:3Wǐj~bSyʵʛ/m4C'ՙLQ70R]%:jهî,?k:*|v=fL8䑛7qGo3]{gUg0 W_?[C_ ߿W합1:U'[Fggf؜u|q.L0ηل\{p3 ^lG;u c|?M3_rX]y֭7ms{WRꍗڝ/ίo]gS-vnu^a&}xSs?!bG]8ʀ쪺5 :T J][?ʧ+\zyNvp2 _FHa 2['kX!̟\n̓wtgeiRx/δgwHwVMR3XsiRjj]cDsaL.ԛP_a,p؅4F#ߜolo񗯡@2ȭTa&SU3F'ʥ<`ǦZeGuP5\GsGڵ9j>TÄнd` ZbI;, h|CIŇ^@KЪ 'dbqaipWdZGc Mr1} ;AWl2a5̨3qW@r,ݿLUrcU :#jɜJR_])p;I݅YdqJ W4ed@"K(w+HDU 'Թ[Q傤cg |yLf=BIImۂzkh-%}=BN!ϼ&8@!$}֢C2Ƃf,mQk E'9l欩0# 쭭2@ e(4ʟ29z`,A Tغt`vyh[J=@y2uк@Uʻ_IjK,AdY#жxISJ0 %@\" P̞x7_l%ULqi . >0 "q,|/`N ]#} ZaKۺuT'$P{֬( [Ua0.DS ~ZFA_ ''ua^+u6"kF*bL "D э~ӈb t['{%8}/(JliR (x^Aߖ쵃G wT3] # 8'8}kۛࣂf^ GݸZD+ީQ2Ȥ(B0wk_Hlhm1-br|e*Dd)VD̕`-Yq[E7ey (⫑Ύ^<9 /dpE ^SaR!ay #vɃO &Q+Q4@'h~u[brW.[W9j6lK4֗ na%Sli@Wϔ٢݃O#6ت;.NM|H{6$ Tz8oZݏ tTP)pOE ZᚈQ%3>Bo"65!YxZE&Jy,u~Pxb&L6nQ2^L:}r$NdFF# CK{%{ l=WƋxXh%͎E-f(Վ^){@'؄,g > yp⾁ҥN{7P0pςjKVPs\'JKݩ8$63\_YֶJ_J8wҬ:B]P@J#"N Wb0H9_k$$* LBh2@iK4h:>?N%l/5)i Jm(amZS·R#;".J9)SC9"!D+N'$zBDی+Jq1I**+p#lY^ܜ_)g}RUy!\?$HSo$S{qVR@iVrKZɧxڊ# C^!5 {1w9/ɂQ>?o9yr@z#-9`&+fA!M'\r?@1. Cyy-ܔ6/?h9aH  Na=FDQd$Ia&;n)̲^p*x8hwG:-"j)xm04Q9@3vefRuv7bGd%\2)IְتОYΜX *V23` :J?RFZ9/ ?K1zS`?1RX|dnřzr,㗣ĘlU`)ՔyIl_Wa'xj<Ϋ jF!5nBpc_vA|A=ȤԢr%Ks=KٕOV_Y{[I×9LCd"crӢt\|qs5hx_ssalNĈ$H?΋Z,Yʹ`>&FV."i/ |N!qt:8RkkrǙ:i"%ƵrKxPE$bS-ii$gAحl[|+8s~$Οl*6<,&nZd9Ľ&\6CO1o1B Ô6A5B*K枡Rz@Nv0QOaQ#S"qx v,Mi\`О3`#^>cb.1*LYP:/~wos*P(]O\M -baW>JE4'|GiQrp11]f2 Uj̍,O[ )QY<%kvMI8jrE.FOwSFE>L+/rY(v̺9?h |7Z4Mr=>+з1r^BXC2R3. qLI y xй4, L!hiݫ>2WYLR˶A!~YDY$d Ѿ*%/ihWmn'p)4jd-;m`riҸ1nI,FI&Iv $ִDZgg0]jQZE - m,!1W3LnEKeQ KbVe{݂7W ) Rmf[ƢUS1{9 XnmYd"@_ 1GqzMKVetdfn2fch7\go0nm\LVfzcQd }+֎b[WrKKݸTiI,VE=8?.;vXzK5 $2Ĉel yr:4gKYS氢#?] SNuNvN5nwcjtSfvꩳhU;qвή4HIȨty_[vfkpD,>Og $i^:{6yCӚ2ԎS\Vd>Jjz'#2/BgֵKipt9ܣT\4I,3FYu,<7-{Jk `/M6$<1ZSv:˼7өV86RN3,]r`#i֔ܯ2+)\;^*T86E•,&qk#y}PI\QQyt-c3=?Üh`#7)ӤrjveK ܿ^ c*K&}Eo H]kI9%9Y3EnHKEy V Rd }KoIm^{SAhR,χ3, O%3dQb!MϥIʛpx!HhZ|PKYB@y/ OEBPS/Text/Cap-10.htmVn7GsQ(aM.:38x\b%$EQs8sΌךʚqH e |`#X[#ǙkOOP`?R<ߝҋ?f{5 Qhгn̏~?=D/#FǗwvv:(>$I4e`* ҄qJgzn8W:H'OCi`]Fyr +A-'Ò-JZT99g^W8> 2p[!Oyg,\|S~sttyֽ>PnfaC~J?M~ 917G6\d>R6piCu8)k;o`ƕ0!8kTVvWAu^V_[!98jQ[-һo$I7_D8\xd_'Tj`m2Ysvߺl2./~i[1SBe2ʛ5WEhe%5 F7[Y{e}{R!ɋ/esoZ KOmi:t;A}.+IBuI35˩fԋґĵu5r~ۺ|_=1h a=bÝo'A'H CR\0PsS(228/kg^-޷ᑙ=~qU"??Fyj'&PKYB@=;/IOEBPS/Text/Cap-2.htm\ˎǕ?D-EQ˭neh5e0 !*3*ڙ"~~\p1?9Ff?D5i0dUed~YvW>ݡǛ{{Gן=~ܘۻ?1fvoӧӧ7!.3ܸwӲ+'Xc|ᷗΖwu\ݙ}鿚YjoaYr^; baWPo|͇_a_ Ƶ?6Bn\rysX'_>TB4hšYSY.ڒ.6%yӄ.6/gƥ֝],ٙUHV)Bvlc'1fqڵ~i] BHYi*_o8 wjWlr:g'/{ة)")U0[ L8 i}9q<=r'5 )6*ok+na '4rV + AL8Z=DGO8n vA/z+ ϿYmd[Aj,Śoޟݰm$5c=L)ܻ`m-/ﮪcԀM.$Ƽ?  W!H?ҥnsf*X$t;(z<17+,y SX*4ĘxjSmZZe7/@=Lim"ʷ}XUd +$Ujp$ӗh+`d*P3wEOȐJTbBsO(c(ir9/is"xM }-(Ub4I #BA%} KqٜU 7XJpERl;6 KTjj#ϡsUb !_{l& ؅- (f :}k ~,pG^p綽:$ G]>)pJuo`]7 ޜopOV;G0:HGqѸ_N.>5"I[Q{g/ ) B$ή`aY)Nّhech|+v)lWWgp[Eis,}#tuϯȻ{Fo()rY6Lbnd~! vV2,.K& QmN 1AtqJ$czʮzl;w^WrjP; I>/0C6j2T9ʜ롈<`}! @1 :Zj,e !OĪt+CU p]>ifxsfa^6u /Tљܼ1{Ʀ0d^l'{#W8| ' \]JӬzojYp\|`/E'@f=Ec"wB0x^Rhr_i Q=0'UX+9j4}Jl<^yD/EWBRA!ہnN`%MLs;m+*F~=y8TˮDRsﹹS 'i-zYBf!5. g, v'4T$Ts%SH8C0$@ 03А '͸SZS{'@WE8& u8U# 咐Y2mXQbe suSóNa50TS(^iCRj>FP0 Z,!(TADF$k ߷ } SMf@5TsI@ /9=@Sx$tvi8UlDtj,][tRi݋bzPBp ^9h^26QҴT&\x?S졭Jӎy#™*H\I6& K3+J\%0o%[N)+,7*5/ӭ٧X܏ cQy P)|<(*D@ /xΜe2EU HbdxX!͝%stfMyI Ld1yaJ  ``a%3B:ۮ^jcKW`#"qeQϙ1P;>3^}Eͣ[;-=fêa7;v46!`` 86O<5-JJY^Whl#+R2!N- 3X P׬@i!b"-p8yв1^$GX0)!Q]tX@(l03{ R%ϩa>$i5닓QxG4pr0\11+| 55y@)G$Bͺ D_}wD@X{G%T6ӽZ>bn߽| hl~aB }4أQ= KM[5CeѐG0b w0{e&TVDOV.@*OS [ 1y)5ypQq@g|gKX}Ԝz_)F'D7a(ԂIfEY%6]~NI` &rb%Yت[$h$,]g ~ 5dKI7džyI EVngL5œyԚƼa?nr2RoD;HA!0KbE%`C >*Bh9ߖ.3)oYd{DJ{JH{C>OZ"uLWYʖ1c]A[+ :GKpBhƊY ΚX`=FȝCT0!S) blX}]Wb:+++Iգ5Mv,YXh|hׄF"=Q|Kk͚$c/G+$eontU8J'"ga|crf6m$ |4U]J'v"74O7\>tq&a-.r&w60VZRktQso )y)Tj/tx1!̩ aAarKNL"h؈d r1']-ҐʱXӰm;} ,<#l)1DyMBN95\hm >iha ϴf \+n6֋ó2P hktCtk"j.a)Y"bW(ekTfvqfre={r nnmYsjCC&Fq9b.JWgT]DZrLMzb`ػG K6Y2v֕}#mD 2 &)B͖jr [/ *ڳ!ƅ$+KA4X.ϙ ]xCo49p$i(:ׄ|Jٶ&U` D+ xGHcrE e70:J2A#y* QG(a4N Ҟ تx~.XԳH r1 rvp %[iޝWl\]8gS@ al;Wuᑸߌ1UK |2JEUCsY\̥;HUJjHxPUPҕmb}lFX#?{awG}9CQkAuBD$y5'9z<3tݛO+#~`|&?4A dЙYgKxxݛ=]eޮ5Skk1q W"r]pj7<(^#W2ȋj#=9Riݗ|zzI153wnۧ c=y㎤቉aJ^{;Yp{&Y,fMrتKQUķ׷<$ή(s_׵C.RDN+^g؞D6rtw{Lj]{Lcv=pk6i}2eC&rTSK$w!9nh"'b ޳ M%+Ns1MMKq픐s+…(XZfIdBE ih$A󰲷m ##&%?TM@s׺5M@ 5Vկda6-x1rmV\ l/5 +ucvț[)HZƦcOaFRC=V]WB\:.$?[;!0/É9ʽÝ\פ#diᴻc-n[VQFÜ ǵU#,0 c2\,%I4Cr9t!~Clz^m#<ٚ5S#v©lE2Z/cTxMGJwٻcY1|}͜(K%XG巡9ll-!`_RQ;i=9XHfcfgv[Ԗ1\CHRZ42m;؊UOj~Tb{+u CBҢnVHÅ25zиWHWx}z~1Α"_G,*5WvsC5SəHtgXv/Tt (k!z1Vbji~lZ< F-]|n^n7q5]ic+쬯*٦J|o/~ g) >ߚw ޝ1P]6-.@K.!n-.K[D_^n?+|PKYB@ρ6HOEBPS/Text/Cap-3.htm\ێu}7(Cӌ$SC *H 8]uLOUcGH|0f?`I$k}Nu{fr.ڗ_tmiw*ױ izg0qmg}:{./.?\ϟ~Z={q䳳o㸹qW_uΪu؏}c:.45F#:4]6Yzٸkp1*ųjm0_z#oĭ<Ǐ?w.lY?ڸ~Su.B2cW?یʭ1nn_-߿ߏ \!nЅvw:t2W=uҵq[תdj}&ݝ7'>u :I~jŸk D<ᖯ\7ewv%\NnL8P5!.j:BTv{|8TXR m߶W?յM.rvzmQmR q6}0!6%b4ݸT۰ŐL;Er[p'’s:vWa67p8̣Z WOqX(Snnv#_wqՒBa7h4 pu-1^u/Tg }LcHqg1@vi+ #嘒TnCY>wŴhi,-WIg`2:OMm*U(X 9_ sde1"/C:!~}_Ϣ7 tWh4 /.,m$_>#(cH Hmi 3IPbZjC`%0M#ٞUsP6("!1͛EܙX('mĢl_2ZO Ò(I8I ZG %ixV:1q"h71-ˉ'*'Oc9Y!U+: D9EJ~qWlT}@KIMCؿ+a t[YzƔd 7D\MK%b;"F%]*[}Z) G9W  ܐ5%^3Bi໕M-4%IGC< S?+HmQjЎq^CN/aOn@\iq9&X8>u"2Aܴ7ߐE]pGZX'OBk~ĚT`7sp;Ndn8I:@B02ye$'n*]sos *kVƚn4,0MI*y)3o\W$zٞvc,^QT8 !Bqw z:{oBf$)F㪞sdq 4uڜ2D}&IdA'B5buJ/%Z-_Gxɿ[\;Y=k布Մij(HB&3,a1%$c)jd'Wd)vU<5x4{O&7)6I]+VT8WtX S,I?>e)qqLQNrxT4,U`` ca]ij5:Eq Ws7P'u%+hc yL &^^-ĂJnn`TIU &1lN9(1K3C)YK7["Ap WIV3sC"N93mRVȱjW+cRa+ۢ,i$Fs8ⴎh}L](UU;,$LwT÷R Pa&A拵ʴKk/Ǖ,|׊x.CC GrJ}hd8N9Z;wEջ"*R D)zlNW p,gEYgF,9>wJaDh3%e+Qn*l1e}p1^|]@=1ݙ5)nvQb *JHb:JmlJ|gw-ݿεj9,E@ .U əeІ=G;" q3Oٜk{Q@4j{F4N̓T}J1BKL`!D*eα؍941唣 uJ}J=3FDn kOڌD{ŗJf_{,}6ꉂ:d,'ſW8t8 x-@S+CN'\z/78f21S &յ؇,37&^n)w|W rH0 Sk>zJBM!b!~(Q 4mP"ȼBw}U. {o𱷈 QQ{VYj \K)^RMbqbTnS-*iGɝ8i>Ԍ[=N+ֵȼ3UpMpH e-K@USχ!/]{>5&;ؗ Lii3yc7kWc#6\=3-O^Mv 7.3!v$WމtqN+D[{Cy6q{Su8_2)>ׇߜ'ݜƦEhF-NL e礳?ґw'i3)1 a-aqi3*\z>bg~It KޭovΒmK*ʥ4k?NYLti\;Zd<>P)|)/BQ+̅y D$*Wmڿ-tzE׮;Ⱦd )t5iiЪ73='lCɁ-~^*r̖O|eN! E7ww!G2M;&>xRR3 [;[.&aYrk>%*yu17e+tK/B^vrFBS>Q/)uJ2Z߼|6`5]S)Gg[zR!ϚLNB= b2$j'/4NX`L榏ٚ7&0xk˼dWVfwG|"Zԏܑr^hTav p[0`";@jJ: a[c]%lgطfJZujq>F&UoEXq`\e;+l6)vrn(li}cqs:xZbV\g:^V1dXw@xud<:Bovh\SϬ ?op9e3 o۠r1DTNGL:]4>UZft,jےyx kPKYB@S6^/POEBPS/Text/Cap-4.htmWnF?\sQ,qƲԵFP9'rؙ9xEEv~Ivi!m4}{C/KC 弶A32j~4a !J$MN>`u/'p×=d;M=Jc'ig&~@!ԣ4=;;ߧ/EΎ< @O+p󝽽\h*0e 9,Os>iS' U\±UJjH :59Vls;Nۭxjt fp> K|WTf'9H֛ e mA i╛8J~=:><=NښEsEd7Ԇ`}:?u)gٞv6%G\Nfz¡H v'9Gl4\ؒBu#FYݸtj*ΔoMn+K {2co?u%d,*oܘ US_C-Lisؽ)sdBݮjY"/Uʽܿ˻Q:OU1#4pԜ.Jd"]I 933% ^z m"U ԅ*6*Ғ.(i\]ۧ}xGr䠊a cu|z[Q4w*0<ݘ=Q)ΕC( U*%A}GYÆ^h*.^,2yt%iDX!ԫ Dǘ 9Gw`6k[MBPάP$0'_ۏEi6kc6M%aT 7ŞA iA@A8mK (Kb]%L w\\3W=@=[7&a_p(:z#N.@\g "po)aSߏ*W>Wv&PW!X t-Qʨc;fCF”S4Nd8)(^pv%WcC,L(lYNl\nS9_>dYzۂUa؎F{Lgq+Cp^|"A.x)m_h k+䀱,uyt)\s_֏:L x(> mVo1: *%js!zwq3-z!O)ɉznNVX;x)e̖k 'M%gc+mͥ 16*y Sb6j1ThXx5p/&-`B~26q}.}7&rD7&ׇ&}í{nwW5rW& m/qӓ[ks 4v|S )2FDuo#DHQMZԯ1v&i$0=N(`4V)T6aW; +,fmB##1 5$ĤHpS{c^#3Ř2dH_^?qf u5B&مW)EqC92\roZ#XJB6x!Tfom8i6c銅ӯ^/63M*\ STW@x{`v)WaXuny\;Ǚf? VƼyU*ZJPEtLa~cGMINWZfSxm&gA&fT_DF"VAG'qlܢg[ԌS#7_PKYB@x&sOEBPS/Text/Cap-5.htm}͎Gvހ!ـ/l)ʜ&cCǓrX=0~^v7}DduOMk!VgeFF_ԣ/6u]b-c'''E?rul'm<ɣOqgf^8ן\=}?óg/NOd3 oONc>{˳C<>VCu"opxc~?3}?xW=ƛ5~pE'_}\ ůcW?.*ԃ|N5⌯Q0SH U|tmڿ/6_}~rzzj׾?'œbom;3R:ѣ|LW[u~OEjVK\)Cv 8tͲ uq.]d&6u΋e=z].av춵}=G" 2[v7>7 8o)}g~q}Q֮-rtަ_EWz^yOH~"w,;.텼VylxuDC%R#i:T_|>Ko!'7WO+w4ܧ2sW<[(| ],n!][?I嶭+*_nJ^]BX_S,|6vE6C*y.xn8pF7޵3C]'~[xHEK 'E}is:J_tch}۱3Ɨ c ,27]yڋVm9}^>Ѕ׋v2ٱ|Unba{&')cVs;Yz /CΈK#.Sgy =]%iQ Uc.FX'3 ˜_AᏐY1蓏oDi:߂DQ\W޷ծ s;܄ +.k#旰/O_۬ l! 2㪘 |M).AqfT.l}^ٺe_X)R!bѠFi+UAZdpMxje;:J1†u8 zܖA9E ]Ogp}! pKHތ]3 ,u`tUc-orƜ#V'٧߷l{4WR!=lUWk|n֜#?yy[z$nƟ㭌2-=6ytHۏR* JDe 6aeuE"h,tBwMA5չ}އ)2˜FLKpBMwB }yJ ۊW)];ۼ gۼl{#zdǰʑ[^L‚NV5],7u/vT̷]1#߷TGT@-c0rx -ł.µkeZd,LS;^a.xp U]gF<ЀJ0Kw]@à-3PoEx ((ꖇ}w. *+`ܹL8N Yʫdߩe{Koˬ G0P het0|K?`iZ|,wZO+@u 1bFح:q%\h_` @Ҏլ !̑5i* sy'WFK'C*7c]ω҂o'Ԑ{y8hLOXqn:Dv֡;_n{R#*&IvD&?A>xxE'̑ vxNAF x6Y(ҖJb᳤A4.,P&_I'{^TQ`,̢lHuAImGQN.ybnIۄkL}eV$su[z uw9)z(H1Z3 ` 0##НF[&畘A!lM˜c}Pf7fTA.rKZvJtSDMJU}o:z}m\(jF)qM&dQ 8$o1!?u =([M ;1xe«T4zB hUFN(IkJuw#\CF^*R@%E}}ZLֱ,#" )&@={^lĂy*Ƣu,g4iG&Q-ZE^vqƖƕ3A~F~BUspť9F'{~k.^ CdY~:ꑫq=z01 Fl#Ra ז4v>IYsT ;_WBЮǠun*-x힎"iO5o`Fú3J9_7 %S(o8c7WEƄ d?(wi;Q슥Eد 6M(w2G({ٍ.qv¬ZPjn*rHd K]fDڱyHg sLxp?ulXY\9WA#-nzNel{{0F;xS!RL/gEU)m B-*q\ثu0T ԅ jd 35 {{]f_@ 0AG܂PiBD\'~2vȄ2˜ 4[e jVi]n]I53c ~.ި{!8^ ~xHvU8Ҽ5Q}]#D (qY{/ĩ2cV~or̸*K R=vfhbuoi 6@dJ"ugCN,v#uL1?Ho/o,ZkyH. j( X11,ws+HXGE $"}Et1X)Qi˵\85aadIs'IwX޹5!b8i=[Vg^ MVCI Jw8P' rA+Wk#Y&G {@U@.eL?x2Uwq)B*0O F ʉoY-@M}*aY`qaנ=䛯l*"mo7^3m8ϊnhdı$idm5-`^8(+b'ċ+ԣީm4ԨмZ^CWS{5>[4箩NK}4+/d 3c9B; ^ͰaZc22`rf~ /fMzNAUwd\Y%~,$ cnbl^sEݮ8ZYT#DmX-e)N Wv~UAʶcG p-}K#\00;CwcNfUE.SC=RDqU˽X5 `soo8Aqa܈J& >OrcW)4q|Lv_'W[#kuQάKR&Q$xT^V=`0"V=V۰&+Bdmʨ2br oE.X#-i`mCKc&h,>o}׎[uXF餳4Zd1U4ETǬhrp 4jV!Г@>yv~:͊`D9Q J<_h5OYIA1͗ r~6T]?]SFLh(Zq ?P!AB_M*g,t5ŧEuʈz )M! vTBt;T09އ̈́(o)N,]cu#7ـIK[hg ٱкZ̖YcMY MRpe.sķ݊ {Q&򒨐 QY÷Կv艦s= ۅ/ًbT >!K uYW6(`ƺȱeuJj]@(|oWm..Z?CsyU8"N澙HC\ezځ*O5*_K[hv; 2v$-R!ߡ/v+h(4ؚǜ'YLl-@'ut %M-zFOۢM[pdD8~q{*f.x'誎<d[HIQL@s핟!s$ gDœכ]W}SPZj-|V֮T,W:kv׾שXBJjYrt*#M>7!t[ƵR] .4OsbP`ȐV[h(Ծ/eaŧ;lWv_ʾPHTʳBJz?q+Pv+&=օEб¥HʃoiA754[bN)BfZa{ZBq}phSrcD {12f*g ;**ɪxEଦoGYc*І F"yD,@p nv%zYt}hp ;M+q8O)wuL`sztޅRܫve{4$Y&xB Ea@F\Zώr[֟z6,֥%%^wZ\ mpf(r*613vS8Ϫ1S|tabM̺78!?*rG= ƭ=-۰qdڜ0``z6YCӊVZ!w8R^7hL,mQw& jE6&"\@;%bsHhWg:1۵s';j\Mn{+[x87cQ(Ql09V~Z+H[{8΃ H +'̠ 婝.>_N;gn*/6v:w~hP-Lx%zS-uD ۘ-#+}GPH #/bD[hy W+6>:?v |RW.A^o4@<,>ghBbGj2>M_#+=v;vťc3sh# ԋƴ'-(^Pz@x5vZgt0<LYL"@7=h3j"*x+U nٙl_kb\Yea97RjJ".U#I5j6ԾqsH.Uaݻא]%ek6z5{̼R-/Q4ߊwv X42w z:dtG: v&#]=uOP#ۧ7p:ڎDz~E9&$ 'tFјuy0l~Tlsٙb;<_gz3 1c=<3A<cZ+lE3cQ9(zz299|!ZHDMh͆(5]5} K.)Cqz +ϖ9- w59בm#&Q<酞|v !@*NAb*΋U1q-8["c\ Z +r%M 7.EDSŌm n c -ڙP<1561  e +G8쥲ӀcDP|\ε[;{WZ (3;jA;,1PMg-ۙvsrgsV$ /;?-GXiܺv3!͒MHw'VC1*.p;%SV/q>Փ5f!@V3{Ͷ'Y붴PbJ<.ytJt׫PB[(!Ǜ+&_d-ŒóZ9KN"f)VK#}v_>ORٴ;v'8#`Y0MUZv< i,7Z*2þE:mHcpQ:A?N:I\kUb y޼Q+RCuw E.=kٸ}lMnޚVd藷ޙ۶!ޤwxO?YÏfrk>?==?`_3Y}w6?{l,G8f}=,G|{>G|>g۸ޚ*k{ǾJ1eoSmnmqCibZ`csKib25F}.cX:ޝ-y|WNnyo2͟<˟syb &o;ֻ0䕗ͻoӋ?9e+g>7M+Zľ͙-G}noҭ0>-7gfriE76Ԣm͋qr뭩ͰJ&n8bjlTE1->wލoL"X$\/?~bgZHwn7.cčLvbqv2j\H>ǩ1uɵ5?sb%t1qA/-YGȃyhlSsIxaE{kpɬ]2h`uƆZՀr⚹*[ +|X.ʦzL/~> UCxb ;ip:# :\lM<޹&0>T^n:S,R6;<L|΍[Y/-?ɤՐ|̞Be޻)l[`ƛZu㓥6e6/W]jui4A *>ݰ5xE[VW.l'ݐ14a} 5]ԀtOL [`ǩyHj,3K,9_c_a(Gs>p>4u* sڛZCFP檎9rl8Ȕڭ(Wv{U,MR ۊxLѢXR\:ݔ!s:!ÝoWVЧ@17v!v&g ^9Soh,}f9!S$3>j=_T@Dx\':?#`#&{-β#e\ }Dey"P>!_z˩(-`cA E&MDL} nj϶8߾[P1iyĂ`ͫս!؋ϨᵭDNYLloCA[$N(ε+#g{ ZԚ@R4@hSh@b@2t:##/=wsL[Px~ *G^?qf1$=4NnD[x C-/ 'c0gT.idTP0|{QGE޾}Ոhe8I=1nB{-HGiܕܳ`!]|zdTh !96Gq Xǵׂ4>"nf@xND4,'qq@fS/DU ]5GІ | }LL8oԖk|S B]f/|򈤸8D+ N.8)7r0lvfh61@C3`L=9S[{ XnKļӗ$qm 2q܀k#^(鐺鍽9?ہg'R6cgr$\%0~}rD3#vujݧaPz( 1zѩ%KG*a{)B`?Ri04A1xpƵ*TTHyZ"Y'Ϗsy%zT;NVnZ!iZaHf:v {yT'jWp%5!&v䣴?uהޠ%.Y zxk[3,?Pqd' T\?pY1\-݋V!b%`0*x5xDy@7JUs.&‡,A$C7 tRMG.|Bx'|YiąDG]W(&"IJ OI ~֔;)fmPzv)cf]Gwv#pvj 3*fV3Y5Q˚Z2ԛ%f@6C/"WpJ+@Q0ǠaU)q_ĒǴtH0F'D!@QtVr2XCֹ$2d*iO8M;@t]Nj Z544쒸p+ɗDNv r#A<WEN).Q B H&%a/bʒdBG; OW5 U?ОZkBV$%=Y+R1Qs^iP_KxCvp2Aivs(Gǐ#1aaz9 !_Nw'aT\iIĥoާO>|HL8{+0WzǢܧsx>Ӕٽ0[rH,\ _VŬdhZW"mY:*ۿ+>KlrAl4Wۨ C<$}~~DJI$S_L MˮU솁M5˚_|B8Z ۰ӑS<^X'%F8b| 6LLzL=V:JA攕3>I7@@Ҁ6XHcXX{6W. 5C$IsKv,Gޞ2O$u{N3z[Ӟ}OI 1`7Z5~P~DծcGl^$MަrĬ 2[d0)\{/Qt~ wV2DchS(Vv $+/lbzpه٢ӹ2Z,&SdFBGɑJ~5Kb"֞f6X (׎XGD;;z\KJҷJ&Px?xONE ~?#rr.O/WH+9#dY< UJ1RF oBx ;cʂ}+-xk˱mlipטؒ,1h_/|܈̬laʌq7yUf{ߴE?8{gW!/g}~WgY۹:wegu8ÿ<Ͼ8vg>޹LJ/.<}O~Yqegۮ]^\|7<<x;.|wXc~?׿.OzV|}pyjB]ɳw(;e7 YvG.]ѕ'ŝª-_m_|J^|նgYϲ:v3]rK|u'>_\ز~6>SVfS,Cׅ2_]wO5ڭpK6~P2;{eSsmuͮ?"eVtXJowbpP0plv佋|2lU<Ҿ.}yMywwYӯpŲ|ec߿%N>{_mݜeE"!Rw?yx0>Lz{s_Atk_XVg}7Uh]s[uPfeQoB7X+?m]}USezޮ){m~ƕE.CVoڬ,}p߂▰Whr_nouڕ.$.ͷ/%HjloT;W 5Hg Ê_ mQAX&(^-[q_*'*+~f 3UWEvozy2x/27z=+$Nu * {0ʵA*NT-*Xl6~_<+#pF%C8v. S86v>ɜ4NR[V ʵ`^;rt݈K nǥLMg5WE v4D-_.?+;RŊOfqyXIhb #A~ |5DևϬ{}MqxY7P^,kr&&.Eo#xQD rФ'G /XwܚhU`)'7KAv/ϢkH =n&Vrxn<,o+;-^L5?.tQ$ptqUA_dEa)W V-ı+`+xoV~(vT;\x<œeAޒAsn<%D= O!,gx+ td_ξLhpoQ5e&O>x0_!&b"Ħ{,!dT EhE[u\QPBxo{uVh; U .Uۏ-䷁k{Y !₠sxN:8 c D$NF iɐEE( fA}p! !F!# ISЧ6fJm=B,=ev!NJ\䐑Uw:8"jVHiEbwpbRzZvBT #b1*J=Moa+Ʃ*#vЭəoQۯx8M1D(ҭ .IAN f?yM)g?Id\3X ~N}nnh`\B:Iz2ޭzNS"E0IH= xb0Q3WͼQwX_P\r'qZ-M?/ߺ%$ p:؊bX|њ _lj,@{@{ԗXؔ4oEz#(V=B_g\fno,tS&{.|f!ܬb"2EojAAMygV }U(Ǔbޅ="\-=c& P&8~W"z }8T(I c-C\+7q(K(ͼkjM_e ~ "nj %\_e1HR+Mt`*]CwwB ǂñL V?{_&|P{~sPÄ)9)x[^?3zp~I1Q,jWC6l[, :0|HA.s;o`Jd<Wcݼƅ/ gHYEDM츝ܤ膇棼A.gT_V2f]ݓg ݛ<;sAMR=P؉ʒ&Y;$RB>2FKUDĭ|kq}+sJj'e¦D:}|9!;y/ֺ sUARްk#Ca3m/!e|8,F~RL){Rb\q;i[!so V-՘"̠9+1eSe 7X嘵MuPYPK?Tf돕+ڵv^'^y%BaLݘM.p$)\Z{?U1jJffvv* Sfod"\1ؖ`Vm-WMblH!wҽoUf!LY%~Kٔ[p-75m])c%qu2@8 S!-C)4$p^yW%ÚI"J雏DbBAeWtgN㚗FJ-HRrXnc=~(9TGbC5\s:ğK~&v;9sL+gU5BCs0w¯Z)+P.= Qc.["J@5V%Zݠat7:brb+6ZS{L2 >,ݐ@ߗ!KEd%a5ZV-$m8TdXe'^ݯrF0n v*v-YZ2&ŧ\T2g݊ȁ&R1!Oʲ|%O`qKb,P)37" &>Ҙ۷8$VbC~ yJ[[.O#")7̏~MX{vC쨶[ϸdpx[DG8:7P[!b+OG>|Uk(r:`x: t5ƹ h$K#i<]DDJ5*!Sub/e]ݫj ( Z+M I_e0)9h u-3} v|!tw,@{Ja Vh1}iΩ-La': 0.htʱJC67TVT#LLE  ( {j@C(s0gk]YS<$Z9=10!շPm0_Wh%%g 'Z_TWYLtxm,БJ0~e=8e@ )j641 %?2DMI5.9Javt@v|9|%[9D> ݓJ7XقROi0_Xz,Ø܏1AbYX"tR$A/[_3<)KV }XQ7ZK /\3v'-L5=8XàMتh-Rmi(r ~{s x MMuuv[-F;cȾQ35I7ް x5~ Rvz 8ZL*¸+U՘? m RxlUmH8Ab;J?DSO >`|ɩ"/CG ;*hB@12"/ 7/gA^|lPBuH r.*]c B6kr+OwMf!^,݀ͯ-90XXPrEBD<Ӹ5}B&`Sppi3gԝC --):U*ʴ+^1m!0 e!a`JP6H%ҥGT/I@\9bvۜl2RO<3W3޼J xQ}37Z 1w y@PŻX7y->{nL \Lz^Y/&|uF l!vM4 6^BZ2/]ic.V n>9J]ct@ZXbϚW tKK.ggX#xjE4Ĕ?u;'+kM('NH ,{V@)%4~w=,_o'FDвF fz5VN2,x j_#[[7 -F<5$ckDM Ѵ9㫊aR7eM9!s)De?2N s*]9JNe=3R"0x^jf9sCTh %O x(}ޯ47ó/=I)';@Ϡ\!xoD{{3鵨%^,[RVvZQlz<1]82Uŋ@  ߪ'&V4_v(PEPT\+ Um<'90~J/usU}D\Gl9ce*[Cj)3D0njwQoaڣoD!܃3x(aɱqDѨν jvjoQ1YklH Y0_XǖZ_,>~zOb&6E2 K>1S(0S :2v7q"i) ߜ Е*Cۏ^߶2TKm {,e3y0Q $c{c̶z^t m>B{1n *X (^X2)-$!UEYzprR3~/k3Tiծ4Q* $ 9YMבd!, IMn/)Dh0s8 AI5:,’冕1'<~j"4Ia~aY bȡI_YY6wQ0.tnjP=ުrG֧v|bԥJ-foz+-`NwLށ;]l`2sZcd\SS2z"ַ.ط X'Pk<~ӷ+रq:kW6k8j}O}mJM:!e3RV)vNq$>mdrjTQP e-9#b#i{a0irȒ Gח+M{Y1]=reIY6bXn5͞ڋ†hX*nST$sTwDa #AF\rH:k M4 Hus|0kѭRq[ @jRYy]^ݲ高vWƞ]`s$h7@08ώL_QRMnHqEMh 67CM漘 BG0~33F=z eZ$ro^+ǘbQ*& !)d(/f VJגhܵęsm30L-j!>R`M82`dN̬?%dhj r"I=98r47و@I.REXd-Ӓ{R]QVS~%&Crc ̚'5+^"1Sm6i۠T(:3MjҌ>bM7/9w)c Iq[@Wq$]f@ERL  F ۸r$_sncpU^e77l7=8g[w#M0[܌K_oB>ԥ1{6&W}[=47Y6βo3 gCDW.\O6=+qTq~|aMMs?my#TNP.|p#sEmv xj_Be30P:^a@Oʢl'vFS12Yr?{dJ-"]͢yc(#8ͫn*o^JÀQsP".2# %/d|CI<3{-$9~զV-(ǁ,D*(J+X1NTxhSR,|M?RC^b9om L&׭Ք ?n')67 *lL(: K5`q o u7ens䥡WË)}9\ S.^l$>]`W6w%?L1P)ү(!FJ=Z 2.OS@so\|Zn3K  ㎣sLK5= 4u,ޒ/&tnݦh#& B?3`ܹ4cv:_-͗VÓgn1<~/Bt6=  oh0bӐ#z7L7i UYnfҽBj)60Z砆{"=S,{o]R./҆WЏԡ .}y :TU_Bb+8h88aU yk+Ǧ4YKǧ'>6(ui2bbw(W\u1LIr>v57\MkC=vay:^3߼f琁"κ\M9{rxɑ;XC~36px?|dMCۭ֢NDJ/#nmXg̙ѧ/՛*=9;vM;UF,+"uPAԐalQ)a@䔍9v7 XMϠ36Rc\[Rc+V3L7-浩~ i?䘇EyB8:ho#;4)x\z5PV1ŗ:DwD?sOa$6S"L_2 1ڵIXbjI]/U")9lRDvec[]9oc"*Fdm64Q̩ʞ%H WLR!TvN+ϧ>MM_(`be&9D޳`RҠ|::aeg)6z+أ^1Eߪ e>c(l8s[Mozו^TEoK/hW|;.4SI;7y@ZV5U˝.{w ^3ڵ[mqɋFAq1d<2 ɠV*?MVlksٌЈ|-JB)U6:r_ 0}[4N~}|{Cm6& ZS]Hre8?H[ ^tnC7RL{%?-ǎT5Db{q4#eq ߚ̦{/U69-km 6_ެVgtxwoAc`JԨۯOɇ^~U1YƱ$Ll|ӶXYIccڲ01X?Nw _ ?K XXNA vuHJսb:Z/#+۪t\+jH~M~/oA ;X||q8#Ȗm|B|ŁzT9*#JgUZ]*G8mZd4Z'mo &WVJJߩ 5 Fb3 ˆ|nqݼon|a1Ze cXb#g<{$Έ"]w:?}%xrǗۿ/uoԦfMPB!o,kXvq*޻jv]1+fPK5)d U/-tg҆7#_}̹WD1['3O zipB)R)ĕً6<_IJ s/%r9B) ǡ q}Q 2c_3)I}WZAӝvq 8wk԰d몓ǛE|lBUyCǸLz>,{G"d*ma3"]^޸) WAই:F(9k}dR^)uDz <o]|AvU?PKYB@ @.OEBPS/Text/Cap-8.htmZˮȑ?ja؍i]Fmz-0 #̪$$TjGܥZFOK月dU]II,2x8;_6\}ln?VlW׿۶!~;>2ho̍ѷĘ٦ŋ71Ͽ_ 7nz^ `{lO~֭[8[Jw[SŶwmwW)c͍_|]r/f _u1B,e+_; %Oob6ɭų~\^do\?re L|ݹdz?g ֯;vGشe؜.Wz)]_ Sra{jfgY&oof:oj3<'xn7W? =N2 NOxz]}x il; ,12bٟtbTE1/\.c5UVYL؍mL _f#XencYr΢mqs ાW`W?ϿRƕ~5^҈ f~_W>\֧q/0Yɚ]Xն.`hN[:&{b\ZEKS*Zɻ!reCo8]Wch|R2O׎̍8|П[c۽qfX/4^'!T!@5f-| *o!٫vC= 9wbl6<=OE/%N8"2.x3P<a.nwٮ!+Kr'Lȧocj薂KCo[ ilEZf3N"4A}Rkixf\HݾYUhiy:j#|pFӨҋeͣCw6l wإ^؝ U+[̌+.ux7[K6v0 H'?+{ AVk/ü-W|e[S-1  ȩ/Ggɪv-+wڀ[y~=? Y6>7,m(_30ӆ聉bOxmw&f-< zu`*7*lB廇p X0Fgw0VN maBaxvo!0kNOD녝 &ht dL ۊ5cGgsU͊s_nsj킭(!JB(P ݛ[{ KcXP;í5ĝOiPd C`c~ A+0rKOV%گ% q.^ݛ;' y,X֎GkA˸XJr]8B+(q}r8y|{"ynPESqȔN5X$T[|*\מwkVq@3ь* 2ϑ > Li|J8L$2F$oW└ACLvyͺ.Æ``i9[=>޻Bl? +T'fmy=c#0!]Z}{[m 2-អX㶢w^ q)@Qfjaڽz))Vub,p‘rtvU?f87Aֈ%.<ŵɨ M08lX萟!آWbғb^@5%2 쯠t`$`OX8WX(r`VBxe\-oN72HH.iltA2GfgUS:^#օ.a5}w )Q.xffRo8L\,V)bi0ZO$HkXt62}X2524=~+՟=l{M2Yu#Q&Tظ1ADW+deQ3L NCvo"}ؖS'!AO1>RI!QdP(KZXRD*,-IM. 3s(bKOHR`vhk E*&+u!Vp{r@ZXH(bg[f>IJ;|jclbd8QQ0Y2x)VMT7$#p3Nd6[jf,n_$"Ա䩁J'eS~MAV,[K #~PGj# ڇT@3ۣ [CQuc@SVȥ)I}xs?tne+Lv4WQR/z9$5 ޗ6{7elؽ`"I4""GAD$A Yr(I[N7&*XjtUҤ.LEI],m*K|奼\Y8>Om I.eI~2g@VdZPj/n΂W}pPKYB@p|J'{OEBPS/Text/Cap-9.htm}ݎGrCq.hPi^ezIi-ݕݝvس08/K ޭ/<ɉȬw-^TWeOd_d?|o*|v6O~vVtkJWvijG<ųbK/믾|R}rqO..zZU?q?8?yl7~y-ܿg/-6/}l~Cֻsa{WbyXUl\/h\-o|؞|҇?W/B/Ŷ/^wzߟh}x;y[_B-.~?>yɅvvn_k7d>֗_Uw ϟWkOn%Mv8{e\3ߴv*H;?Wnkw%WײUl/e5x>tnhw};6O>-~9E襃+~} |J~ϱlސ >XU]qLWy.?ױ]g?vuUO?;hJ^+|b$uv?M eќ-$ϡO_C~Azc=-= w< Uηw(*+uǷM!sNa+|%׺fQtAn}RV ['7t;ٱr+~QPEǷ]]bW};yjo\r[Ң4>,ѣJvnVNZKQcUyit/ju2a\Ul24^"vC!/mbQ1қ>?rj #0N+sxB!J1ǦX / eld2"iE֭XPrQWw\=$Nd vK/E]lGl\^>-sR#!@de2/VN0]-.N?xtw as,85&,'$~u|k&U5lDHSָM۹вjh׃I?rc1|sx'jXZ7lɽ4/ִ4V.rn&a^]ņ7%t(\*yA]+=#Ŵ˜91ɮ؝w.TL(Q V/Φa3Ry* cv޹JMTEuEh`d2'2"zhJ14Y{l@Net!-"hĬt[W^F_yPzNz۾΍ɛԅDMa7QaT oƎӶP >P 7E+hVLa[FƒS>«RtlsD?6A ^bS 4S2֢#0UtNC]|{ocBQb]<{-=D^jcReЧ`DeiT `)N B#QAM76 rڬ8А;ut3; ܊ldiV51İh+̑U1q)/vr[ Ⱦ5qI!K.6q3l/8  {; $P"Xe0,I?G1@uL]\: b-`=H&8U)JKy(؍B3Wӂ"Sh .F1m!xdodβt Br5;pF톩Azݗ?}U8[kJ6UǷ>5(`T@ 8t(Tr zcMiIi&O_[#ŏ.e3i6nUVtfSc4Z;ȀWnV :/R iQLBd>-^ưo9:{UhC3{yend "A'^>rį`W^Ujm J2iɶ]z9Jgd5dͰR5 +KڕfjBbsT80O4K{h`1TZpW*Q4r,|XY$AQ5bk5k >nWQ!0XhmGm+HDvL6D/P0)`Kf"&U5B,j&-6:Cc 2PmL0h4EE\Ӵ.&B:ch W\oAaupg 2 6w̝: [1J+fc^]6V𴱙_mM."]&O1[!y-w@0[?.G䇡q IO6  7a P/An\mQl K.h8ǀF[e^YW ͚/),PL2Z]$]Dtu:,,^ _]r64qJ,X+M9@\z,hJT/8VZz8Ư4tm !J+~DM/Nt%Kl/ Ή.#OӮD̠Зu:c{`1CUx! L~3o'&2Eb!H?EԜȹG#j^eYM!8JeLpPQ,Ktb\Q[OLC`ko/c/0a֞iO|x1'E0r'nb2KڄٝdYe#Pu?]zpW*eQ Ԑ>u"a`h­%],,zB·ct.01}rL4.+%㙌gn@,ƥ"4 h ~#pfuIBs7oCY'hMVEWЍ-ܝmó"vh] U!m"s]fMϥMIwDR[؂8BNcMZS1bыe-]x[.`#ʝXdcTAT$W޶p;I[$ȮCA8ɐ tKOojX j"?LM&*0t 9m0`GW&n#>CSx:řD%1 |&פ] 08vЯ@ܗò "/KkjKQ͇/[ME!>@yq̳yXlז F&gZ% N5ɭ"w[|4/Ah0忙;3A!t~+^cۦ5bnń@Sy13q)o!RÞ<"43Oeh dn^xpj^;~v(6PK27RR$<7"ބFAsH<60J]nwrch>LcD?O/<ײI d(,P5h&eULz vैwjmdQ'Rd#|@xv:IuMǷuAgL{O@2m h, @ޗs[W=G,ꛯ&2HPz<4a .J G^';aMm PP\t-"g!ND`t@%PipUfٕK@TgEjǤϳ~ .C7Nr rַC@pfol.p˻@$ȝZQMӿXcK2!4Xd6{Knjd`~~OelXK7nL$ѿh}4Ep IiEWW3.h7 zSDRpSzsIsiC1ٷMwdJ;T魖1e9Y ٻ#E}XrxO*RQjDCw9g+W?ҜHkϘ$1s˸R-:TLb_mOAN=?gײ_;U"*9%3D88ĪM3Fn :.!<dzOuKJNYYZQNfy|v29wv_$k""qOƋ|F5δ SnV>U8a0H0 V oN^,ffH9MI|QnټMɤ܎FpKK3k~CQ#\l[\4.ㄈEqk#N@ηJFTN2 U/\d$g 2Ds#k"+u>64^IᤗsǏǢ_iU)^ni7]$T+MRtRc'bW"1oNJx |İQ2Q'o gls¸Fq}EMIm244·'\GJaD:/VNKݾ"-DB^V񅥓N1v$˥\g?Y1:Dq%e cyp0E FVJTZJ}<'"ʙ^5@O40yHLtkgIÑ42(G&K> K&>ZC`/$VJA^chQ:F͓+Ic nU/+7\~ͪdel~b!A'5ʹ 7tjLMNH$Oa/uR|T 0Tf;_]M9R7g| cS `=91ݨ|va gꌨ&7mxeD[onq~"]յb e4Z23zn|B x :Ӝ+,ֻ8Z8R4˰šoePaVWϱi]IR-tyj}Ûʡ 7tBFoH{pzF9Әhx#% mgXep<X-7\V5Ki6>Oó ͚dLo#?/7a5Obw%XIL |7qmwe[yO6۾x, P*V1.ĩ~o@?yq5CRc@NkkQUV`g`PaU9 d䑫rǻr#1=۪jm<LǑFј `#͍`FGLWx2p pd,czݽ\:biѬKRHI,K.:=P7PTҀ*c!A.=}095MEJ1H_tQ|Lq0+A_Aêg`5lѐxϼߒEF/UL*!l( h.Io'o110Ni3b'9\p"B`a>'EJ2C&s%:~:[`Q^wBG%e5,E,E%F@ !gqk1؃6t[| aħ+BS9 0eN ^( =W|eh 1͝6a cp+] A9 Wkσv+?ϩ"Uq2$GF-1RkC{B[͘:ʎ~v\%;f1U)¢|i j%4a@p\$Z%q'ͯ[&)3֬dR~a׊2n ]0$ Z9)2p'{ߔ RZStRx>)$`ksyjo3u%MX)Jeڷ'ޭnlPw7zWYZΚHLJڮe=9ܳ6"kI']֎gH'7Sjw4~rP+baM;ǩ0V5e@IѨ:M f@Zcn1 |ȟ8ب<|k@dē6e3KX$Q1 duؕhzNz鱐YܸV`2[ReVj=\1hLw t7Ggw]ܘNZ#Z;:]{ "/9nST6ڹezBUd+X5=;ď\4%j"kmyǠ>,LcMٻ|r|;g;kn4ZhYsȼ1ln? { 껨|鉰LznQ;燑i&г<7ԏ2Dt即%XNLgEtw&57>.'ujXKp3 Yތ}C?OohVq; m/~u~?Z*FV6gъum 5|/sql;?Nsҏ21ZKsyGDh'vAh*j ~R&ʅL_Yaz{e$%߳ZS=@=I^7 Njů>Ϥ?_X? 7yČnXkfߤ̋&YճA8Q~Cmx:`fbuQSG[ʩ8KFEV&ƷY_%=ABXJ{ie #2 i-^&QW:BDVic+mG?qWA+u7YNѼ<+ȦLm{>8{+Zs1p#ej1zYG'gKT EBu)=k,J@_1x'Њp0c=f;ʳFۄXOdurtm'6 kQR]_ `RڝhFpۡTSXi޽$Q::(j/13HpTIdUvLP=\.0΢L3Eϗe0Vl7퍢<WOYԣ")ʕ*v@75/I*\zT^P? }:e_fT!Ꜭ8}KŦ:k=>kz9H0q%lEpZ(GYhX47jQ?z-web%ݧ'Gi BXÂ!r4Y4+j"ⴠRR?aQ͍,`9U^!ٵEl^nD 9"vnU"\/:h0ToPKYB@znOEBPS/Text/Cubierta2.htmTn0G|L$n:mJ;M[ABMƚcGL< </ƉnkMw~s{vYH $ [Jt*ԼO]<%`S)Z>Q<ܿM?އ!/G@J(O0tB seLb;6s:=BU1+9L]J0 X_GN{9g+chr}r"& 3!7<}D@;!@}jDqI>sH:ZR3 $ R9.L%`%,1㗎zZyM#voh<?nӺ%sPL;vÖJ]._yS 2 dmmȈ3#0k]?ጘS낭Ǟ+YjLBXxzc+M)kv\ .p-8o{J-%[V:9뮗`* napr#͊/<hw'hu;Aިеjb/ũko<񑧼Z`f8; X+SW[ +sCgM׏ǖL̀~zUwtӧATJkEq%$Y Literanda


Nuestras novedades
en tu mail

Joomla Extensions powered by Joobi

¿Quieres enviarnos
tu libro?


leer más
  • Facebook Page: 145424512237467
  • FeedBurner: LibreriaLiteranda
  • Google+: 103912098042437931438
  • Linked In: pub/andrés-alonso-weber/5/bb7/150
  • Twitter: @literanda
Back

Login

Registro/Login


JTouch Mobile Extension for Joomla! 2.5 (c) 2011 - 2013 Griddy Designs, LLC
zip4j-2.9.1/src/test/resources/test-archives/entry_with_checksum_mismatch.zip000066400000000000000000000006171414265447200276300ustar00rootroot00000000000000PKUDO6 sample_text1.txt51rC1D{bǵǧH9AaF?(?鄀e?lJ ŪM,uP/a *:t;j6\hf.mv֢%#R⇴ѽ#Otm̒ЅngK&uD=K_I9 4ғ_%)\3ɑU;)ҋ O1򜤝L YKZ? ]ѷ! Yļ2\bcLL91L1i)nRyڹa,۬niX\]ϧPKUDO6 sample_text1.txtPK>;zip4j-2.9.1/src/test/resources/test-archives/invalid_extra_data_record.zip000066400000000000000000005114101414265447200270430ustar00rootroot00000000000000PK3c{hN8, domain (copy).csvAEc٠(f:xxZ8L: ib|ISvx%Y7=S}oPK!N short/PK3cZM? short/212T23VBI5FRQeB6QT1NP8S9HIFG41CQP98U1M0B1JUVP0ND0TK9E.XMLAEKحG7FIQ¢SwMl3~n+ڹe4_ZK_ohw{y!RqeioH+` )\1 Ō f1@l_OJe:)BObj{8c{I?!HB20<[׈Fs2^=_%X,h]bH$ i*SEK}Y-.x@I|ܾ%WZ_2HWhy&6l3י V0vEzƩd1evNfCwPa,0xSrrɓ&'HJ=~sť=Z9mz,UL=2ŬK˄Yn}jm|' xN. ∩P" [{a vL`YxUB'Ri.W?̷'?UV,^3E]X?|{@M'pQAdoR~,*\X?Dm++UlwfũZnoq`0x[ פ ?K22\%&6 񧊞HAL&e31=ZYȊM릗c|8㉫,"hܓJU5$y.eO Z?}LFWH#R}B~F{9K 1>NػvPK3cZM]EEB short/212T23VBI5FRQeB6QT1NP8S9HIFG41CQP98U1M0B1JUVP0ND0TK9E.zBlob2AE5=`e%)-$O^Q eAfTOuQq~N0^k͔jPA1[^5i{\Fg'$ 0#1Do3'K.BV_*@{n[i|^bQ4U dVC̽пos5+ͻOԂ^6N\51 vOi+ADlZȞFM p2bS)^2B/Bee`t{~•W|OQ"J]u z]&QKCX[eB˭|)T8lΤ )+B(7 'K]rF7 He+\QÈ[ PP ~V}C v /rCL?dHy_✒[s(9|P`U3 #xZ_-\K\% ra-@^ug/{D3Jpa{j.* \0臶a/ eIC6"%v7}Rqo $5bZ` l#3+(zD=v`L+J;CKSӡ=+l5rs((Z| -F$<6 RHV濛s[tzcًY놱N(#-y5PݱtZ4ey͎Bh[GhaG®r+ Bv/v}98 ' ؙ,7u4GEb5Zrǃ"6FE2_"˗BfМRt5?pݩ ;_6~sZ9P8x(|_V4]==ݺx"_j㛭y B bk S'W8A֤ .7t_j|`Y 4wGw3#%žL !ok3= ,rڗ_\+QKWmi ^<.5,UJPB3I][ռ4w_z=0D90:J?B9V OT [L?KȁTP6b#R\yYˣp`« 8CME!}R󝎮]v$*5q]5[0^el1:4S>hBnOߓ-=:^:/ykGmq&,C\Ql7Idkx b3m/s2-3 ^.xnŢ]Alrc45tȖ #l|/Qe֕\G *=CeҏHْMSz}LG>A; 4zBOLz${C[ fq>&sQegfqRuW+'J\W"`Q_ŃK(,ZNӔ|uE8|G&ȇtC)@=35 fN*c+60‰Y'm}\xŞ|vRjNH6FFZJt3p^zFh=Tw1sӈC0$Ts4ʼnՅT,fJP@so(?Oӕ%/U+yP ߄F{b_x`;x}'Ƌ8?a$")Q`y\Sn(-yYO >ȳ^{I{S$D'Rqk#,X A*l~AIfKR}q-tUgI]7'-K/`#AYB5TT5nz4; .>ML\U˂DO4c-;l,^U^6nȚדq8{kN8P 1rԟÊuU A 㜱c})ITu4Hh"eyfa`iPlCQhzj#9/U:CJKG b[DV~ d\K :jL,6;xw)Sixf/L')L$ж[9}{ysY:=Zi!B9o+y,YrAz'ʎ)&Qn QdT+ٌ"x&RmSAM^>$ U`>=XӺlg;G[ B $T ke締f"a_ղ+v̋o1əTM%"ώH9b*՟Vq{c.#9 ܕYOU(P!k55+sqTSan{﬚uN <'˒Qswc4o:˜Sk#' W,CD =sM]ǷJYa@SbFǦkBUe_N|S]R1xA_R: $3BX?;̆blv,H%)yڮ7{{mO=IM^.7w}?2$5%& !F0jNGe\GNXL"3pPY0oH]v%=.љ\ ۭ >l'>J $*,G-=v(hÈ@cf0UUD֌mfY9r: 3I0ztZ|sd"67R c,X/;0 [8BvY?&ρJȔKfQEr6 ޏcOᘞt8/6^̖fOHSߦ7G6?@BHy.;gfT?'[z$4r1s `-w]JzBA㲌/FP<~ylo^M9p2g6 ,-0٪a="଄j<T f "_4.3mŝi"XvPl W kloU@r% /DZJ$J@mu1iP+[ G  ~A1!-؎Q Jy C`6D"p–g$w_wь _ ÷n\/(բ C 8o8α{ [O $olBQob3U䘢:1#pxCD fY Ֆn;0w-a.-Y2(#OK;</PL9};5.KZa^<ɘq:cߗZT'd2 U;Mo]yݥ:-Ai1~`0P-&VMJ>jv&mEϪ9+ѳ>"p֘H;jIQ%wJ3|Sdq؄'8ᒬ:^򢏙_.x2#׾Y57$YΙR2[ s؋zlQ .tJ(`2<-cQ#FfaS"!bDx j9&c[B]T(|q/}=? 5047*ӝ(h޶^5yv cВ!0Q W6!uWW\us:䣰<0B#FҲd&}w\*[nɤQOs;4u".Z T Jم~ݙx =0-IjBJDԔԪ iw7!XY$b*H_fxM$7vJUѼSz#TBKDp%Ew# |2_ ==N/ZF"igxRgLV=I_Ӯ;jM";z \l(Sr4tEA# _ɗoGfW%cnRUi镓C-k1])~',qk}'[Sr "E“ERn{nolfȌ#.[NP࿩f7 6΄r78ŅDyl8g*TE”d㺒?t}7ajPaZY .-BVx<8Ֆ3ܞ062#+EGHigŁЅ(mV GCP S\)TgFnu lف;f]&f*D?^2/ݽ#TN17c+k9j{]l7yQoC,|I"&ϔ"qj5}f5q$@wmuP\=N$ۯЀm Q!R)> )S=vyxKҶpF.[uĉ>r0A}Wm:J &Nh킋 <"+)z[Ap0okM١D9@<[_4!QAD!ŸR\1mL9933=kX/i<55l̰S+t!]^=U)yoc/>Pr0yhXcл%k̜b%1{YNBarj} ,T%K\xiS'fgس BSԏBlUoa!UFI>@j6$fa9PֶKH1H{h>ҴYpQ0- _y&?#}XߗGSA(罘͎N% n̐./qgC]~$dFqtyP`;2&5 N?4 O2%3(DDF˧mx^r?I4+ 3{XDa呌EG,d+6ȏVlIn2[l[5kGK8 _Q{{.C?6IX蔡I&591 Z捽qIĽ樤UIޖV9i(DY )$MɊwf0+=CZ &ALLԬ-:!2{W7ah lb|s} 2Gnk}!Ua3EA!ru Ĝt^yD5 -&>L)38MUTՃ_X 1{`p ϲ;DO%VU(5&@C`U[bck'y4L#ho s!̎pH_ΩSu??tΩ"dt0V) b6ZC"wKA'vr %%WVZnk 񰼖- ]Iѥ؁n!R>}Vhb3* ZL Y5hEĉf'.`c $E؄ fQZDO@O^L-#篳sqM:3xe(TKdLk {Q|eyMJ Z <D<'gj5N474ޑuJf'|n<l.ᒇp^iBp-;4Xf1v*dU|mW6̸l)XJ=Nt1K]0XG:a0'(4(+ C@/); B$!O$ֹ=%R|̕\`%4 a{^(KyI@a|K>:&cfMVT.kf+yn(z!"JzqO l5~\}'d2$'d̰|voTy1!Ac+ )t~ ʷp; /AG\Vz*q7 26+[ʴ $@쪜rhW6`( +UR8ܬu1Apd඲j4Mۦ'mJQ%'Cv4̷bj6?g,RY;+ո>sL S6lE(Dp&/)w)w8︶-zhc_5-{PEB}g}-.~*̇A_Qn+-#W`j|2iʒEܡ"3At+O|&yF{OMD ?8G`"P kaL ms,n^&Ny|,f~{QExQ!+{0B#ɝ8^3)Alcο$M, ò{׸QL"q\@-c`Ly r4v}}0W8YT)s= v|~ch Wms?@㴒K~O752- d\K:= Rh烣 11 }1r m$QV۱Bo{8"\H%֔#kN>)DZ#D5M9,B<־IL{TD7B(|}gg7!7n̞"=_TlH+:E;>Z.zqN)j>3(P>tQ$2s<:vIDm[e<;gIh 鼇OFOտ`_=ݕ|P "#-B٥Hho h@+W <{ I+IE{[9JQQOg*6tֳ&fKؓ-w˓L: 6j P$JK T(A"r'鎞EZl`-u|/NM?EׇYoMԾJu(`85c{ lĬ{Ifޘ"c۠3u99S3! Jq$Õ@b50ȴnӥ?D Υ~ٱz㔃q 4aGO(1Bc$l_w|KSbb^c r>vcd)2EpѬQh\F3E(l %8I/˱?x!B1ȝ:U٪ vXb5G1 Y+G4QXҪp\FY ܆5}-F?T3&Xb"^. ѳ e5e ʷ<Гۤ3 u4XFq9todϕE;VLB܎_)2Vэ[GDJx lo%Â0|SʪgjqjgfATX/l"Pa'|{E#d"ϻ[$# n(Υ Ǹ aiS0}b$?z"sm~=->^Xf+x^2/&N&zoH T9o\ ZڈTdg;/ju}'nuJ?]Lէ%qc3S4M6dܙT1n'q9)pTDZ|d{$RcCEiƸΈD}4NON( beٿ2v q[^>_O@R3Cu7j\f4 #Fx\KӌnfG-:5vd$uc' DjeG5Jn5CyXqy{i:J<0sQ`GZ8` ZRz(YʭC%4a5'J+f8d>̓B?,` ;<p{ړm_ktIE[E:WrNPotʹt&q5*'v1b93=rN3QJ^jewҦ||F9ttbnw%eiKvؼ&jL2i&ROvRg#k"/ö-#ϚUUg̦)py8fBn* JT0eE8 z"೏g~MxDK:jt(sCc.9Kϊn _$|ڊ}<+A4ez$(Aa%s k]S%ts~̨=s"y`iC gl/L.j5&={f ,pq^6 z ݿ$p'ԂΝ\@EhpjPW\0t6^pc :cP+500cyzpkSRܵDFG0tKl:8,fzy3'́C]x(#¢k tGAf;5JLt^}CGI;ʹ_M^ŪS1v6z L8!HBDij9\}rxTq!CH%@7Ht7F#^JNuGx#Uݽ'mMfˣm7qł.Ỳxt-!q9C;oc HjRaҼ!?KT5EVAʣ2% F/ʼn3^:Dk(YH|Y#/!T_'[ܐ(jj* 8EI"" ռ(4ȫM쪛Ā~H-; C T|Qԭ a`ctʈHz3&3a׳y*_ŧY񉧶RN[11WxT,D# Y$U4w-ԛ` ⛭iu|l-_ y`|5&st%2Uܼ6o?䠵8yH0!c>6 h}Ōc썏VI"oU"(UA+f|Z ,+j9s~ k0S!Ƞ, M 8րǷ9BRƻPss^ϛ#Ļ0H|нؠŅ!/g~6+IDja$qSBos{XuIR͛)u5N }"8ջFm5;J3k"N&f{ǿnfR4X"1}wzkV S@#PM豠cC:)r0FXOQ3O,:`y* T|P""> Qmx=uF.՝"d͜#Yl/zBb&' z\Ū́[Hc-?rcڼ!Ѡ ɃSZj6H^Eȗm|ܧtF]0 :MQU`FQ,D"y>{?FRWqEWxc@%D'g{ sVQ%mjmPR2T2xAIheMK_dRz 8`XV9v!>qEߤ=p఑o/U6F7qSD@ \WՉs A[8OZF^+4)}XN;=HBfw yb rXs?OZiOF(z5] ld0}5`楙`s[.z!N(r!r}='tqH|y9)UZHˆr'N{z7?G$$X7-L榛WRD ڇ֑A.&sϝ}chp\q DTQ/`?;I`ӛAmR$1 j|zU3D+7u_8gMᓶ޺Eo+Jdz~q6B-?w?t"oYj6b> x=d^g̙RǡZKY+,v7p$g4fg&=dg=g]Ыb4ǯ7W7g/l0e5E\7 fK3׍I*V ]I\.+Ջb`J[n}KF r57v* $yb6 Èho+Ϯ"D+l ?[OGsˆnl` x&A;VE[ijc>2) Ɔ\ZOw7;\yP Ubh'C.04Pn%Ǥre$dXq4^$-!`eq.,ta~Rlw.` \xףsZ!%uسX')?鷴 x9diWkNRKn$zhH6- D0?@7C;SLFRv,4h{ p*_IhRLwL@V,FtCDt!P B?KY5.ܶBF?pj\5Nٟ7O%V$C?uŻLRJcOX+#&h.4J6J:S˃\*}HPK3cZM? short/2IACI982ENEVCeEQ8KHEL9854MSG41CQP96L1K092I6GLSS6I7004.XMLAE=0<M^M g|$*~7Ff<q+1i~s뮣_@Jdđ fWϜ!}6. QZk )w'"y3ANF.3UbCZAGh}\8믌'=XXJ*ɛ>&EL g^6fM˜K;qy9,cŻbebp wҏ$Xd0u}''=%w IoA])ơk@%!3}-l _r1SteFIl ott1rOx"wޫN~H?dmShX0'02`WtR/Do5 YK{-o]?@14!DX.G` LYJbxiQuG`J_g8+/2&?ǡRiւk5α?,RË䋮BJ_*vl˱bl'ؾ& Oonԟþkp܋lrujbS!o]Ed`bg /c$?ZԙJllLRZ!QӀD -^gXJ!m.YbڐͤŘ=0IJ@~->@uiw*{?y9PW6@Xԝ%<~FUMf(&RaVRb{]$߸y?.. mojaϲȳ6Qt,x0׵fh'7^H+ m*$Y2[uhvlpE>/Z[ :I$زckx Z5j 3noigI\Rl}ϵ3d I|-Y@`U.p _lUv]TFfKoa;<`<&w6s>W QY9OYMJXu㐇0;z5܅DRr?s'ay{_;G{Xtcz4#h, -v%ۍj&?OVI*2(t_!e;˯xq5؋CS2ZU"WÀdeok}m2 .gv uzBq!Jnl)&w=Czv“%P}ANƿ at*0|r1]: XbʘL5`aݴiWǿEBr{< y&&nWbeY1P^\@*_>=6Ii _v*ef7Ś뿖:5}d<R;I!1g7s]ğ.AB(B V*;U6m2Lm:G+ {oqbhH- DF 9QAkG?yg,o? !INmP7]ٌuYuxDc%;LG-JLvv3谒B2ꟃRdUT+TF;@BCl%[F9MS?BLcģ~+atV y-b/mՔD#8D۝Q>=+s ]=;'=ӈ,5d\y^ћE8Y盏JZ'i˜$8lp$ZZ B؞S|7,塁.Y69z8hUBeIb4[䛵oyJwo<Щ ahW [`ec:IrtN93{X 00BОyGXt3~dOqfooUCdAcq `f|89hP`uQ5:) { )4f3ų#NDAHq,ӈe ,jxi^gπ)f*DYbBƁvOdf#)?0Nt?9`}J{wEbB7Ac#b=n%;`abhnYMHi8yT̽WLO#r3n48 hQ )gѲȴ.'XLk ]`_2ClBtJLTßOojTZh\cOyb~ 1'hwW\bR PXf`2Y *S6feɘv4Hlݗ$"K`iȎB>Uբ+V.BKgSu!y3+K ۬+lM:#vQEz`#ɛYN$>G=95GWSʇg+{bއJ[yfz:n w hPiemG} C>"Z ?'{E~s}6DPM9 7wg<03Bl7NUz (7]ӍCeo@S4&>XwUΈ9nSQZIaq,PDAOp2 ~%J>ފ;8}:bȝ#Q0=T t/ވ=fN'o.c+Kc܆9`wc]l:8!иt$ca4jb?r-]2Ctv[% g#S uI?ح"tO(e("϶nrn8 O&:<.9T;BY&آpIz UaO!߸هʜ:Gj46MIR>mmBw 7iq`)gIe$:^rLB9_'}[ WeNhbA:K6>3}8\@Jz)] SWvK݆xS(Ɏ tqG}1)c*F Wk|YWH-o Tm, x^zLq3?eFYo3\彖I ZCl6*Ưyqvkg1)# G)ʄK ~M-44_4c~:qp)Je.cyT<+peQ.hUa};".@>@ Dc^5^Ϭۈ=&v b9(IVR%:6t[SMC,Y_>ԡj}5\+*GJKrԮ" XdDsЋѝ]E@EjI`lIm_||mƁщ`8^%S EB/)Y  7@QQ"śEb,AXA<J~rRM½vm'"e~@9Li= U F5R+PO,Cb T4m? aלIηZ K Q.fCYC}|2Gj>@4QVjP#٢N@R;/3qRglx5 ͷ6: n;[˙U?/ vi j+>zr%)]eNڀb#"dh^T3^ӧ2ԇB@ [ѮCm<# F55BJmWͥQ&46D = \Χ2b۰el@O,*<'Y$ꔄ&^DF3rjɑe)q*yJ u|z^hu=(X/{MQ+ĩqTDYsh$Xl b%tr*tGf|o{= juR5@(Ií!{ʛIGBF'J㫈@ 3¯>>V!Ұ{H/r/sk'muQe믗w䏸\IÀ֛T0ˌ+x% )?#gu1iy1tezK'K]SJ}q%[>k)Kdڼɋz%˩NW1cil.(F)/3K*NQ_AXa*㗜/hV(Q/[WQtvh>e-`MeởNx0A <q%ǍՇmdZ )_FӖ͋7`s@>{ߓ bo7yoa6@3@%^|mC;Idkyog\1fڿՓywbEr^+. t*BnXSDy$3 &\RI|Jmyf vç^E~s@q˱ زhlIzJ>CCN/r\!: Pɽ /QmrXzQg`v83Üo`Kxa\c`o3!ί^?g?7&%Alnok~@p*~KIwWd uX/^A ~9z=x"`] 2wAB\\PWIVR uB9B]WSz= )IpoP"npRGyf-IR j2բąQr泠da8aq0[OHGC@:ILRa)Cn,>ur܈:n۠vR1sq|Xн ,8\T D>Gr(0'`j%N":"K-'[#h_\ ۺg+Bn ߓV.k.9Or|"X}PND;|)Te;v㰑k(vh][țgj+F:LQ30?.ꉫ_(Df9;G|S Ѳ*G,nEr@ɦ:Qk4Nh" o߹ A^yBz. s7}}蟯b0l#Q+;֠+3HX!ʯPl8}5)ho8%ѧ4r{.bSXO(d;#RųwQκGKFzx3w>01`+%YmWi # C[/$F-|kIQOH&B*yWW(ʏ@f4qXUTu*T\adiPSK]a$ӗ@SZq^:3G&᪠37LԌYg~2<}/1'^;m mZ=^*Qm yKA5lP55BAOD|bdy9aԽ +t)UAtqO_pDU8)&Wip$w9wpTxeZy+:#퇌;NMgrvB]mxZx4A͕!~f4 'x|}PVLTn̈UX8N~Gs UW[0D̮<4mmn$er& }AZ= M*MJc#D7Si{BM>D07Me'! (K櫘BEa_`~ g(j =^H\bi?ucw6@ˈ˃)JEieO C .O%ka0}y|%E؋p=, s5 +y Ciѝ в5)n뾝%d3j=פ=0X_ RY@T1QgCq<)Eڿ{Dn2:FG9B?:k`+$gp 9h2Na1V+-/Q"p ,NΦ+)NJN.~1mk9%BE =q$`q 2T<]bN dkr-*, >:XS:7aGSnx5@`L1HE]=-P&9Io$$hJx($21QGfxW.#7WaAˋ[>6[P-7J:\R) XQWa3}WšvIښ[CLrA԰BR[jOr[26NN2#mb6@D} 3pӛ:`J0do%1d_gZwE$%G4b+,:u?%W&ʁaJF!`ݭc!RRZcU7Dύ0*N=d\戌 5 Sث=-su޿ubl3cZILH} v@ciڽ%>!ʇ?пwssUb&ŵS?[x,y7,9ogE9]c= 0q$p+hJ3Jzܤ5JY)K+C|lzH? ;,TwZX R'EՕG*EDI˜rNj)5~y̽(tȪIqFX'G5TQv(3x/WnJa!˕rXT]C\Z:b<=tHY 1.fvvt1ue,SUy2'';*,} 'SЃ̞x,{]@{|[xAIԳ#nN$];>*M_zȌm .y oCβz"73%'QfH/)A%4RS`eCWbCdMfB(~xm7 5PFqަZv\2=/O3wiFnב-RM9ȭZjQkjQR'?8)$_%EœFX+tj4| y"taKwk3^JЪdJ_֫,-qTx#&e/ncD kF4[e'?| D$g['|#: PB+?)gJ??}.4HS,A^c-K^ h nQW.0",PUT{sNM̤si6m 0:;❬<&yqzRFѥ>  /q{KƲ?VOM>!'&a}/t'R">PaJW}לjt$ 7ABZsEb Nmfw868UG22흇yPeE C\7c{֩$ r) {m+8ϖGQ0-,نr`⽨M]c2hx<Vm9tuzT֔Rݡ`tdL)zaъ@@k91iw;kp6ǡ$h5MquWq,B*΢u^QO3j_-@3:Ys'mo=tqdyUMlmǓv?(3JcOU.4({rTKe֚t3m|NRPdAÿ]5.^|Q; 7C-;is5@S-t8@/݅mPQ&b\^-՛p!N}^ .y F-K )wN^\_*>Ag_ 4*vߡ:!OfX4Ӷr .1kS5#)l]d˧8.JǫS /9<~j:㗑fw'b!C\[#rnKuhr '8󥪮bTD6؏EVƤ'ԯ^9;c!ɎG9ȫMb;\FT|E15U f.!m)8iR7:$\KX:L>6wү5SO4˿Ng)ъ{ Omry9^zŦzĠElN;NA[Sy3<rXџ_& $ɪ6N PdH 6k ^Fs?:<;ِ)鏦O-~Fr@ /dd]#>kI'"j掯ɣ '|""}[yo{~(~8FkVP'rg?ޤɢ+ߍ;ږU !z'F^?_֭]8~Oj4` ~"tŻIۖBDq( n%"@RHDs}㇁(+tOJAh i!6[Q5/:E JuزNj{Oa^u,05BHIxګu[f-[9Tl4eU 3rq"꿓_C~a;zF;#n.4iME?2,&-2?pE 8;D-ɁS ό,v߅K뤎/RSEu2=;M#3q"hdX?Z*HNq(LT٦zX":ՆI9Jв0f?(칤#FQAaƛ ȃ?AE!`,vEGe*R֎Hoq M y1EMzoJv}9(nz܊1,]+*r&~zo"H,QZ_ 8~yf##f!xfmp͜J~roTcq1!jvÚW.tNר>6&]f؜ZQ5w7+<&6]nm E M:(n@f0:.={-KbG]_z #*B=q62ӿ?+3FG5mT`Nv̢^ f?x+>c4#h0`ED!؃)#Ljt 䭱n/Rv%af/-rUY>4E8,NoejЛq`?$Dtf鲙SAtD` WD} 8 `("a&z:v_jD<|/co'ǻ*-Q-gb#uX #/zus6gH- PRoyrE7vSs:! ReT))EqV1Ț15ƍE Vp>ոcֳlwwo=eU0WA"iA- 9y>DDyvsLP&}bI53%,aSs^+csh>u whqdž=/vqtlt@.!J5M';%qU;Uy+1acԃUtY{`Q7L*.&)H4y+lq~'?Gh }c,m霷O=y:*Au1UV@ߣjۙn{ Ve[飃v$@Llo(xmV::0C/E 1/ [;@ǤTJK0;<)QUmm(O- J!f;2D?Qt-?YJav"$ OW<2/Q$1S%h rGڝ(fkHzI `ƅ>!jJ3t:'yXIͣ+P$''`\Jh@Jm㡓h{)μ6>X@{5D3C3Ք= :*+^n#)C*BZ1B8 FCI}}Ijή~VݔM3,eҚA~x)߰LrSt z(~}CCe:S P U }1*LLBj+L#)`XY&nXi8j@"_TbKM=U(P$.`Th\wt|.%| vnlDxZm6)m`o"l hx9Ȏe|O"ꔺ_/uO l1qy= fZx>p09(й]x$A`Y ssGrД>wWIѺfv]pBa iJy PcLM7RG2 K8- -`^} XAʰcbFqvT׭,bG_AmS15wxYF'\;"tXvmuB=8F2DUfQ kGVmz^=\9 S= z2w.C%>}8CZfzffzdXɋ3 ]dd he%" = `]jO!N֏=F5єAؼr U%ttHhuQKSeaAp-~bv&P~79 ҿC\Lljxny] 'Ckbiu$Hγ>_\.?fdTYch~R9Ŵ]|Ƨ%943_fMs)G$:'bsMv&W\t͵Q;$ %@L ^cWGja4޼4 T%s׵lMY[iQ~|dvY_z|ܦcyi .gG^FA ]PH;t*|2/@XM>xDh1pW; s#3)pnKw#* vzibzrҾM>-hSљ[><(7 -[Ś~>؍4V혭XxC+^IR|%W]݁}~Ԝ b.@|OΉ/{6yncܞϙ~3S/Tؘ*DR.ܤdm NMQ6\oy?ci[M393شoOD1_~>=1l!o%Lp԰%^ʉaow&ixh8AbZkM[e8Asyvi lŦͳi,(oÌwl7MS/7F. Mb- 3a5 7"J)&XxaH--h Tnx/D T#yK0"07Pho|Glϥ v[5+@duO`dX)ݯ1:QD^-g"iSIXGWoEc];x6"CR0Q3ND6-m M~hPzWL2uKhMO_AmpYYb]'M_C]5l$0~_ ob[e݀`p3ܢCiMi֒]0VA܎$y/bR{pj{i%n3wɭoP4`PfҊ0"{cr ͉A?WLv}F\+wwCt$ h]l܇V>,X02Oxo#%|D a[q,z6*KR| muǀ}}n@(5<7)u˜=pO `YKxPK3cZM? short/3FHQEAGIMBBE1e4QLHFJ52VRCR5G41CQP94C1I0K6S8ODGA0UAHKP.XMLAE'R>6:F)=$O Z#j)زy:Dn AJ^Sm W({qOs1m|;^{K34,~[HN{8(Yר #a=tMң)CӲU!)6} %IB`dfqTւ PWp?T'apPCՈƩ/_习)RJCլf,嚰@5{՞jL+:u+6F}tܘxNK-e^@kPGf8n%r}?:pI[s3R&Li[l"ZkcPQfǘ8[sqI蹇@\]Q]A${RZ=-EE7§B"HwBd.OćeTA'f\෎~*4+2*H:PT?S+bBm[b\mJdz(6QKp7[]E6K:zӈBaSMJԯ/+{NcIv*^-1niO?{bҷ[SOфwoͮ:@ܤ# y?Ù|Wq}TaxM#uIΰ)@;5wZ\9* ёf?5JQIŠGQP,fJ<źTh/Nħz1d*EfR0931ādtR-i8\9 En**Q>T<]bʚmR 'N?/Èp~ ݜ OJJ)7uc|%  ҫ$z$~Qk((7[݋Ppy^mSH1~ߑ|xsS[H%: Ǵ`_ٗG h(_FHmd"`GJ{ZDӸ7˾3 0i$Τj%FC 6i_V oI; VAc*V:40a`zu}|rڰ&&d&~:[0G}Ў'$ړ 7c&#˲xK#/Zkrl||ЌG6zΌp &${tRz= ƪ@!kG(%wa$fYBvG7󔱨2To+yKkMsܖcsʺ?5"DeBvG cYc9:`jGZ]?Q3׎:0o#fyRJ* !=FȤ؈t\O ip•uYZ?^`| -)e0 ]wcPaI?CWBbJꦜOI?!ӷb´f<0BT7 α` xkoM|ΕTt 0>*,涩yk$߮{jⰨHhe#BoHEONZl6Cet8?+ %dd6/5q4 ZHn.?tq!td`:-#-06mY xk钚;EӉKx&'~4)c ~ZܐH̰g:J{YَaM]~A*Y%LsGߍmW]tD]LqaU-z[/ ſv`YnmvSPOXgNk5.|Q5;c=<@ZQ5^WVm΀+&Ru-.b^IAi sfbΒǦW6:lI2T$J5D4U%@V2cwg}AlYސXS2sd5V彆+Uґtwtg}~CWmF6*LPP_N|i%BXɄl91 Olv7,Wu/Y~#=CǘҴxVtcvZ Oq*OZ~Lg4`EN,SOt!Փtl]$\1yC. +*9 R34 QbScPP,Bp5bRO~hj e`V κ0B0 ׽N}^1n}{ɥ15o:5WwӪ/3;[ gu| tm4NGC/YBeHM\YjAKyhg5uYR! PVppsz,Rfg*-:2ų\$$E:Jj5ˆZ;E)$̆'u9o{?imB^Y-S7ص5'}&( 0P*FpU-a:B{~hBQMtoE=(C~>( \XKfbң]|_1`X [r+н;C'c6%6\|*]63k[pGiF(X8{@A2%)`: X.T!GܜaEa&<c{^z7J荶!B *+%F.(`S@tJԲ^ %HH㐘!ΐjuS xx?P5 qFDŽq)kͲ^Րȝ^,wSXb7yC(/ZY:re)*-DEd%M9\yT8עkt˃T>܁ @b&YCeU;W<9<VWld5lI-E'm-*t,v*G_]|Gt. tZZ>xF0 }]Q-?~Vh*5.f8gFGOܒh{yh )@olk0|AȘJ=)K/V2RhQR4Vm$_~ S Z{hBbaZʭ%B|x0m ~p W,=nj!wLo(*kke2o ~!DE/ 0u\qT_>!0vRGdz$Ex FmL[ D0Uirgka~nڛt3D4+"\WlA| }7uE;WR冊[ BHع&~5Ek Z7k*TJ(ʪSKZpƵ2UBƽ[őrGԯ-yw?ʪu4;5!Gʴu%yib.&G)MjQӵ}I*T3`z}4N903UhDi6rݹ൐d+أAHY `,(cmDA@jN zl9|;TI+Ml˳qWWƎß8y tnjFץ#s4q5{y(cIP2}_ >EFI>{ ^@KEG B|n]W 9,l ĨdY81_Kuȓhe<;l LiUK!3z?ts7a"b&?JNYf֦YdoTz* | =]N74S , D2Ѭ>ԠjDxM^:r7sȫ e=~ng`QxY^m w/qL;ʰHb4Ij_^}Jd>RXܙg:Ԑ|Nwz$%_* fw/J+f:HH>4.kGFP%j",]&2 3 =fG6+N- :'(l )PŽ( r7$vivwsJsx"Uf  劘Ul'`+r);c'zЦ!G⚢^pC`ZUa.@|zbkX9lW|쒐/o㚈\ߡ2k 9h ixkID$ʼn ^egێ#}J" ID٪i?&+HO 6,yfAKE ݂(bMShca(>(J8;.ӷʠ(hw'(@QBOaCޛi4/o=@yGhO b˞B.fSヲշ& Jd{ ymC~8Źge+|k b̗m*~c8~UEgBz{qJ&1t>}'^%oM2՗Ss/gGH,Hi//m̥"'I-ɕMs ΄^1֩ *RSM5H1G yae)Z8 kzy8 =8J +ReuęQ`#8V'tՀeI?LCYSNzRd̦ u#gXo>d9 -Rt':J QlĈtj7T0`$=%?//_ $aM6RĮ PX2x@:4)QlN S5G9bg욜mўK&S6c@ePJ:Xwpn7\0CWHk6>ɘ*V4$Dy JU}iX)w.vԏMRt ; $ CETJ,!|(渽{Jetv …pc.Ȥ+"1U>t׉²C Vx- S$Utd"4*ސEP\)BD3q?Yf\qRtkmoX3E xL>nGDl"BNmYa_"j]zÜs77{?߬l'hV x9x*/= ,䇛*t"{?;)yYi<#+0W&}(WJ夣h‡XC+(:Y@wJ3/|tu9s)ȦIڂwC{p#[Nr#EcݼҬ˱jEHk?eAMJ~XwK@0$7(FSۅL9kMv:}';,Jd_.,;s.#'R X(n7ꉟ: F{O6E:/\ݰ{gtwDȎ/r 2$D T~BSB4ůsvbv'k9[):4 ƣJɸR{.C B$ՙҟviˏ')RƆEG30[Ev؃ ~eTG+C<'\]L HkZ䂹\H5h(n4ܒẇV_6J\W)%sNOw',UR_Ddإ{c+;!Tz ~Pv/ W2.҉3}& XGI<=e{kL3ȌGN.CZW:-Q\Q1o~l7"b jK$o.zn支-Lh:t n|;&:67'plz Gj3q!c(EEpjOҮ̝<G:!)4U"9CD-#<P"&EͩU7r`f5ahoRw2ӽ2wͻ;*Ͷպud+G@#V,$-MUBbopRTOPIMWK~Dk>ORv'BaeX5$TQn]s /O+oy Cº`V levvxFH`(vZf*wfi2KzIec`1^b'}#Bb~a} .@iv4OiYpVZdo&)K؀P.[O,?M cz/'LYKb'ߓvk)mqQ_(nqB5 3bI[t[[h5U0#%%6rs=zǙ-Ӳfύ?t"2e D'ˁ҄H E../MO{xEEPj6 [ḘG+YQ +OK ):J.Ԫ 킗V'Z8Yk7Bu] j?< ]ֺO'X/)sy@TJIn"+D3 SHS̃HIGo5Jna+J+$'ⶆ'hi~_6VC뫁4j?ao$Xgp^-(:Y_2.G|Mt[^')N\lɶ3ܙ)_;L@E09пjOt2zPIHর*|.gw)3I?1^Fﮍ7{![eVJf~ϖGO@e.fdšp"o7@H wMHTcς/C'(/j[sS?4Ѽ]Z?-VhpspKdawڂ(>Nj q+h9yw4݁x<9\5d?LsB╮w TYTCIB^=އ}$y!qDV1tt#FpT (+cxCݏdNx0nS,#ݑyR*"m^ML%RI-8DdWH'4rB;ҸjJIJOtٞ>l W9:@5JzB*%{Pۨ5`-[Fo9<} PWBgi9p\ (CsChX$ۭd{i[Xt2פ6JrsDq ,7 ~'f^Lbi-P: Q/S'\ %Rij}ʞ .FD24oJ $?^QUBy 0H8 BI`4Gl:,,U{5Lj#F@͈ ҟk8w+KM(_͵O۵} `ʗ'VM?pҲoD=մR?~3+S gjc,t ]e9ſt+#lPJƐMYhHŗ:?2Xjq鐪$b]Z&v/iu##`[eH]*4ןl ߡwKՍ0 DZ+"D\=܀q}l-ulb}kjW0VtBPgn{Ď'` %92woUqړEGJ0A I[eCa) f/IDZ0ҙNuw*O9&FfE!Xv*.C3Y01/[eB)|tg.o-qD2>20h^C6!\ X3YsYڭY*}.iJrG*[R[ ⵭%ds֠c oE,_z NH׺Wg5 Ew?JA(!tx;{<}]W[rK?VN%^9{44;vvB(II_ hL~ oz?pIw[q5b,mS91&z3},5v$;;Р,,ͩ@ќ*g~:I%iUg>3Kzs…Cx-w(?^>9B^)hc/KF!c2l #6Ӵ arտ3ׅV;hJ6Th+y L~7㗌l:Y{xHMSp#g0\ H6g= VGuɡ`sY!L<]Ŕz;tIn. qrw t_^y77MRY$+u5¼e&ޅ&-BnJt 5švF%ZHS[A!:'Zgx`Ke(MkhAE# >^f9<;۽һKi"Nm( 2;j"99 3ٕr>=bkz7DkW7 ޗ֏% lM6rJfB*&J3Wd3> O-o([Kâp KpYOhWvgIiԺzu6ǝEoi~}䵑~jԺ9G!Rߦet?)[Wc+}.nHHykreڑQ*wUHܰ#3@@&n].qV"` ܝiiQnf{:~G#Pbu88heS+)QȜPŒ?%QuT z^JьqE8V\͡k5ŕbP0cVm~gZ}[ٴ`HL8JK@8DGJDi15c!q(ux&Bju?- !_WAϸMQޓ]i@N SȄKEpB7O|eT0LMA-xƭ'-^8op o>l(-vK ^5- ĝdmX\yS5x*C%4P)SF'|84Rl~NmVM=0d73 y[/5V2Vc^%R~X^mʡ3/c2Y P%rZ7MGAdUɑGBO(H8 )ȷPffUrv# 2b}N*mb{AI3jAtMC:ޥԾ)5=S|݇vl3cҹ8Wl79b֭LkQ+55ċzf;a*Rb ]yo>fXVvl,+-O[XCF=o3Efv/ٞ7y4b!ބ(Ty&tg,k|KA_}Cl7 d0LX }=q͉etu_LWVo(֗`S׶+E>>S-0C lQ:@BKx6@ĝkoBtSv8OE[LaqD<]tB[й9"O乊ϥ퇲uH TXIZzL=i.Hء1Q-ߏYrGkx (n=hg O?]-!KYQMNȔ:}U+7sWi22D]tF5Sp_י@Ne\TQchOr+"LT"4ޗ(g瓭WE\^Qo ()`[*2~۾?5')_L_p b^޷Ƈ5!b^ލpƈp$Ӫ;:RR/HǪnts9iga{xm}ĖbD4ᩋdtneϑYֱ٧rݨ#qLmZ&m nh s(fEpeߢ vHG&>W+C\R1)#k=cOg3ա0Q=_k(>t =2w ǴL" 8/&R?a7IQv-1m; 1mmC NUiƌ_kT4o.uQv__44n +%0}c&J>fI0zv?#I`(jNfٍ٪zUr+QvAf@ ?EF@;s|!vp$]K˪}Mi/i_ \';=G=jI<Ĉ0 "/T&-D"7IcrEa$B9ln/D@ᢊjFlԏ4n3MW>T6x6<讦81Nn.t;Ky!.D>7^1MӣA1Gh˱1,~ێa[-Pvr鐙;D63gJJMW=-Qi\NI:/3AٻďQubg+"Llp K;[e˵{L\*gG=h)2>6Bwrq{\xV zފ&ӆ\ *lߟW\6O;BX|^jy;v 4I2-ZY^=L Br3O`+̴vW}Rk<46s2oX+Y;MkO27T1z!7}`?&$(dXvB.lwC~rjj񎨃!cfM*Q(pyOЋ/\('-:z*׼٧$CO ϰ8+wgb hr? yףg -f=j:7.vp&@3l37bR' } ֟YBNaZ]e &7$]Ϸ_6b\iL)s8P&5^J50G](M،}]*re7#$zqIѩrWذU-HNNN>˸BA;Qd'RsQ`|,~5:ۤ|㝦LQxJ}^ JOrb[f>w R+MIЁaPAڟL~3R$̳ؿ_|1`?^K07SnXțMʧu5I㨐M(V [6l:R-^T1i:i"^\Wr/T9S:REaRIRk1FrnWl4 8 LIٝuP/irȅNjжi-ajdfn&Fΐ^$"+=+5aʀ WTaT\4ư h O)B b' _A͏Tq^/ ʡLɆM#Bd|4NlSY=&_gmxVݿ1}^ș4 \:L & (I Cj+-M0&GǘrG=V q6NujEtAQSt%-:nu#?iLpI5yUwWHwI>K|wKʪ^34x|{RI)OŹj;e寞S̤֩Q'''TԄz=okҚ\aKK^fA1KB?5/sn0Fȋ두^9'K|(}~Zo{%EB,Uh;vk͋l9rG*d ʲm15=+?YU{GMXTx$jeb0APicܮ3d:H+?nx_`1T ]BCgW'2q>um.rs,k8X^`mm4i> BH)b犔O/5 p '*<!*bAܩ7>G6) ?%BȆ4;"^- Bm榀}JN#b_p$].&/Sb:⬑Ud[]!F[vkv=A,Rb*,i)%'\zLfGGsD]c k'GGڦc'܈@XJN4p1eD&Katm64x]n5 xiwL<.i}*(r7ej|nW_}ȍ¤Vvq@%eH<5:Qcyt0n3'65A]h>Kk,-5HՄ7o`CxbO$mc}Cn8^G1]H]RE#Ůs>liI4R7lacEA^!eXbXG6 , ޱyfz(9^+M08ۅ7y?z1LjM>R0(k_.!!cUa[P0>W/P Y‚b1l d@ $ <ڒ1ySitD]Z ;A?Yx&r+Bs ohH[5=WDIɱ !JNiE#I_[OP56m Q-f{chJȬ#9mKo6Ȗh=: \X3]E,?k׷ksWyE{f< 3y}6^PK3cZMCDB short/3JFFQU33GH861e4R605JAFTH81EG41CQP9ES1O0N1J4IBVIC7BUO5.zBlob2AEJf:e~O |f Y䎩Gʆ l}{ӜD)aaJOqwҿုy,S P: YYpXCV<ukG2ڢ ]@zt҃+wOWi *?*Sw\  na[規*ΤR>F2Ӑ!3{KzTrd)4WT^f?M'ڣ] .z>`A[O;v 23˃G%u}X,e:C0pnjvkt<.G4nG^T6zV:[#}V*9T\$f#<7:P |$}Nf*{9&],X{u~$5:e(l`w k"[oX采O?2{9Q 'KWGS&1Rv]7+4v Zo< ұ!g3W-k{ pmD4.2BY.]0(v@RKtdI m6:L ew5q !mƁ~՗߲("u(~ŝ^b'!qX32SP Z@0Qν$YD7xjfɯ6}=u)^g‡ҭ2zn]\_-#cv@7u]6/>u ͮ XtQZμ4dϯ@+jV̓>@ }\TջHB wOryJz>ge^B{ذK 9ˀY6 4Ƿ&-rdkQHUhV$^ٟvO I%$T00H52OT!Ш,gX@ׅ!ԳH6{hX2[yAaXbB kBѵ$VԵ'FaJ >.<=mgF"1?HrIIeb{ZTzuGB,jXl;k=xY E#hbp7mt$߽[ `%7/w4wA 4byv'^$7 -0N0nd.a+K'LJ:|9~Z]Ye .3i}:c~5+h*i櫔:MYXv@5PyAoa,ߒҦ\i[zosY7@Ϡ0Ag m`oX>YEcP!I޳;T(E-͡=Q2#"7`HWrƚӐ'0V1 Ǧsdp/9-ڢ6 ΎՍ$ {<6%[ĠbZc"=]OPxޟ$fWy۪`LiDvUMR@+mEaMӈuY%Ub&T Ru2TR+`q€FeFS֞!i.M7^kq#JO}p71ބd=bNuPX?>|>h %^y=fY{Lp9xmWR`=)fTj7yvK~;%o_?a#He۬M8xR'5z" x_C 1p= j"+n֮h}R*$Xq.1oLcx:]|7LS E s ׀y*ѯEJ^=8 A+iKs/Kha\xOam>-) _} Tm,1ti~l)fGCČt-_ <$E.Yx߄gbDrOվ10JO)dn&Kd:4왺i Z?]v6>ngoqK[0oKDpFp&Mʸ@8 ,~t >-Ux ҾO1FԢ2//kÎWfWbNDso2a9v&jAd(( Lݚ|֘zg6Z? *:7N Eg]h:@]^~ne65΢=:ztTi&ivQUSRd$! ϝs4OzLC%Og06n`]W˪4MBul{Y@)%5]+ALGtܲHs1i΢?v{8_J*xѶb5qvHF5Wh:)n@w xZoy$;qA\0+ ^G}`48f7g+(J5/ioCVfeh:,#!sG񗓤Qх:v]"6L @F8r\ccGC˒yJ z `YμOFe6YjGP'ஷPψ a*[pI5ǣ'Q _zOPΧ'L!0D>>^]~C?@)\^ wJ sS=VS6/j/MnL56z'YGC0>̃ QR3YE9LgAVwmxZ:\U:JⰟUOsEmxN< DbԍVNdbSC!6VU΢ꢅ[#DLAGVwM b'!o}(}9EzO{c 0ФWXOM0fJdI;LYnVkS/MHu֐=%됦[^J5CЫwtʏ;4b>Z(61g1Cߠ5>@\$I1p7/ǫ׹jX&ܯvFA@Y~ p &vZ0Asb`+Cgᗶ/{ah,1Nb"U-V!5EQ d|[U`9w렋gWBXziُtu"ZWއdN/ҵ/P6C':OҐmE@w.s{T`!mm[7ܽ|&b:8Uܿ!TtxJpIQLMXjG',%Un͊2Q8+A_ OK&O!ֽWo", J*w^R%I{Ո*24%+j}T@]fxCŅB}5چ&ˆGo=SkBʦM[.;#6?š8M3OmKta jN}𳸼XЙuԻE$+Y6; /sxjTukffNK_"%g"ܩ=Xhfƒ;0tz(>3|ѣWXz({m?tciJiTXEOjQ;H${@I/z]K T 㸒ހ2ֻFɤ/ ^r١[z%*=[-z v.6f#W)3%$NY@u( ?'-HKQun4|͝ݪ'a)dȜ'Ki@8 +g e-PS}(qҧ(&RuI D~y DsjpWFR5؜ aU$oڲu$rmj̉` Â#|J.; nHAc,#jdMģHV7 |'7V6B^b@q]`؅omE_=R>㪠0MKm5uݟ;bI|/Szs Υ{q_F\2'9 B3 d9aDTLtj Z<[%ƄZ`IaLK B4Ϣ9m\Go-t:g ܌dO{"'Vq`\crleeޞ|0abo-8nK锯V"ә3>ʟj}>k:`WRa89b*섨,4$[y׫S65 )GFԉ-l=?BH%yem +^ ];w-J>LbSɋ"bOi|P?]b&]6O`B 8K$%/p.v *H1d!G16aoѢהrwKدj0^݂{ -I܉!Zʤϟ0%iZd^j=ІD S;|ם(b4n K=bp Gl`r;KSk:w"gTEe㫀37ȫ? D&/Cz5.+tĔAaQM6pÅT(|6Oo ep@ 3-ǕXys(7n'`= @AcJ[>UP/G>lU6t$M+Bo|GaĐ9M{&+xyK~ـ^ҢwVgaI@XӺ"-! @{I׹3gC8[$ᯆJ>Cvڬxʎeו<͐.{apCmoc[mg7Ptjsd}=AQ޲d|*'tFukK3BU$$wB]=/B;RP/]Ń6(;=w7/ea{%f-)pŝ`y'B͈MүL(Y1] ?x4ފۤ% O )iXv3 j#!1>δҧ3AhArYk84Uʞ t!K* FGLt,BH:` ^s~ -"3TQM5Ԥwv+`tj4/mTIig=;OXɤ{B#O ʿj!GTZ\*r:]*[,˥IѰY๹zKEL:  A$V! 7Rz P:!0eOv1v2u6.FUW|=JN"!8 %Dϯv\ QsUs^)}N| vF=lvֹ>tt >`p7Q_Ɏ aޡ28Jא/PLF8T,Iڊt607[P9'j@W [sQæ֞lvЫp IffW1D˟PǗ>g_(@j9'茵-R]> |D[}Pd$]h>|ΒUg7fl+y#ZIl %3^۬!*+gC_ĉ~0 > W#WD/E17NHQ<ggσX}(e[, |!uH2*:6)Ŵ/L!p~rxD k(!ք¡XG1?ҕMޫLB&y>0gtܶ/` a(T *uOtT_.9U]T~e?ۺFDwMW#JM.(Wc),+:B[Av45s/P&y2D~ӽ-]w N·ؕ˝ Ҳ>ƀq|6Zw:37I{ΣڗP Uƭ[e أV~jԂ071@[hly8َvTev !#/:ڡrt3_YArww> jm,V3:k g{}/7 %c\$mBEC|5A;ß"/2$ q_8XbO$#pscpY{^[đQt=^V  `\?44/%XێA0n^vK]N"3 'k~qE9~ _PM=&oхUy4@e+ 9p7P:_,dS7<2Uht^k{HQbs&M֛&@bTpVޒ:u5fE|Z ')7kbB%F<J_ak7NNQ 7?,rYv\04GGAL&CGٸ6 ;'yO-u[vp@FDukzיگ¨2mIV wEF:9YF`:Ł}KH g1S1Z\y(bIhdb] ꁑ9G{vQOWYD2Co6.jXTQJ\ ni2{/3ǩh{ZLUQ3VwdqV_Z__vQUP2LLEd֙a[cG<2ˌBdOY>2K7d4dW7F0~<G$]l䊄xkN1?~|Un,Ch'8A6.I_--R%}nN JHAsIJc),Lo?n&iot-h=ۘeqesVIZl&- ?`AGd:IGqu"߉̲-6yLY.]'I;sQ J _Q*pOer"7q]xj<[Dl~ [*O?3axhIh?b[%=i<]Bd0( z'OHQ\gPV].4-o<`c?i(mq٥m6vKKQ1g{%]䍸[rcr?Ͱ>-z+ۑC.:~M*)AY6jG=EUaHpzU@&OvEK~[ P6ψWDzJmgБ QVuLP9A#~TAid{۶DkT4fU8M 1M(QցטjCA0:3TɗəD -~; +._1"[R0IJ_ b$vmQ)Ǯm5Rh&"4H[0Hc]ZFw]LbSmUCL=pi*/B{,oZI_{#q$I{]",=[(<팠OIWA%h6ݖ(L 9xȈ^F iFR2IstP"ͷ XD'}DȌ(qƎ$%J[cUl׭qZ )'zG&*W4Rk y%z1q1-N1 .aKe `keodO.**(C'R-$ :maYWI!?Ӽ ^ xGd<2u\6KlWiVU9"QZ^[0U܋.F|5h»R`eW{  sdnw*TBzbxWo/jG <ۈ}zĢtˢ|sC\ 8N_rZ5q1B8-y1,4<>>; 8èb)W`*RՍ|.0^k@ Gl,KiJu.4bFifa2 B~N2M}1`A˚}:KYyz1 4Q}׭>D;IOa?3OVtݹPjgDI݌Ūٔ(B7I,)U[0 ߠ/7ĭ]|t|jg#&By Uu`xMe+ O BEr=zF0g ؽ@n~g2}J}FK y؆` Gl/0iR^ɾ} ab4 n~LvXR俧k<3 W0W67R}>^c哵*@2gZ Oş @=4PvG:Fk ti`WUD ߛc֍^1RtD}Wx@˯:I: otyQZpIS(I*D0vVnثk\Ǜd6 wםz{3GHgS飓Ĭ 2@ ]PwwA#etʹ08 ;9eI&H)үykpVsvGh7`i 䖸XJKWfr׼Bo_\HIae]:cT Qڝ#6.~T潨Ň5S6R^1lO\>e&)Yhh&WLJƱC`Ly*ZW1x)CK'8R& ua"Rad :(7)QU,7RҧtŪrUå(\ҙahlNT44)Ttc\-Xzލp:_^݅ac&8)BDPXH HTȯ;c4p F-| )3 UM@o]}H g E *"[݆2idJctNTE'ݴU:I7dذ: &Jk&zvǫo!79VYF`Om Ha&1 B;wSb7ědĵ*4keGS%b|YDܤvUϬVY w6\"St #?mbPڏ!ڝLjZ޵ Ջ+r6fڅijjAU㮼_R*~0r'^mz>԰,gwD-Ah1߅ZMth>zE]JaX3*[yB4c S_=[iW/*ȧwgwwL@~HPwŻ߂[biG07%2pųP '/_r!xͽ%S{;0@vZ)"q0DE irRz-D|bڬ*G'KT#HeHdӛڅZlڑO_G[J%yv4-v w Pܣm[_L7!1y̜i(@"N 0:V)Ť/U>z<&N`x&0s%MBVVppUo:/rq|"+`@tBmu QFBbME!{1 lf8EiOciruή*K 1{1m9!|mcK)E"{jbySa?}˛<_x׵M1ɭ@׏V 8\V՝ڡEpsӔއG) !< h׍Sq 30h$ّxb>Y?xkZެUsuKxcb}CXuo-@R8)1q7,/MgGڌ"{AYIt-Ez۳F=>زYmr oDž{ Ck YG@#LԳYBwCBqЀҾeqECcd8;Z4es-߲~4Њ7 Fi&y{2_])E\#FjL=*!ZNIx+ٶv,XH$2%2erK ) }b*K OprN)yJX/{Nxv;K" Kurw$GG !f '(4#2̧-&0p`kU#AuOgjx0đ,~ҹB*v*"ܹ h]zNFQdB།? ") z1t6ۇ@LTzD,AE)pg8Ĉ^,)\YuZU y?)eŶ\X$*h-aS/MO V [BW=R{%>_hԞ,)ubvER[mx[Fmʘo T;Δd6(dZ0b)> %a `ǕE5LR3Dy@Q0(+T927ɶ:~縡]yᎡХpӉC91 踩rߊ;'ft^MxA䧜 8-(\2 l毨jA(oU$ڐ\b0U)̓(Z' bfo/ӂ1;CK-~+,7~ 5L8:r1I]ҏ[ayk.iw4X81~Xr^ ?0rA=fVl_@DPcm%^!\i&i~ńhA@%:lJ6Gg\<0;m2p0p9WEV4 ,RQqx=9yOt'#Xo-0kqQF-wjb8IPH帒W[U_Q.%jc 0;Z0^@=2 !V8!p_kjR$'c]_dIc!>x"LRNmtGvCDJ;n1AM4eQRFR+q}BG/S-ŨI3X ǭ}k*b#JɭLn.,Z^c Pl?GY <6?@` Ƀ-x\ Y([{ct!KBcJ ?rIOl>O'Jŋ~X$3oI/ xݐ+ _P$H 9G#fr>s<N5F辧EuΏ-8V!+_OHFtO#_ԗɳj$::ɍ+&+$'^;EKKї8QiCh%CXƎ[s1`$Р4x2>grRS84 ~Oh1?>}E)336:-?Dq΁+G=ZM+c` ]re"[S"^4U.~2a5(]pbO IMO|J:$;c(!G8'FCppͻq7bgԥ@ _&qdجP\ߢKNÿ3Fi9'qsRx^F1S[~c+ޚ?@&iMbPf醚~/"քlCZ[[c2& 7*`KT#( Sl&~  ۧw D MQ&Nwm!7\3@·[.󡺨1{q$`]t'ij|W+ wq* k>º%6}V}KfoE5=/;3V)0/Ȏ8e *X:h;i6no7c8ybn (=]XDwEQnϛbѓ݋=~|'C %PK3cZM? short/3TIJ3LR9H22KVe81AI3B0KF3OM9G41CQP8M51E0Q4PKKP64O51JV0.XMLAEï JјIiP[km Co# P-< +zG>XH&l+KZl pE;!GZ5ԕK)ՙkO/=9X VoU9i5⮛%Mײ3+Ƕ#͓u2-䦖6)CE|CR"jQǣLN]KGzU:*}(i3'?zeyd_= e\le \GRB7\$= ?z6l%-r[Sq"͝ų!%1*4)h2ǣ,#?㊨Q%m&lNf }Hrs袱e!3@ʗt[9k2˶Wo"qzS æx:R!8^.SaeIiڡD%QD{)yic 1ţ9Nlv0_R[oӥNbhL0NJeYX:|-43b?dFXx+p+  ZZV-3ԹOД!Rݞ#إ|w,7-b{cɸѨ{!k") if&a]JpSלrљkTy[+aM6˞PK3cZM@AB short/3TIJ3LR9H22KVe81AI3B0KF3OM9G41CQP8M51E0Q4PKKP64O51JV0.zBlob2AE6[n lVĨ}*G fNu`v#.q.(FƞY[afDT̖'ݜK}dhv~hSv W5JGGhfI;`J& A.wX8_옯}[ zd :,vk &>h=r#s*`cKŗOh&B<'TjK@$Ux|lWksKhđ9drZT݌DذQI ':XЃI<:+»̲VEocZ&sRst8b Jk=vz@6w;kD)\䋠?1?+[ވKNӵ(7NUH;k.n,DփdYg]쌌@dO^GKtGB]D_^Ɖmbن[0BQ[c{(1uyB_篂D10 VWv4x $$9 } =bI[AvyOdk kSiwaE_M:E\51#lDߑ=]m,=>1U S w)WA,QR G_a4s, 6. : }2s AT{U ss#viJ;;㎝-5tRSA[cE6eb95M7%M-ܧeӚȁו;_m)WfGz!i,c qOPs%=׋Zk^DޱZ?pJv944u*VtR<F 쪤̓"9ˁk$؍02 ſFVz)?(c TKE/ P[kw9Gbyeul~kVqt<6wiU:gIJPQu! AiUՂ# o;\`3 ֳ[Rf-cpa|1*W| {н=(؀Xs}K+'?{='|fP10pUr,[~uĄ#,U-Rw~$UPZVYR4M@7sn3h:+{6^4Hg$5y(bȎҷ.1p]tg5#ٚ3[Xk0R&O"?s` CxG>%S¬O*f%bkd52-ζ>cˊRHϻY6bKLe7Y6W'P)>䃡gѤLD8n Q[ |&'K$ֵaI?V_囏ubԷ㍇fJL (}G$1x>'@ јr0qN9scP1[ˤFN|MuU-hΣ=A/!'Qd!qDb'z5鰦D|V-ßdVXg ex[t]<["9DˋZ5+= Nm@ hRG1cSOL' [(76F"q0iyӦ#2w`K`E$X32J]TNx& tDk_f_u/kմ6tpIIKOt!-)Vދy53A~5]:=a*ϵ4 =~Q)+/㣲0ƙ291Xc)6vjjRlg`Z-l"űi7ԙ^xlWҨ@szQk.cߨ2A4{fwփ;/6h|WB&KߺA'~o7U=F p}4ʶsi7/٘})=olQDpKvF|TLq(?w>4R6_jѕ\$wWv( ֤*@Wyݾ;1QMBx++WQC; ?CXfƸ:`(&R\WHPҷYP/ 4B&Ή}rQ kC52UcY$v"lIl#"n7a%F;`D53#:R5aEDE(s'k":Pfޕ NZmiPg+<[kե=s)N6\ #sQ$vY;s&y[ KH \5W dQRe%7!gC^""6x)Ť@ vL ik^lnhN-i@ygEy g*cU/3 )S>3*.wJ5?o@*nF9;V >p3^WoKOA$5O2?SSÍplYG v詳0BpA)/5g7y/xW[t+apg>ǦoZz3dH;6;a#TyK pqo7D[Ӯ)/]bB㞞F goviլjL. #vho&M ෥Yu+a0܎aoLd y:Lt^VRJUt'bp#%Ge%=+;ûO­"ۿ;$mH:4ĝGV@Pc8"~wŀ[':WKY`gYz3dO_1CySm ޱY]FSBW Trg r&IIT(z{n{'+`uFj~MA}f#Jmv#J;kLڵIxr9Fk*BˁDZ )&t*D?8>[P^TxHސwB<8_ɥ)g|XJu18rBOR} faE#zM7#y^zJR$:B"df>1kR+` km Vծa]H׈^&*C0,1.ȣu̻9^>Ve]uuhR?׻NyD]G3BF{A1%>8z I~ϵO|HH@pl0'EbPAX6,x;׍w ⇺E:"-{"V{SdF׋u_YezH5#l!2&(JP_8#};Xe$eh9HDHEд'JoP f~=''g7`mPNC:ZBԽ qhrtL>Lj C .Gi5ScIX6WW_GsWV1,y%5$}]@x'pI1wK NL*#tjb: @E;H.YӺ;u\2O5UNWۤx`vG,rc{S ;Ę ɀ_su)BI-,9ՠ!U ǵ V-D?ÿ2(Pku9M) 睸-bJzh|FUn#RLf Kj CD6|ʔIg."U5hn5^L.vev.tPPn`~eCȽ߸T (B-dyPgH*lHG.Fy -fHX[ 5BĄ ŜS՗ȕ[.Mq%9}8؍=[+lҤ K>hi|C;OK>k:($ш>kRNK F6x+k9{S%K>;a]N^mו#RZ"ˋyb,zxX%]b'4cջ9Uo. oc#pR-E'ArlDâ̎Atu 4&:ҧH[n\Y(TPrh:<+ &SVK${jjRʨ?!Yf+$g+bHpDlU`b7әH\8[nN.l?*U[.ANp N>LkaدP :ÎwIM*I)d|>R%i%Aֻ*wW$V !{tZp p3#˚9lؑ7 BJꘒ#׈oEBx_kR#>YXdڐa-)٨NOG!Bvf\eW̳)'!3TY:ɞx@@ms}%uœ /rÚnrա#:MPu0̰zƍ=9n98E3 vg,lM;@}*:/ [smЅ?cZ'r-Btq3)M {XO7 jryaNĎ h#3<IWG8dK 2T%\JEpI|;l@H=MB,ZL\1bN7Q&7#u9CڰEt .PQ^໠< 0xe{Q%?McHwp_}B@ Ϗ%"=TyWF es4g_YkJQ?=c ^ygUN'Vۓ:dT1eZW[5TxX cƵU,Sgic(dH\ϣ cq!O=iTΪX2 40 -y5噪XDKg GsrڙAПK]ѿo[dnȷS:[TEЋt'Y6TcB b>"]t?n 0pem)^* 2/_ >]^p*滰N9%CEO;iRO?Y?ȾWE7%|gt`ubV1rʕx53_+#)-~0 J0Z[-4{#p,ÜYfzr \ (0L#Mr2Bl:*q4~X5g\xǓ -bc'eZU0!(Ksu=Ѹ-ՋgT%ҁ4xM!FZty€hU0ւ z1,+̆ VP.ER3tLPsb0Rj !`㠨-^q!x>}ӮT{0M%F>e}G`hĎA Y(چCw/6v\.M6H~h'9e]cdTZw<Q,x'>6Ao.2WڛlJjV6IKJX 3L4ȧU}">Rdu, |N'?u%Y[do f0c\(rMl{e&e^g`w>D@M I \\G' .:shzX| ݸMOIȼH=Y]DKDB%H9U 5n 2r7a@QБmX 1HhUoC a3 B{꘹xsH*υ鐰i-UIMHL~jFoTȁr) $3Hӥ~K d%KVr#8E/R )uvL$IŠT{; =-6M4۴?|VVoLFW,7/yb,f.rz( UzD+C,zmOc?NLW9vBIq n6Gj2hZr]wՃ:Պ/lѴr_SIJo79$ .7D <2% o4&ʺhKTw'ݚq6vXHg:BrvyC. &ۗQݳok4s-:CH[!߲Lҙ=;|^Dmʕ9 G"N=5]z#^K]#uwIn;~^M@f!AER0K ,h4V46zre * B78j)fmĺXop<|Gxl+v:*2W (P,lWa) v-圄՝ı7J4嗤ĆptF)&J._kS"TjQ1Ly&l3c.ZI5e`V2"sB}l?9Ԁ/%2SX=R.jO_/?\!Yӕ*#tOodmN;̐[b+l>7w..㵸tcx']Ɗ]831]uU7 O9f\UJPGpCE1".Ju}\ Ʈ c"Ŵ*V . wq[NM[V|_\ Rph%lgD+R'ůg d=#F;\YfoͼԆ6FϨ"A@}Q_Üظː|mMw/چ WY1&]9&xwO>)lj" )(~aE :KP$~?zS߉U>Z蜙Lߔ_܊a a#%3XRavɘlf2t|@Rǒ0v¿V4$oOneBO, 6mH#YP߳mwлcjog̗njmŽjSR4%B1743}7oB@c(R3t8>8V'0~|#k(Q񹝍!-b-< qdUTCV3,%*ԉ ϩU`|K1]Vʛ@J߬wOZ&hAn8=I :_iRM9{jw8w7bxzwҎ:-)O8coZ"}]Hu]|r9uz'3N!g<.DiH،:$z[p)yEj;:Z`jMÓsVX4*ʴzb:k~McYƠnWhJ1 _ >$3h!M0]rp2{Dj#, Bl9gz7-\h_WPOKpn?gbqtB7MmN̋BeN6}(1B=9G549*~NjgPHTh U Cj$] l3/4O=i( T-D'>"_*n%&27@@s%L`WG?F1P40L#-rG?w[<ظld@[?ynIO~Pqƹ}.\S3 `jE{~>`b74<;",UGUGm R5a3ӄx:OZ}sC٣ `Bvkߦ P@{M4VזJ}tc[3) KY+5(n[f4"1 FzxF΀]NC$Q=3c{ׄ?RИ{$X Z0N"AMr+^oE!ƾ.+^uאM,z ϥ:_Z!1QW*6fQ{ww,ܹ,0'\ @zڊYBqI6}r/o S?`=_ so/V9!v wjx$Lj˗^QMvj- 3$j?vFUngXhpo7.ʡ{i՜R?3i>_t&C!UۋtpB92bsmwmnN氘pI{5"LrR]e!349gTz/'`aS/9ɏ}$ KkD-XkHS&:U#q;"  zڕ2G_2kJ/'MsNR#ۣ cXUsŊ" +^&a"Kcןup.7cQZ%zPs4CQi *|8L|*a뤖똛۞`l.6ډ.\o.6Q/*{3C].vYI"97qaV!}JKvdG}aqʼnl=kە);y|[U_I *,5U v+e:'JORS`vY(I[ O!f"Cu$jBl>`p"m;G9QA+ݵa ??Hp`B(È73 ~@Gʊ~ӨPsw,{@;ǫb8QkX;;H}% Be=RtP m %Q/bGRc(ȭ[=]^D l+RFUMP ,x'<(/)DS.!RSf#R^cVuuyղ+0 bw*H+pdNOV}Rx`M<\aϕ0w2̣4۹gmIAF_01/U!F7/@Zh静s[4frx=_C+ce,lA[}"uQ@@/c1$ ̞[ءb ]I:lqd )܈&E :﹮ k F|-S 06am)sX-(M5iruftvu *bKɈ^9ZHLܒֺڞ`vÎAD/o /MQTViΧep i B=&w ^puos@ hg =i*1sju )XRrwnh'D.G 9o@:un6,$W^ÒlZr@%ZFfb>?}F_G0Zkp~%HqMO͞P:{Y!.m,^ĄkYX󧮊Rb7DreWƀ U=]-FqcmSS<٦rgQm @ /? x' &X]C0xs'R"WnȖ8[ P%3͕H=XT;cBG#JOxS|L^顾lKۘ=B+,jӢ’HI- {LiDSyg],Li8"j_`mOVs [|g` XBInprؑQ= 0$i#mMNJRS=wuهt?ڎH}ybM&0ѫ( -~~rJ<$&U8?+7$CtrF`s X< )"A@}0{W?<%FE/=@HH(Pt=8xl;J21م!0U'|n/Ĥ#/_KL ZSs]N]䦝 ̘5jkBdTBE|e/8ӢwM@۲Tz{m 3!oPh*ㆋ*4%F$ tbdOV[sf4`.#nn{D[1NGώs**S?Pސa}03}P do;^GSO;ɫ@n@RGg"w=ji2M~Һ65!w^'0mI >i@qpAJsOFJ2@)a."|))'jicD׿]v$%lYW͎` NHZ^(ԿM~]Ѫv/Uڝ!۬X ·TkcFN2 PšDby j謢20-S3_;XF`$a~K`vF!Y }rFIijta-EqdGv8}{LPK3cZM? short/61P52PKTP08M8e94FHN1EMC6LEQG41CQP8UD1G0716217P5VQCU5V.XMLAE &l[l*/~lKrE>,mO~ *_Oζٚk5 ӹ|sC+熛)8𧳭vf@ie5vByAϒ0D\;դIhBJL&&@E$,TJŐMW8eբk3PNi!S#)4EAYf0;ȇ?*(Y09eȀ j-g+̋䴀A/(:iM|z?e=$q6a+WMA\6.OTc+ބ3wUL* c;dN>MfYq e9umaf.ze'*jL^B`{b,S^Lpg9P.t 7ãHdd#1ێ~.o[ܘEN᰹ye'I16mid< ifR=H!<_Gy"gj}c$ٯQ3y#tKwhI ~Y{4yYQh6PR!H@uBy\2̛͒au9jpsXR&"˭@+`n~M:]e1(`Sz(~JV=t MEƮ9pnq*{MF("#̃4@~6i?pF;w-D6Ti.PK3cZM2,B short/61P52PKTP08M8e94FHN1EMC6LEQG41CQP8UD1G0716217P5VQCU5V.zBlob3AE'W:F8ܯŕgI:b'Az{ݹ"E!NX}zɲ䮱9a/|Փ G*,AdZvuAo3[_7.MR12$,ٟ=g~1qs~zs$o!9Ҝ/q'Tˡ2Z'D;_~o)ʌ٤oXqͥzM`HHm\H)M>h|+F/Y3: w`V? E,?"BAC{a*V8|I!\"RVzKL]ea#HUEF5nAT7ܙ{Qt29f1h=KF<'8:I=P ]Y`9p(>voVe (Qŭt6#[blq6)Frt0TqX@Ƞ'.()gzBaQ}8\#O*;@:ѽzX4G$:,Q ц]|4]f"&C0EnN :e3!`, G[%޹L";mªQS!듀.vEZrEWv nvR+z1>eJOLGr.!NǀJG) #5e=u"tOqr }y/ $ԍ[YY<#FaI kk>tN%5cZQ/wu4b}"" n EU)bpWE d_ɠ37&Ͱ{*x _AtN)Ǥ~D˵ ˴uk])"_SowS>8%`?ٞ#jd?Šԣ:`?ķecVH_&Ŧzx`>F^ K~v˖:3p{|Eu2%9\S =bAtJa@ Z_.5\1է4d59; wR+#Zf㝏 ;߰:g9沈WJ4LwjH0^"3JL] 7yx,*ԟ 4)XML ئ>)z Tc\Jq`Cs_Hd,h[6j9>&=0+P0P`#8 [{jOANAx:J˛YH'`27kk)cX:{ztjElQLvtgS)=DhW#ta^`ʫjoZMa}p#%VұT*" $Ht-O쀑=m3O,>BAY<jiݕt(w|ͅr_10Dړ?ik0?9/0RXz4gV8\ Y{RL0=XOV%!6#<^LTxG#stmb&UjMu\'8;6I'>%Cf|]+.[w_DBfPK']&PU'{"ԧ+ t"ɡȒIk\h"/;J^~HOtccQmm)%W'^}hО"sy$4` 3@~)ڟr|f! aFѫBh6dA&X~ 0/:3x8`/%Csu8J ĢMskS /Y~L=SK 2M=,٢qV7~J3\;+ [9uuc`e´}6(r^ w+ S)w[.4rzV5]_8xns1U;16D2>k@]Sk%#_'کZL}@$vaONT\S;8g'rw+ey^&Ƣ2NUg;hN@j[GmK@b#SebpAR܀ ,iP0##ho*u;Iߨr._Li*{h}[*kC%j !k~RvxT"#I1YF֝?'$۞Ct(+[Ԙ\ ӳZIYIY&`rc;|oJm"wFY ~R2mɥoS7Wk[G5-Qp!ӠW2<=muיIʦYL+ ElzfPgl=Gh5au앞M݃A\4g|Il7Uc )|KnYg&OlH9Ңg3%k{(teFp{r &'Y >|01a6ܮ87Aa܁1Gݤ:iTC3v2طҢ6)ƞtB^5En㍦SD`eЫ0gLžgg; 6ęT ۟mr8O:hN5]V^.b&"_eaKg-[ + S;]Jc"vH.Ig0:R nU*"}ױ!l\_gīR!nwy~$VO:VޓM&enZn;}Hۭ˝Z+$$#5vZH'uBkf($UC|ɠBN-k.\й6겟8 "}r?6'^ P)}\p~vo`/O+i2K9/_P%a|.&}na4^?ܽ*§Qa<'<n +l߱G6, 79nDXuH-3 r7%9^by4]NpܣFg:aH^$$۶]6F*_~0M$RTev c&U͈nӄyVs*7j_Ծ@*<*o](KšGtrvA$Y{ SzUr fnQҨYfSkkP));@,R|ǹE (R ZӢc-M}FpSzp'FW8@_|Wc]VdGAJ4zG41CT&F|4,8qzq,22CyJ^6j:0D6[H<:)S ~Yߎj;:k[Inj֘:g VߕO"+&o\~ֿ3ڳayӛV;"{VSݹZ4gV:d!ytJ|=Td^,w.BkCtG\յ:re T7Ⱦ+ȑxv3H12{7ȇٹ7,nf>:k;jp:!U m&|6xoT_ _Q C#InةJH?$H5$_.C>vUOQU{ @EjM7>ޢ`}s "Ř#}]$ʷDB(2o ?nrSvQH="# "ʋy\1x/ip\&hy$kƹlY=:M^K)4*$ϛ wD>#i. 13Ibc^ZL7(v6"\y4Shg!r7!~ :G@24M8P. gb&5ﴦN 2>o;q.yeĐwJ(snbkCҺ*M)`64,)Md+H*e;ujobÍ:2l݃=⫓qeLش3]oYȃyƋe _;9Gq0Ny)6XXo" m]̇ܰEp]ۈS@)wK^$Xq0څXr`34 W@2Xvf45ä^/N,C,zbMG9\ -OjYb RPP-6"Pq.(<|I͘e`&8>3Lլ^:+>II4 {Bzh|-%wJWkC @O2HF@~*X߆  9EVahePjq5De;݅7ڌ&#+2WHZX%Wmq;Jz! EkkbVKAOwR6+}B)Z5H |5+·$)$O_Q5e+~u FDy* zA%ԗG(lu[9g _[YȦ!gk6 5,VWB'!-ipkוp}{ &P *|fqC7Cl!6klL!Ƣ-W$y)Ct E35;е56kz -!F]A=[o4v!yqM.4M~~!x /ǦSxv퀾7WѮ8h!+@V_]';K9H!qC >( }rk㝃ձu0IxLW8 -W};ow RI{<^aJQI+.^FS eoGTrhp$a8 K Kqٶdߺg+HPeDRɗG19Wo1|gR4 t`Jo8X8׊4YcB"&=]FٚyHn{( .mV_/Av.i#x(H2q,/P%pL: NV~>9ژ38An[k)Mb_{DiW}'ܘ#2Qm3:&' 5l>eH%֨햘h6/V~ۯl cE-BOӦFY>YYy)r)LJ5Jr4_m^S)KT ;RtF Q]r;7<1iYu?{乫ɱI[5Dfr'eVo+ci'm?왍T٭HK|<Ը=g6Ef6 c(=Yto7V-ITV8K4*p~WCBZ굢j&zq A[DNK@QYo&9qЇ!{(?хb]W-]3}ƋG |x'Tp-/)߻7Xه~?Iq?eBTRPȞi2Vӿ*V=c|^`([G=w*;ΈbM3&Uew=_ۂs>:d<"V.]rՌU q3ٽ i_3>wl2*FǧgܕflrO$w|ї1 98 b6vIK8Gܫƾ T`ނű8ȱNU}" 8df}RxZcrbpPt`srs7TkOT@J[w#JVخ[Gek=^۠v>ޒڱ:N겙\joX*,rPfC-&ڌ' 7).U;kimYlѱb /0X~G딑= Sd ]MK5p9 ] OLl 5YEC ~Uxq?_g_|l5bY{PƉONc9Ղ q~2[ 1鱗2#IH7E r~ {X} _4^lhD6)B-x(:/y^?LyӘ\ mO &$GyhԑNBpLo%+c8]H+m),|WG\ \muG._LZ!gC"R4(&>B =)@YE8yۚ毕x5}Aq&[Vo\| ;HkmyΤ$O^t瓆A`o {kp!m!|'Ebl̀}"qF01P)!7Bd@ρUЏ_,yQmRڄS2`cqmv hAWevuǜPZG Gp Ցv`V4wev[{ i*B+rk\-s'_F8Чjl {ͩkߪ6`Vqu,zPktp 1 ⢱6s,vgjd֛pEݗ<ZqB%חܓh]CMۨRkE)|Vw snq#ڥroAgIE/ה| GfM%TA2ɫj@ 6szg|ѣ>57EՓj Wq"EOĊ1Rj=?+|aE]grikJgqk\&t`%#로s[&qAgew@ yPk_5Ұ57]QIZɭ@zDQrd rǦxdS ֟y-(Ao7!W!mS|teSNyM9%ħTqȊ#Xȓ5r5x_L GS:hC~g@-9{n):(ڮTr„w^4MShxӬAlC . uM[R#%8~ƥ"ٲ/떴]նPrp};/ESÑѪ")$I` G[B elL3^>wa@W=?0в^XfG.vG U;uKF2{!Mw\ A淝M㽨9)-{y% a7,: ~bT /|p-&t4`+Jio%G "D$c+trfZ=AEu)8T vl?Æ\ f7OC+϶#h_C%FGc֝J8)+2JdDɖR ! y;J^a=^<' 5N`tw;ql}7XHNn+ CZ:'Z6iQc_^owqvqz1w`\4c>Q|:8f{@9v=;l\Om24 ϣT"!Z6 (qZmuE?Xm}!sez8.єL`ݒ4rfʢ-p[Fkt4ZWWXy.5+SҶQ׀?*EamEc] uC~m"IR7CIb9~/&wmG{¢3QQ#?݃ӕf.yY~,ѕD|'ԯjAJNq'6$jETa"Rf'50}?G\ Ƈ8@W<9mPY6|:U:j<~^R0fi;z4(,!+_Y_'DWWRQyϚo݇ KSJI^*#<5pKE }G:A)kO૕<ՂD;l okZi16Ao=.gUe!c~|\RXQ{c!3 o9g0!"5wȂƅfUKi-h /VUxu2{/jCկ8`<|?^k%5#ġVU4SIA~?mr%:EpꗰeZd0s6 y;RU/7ެW4P#Ue7r=gjl 1:#׍&e[XSn#Z0 Ox͝=,bֈ`3m:DŽw#@gy5ORww$8]0.)?M3u꒹E"d]7R_F}~D(o1bM6 =q}ɏ<`Ʀk*~$L'*V:^{l-_h ^;ԇ|iG=_Ӄ=gh~Ũnnw,}pdX<5Z v+;dUuU֍}ۥ M=8Uw㿹϶>kw/Ie(~7^.Cdgր2LGح>*?@/x( 5>oA3kݾr5=L@?8 4w)ࡶ~ JA"2 SG0r?=k0w;/F`%d|ԽL7߮uhiûa~,SQ]J ΄>#@ص4Sl0 !b!=Bp.)҇u%$<[ǎB +@Qkr]@`ԦS VR\{$M0?U9z{iʗz,EKW#:on$2'խN 53}[5-2 ,8s6\`(o蝝,ٲ^ 8̶w<ʦ \SEP{t&r#ś]F&-s^>avݜ"S%|%"sU}1D R #q !u'_N&1ɬ\`8v@1s=?.SR0`RJ?pIL|[wuͪ$ZU9ׄۢ->e} !mej_EU7.xX’UmADJ; f[h C%>;tɂf@DZ_\yak//SYJw(45j"Fo7J1:Uyt ]2iۋ+c;a&~.6"<&H8LR񳞽r-zX"e/<*uvn/ cn3r^jn92,ܷu8vHYMUyAcÛA,6ӜV"(1D#YPq:Er%m\)tjZ,sU/,+qs%t8"$$}KM(]@^Cа3O@&W%T2/j;rTt"HfI _Pu+gU/3xo9Nh=\dG95+/xνP5 *2h5ic{mpYݝp:.8;3=QgVK<wBEW=ţK p NCfW |҇,m>S(Wx#^~r |o4&  S^SԾT[ng_ t !n-I|`yRq]vH&܄1jc7µvd*|.L*xL+FCotΑXzG7knUI[@p­Im:yuDp;aa CʉDnM3:3 &"L'k dSҥȌسJ]͛yy5"G>Rmv+w7.HMV#C3d B =Cz{V0K/P48=J%`T ^3R(<̇PO:#Lge6maVLc=SǮ&&;AG>w/>)>cP3SޫrZv(WFor?╲JnPX2/y3N:UL D!l7I3ԡ_n5Sh/ٶ,ůO}l3"+UN*m >AWAb'~>=70nє7w x,~Pc |OCcLB<ft6~ nB<:hx'S0 cv XW0y/Y;xcp+%ʘΟ`We zvT:%l1Eir_j,uϊd:wrNh\D>L8 9gՅEN? M$2lz*^ Po$Q5.gJ:nv`{fB4ltҡT@(+ّuĝyԪWv|R |ޕS1UNU(QL^:]_[ʟve{Mjar,FU4>[j~6nLo|1yK7 /TCMwyzȖ2~ș.0;v@ٔgDu8pz!P]8ӾlsYRP`@'r "WL`4RtK0;'z^XBAöQm7W|sdTyT x uуs`t6J_fX 4^~]iNJkuo%jY?>NJ wP+Vi{D7aKprqҺ}lGkM,VB?oAodj-vߞP={a1 y! M䀳TL~߹$;%M R+L5 }I˼S6!.ˠxRIq +Ӻ@2[G1G+i:#dlͷ5΋$Z,HҐHoE Ĭ K^,ZC B5h`Z\1fC L%.^M{3(Sٙ- 4>Tu(,7 mMNY9ݦBTt22E슛4gAtk(G%O6a`_/r\я 4\K=wTՂ_U 6R#t|EǦM@2;IlkSe[J>ggփQz(75ѽT,E(Kdg$ԺC.!}odDB3~݊ 9bu2l4EL^Q倻'W3tl4UPGH6E{d_(>Ǎ-eQ_0Z9W;1h :)Fwh[v%24?tZ HR|;Xğ I11:'1mf f-cND;'+i')C+)&2‘O~U&"OBB$VD-[١+|#&IA{cAgDߗZUK[K® %V岸}f0eky-$:gCKiUi 'df͍}oʓzBS7'[^W 9e%LnƜH]T AKs"3oh;><ter WTot@([ A_iefUff|9AJЇyAL1LNڬuRa &f+tVr}p칺,:?D Ao7K9yڔP!hҫj[fiE@fv|5Z0С/p۲12O!m"B+1|jA-}!'2D0>_>q"k]dÒ]K^':6V2o(YJ'u?/{i\R;ٰNVmhuGqCYѺ > &jMͿ{Lfh D7+6~z?-025K_FWIV0n0Ɔޘ-$J,X$+AX^вSDsS 8s j;WCT4ʞqe6H7kU'4^i%RB <#@UuN†ӊ1H9xE*ۨ!aGO7o4)AsaNv{J4ސOYjP*,ȑk@΃'Gt],3M4pS=Af@Gf;;IZw;$DLa!Xס 훲?[ Wʷ1ޕ4̴K0MuSu|3%{(P9 aMx!HZ!POkTw;f[Ww3!J[*-\#xI4Y;`/ҽ X !09OLv%+I= SG(E䱞fg(Z )A=XAYM&Z#I~–^5g#b--Irdߴ )cZ*8䍀̥&9cqV)iLq/5Oq7g+yQbݜН'1U53jG>SLcwք#+\up騜X*b-JGFI:ʑD**&lf@2#W}dEB |+TjnReN7ai4ișe^ U`VB{S1f/HIUA& -c[?nFWC0T@߸$8ŦLt-TFÈ/ 2s=$[f Y5oRrT;'8vLR%n5[i'"J4.֓CR LȪ w1{y{?6+? 'G\ެ-W¦=J(~5 +c;{ڂPW%k"3f>lB!@ Vf-wE>`yзg |*7eΰ¬E@<{f"A=ȳxpJ%3Z?r}iF&b'%34:? $M1盏xrh\M WA*Ū;Fa?~nH~8"$jk%尌5K*;6ls_cu<}~~[~R/QBT󼘴CPِsAWe蓝 qV.hqh4$*u*d\(CĽx U mFsD.esK`pкܤ"Il\1jY^V$#*˅{*#Ji`)̂t #'# 922 z;?Xҍp9a72AKM`%KSa >3< I5}rVd="{O2T`Bnfû}dݢc=#Pp; @P! W1:a_lێ ;g܎u=mk8y8~ #E |OlCcX1'#K(Y_bY7рC9d[>`nO$ I-oDQ<?1V3n(@O%‰0_hmO$)1:}Hg>_VG Lh/"agT_zwNTybcZm$?Q.C][8ʜ[/!)6Ɣ> kWH0J7m͜hWTxA`p`'Ya3wM‡Hh9& IUVGYvGDV2<4ɣ9,lF i xf=hTJt 2?Z_wGJCJen<,:w+pKG{NʛJȂ`8+1<);Fj.+bvdn"DD',N,gK0cvE8XCɀsrifY;8WiUfcv0yR^[#₈u6*@E3]c>V5IX*l3Iԡ9Vr Kaw [ ?td YVC;vih~FcV3h3 /6B}JDuM ri 9B#wH C h=T1q'6s )rxouHP->zheR Ժ8֦~;YH\Vrrhf{*iS&@,eĢlwFaҟtƿ" hf~ ݁% &OR/q`\I3ËwsW0Osm[y)ex ږ CDAcd(!/-f5n8^&rhRV)<}e-w?;c)] *bxR(8򕶬)^G bHpq+ uf@3ncu΃vN^aO]fЗ|Tm3%\žfSG"i>`L]zd3+!ȿTN+F'z6MdG?7=^p'0ͻT+<”ظ`P,Gl4[\qCTXa1e L‹,u1$N\W7U = I,-m5uSk\Eܜpz2|l s8}Z[|-sg9 nQP 3 "Fc(RC@V!M0FF * wYedήKcִ߫Vy((XЕR : ;"Knml\wT:BIYHN0lO^Sn̷<.'+G0ԣn'9Y@֩/*wE[@I6ggZ96KMdKUܚpH܌,ۙ$ VT;d SW(+% HaDM0p?)ntve>YWJ xK}>=_ A7gba>yDo>{Aҝ&\(çeb Du]]We(bUkT/6%-. ^.y{h/ !{`Ki .t能Z˵imeº=؀PZz35i_+zQb[Ђ8 |9f 1M|m)u*iTo/Beٴr,Ju_K<!Pe2xu(by>_rrgO׀ x,x6%~ϩ=5 Mj4H~*'^-)L s`Ch|:,pwg%>Eu ;m .\xeNX@4薈 cQ(}fߨIT2V/^!9z+!YO RVS^33W9 c^Sr_k=F j]pF{ *]+>7!Y{cudYWK@Ο :-מ/s7Un ltp7阑Cmmx؍^|΂ȎZhZ||~jDEg7eCxE8Xq3n2 ;~ =Bʸ)Fr!M^"\M-ZQ!]@% #*!JJ^qMb.Yjs4{ZAEE| w0Onރy{sFX5+M <h GrmeC%l(J}Y'[yħӛ.<7|c9ygҬym}f4=Y,{ZvrFKҔEɻ`D 4Ί%8 }FNd0Y5#hi553S+dso;Hsk|MoRS8t6 0@k؜~ҎCn%I3"#й!@VJIvLkBDIkT #icL.cR Hޚ>>b'K&|;.aF ]o(Rżqz3'?f@殸4Am_fLCyurs u>[,~~*N?! aōlicNsUn u|o\.Ogg"t:2p^}yY'jŎ*=*6I/QHoB8gyG6xF;+|ƙN@yq祄nym<:xᗻejqD>DiQ2 la eqJ']y+coxg#흏)ch^ !t H碥.9hu43xj&' 2^1 7L?; R|%71U0wtWg+?ky2y[M.7!>N3lN0Y5ÐzDj?8dkNIRǓH7s `-S& !?’T$b;YZ3;\36L *+{*Nd؇{S^È\S3/KB/ʄH gU;E18=Sw){d4|{ < f!<(M9I+}j vNJ)e˴8 L{t >H!$ l$gW!4\ڡfmF#hl> օ?7chT,"3- G,'q5Zsq8ܟ\ʶcY5_53oѶ{1l-.gE;gijԧ:xa*m2$J=]FP)[_#jyc\vU8M2sf 7p/tr{BLn6Ӎ `'|$*9 ='0#hX IQ6.+#7el{~x[N$Ǧ$'l:/׮ a i7%]3~˹Y qqW^-34)D#݆^n/F]). |Fx0DV'P3m 16vQ|w7aX~Jg̞Ap0e,M?t)UQM9$8Gv-fj%w]P>p* qŔSBiAKP:Pzt- fߣ=mh/n%P TM߳%Z]$V6(Ah)U˞y^\ŲEyQeJT~ 9(U':Uzu-[>}<{55@<3u{mҊ{7=VL^6I ~E2#I> ZE;o1;%*+E bTj`beL9Ҷ00)ʒ4/klza$+Tr*ME!m4f. F+F!nHuX=~B}E2:ߟTLU3,U%Y28U))e$e<`5dKh۟k-Z,ftƖCwah6#8VBC,fzǻR@(Kmn FF=^0o l4Z/ӒҎ\ё3[0/T(քteUer}>3ADHcďC/K<ȫ5!=6pxPMЛt~KGtKwqlg_I& #9o,ppKR6du^_)AX`8:ЄAK`k}* ,^*fK1=RmȮ$C$5g`1 Ap}T_ qN6yIg*pި&`gdsEe4! ,>ppkuO93k̻Αխ" )UWNn$^ďɷ9(Z7\Birh~3Mh,1r}~'P3BpZ/jڽ͚Ln]=WV_}Bj2NaJTVߔb,E*E@з hx>:|od#vS%)!t; AEOО*hnh%MWɌs0~n B968q"Wˢs()KhQ_},~)J4$U^%}K %+4~ j!4K0ؠ‰{RB͋1MltyͭYΓi#Ǫ]Yc xv9hIdyt?ꦩV}֜ft!ɆviƯ{UtRLu*U!߹.ڪ俯-*SXi잁V7֒t٥>qh=A4UJXb/+wNew%X,3{Fpf"U\ġK1C:Au9)Ұj﹔h s[Wn rM;?8iCprpQ;v݊`AM&ƭ;?8qE[GB` 'c~UI{M0Zu&l" öW1{{&YiUPhgs@UΈY/E@I?J&BJIŤZ-`[i>`+9ݷދޡ&znfS$NVmotZs`&W)yW -6A(H cyl#2A{Cm֛+_*8QQehQ~- A$`Cf|'o)aCGVuKV@:Nww/fEgICy:3ݟR%i.䁟I?زU(X\ q'4 cx!ܲB7J$M jxRdә{W[o@>@ֵ_h|3{0Tw*MsV #T8s5v=.QńuzljͅVo3Z_qe APؘ<;,Ucy.,C7{Δ xt-(sFpnG'9nq1 4{lpN[z_?7ނ0k)YTNy/xUVaKe;>+gc,H AHKڥxiQI! AX\ krKuF˼y9|VIQ+hs~c37};"ź^PoF.z¢?t?ʡMpc,. El|};w۪_aaiǬh׺K[ؘ)H$x6}@` HM(+m+G`81޳FFff~ȖLtN.m;ÃsnIa.YaQ?>'L-aEq{}@H H,4g)O܊e)HwK3c^Zr N*;^y2c0ٷ)hћ[4[r c-́ 3Av5K[A|5[id+myԛc"}%6(Rc\=ؿ.*xBmdM0K?O I6r,m&/l[ y+;SzyQ8[S⮝d wˣw*u9b6wi%j 7Ś%Kp}2IWk:;AAx`֎HAG-t~.J3x$T?N,D7tVd|'-4T>V:K׋ dU?fGW24(UFwBfʐR'5,|>CZ`Agv5"0Yv):Ķ8UzA|͸cVFLgYj3*zO_. MX6=&5%-O=O-$+XtpsӒ76 j/  ٍ6]ьokJEeC*6vFx0}ۛ{,,93uJc.- G\@4gzȦ Z\Kbl :b:4KTLVhPC#R+WKeQ+^T7hpP8ثayg6J/a [z-$Y[IaXad?ʅcoE$4XUx5=I[%z&-ŋVʀB{=95?kgtP@ys7PE`Q%kÍ~ 쿈caΣg,_IAi~kzj? HuP3a^XGVo1Bua@pಱ=~!->uާ:Ӈ/˺j-ژrvKiZ%]+*~"V]p'eH(Zu؅g눺Śa ՉZ!$C!ݣ>P^%>.\ 5RjEcI=/aJ ą -nLs߶$aQu '-K{ic=.BqC_'GNf>K^$ cU ] գ/|܊FIZr&[֕z0}7r_cr)ƘqBpYؐ-5(E u!!F**\&^Ж*~80/RW 4s\t e p|l24"wM`Z%eS ;1;a*ڟQnJ^R%Rf3'^rՑzBCi!!DbRLjk)`Y=feCфǸÃqTc#88)ZswPRXZͺlJW\> J+51(:W~!xd.R  ji1շH}.~PN}X KO?<.A?ǸH0VhISC.hK΢;:a<־SepԮ\莕6'z#6.+sYh}|MĎ5, ߾^bG22OuH W 5umaq7~LoNK AnD%ɣuYp=7)&t@28~Y."{i_NϦI^ݎLJm6h`)H=̳, -%3n5blk=H ;!MY:a6Zϭ;C.dlT+%p4Sx;I 5)@|՚&{&Z5G'+jEUga甂DrsѢ%%ڞ-Jd iTR*EE`۷3h*+{p ZVUUy iwf-O?iN>(BA#(Cu`D<}?}e#W\M% QϤDQ0JdKO* /vXz}׆gg'lI$WͮV=ˢACMbs&w~;"^cta8 &PeՈȃţ̎B*;)VmCG[ݝO$ A#K31Ƅbq 02GqK<֗Nv?=-wPBQwOp 9sΔUVutp/Gw;(cU{4&*5?djv ;A||rMbn^L| ֫pt!P*8O|}B AK5"0, O-EhR+~K;-@faT`c|3;BRp%%/$H,>]Gf+Mьs2WHsfx#c{ eYTE0Z 7053A~+9e~qEHaR޻IKɳF&ӶRug͉*~Y^C *_{)Q p ׸ͳH 7>G kI:2GO^ݝ{e_Eunl&l=XAv4MC6͈=]$i-<a:w%s˞W .? +ќh4Yb `ӫ$*e^T_`b)O׶B_xE~DS/쟶eyGTcKa4uؗպ~I:Z +-: Ueil e 5!y %PO] @xGZr`O RAt2/]0G)9XW6wߨDE쩻YmRw9G!> 1 usM,ȈPm-KF חzO'Lm,կIv_D, q6ޘPbr jփϙxf< cjT^ >/jI67$fT)&?t _2&OdٓjIoHef9ǿ0%)MF,WM] Έ(ފPWvLYl+ap1ǒ?F`Hh^eD‰^QD%}fkw0fN1(>Pqle%@f.ѸΓbۖ9A1=n>#w>_6#E)"*/.ZV\T:Nv.`ЯGJ;pt,SӚ2e!t aJz7i'#NFg ˻(;2*IӹC)?!UCf:*LH0`t'g ^Y=#Jӛ&<.:3wհmTph$Hni^φ2kUL1ąoa7Wݼ+ QC! Pe9+S\/G=e :Wq1(]ڛP"]C r>VsIR<M+_<3oЯ&w: 騪+htV3m7vR)U!*1B2;ķrlM,PK3cZM? short/F2K02JJR28D2TeE19OV66AL1L2SG41CQP8JS1C0U6O21EI5LNIBVH.XMLAE m#ԣ !#.yS1-H\Huqz*مv@uH&hu4Zխmo1vz-\DzwkfU>9kgIL~dF3Yi=8&t?q-e nCn xk& MePmfi4~4@.bL>oO<*hY; 6PW&Kg1m``5ܓ:TRmrVo^߫-P'@Fm4EO9Mϲ$ )PK3cZMB short/F2K02JJR28D2TeE19OV66AL1L2SG41CQP8JS1C0U6O21EI5LNIBVH.zBlob3AEJ3U_e~I9zᗪ p3+FpLh-Zxnْg{FmeFU;٦l-D[)(}+l E^a._.8P\%g$rhUL!1pi?ܰ .@ 0Z >,am`c+)ci8KoqpK3 4#_I5Iۀ=UNSX!F}Zb'M1/P_@%gwKprUvY#O0X7l /}WZ3i3l"ۣq]bj@gE0%J資P#>U6DiL3-@EӍjf@qws.L@eY ıaA_ 07aFtA y<̙A/x5OeivtVr?QQd}]S0 f /J\+g^+Aw]"7K|wO Ȥcc݌R6#ԇx;3BL}tS 3fsvѓw(43?<164PPVAJ[њ]CӑVo[i|I ,T?bt@ys-H~Ȑ"Aν muU oUhpOE6$9YETֱȔ}+mygƟvoT=dh 0dŢm!X\͛Wsfձ QNhh-Gv}eLƑM@|r#lcT(vَqδ\o𪇼_Rgk: _5g.v#68x(ƅTm>G}v~ue6Q#P[ x&{}zPxqO*t"EN(/pc΂CIRNh[ ԰:%p",Hk *C9eoZK>9֖:k91fgO:ҚGJ/խ 7; f'6Ij3$qJJٔQ'wY`, ԋaٗr.B6cly'7Ld ÅeGR48a툵/ KfޏJn9a0(g,".K8(Ʉ+ϕIOsi, " r,?=AqJ8j'R"H;;U7IܿYb^^nUg:&XUk$O %-7`>Gzk$tz-͋իx:(L7ϢCa+=D &{&EK >^~ë,u9nrۏ F*]a3,5nu^:iV`*SZ;,9C}S阥jF]D/tMKkEq,MR|]I4 Lu %~(oa)CU_u;'h5 9³@r?3FMIX2ĐM'кvjjDMqnc圴Cl]'8V#p)GERo7;wi_ |?FA VsE=6%3U Ճigă%s I]GQ}ӎk 9-)3Ȋ[U=-j=c]xldHf]Z0D,whCfF҈ݘ,_W4>Y V&ӑfg>n{V'x׼E<^#ݛ)ԅ/݌x`6'4zNU: w,~ږoaoKh[cSM@y}OPK`u-׀v0=O0uP 1E*BH[AMY3+qH2͌˒#ʜ`WR4m,En1;5J3u8&yϊg^Cgxl")О!_{Šf[tZ6o$[AYz$a< WHmQ'vqtߎ*#U 7$22m s]%6/+7GM/i/pSBy8MB>^^N[LpKv>bRWq-mfp'}ԎAҊ'mz\Rѣ"9~EPn;b&C싲>"zZ.k%Ng tǎ\m )@Ta p'̤hSʎ%pC Eڻ=zjt #?H&%)^c.iŠ.{`f 18u^\š詆S!nxpiJV,oɫE4/S+{>q=;2T3s *6/Kr9wb\ktY7mJ9ު^m^q=q A`MFj 1πqg$Tan>i>kϰZSf BְT I RQU'`xmc{_) za:aҦ1f0&̒x8{.6@5QWb7gM :: UDC7 A0HAв9~d"nh wS$)z{4ʅ="Oia{`ݣWߍGQkM"\ y1[㠧 DU΋BҒ3Vgղl\.R?(j\LP((+Q&z zmBy;7` &M.%&q+^ x& ,`U,Tb@8@)%u2v?b~d rR]퐢 : O:~74DY-<[.L&j'OvDnDz' 2k.I0b |ZJ}sIw<3<~sg͓1mq'k2T71cɜh[y0;7ܹ\9EV(9 k{ɏnqi딍2졥-TǙxխuW%JdbVjF7pO-\P ,sXe D%h(4$G ^pՏfyYI1h tOYDQk{)%nWWI>gG6? f¡,ckSEOy>G3vBr%WoWӍ#WiUO? [HzȌ%3:Qۀձ'YH-M"h(`SᵉִF4bp/'r_'u\j,,ވi%m?'&H6pt>G;t"wMBc6>1;pcJL֥w" Kb{ aBdwƪ<-EjA}}!xl&8QBBETyׂ^4Y r<~2m ܝqyVEb4Y}^GKk3Е,FZ/h31&N1!u2BdNj Fm٦TX8caўl'H ګW𸏝,2 I =ˌ$Mz^atBN\:sb%F9B±gtӴip-| =f ,;*rxsȘk:O佚cx*;F٬1b$^Pv6t z0Y3-WrZ8SddƩn}>unlJ%>z^}KT}WF* vяⰩVN"oYZ (-k]`$| !! L~E"@&)?@C1WifDdf Usl93 -v8hp$0`,vsTbd=V6]U)/=%a(7:iN3Ѧz)eW3~,<^Cr6Joknp\LMw72cNCyd 凛2y K`ו-"T2}=?R'\xdaF|dxM ^#8AKEB,V5pYOB]@$ O^6b_] [=?z ! ^-L0 W.v2#U"w`v] Tfu!>vi>@2C̢lSnd5)[<; 9}I Qw=v߾tӗԓͭ ^1cܪ۔& q=e ACжؗT5DQo~Қ'sheܶ;1LA0T1>Ҳ$h4ԴSÕocԿ{Ncx(g/#'6)] O̤ۗTߕTk>D2‰k/&[[Fځ zEc ] !%a}HA,wBGl'8>lU$ Er@E|yKɑRf/yBNF./><%MTQM yV/gD.uB94T@.jKC1;x[Me,f/.Iن) ~>bz^Xx` \!"q{muko~ԩzdyQ-%{rɖj{ 'd~=/&^Qo܄t/0Xu5 5KPqR\dP*t#ޑi.Y<(ZjӰ.}aZw\HVҍA?@(Fy'_n]귒N&%QUv߾h^u*LLB*gBOPxܬ">|meN;"S&xch23\,J[}>3__l~zzs'ycم{Ԯ n.eď>d#ć =tUvn}{Wqs4ĖW.P+须*Ulڑ7@@ 2҇\0Bas反r{  1̥%r5uBx9a.=idTrNɄ"aw>]WtM -;]{8y=jIΛz%!jY$fQ L1 #kKj}`Jof#\1嬭4q=N_.W6Ǭgxp*Os aoY鑭lykM"홚Fpo?n"Y41٣Ō&F/|5*:|(Z@?xpQ\Q\s@XbNgG#x6c$WW-SfUj1u[Q~M12tBS\-Rvi41 f:LPàn`-\Jx&g- 80k7Y-3D(B䰺 x~Zr 3=[zkv-XlҴG>YU,VY(#RHP@h xGꄗrI؁ 1>@j&( ,[įJBKG-.[MIG[!KX>a#rv&&U#p<D̠V4%{+ ~,xr46)Wo,5:3-\a{{D'ZBlntz(}2c#c2\@eE`6X4o] w_&~e(z_[8ΒFpE]z_\Q<$-Q 1K{_gM; nc+YJwS5י$,C@uJ[|Uކ8_xmLcgDxVNA,kA[aH%.R&Hgiyo,d$|94i[VbVS:SR\ ~#rtME/-'/ <;7bE'U `\n[KhѺ6Y _!BX]3q<>*"m[C~,/a_˪_7R20{gH 2-L6ĕ$Hd@_ #csMܢԠI{qB(c2*x#zxqi ?g,2LpG-9᢮ T76SuҐXDIF8Q*om?{K-ڼNDmn!c9aYs ( \M3k# $ K{kTV:n;.3 ^u<(;~dLpĢ_$sPpj2DWXԱRD=yT[k]Hh~Eumnyy}Oe!V LX["X_ᬻ=0^>~iԩُSƒ_ZB"`/yfXI}G ' Df7|j ԭ]?(HCe;K.AKj|X_Lq[e5+c S-(~"%t9U#]%a [^-i"PWv3C€"Cї>͹!$]ByJ02psLq崸b%R;~ $zn􄢅ù_O$fPHʗ="61jբld;u}iXbF0((vD(AȽ\1 H=O\M8JRGy n|!gOsQ~eAJl: ظ\vX[^0@@"<=hY/|k1x>߉0a$-ёP蝚l.o5^x3:~[:cO ݏ[_A_Qx[ )$&  %Ex M|0Qw)(0,(fwj")9.Ko1\QVM~&2g> GB`L2(zqϫ]V!J}5C6<</.VDQX" 9>klșWT-s09j\qe C݊Ws'xaD,E $kfXgq+Xߜ%:)@>s7zːo1/yt)q3ɘ`%5Hdo.](Rsh AYw?#/ XdbS PSh2>9t| gԂvku |="dҤҬMy(% DH:8۝4AZf&/c>DBgtI|aݤ*<.NĜZOqpwƖPi3?? 8o_ۻ1j)E*ſmh1|-ΓB728^h%fw׊Liz CO:@oL #*#&Go$'Nb4Eͺ4-X^x':KPGìr*BW罻ci ڼ&%LZZG0]jf{=kUg)LC8\~oy-v $aRu<ݟ8P*A$K[ ƲD5-ΉNN lKzжزF~thQޤ~QvܓPUWYk,ȧd(E+ `MiK|BQB52p.sQg" ,+`Wc3LBN|PWHH HI~VY $[CBzlok-KL;0)zD۽a? 2* [0LY/dLozf"bAUi$!fooĚ4ena2O]/ϵ/8xkLI2$`Y4K%UJY )@J_4$%Ҿ<'*wzׅ&(KS\N}5ZB-e_[} j#,Y9ݖ(&! wyM d41~t 6B"u>9d[Fy2a]sP>Sr5lZ~,eͦ؞ܵPz>`^yV`sq(% BѶԹTQ#@g1ZuMn`poc0MĬ;ay%JEZVr.Uʝ?BzC$kQj9$@=,3.9c@e "ym2%+u[U PHL"yVnxN=+^1xQ%WF?P[0]Wp؞y15ՃzAU)Dc^)@lA%t82ZBݾF6dS<A =;*l[k/iQ ?rL(/&͡UmſެO#WCiA;絧5\ψ(8Bh#X(*S9|,o}YZ;ލ_e#n}F0,]v9ze%֢qWhS:"|GGznRk/xhЀ^[PY&:x#%+UV -aA9wFv.W %DՒm{%>/rb4땅pe#d^- 8} Ww;P) .Je̅ff<םzQT\Gۏڕ0O_"0;c*UR=9@Gץ0Hsw̉Q6+0D.F\Aĝī^ѪπmוP#ve=]#:g"[(Wīs^~=1 =N:kS/c:MlTv0)oThVQI8K!:=osOG5JZ]bifR@dDV`EqlTL+d։?8;멜!ܘOtǂlJ1qhFgS%D-,:@ՈzF(^^.4HTtM՜zzu|uH "ϧ86vZYݞrʥ5 h.I9v';%`,n**33e[)Sc`źק#Eׂq`!B ? b >w;^8*;c*ٹQQ(t maMM4.9sg.rT30%l=̜wq AΩrAhQBJ ~yy,+W7-R4|<&u%V"KWaxv=˷1G)M ;SŷfYC/%(C|* hjyperyT3CJ%i23ݞq<5,r_ĿwӃF5I,*sT_L$i*Z"{Ό8栿P_=x԰Y៭Nwb۞S`9;+Swj6I=/ZvAX:K :'͏ .aLx<%qP$슖ⅭqS3'Fv¬8~2[D5y؞xt:  Ӏk;gf(D aܠm ǁP]Yʼn?5W}Fq^+5Mﻠ MebX\,痭Yo"8 pg0aҭoI>ro( Q0 Yz|b"SSN3%~%(s$ gs. h!^.M6w2sdI7qufѮ  ڤH / 5u`N\/Yk׼{ m`OTOgt-u׭&.<$ \> 猪~5AHP˳וR68g2"d6Xօo."h1p<Ɵ>*J?TexiMB8H gU3F s8#\ga9N(Ms[_\?%L/qy+IAGŹ%cW[,;?&^K!>h[ryq< nEi5!M?AHI(WMP!|[T_×쿟9Ƽ,۷1^;qF{ qH@rTiqxajEn{6o&7RgS|xv!}&ʘlUC"kNlZlb<%׋(ߢzDY]X Y;oɢ!h) ~$(d]V eJ؇̌CjV`.<(s~@;>/I^A =v[^j0f\lܦ~v6h -Cd ݚ~_P^.7AKL#UncA<3 E,?rqauP3HE3?꛱ &:h?ccU^NwNOBd14] : w<)־̭ ѳ h>OrT<~=;Ig]0xSčӧn3#S0x\.GaZ{v@@{Ɛ;7,Y!1)K>t9eDT| J}~9:twڤ=6Є[ ^VPZxٷoErM0HŠOywc/'bT|_P6VgIdFsz6%N?v:*5kg9Z6ӑҨq3qyc ~Js׮؃EbԓВPQ(K yWզ{Jt^ywv(lfbWفFY*E؋TbMN&)½ny|J"ɢE\U-Z/FO|eՌW#7UM>Iz:/L?e[+h݇0%!+.,5Ww׉7*mӻXBυfL]}h4v.kpt=F)/|9er%v! *cS:DIkϲQ:8e^u证8 L3Ed@3p_O;~ws<)q^ڦ\}]2TMA82Ƿ@9L%A*}yzY 170/$)N`?ж xfDMx|\]{)01^FI,\giUw{לsS ͱe2tG;n[Bc򎯵^+rLdzB~\&mLd\%lBnd0Ea5+9[$n ~@L9ڄ_<8C"t U>cf>gQ^u ["#"> c熿3fO/sg ``"nAC;%D6X8hHk=ܡ-|2= N9`bVCyoߝ΋\W Ypiv"9.B7؅;+flAYRkGb3Nm u:+80= .BZIO%!DT㸤vAa ǃf[~4A8W&S!bK"WtFbR-0z(7 /<ZoBB /PxZ:})`A>rE0|^ս,(7 ]|Q,&DO+ol)aq1bojz$^@BDQ7AP2a38bA7eD/8uOR0 ?(˵x8lU`A08$"RIWEbnJ' VrW *Z2 SIRkBݣ!w y,1 I5Uo~E>-Zd<jLC XUi {D$Y1LwzSe$}VX†@L:~5V/Mxh'v.MGow/LTy.0ÆaJdUݫc*|#z79 /<9ckڎ2a'EIP%ĀbT~SM-1(9 }UNZxOheꌮPݍH-[ې1K9_ (a*p0Qڢ kي>_E¿eA5cRb)þ~v(!%1aG)eŝ!\ԸRc!B/&-u: vXb\a@=J(m Xٞޅ g,4rfw4 *Zx?S};oxv<gf8mqc<".P$eC_.۲p?R,q3pH/VB;*K;`I!}UQ{,텾ZeJC?'n _Tu61){[e\F턛/oexAIQU-]FI[AotȸCkNC{EFEk0 ."O;c dMda_SX+5,ӹ2E)\P]>}= 60igP}+S`̬!sj}G :-$ى/r!6^z[Rv 9k R6(%#~^ks=5tW&n?򍸣X Lۧ{2 5/숉 J.79*ng NA*UB9`D~4?#k2 Pɂ{ŽqOC' ԳZB Jj6bP(}Ɨt~4Ͷ?&[r@A'Ixr,f pA ȝCR06cMә],⵪c}ܫC/i46{;#=G:A2b16ycDm{ItU~B cE[Bh 6_Oߥ?֥hpHZ5\:> 7% mB.5=í+9jgDI ]xԐ:G# Hk)J w}N8r%.p8w~}!7يgg~7%z>AկTib25ogR˄xy F%3wRA皟'|)>3<$j2顁N:\ Mzc/Nl.Qk xc8QB ^3b4},rO@x

R1k2/?8}gߖIhnޭBKs]_9xTCr&2Y& @*[a`r|a@C4BS.k6V{aeJlKK\X }lndw[¦lڈ>apXjj f|]a^= LF~aF1y4-0v7iF,fŚ(YD]b MwƃwխŧFbwF yMm{kgVO / M® Y6E쒭%LX|sv7,yd{ߍ3dew1t^ A̱& m{y7vKG5wғƕRs>.C2XP*n;zLȘ 0ey90'Amddy1q"_o9^t*4Sv,af V4[T ˋp '_b-Cx#9+3Wmg?ErZWG 1 'J^RMnM,d~\I)9w1@XwpT${5ԇueI~+kq /=[Y2:c=X2-*F:ދ0A˸?ՕSxT y8aњcm[G+^g9r7#\?:< g. xB.1P2s5K?$aOCuB r*P_EbJ4uh͋9! |K`ȓrN*ܰ-C>h6?0:EjL[,;CZhfkd6xh2nGj"D14 Ӱ&X?.8nf S`E06w/e?@—hKPKP5f66W.QW&xmT.o2]sϝ'L@;6_hJwPJK&v th( ZT>gm1^zAt9]A?P[{ % ̗*iBݺ~p¡b%U#_ ~Bz,3OdwS I);kw_}:\|f*xiaRU`7`3/PՊW$w3\ PWPڈЪ7ҰM\S8%Ncmkɣ,hI̋(3Dݎ)q/B)PׂX3'EY8K<+jȗM$}jo՝ 2*c@_ךEmb Y;Ul=ό,T/vkm*\Jqy_< W-ZR"5˙gSO9Jȳd\\c˹{ufv_ R3:⫝̸!^`k TƘIɎT\ZWY7l6^33Ū⟗]D-N}b~U5ZO  aQ:N~'ں>$|84aAcpbSw qڭjoy ^Wa+z1:7K* B̈7 M8=ĆD-k0^A[׉?3>|Cxͼ{Y]uB[(וW6D@rqO4ɐeg?E@VW |j2rdw"c#].q-Y6>E|N\N>t{/8S[+:YB~aaWyY{t߶jyV.zebpHIyp$vk9"yT#JtESd0ӏi[V[rXP>=#w _BL凘|τ1:ut ̦du'X<܃'@, C n)hT˾1{̱I $bW̊Р3 \}=^ I6$.5==k0N)&9ThM˜JhSb9c@|.u% :iDV㋋|FF`*G!F 9Ogc1V5V7_̫/)#KL旞;TbMq )tfX \Cv,k#v/S =T ٨}b>rPg͛3ݩh %ďu yqF-tˢWO,O2a'K1F|X@VM<@J柟\יִ% +Fbpko$#7Wc}vA+_|"";k r󹕚.њ?sjxx^qw5Y̺iz؂BN=kZH=>DUm#OWnh˨(oQ΍1e 3dQ8bFE懽B?žޑE]1T]{K?DrgdIr{|Q+U)YGH=1a^z) ߠGO#mNũL,-wO'SXhgjy^%ͽ7iLKsYqtnj\ZZI +$L{/T{w-4dE Y⣓cu?&A:#: ,bG8  V/Xb2⶿?sups0G`Uv+bmܨUfFj_WD+TL݊#c ~„V]Wdx<"\tĭwJ8/J=MhnwY/*Il,pdzH7i2U@}kCTXfp6'~i ;#^O^Um% >BQ Б('£%: lr3M(zJ弬s:q)=]xܬ : ')=e!3^jn1 !#f\ծ/Ln|s;Fnj4 & YDV3t ;H {1yԍKw l=orn_60`FYW.uL}gz>L/@T{Dp."j^(V r UȘf?Xxܺr#!ү{rN:x[xh&}5)_?Aɜjz@!aOvо{g𜐭lθ~}C>5hl'X[Mr=U+sc+?E^<0(y' )9z!`}9Zhs{@r, N -Z 7s3v = /5Yvꥷt3%pb g6ЙU>U=£m,uȪQ{)|$Qlmh4OyzXg|{6e*)"!ENbK AӠOfHiwvfM?pt}ڜ's [j$ƒ|xxǛc;޲ŦQxL%g Z4l4i:~'=7L)G$^0(|}h=I"gNwS -0#wJF8&0ZLr[cqoVkZ{9u]e  ~xls#ixa_z?a##Ɩd18vahK\9A4!ћ>7x T%71%~A4pg?_n9Kۛ;iP˕};ʅS 73 ZOD?(-_Cy}|&^SX= c|K/Mz`]}ױŠ5,?sʝc?t#dl¤A>b$`` F}T{z۝eUԈ%F81Ӎ1 aMSE '`l4*%b]TJR` ?*QKNЕ2?$w AcuJ"i Z ,a*,1^zK''J׿|wA (` 24Ur&ť\ ?;? ,L;m9dn8))d%;;dϤ}1v@yl2ZDI{҅M{.1Y ,JlΠLKxto6ظG*Exb,ǍQUjC&7Pj /FLgҭkpK,@.uXCA[tW\Ӧw`s]0$PEf?xvQ[;rXxEa͔Z]RHT XE>bj#ۙ޶h]Q v~>HԡY g$dȞlh~q~)I)^\@PRg} x `7;wüh.kdHm&CE}݋sT-zco.nglPbzZM($xP?7gv6p, bU7s3)PH߆T(Y$w}ʞej/iWvL_šDlqX^LVIJquv}YkDz/-ųἳV+3fIvB]1,|Xl%2 &H /,[|UGChnPqBRBdw7TUdŚL돈[ xSڵ˧R1, ğ='j-W=.> 41R~"չvdEnKpuR.S`3:Q:t΍W0[:Rf.-"TyU:rH~]&{,!`d P%xDŽ|^W`?]ٝfZn*bn(HHi\Nxy(O9 Ozpلo"lzQ 0yJ!J$ٟ.\Hyy^mآµ3;*/v]t_Ժpv@!PqCSwBO/fl(LH katk. (mhRrMs%JUڑ{]@c1w@a!uS~ĻAfaPi˦OɿvJMƆz>H2B 3A1L)CrO'rĠ߱۟P]w)\0\k¡>zSr#  h` 'HhKO>LvI_mЉ P¦*泗Yy`.hBkIe N>3F#5P !$~Wd]㿅!IR{TUIWs& ً/׾,Iw>.<* _a̮Vouڏbc@]0@)5\?pd9&ZtڐhDd+==((<ߛ"ƑIzR:,9K7STEd@#.Q6@tv\l` 1f(SCVv"{d vI{jȾVvz_$:Yli Cr #6r$q;jr>4j+![kp$iPQ[I¢x¼>c'ډjU}oM,,+Oc6N@D3lŘuLd)K@FGD^Az/_}rp 'E/Y =Yn "I l /JuS_dKPd+C<, Wґvd~nQ(<)qZ˛1T/6Z?_{B&!wY@r!d"73GɳgO`y$oʤhi[2(-UQVp A3zy4N= jhMz$Q[==w&M.USnTht,w:œ#QZ{=?G,>0&GUkU$}Rq^"|>t`/<%znj?y 5`ǁJV@:ş*")ucKNCEܰN+)z y",CY$MaE74|;ݤJxd$3~P}2jfWI@^Cf9Yr8]pь:Zv6!hY`֒sW/Wɉ8Y܀ϷA%C奮"jJ|Di2]F!<ėXK3CcGf' fOF>NJ,X UI{.7IX!R/s{j.TSZ+WW+P'(G6;m{qQ}i& CMhK5. W=YpI}wȮp;ECc.ql>  rmwsr ˙h ZPk۷o!DprG2P^bjS5^_Z6&W7N,*[UR3óe<=6 SoTuA@,S@x[Y UwpM=Ps4*C)&M^x!5Ɛ=a"_%0 -zˆjNu Zӛ/YsچY1ϓŰ>{[];%HӃ.&dabZesg=m-s=XԮOymNXr?;4C6 `.wShD RQ_; sNeM^Vx L{6U !wU ASHԬ 4Zy-Z`K"89VC]w. 6$dj2Yy0urh {KuBCD"Wv,d7`-1h-F~ef*Z^\OO:e[0[Dr 5$?E@)9oϓJz|AB"lV1rڸԤrWO@欒ϐC`nBF"BZVTZj-<, O'5|t΃kOnFahs|d[hDn.:浞RxP;!7/,=,HɊ㌁=UU& _m{ZWH ׽"x¢O.yHlw'QQ)k7vs@q7dڑDp(`Դk1Ync+//,h 9O8NQ79f57ne.dqN@81pZaOX`P | L LI*<{p^!;MYr jmۻGas| Džt9P[JX :7Vy@TY`'LZˤxY]/h8-aMVW~+0a%TN6.emO/8Y(p2]E鍵/W}iTuG 5ti!6VtxtR+ZNM9dkHsBɬh77_AbCvӨJ -[6"m)s҈Z U 2'tlc랾\nطrc٦,_ɮV(x9>0PPpRXz8SaO<dk=F/Z|̚ϙtMfjt6a *I"_B+PiEyx6t0@q&Pqh˓@X)i_SճGhH2B-VFuE[5W8t[=ZEQ(,={ԏII[Lv|4`a6qRzYq4P٠ZѠk>MFe_*HvAHG䤻hNMQFzv8'SoO]Q4 M9e#-ͺ0kaz+*╆= Xa>  ,QռhȂ[$&ڋE?44.`XO)YPfoJԲTr.^ߕp3o/*dr59`+Q-39@5@gzo R|@/\9xYNpdnN g}|1-S#@៽]d t6.(D%n]??czV!~/Qߧ4< yJ)˹IyoqkgT %Sg݊PKt=aWw0÷|]i.TQX5qEvObPV򤰁,r"(AʹIww=O85\XYRt(ws"7\2\<7NJpѳPJabc.P-*U!H fӂH0 N(Gn)h(QM3LYP|dzlFW]NÉLcK4qQ/T3L2q>ߌ:CG|X!l(HѬ蓧hZ/cMu8H#LHzL#S ˺00IB<8 c Aˡuh*sox.[$1ϐlШ"8Z"%5"=Jܟ +j(^)1A:Uc ':\b{vgG1JQJƜB&5)֍ي:]!pdonK+a팴Gjz5mg I ZHJrnWt_?1-E%;`5!2!E"u$`13(s%,liy;QJ# _7sBo/ٕ/rHfKԦI[49|-8 B3RۇLbXgatt xյ.-p0<*r=r)I/{6lS4p"5zr!.3 xv˃u *>H5;7P9a v?,,L6\ XXdEmH pTߢ'9҂1C=Eo0 ݐ5CϾ `M s@nԕ¡m2P.`,Ph ~y`d*?#w"Y[/$YboY+ry~Yzp, T#_[J[Pdh^&Q*b.'I{-B[)^ r2gC6NS 8A<$$GvmK1:q H-O׿.h.2%<{p%m{@Ϋ62:wÅݪ~>h#NsƍɃIkRE,QRtg!?B-@cXYZe1@^lv ԝST."y32M!NAF8l.(8>{d:#m酙fxLzIOEFdv?fg[S%m%bRua'$?%(˟W 4\iPFkE9j|ůƊeV&tQΠ^Y&5r}xċ(m :w(zraEAvsWwTazb)U6LkNcI]8: GYl%|ޅ=n%粃B-xۍ< !sm Ete#0Hڲ^ Ԕ}}-+#5:4iVCWDCs(Yoo§W2wj*("])YDqU&pYwl=!o|Qw'䍈v?^BH\[ Stֿpr.>}R7j L>Gz GpƭtK7ɉ8ò]& H-lѐ&$9p(U6nW}7EjtZX^Nl9/uђuF9N1C~Z”Tnz)MoF~mX ('T*(g43Xn 4J~,F!#ZS,b §9q}I0a+FȚxa6ϻjlɘVݹ̻_\xG15G;SG\sa]p_*LL \֎'=d+J pf.'wkdy$N#PDw_KU c,f:ؓNG5V4|u\yӿ˾N8_Bnv':g/N?#xk?^b3n': ?ΑIb tvoW18?s|s = 6}%NX֍gælC?zrQI >ıIp$`B@1/>aU'kо{uOɣq6MO`^W?* :>{S|֛0GHU#U?,P}B#o΋:l)dEWQ`2S69pf{7}J-Y},FPc-Ҏ.`{9;MdJm|zk&ѝs,#[}M׷'M Кy +0r07(cǟ3HKGy>>.]w{GcvRǸOtWkDW IRr@L8H_Nu]J^}L3*Ҫ~\sm˨).Jaպ.%0^RqOFGG4>'Qe4ts~R9 ez#25Ok|[f ҿ4yZNݥJQZG)͌ĴPf@ t*n X/tΐ_gm Sk]XsW97}Nv^XK@ q4v >d TΚI@hxJy\!ٙF+aKh_A$:x2_Nҡ]~Qε?R~q2K|P;?6vM I(i=@ـ([p;qDl_!.E-EIC- qmƘ! id;%U,t˾ p|h ^k sCU'<,[K} Bܴ{G>C' Ɇqz'GH[2&mt@^Re]o:xeC\bhZ!nlw sxv`)v[鍑]jHfVrX }:!"ʝ o)(Z&,4]j@%X=3#ݥn/Tp%Ue0 ީc?K3{dZ ɼIUR"]-Xg?O ;x_F_ :-Q։xHVniFZNˮ.Yƥ3,gO<{ezg[x MKZDΫigKe62x`,% O*tw2{"_AwbY;u?W1D eyix6Or,z}3?x>lY!h,O 7l١c罶P1'I[ځsZ71Q&&i3Zb!a[0a qE? xھ8'BNU]&twi"~_M%R#s/MxHGx]Tl/=9'_CgBXS,{K`^h4ö崅x\*&y|^D[i&.ߊEVle%< YqY͎D?6jrf[@m"V" M Ia6mt5rB52gH%S!|>\OPyB۾xC^S2kO4ଢ଼P3UJI;@loڤ4>aU k/;o?*e6,m6q\]/`[ebz94dƫT"F5]!9s@Ur։!^Gè"RmlTb8NX8I.{!e% B g=]1QRvF\ۓi]xs3XJÏ4M4BC`i|{<o]2#OCT+h"N2ތkiSnK#B x+I5+^X~_gU$UNOR'ĕ#_oP~^s[Mu @%Ǽ0<fZ= 6٣Oj7NvG6)Ք ],z˃<^i~n8?R QOtl Ɔr8*Zet*TO:ZUb.}{['ZFp0qUTM8j"yϼ]t3y["`0l8'Ke6 H8$ RB8JP߀Fqi* DZ)wTrSj'֛'4Íag LjJ;[/ xH/?-Tf!WI~.c:n90qe2[k&7scϙmjV,nn7[\+l{'>JnX{­Dy(2q ˯e crbܾW$<}q܆bZXptXb:7lC6 {}͜4 QD&$с?go8}u3ӹՖ:8W5ctn}ٳV gٓ:ChƨbGdQĚ?{ev~W}4T!qfk*r.Fn\ڰSXQ&t`4DSC4E"0s,2]nv3ߍ?"K ". z2"÷~dEUS J9Ss5i*Ŵ.c!tљ]k-vMJNjBlRdbV\C:Ȱ/ɝ@LU-bӚa3xB6EbR#Z<]OD"kwhESzX9pAe~#RE-7biW\EƎ*Ij}x\nx&sP 5'SAG/D,x=( MGVmtb_3qrtpU8hTKChm^D ypx f@c<ޭQzăyd4ccIffXt,m|9t **+{.]BeއVzn} >(ғ#Y,#rq5tvˉ0e=^Դ ֋mo0llll@ ƌTS}10;2[%8;0Af3b~JU3ZrRo'7vi3,큵qQo;$\ ^[y۱}\߭ަz*7tlj}|Zjr}xfV'Z!ǜlIf}b<>ŤJS# kXW Izw*? +qv`ˍ4`@@^S -cnYm=ˉtVlI4 t:tw3LawQJa!5Ƈ37U|AR.o=X T^$ F3`a{?%\MᠵTa>8˟fAX_*EdQbalJyN\A&J-k {گxɘ9gm |I x%g[2_9Csݾ";G1i6wFu~zA 2vR%SKvg3Cjpr ,>QxJr5#xUguۃ随fndZk_@OW)K$JoXN0/@D7>(w,sx̺pR.x#L׍}T^3ͬ%,LZhcnr*1~|ppC(/a}jd%N$]ۙc{,7$64PQܘE1wN9A9'#+$uCc;NjZhW8x""́yF %ꖁgn fN~ 70Cbͨ:;moT7I,XYߊiby^}3hڔ=Nc~!I8Ίa?y|i QOVN ;iYRM^];r$pu6NGiL2cS`f?V#Ⱦ}=.idP3OdD#qntKm8Ǘ7ʯ`A[_]w/(TqQp1I:d :t[DdK w6kȫukq9tb8)v&j zid?0:NxlJ{ElDߦ$sҕ` ,r:'hCCbZ|uE}UktHmZA{҇ViKK6hѮRU?Y|8j+$7Ne?.ztTЫ_$5!} 0ݲ6r09qBfGcN0ꯓfg0g ) c@)m&鎘0:nowr [C(rk[d=;0 ϬU0Gq͡E ݄r0Sl^~cG)]hg#2LBq:ǵzu$c1mY yXrD!nT+J!)4tR.zg cُ.y ^RĀ~3yGQ)e8!9uH[dOw<vPKE1 PK|VPMETA-INF/maven/PKPK|VP!META-INF/maven/net.lingala.zip4j/PKPK|VP'META-INF/maven/net.lingala.zip4j/zip4j/PKPK|VP5META-INF/maven/net.lingala.zip4j/zip4j/pom.properties%ɱ 0=_qhP$"\k ~{͕3CJƥ Bu^T3ntѠ|`ZӪ秏2U.ǚ&;  ^O\FkPK.AyPKmVP.META-INF/maven/net.lingala.zip4j/zip4j/pom.xmlXn6}WFtvm HE--ӑIEËdIp.6O8gpH:zJ <)o?ITH1T9YPHA)EBfӯB.Kjg|fFC#Dq Oh]Kew"!ڦ6J0v],濻JVeRmsQe"9A|J lB oH/|Ζw)2s^V̝=?R]kK4[m*zU|&fp f>ZBU+%{Pv[zJwt4BoTͅa1M,X-KjׂMkxOXVKqK[[w=m#\ 4뉦c.iN;aLhΖMq|[h~ecbXe!?dtcm;6[vwǗ8Η}N8pЎ8\!WITB_PKЪqPK|VPnet/PKPK|VP net/lingala/PKPK|VPnet/lingala/zip4j/PKPK{VPnet/lingala/zip4j/ZipFile.class\y`~$dBH! 9 &FH$BLH@,daw7^VQ֓M[VWU{YZ7ofgggٙy}<6,bاbX13دy:db6D1q~7vg{u5{)\*^Ckx1?hx)^x r ?Χ{JsWkt'UV)p7hi ooRf*?ܢgV x-kxwrƻ~N/j%>=~?E{5*_ׯkxk값x?+c7thoz-ҷ5<*~G4|RçTgס 3>s?l|1'\؟L×5|EW9?_/ϯTQ|C _op¿w{ Q?g.¿W hw>??5|7o?*uj 4*c:ep ˢzTi&a:{p7Nk56^gPcEXe%PVI):|u6S9XC;?ANqh [ (B!SMkroN2:n wF~"cݑ(ݲ+^jD7F.mլr$jw? &RIlV¼RܸME(3;ăH{  5^4l\`O{]nv~44kYd?aB9$oiGI2V4Es0hvr4G h?ƌxo00NSu|dLo^9_l(f,&\P0iٲrXn8jG}RZs5o#*H}YAG %i2g>EL@x{Ly5dx[\<,KFnFqε~9Do#a1==DEbDžՔTHKKiE;g"{zLfse64I;_NJ0a^c]>xr9l.cԣp@$I[© M~<(y#G)և(ی Ar V?ڴ"9?`:)كQAX39 va-(/mQP>75.Mi\6DK I{|n&/K6S= &1gT*'dƒ?Ls~(i|kHhXt)Y܅™?7tzV)DWz@!1\( E.Noi b\_ f@][TQmkTGgQ(xHLud`6(˃:Z9kN͔#h+r(ᵪi[Dn:r!fg~wwSnJ3WxXr'%uNLhRM%~g3xeNK`w`etP>?1MAPds?rZݸ԰=i#[IphPEK/+Q{qV{6ϓ0`͹N#Kj(ņ*q)pRkUfk{]&;<}W>k>t$BxڅXW \y 3푁hy=:0`#G5gʖl9j+Yx΀K^$^ `Һ[OvˣN}< v*;#4!^_`ű<_GG#f;QY|OV>H;Vel[`ٙGG_0 BUn8̐aS4  x~h2X#;anZϒt/7a'i"F=,ړy˧j2jac%6mm &J 3> [yf#բ€(fe-)ո9}*[gVv fR=UJBb6֡6'q_?+_3ͩþXSYۄ6po ? DhFjc uhn">!(SEv{uQ']V8 a%g7fM(F{6:9$fdD45fޭD9Pe85㬣N#LiX$|$R<[:|*HkoTwH}#u3Ԙs*d[>ZRK ”XUDtY=UwnKl@><%Xw7b?<;!ajvRlVld/JS&BEсqǤo$5̳Չϴzi/[t$)oK:Wk+ئ Ȣ>nǎQ`}`? VrO v%z7Ƚj#V05d"ѶTv>Ů7 9iOFzIE&~P}`~IǺ) !ZS( 2r4Ve[)M{T u[w"$6š|%w=h,ȉHasWokoZص! Y~r sߏ4չ?/y/!#ӃTәtႱA7EݣkP>uVB}) Qh!;)~^%NWwV^%~H%-9qlh<Гo낔# R Z+Nag5S^Ze B =})uZ5cq[HPI !WOPNw}8.b":hOZx: aCY; 0g@] xQ\?ןK3xY\_W q%'!zj zW100< r~ M4{owY=4 iM%f(ь >w M~eb%S7VTzz!dEVU*4Y$v /8 nÐuh?!Ȯ<zE!ȩPArC!vhd ` M{ LKI`| ),;K?_1$Fa!?񛆠(,( 曉t?%h10*IA._07pSԩpNiC/T40*!0 ,.ht6dg[nZVݰ >K*l/_.Lμ-WxS{) &U;wto^ݻt J К -W$Q|6z#pNЦ'[UTV)a.F,$~ [0%Mc"[ɯ v JaiCyU%L> 6h>[Q9$c TK?ɵȅ%GsϨ<ՖY~ja~4Z4tp3t(xW.I(Y%%ͯ njla绅}<4s)2IY]Я!d at.);S9P a؉iPshJq9 fid,Ԙ sJ7'>$xsN"?Y}4ӊA8y|[w%,\,bq*B, 4 +\XU$b8nÅA;`R7 8BYٹKm^W2\N:<%6B~JVzF;-ƖˆSSeiVC}NO:Hc2pLV0;`>n%xfh-`@w-F;mt y)?'|5´0%12l!1 9!P1q=Ё *Lfl22;]w@lBqsА-]B[MIX- š1RkF` |!p5iZ(` F򩛡 op?;ˡ mD.\\(}LSgg?Ss&3M1fK L0Ai'hl*M0Mn0 *x0"sGܿ m-؂Ã`죂2h/'&a0 $;k801q͞DB,kb:ab[omo902 ~!8ۅ9CеDA'P!Lu2ߑSҟɔބZ| we e %wN,’i4XRR93ƫVv[0qEOmFiƓUe*I  %僰0(ͨZwD$68 \*a26` `[[m Zm ZmZ%p`լ)Ď8)IɔHG,Q&&Hwv/aTձ:`ˈPNiL2jG%%N%Ninh'Sx}I|܄$/ ٙP:NXI/J._@0 TF}V"ގQ1jeu;:P#Aha?̤ ѵUǠ~Ce?hKy !) SXNd`9 ¹lA.8 mp,.p(idM>Sq\1b;Dž 'reK 0%iTӟ+ͤ؎mf-3akn"ح0wAm2y3Wwpm# x ԹL ʙDze=Q΂Ա]K=0IғVJ_U.>%r erqY9H/ Mb&f0FBvBSTB*0AhzTaaqʥvTʽ$W۱O'+p`B,䕇H·eesBs8S ׬E4|7GJ~)8~}-qC"RN5C*ߙIFmjldl)ä#JQJʫp>b2]s:GॻoΆxo·H{^KeѪQNjD88 ʯ_#*, S%NPq5 p#%}yrm\ Ka ˳0= zxTPK|VPnet/lingala/zip4j/crypto/PKPK{VP+net/lingala/zip4j/crypto/AESDecrypter.classWkW\~sf $dc. dr @ !6Ùə3jm7{Ҫ5mmV qo.?Я J%@Mbm_>oWa4 !)Ad6Lr& s ra,\A bP b>p.<!; BzV+6~OA6|_؉ #^[:GFO {=ç{SO圂g8ިaMcQPoskt1lfrnVAKczIr H>n&rYNvܰ`('k&R BB3m9UTe܅KrT)%jk:ݻ7yt3;4S~'dhƚt)3n˜Q8l9wDjkiT@q7Nۜe {p-1.OތUPpaX)eej= kMY s.c=6V->j.x.fZ3<)_O,M͛Y: L6nrlgd32f ?Ю`]h:SS"/2ũ)&%rg7 Jag DFCg̅r!W_Z/%6dƜI \1WkO^ʰ3Elgћ1"A] )( nDAԭYc4lYv2-1Vr_ :g:Iֱ{uDAzЫ:~4ެجQZ`997m;^)x[Y3}Ϲ“mU+yK`++μj7toܜ3:~ 4rKֱW|ͦž"ܣ{Au?3`V+#=2z=½wno ř+XHQOIpg Ҷ5*Vn$n}y[nTv{TzC^ t0] !Xi>?gZbel|v.+%`x̿-qpxhXV:5XW>냨'mc28L 8NN,<9eś{0+ap *J) k ~$u?HO[#@mC1n6k]Cg'+ȟB*篙4ohSjɋX$ŷD.!D1f/k.#N+%5k DQEdg^<~!\qW'YȥϟN]XG:F wyQO Yd<) jam!0yr ec5RPnB|hV` W7ĝ}MWeTe_NYdwwbQ{ޭZyfQǐc%*Tl 骐&dpuBe XoL(;\$.9Ҟ4ߐybPKX),zPK{VP+net/lingala/zip4j/crypto/AESEncrpyter.classW_[pB4P\5ThҖJBQ&'$Tܼ:uR:Z;/۪lWw_~go9 X3C<|'6:C+` Q_1'ʏiNd=oRRvYdk{|fbB)Frhi=eF9 +&Td WRI).1b܋I3ĀݨƽBdaXK+єeJQ7.LXJ/UFRУ;|1;EMC㧕аA'V,Yx dp#Y0Yyzi2%ʼ'd|̏70+"_s`.ʭ@ckH3UT EB>ѻ I xaum /% >^=pu6ԝh]&)6iv5ScU@#ngǙxeRuQ_h>}I8)R,sD(z;"K1{X !_a\/2' vhĽqBz=k=W,ʹ')W+chYP}_Mݞqbph[>jv|*"c,/o o2η<ՅZ W$e(%#  ^kʠ?'H唫.U~wY凔PK10: PK{VP,net/lingala/zip4j/crypto/AesCipherUtil.classP=oAww|#AmPR9ȑHR@hb/ܝG$\t"5U;"ۍw9i{;;3?oEUO\*RkjO A|" էL'b(D80sBkUt*B_tdߓC#B5Ie"R_-p_g%֬?Hk'8 خ#1;@sruF?(1e& i~9^1__c! R2+a yBK*+J}dlSʵ*$a²^l3- /D!MUQ[I6,/6;Uuu<fzjתz~ PK;PK|VP net/lingala/zip4j/crypto/PBKDF2/PKPK{VP.net/lingala/zip4j/crypto/PBKDF2/BinTools.classU[S[Uvn'@CBآ@ R#:Ir 'p)>Ƕ3Ňq=:ZqƇ}Yk[{ߝ'>taڋw|pbVo0(%>wzWNR\1p' C9{lgru-x.J0 1yw|Wy/y2FTg@\SGqiu\bN0B!%yL:W5(鿎6Dĉq ,$i6wL1nB) 19k :rM6sWD1ZGh_Ayh|]q:]|Cqg( E (=\X?tQ/C,PK{VP1net/lingala/zip4j/crypto/PBKDF2/MacBasedPRF.classT]WU7 ZCJiU 6%H(0"a&G⃮%k?Jfiʲ0{9_`_%p q{ |beZk\=D6Ȑ70˲((ʼb̫>5fݷ=rꇵjmgF!V.+_٭ֽnUl*uߥ{{›6Pq 4]qؕ :TBi0R-5rSǭ^A;P/n`UҮַ^mrﴨbnBjZa}v.5UN=j JmeǶdTTK鵱DEI ]rG:'vYvy+^q;`m+ubLK3u"lj9OdV-61& sI ؄e2(7ϸ5?)i01 ^调X%ש)q%[&nKJLLN/b]h Jvh{u(ȫ:m;c#>6 v8C&OM\g&Nbį?Od(hwdS`l\S6KI!E®-֬3a{{=ϞrӾ#EUTȴDjD"@=TsJE]6&?o/OJ@2NBkkH݅`wZhrYp3[fn[C&:؎5覵$t`/DJH9l%F|Utq6:UÀ(wV~xvt&;Gw|c.;{1vk1%VwXZWє?>v3$8v+X<~L&9m# YH݁݁:8׿Ľ!g?@#)"ʪ]NvZE,7܃ '4΢鶌U|2 R19$^g]Bȶ$$Ʉ<;&fťmM?{mpF&Rw4miVtt(Ĵ(vVo;jwB6,Êt2n%2ٔe²Vt;1c0jt+%-{d\M}IV2>y~,Y2u$$ fZRMkׇ2-Hi#FRx>&OSשi 񴆞oVgc)}wx^|{n,h\,"~=r;Fume 6M VkU*[ N2&mi j-;6D[7!+ /\N1n$DfC4RӤWԿ؈mvjѝd ÈCB5[ҐR  H*!or f:Q>>yj@}E nӞ05_u0DL rE-y ( z r qg - Wa -554@BX6],evchT^ ʐGHU{;=R.v9G湾iW$y%Hݘ"uJ(o+Xo Pts-vk\y+s}E݁GLQ 'CMS9 EfC)A>ĜGh785- OCA&ڃ 8c19> q^  BAA H s^x wnH$2Dŗ }@o ݡ Bd;d:DÜ}@H~PKh^PK{VP)net/lingala/zip4j/crypto/PBKDF2/PRF.classM 0DU;i7'(REMWRGs<:x<abbB𤖆'e - -Y&I!ħWJñX4 s- SR\q]ְte|*̪ 3uFT&7DvPKTPK{VP0net/lingala/zip4j/crypto/StandardDecrypter.classUKoW={lg NZ ۱\@p IC*=IckޤamP"ѿqld4Ay䡏X}0%ݜP\jSZ[e۶꽅@AztW&7-};kx]"ұD6{28kwr)F4K :yN Ї2pg8/p #Xa}vWlf'z|fIz%}e$Pbt7B{ndm0]Y/PK B:PK{VP0net/lingala/zip4j/crypto/StandardEncrypter.classU]SW~NؐZC?A`1l2Ŋ3Eh)//LB>g,(L;}ϻ>{u'b 0C# ؃Kj2a<^_UkQ\WI S14aDm>zTfe:[r1R>0#*9+e4l[8:fK7Syhfb&Ydgˀ@|AdW\Ymg)$sCznDJoҬt"5-cYa:ʈ`1VL]0°)C ѲY|^r Ő@\bZ%Q# 7~θutMd.3J9Q|U\apQڛΊ:%=d!|,ҘRԕKos^1]y|꒣=Hz8|Y4e*f64@tGIzbe'//Xm,Qyڴ͢j2[ѱw2s0tta}0t[ =uE9-kiX^.cGwț]r I,3jZ cy8#l*k*Z? AԲtJҶĦ#~^_= %KTZ>ȼ`T2oY`% Ny5 7&.i*(+]0m?Z_+.97I8ɩ~jA.<[Iu&6']NJUM,WSR"'8MtW\&UrP0irfKT!8\CjԨߏnpWD?`ojӫC}*mB?ȵ u\U{!j ޲wq$zMI)r(0/׿Î5D[V{ztU+D5S'Fb<61#m#?/RVxSJ98h ̝AC{c$'ԖeP J~G< 3fB[ԅlMHyE*NW8:M8op (1 /kB#1?dX[EJHk#Bi?^Ω#Wvm"كz8KThf# LT#|}>>%Ƿ!O:I)a懹_ =J -UӌW_~uT8 8ˉ- kR/SP 1D};jCئxx_.iDXqֻYm> hf)$3LM`$6 1L@_58K.Ed%HK4j8!K;_$fTMSI@X{ ?5?=ՅPK=k PK|VP net/lingala/zip4j/crypto/engine/PKPK{VP/net/lingala/zip4j/crypto/engine/AESEngine.classuXTOg8Y FPPTTT&VEV;gQy~̝33=cN!DqE/JW\/sH–ВJ/[[6B/p`D[me;kZFQFGF4щÈe1:3aaDAгgڵK٣GOѱEX{B i ,m$n x.m˗ׁi]}Ǐŋ և7o;߅˗CâEái4С`̓ڷo&x:;&Z-l6l,T^޷+{D(PN[f'&>WwSBMť8vuu11ef9c N2] 8~}/Q`wtm 0 A3g@/@ ۷{pxnyMCPرpevPtxY8_xܴy@x6z}~z@e`ޒ%]-aw }aZX9n\y>sf.QTh>|xo=6uīWWCD\{:= j89C !?>nM\W2J;9@ŋArߠzraEdaxԲVΞ&&$<9m)e3mUW,3 2$Vm|ۼ#͖ݼj3er.׮2o_~~P7 9lmq`At޼5~޽!ܹjŊʰ(<|?,;4,8( -=zt*><BKNˆ#%D^֭;n/]/×ƍWwSh< wOVn!II!6_򺹕75C6$@'CǏA7 1ʙ3nԪ5   cnCΰmpF1Ё,Y`~X^h]DIUpz˖(;h4ݳg*pw-fRw\`)P>7l: qW,Fa `!wea:yr0lh$yzփn-#F|;7jN3]PKpR}ӰbdX3ujAZp3Ϛ5[| Ym2A/MRcc"ARvӮм9uYU.(cSRy%)41CD]٨(SZ 63*FZ;*X7S1>$,dlǰyhS%1D&EѱNX\jfvqƄJѱ-A( ;&bz ܭ nۖ&>17 &J$Ni<7n&c_'$)'s@;cyة7 /5555SQmMAL 4HCMFDxrHۆjQ<,i!K-ȿh 1c¢EU7ŘdAN9dq)<``tyI7*KXtTG4-gLɣ_)ߢ|J$I7n'vT!v2,`' R<,`(j&1*&.ض1>6̉V+OdeYŎv<y|2W iAY8xOl,r+++7xH=Εܩc e6MٞfgыŠ R-`xyZsBss ;G؋08Z>WsQʢ*B/NϷ:;ؚ?)@#mZd "SY"ˏB';EV76nh=Gdrӷ9[d&:ElL6[MV{ҵ)I}h5@.Ysy"!DR\A7Mr#%)Eح7Z_,S OPD:_ϡ́tfQɔ0"f M'p z 9~(&ʉ))D)O&d ֈ"8'*;x"KkQ^fAj@F4% ZeZi'S+xVНRT|J>-ݱ Ns oQm~RO*v(#P I:N/o(DiecrRZ@s*O-t+?Cih5R*+Wb R4W8\|n))U؁ qEZy D}oz Z"VPKZVh-0H[IIԓͳ-[Oca({e멢<.?U{Y-۝\W z1}/? g,G1}z1}%_sXNrϝZb9bI_Bi E~%ʊ-D'/b+b  0x/J[$=D7'˲$iOX1YղԪf^k[YY񮕺͙R9 Iku?#?hu_9uͿ.r".rE]l(#2• dz@_4E=14CEW(b+Fb*ƈb(pq)k©:BڄӻeuIeC_''9yp# 9Z|d#񑳦yg5{+5e973mɩ<^˛L'ϠNu0?AiL@Fu0CQJsM gT :f)}bB?Ate4 i37{Fsa;pdh1¹g&paHoX.4o6tVdU$stgZHmF!utO1B],QADrԤV."=5EԦh)ҵioVq"71ܧ zEﵳgx%ʪb%bUYjXdu[,b X 4#jMF[D& #~`M.kWm~ߪ*:+gX]~B`z"@$%Zpy(lꦽ+o"@~ZH4B. \Wn߅7œ]~[N ڝD~FSB[澿{h?eTM62gd-&<24o"E{)[FjgHGH߆ZcǐPa,QXh!b;b&&bfD̂ˉY (  ؋ 0ՉN+<]q5 gq1snswbnÕyџ'b1+p4ф㈉8Kbn'vMxs{"{Yz;b<j/ V?c%`k@UXщ5b0X#05[FavhL`6؏5Y:kfMD/$ÚCXSk*dMͬ阍5ofb+,ĚXs6k.ak>ڲ`k!X0/k1`-x Wc8keĉUx#ZFCzXq: `=gO^`#Kd[8P;zX!#Vb}XNe}¬ װcncDǐsl MpFӶcLӶN`w\6O41M-Ɏj3:,|{O+=Q0o>D)=[^mϓ]t}0o@.4mԯHnTN$z^d杓WF; A!4eCPy*@|< pʓW9}+oN_Ua^p砊p(8uU3W9s#sU<[n$JsĜ*sܪ1 $UO~~UX@U"zĂ KU%zjB:AQAD_UXD"U~WK,%T=O,K*˨IJ jJ TjNZ+ʊjM0buNT$2kڪjO+HD Q1F*XĦ*͔\%[.Ė+J"V݈mTwbA W=.R&Ub[ťN#W(՟A vTjLQCj(1N #vVÉj1A$(bM$5M'vW=DbO5K[M!QS1d5_d PXl 55Xe QXC|05\-dPX#b(5Z-eQXcr85^dMPXj$5YeMQXSz45]mdPX3U k̚樭jkΚvjkZjkZVk:Z֨k:ZN6k:JQgXYuUgmSXEuS]fRWXUuW]gS7XMuuPfRwX]uuTgSXC uR=fROXSuV=gS/XKuQf]RoX[uUg]SXG uS}fRn/;+ƺ'A #i~b~j3Բ i~e6i~co Ҏ 3dhd A:A:dvښvi]t7cPK]<G&PK{VP5net/lingala/zip4j/crypto/engine/ZipCryptoEngine.classSMoU=3cNkPj}z\syI {a69°V[{[V買ڥ^^wŋByNz2r/n[{37\?}71q8h)ǒ:/ dL^iIl#=smn^GI%0t)xt8HM6{ѹ LG¼L|9ń~ӊ|#@jnǁ)k i'8[JP> (T0W 8SQD(3]W7? Ng`K Z: !)ma.TBT|ޕ)-j1a4J-yPfkmu[Wڰ}T%<݌w )q(O$)N1y <( eJIn!%#-c <2POP,fEŲdy\BZ>K\Jls]Ozd=c0(g9FoVau_d1',#g2lײ%hyglG|wUCx >HY"hEݗTr9F@; w։w>"[r i!b~N* <~D^[G>-m4"G67Yqڻ6ԸK,sr'9t<5xd/1ºv@mGg_ĨƟ\4كPK6W3PK|VPnet/lingala/zip4j/exception/PKPK{VP3net/lingala/zip4j/exception/ZipException$Type.classSkOP~+k~ /D,EN?,eV,)"3Qe|ϡƸ6y>罜}{r $LEp2eFЃ)荐sGS8 1`もA q\m{4Ӗmn,3HW}ysȐN5^yYrnO>q_dik MfX`Vums+k Mc0f7tˢbNϯm%Ջ/-A4}lpiGWMgKZM=Qq*y{ǣY53h}d'=MZ UO%ި+[.ޖ]qy`ɷck"C_$(¥[,w׷ U ŹCY(yArLHJ"VV)9+.y6fWqaKHx0*FH`TE/UDq3 7C#tWITOׁ[qs̩LBy[mƘ0MP>a4~uZ~?QvtHi9';vt/E TJQ"UE$Zb(Ӵ,4Luh厡]m6 r=9q (DZ4ӰkΉ<>O6.2K<.k _noOяLT݃B:Řwl@za<宫%  mYǶvBΔfMkVc~+<w>=Ryc>N?1xG]eH|4ZТ aQTRakjm.XIy! o $UeLf9,+ȚG̪3bg|'9(:ũ봂l*op'`M̀-3`A`;9R= MX['B\ W d0B.q?B1R W1&%dRB&Ez3>N~b6,TGI* !UvޒV%i۰'դ/$dq[Bg:EKi<ԣ/PKGw)PK|VPnet/lingala/zip4j/headers/PKPK{VP1net/lingala/zip4j/headers/FileHeaderFactory.classY x-km 8E|19 [[& $qidѮ &g&4g&=Gڴ mҦ.9z$mz}ݦmޮl˶Wyfޛ޵3~I tS~XP8N#>|'y Óex O3>P >%9Yi)>T29i>/_/KB}YHU_7dMo  }Yi~XR$[X?OhP2+~7>\B>"sB=#PGBA(4BI(0ʁ*|xWf8!/yV@ )OTBE>3KHS"WHTχYL*2Cse8Ori*JR>tB "x/5RPA4:an#C{LTۓdNE{:%whCY7LªnF*%!ca__z Iա[ o`] =g4K$2h^cpt5nmkߧB)#k~CC ui׵un.87P~g3a1}KXdl]sv[Z6EOXXD',=x9nNٹLr Q멄Oi\ΉNeb" ZU B*-*-BU:U&)@(w 4ҵ-xJX%,T:@שt)4!^Fn2EKs4 /bP2Hg5LyFJMJ;Sn{UzP g) XE`>0taQ>zm,x O=ZW̨1BMX|M¨]F"YCMH+ŧ>ͅj.*Q:_-$-w2=Xd>3`|3)tz`F7͜yH4T茴sf)jxX|‘QHY1"TX]hr(COGf>D3 tF||nȹzZ3_ЭΈS"AtK_4wYf=Ya$6.vR$K7Be}V\RVf]^^Y0wf K):SgSdXwqHwݓeI\m{_w1ij"x%217e&>\M@hXd`჆idw sBK[{5b& D> wSlV"7Ŗ>M>}xY$s*OvgKOyXĒ>9܋o0|vSkcWw8m默qid)GiYk6<<&/O9 OɩYhl3YtZQU:=xE[GO[; B_$mElyApxW˛ۜ(j:#-~>ܝ_mg!Gaԝz»\t#[}k9VTkfp\-NɬuN[ ir JA:'Kj>Drugc[]C{ WpQ2$vGz;_r^ 'Pj̆Ƭ#q`X!ؘ<~abެkl?mK\U",f*<'Q? Ƣǒ Xʛ8@Yr by9e9'pa{+ܑ߫ą h'7`3{-r9jN8[i&Nl{BrGbc}h̶em[kŎEU(Rp",UxK~4[KJ-w'$X9ҰzGl B%Lv"2~Emvf/q NNY̒0ln\9/6aK[./\샂b\[7~z6z)j.[r6Q-idP»=9;gkN*+l4 Ht).';S픱@CI1JPK>J9 @PK{VP,net/lingala/zip4j/headers/HeaderReader.class| |T9̛L^B2!#&I I@H0 ($$3qf;*jQ@ՈK,.KwXomuι$,_s޹ܳ/ʕ*||SŷIo3xǁ{VRwv}*َ򈏸 ϸessn;c_0%cdz_0uUMaG(A+ MVƬ<練9X!TBk;$"Q8$Bs>W"E7b=EtPF4 %1.rT,)F1f`41LX1`< #r:6\D,N)LLe0A1n3q]p{&2}1͠4Ie3V,y21_Pg TF O^KX>ԛuղ|,ᾥX X)pULU倛YXM8B550I9]MLR3)X}Dal~jnMRӄ"̍oY =c 38lDn罀 .bp1KK7Ņ֣ܺ .˘G0E 63`dE\J&*ժV`,eP%)18E 2sfAvU\O[l7ďyo]l.7"~HM hY!{+c18.n[6Ok:`;S.˻\hׅSƾ%&16x^f<^abAN;Abs D>b,MG1UD8Nt S%}mQׂ0*oO=_4DU L0=o)4P"sڛsl,%/)CR[B5-ԓQl,6:-0B^=Ph|JH+miѻisE Qh 64LM^5´G? QX`oC-xpEA&)5v9K<;ojD#E y$)lR\Dp;WF1*5Me@$m)| `hc!jD?~H 65H Htu7 +iN;NjRhrU2zQ$׈"cl."$ b܆E@S"Qn˹>zqɬAX71==o0 *RxI7MBZ-D kdzv%QCuz!$EO#\ӓcq-OO$3P냵 MNEa?&2հg^GpYoȞRJDS˔0}ᆐMى Y~W̙ z)7ĕ =[{g'kBeUPpEπM9mJ+zj*v#:F1 vLTt,,1⣐|;?F]>rl+q} μȧrt,uM ~_2{>Voȃ#+VI^[8s:J^)c4\kd >q͵&BWPf\ D?MPg: 5.j$L(!J>I"i #@$8rZD,pQ5 Y`vfGBpGznF5r8ɽ8\CFw q{C" Ϣg(H 5,@Xgsx"^p+ޢ__k7ⷚxǽ!԰5x[WM#U{& =SFh]M|(> >a)x_o;55&`v'Pw 1>K* ٕixYt i.M|)~0iYXS+b#1R&-M|+$qEAU(bQb#.)*䜒)n&3ha%A*!2L)J*^SLMq*Yd S5ť)ÕM29#Q7Mvܡ\񌦌&MS(cUeW&hJ)U<)e*i+M)"ETN3Lȧk?$ i5AS*HS)Ś2]᥸9!/TdM)Q4הSSUer„AFARpeUe)RdeO>L(ỹusHe o!JY0Xm7 _;ؔ@/[jYznLr9}2[%iJ [YeJ8AXb13tݛ}&Wˠ,]g,QfjRn.c VKSV*g $ݫ~--naq2s7暲J9M9~5,&/5)Q*Ѷi5'EY!AL) 4Jo$kk8,Mp Ln@z I(M'qw F~ĸUyC5+k Qܭ)~MY4J*M *mr22yMr,]SֳJ4£K,ݜJCTQM9BdISW.Д 3B^bMT٬)>]`b:¬Q \ò)SY*cZm'*W$d_tݜh͚sȮ'c$UC|i5Dfb\R+yD;z'\lFUA5vA=,KB dz~a˧Q*)5ˤ>r7-!dATdwN=6y0ҏ q74|_s-R^$U >iOb OUHG*ʄq}Ȯ._]3wuYEu}miڊ XD?K-.YzIcum8it--ipoX*y/[)XMkABp'5?"/ּ32@sw~uuU^עT'PRwݼv.b"ɫ=Իy o+҈@1otU|We$6[9zRB`Q̚Gl]qE!l*=@f|~ DNS -!Xh޼^)BQ_.ho 7|v_dm6i=7l35>%2 VՎy#&?ϿyMw->=>ﱤ78>Ȋ^3=~@׷E)ri.}2Mk 'ԡ9OV`FO d?L&Xy` 󏔆Ǜ6O 4^)gPGVׄ cv&2{:' ڜ\JǢib+,I֑~R? B[I뽱e( y缙zZn@k%WV.^]W_Z]^Z[N4y{pH+ 1B~i,WYOѠr^ui ݂g|]hN .αz[i~/^o3>Tp'ݲ}tvZli#鿳KE6IF^_@z ὮQNHJ'CR}kሏʡ$/M66(A qT&蒹jD"&\:1$⩫9WWՔW⸜)._87]c=s'ک!D]rq%]?]o D9gܖZJ9iXw9ǪD#>ym3^ZZ[YZ]O5kKKM t(|8 ,u͓ t_%t)F?ٱðUf3~~n z͖͔)as62hgGq}|"a7{pf  kt f_*_GOr1@j  Z>'a=]IԪHa ,@}L3`SSqq:ΠѴ, 6 p5[C~pHi'I} Vqq.VUg2 (QϮ"UQqU<`Q/zu[_%%[~k?fX)Zb-`^v¬6;mݴ̦1-,U {EIR9-Yd"{?̡JRIyuv*܌yQ,gG2cQX"WR =Ydbռ[Ǖ:JU(& M6Nhr# u> K(,sEaǕ,WJunM<(Br+I8ˤnޟF6C'k$% (|hr g9Й=t~JB3`mI+#sP/[M+# D!x;0F6Z$W Ұ+Bs'GęF9N< 팯#y RHDJyr ;|ⲸQ`?\H⿨DŬCK%.`ܥ.- w[>o7եV0՗Gafoa'c\D5ͮ%r?Fr7)p39⭰bFvrۡ0;]p7.x~J~< !耷>v×<9:aqI( a9B؇K\O`<! +9E ^e|^Nxe5 Im NbQLI'1>#>uh|Bl/ŵOqK1x +opX!h%&R\G.> ^bE&]ΉQbֈ`yxbgD'\6Ccq5≀$6*u@_ kN39MV1ˁ= ' xµ= J&4"(K#2 (AA2AH1娻`HNHDe' {\ s:=%}=pȅ#(05hu琱"j0hK|%t2n3Og5O.(sHSd2R4¡s25P"||Oŷnu:ޘ,NsOͦ(oc( G8.M1y^/KqL2eV,p3pE`PrKe5 ^^z)FNu'+Nu= F8ճgqX.p;R8tȣdiDˈez,΅䬊%J),"jXl > ej!rUtҪˈ]vזEBBf%0 $LeVLL2%3]xU'jr5=PlYZl~`t-7:چCI$#ܻ o'{r;aG|SYFu*ԺF pO;]3H)$[M y6)<ff/ΣrոNg=YܝE#MyM[Dr`x#>x^rtoƤnf+b0SsЛO^Y}Q蘓d+O,vS/Ƴ=>(e}u/L^s#&=fbQ:3ao&m òԫ^<$ìe.Qtv'nQx> .x).'l3(jH/kZR[(EF궝w⏨n1C^&"*9`&Ğ7&M^KM4%&DZ$lēlɓ٥sDdQx'm8UT"e57$_[O(|&J4yD֛G)Nu. TzQ*]j7GdY }!j!2̙ǻ ~t-g0ş> gO43"+ϿS4?H3~Wa+~ Q캟RN|*~wR٤Pdj7 vHahPOeR Wˈ #pMfޛ"@FQX,Z|?{J^̸q e3 0$v@%C){=zQ@/WZ X>aw?>`X uXǝ |ONu\ KKv%c30 EC|܄P9Os~jΦ,2ۊV"'z"+O EFq(3i_ ]_%_|NxroG sQyXc,>E]g_)/79kUB?@b$.;ಓcDIr%\72Z's%3I*x{yZH x ;ᇂB HAn =^p/ O EeZlQRQ S;Qw9vt' )" 'Pmb,F,"j8Ks8X/fW|7)&=iq"*&{b |$_D1|-fwd^_[=Lމ#8*D`{=~ OCJzUF|o_7=|Q` u3LJqwL3}E'&hhOfYCG2 lH*̲ F)QLÇt8k3Ɛ8ő!VHq2"E6(BzX"mb\(·kEqu,4G([!!Y .6d,2,?Bc-֑nI$(JKgZw׉iՅ,(ݣ_v#Yb3 YJ- j$KYT_FR%KʽP8rD|q3') I6=ɾ}}3ȾȾcα~u'QГB#yt,.t>c^|EHe;3G'YAV*%è`QD1[.QLCWO`lVX]gVd:%^s8Bε\ 88=,b]+& =0CtlqP/U$@x. |x|䣰M<s>8)|fi+R@R4a*9ay0uLcKOĥ'Y`OS~FrRT^%(woHCT2UM~TA5.:9 Ys3TY[znuzz-nls[=G[ЁܒOs\W[s)t;ݖe'i-ie3Qq7,6G);NqKǾINC۱{I[wݪXVNaCx Fw O {0Uf?BxN֊!@xD|g-B0 2A(&K27{=D:&(Eބ/s l\%G }kJ)eh9 N u}Z[ 9AsGq<2w\S J=K_f2}-w+W">981fJ`) {J֏>r$oHBr:Q+e4)ϔgv47n=XHL~ԫ lKTRCJ{PKh&XPK{VP/net/lingala/zip4j/headers/HeaderSignature.classTSU.J;5 H 5@`%1bӪ%l!|wgڠֱSQ,8ι߽眛? "H%<cG1D};0_s֖,8HƂ Xpd, "2FCXX ]E[yq+>mrv<-^܉= }[j#RxI9ҤOa/3}N>O2=xRΞ}Q>E?A/)="O{păg#$.# 3l64Iǐ,M t[cu͵ u ()6xeWWL>V3x(#3R\(Px5қz KcVvjN3#a -MU<"|aԬ(q`9hjB:li5wO$bzءZ4p3`(q3l+%gyh)ڗKfpe@b&\9-&ELZjӬ@7Aj@`R_L*oG7*cL.S biQS |MfZ1@6,ao@*)EO$(Y.3HhQH }4Ö/({xW|2|'oxV*x/*xIxE ɤI =:_8i~{x 1^c\= " ͑ /\|+Ub ?Ǜ ~_Ըe"PVw8oJߖw*~?(? 0٤Mſ-'_'Uߖ˧YPEWDp)@n;g!r$>a wۘT>]fGNL\|PGxS\XpJ/s%æ ^Uirf@PDHH s3leΡ, l}g"XA3t}=`Ƭ%+;-!b,״+fHlYwLuV)W&1=l3"AΚeBM*nI8ZKk{PeMZ7-[ykV/z.ۡ/~8܃DžK"{;rLRdm3צwvhs-/"#Qiـ7¡7OBKrB]-=gUɡ+JQ,p~NTtaIn )ʻzMTQ=h4KoLTLx&%Hw<~V mv $e֝ #YPƦ)J[FIY2Z2[:`1L= ٌƦԤaUgf=[^-ffuVK +s0 ݶ6["zOD.S;aj͚7&dS)FJ2o[[tҺ E=o(Mވbz)1ϧo43cUc{v(FǃtT[/fx"'0dC#B~y)ǂ{<\Ƨ^|a1B4a $=?`fmAôRWiA?\*+-(u,#2>PXU0Qzl |4c}hhrZWЊ6ZvzJQsWQ(uP|R(*Џ(AxyQV#F&H֞?UaS?eC(35`<(y{1~.s%>6XBNizy:SVς}{O .enx'3&ϛYvѥ0o#N W!Ύ>s/п*If.RW؁ p<'WJןDJ'ӯ+O (%]© {N|^:w(c(G!(i>OSPKx hPK{VP,net/lingala/zip4j/headers/HeaderWriter.class{ `T9w&f&/!,L& A E@P!d3Y\b]Z\KKӠŶZ֯VUe& !r9{}9""ye~rl9R̕b~l?~JuT U%"rP~^KZ*oɋ\IOj~^+Z%~^k|+|Xld僼^:?sH(?yPղ&?7%PG4[ n~m2wTVyݏ}^(f)Ș6).|I*_[]º]f~*/IqWjJ2R|YHqTz)" ^Q/ꧫ~ iO |wNi]~:5-{|<oȠ6)y;/]B%|Sfi[R#R?槭;y{zP6_R<."TOJOK^~Fʴ xNR,ZR-; Jy B}W h( P-KRq|EOxESU3ϥ_CE7QoS ~)Mղ*ή]>o݂y-tu5Uk*UW.d-h, 6)`ʅm(S޼tL)mUKWGBIMHc)8i[uIpӤ~%X)g2‘UceLV2ԇT#%CmMhɬn 6 n7cQ,!E'-UmX dmJUn Yo.mf4iMuۣl7/ N LZkmBf5 (o=gɾ3hŖX[pA0\kig*:L[" [c!H&Co[(**`s(-$UCMz8U1eymm;~A͖ӨKnꮑ 7ْ^N lS mZl(KI7 3u0L-uX'7kaC/H}^M?F4#6ѧ `Z؞sۀXMkS8&Koid#- 5/ۂM Eh #q*=ZhX{+/t%u2G;ՂC֠ߒr%`q`:$3~}A}&SO0Ӑ 1 %l 6bfE >Q@,˨h)Z顆s{SÉ9"6K[[BhFcApTO@=08,<b;nPW lmkÖUņ3:Eelmeڻ1۵_߆Ҝ%f( [c[k6dr.?UaAڠA $i,Lf!7B4 sֵ7OIQ9){e% L"jX3:P H}O@@}?`T? peuUFj{.G71rx2>q%>`f]Y}ҌS'&J6taQ%,۾뵫ج g {xHri5/8'9O6Jqzp^&+Մ#X{&)m?g{2Qd11uAbQ))2J)(SU<0W`b57TLT*C*aZ02 Ce*[soH;L+B5j7l|j ' w,M0!"`Wp4?T_DZb!/_hֆ>g!gjVNji3ӳjS3)"LS f O7lUܯ{SnC稹dѐ, jU+brM6Y:.`R1M;v.~*LUΐb(JHfEDA~%? [ȗˋ¨\ VKN̕N#1qK/S['$ڳbB`n xUK"ˤ8K-GPlxZ49 SaRgCL}Tk*$ 9:WghDQk8e{zUgzi IApX5 $mMʄD' ,B~KC~r-|%̯7U}.]AӉ<`7g2 >^HNF?ʉ9qzr Fۂypzlh4V"}+p Q>\>ñ1}nYdv_E3!OO,:xmpJ9~"5`x큲1%lJNl3$}ȴoh?p{=ODXTHڌfCFؙ\2ir[8>Y0ܶ0Zև,G IBPh7҈sIf;|QuBuW"jЊZ S;*J8]7czi1$vb$#`T[HcVg] ɔ7_P\X]K+=UT({{D.ubv-$GAd Kڷ@^vbE$;sa+ЊO-Yn~ ^ j._ w5J:GTV/:륵ſ$khCKcxrBc YʞYQdg-^eV-]fF(z/wQ~E4`ZOPJA)0a|e&嗤PN4ri:BiMC/d!#Jt ߴW¥)%RINJL!512ցRǏDžAjF'e'I~,nJ'.2vN:wcBw' )B1=>'y8qao=Iwj0R݀9lUO<긄y&5\j%kϡ(O1S;7JE-|]w|?]ӥ]?MHWtV~V uj#]i+boz1T/dp{ySz|SA>B~)ԯ8B~ fut zà߻a:KS7Srg~Nc`AoAh Fz9F(~>RuD? {gHg؛o>)}4s0`adIUOx,N*{ {]y/Rz~*Ǥ;iZ*JI %Ǔ줪,h'%>y'"wbhYj.,.(x,ђ8hi0 ;ދA%Y!67W}{l'<J2`d,}_Ntj8U >dRv!F^6(z?Fc;TΠT.%^ "1͈|Ds0qs@!X_ 40 nʯr (\U,z_B"2wyiđ ʶ, %Vѥ1%Q5yV˖1lǨ<=ta݉A/ƖRl^w>UI'%_'`tا K5p_#@GXq ?uJS1iB7LzΡwh=LR3N.9 0{>h5>̯a8)]-C/ tMtԁe<y,`y) ,^AL~][<S# +7l=5gwREy)5ӹy$ɵ,O׊w\Z;wи{tOauцw O8N 1bcm}$)]h)@}ԚI2`{`E F9u)M@y*i 1ݥCgcT&=YΠq&[ 9OLrFG4n>N77 /D)"jtJSA?ÇeYxska  W|!G4H2=fO4v3(ܝ&%`G{XKؽHwK %tQGOe:)6-0A(.B ^NPC@7w %ߴ%{oJєch -f$*1R6\TS9,'IWuԵ׉j-DV'aLMK}BDDS-rL Kh5XZ WP;j9DȽǩ_$f)ݴ K%,~ߵoL K z*RZƗQ _VN*`uy#gNT JҔ4Յ4rv<[o !Qw:>r3.WjAqm bأת]/@yC'eX-7Z=:0Ӧ즤l=.wYEKwKȰ2uͲ8%/nv.n:]uf{ą&>$!Wv6v{YPm[K g#pEZ*+T.֪"ƀ)ʂC+sn'($zewP%ѕ ?Cj3y]ع @T2:odQjCaQډH)]]G \ܙ(y-ϥaoRMT7jtFt-I7Nw=2K}.A ?d>g<ɼx//';~7o| ?ϻF_g'?W3_wxkj*P-o*?ZR=_~_]W P]ß#uisr?eF_4R_Ayhj@ 2Lu8"0<]B!PaGRl5 h\1TNzNzN;ʾ%&˭)1Y)d z'/' "AߛF|NS\8II.x &<b{>mO7ʆ+PT*ryXvpv}Pڮﲂpv<].t{i!m?؁a]qG L\5*>L>B>$q ᗱ9~q BxmbvvGwjR01EO1 sHcd*VShJj-RiNPAyIWRl6ݤ6lN8۟l6NDDtT>#@ԏPJ|S.Os~ TD?M?wr'gAh"DxH"~#a?'"NQTc"="gD\"g\a^__"R ~ 5x gkj|㷲w"~A!R3fǘcvM[`YXQ grgܕz4ae}Ƣ^3{ѠgTg 4ro9#\oBg.oU~ñrY MS 8?6gvLȔt٦!͚N[>픕_ʵY|)8iYǦ-vf722;L{4:9aQ5wGL{pNgؖ|{h]#NV~Ĵ}Ӱ\5lf̠45BDN :5O̼c\"`e챼"@S k\[{wI+= ؊gj3h|а1RGU`І򓝔ٱ$E ;TTT Ӱ̦ +8IԈIbG^P*?qӶ:s̲ݡt"*f n삳nrxpC(^_SaylIBъoR{C#v~6xŸ6 "Pf T,ȖJvjrog&-rͥӽ3XOS3%lB-rDΣ?.("M`)2jJKxHdNF++V5OS@}TTΡi/aJ&qHn&< <ٝD 7a'}<™Gq犷HzgVP00^T=?u4##Eur9bZqƞ\ș{@TguE}IUf$eix Ç,]=񠋰\*5G$.Xl1XcP,˛T)T)D l_iA*3kM`t% 1T%aĀoXO'Pog|h:Y>&2oAn8}՚I?"X&Z'qKX!V }{hUtxY0:R'dO0'IHg Β;qj ZG_,QB;͵E\K$'rn@Œ R>G=x.X^Kɽ*ʽZ>ݪh_Ie9[LJ~?K'tun69HD2Wc%Wc^n&S5L)$p<'wy[Z+KOL 7ɰʘ{4tdV=ɏ)/yS%Ϫհ*5ad?^{Xڲ-6mh`h9-<T)_ݔv+n9W϶ Y t]0K,Oڥ79$p k^232p6c3&R'sah;%pnm`Dn3cZ|d\u\VZzaF?7{_ЩvYȲg׭ 2^I6T,V&V tӾN& (ImL 'Y)sQMW`EY֒NYbRYO?qL/I[2W=yEU"]p"9)$kfĩ^sC$y-֊䭢k6%LiG@Dglb+-.u 1[,ӍqHO4./:ėF^ǮVD## $H0LC;] oOdO`%7n''Plr։$G)KzK7zgy`S!5Gٞk):ԌuN`TpuUOiH`LmU QxDMk؉5*^2^!r="-IT_n{[! pW5574ɋkeoaHT=  CDcce'\ yѹf<]M;.$;>_t f!^sG*> r%Qn5 ύ4vۛL+klԳ'ùq,u2$D/[neˢk4V[/.Y5ڥyK2ˮgQq|D)߿T;kÓ d-f}F:gLNgg'ROW ~"ɎjJTx8}Gb!n$=@f)?Uo9F: $ioPG+)җNw@H2ZRW~/:zKtNAhf]؄mhv\Q/y~BO/n@J]Hхdۅ}OnHPT Cw]o vؿ2=ho*B+4< ?}]EDQ⫍Xk'彤 uq77/ I݃АhZ4Y}4+2Z%*{Tewͽh-B$3{l>t+a{*ݭ\AG}آn* =>r3A<@9(a TVa%}X, '!)'%:YεjŨG[:B{t^-6rRt:K+R6sÿwH%/EsslVpŚz G#^Ux $W5CuqtSq4)2>Mp+fkTcRU5E]\ rojtAo-<,6ÃG' 7'_N|PKT*A{PK{VP>net/lingala/zip4j/io/inputstream/DecompressedInputStream.classSNQNEx"LTPjï.fUi|~h"51q7A#i29g73׷ ilcXfO&-̒M"̪0OX)CXӫenejWO9۩n5ASENM椶z*dܡ6N9y: za%lւ 8»K \қ&EEP-VҼU@z^$WpuѪ:hϜAK!I`xI |k1"SķlBfߧK2doPK~cPK{VP:net/lingala/zip4j/io/inputstream/InflaterInputStream.classV[SSWv< ABF+U-7`AQCrGI(>_Co}ř 3o}?!ttƗ^{uwV?08U¬0!/ ˺)--⎈%X6b0"Z߈oe\[f5rae U0a] w StTB]+xN:ej!R+D򎻖Ƿ<{ZyLۮ+u\ǻ0?^,M[+m1'sl{9ڈM8u;͂\XdLVq\{jnZijg2 +h9ʐ.;^9Pzԙ $ fJܻneS ;9yWZq}4i{#gMgrWL*K^"MΥ\/5o[u9=puKozBW_gexjNRޏpMu$3g= &$)v ouCL( WRN:MH2\žv7485MWTn( NmwiZe';zM@1bbCE|%2̕#n|j97q <0-K=Sse~nfNxv$Τu󻋤Ms}>'|6i'2ic'< /KG q28Jl2'kj4ZsCp)STD"DR62Mh-w>i@ X=;*V-or= *r UPgr@;Љa -~*}t%"?*:z/*:|RU|Hy,@U*\ NNf;/]=WQ]ܙ*~.j~}wShR"Kmļ}Pl>kQSD,Kay(wRMQ^RE~EL CvVLE^.d`b /#Ç!巵M :JXDv5<)5Ƞ1hgdxmLx777p &?Q'%v6ufOSܑA UpC,SSS((>KtUƭ:҃l^h(e>GDnyt*f񩟀AMYL?&kPxhU?ñ]t4wyEpk R|T~MR3PKWg PK{VPFnet/lingala/zip4j/io/inputstream/NoCipherInputStream$NoDecrypter.classQN0=7~?*! xBEHAUX:W 7i*`!>\@+>| 䏴ݻ"բ"ԵQ][KG^Iz[TuC%c2I7u:􄎄6q%*y'QMǷ)̰CvS$mU`/5kU ㉓\ Ќtu%#cpߤTQ܈vOu8Oz$FxXc •'; 9kOELZ\@S13$I1W3pLO汐EeyXʪe3xXR'PKφlPK{VP:net/lingala/zip4j/io/inputstream/NoCipherInputStream.classS]kA=wm~6>$U ki vfw6J xg1ҕ;{ޙ?~ª+\,fki.5ڎcHd*VK щeD*("U:T8YTm|ַQ5L2 :I_D[*oH6{rțew4ܓzGEYؿ|_K&JF*]IYu \DnH72Ug.xzM3XN]Qk[eJ %񷓑KJX*$0CxuN];óBh]ܰop:g]RCe~Rs@t|;?~0ahH0 f1!~!d W#X Oz%2Hp`iaׄw-`.sx;Φkf` spzn("\łe־aO:`U+nXQ5+ÆoXd(@1`ȈaH~fREa+['c!z\U)lհȏDC|=ޠa9N87dEu4 k?MEP=旵J=z, ψ݆9%^[[T  Xhu,ㅎ5vb+0Q@+:rxaU^x%~-2?Oh5۳ʭb6sZ5Ŝaٖ5"HvE]ЧhrXzn#";51Unf;a]R5@ᓗIa@Mƾ^躲Q;YQ4Cn߱-ܤAO4iAD1BgnFQRu?"Ԫ8&@ ٮy\2o!n&03)SO;[Cx;A?AD1QqF0"'DI!Dmޡ]PKPxPK{VPDnet/lingala/zip4j/io/inputstream/NumberedSplitRandomAccessFile.classW[~g?eT1@VE ~4`ЮAFbfX\]vY!MlilIMش&iG/_ϓ־0, h?wsgЅgА ca(\Uȗs4%ʹ<>WB͋a/x9aT:/PǏd+\̋24ʆKҼ&H':^23iސ梎7Cx+Mmaox'&\]ߓHKa|6}JvHCJ gr56,K)+a9#鐙Xf'ygdM鉔mǭ^ B.g크,ҶlrS3cď8)3=1lGܲ=tާKgZkWpiHar5GS@&a<T <ޟ1̔|2uZ&قs9`-#A mN 2NXY;I}sb}Wp|\鼪4|$|V9l3ͬl`븪gLl>+3(g9ɟgR;rI[86ņzḷY(-댬'6C* ͜=0>'ET. fN.gYM*A;#o32̢~3o{t @f)cִC9%z3rvwy4/Fwr!PMV:ؖy@ÙB.a9񾉵UbW 5iy8d`i1t[⺁3[>JYDa"{4VJ*Gh:cGY82SXtdUkͧI95zƺYX#!g;u۶mvE-;aWXKPL]j`'S*qbegZdٽJa˒+Hets5T䗤s zCt*ims˲u` E" fv9𫞕@,\gR=5zڋ}|mh#sSm=bQٍ^ jjǑ8pfsеsصSkmkFTۈ+#9hde_C3cbs(YT¸ۨ껱9! "TZgv5_N2TSЊhC;:tRg@pi4rЏ'9v:8c `/WgОZ5}7ѿ ^1(OC9b-!x΁p=,!&)5h%]{9'Zwf2E"8 -=~ ]iņymL;1L1qߍ'ɩ;FFc]У(Sk\dt*)iU2:|_QZF\{ȄnvduwK9QL3eNiDғ ?K+>+9;Zɋu yZ\#µs FSW3yi_*Z/1d/RҚƅNEiIfiIlAf4y^5QNZ 1Wxy\?k\:+,>/S cit%h)V=ܯ-rB `"7bQ//rXO>*]OyD7k]On4a]!7eUml׹%{!MB8zU:c :&]zH/U,E^䜘m=~gg3X |S5 eH^A-WYFʣY"26y]GSwxV.o`ntm jw5#Tx]f\]yd?YO$8CXRA:as =qՅ9%OԌ=.SWπ&?\D}:B?)gqfeTd PK.CĽPK{VP7net/lingala/zip4j/io/inputstream/SplitInputStream.classU[WGzw&uAV r1`0`. 3YgxKrrN1oyȯ$e\뫪{~U],"ûXC-Vb8Y,ϖ㸃X|ȺXqwEA6fXe!c#6ٛ٬ Mka"|ɬlo5B4e#?dH, d [d1`yCuazfGGG 4%Y<(9:nڰVU㴝E1x+ L[6)fjiJdp5|s=G6$+j65{C(YƌQdAMVV{mQD ')/u+MPNb6h>9ɫ?0KN*IS}|s,>a;:2I52{f\j۱%au `[eRDkk,}kĴ5ݛݯj jfv.8YdN?8)oḊH D,6*>nVq=*☊sbXF(`H}A*HGWm<=Nnz0(U(jҎGaI9|N^')s&=va-Owk@ 1\e?gzvIEu#O?N{9f:&ȑ.Q"ZֽڑPj"A A0 REdTb;Ӫl HGdjYL(Z(f+4:uYJя4 gXci:334oF0 rCΑq),ܒJ`o x2FE-E'#yB!$0 ԋr 2E?eұo,}^TH"@z )ՇA ӸLE ) b 2ː>Ün@[DmjIΨ5 Ct%cP"- %G핤JTi(rf ܠ4ocDfp *LsYse F,eh=~y?"/QR T{3}E4}g8 ]47J7hE y*6)YLSf )v"f0.OPR$]=¿*ZeVܦ:>=`2""Z,I0jWv_PK: PK{VP7net/lingala/zip4j/io/inputstream/StoreInputStream.classQMK@cZ[гG? ,T!xM%Ɇƃʓ*J/Ewy;;` ]>zo eӸ6T"22J(k[Y#ET9a;ܑJB7V|4b1ӏu*0Kҵ3U7%VjF rD& uu9ۄ?'%nT祑U%+Ri\=FC>;w|/|pwĻ8cˌ:M͚ȓ眽/{q9^Sd (MN"{Ҩt;f˜s@?lǼblnfuZBw[Z]T9]˖mk-xmlkK ^m}aeJf~?=)pZkW6w|^u$]wMז\f t+[՚]%-v?+0zKcte{ g/yK֚LoRe8H-.0Ql?ZNulXU'NukwRk42(E*V~UCԍ.XB~^FZec֕1٨h}9T#.k 6_,`kE3]nR-la2U VbA6mŏ:0kIF[Рs2BL43LID|_,@1BCb_o @yP\2~.P{'2>'MUpd?ذFTF"vR)b =cu:h3=Ŝi-'Mm oe@'4|驠_5CwH Ileξ],=EtBmC\ge_Q\tRp O#Yi/& )4=}J=]60 T3Ma<½Dzt)bWtv=E}+4ISHYJ|rd4rRM̩s7~}wDTCVR_lt#[ FzˊSm?~#oBQ6A~ o⿄o(L$;]]l>]Y4ұ-Beʠ(VcYIx“m(# V!OetBP(Kd),gsxPv /^(?Yy1/QFyKmT7`KxmT.Wب]g jKm"cHàZ JSxv[Y\'o$ٲjޜ\)C6:5Vklꄅ[xQ4(N-~&7sKƌ?Am b7*Kq+E#SC gzz#͑f]s]{]=L35o'Z;qq}N:)=$lta}:^U4OjGaW]J7CLi{^LfKS0k~W}RpW1jUTzhm5HCاd`^?aR]PX0Џ928#s/lb*(#Q[Kw2Y ZsЏ<䝞O~H/̴I6L~JLRc\(UR//sRsNe5Z*"ڑn/&gD\VsīD|T-G;6M}Gw,w/uã£d^ [OVKO[_%q[L*Kvt`kdcq~0P^a/zhaw@rBerNUEv'Axz4`-_ynڥ:ZaT;2Ǟ^6pr.-Ĭ̪Fqyt*VSGWz0T ј?c8D A ΎZ;\] K}wvZD(qqI+%B15dჀ^DvcJ81"Ջitk/ FE%\e^SH9Oa\zFJX}&dmu<m-D*EB^ m$ \EҲE(w hP4JqHl#?rU&R4/ao:]pp7 jӭ7c I<1ڂf,jPx1qF(RS%v`X^TnzhMh y5ʼnɝrQ^JwR O U60XhU>ҧ//Y9{hUhE |$ xܮMtJi=1ޠUy;iT!S*Azd.JC*B=!r}u~xnxW]5EwX!h(:#]z3'̑%7"*ayꓘCAQM%2xH}@9ҠฑN|oRfK1G?U1y)&\θE*=OgUo*(>Gm*`ZsEFZ8Eq<Ԙ \O'QT0܁'2F D+mFR76?w}GnQ^X~L T_*{}~Ru]gJ^Km7" Yx`#ٻ G!#Gu ; `Dj#oRX]TMF:FDVJ14O\'nWeDk?qYןTYHLw]ƯJ A!J{J_{out/J'ҩ#>g~xf_I nXerJ|?o7gIjWcq %28_ &p Qc,Cq2A* ΐՑ~lΓ1͡!t&;JDz3#u@dv9MTDi.U%t Q-:` ",(%'F З0=" ]J1]e <`f!Ms+’=ܒG褩x[Z˪w܍g\x@ txQ7=}=B7 MTw{ =Jz{< &Yg(FY/A\kL\yZ2)W ?6Myyh)#}psfGia%N`uʷDiqe`T9Z?_ *oJ׃l- Cfཅ&#!$!D~XXv!auF"GhG ]%Z`E=I_XL?L5Be|R&gd]]K#g@@t;HOۢIBAgxDux0Gt ︾''LAW'dIdFihx4e֘Oo&';H8 ^R'"CPh6T0mΧh RE&5x0 9Dkh]Uexg3Ci"A4Ll:WXuMJ뇱7sMƽ!|KT~riCSؔ!x296_qz*cYHgq/ηiKH1:@)m$Dz$Yx "SuA9I0նBOR8<}_"DOPڜ9X $HZߢ@"@ %޼s̬U;%W(IY_?\I?\gPK o(+PK{VPCnet/lingala/zip4j/io/inputstream/ZipStandardCipherInputStream.classTkOA=ݲ]>D41iؤh ih'0d6ۭJ@2ޙR-jQdΝ;眹| E<6qςiq $-t#e 3ʚU9 `y"p\r;DzȲ#J-YY(|y[`A$\'W.rtsK_.d[ -2'^vw\ -K5o8C2^ U#qt;2w<C<0D+Z=,%aE%ejbUUܕbMJH//}AF*;gjB]`@PBD!ku?jӝj>ΟV|0~o9CHzq 2TRB 6bk2| ᡍ%ӸEH&qv|&]2Lc>S X |هSf?c6>*I+oZui '\ֆ) 2Se:%d6Kϒf1Y8Svlil%%%*ᤇV1/ а-H<^@ςi5i?2 $[(²a̻Bi&mFSfiS h^Qn#pᐉ KFh)p,9f*!nimrvp6 ό#J ?zbdtmz$6>,F>ԇC8$8C`,>&k<|@tI&+gwĵWFGjE_"8`P6ЍF1FZ>PU^=QC0t~Dx N֍ zU.AtΣfzyo:j8}~HOjzq85qWi*z'ŸD(s7t,b.z\X4?FgDV1_a)O[%{%.$bѧL7XOR)z"O%8M *}' uuzRP[5<&Mlc?` ?6~ie- SרmN77fU.le%FKڲlz ?^C/. Q́9 s6}`o(;1؄|&](MpWʍ2ܿ'SՙPK. PK{VP:net/lingala/zip4j/io/outputstream/CipherOutputStream.classTmOA~\fUE VT+`h4OGYLkWM&h~ۣ=Jtnvfyfgg?E CYE0!ېĒRB, DiOBr[(Í=iy#A1oePQ%^79V9(aF:D(Jl0w--9%%Ki,ö~L۳y^Dlj8~ɠ$p>cZ|ŝ'KGcgT7faԒf wJ~Oa\BXܷmfxzPg&z״g*2 }t(ۢX6TZ!&wpc[6E."t&ܭTmgWֲd=ԸŦj67kA}XvXh0ț[!Jufj.摇NM58ۘnc.99lt#> ]Hh8&0.xn Xհuiw{ giEMR;2ת]ʠG^9jg( /4C7 רrr;MR*&;! ݤPE grt 1@7%Kq eR^"ZN?LX ,bKڐ%!z*$/}d Y$ވ*^Fk=QJ5Ụ:$Vxow ^I޾2B5st;*{cZiJGd4'qxz DTHPgiTA yL,wNÏ?X!)Ň*ɦq//hOupO|ppA(SX|PKm觖 PK{VP>net/lingala/zip4j/io/outputstream/CompressedOutputStream.classkoA߁ B[/@o.Z6HCL# mL?-th]D11?e<3 TZÞ9;ϙ=3?~~;G ܍ UBV5f/d'}: hsj1l7}d5ho䅓wS}& [/dC1h!g6iո[jMRNjYcx?VGz _%yV`yx@AA :MJt MnӖzxSr9$#OPg\9^Ѧq|GI]}C1DaI:ư$6ax%i1sy(xa 8BJ85?#K/tE'iL)ٳ>Zf t) ^(/e.&Fk-E-Z_WFGizb\?hJ_Ĉ/]w~PKV6nEPK{VP<net/lingala/zip4j/io/outputstream/CountingOutputStream.classT]se~$%lRl@ZRmֈ-6`l -W۰infQ%o g 0(,6(#gߏ>y9q#3"IH,qE֢@ lHSfM2(tNӱu@~O^+VX_H{hW9z[p7N]6LYƟ^-Zwuɺa.-mÕ:5ېso1=KuSwJ:Z]'!\R=F!JBMҋ=5Öu Eqn;SrRsVMۑguڷmtݎl%ml:ZZ ?#v;[?t6M~z3_)Huw`ѕ߮Ym\@oݯX0v$P9Q{tm!tiC Ryi>ȍK Vǜ4 >Ƣ 5C6xQGpQg( _m5ZoIn vl pW l䎘2~K=YaojBj¿N!B=8R|&Jvx 3ܑayIML^I5{l'<ӭ"4#J >doq .5W&F }8;<ԜU"\<%ԁZD0PɤOLYIާO}Q;/p'H @laD"^+,y %QQ}ït"Oq:P)HycJx}|%JNGi>%*)^p|KSW'F~ADVأJ%`aήKd*3ΌU_7cG^W #33&‡Q1טl-/Ôʻ1}%o Ay7 |]yzdef1I1@j~GE;ؘD=sPKH=PK{VP<net/lingala/zip4j/io/outputstream/DeflaterOutputStream.classUSUn6aC %֤?dEҖ@55I.efnP/|탯>;caF;߽٦2 gsn^ g)bn#| 7q+8%%(%%Vj⾉/Ύ@l{Y Y;ʶgϱ;n^N] BŗcsmNAؖN.]^ІNxѬKϖ~إfՖA6ܓµGYpN*ۛN#2Rivp ߂߫2l sW S;VvA c Y]z"՟j+0%+/u{I mxkN+- Tkr?hv5yUN۔⛕=*om7t0H,i1Wă4BE1ҸbXiLcFoVT:f8m-I_յлޛS5w2TN"%}FL})Adk/O;U#:.2R (?"ϋV1+3_?yD`C(G @g0 Bt']$&6A˸§J{Qb|ZE Rc$qU:l>с QmbH6<6i~ٴ&x_n(-+"#d{F7gPK PK{VPHnet/lingala/zip4j/io/outputstream/NoCipherOutputStream$NoEncrypter.classRMO@}k;8@(-)$H !RE&l`#gו7K+B7V=ۙ7oN>ކ QͰ ~ytsP)-t(ͩƤτQy\T)R?Gjfat4xX  ~f{dv)tRc'8=C΃#aC1h740A!$Rj K$ɯ*T]T*^xVsc }9?u WyͱC.ݧvDQ'doD<,\\GD<KX!wբL=֮{ ޏ5g1O* rk/ja0ȫ=Gk+-󨯩UޏP0DnҴBZc# >A8X51Tьt76O[tL?/lm0OB7$(TV>:D 0 i*~q %2"fcp2p}|=yOX/ո=5#oFP;”|+S L]Aw{z4J}iIsXPQi "xai `>!|8ǥ?A<)w S2z:gBx6"y χ0(^ E0a6/N/#/ )iNKJ_ZR0iG3Ru[53]떵H+LݤvR}FL*(-tU`}*cz9`aۺ1n1-m+- 6]4n-q2U'zJ4 Ux6MdzsSOibdiS*%iiC= M%AS/c[vZzw8VGBK] {zmL+p1v]*Z|faI:O&ĐFQR:)  $Δ/ ,5{ɜi^Tv߰s]GSlzŅ>-v&-R7-Q uamҵD5[nS3iWO@dm,vf˰qU?UpnGn,ا3p 4 \ -"9&y5@|w jnvKYbnA)OBdʒ֝-)= Sذ܎lPj, Fd|q w2w8ky?I*5 %izZ[3mKe\9*AgY#]ASm5m hlӒ"U-3^ qK!:Iŗs7#ȭ;LDM%ҺN+غ{ )iq%Z_n&|&Ǿ-~Ta*P p>b\Xet_H[.rr/#\z G׎Ͽ O)_ f6ҷ*VW۾;>?ZqUc0.k'\5jXyꃊ vyLgLKT q: W?"@Kxf1 c, UOגFrwN`M~lI"wq {128şxheqiY^l !}Y~=+œhrs77*ütC884{Cr|BEVe8{5~x ?ڬziR>G KJ/>,^^đN)-/jҿ1?ԍ6T1]Ln"1q}xi<o~|G˿p-B\']N\ȼ1 $8wJ0hGAy| a?le(iV9~@CxX\sܚ3 Ec(Y8 `cg>2A}3Xoyr$+]MIg9LΠ N%S=?\!W RXkfgEN5=3I%poY|iZΟ>ɋCE1s( ZҫGs6C!YV{*+f ùL6߯^ vy%-r+II1۫eGw?sSDzV %ܬUU[q Yě#p Y Ao<\_߅a_]Aig=?PKoPK{VP<net/lingala/zip4j/io/outputstream/ZipEntryOutputStream.class]OAn?ي@A* (-[eE+GL@RSWKpqmڭ&zD gKY{f9y)"%vN̔0wC1(@:OG!46ymi{v5V^[yǫ3 o٫qsk5 5 \noQ:CXSt}*:nqβE)hܴ]v+j,qGf rvL4>X⮀7%XK2QAʗDyI_!1«:(f(,1+C Q:dnoÐ\ʛfז)y>ýNbiaNeQK0Ѓ$hU ]pYaFm1JiP$6ڱV=+lo v]Z h_KT^~5z BSڅDr~iH+ 0=~^8+GPdV>jPC\rG?Ҁ܉zFht'SJؚ2ys|B^PTl!DCWiF> J~R-p#G}'RҚ~A;kݱC) f|4iprШh#4QcLJЛȖ/A('$w7h$ 麩HHꅿzDdI ߁Zk N= F3!yRT _PKdPK{VP7net/lingala/zip4j/io/outputstream/ZipOutputStream.classYy`q'-X !ĵc:0 $-v8>+8vSmsIqj7MZM[׵}K+iE{o73of<Og~_?pP>} ?t-F >(ks9ɟh*&џ;̚|RrPB&- 2G|Y>"*п"?L?G>`O0<@`-d\ kVq@vtq*.R٘Ź3)2,+x6p,j 4O0/hvaS#ʀ\Q̗">Э/r]O˧KحA;NEA b^WhA{N&+5^W ƕżj|Lv4A^v (ڤqC7:(,'uy@rfn)-|"nuVn+vi|=S/<B}CXG,bLk[Cfĺ4xaoX!E! :A#=v7`adu@=6+}tIl ͦ7#Lգ96.53 _,9ʴ4 }BC6"|s &( }LZ P,o+d?bnigZB.@7J:#plG:ѦPLN"oDfڒ[5o5a,5iBصLsj-J9nNXh ̶fĊS} ^,A99 .#JpZUfW tgᐈGm!;]=\.nK)K:bVcPJݮvTX#1;,B5u1Ljb},uiqpzm0krM2۽ щI4CO/vڝ.M r̈́ ֊̉ 4`pfٮ>/괚o9 E"A)$`!'Ko–.6o<=/U}ȯOj,$%,T. b v[zn+({fNQ|S=Y( t~Wtgz*rRilE,N/?dFG{SPچhK KPJz9:Wf@Ĵ;YŦ APħn2J-r;t't4uoE&Zsk;tzEt:=DGOl0=ӣe.9qnt ݮboѷu,ݡӓNo)~DMNKtV>q~( t.{4ѹ^{t+w:8S:دɽφ>AG+l8swia0+s}htRW*b c.4~P!frEpih L(7"liyNKreZZfGQq~"'5A# hE'gс{mf' (4I},I櫖`Hߐt0)^hI}%Phx(w7)p\fuAbG'rs5> Ƨt~ϫ:BtŔ}$lM2Sx=r֬2WKAhkqC(i\sߎ}kҨJdj.OxL^@K^PE:9>jdG( .f;i"Ef92a'duh D]XS~FlTUJ adSj-|& &;.ԃCTFh4H`HMGvTyU֡H M6Jd~0sxi {3Unԯ.k&0l^̨p玍ӒNuDœuDPm0{*2͋6vbt LQ PՈg@W#j[j|TCy5>LQzLj|8X~)f3#TL4J D_&R3,=yc,,|=Q|lyNZm н.^k}Lۚp.$mҿ%QkJ[om*%\25p͓m[A4=N%hCs_H(K؝8);m).L-6JA+j{{{>cc".OGaKk,'uLP[ӶddX^DGw[rVwJG{)| zJ~N6@YW&VZ~̓#c _aݞ:7]tΟ뱫ۉgh)y[0Fӧ}jĺqZQʄ.G)!T$ ܉~ R)h5р<`7n2!Mu4V7iٳ3,}v悒3?Ee;B}б_:@Z~ ~ )mYAIUgYo+r~:XӨ+#4p*T w;GƔkXiQ}Νqd5݋a\ 7Y@ը^ڎ)BW%^um4kx0,!8V)KS۩/![cSz3n,+%v?KXqE=Yh,s!^EiʹkQDbݨ w=iCZ^|b/QPޮ;%@s^{2'kc#:>"&ަ#GHh&sU["B?b@_`p5_q" %)"A:'4ҦQ dTaUНIowʵR \o kpO=PK VK PK|VPnet/lingala/zip4j/model/PKPK{VP0net/lingala/zip4j/model/AESExtraDataRecord.classkSPS _Z6w0p vL7A?Q)Ske:sn}9{_fPJ)Ɲ4p7Eý&1| q H`1%d̒Q ) VP e̺}vfjۍkv5e{IpVC;SvM+y~R^h/횷%;X͞7;t9Sm5S,]He[ޜ@|,[nN|S|ƦY0qor&;Սs<(7Ԥo%R3nY<0}d`2;~"_vsUa QIg4 ۰`&F7  Luqv&P3<(HZ.5vMhqO$N%`O(x` C 1$ 0gU0+(ℂ8AdYfU:a-5MJV6]7BA*rQ^) Eꢉu+6\T;ysƳ> z oƫJ\4֖˕[!;C 7 z_}b\rZŸLg*?Si@pxv. ? ԯ}u 8mzЫ&I4e|xI/ N  sB5% ,cl@6瞖E t#[V?͑+6xŹ 3 92 rnAfv.b<$ b" $# -xIAG|H:H>K@]9 LE(A' ӸAg< PK/iZ PK{VP0net/lingala/zip4j/model/AbstractFileHeader.classwEXbii "EmM4)OPTPTPP|(n6i:;[wfgwfn~:^ëd^#s T{E2ȼEm2ɼC]2B*|@|TKQ7"D j*9XFS MHTYiJPZOl %pM*טNC̘I$N2#Pq%NT%B,CK E7R1uZ9բ=S E,QOto*VlXca38rTecpyYJ(x(bhDޟj 5I$mXj?qkb>G5uHiTQHtف$?NI}F:fє[Cp1/+@'XV偈[,mPWވO*FZCEnG '#}(ʳ AaT< q <'AEXMFW4F10})1!@])F#DB14r&˖L<[Fq!I>]^xynN"nhl]e)H\y(ًGKVfS@!g"AIDٟwVt]=y1[ڲuBg20=0Pd/y?X;V:wFfq@5wjjv+|1!e,Zx?mCGQ6B Md6ACܒS*2ze 2p"E0K,7Zed}o͖UVfr%jlm7gY["HӬN=mhk XX w \dd<` 7tCb@9xm.a =K =!, xs y9k9h_e}(+hh>ǁ4 A` u yVBǀ&/"/Ҏ> ti0 @\9o8]BaɁ@6,A ҅> tŃaF댌 qAĊy:4Y A<<!1D ,'yDȳByDAsl !HLAxcpi@WNR֔TJpXy} =WD)"<9żKǀ @ yE^L )AΡyEgT\bE*ysRdOW$s"Ex+s$4qϡ&"jtGM o-!.|nmiAjxEdr'$Wy@_PyZvAxkBjy;jvFY-ُs>X +V}_P^lשZ;pbN̓g|~2*n|1Cu I{_PKO9PK{VP4net/lingala/zip4j/model/ArchiveExtraDataRecord.classMK@j%x Ń޶͒ĤiEGiă,;'lgDa l(F1-{\ l; 07q3w| ;=X #H!o)yJ춹}=Σ`~aSAnsQv{c'^#HĕhImk!lb |/.`p8آ^- .LU6t^[K5V!2ѐBZVv/7}o jt23idSA090X O\Hӄx-RH|Qvظu&nTXf*G5^0Hy  ;D=jhPK6gPK{VP.net/lingala/zip4j/model/CentralDirectory.classSmkP~n66˺ںtUM35_(~N x[tܦBU ?%*srM~-4BࡉG Ihpe ^ jP#Ƒ <_MҾ<+,s"yOxc {"vgm"d_FwTa\IOFA.ax#FC5!r_DTjþP zJG`lNqjdU^#Op=s#(,Yf7j(8Y.(g+3b\\M Sptj70!yOB(w\i+ŊۈIהIG3]Y6EwpwU3kyUFҍ)Vb!LBPKOPK{VP,net/lingala/zip4j/model/DataDescriptor.classN@E!@B !n@i!""ǎl@!Q|b!#\ϝ9}l[0VUPaj  a PD{PY<[dk^2GlWt49H..y(UF|##FI=391 0Zq[:"44'j}Y}Z.ܥY0 ]q$q7-6`(`FQ ݉6J5z^NISl%((NSPf'/`I E3+h52ezҿZj~1籐[Ĩ3e`CgɄjRuRR\= gARLArA,H3d9Ȃb +gPK͞PK{VP.net/lingala/zip4j/model/DigitalSignature.classQMO@SjT`b/4\$Fo uI-&HL<QƷ F&ow3o`@)İJ!$8;eHP{nsFK9`HJOUUduۂ!S86Pnܗ<c1lryWطǵkґw_A0툠#)ꬿјud594ml/[ajj4}%!?q_iL5@ R 'd(Ew'"[3BySTM:ٴ2_4-M5EQ5Gda !3"թEFokClK#ָکyqD'YJ( ;#Pe5kPK L(f@PK{VP9net/lingala/zip4j/model/EndOfCentralDirectoryRecord.classOVƟ.-BY2%a%mMM)JC&mm*&mؤ}}5&dzҹ>Ϲ?sbϿ; cWi\F_f!"2MrJĶeptW"0^nFd}75),ӆezTb}ny>g6o:I$g Aou**MҪ@xe)4 ޷lgs;o \Zco{]Nr1 Um/t)5 C-(fq쉎Ԅ@*j/0¨ڢ"BBZ\}\sEs 0CVs? ڣ3=6E-t҂T-jDv7C T 憎9]?ͩ^4Wg%z/GߵsM9pM:b&G:xKcCIW0cS`Yue&ryzձ إZv뛻rxP-Ubx"G ׃N]ξ;yb|y4cFr#e0Nˑ@8ET#d@3";F~ NvvvFb׊ҔFA IJD|}̜Tk(ҢTA "=Fͼ̼ĜD,} `;rRK@b`L lPKNPK{VP-net/lingala/zip4j/model/ExtraDataRecord.classMO@ߵ1R I%|@?( $[Xdd7HDz*f&< "|6f(`TC%*nd".`5ӣJeɊWwvS uKmhGT2ܕ{VC T-nPgd(8>agI$P^L=7mq Wd'8&@Dfd<> cy$s SgCVdS__«1v2z=JU8d~K%VZGQ+ܖG/%-D6ClJcU CEyT.ܫp_vP2`Bl6y?pIsCҚĺ5dH7*t4bYJ:wvIfϑaoj ^oFI7ֱ_?25wq C¼\ xjX$ל gã=eձO3RqwmX]/,f촇m;V>SLO(4$)0=Jz[:l9?}GK8H: }3net/lingala/zip4j/model/Zip64EndOfCentralDirectoryRecord.classmOAgK[A(-QyQ"E 4H9-;rw3i~?:s]n3wmwv/_`B O?į32d,ɐY"2,Fx ϕ^S ʋ ini-ܲuXӊ|Dz bl"/ 6rn/Ayh,'Wk2uLG+ Nr`|> W\;1lJ6w\(yFZ "ᆭhn$&⺄ -w}}|::N3!в-o!^=qe y8Hίs`:؇A{k =chG4NIQښk>qm{0fЎҕ=+ն`RB+JWf/DyAޕE b9WQhr$쎧NZ7ŹoM9uÊ0au3 %iTD}ZݾO>d {8r+X)Khɮ"A*K("A9\EVë LY\K%$PvLdKXAVXAR~UFk3 DiHA38HZ1HD|RQRkr5 r4Cu)H" -.IDALrC:#ZtFZRѢ H$ȆPKGfUPK{VP'net/lingala/zip4j/model/ZipHeader.classQMO@}Z)~W⅏^i0-)KJ!mDc2Ζ*QI 7yd?^tplA& pPdIʄ*E w&|,HF1Lsk!BtZ`Fz*W@F7bPgϛ EuִN8NI'j$'ǗIofVhQ'Ao6`l ҋkOĝpP oa(kDDJ߰; !d&UE8eF9x{$`_6MɰT /\nFҴg+k;했 TQ.uקOPKhlFPK{VP&net/lingala/zip4j/model/ZipModel.classsU϶IӦKʣ}+!R"Hq.4JATPTPTw3=ݴ>ɽs{?7uѳ0!0Letvn0U5Bt?LU!$Lj~i&?xT|ͣKn17O }MeZjHumF7-E-`a} UMɴf/B}nSF:-#5xu j> ډ=fL`h/!|գ~`M!'Cǧ}%|pqz̮c:=tzH]}Pph1zN合މ %]~A9 ,AC9X1j*-9@X:rX#mߝj&فfN |-4zsq_Cm5OH'zhޘ>? B Gٹ8'yQzu2@Zx ;#=xږig^/DaRA:#E }Qǡ;+G Am/BmGyRZ-JP,yxp%bOf˝O HDʑDD1؜Ɓ/JdB rd "$l.AU Hӯ%)59GM"\ᓆ_w% ;.hZ6#;Dlf|@ Q R'$ :ݐԉ )t4+iARd "l}@2*Ȓ=ylAH[#=Rf$%iAH 2OHYdo#)HK恔Avh6O|@e DRSKy|@\K ]Q bA ?g._Ê"_$ &>KPKX4PK{VP>net/lingala/zip4j/model/ZipParameters$SymbolicLinkAction.classSmOP~.֭e"o* JbTH]uHWHh4|G-199<<Ϲ9o?`- Y,`Kq$J01H Hcbi.ҋrɨ0hz:xV4<yfn2<3<;]ǫq럜Õxkk%yl9wUaS4 =v7A!#әI[dHҡ]jիW]:C;R8G\wW'\NhX#:|G5"w]w<'`DJ1G{n#a:5-:E"_NU[ZϰA-{굞%AqV|US1" MŘ0)h ý31D-ᑢT:5oz`[/ 7e[˞\9LZڜJc~dJ\@ $EwȋOi}")b" sLTѤWD @Y ɊˈمSĎQ.ZkkETVZժ]?|w&;I19w{sc.~i"j<>!7ই\zţn=ƥS,N8/\J :˥'Y)(/>M?nj á(7'1CZ"GB7Lby6 bN!NC ]p/JHaΙHCfj\Ȳ4%nNlh 9,1VntXgU.h8Uf6G1$q%7tka74,rivɵsz&k,78pR[lFfy L2Em%EVOoXҋlWxkVfϣIZWf7fe0ޖy<YU * =4No{P`GhN0D7f=r-F,00juNjEԩVbUh!um%/qUryȬNgZVvr J̬q˶8؝:yiRi7QpY17{6\j.)|Z '36:OZ$u([BV[׏l#w`gwGS`Ξ׆`g#;n>аj{<̈Jτaj#6&oz4WEV@=:t{*|wp"@)XF[~n5|Ko둧FZ:`>hN}wmebi$vuڅ3޳xPNrMRʮ$zQfAEQT$pUI*KR*TUU,fa ;(RS5BZGKepc->}t-ˉpa;paQz;,Sz'4Og`j:cNwtBMC/fWy%<RJ*$-c)HFe "ȃg'|44n14 yh"Ss! #\@g@mB.,ՋyNr<Ԍkd>h|EEX0>y`\$ %"ȫR#t Dy }‡0|4¥b+YRuyda\YS 9)ef(9RS gB_C7fGVQ8Ul] T[FX)n~D;6S<st5U I*|5U ;tګZ.Z..ni׉I+9!O:d @vI|R A D8@F@m|UK@ {e D#xO& O4 w.P&:1YOHA>#Ou"}JsN^ ڭPK`Ѹ. PK|VPnet/lingala/zip4j/model/enums/PKPK{VP2net/lingala/zip4j/model/enums/AesKeyStrength.classTSW̪H HPI41XQ[8}ȬtK0 d`I'yKN_cji<Ч\W{=;;7끊[^,cŅ.*|(rŝP{q$T%]͍5WH=f:h9d_ vg{z}} }=v3ys_f^B!斲H*N/E~sR=z+ a+ G] Y!t! PyZw rw0ܸv1OiO/aE} JOu4_1i;4囒o2*-+;(x~>~YF/sK4CHĢKPKsfPK{VP.net/lingala/zip4j/model/enums/AesVersion.classKSPM[RREDCbXFf*8Sø 5`vҴvƯqょ ##\ .ɹ 9?DpI }MZHa2?R>}s{W4agMV ,+T~fJUeF5IJytX53H#L!4Do]5jZa4;U8K`V7A;C\|fWԺYTrEijjUKh/jIMJ7u;{LX:ESk'FHGQ'+Dc40rHpNM@lZq TSN^*͋5<^Tɘ=I2"12# B C#ʌU4μ.hYU*e֞q9 _.KF] {gI,.ho~ݳZNwS)k§}O_~ -| @-^i:`8C0Y }E.U=Y|x|7[B\uj4?G8!w4FZ9J'Mx/VRY=;pɺD.#SʞgHHlqq~w![e;SB:2؄/p=[}kP`?(Ep8|KTn]tQy/z~ cݿ(9L6ĥ,h@Eux+=$#3m%$K:SpͱPK<4CPK{VP4net/lingala/zip4j/model/enums/CompressionLevel.classS]O`~^ֵ(c &2`%$t,.^YgIב}pO7xCh4\- y|?X@.Az[0!iCxsY1$|IZFcFFKe9 mdbN/2jRm˩~ZiӮ5յza6VCN3Ր^A8 Xe魊I)xuc 1 MQna].ZŮ;p"5޾YiQݫ]f3}ǾJy>I2G?J7 F=y8a#X@xm0!6Iȟ`+;"p$=/~i0"ȭ?EV9}"RS_ _h )V|\1D>ܬiTB^ٟ ӕfZ{r2^G:B9"SNtY Lqـ_vYebXriإ7p'q_nqY@BzY " ǨO`DZDMZj7,\|PKPK{VP5net/lingala/zip4j/model/enums/CompressionMethod.classT[wUNg``:M IH@AIc( K͐Ї Ia`qg._|!teg>dф2a:}}/~{ /d|C\WQbk|OUZ>ˆ7`S ݃=v˃ 90ri[gX;V'Qf&DqǪ%,[o'2zev)X; ʦͧ˔=֍\oR1_arCsfHEcɗ3BXn}j(%DtFEsPY5[6gȎY) mv:\l;wm*k8bT(V_Q?*jA):GMՓ YW0UP)UkȞڙUht[U+kseΡ!ߐ[3$ȣa o!W44+ Pֿ5'>0v{N+g~quAa(%!Y s| ba^+Z5*y:ciЪv-F'S3q2* +7M>}j ] oK2m0r^A/o6^ p1jX }S]Av~/|7|0OYS{`p9#^Kħ~9琏h"Z? o-qNsA+G؂D)">;ʃ!IE˱tcW$!.y/A3@i˔ԗ= sM>' R$y]ʏ wP>Nb?c\zFY` eLjWԄ԰)J̼`_ xHEIړI ޥ~y>\OH1.?Ox#\p\pݿ/3*r~ax`x~g)j,5;l5'T\)}hPK mPK{VP4net/lingala/zip4j/model/enums/EncryptionMethod.classSmoP~.Z6pLMXᆆH~X:VYR(K4(g4}GϽ#Kr=99?} !HHX27 :g,+> #1WddRgX.;0S`ffkrt6;zޭzv}iy,jǨJ[-p.J:.^0syA抯LkuVH6)0V]mZ특Љ,1l%摩; M;ETͶHٴxRlvmoa d}&v5n*<՝~1gĔ5̀ay=]AǍ>?8U#R g8wv-qY^! ?Z"xtwt =(O\G?oj !TIaF {֤FZQ 0fYBM5'DHI&(K/ }'}&D~"| }W9-"~oUNQC Aj IƳ$ħOGgO6Ʋ|__(* `IA^u!6Wɹ!"F@gH>MqLo惁9`j8ۖ6?Zǥ~] Wc # LsqT39Px 逸ņ/mv=C=QrnZɆv{(1#;o ߥ]"WP85)`Q1:z$e#Zܚ3W}Ȩ;:f+b4l`a4jG\Cqh;Dsjˊə|}OS(W<4zSR5-BW1GF ˸>K}F'nŧǗ vդd_!m~::>@ɯ#rtub%kc"ujD7ȭ"#zX`r`̅%h [s1CdqbPMPK53PK{VP5net/lingala/zip4j/progress/ProgressMonitor$Task.classTmOP~ʺ&ׁ euRtmfꇥ̊ґn21Qs55FϧOj@o6,w!h#z֮rٖ*"`M~QvǧJK 7ج٫yB^bF7uE6:(eyQ@@?)ࡂ,(H`L8 ,L04 If0&p 1+[;vMsdݓGϝ_^ t-ݏ&xN8tgGٙR%Q\EHK'օ=_zKL@bFI\ϡ{@dcK*\<AUX@>;Dd/%u,rdjDG:|('1S(aNz9pI\4'2'g8 q6G255C]#إ"3EaF7Lӆ)wq04D@k#4 u8^9~^tj;PKPK{VP0net/lingala/zip4j/progress/ProgressMonitor.classsuvsmi X$h(T % R,iMUPҦl7awMTPpaqq=&nfpos\~oQ>ͤt0] C,XS_J,V׷ki-Lϑ?yUuzFmT 7t+HtG ߢl\H4EOa(F(Sj@) Q4L%mYVR%e]1䂽8SJfYl' eSVϗuN {ty*RE3gB)Tu;uN bT%+aܪ|CN̛:n%)СN+)) J,5gַN kEVUf2%"W @rR 1.7WҔlumI%Ղ/d+%:x"riE +f "gBYjUUQ%uZVL{R=gBps 'b1:Q2Z6xUψg9 nC%l/oq(k sqz旆aWaGpgI5ql4pKRǏbd]ĉq]8Vd,ԏ+OΗ< 5u1DD,FEvE/I4NDQ5g5SjC0K!h/{,ӘD{(!}KGCX$@^T~iU)- sm@GuqEW"TEKt&N&ϡ}lEځf|6+UwңFs,ZU4oi(-=B2 h:zbz2B"n}ΏIL/+JGmGo&.>%q\#1|h+q%Y{P h{돡Gz-1܇څ|ƐU Ni03@c&$(W\=LHJL阈NENOL5؄-R}4EMws&mo’Ib^(4'uBI!cVۦ$ZGeB!NF>bB# @`sh9jcru`+Ӈk45X!"g9%9Ai]=??$`m^h2;3(OxҮg لm^͕āO ]GȻ D΢wai  + ɍ 2V=~w9 K= lɂ/!mpYln[0Abn Zlkéq| r.zD `ipKH 'e kA>m@zd{Xz1 _Qr`$d$6ߵ@`i+,-S#x}j_PKNvPK|VPnet/lingala/zip4j/tasks/PKPK{VP6net/lingala/zip4j/tasks/AbstractAddFileToZipTask.class[ |T?g23o@&&($ %Xq$#83B]Vj-.bijv]羗Y ϟw}{N|/b ޔo/my%q~JB$X'ꉓ4-Ɓa:/t4۟.a1QHTr`iS0EP}^C^~\ ܬH5ԛcpI[%#$!L)yrlD!&[,iloZaSSceZ6!Tjl;ZqMP#`K"1oېvEgOW$J'Y">N’ { ~&cF7QU}Um- cd Pi@F.%?5֕33=fJk\*|=k5McUc5c`u%c $MΗ_w<7֙eEN7Q jųQޛr#:eFsJ,\][Yc}]8iy U 'ںm78 "K֙e Oi#aj'u4^ۼuE$G:#V6ZG57o/`r X:N0_=nO-2eX$M1ºpEUOzY*+ݵ+VljhnoEI˾5 +sF8тb84ԝ43ͪGomXݲaӼdZ2LU5l7B͈o S-_cxsJ|LϗB"5ɹ*ѷ F&Y3`GH-$a- GyWܽ^k _BNKji(%SgawV9*5iXiecSA6?QI׫.A=oYn[ݍuc %E*=Pq ,8@#W@84瓓ΥItM Gb} ͡Эt&^>lL(Xfn\vFw(ȏНj އKxmbAv {CH|x^j-s)*vqxвy|hnY1ӗH V>oh{~NMst |>=EStnr/Xf uG4+Egҥ8h - IsPʲTHԚ)h5L_к||Uh͵XsUcp$(R] b &~<!q!KOYB/+;?E;k$ExL;*沎b\F^ZTBZAS.j>ZEt v5oP;hX8m90v`3՛ШIU}\4'0ΰ9bv7}J O}X j'/As([,T8#v݇]+Tzjȫ^!5X}=DǨCGut9`R*:1$# 8whr1;Gƞ+2,& ‡Q˫uCTaA]9 R4"EsY)slc?h~׊/QcdebU):7۟ Eȍq# :Fet%ͧTO!j"ӥlRtHZlLlŦf `&Vc&e]+/,)Y֐M~1ʋ/{+-CwѢ VB؂@ĵ}*b&RtD:<ο$ݹοDO܇d dB3)f=U☉bU5TGq&D >=it3=N7ioZ/{zٛ޴^Zzx#K{-mv42jxM?|Ae[~ξ }ղ&V EڱUW;".rvC4sTGr4; kI~,A<2]䝱ʴ*|XD*65DOa5U0Q=JAa%r"䪋`.A^x}|kZ=i i'o9Μ^vfmXZB,~!<'#Y/J^ Ey#+ܠ| vw)(|vw6(a#]in>(`!ڴJ*+=>y& +b)y4qsBXĂ}y32jOBP߆jFP30gуspϑ~A[$!̿뾂$_P^%~@7I)% _9eĞ}i9Uw8Ka[gܞrzJZؔ7D7' c:ƿ7萐P?.Rb*㻗PK&%8PK{VP5net/lingala/zip4j/tasks/AbstractExtractFileTask.classZ xy~iwgw5b1`^`,0FˆA0 Y펤VAuNS'q$@u@R5-@M+=ӆ}̮FҊ?=ףK6n ?|>^ǹD_AhxE?) rOQW84 ^>&nJ?~6/b ܋7eexIpz%5Rk ~W"dׯ74|3fw5(2~|;C?OLv0 ~Hk?&#;?ޏO &?4RHfwfFJaFRH,p~cqYpt*x |餹Y+4t'X~lw,7L#W{i#5 4~gev䚏XMd-#Lji0>dcC),cGbI9Zw/,s(obqږ+gok|٢oTMɱʘW8WL$L1b^Xr%{,x,G"r3dsGv;;3S&g,=ʇ+KJ*])L3G3 O1!glZo֒@;B5@&cA5&aU=`c;cY LhLsčKR2eimB&'KDp RNHT/"rي-sOzr n%𖆷8M>c܈a*,)UP@4g ѝ9IȲ\%@^ܚϦ=zfnB(7) jq#'}oצ$qnsIfo5c6J8mY!)BYgvNpY+Ul jf2{YѾ9:07q0,,4%yNl#)B)(Zʗr]kzYENJڲ<5H:fǠk`ԥ͋*zrq- v2qL"i;5VZ36:v1`'u}RHBU*B2E GW^ӕ:>O*L' *2t@WJVU-k{|%bGRBg22/,a93C [dA,u \jݵkp^Jt"/% YQ(}l{UJ73X2`vW W-U#ݜ~=/c VW5X̗@3'&ϱԩ׳4D=eyVFa[@N{F2t^#)Ed{咦t Z R!ߗɍՄ!+wXЛ02y2%lV&+vrrql+"l651@n-w[9-o /\i:`{g1GhDKJ%qrsUO˻',7soZJ :;quص;9aG 1r : 6nU Q/R]zƳDHrƈqW[P0p&lb/8@C|{p ն V^ I$ͭm!7䛄>jgEoB$,z$ɾ6%g";KrG$rs _3xMz3id"!n=:2Q)v !V-ō;Hq'ٌ&`=>pwIl`-};܏)leaN8V]߄1$|Y x߯%Zg5!w>Ҁ{<רo,@sIۖO-@6l<]B⽴^EDKv`Bk wG=VYa1TKY^rL[eD.d{C>7^},E>+a2A'q|$½!@QsC@(@e`E4ZE*2 ^FXLv3; '# sW8~0;U:Q0Er&x3%ΐ(B9CFV;[Xl -YU˱ևN|eYӨ+fY^t,{s-Riy`Zz,˲)<H(Zjtv,jgeO(TNQR)%JeX 6ŌI]_qiǜ %=MWQh}u蜘R#` ߲y צ8|ΚnGn]7/;\v_tcuUi_ƏY1/J0*Ww8n ?PK/L~!PK{VP4net/lingala/zip4j/tasks/AbstractModifyFileTask.classWi[~GH%iVbj]Ӧ 0x4#όRpӦ ަKK.tKw~mj Qp>s{sp ǒ 3U\VaE²xdĤ-$G<qE<<*ra<!11D8Odx^<>%^ҋЭGqxItx|_* jMTȰjwyZw@mt3hl6eڋǯSq6^\ϙYᡫDy'm(h0ml.3oI}Lҭkd_2c{I'm.һ`2zd=xmWE&d21DM42Y]IJt{1>ON\Ю!u/%>A.+i'SZ?'縪l>J 3WL $(YIYtlOYn ͕oe ˥RZ"sc0\޼/\q*rc%o;*39hx.>]&6 Mt&³;'hU B>Oe؋OP<Kvn\u?R{x09N/)?1tU '禌2K'fn$Dp%?ܒ$2IB;\qtSv}T(MWG@̞قrR iIJmy-qx>q̯korLDj&o"x&Bk{6iMm"}q|?[{~kw p89tJ'Kx!0&~ 0&0ȼsIryTAL =S.1ngzzBC5x 7qbsD7>E@vUPUx?t9qj_G{( k$0tc4Y 7 mdۣgsw(m3k_ZWK/g}4<KxFX5upX9 ǞTVjIUaXjƯLʤ>6$Mؗ` o,r6,ܰaY%Sa$}evҍ.a %)^ygcMZiBuf gH}3y. Vd-&8 ֒~F3Rvs=e,`PL;R_C ;KqӤH˦)r XLfQ|6XO8m/PKfPK{VP/net/lingala/zip4j/tasks/AddFilesToZipTask.classV]sD=8Q*miH. K:n&8M  yq#ɡ-/c3L̏bzwUݱ=w=ՕϿaK$>֑': ܔOܒӪlgsPpb\lzM}'B Ʋ 4];\pait;sqN|w[BrPKXvaǧg駓B[av7!I /i6 3/Y_8)X1V | l`@&P(h 2Fd *njnSazP5@`teܲh1WTC{~N+ Ծ[f(2ypCBP mlAH\5kѦK'I~|/ OxBLHJ4ݭP.yGo~%N+O],=}/8,ԾN0F@/2`h6iF=p>0˔% IGY‘xKYx`T.2R A{^X#},'1vUL K]Yb{xN~@䩥9nR|kv]+KLdu18.QKE4OX9&~)@#2%V,YX轌Hnj< nPshtU>g`=Xy:%$DRQkU*μPK&> PK{VPMnet/lingala/zip4j/tasks/AddFolderToZipTask$AddFolderToZipTaskParameters.classS[OAfeXE&M,% cb@A $6epkfCUHL|g҇fs̯?~@ F,(㾇Vi"A2I&3dmTl2L|v]Q3QD>G8y"BBVL/6C*>Jӛ n Sm'm;)Ej3*CGDaN](0K/g8<;Ћ, u=E.$õ(O§pZɚR71I#Xa2k0iSU9;blWYӚ07̆S~"S2PKi,PK{VP0net/lingala/zip4j/tasks/AddFolderToZipTask.classW[WWC¨ JED  *A HB/a&(Xm_'Z]hշԥ$ ȹ߾?t0^%`2aJla&Y#VV=/bN q1$ĩ&c^-aQ.cIDbL&4kʜSS >m/H׸1|%\,e ^C6Kl]C_)dmrib $W-.߆_ 3 [:;;%Xgt!UF iј7myvISm[D9 QߝVW{dKh% ~s p%<:9q5o6%N5?QGx^S!t j:ƀnm4 ~ls4k6i4wp&=PEc*E/:iJKjhwL5ua woh9^]ۭs"5[ 4@!g]G?@(ޱ?qD=Q.'e5B8#8rp aVD1τi{11G:!*Q)k=NT%T@qE#褦Jb>sTgWI r#k;HdfU#TzK'߱ ӑv+Y oFCe "1"4y:,ߣt:)UI=YkzyY#q(Dzuc:jzݣ?cOvU.U\i_G`DNнt.BGx !tґn8G´!Y3Y9jgFxY}ûji'58c'1 れA'<"_&P/~件_"~1^yF,]4x_6D+kxW6 oxNć:T3@)µH_سbtKd CqAFV$Ea%{(PByNpc|E]Fe>Y,PKK5=PK{VPMnet/lingala/zip4j/tasks/AddStreamToZipTask$AddStreamToZipTaskParameters.classS]kA=dhVL׏MoAJ Ph`nvD_`|;-y s{̟~FkfYQ=FP$/[SؔW9a:cp;aXTB Lcv͠Z39sdlQ~lbZr⹁ 0z=="hm{b@C,eGqìg:9ֻ,a&#fW565ܷA+q̦S}ծwqO5IWPK3tPK{VP0net/lingala/zip4j/tasks/AddStreamToZipTask.classXitTg~d&wrs!!i B2I0q @B& $&w3wȢAmZ\Zר*Ԧj.u_z#>ߝ4L9$'w+{7gT#b3FTa"~$< }DE\'T|a|D'Tl'GT| gQ|>& >s=vGzfWO96 ݲxKDO$ .viVq+4˰#z`Œm?H;xKaCSByMkAgSa"[Ð溣XaZFWrdwDCz7:鲇M:А_H5 x&2^ l礏1xXx <<_\_C&Pbm\ Eb8ʕX<:7̤3JhEN<ޗQ'ua vRJ?AuЌ8 e;"Jt'XN'ДьQ!g3QΪD,bs%ݽI=(k=/-Ut867#D1?=:өǜTG<ʤ |h 1یZ _ %#:H_4Nv>1=k  {` E~VXNhX'Hޒ~fN"5nʸe+ka\%zMEd[Y*kgt6Bjjq9dv2Ί@ zf:dur[h2rr)pB-[: [dRn [MWU _$aojxb^(̘AK{7'|v7`MiT1ap}/myJ÷ k8wj.hxS#*ixϱ0-(y@ *_CTÏ1ɊP𒆟H 5 h9~qUZo[^Yp<:*뀆 ?/o4;4K)V;i]&3w-]8"k 7%ͬٺu@6%+qsp|KElȰ̭kVT_/G8c6iݕDZaZGbrZןgвlWYShXfj5l +lwv\RjJo$ИNmZDa%GLEwOo}2'H" Vˎ=$=Α#!OIf`!wdsr kfv.J~"z&̽s^ Wnއj\tc@dM%LU&yճǚm\Em&RN}uݣlno1WChxi(+07D:2Yɔƺc qUw~O2ݠwv00]J3mƝ%ws*bO ,7py[E; X?! dM\oh Wh{|^c ;q(q7v8T;)GނCPފp ϨAJX Kk(L~2JC9V)?dBSW Oce eISXu$[ ꫨAQJJ*UexT vx$c9L{g#Zºc;< Ja'7Lםg,R^1=#ޢi 'Ioq2{۹;, g3jd-jakUQ3A%H3[ 7E]\A"SW_76` 5`E، Bzh<"sqqV0RVb# ܃*BX9AP#J '' hao݊^ClEmE; =AC{ "~Zp>WiAQDC)6Ң \qiuKn&n> SУWG9ۅc`(9ȡ7P-'&BnP{-dEŠ$韬B)0Kţ~qXԀ$w/ruҪidR ?7)H7^]+6]Bt`=0}ilm}U`b LRV:t;@ Y?ؔ_"6P;*͙gL-j3ӌt٤(XweYnet/lingala/zip4j/tasks/AsyncZipTask$AsyncTaskParameters.classn@I I[K!\P*@6R,d;vUx& !x(P*eᶛ33g<_F2 Kqz c H$ [J$~(Հ$ǫ#o>^aVj]uZ#AJB@0,F|i"C?Tj-T=^GKI F>I$fW ZC-f!e[Q.ҬN21› :JB=96ƒ֛&ðqzno5b:K쩁t?Me;Ju IscssY.ʨ(a9,pi12k!W?A`7U="MD3F2KF>S*C;[M`T5 rhژw<.atbftO*x`ת%gLW WqmK|S,GgڿśtБܥPPK _"  PK{VP*net/lingala/zip4j/tasks/AsyncZipTask.classWkWAb,0 L#k)8v80aFIڦIMI}ܦk߻_VWlW?hΙ{9{(0!A%2^ ⦥yQuWweNTE=^qbq޶ v$e,ݍj%0y5^]?) NJ[UGW$HiRk%tgt ejf\-8Swivg$6@J1lHS# I{{2gK닺WMelM5Tjf|f(;qmF:OЌǞ D?xU\/2]U͋g9Z鬄{Kh rͫ Pꚦ\ö]0gX[r8zPAwmg]`h)DZgTkIh2.$5Hb3V5d1Ps{;MqU {7tXL/ bR44unﮤGLxAfҵrIj4+x+4 '#-T*THWdBBt:zF%Gӟ2D쮯ǣb >)`X /)bDƗ|i+*T5|]9\P |SA omEQ j/{:^{d|W}o)xo+x gHQE!ֿݠ.w?c?PK#8it_7J4IK8uJ°s5-sj#i˭+UDŽ:.o;.->&OXd2KyA/LD b".sO+foc@40M$3ْ!# ; u@BŵlqH6ũnBɲD,[|wn-HhSF5*D4ԢwJZ5VMdtV`2M2τV` ɖRX1!u\H%XވܳWjTOlaMIAui^FFdQpCA'%{]7M\+'ya+F[mnAm7.d&: y38 :APp8yipnNPW(IJ6IEߔl]%  -VFw Վ+!ƇSʱCosݨqCC&c/#xCw i!gx!'[8]3XMqnz'.0Hьǫ]ccece ߱-콽 a 9@t$WE zaȏz;8/cI>KHpD QQ܍ye<i=45Uo|{-?8k} ıG9zيmp-RIHh0*<@`;!#ts/ONjoPnPeBNg[؏U0pPKbPK{VPOnet/lingala/zip4j/tasks/ExtractAllFilesTask$ExtractAllFilesTaskParameters.classRKA=OVψIn, Ԡ_ds].nRP>U:w|Q|ogofv_lafcǂEbsݞk aj^k]gTt0YE}aIbvF淫g FM2*4e(>F%weʻ7ΈhUiiOF\K' 僽(A3Z🪻uQ,6-`Xxy55ڵzpQy6œgB|J0ǒ2޻MưNۦs})W^!o{B-)(1B@phm^m.-*OSD<"(J@%,&0 obSЗPI8#짂AVTLj?RsP-vCPKzPK{VP1net/lingala/zip4j/tasks/ExtractAllFilesTask.classWWg~f ;;!jHhȆBRnJHZR2$:3j5Zm{z^&Kjsy;2W'z :OH(RFBLόqmLe2'4coؙ6hX˚{`KW=s%%¡ѱuO%Y=vt a5=_7b:}T䔥vd $ur!W&䘮M薄5Ir֍cnl+BSPj7m#?;hc:3e|d\$z=q=Ʉ-e)465Rt4d"> R,}39- iͲk4lED£k+SkXӛJ\nb*2.!^#5'*~muӧC#_W*~0U *h*?xRg\VqY=s|Jɤ/*!#cQuP1" SMoo*%!*0)tHhڄV_'֍"$ tAN;qFs]`&"ʕ4 U˫< 23;֮ywF2tzz݆ xZP)Y|n\3O`aZrh䘭^2`Ok>K领1ސ`|~* $ʅBL.:C9(,>i8{Kl-PMē3)gĈ1fJ&xD1JB['hnU^@ҊٛO'֎μƽi8 ?xA^s@~J?_792&b˘q4%q3iӥmH:Eϴxɝ&Lgs$udTcdeVUCab hq#5{Ot^N)qYw|W_~ )ϧ ED9O5Բ)| +t+r(q$G<A|DOp{!W3]p@;(\nEJ J2(@2~Ԕ@PeG (Z-WYgPpUpKMiuTI] [0\S M5neZņ!Sz_tUG\iYLȷnK jPN)TMl %:o] _+;l_lk^Cb$q Lj`_%>o;|тKX;J 8L }G\bHru()VF‌{89=@ vc2"z {TV[wCɛoPO_LEQ7:}3+OWg%s{u;x @ZBuvEh^BHȪ| ϊ>E콜c*D1w2w3눴0."ٶBo0x㤭2e=JOhz%/H$e+chEԟO夗Tΰ4};y47M8|6kQ:dcGZٍI 4aaF(cEU .ʰ1OR'1ˍ՜sanhm#EޡUAȞՐE򗼚 wo=bpn^ky9"8y0 DZHk[&-c2ϧ%<0"IjZKeY0՗qPK 0PK{VP-net/lingala/zip4j/tasks/ExtractFileTask.classXg~&N&,d) b@$j8$u Ʉvw¥XZYV j=+ՊB ,T-jE}_'>߷fJw=;y=ְI?ja݃qqo㨊w;E]n h{5ixנ> kQ<&f?~\'OixT>09װ_/ǗU<%~E p6}G2KU![ߥJv$P\}pBx'b 3 o4bo,!at̃L7 lF60@3\LL(NUGV:Nr+aF0v2Zvxt)>0w卙;FEq b31Ǔ MÀv,aGIu`z\#ˈKC2wQx q)o#8vOR&^L2JwVCqpA "L/r҄Ucj6U8U4y7).D~wcN0mC~ qzEnL$:,B(/KIb-Ƿ ˞|o=4%x%t)sQyha/:xT"[UZf z*sB Ppe#(V"e?Hy6:V +܉"KUiV*BKHBq#SOV:bj<'9R*$=W `[1%H'Ҥƀ408|Z{*f`wZ^ Fdf"礙Bୌ"/ÐR쏟4( 0,j10ohqO{x[14C0>(?ûD|Cf16tq7j@Q(RP(Ǡ,L9Fp',PG u)`ZLUOV5$g-鹀X$ٲ["[lR9[&P* dPՙhC AHNfAgHǺl3Gqh f:jxz[ZM<;|װ|\PKuq PK{VPSnet/lingala/zip4j/tasks/MergeSplitZipFileTask$MergeSplitZipFileTaskParameters.classRKK@6Vck|z A P_(6.֘T_ăzG /3ef&;/w1DSH`DC_j@֤+:U~m!^bhY VfS1:B엦:P{6)w!n|L&6*ݚ+x+~"Z< .Z*zו^>ŪE_*e~ѧu2 dHqZg5.ޅc}$h GvjF;PKwPK{VP3net/lingala/zip4j/tasks/MergeSplitZipFileTask.classX xTu4=H0Fcb 0XH2b1'i0#όlYL%Wı ٦6qMI6]iյC{i$@>s9ܳz@("R)\j(Q4CJ3dOfHC9L%m!*#6Q+jVfs0X4_ a*j,5Ԫaԋz4E|]jh۲̐&r50d!͂>k Nv6#v+qSI;hԎX͟G[c=vD0-j'"h޸azЬx`2 `2iئޓ`u8N5-X${Ͻa$$D)_hBSQ}p^;Ji[,dEvZ,zajpϬUYkp"LfI0?d3@<Ng5ŵ!d p,NurDҊ'ζJV'%|KpQ>qF %cI+pN슇I;*'ѫT4zyB E`8`mۛ`+sX /"Va}$F%bݓψ~;0(]I+tVk@{M6d .s!k]~W!W0<ES }N'>BWxp[*<3u ;=!Zutti '?.`ieD ^X$Zz@ްat8<0>HX fp=Vz9 rL1Nۇ,!AğA3b‘zA<:- !JWvb#;ψ7E0+ĘKfIpV`ːut9OVEJjwdK\^r9oH OQ g̀i˨}ۭf:lD#oA.):L PYoGq+!C< Y{kI3q6+FGXP,H\6։VG>lQUX;n(&[u@&B$İ`Pؐl|]EQ^;OYuFػޒe|ێ9P/R֪lGQ3qlTL +Va3ч~S6&o[P]%*ٔT ofQ7j2S]f>2*iS[MiC:MZ]j^+tvSvNCvr6[\+יrl7SȍXא)=B'q̔^/}xAU:M闰SHx +EZ٢0`siŔJ[LfL'+M&S 7Ӕl3e@s'. S2A^SAc ޺pDRϪf!9lŔ[65|Ɣy25xYS>'W=)w(EΕQM9Jx s+ |Q4.xǔ{h7N&WK_V}j_ ȃ.O)ԏջ3j|ESZq@KםdY.YFBs;1ek'Ō ctdQ:BzU2ks2ݑ16ɐp@f BNj5N ' 3^SfVSUgY#6}St_d_ ~+zZwʾj}T4U_XvST͆SjU81c2$ZWk'˥,"-0w6]|SvZ|룼zRf\3p bBGϝ|EKrb88wXnj{9߇ٳb1 _2e~YxKr&coYvR<~R4,*P4!!|h9`ĴAye!>,w4Fwi(KeW廔:i<4N 7y}/ZiO_T)x3;`@ =l "r-n|s)R_Cn?~3܇UDs{IUĽvwݫ"+r­~m[y5QNC20'pcUם5~=]W^EW&PziMʱ颴yH;T({;ii{7kwֻuf3E=zv )GL7)E/ :,iU;wkj\$Zo֓q]=dl>xs(y#tW+knCp6q`ܩ[%t[& (m#5tUpX0C`zϥ.F~ ÷2{~=*k^{[o΂%X~ gn}LTKcs0GAQ{F6עW=9,Y7Ȓ"&K|~WPK )PK{VPUnet/lingala/zip4j/tasks/RemoveFilesFromZipTask$RemoveFilesFromZipTaskParameters.classSn@=Gݸ.  RERU"UBx%ꢻ)8T$ >B\邐!us_s۸[Ak>Jᶇ; /U,m/y.ɉdDS1umJW pcCTz'c҃.(.Ã4^kH+䶽yP$/f)TZ>D?rD">F$XrG2S%&QOWOC餡tba$Y8qE,[5>Z, Ui&zVȰ7S1{ӫ([CԸpDwN0[ik2TPdxx^:#"7gqVoJl++уrz0O='d(-]hBWy)K'r][ޖq=DDxJ}:\'?%dӚr ا ̡eT9H72nf*d}%T~PK-[PK{VP4net/lingala/zip4j/tasks/RemoveFilesFromZipTask.classZ |yJtau Fc!:vGծ N;i&NKqIMNk\{ E[q=&}Mۤ3eZ A {~: :2's:~ ^(t:|%=ႎJ^t|2VX"Bv@n?I]X$y3Pj*-O+8ݑKc5 <&:YRS'Ęy2JHxȌ5z߱QOjB~޺rJ%-BX!.T2geÙ`'_EDrrh7HXd_,Ȁ@7l%?EB.O #1'WXhҌMX$gSi=DFR$6J&9%X"D#f, h2>JS@MH>:$rȦ2ï{d  hp=XXܕF%xLPNSʸN FiaLJW^,v$v't w;LZh =4hN;4|im ǍۆW0Άd$5|MC'x54P Ȿ\߳3iq xǩf? zW[9DL\ /|G=OEN\qa;}N9U,:D?s_o$ ;iRyl{"REj:̌ɶ޸&GI3y̴:Vm+9ML&PRΊFU}bΌXx"\1R&@ fr7swmh >㥡(IHޱxv\#Bd|F9YS|oe2Z! )[ 㚁4pC+VDղې:d{[O~3Sf"49mW'̤?l,Nh4~$EdS_ءGR*Ehe4LtC`^W0R54J YE9DaU_/DœQfHiRoHVxk ZnC)uol7.5Mn7A6x5>ߐM(ݫ㺄L*8R|riȝِ-0I5i1U&yLϨ-ɐv0.ېmJaY[ { FCx쐝 ]{ #z !+>CP~Pz@j2h!:nT\ aMF U19"׹x <x#~@vs!(\C48 ;y孊e{:|Y?ٛNA璧5)2ڔQhՒ ?!y(xhpcw 2(o&P ܳko<%9+V_Ta4CYV'L 92rGȘTz9 +o}XtTyd,2K'B2V7Ļf`o͂MݨV \ekBvep4S. ם+{x$fF#[٢>vi%h& 3MMO+˕]krP2cbBJO( 'Vl&/-ŴfD[4IXDiS>3coH}gk'0R"^=(:TN^q\ӠeSu9]A]s}T9j1. )Q&/Gȡ'bR?)SxJȶ Ⱦs?\\͈uuwn-l}sوZ&"7.x\#Q'ThF2I&i\ Sm%7d針LfkՍd:Cc#w7,6wrgk92&ùy95> 5u(mбUG ivp o#JI*rVqEJyҨCm+eeէ0Ag\AWq >%V.X}q4f_%]syl㪡jw\g諼>1a2Ao2볨oЛ}^_a#iln2(v䔶<4tWqWv}46@P4ؕu \6kHPxo_b),Ӥz}zuay^ * u:e*Js}I>Oͳtl}W Y#ŏ-0R:3n{9.I9Ē'2|R>E'Ay^^"%Z*I߃71QGhflv!]xmLNA>ȷ؁ ؉K /c&[+_ʩO%iAԦ_ǀ|P 篱Tq< |XE)&ބ7r? Ih[JUyWb)L!F/ӈce5˕&~\{5R(Bi g4%@ yX#~x G5<)[m^ÝЗ)]C %\|uKafr.wymN6 8ޞi{ gPgwN\l?,τH}uTyKshlqzvN'ڼ5ӈ=N\DU>%쵗[fZ)d(wvηM;#NޝUn7G*fξ c0_CWwW ={u<ܵuwXؒFjwGk_.~*kZCf;&$9VǼYXL?1-kV~4e2yc  lPއ}48l?-;ɁΠQr=4vΏʅTK}}jWfJc7G'>'3WmqЃX*X k༑]`3@ 6V='Yk,)ފx6Q:-\ֽA%<[Q*jx;x '?_`PK S $PK{VPGnet/lingala/zip4j/tasks/RenameFilesTask$RenameFilesTaskParameters.classR]kA=שׂMc֯*L#y $  :ƉIؙRP|-&̮4Ea9wOlFE(rW&Љڑ{>SX$")P둑n*'[9LE}j3}]uU{3I&!{9;|}_zYn+yX. R$&WBs.:s1O^ϕy: tc uȥ:_>aTq]> ""-G ܮʾ7ɐlA嘚 PJa$7ch1Y6"] ;wف ,3kSe;Q@WEKR\bqW wGр E-v*gM РAAep tNƫ5n7B91x w芮f3Ux @:ϢukZ#RT ^/V9}8"> z(5 6Dp+Aodn76tؠ!8lp Cc(=^G9fp$+}|3F9ߖaT*4 Eķ7Ye{1*U(&ӚIv D:W}Vx鶫"ū0Ngo4+U ߣ'J}73?d~DƏ@kZbTo-QqT?SmhoV8> ~Bho?-^mwEd Q^+V >i@@r`H5YzΠh/E3ƴr0]vD~T7\>Ga):ƈ:79mL+ndgt-/YS'UwO,x3 t o9K|;sopr_Y"My,y㋧'bzu4e555̇[P.e Eb X+6gZGozqd"kr͎4?'R_g|3#kB +P̠ A+e+V/v/\>)Vm!]mHX; "{<+I=tdcMݦ@ePx53<0xMEpECiPug8dT f) 1eYl%i5M+F4jzErfLKRPMDԣૃO* 1i wЮ<+3gMT2V9nvR%m2u`̉ٮH+ 0k4/CbsT.>E+lH ŦA+%0IGN6K2A7rC~85Р c!10 xyu(q]˔S2-z¯(-\fYV/KfP*Ie^3-lEU"Z!Zvj8D. 0IԤ+AP̬8i [MH曚|UlX`~@O&?s\3NUxM3=IZ|i| W*{z"rP=~/?|;?GyN;-w?e뉃&PRQ# KKJb\OMVWwBOS+=G$u{tOk#Zd-\E\zŴZ,ě!RHߥ-s4[xzsrh 'fѥF f $ΧM[idmKT YߣCЗ2 B̏W!OBm,p1&=t/B? gt?}[?"pQ59< IZ~|={S)*Q4zL}[==GokѯhFOk'= Iӑ"+ӡޞ( 5=+EK{FaTDL?g*̌LyietH,3x> s [ʏ/wJ+tRo=Os-(h \v*.#7N x[1`C5uɊdrZj8yyIDMVZPRG6]px+^n+1J}\:,O* Z X @ԅzӋZ !%+9TIً\5{ 3Ihjv'If0jm'za#i#71 c]$N""]瘞$~3=ÇS)Rx+m!eUtߤ64nW'y iqa_9G䞒H|c@)ۿk!EWhkzߦԼ8z(2IUY]zbL"jUMo$;~I `+Ik@~ęu$]`s!I]|47p4ϻP E -C~[ SE& w`I¥Cr} f{>)Tnj&y‡lv zQ=FRBZ9>b%D F"5Euק~~OFKOE)a0֘wK_RJO(>/\}|;-Ao /_epqk=(.!J~G*y 'o 1=[*QǟR߯,PK{VPInet/lingala/zip4j/tasks/SetCommentTask$SetCommentTaskTaskParameters.classRJA==N-5YW7 @`eEoF[g{W%|(zF^UuNu7WV.UPxS au:R;8<Qгrxi*ɡ0V:P_:Tz,0˒;Ta%]\L+?ˆtP:4q*7DSEV'+GQi^cm%s3L&Hi\^gY}@D~W~=I}SnD1b!~qIJѶΈ=3&%4C-!Etx7/ԸFx}frDӲ< ^ a??՜0* )' 0Q2PKq5qPK{VP,net/lingala/zip4j/tasks/SetCommentTask.classWYSW.644*6n6$FE :(,h,&$f_Yy%ҔR*w Cssy^j`4DqHJѠ G5ÀbPCuzCÛxKNHUj0!NJΆ垩bDRFЉ1F]'딊qUIpM7S9dƸ雮'mHgrYy:fZ`mmei#Nzd|\nŏyvT[Ta ۩ N4<O/ MxL@ 6fLJLJIckuc*fUsjcQ̯g7Zfæ;Z/ËwM3Y?黦RDr!0œM#|ZL;$,TwZf=7A|H\3E#fqVtňZԩ^# G88y.ef|˱=YT6mRH8.˥knʥ[@5-VY>H44aN@"j$iچuy|K:vsKK:Y7ed精ʾQzc-|1 GY-bD*Y^Φ-aێfc#;kc':>utUg\RWʠ19+k_FǷNcRc:tlƢ/?k/ ҏǣ2 ,ϰO+%ÚJU`pԤ%^JbOXÆ7c~tw+8Pk66`$5 S)jˣ>71ikbFg0i;xiodvslG^;~fPJԔ'k&ҎWl&#`-\nT%;Otv4+u_2yqVZcUSDS(e^{~Ur,%h*M@0"5 /*½Ϳa_epQ*6FY r'; 4mUmh+XUyusXpzTِBfp*'4Fm=òÒ"Ky"e7О%XwT)P7Y`q[%*ʀUb0..*Ӹɟp  {(Tj0`1Ja'3s21koU~'37M߄^L\̶`+MlvGPU1kSCE{%?0۫!S]eUrR`|dTN .> um2YH TXY,/[`/#bl(%_4D!½B?at3OxB 8J0x%fҦalw*zq\Azs cYCط+PK(dE*PK|VPnet/lingala/zip4j/util/PKPK{VP%net/lingala/zip4j/util/BitUtils.classJPϤiDkoκ0"B w5[cZ[Q* tJpP$*09s|w+"r6b61cb`,K_UBlOۇ.!U?]QV 틮 Ց櫾OM Bv-甥c *B|\)ooBBDxSt"sOE#M/ˮ݆!`릥8'!OMgr  0\ Vb/>C\G?`Z `x]5WLzl4Fc&LRk,#zgw_?iFL CJvs5e QV"LPKqq}jPK{VP$net/lingala/zip4j/util/CrcUtil.classVMoW=ϱ=x$!J[>J4S'$&xL23cĂvBĢ]T 6Q誛V]vE&q0%Bf{{}O!#b7N8U1 `XE 'PqF{8+59x_qa\qфT0 gLfGDN1=_/Ӻ]6DOZE?-Аng)=oʜNs65yiݵ|]-O /~ƶ gnZ#Koٙk\f8+olZS~UXNF7(΂kz^`a>*^țEU$OŊ@l +<-=Ak+@Ґ@pޞL"Nd{{h8^ HTݬYQ@n%b\|)NjDBGc\H?YZ p途?2,лõ,Og5c!wyh n C%¢/ wUh?;[_Tw~4Q4W?$ëؗ-`]'#x"v)V}dD8$萨sH彁9?w-Qǔu ّs)o97LO`'Lvm80ȳDqq~/^{w) DzjYCbY/V C0d0R7ځs;;J= zQpT1顊b/0E"7BUФʐaճ|hAb@, nn>[ Fi6Ijf_m>nw^jp.nizLv_.V6{=GsxWηIS9 nh@`{<4Q;}4I}~|4|V |47JNCwHN̷xV!_d6iny |4wx=~t'G7.2s|P>/?Ia#~~?*a?&~'D|T{ǟd3"Q𘇏LPG72 6Mk#'d ڷ: px(1IB'B6Em x 3OqDsJT[_%+?٥t:ܲ/& Ls˧ZYE60a`oV>"i[Y>]:do] 񤅌Oek CÖ)ډvS'0'"`EW(Hn:I+NjK 3P4b-vǑ+[̟8mE}@4 C-ȅiz[;Ƚ' 3e: o&S&F_"wKe_KZ&̴<'6-d|$eqlF X, DƾP"A V:CIlޜCnD5:r B6. FyID0LO ^,4rYIfr%0:PXf Mld kЃ 9H,N@_>0-aJBAl{-7/)69fU#񋍑Hw, /LIqOksR"/9sl8 jLd.,ozW8 탯'Gw">{w c{%AEBiнx,%JI`h(20c{S ^I \ \>6gi$[b(f fDJhfdhMwHEgNKƖWLsYNg @K hgeE,^Y8QDh,Y&ALGp,9* pOH׼l#LEM@rr>S1_PSyUk*2MrM5^gp_H %Gb%  GCeدDw*Oτb O Y4DtuΗ∡fj*4U`F7&O|ܷT% Zjj.G?d]nK ij4eZ(L0"#KS-H& O٦:W0U*~jTT8E?$61%0Uj~n:TMp@$,k"Z _^Bd2ypTLN]lFՄDT͢U 􆩼k(o@*B]tHфL;,UOpyj>ڬ.k3T:Tsx&أ _B&gMu2Tze\m5lWmE@7Mܰj/7+Sof4o& .i JRڭ 6UT{}> م;6hb 5*mJeDcax*A0u<Ä)Kl0ӉI1Ӓ3zwl'Rl/$g杻dN:H/K<6Gˆbmxs !ԕgfgN䎝(Q$ƋYʘm]tEvp/zbG|sfN,$ÑTgشC\cj--dvv$$֭w2f)]Q4G%-So/"^op1zVq 'YVVlpeijέD#~(kK⒉] V[?J^oHc4^f]d&ayf"iĻCW}Ճ7yBYutbzD͡($9 i9=A\7^%!b\򶔬17+ X7-mI%(^L:Kd4آ$M/N'YL4v ʛZuvF##bJ:c2ʸ|觝tY2pskGKήFlj %\|}:/ےj R[QzgSKW״G\{-?g!4JםIw2kg5S*x_ƥ呚%o8Lig)9Qfd]wbUOsÑR΄ p"hkajD]gjiѸ9-G; u`b{d5lSv1RvfqAuE VL]mR>\C݈h!C)#bT/|Qt}[OVA@z#t}!v[_y;DΣ1rz_Y5Fa*s|xGf}͡-"j!-Jh9W`ΧzMIUz̤ŠaP4۠GsQ:lNrQn#S\0F9c;F3&gQ)[Md BtSV.Z#Vׁ&M\t} PLsSA'q&4Q:.ׂ2O6+Z*_Q*8Dqsݙm$f(LmhV@=Z[gjɏv3KfG9ԅݴzpr<ۦS #cwJ?JOjk/+Kn$i-S=%gQz3„ LT1}dR-Cu/w F!HwfSCbNC4k(A{ю~nNѣt&2pK+I4oy+sl>O_5"} |7Xk/`mOܓР z0Ђ"o8:YhR^m /,8g-UtҹG@km]{2LM%WkCNPׁNit9r;dIIe[eA6JȬ25X|(UUTR Q umUY.x{:@΄tE'hliVӼ-a/^ITjc-.P6YkGUՖVɉQZQ,tNwԻ ]·:<@UrZ=L BWA2 op7pn6Ҥt v*vƴG۩'S"Om ZGi,ZĉȔ P/,v;rRO'uʓ:3pKƨ-u~V#v ϶Wgđ%x:;j`ًΜ N&.SmGso[ß _ ūʵ@ !; CQ 3(/濆J/\oĿOBzϡ?s-Wk|1=`;_AopNr?Ƀtv#uV&0> ~SHB=eoqp־1a%h9t w/ĸ@{ Q!Mz ^jO~ SjS`eoA꣺(?h o=AcS 9ÚNJl b-G[a>q/|k`=J'1T!v1n&QH &<8yfFI?#bw~vO`;pNJ[QJp"v<Ʈs1qM%J_֎y|9[!GBL脾l.9B΢|r4x/?W)6|ŶzCO]UG!L~22Q 'i(]yȋ{t6[yz_ Y(N>L3 !> Fđ'O<]‹\>jVr R+J^I\OQ^E@o F^KEt'avs#= nMC7_x ; d;Z:^x ֱi0;L5aNg{ VLeQ\1Ipq1zS[1`rtpdWTf}aç^>N,㹄Jr;WY[SkާC3ҡٚyVu'JccS=km^/a=>qz+zϦ !bgB.+#UV3I0QσBf|dZVIO|R _UpsU4DRI/HNf0yς bWG}7kʆ뭮 @ JX;. fpr;M>a2^j~V>L1 ( ?E7t ?X!@+ij.嬬]e6j+ l[eiƛ'oqO$8Fdp;k*tBInѣ[eLEF6yQ~TI넶Hr)?UbCv U2 ,s`i?È 6bK|V6Sf`&S @YZV/X*4]/nOvŻ${7Rˏw@ ܴ'=rSp zQ WrajĚr;=wmjΓ.55~RSԍ)gzԔ,CbS*|{ {Wiב~BMo{>ߥ{C>X?BC~.$QDI!"D+TWJ~xLTjkWNjDYMhWڽ]fA-d-)N"#َi2JԌ,k.!2/)p㉇7E4 pH̥,{㫲;S)v~NxA HFidxZ0Gg${ ktہ]~oz}jj^] wI.o?'PKzX'>PK{VP1net/lingala/zip4j/util/InternalZipConstants.classTV@í+7 ^Qi@QQ FҴ+IˬP#SV|]>~z&/<شk9:_}` E񠀇X) <a#a+quCX!TbPK zPK{VP"net/lingala/zip4j/util/RawIO.classWms~V/^Y%jl9B!8bA6e--Yri^HK;I3NߦI!_t&Lqg2|NskkzF={ysι8W؃Ĝ _I\B9I ߔoRLePMUdX[O5/'PK"%u Fәh_!ryBn׽DQ_pŞk.,kKu}UȬo8ŇHlʼnͻB_mכc,ڄn;A,T#tnŬf]S; #,n^L-eUItVc"c%Jì8mv-geִZ3X-/\|1h7+[IUSp YF0| _šΉtgdxQG31pB8Š.IL.nhuCkD<v:Zo8WZmTl5QF${̐pBqzUqX~ jtsFL^N ["agfTh¦,EJ$ܵhk|؆GRHz< 4I=Q>^< -{/uy#!sj~8qbЗI&e|b~R9'A&Պ1$hKvwxDz9ZG99 &ƌĪ%:U!;C6;UNUW}D@/c8μEJL`m;8wpyg;ݟXݟ|):(cUK|p~I qsF)B}GG3*~e8B|Еs(+F]Q b1 WKͷROҏm~ O03),,+f=y ȧHeb#ο!s]|O45+zko;}صc:%W%0M)n$ϱ'"O׫,Ee kbg!>Zvgz@WqM>D~PK2'>PK{VP&net/lingala/zip4j/util/UnzipUtil.classViWW~.& HE BŲX6$ 3d}o_SΩsw.ϝ 1wyuRF=W1AU\.( bX .*`D(TyzUkrU#. &TLbJ)*RQ8*vʇ;L:J# ]Ng@zfpq>'[tהYb2S}E-Ӟ-=:o&LGӞiE/|Sk1j&{d8#p#R@x (Y塽(Gig =ac] L'jJk)Ztq4(Duߴ~Mݳq#陎ͻ|։QsT@XqI`zJ]w܄@XT2UnPW yzjӭe*H): wWALZs)sgzxsX Խ)M M<+Ct{2: S7$]ב1 Hfw^6@MR\GBF @A1rn\iT^k󌶆k.}̊:f5a^ 򰬱1)>]NJm [lu7+,ppq]#tJ7XA[, ojxkj xDV5|OY~>MEO[tR С 58fp3SHU÷N~:֓*6 ogZ JFz,hiusfݺZn NFRwY2=`]A΀c58yMހ1u۞;'0>E۪Z24M!UYrRts3&PxJaK1." c[lskCBNK|Uڧ<М0İ9csY]xN*[DL{Q D2}(-p.` Ml؉\$A@v;18e6tIw_muAj}LF2sdpbLgU?# h&37)7>e^ˤoCf?_B*>ŧ(wq%ǵ'Va?W-ÀqD@.)7qƻ(hnZ@#Q $%(#El ܎Ҽ=.A4CEo֑_;h}ji9JVbk#"xkQ&"RȨ/!=JwGiYR4*hSp?WSWec28M)^O Mr|[~%)sヨ[.念2B j«#%Db-8SB.}pڥ; J($? *HTʚBF$1%q{ ;}wwߦ|v=A)qcIn'S&c32J] zs*pίPKa]u PK{VP&net/lingala/zip4j/util/Zip4jUtil.classWwg~fw6l&dMX&eE0H)iM dw Y$5ԂV"-ւҪ[G{??ğ{hyggKksws{ssLɻLJ| xOic&Gx˳~c~|'EXf<'}?ˁx*²pEh3\6 b^/'j~(ȏ.b NS`'ǩ:qD8 +8'LKnٶ3If2}g$H) QUޥKW,! X. r$4uC(4+Ӕ6j~jݔI(aED^7&Լ8Oߟ(z>G;)mТl:=PFR_aʞD^5&eM{TѶ;͐fSn,-YKSmmniY۴S!h3F׾n&yͱ-ܢ[HjSdыx1Ō^c; ΝD˴Hh.[qPyȩmӚjL90 k⤒X,ׂnpӛSŎɝgMfٽ,u:cn5Gdb{{;na lEGgo5fQ8ٽfaҊEI3'a_.+SsG55Y:B1qu! r?bQsHjY(bʘ*٤6Ar []5%J9H)6Y !1ב{Olɲ4,Oؓ`5Bm41.JUHi[RES3`U9kn5&*;9UOlk:iLJ̒ն>ߍk &xo1bwF4hΐ, 7:ړQ5F7 ޒ*}(vsA\J^{vD׊A 4ӂx wX悸+ *x/1\U z$H,%b!R:eM+,MDu#::4:nZQU+F5#kMOZ.AV ax;pыZG6}eRi!T>BIkT`4U2.'v*\VJtɵ'U-5,lvgn*j1*-['uϷQz44wiχ$ q̥]gT>1SFϋטtcNz,RΏx싕D< y RFEݺ̷O9$}i?pX%FRdzd@zX9|6t}> ?vuGUrf/V~7( z~ltc_t؈eCq'ī/~ێf5f=\ecHߧyP%ϡQzJ3B -=y4>tO1RBz8*&3ZVI K`1,e A?yx_%LhQ0(>4&Ձf45yFKff{BuOn-rE_[(Ls3m-7-3͈ ?k¾CRhw˖29,8O8)R^G4X8˰#=D5FDS*a; ]S)ɴ|[a5dD娓%?^7Oe$~?Y:#w^!3f^[RωOuZaqKNM| E*}&F2I|~!]rM.c=>2`&[Er\4yn>K;"9tlt^;xg :n꺌G&^RXoSCwmlHC KvIR_y^Ji:Ф( /[nJ\V:w'^v^;Q쓏gE,ay5,氮y^C}Xυ߰o[>_a:Fr%B|pr#Y?G'['^ ^d-N/N:z$M.|bt&mԩe N] "YPnQ5rssKt^zTABAa{)2c*gIڍMn:!fŬM[HݚpB Z]X[fvEke[kVێhZ2dnPރY; w 1^i DʚOtd`}فamImsä`tSWy5ԟYq6!8ێvxp9әUQbmB}@cǦqFAZETdS=EW%P>*2T@16QQQW sG4°(Y'!带:*_Mrl+x M-3\9ޠ2iuқ\vj񤅣{41#nĢy#*lvctlq{|,< )>9V $j3\>PX`IV)t)pU燲)\i u[UaZ1 m+kzjd$1SOO4@SD(q@E Q䲞ed.4ʟL~Nh},vF{O`giѪv_y\) uh_u0uз_>/o~Ff1-T* 1DR!2I]Ø)1Ou)pPxw2 +&!B^ `b';zH vP:P54o8mccbOⓉgD$2|${䝣\=I.eO7(y$e{Q ç Ѽz/PKU PK|VP META-INF/PK|VPE1 =META-INF/MANIFEST.MFPK|VPMETA-INF/maven/PK|VP!RMETA-INF/maven/net.lingala.zip4j/PK|VP'META-INF/maven/net.lingala.zip4j/zip4j/PK|VP.Ay5META-INF/maven/net.lingala.zip4j/zip4j/pom.propertiesPKmVPЪq.META-INF/maven/net.lingala.zip4j/zip4j/pom.xmlPK|VP net/PK|VP T net/lingala/PK|VP net/lingala/zip4j/PK{VP-L9>T net/lingala/zip4j/ZipFile.classPK|VPX)net/lingala/zip4j/crypto/PK{VPX),z+)net/lingala/zip4j/crypto/AESDecrypter.classPK{VP10: +1net/lingala/zip4j/crypto/AESEncrpyter.classPK{VP\ݠ.,X<net/lingala/zip4j/crypto/AesCipherUtil.classPK{VP٬(C>net/lingala/zip4j/crypto/Decrypter.classPK{VP;(B?net/lingala/zip4j/crypto/Encrypter.classPK|VP I@net/lingala/zip4j/crypto/PBKDF2/PK{VPua>.@net/lingala/zip4j/crypto/PBKDF2/BinTools.classPK{VPJ|]13Enet/lingala/zip4j/crypto/PBKDF2/MacBasedPRF.classPK{VPs82Inet/lingala/zip4j/crypto/PBKDF2/PBKDF2Engine.classPK{VPA0l8!Rnet/lingala/zip4j/crypto/PBKDF2/PBKDF2HexFormatter.classPK{VPh^6Unet/lingala/zip4j/crypto/PBKDF2/PBKDF2Parameters.classPK{VPT)nYnet/lingala/zip4j/crypto/PBKDF2/PRF.classPK{VP B:0mZnet/lingala/zip4j/crypto/StandardDecrypter.classPK{VP=k 0x_net/lingala/zip4j/crypto/StandardEncrypter.classPK|VP Aenet/lingala/zip4j/crypto/engine/PK{VP]<G&/enet/lingala/zip4j/crypto/engine/AESEngine.classPK{VP6W35*|net/lingala/zip4j/crypto/engine/ZipCryptoEngine.classPK|VPnet/lingala/zip4j/exception/PK{VPxkO30net/lingala/zip4j/exception/ZipException$Type.classPK{VPGw).net/lingala/zip4j/exception/ZipException.classPK|VPUnet/lingala/zip4j/headers/PK{VP>J9 @1net/lingala/zip4j/headers/FileHeaderFactory.classPK{VPh&X,Ônet/lingala/zip4j/headers/HeaderReader.classPK{VP!_/ɻnet/lingala/zip4j/headers/HeaderSignature.classPK{VPx h*net/lingala/zip4j/headers/HeaderUtil.classPK{VPٵޟ XJ,knet/lingala/zip4j/headers/HeaderWriter.classPK{VPyl5-knet/lingala/zip4j/headers/VersionMadeBy.classPK{VPZ޼6bnet/lingala/zip4j/headers/VersionNeededToExtract.classPK|VPnet/lingala/zip4j/io/PK|VP!net/lingala/zip4j/io/inputstream/PK{VPA( 6;2net/lingala/zip4j/io/inputstream/AesCipherInputStream.classPK{VPT*A{8net/lingala/zip4j/io/inputstream/CipherInputStream.classPK{VP~c>net/lingala/zip4j/io/inputstream/DecompressedInputStream.classPK{VPWg :_ net/lingala/zip4j/io/inputstream/InflaterInputStream.classPK{VPφlF.net/lingala/zip4j/io/inputstream/NoCipherInputStream$NoDecrypter.classPK{VP8ǍiB:net/lingala/zip4j/io/inputstream/NoCipherInputStream.classPK{VPPx?Wnet/lingala/zip4j/io/inputstream/NumberedSplitInputStream.classPK{VP.CĽDnet/lingala/zip4j/io/inputstream/NumberedSplitRandomAccessFile.classPK{VP: 7net/lingala/zip4j/io/inputstream/SplitInputStream.classPK{VP7aM 7%net/lingala/zip4j/io/inputstream/StoreInputStream.classPK{VPx :<'net/lingala/zip4j/io/inputstream/ZipEntryInputStream.classPK{VP o(+5J,net/lingala/zip4j/io/inputstream/ZipInputStream.classPK{VP7C>net/lingala/zip4j/io/inputstream/ZipStandardCipherInputStream.classPK{VPȥ BAnet/lingala/zip4j/io/inputstream/ZipStandardSplitInputStream.classPK|VP"gEnet/lingala/zip4j/io/outputstream/PK{VP. =Enet/lingala/zip4j/io/outputstream/AesCipherOutputStream.classPK{VPm觖 :RKnet/lingala/zip4j/io/outputstream/CipherOutputStream.classPK{VPV6nE>POnet/lingala/zip4j/io/outputstream/CompressedOutputStream.classPK{VPH=<*Rnet/lingala/zip4j/io/outputstream/CountingOutputStream.classPK{VP <qVnet/lingala/zip4j/io/outputstream/DeflaterOutputStream.classPK{VP5HZnet/lingala/zip4j/io/outputstream/NoCipherOutputStream$NoEncrypter.classPK{VPĪ +<\net/lingala/zip4j/io/outputstream/NoCipherOutputStream.classPK{VP0w{ 9;_net/lingala/zip4j/io/outputstream/SplitOutputStream.classPK{VPo9jnet/lingala/zip4j/io/outputstream/StoreOutputStream.classPK{VPd<knet/lingala/zip4j/io/outputstream/ZipEntryOutputStream.classPK{VP=4)7nnet/lingala/zip4j/io/outputstream/ZipOutputStream.classPK{VP VK Emnet/lingala/zip4j/io/outputstream/ZipStandardCipherOutputStream.classPK|VPnet/lingala/zip4j/model/PK{VP/iZ 0Anet/lingala/zip4j/model/AESExtraDataRecord.classPK{VPO90net/lingala/zip4j/model/AbstractFileHeader.classPK{VP6g4knet/lingala/zip4j/model/ArchiveExtraDataRecord.classPK{VPO.hnet/lingala/zip4j/model/CentralDirectory.classPK{VP͞,net/lingala/zip4j/model/DataDescriptor.classPK{VP L(f@.ڕnet/lingala/zip4j/model/DigitalSignature.classPK{VPArW 9—net/lingala/zip4j/model/EndOfCentralDirectoryRecord.classPK{VPN/ӛnet/lingala/zip4j/model/ExcludeFileFilter.classPK{VPj0-net/lingala/zip4j/model/ExtraDataRecord.classPK{VPށPT (net/lingala/zip4j/model/FileHeader.classPK{VP;P]-net/lingala/zip4j/model/LocalFileHeader.classPK{VPd"?Knet/lingala/zip4j/model/Zip64EndOfCentralDirectoryLocator.classPK{VP >net/lingala/zip4j/model/Zip64EndOfCentralDirectoryRecord.classPK{VPGfU/net/lingala/zip4j/model/Zip64ExtendedInfo.classPK{VPhlF'Pnet/lingala/zip4j/model/ZipHeader.classPK{VPX4&net/lingala/zip4j/model/ZipModel.classPK{VP$yN>snet/lingala/zip4j/model/ZipParameters$SymbolicLinkAction.classPK{VP`Ѹ. +Xnet/lingala/zip4j/model/ZipParameters.classPK|VP[net/lingala/zip4j/model/enums/PK{VPsf2net/lingala/zip4j/model/enums/AesKeyStrength.classPK{VP<4C.net/lingala/zip4j/model/enums/AesVersion.classPK{VP4bnet/lingala/zip4j/model/enums/CompressionLevel.classPK{VP m5net/lingala/zip4j/model/enums/CompressionMethod.classPK{VP6 n4net/lingala/zip4j/model/enums/EncryptionMethod.classPK{VP ^S~R8net/lingala/zip4j/model/enums/RandomAccessFileMode.classPK|VPnet/lingala/zip4j/progress/PK{VP]z7net/lingala/zip4j/progress/ProgressMonitor$Result.classPK{VP536net/lingala/zip4j/progress/ProgressMonitor$State.classPK{VP5Gnet/lingala/zip4j/progress/ProgressMonitor$Task.classPK{VPNv0net/lingala/zip4j/progress/ProgressMonitor.classPK|VPnet/lingala/zip4j/tasks/PK{VP&%86net/lingala/zip4j/tasks/AbstractAddFileToZipTask.classPK{VP/L~!5anet/lingala/zip4j/tasks/AbstractExtractFileTask.classPK{VPɶP4Bnet/lingala/zip4j/tasks/AbstractModifyFileTask.classPK{VPX`!78net/lingala/zip4j/tasks/AbstractZipTaskParameters.classPK{VPfKnet/lingala/zip4j/tasks/AddFilesToZipTask$AddFilesToZipTaskParameters.classPK{VP&> /Inet/lingala/zip4j/tasks/AddFilesToZipTask.classPK{VPi,M~net/lingala/zip4j/tasks/AddFolderToZipTask$AddFolderToZipTaskParameters.classPK{VPK5=0 net/lingala/zip4j/tasks/AddFolderToZipTask.classPK{VP3tMl'net/lingala/zip4j/tasks/AddStreamToZipTask$AddStreamToZipTaskParameters.classPK{VPKxV j0)net/lingala/zip4j/tasks/AddStreamToZipTask.classPK{VP _"  >;3net/lingala/zip4j/tasks/AsyncZipTask$AsyncTaskParameters.classPK{VPb*5net/lingala/zip4j/tasks/AsyncZipTask.classPK{VPzO=net/lingala/zip4j/tasks/ExtractAllFilesTask$ExtractAllFilesTaskParameters.classPK{VP_1:?net/lingala/zip4j/tasks/ExtractAllFilesTask.classPK{VP 0GGnet/lingala/zip4j/tasks/ExtractFileTask$ExtractFileTaskParameters.classPK{VPuq -Jnet/lingala/zip4j/tasks/ExtractFileTask.classPK{VPwSSnet/lingala/zip4j/tasks/MergeSplitZipFileTask$MergeSplitZipFileTaskParameters.classPK{VP )3Unet/lingala/zip4j/tasks/MergeSplitZipFileTask.classPK{VP-[URgnet/lingala/zip4j/tasks/RemoveFilesFromZipTask$RemoveFilesFromZipTaskParameters.classPK{VP S $4inet/lingala/zip4j/tasks/RemoveFilesFromZipTask.classPK{VP-XBַGnxnet/lingala/zip4j/tasks/RenameFilesTask$RenameFilesTaskParameters.classPK{VPٕ!>,-znet/lingala/zip4j/tasks/RenameFilesTask.classPK{VPq5qInet/lingala/zip4j/tasks/SetCommentTask$SetCommentTaskTaskParameters.classPK{VP(dE*,)net/lingala/zip4j/tasks/SetCommentTask.classPK|VPȕnet/lingala/zip4j/util/PK{VPqq}j%net/lingala/zip4j/util/BitUtils.classPK{VPh  $ߗnet/lingala/zip4j/util/CrcUtil.classPK{VPzX'>&=net/lingala/zip4j/util/FileUtils.classPK{VP z1net/lingala/zip4j/util/InternalZipConstants.classPK{VP2'>"$net/lingala/zip4j/util/RawIO.classPK{VPa]u &net/lingala/zip4j/util/UnzipUtil.classPK{VP]`t &net/lingala/zip4j/util/Zip4jUtil.classPK{VPU ,net/lingala/zip4j/util/ZipVersionUtils.classPKm1zip4j-2.9.1/src/test/resources/test-archives/jar-dir-lfh-and-fh-entry-size-2.jar000066400000000000000000002117551414265447200273460ustar00rootroot00000000000000PK @ META-INF/PK @ZBRMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r*IA3&Y)ZƗX5rPK  >4META-INF/LICENSE.txts6W%3ML:14cljvAmQIw%rKk Z񻖽Z%-8 UNtoAom%g/%@*#?NM7]zoٜn{Wr0}h^"z: ~ ;z0b?D0"V#`gH+A6#B (Z=G` VGѦBޑN7j;I)jpᶕ h7m5`G#IGpR)Z7u#>"GxꍗyyJu O&<'Қ=&94w[0? s' OU}]r~]77XW^U_ ss=!UDIS+3|6y{ȃlضaҜl'яK$l7'(alv_{47ʸGt~Oǭ~(:?O*\$^D"p`O36OSԓ0Ou^#ص#?,•=u~A&Uh O^a.(zYwlB'kqG W@, 92etBЮ3(eIZNX6`\ r)[0"@A>% Z$sY*D2a4bq!XRq˲X朂OxxlA'#2fA%M0M_[{꟥Ҟ'4hkn1L yKԣt5>.M l&~Ϫ0j0n:=OR(?UԾ&4Io#QGZ',J!Hi91RVBHU4ry^ PK @L2 .de/regnis/q/sequence/QSequenceDifference.classV_WUݰaaٔBKRlZBjRQh!,K4-'_|諞SZ~j瘜;wf~fx;7y$fcfx2 2S1*4t/5,bIE^ŧ*U|&Ȃm xv*kұdr=s,;*pv Lz >_?` ۠rӟp+׹ڎ_H tyvp]1vVYg&}$ 7lJy  :s#k ͍2=ιY^6= sMڛcRc?d9)U_zKyUYI;(PЂDLL{nd%@ |4?զvϩ'M_ŽYv{Cܖ)N1%-p"$l# IntXr&Gng%R3?UB^/5ϒ6sJt!u/*t|/ut⌊;:b]G^a2usױKGR&,vF4# XĮ:@YL7JXM u׋TbC=1mZ}#0ʄIK, q5C-inf2ZJO1rY'}}h] l5ƂhgQ.cNa3PS )[A%x( bX |_JW;O"C,\" 1D Fp:j$@Bj\!5.2 5.S64he 42pp*/X_nO7i k/c5Ӿ +իݧO 4yT$O>*˔$69e=$jV˺ zYb=jÊ?Kk +!Y0.kO" O:cZCWZ`~F˜曳.FPK @Y t:de/regnis/q/sequence/QSequenceDifferenceBlockShifter.classV}l[WcY6kZnk5Mtnʚ[Cű_gNm @NH-]a*͖$ ! ߹IWv|{9ν_;0~'~6|8  O!!b2-8"(=,䘐>!!B aI!#&R& I7I*Di7^prbD螘vs)7Aݩ`Sɂ[PzuU +gr{cE#L2>]dLѝO 7=9#YJT2{4Yȼ"3é/3:ӻ3&vO*^H%WG&.]\[a8re{u(gQ׍%?-RVkmLSL>W4٥)m{dJ!l.KW'3FZE}pTJc pGKy-Ùq=/'Yl"X'4 UKվ9w%as8'jWpݵݟ.ʆSNĨ1;`Bㆪ1YŸI9L䄐JB1`3f<Z=xSuІ[l6{v#a>bEUaH hy OgSZ@k炋s\hHiq[X!v`c-x V-1áIXw C,7&>mM|;n }ҍ"Wa|ix_"ﲏ~gWx3>S>7hg&Y_$¾BxN+*.d;*y`nr]MύM5cj$"̧w3]Ib6?Bv㟸BG㔅P394vUo Wa˝Vó^u"WVML`dOY Xz>S3l .a{9.aX s@쪨#+q{:#Ts 9"9?.YttHDYEmЛaC k9ɶY^eY^xy_Ru ^!$J_$*/k[ǒaU>G 7dlci]1/{w#NtP}g[pup-60IB)J2)wq :1Gk~|!SXKɴ}񄔌C3[q/A[wux9(r-;2<S{b-Ͱ5-{Dz%i?d[z 53n,IJ zJ =ٍ^FWpe+T g'X#]C`x-g%Imq=ݏoC;;^)a+~13aw!͑~HLuYcQ-qΐهZW.v5{謙XυY~PK @-de/regnis/q/sequence/QSequenceSimpleLCS.classT[SPNo! (TET(vd(Ex2$HHSGK:#v3'\}(f/gowL,E 2b(ы)!J4)Lw6qWL /၄1$kܲ nqU׮kZ6kr|DKvj5õ -㣡5tP45gv00v_eH=3_5j_16dt4U÷9Mq_k;Qܯ6AHu?Wc`KԂ0WbxwD!P}3i'#bj㤵sCi _ bĪ Gyd!݄Gľ곈4&ɞ.JE S|ʤcL UQ PK @U)4de/regnis/q/sequence/QSequenceSimpleLCSCommand.classPN@=P$.1ֽ I1 8i_Dbwqι'<2_Q"UP(G)rÄu 'bВ!})\u[z.3l:"ǣ;w¾uH}NɽΝ#> Dl혏'bWP6#XyB+K?>1? , zR5pIJD5G4)y^(~a!ZR5ȑkR5/ֶUF'vh66a2+,6QQDeb$^K?ll6ʨ8#6j}bH">D|)_baJaRB;ѱ^ҘyB*t6\ `3@"{Te-fr$Q%:/E_"yj'Nt>Y՚؞KTܠ[fh~JzaJFVP'saNWmN>tۗz> Xx /]:]ZJIG"B 39 ߀i܂d.B-wa$ |*unS!>h=m\G+wV$k> i@UItM.AܤX:,ZY !=ܱ񷺶ft-gy.5/M` _ S,77n¸M--Q{%SF`VA{&w5jUjrf*sN/4h,(#YD. M}dtzD7Hu~t ]QPhLqR?w0M.`&X6g%]fQSPlpUĻGG O'\PN:/J-WPK @㕋/de/regnis/q/sequence/core/QSequenceAssert.classS[OAV*,bBrWn*`6 @hmvk!>Ͼ"2]i)MgΜ?B&0'a>/x$bYRb_ `Ud>4v<  $3 7-ڪ =JPʪ~z?kyla9CgNV(5_&O$gjj:FP@1 hl[8h]Fq aIU-WJ&#J<4cFxY[ެ0rJw*5SEFd.\^,ЩbWoݜa6/Jzhf=!IgyVI*O ^o5O6mTMMH{)>))jŒuÒ\ zTf10pMƦ^}ɀ0Ƒd諃gtZN y:n<,CWA\/2Ld X!єyS2)k m V! >o\Eht"p9{E5%_;!l^V"XeGc_.DkDD#5 Y*N!*NdC.հK>zĠeB6LFk9 ψ͕.F5),66/IBi(5%ⱈ3Sl'hc3V{i1! :'N.:/QhK Y~pTSUfgXXݍvEzwAHFol3mo{_uc-搄,;[xsKB, ŚduyiFl,PK @}"v2de/regnis/q/sequence/core/QSequenceCanceller.classM @ Fhqq D"4ajijJqe $BxPYVj6#Bk2UJ2[ Y]h$ ]yNx1PLSvZfSˏiO/' WdXvj˵5 agaaubӗt\\oܐѯލ:-Jկ{QhkAK`K70hݖ.êtH+:']z?ߎehF Acq{7>=Tlǿ mD|yf2 j3S}_B2dWk^]%2Lv+wK%z:Äπn@qx{|*fJ"/dK7ARaKQƸ,Y)Y+*/jhHLa}Ұsj 񓍟`2B+ V:_X+p8}[pvSZ{WFMMGaWo%/;xCGkTGiu^'COd:|,1jQJJZۃ,qj ʱO8z vբ"/tc&^+4`"e{ )9(|Idwy_;|)KswK\<|ѧ,ddnO|7~yy&Jl$O;*riWRhX!J g`Nm`DKW[?ic3 $#O#NRS̫ )Ll`h*8ӕA}Ìxt#dur(#PK @*H  8de/regnis/q/sequence/core/QSequenceDeePathExtender.classV]sSU]7Mr[k[EPHS -Xm!p4)7 O3>H@|pH]f>|s{Ia98|$N9aJLL pBFγQ9\KQ|Q|+rRڮZfZjNDruQΊdLbƭ-L,D9'>ZvoLjii&5lj DmJ,.jo8#K ;:Kb\0DU0:6\ӟ*%z\ee.Q 7Ύ*9AŲ/ o֝/ҝdҜ>0굅"s8b!m$P)%_@U^p\VIp]( κeƢhHݑЖw[ÞuU!bɇX/u9R ϯ{&AZ1蹜r%\Hfj,hRdQ*&=J6z,lzmɡxlQXXQDJÖׇq)zF 6J}r(#ebc ;-ܴj[JCj-u%{׀UQ_oAXFoZ;jE =FVs'.-17K[GYqK|(okp4zk~.c|NYX`bcs6vlQݲ >Rsm]pfKAꜷFÇة'M<| 5@y?BA{m` 0#m i ڂ4"H u4B^X kG*KrWa>V0!Gu6^u~Cu&5G}xOل|Ӑ!1aرc$v;&T]a>B9ctF6xG!?nQrЎi 5C*Γ e壟>͇"%῅2?*/<a/4&1)?lPc\YをՐ6_iʿ†_a~RvNq%PK @7I=de/regnis/q/sequence/core/QSequenceDeePathExtenderArray.classnQ:m֯-6LcZ6bj+ p LC: 7\tƍϽи0|s/aD ,ŢK&`Y{= \5wIynˋT<b3*"b9t-70QM=M]K%IHIG?br{EpݼzQ!~Az:%2%c/`!>RgHiЅ4щsnZdK3ƴtvѭ%w jr2 k4!iކg4AGF7.H&eiE`yc '(C }];zN !m%]>bMDiQ2$Kha(JS). o@NWS >Fmuƛv~\%5*Qا~PK @aI7de/regnis/q/sequence/core/QSequenceDummyCanceller.classPJAkuy xxTD<-Drm ,O?{$"kz?^`E]=}B6$DŽ0 l7EszPujKf3/`$džIRVw*i:fawk[Fb`w e: P%򦸟H=:0D<ZjZ\e p*De|3(dIZaU^=G!WigwQX$3>v$o:M16#>^g ԥ"hw`/Ghu r=Yp@Ò^*6U.o3۟PK @>q .de/regnis/q/sequence/core/QSequenceMedia.classOK@֘ oB@unq$L4\x%ΆЍЊ&-S -jeH=۰]Km[;ɻ CxBL<ϙ$6]w o⻘2=L?e1*^31(8h᪉cq+2\Odx?51>2q]oτ90K1@C$ éǝ  {{Q$)boݎ*aSsʞ^;oY-p{utů +ݛrwJKwlErk>&҄2Nt JJssr]|kXAD>vClx]bI ^JT2՗cs.tRВ[JM߂IDM[rR}6bP1TyIU+ \IhLa'NJQZ/`WX_ғFͯEs6}ZntP?P{y&?z,巶7XcNv^4`EJp:~iӺ[ao;Y4ąyKZmF9Qd,<ޜ<}nK#JbEf*z $² |Yar>BdY}s2< ASf]4hrH#Q`+L¥\f41coѵwB'µ K'z/b8ҋ(W:($Sǫ[49zCRz0fW/^fs3&u=).Yza͊x>Hd# ̥F%ģ>./o(Hm2k+X~JWY)OZɒ:A<+͙dN<2Q&elkcmBzfiVC+[Vؚd V,uf^LagiN0˅ۊrM|oe˖.[X^-/D ܞlbgYɀ|oJKRSJu>hpAu(Ŷ+@TJW5i)b#¿j>8c2*H38yi@QRqU>*`hZٙPK @ 0*2@de/regnis/q/sequence/core/QSequenceMiddleSnakeFinderResult.classRMo@};q:--|$)-HThBT)r$K:"ą āBlM%fvv7[k"9Xg`p-T 6pG Wn0:{ ouF i=Ъl4K-ח'=tG֨x]'py 9>Cy:~_Q xlkpE ZSͤT[;<SXk@2X$@'G2ۣqЧ7=",`ZX`0 T-P# \&Cw,Ca(5t1Aeu,M&/ʕbW֠NRAMVM?C|Pi˄\ uDV?z?G.'/'yF"J"Y'WWyr-|mza{ )AgH_*{t6ѷi"Jqf^C+N`;dRA Ջ ʬ&aM=j!! lIc%e],=<x4_V]~PK @ ,8de/regnis/q/sequence/core/QSequenceRestrictedMedia.classTNQ]2t.K[+pEDK+!ː2`yާC)dLj{3Ϗ`@/&0aWX\5H2p b rS-s:[:V,m_Vrh3v|5sL cD?Lňs,8c5q &bbqJFWoR ;mQ΃N)Az]ԋ͊w&2z1zANJ)zb̊ZxԚa yW5c}Yw M T)H!y Mgr,g^% ~#NXfNèì^Jc䳁\/hR*^4iJ\I".O0p՟`|hU mbh$*ykaJ>A)>w3I4$)@$? xj 6#3+Z\KVy~ErH?A1FX+$L^1ׄQ\ QWP'' m>2WK-.T-CS|dWmw&0s wq\5=, I_%U53IY7W&bR㣓Ŏ:O>?4H)6yD~ "5)]uQ0lLà m;$O~3ڎ6)p>Nt^?PK @E ?2de/regnis/q/sequence/line/QSequenceLineCache.classJ0vmt !cz2JV|6/|J<)EtW |?p+ KQI:G,(". R;* jmrTŧimY`n赶 u(vG 9Vj* {|343mtoشJUڕj!2i*_>/ Ci‰\SK c&'!F{g s^0PK @b/P <de/regnis/q/sequence/line/QSequenceLineFileSystemCache.classVSW.fIXXWE*ؠDѤA*)ᒬamv m}_ǾwvP:Hsnv:yCn=|si|njN=^n>@1#(DC^f5|y KE>m ;`\ P̋ņwx2!l w3T58\l@*_R5~^ʷ-dknmvӗè@̷}Ƕjc/p߰{ZoU |KRVa,'cB@hQ6xu7YHf%Obyj>c9 WU ҄)FٝKV*d2ŧ7ΜU1窤罒Yelއʽ.({uE۩;KgIˑP^X~@389G܍7t`W? gG7׼ol/uAAۯ.\y۵1__t"}v Vjf̶C-'@J W 1DS L 4v"SD.j`f:MBac^+N8:]!0rmNn+OG :Ƌ!qt18;{09R]kx]=j=%3R?#ϙ"2:xy/X0k<h#~[L tKUӭ Poi$-[lEj#˝x[}b˃V۶\|{ !0?a0CY~B݊ s:!'?pvK`)7 1xQd6ɕDnv|b>}[ CO&(o Q@{LOC emiuU(H2\*fD P ePI!Z BAtѷ~Qxxt2݈cRĚĭMJo.% 0 R`p5#K0MoIՏd\$WM.#4et&סz)][>TRHuDi50J$ %N@Hh"%N@%Kzrӎ=;c 6$04" 0F(bD,u]=` z鷏~`H:2M>MR]Ǩ7.R/Iɟ%e"82aSaz*G "My! ^S?r(Vz?;Ҍ3^5`k;W|Q>), Jޑȳf>#3VkdFɇРȑTyLR:ѐg3Th3d4 PK @7QaV Cde/regnis/q/sequence/line/QSequenceLineFileSystemCacheSegment.classU[SGfwf1 r#$Yjb4PaܝYsJȋ/Cc$_,[BݧO|9=߿p_Gтj4cR Sb"i1hꢘU1\1E >̋n,N(2 KǂórNZQ+_0WB0aO*nSE'=o99Q.yY4E9۱zƓ]s a7k)Mَ5Y*U3N}͘9huySm\HeD9XNxrr2V"Oly)G5Va,Z l/Y+ Ʉs?JKvfydd;FB nK'n 0ߺ(<#+hfv3u y"m[Pn~LyDB#! jҹ_gex'$*^LYX}u<7RriW_0UwEnͻ" fR1# j'P @+ Ax1tD%7PMz$~5p 7r$:d!|+XW"y%KV[INU*+~nG{Y=±gGKxAJ\''H NO~MZD|X}+_NWʖq;d$ g O{.th'+y|^ y[N2TZG87JjG)۠Mmצ^q[t3;^OmHŪ׀4ʣq&}!}^R%}Tx.ȌK%J&ytɊ) u?u*oW:wr!s8ϳIYK߻D_c[jn"E奕jĨBrxm{Sv- ]4?ev[kʭۮK/ZM zWCeLtH!Chfn=7I˹?h0 / 3v ;hkXdМb_Kh|0琠J19ak[a(F!5&ܶ(y q͟?m1Z'=@=IZ m9NK^--іa>$^1tf݊1B CSc{ny.ƾyTN Iv ~&|[&]obiv$qX?s>յo |p]ϭc%}rn]Dgw+!xH`錓Pbkl}K ӥ?! &IMwNjGDJcۤ܋i$Ӕש)ԺALby~"/s%z$@3ɩk[$ٛm`6_Xyl9lyV */6W97J,*nQwk,?YzwXc軁m<H_Ol`;QdYX-es؋$z)ZOjOU=2J{=:m4L34W^r^ -`{k1߿VH<j]f@wL] 0q~y=0o 鑳CWF2Kwfy 5h^cνL|lޢg߮>G^nh;)$_?PK @ƇFde/regnis/q/sequence/line/QSequenceLineFixedTempDirectoryFactory.class]KA͵MK;.>@H_&]]UBtGEgM2b8syy|{pǺ :ҁ.'kɥ˫ıtdp-LMm t^lT\˴'UN g8}@861m*bUE_ ?d+AczPm޸ZHul3Y듓xA7n݁g e(϶!$VRH@g8ax6P7p y t9^EIlPVE`^JFŰ@"im"~)c5ERTFc )&s`!&5D,Zs`%VP*68`a5TPK @{P $2de/regnis/q/sequence/line/QSequenceLineMedia.classY xTo27A„$(aQ e0$)6h%%LltvZдmm}ML&a?/wg?;>؇> `Z{>?~ 2q7τOV>M" @2C&dj9>f&&>%x65 !7q&`agK}Q/e|Eh7&o[~?.<'M?Q~d?g2\_*҇_ko Nއ?#ßec-& ݿB3O2oy[ڟپ{_Wto*iKX*'ˁ ow:;wr{m;;" 5][vmiսm_wc=ȵlUvKLų-WdFTݒ얋~i f&>8?ر~*쫟)["\lClY{dZ)k;Fv;֛J#Ke.z9J):]k[\^rBeb\>RH.g?#fkevv$>vD׾sO'AƓÉ@L=UX?5I wfD趓Ñx˥3[WMWeNRJ'2O]`N2v,7a N0?WB5MO2$[TOuɜsZ{LO8+?YTrA*S'ew@[ҨgbI2͈Ld1RH.hg:zt++{ 9b1>ՁtLOOsgs;GgݰWon(NWs,,vj07P^g.WwK/Dpw^A#V68[ejQfr,\ܬe:OQɓRXrUG {ݫs[,;:]X%8DL5UK[:jwMI&PDW=d*]5Ebcmlo,RX,qګL2b!8z6vؗpc.ͮHOǜe_% ? {p–٧Od$<0C^; V;<,U;NJxj2)݆XBy- %-j / f?% g[֔<җViJ$Qh ;RS8#HQ!E ~4 ,oC9ӓXjThU|qm >tgbS?BZ{ T5Zja(^' ^. Z*dZl%r4RK-S-u:sMVX,u6AR稕Ns?+ \kK6OP3,*hKZy/6 -դ(r:F:v{F[eKVk,~97D"sTʭm$+5f?[71ymU(OhP 'x}oOM?2M.! D:KIןZBK:mOWX{ʚ[(z>S Gfpڳ2{fܢb([č@Ωgf!F^7D]Z`}oO0r dKQ]?]Iz{Y(.3md Nj#Ғdq+=I_#եte\7CӚl="eK6kg@wF칓:cN_#H!¯dlVNkL[LRMNg/ *ώf] ]):&XA}1<ݵwe%땥.X$D$=%h_%-MOa Љ2Nx.\ ׺],~C8$/A|>_1({Q7ފp|Cy:'C80|ؼ Q2z-걊WEeq*8n\l$flyhzONC/LC?g)]ɷpxF^M"Z LD ir )M˽05+\ς8j49әtj&g8G LL .S ^ұyx`O$}7Z}ƢO/qm5C>:&<( <n yyj jh=Ln=;Jp`-jl=P@@eĭHe>b6 MH' H 0i*BʐGCYh `yl)ܻ.0&[+;PE;y=!1Դ&'qag ;VϨǒ1Ԏbi9eưOi 1l/ ]yxR7TSQ00ME~m@ƓFx12&mж1ecy(M9[dڡ \pFa kG,:4$)אP$reô/Ƌܠ-fc(郣$}ׄGex pJPG8>c (+R2* I-#̧\βg?iŚ`TKP+I`I +GEa14h{{,@ 9DjWsF=TPڢ^uQMAFG-V$뺙~Wn"O!eIlwn.fV=Ks5PQ~d:.Q:Cm :\Hyq1 QXΚbwS뱙 { Y;_O}G7|{AxM7*Z Z^s+Hh?y RI-T$ъD+fWtn.)QسD\ǞPn&)߹euusoz U|+ ϝ𔏣[ >2(oƱq;jN98du~X4$Ջ 6g꼋cEFqa&G9WEE DW8xbrppZP|jܫ 7cme{s; jtql9B!0e1ZUKQ3f=B|_Y2#X1BM6Db 6]*>)>z#3r^6CogΔԱp$#ǗKU1yh,GX2[+5."pmi/լ"k*bPK @ʨ,8de/regnis/q/sequence/line/QSequenceLineMemoryCache.classT]S@=BXE- VTU( )0o]!LB:/`Feg4:ޏsϽ{w(eQqWAi1+ =2Rߏ&ĔӤ221†Fתajq3 a%ʨhyk.$/g %|2mKsV[E 41ʛtH3Y劽Ӌ\PUJ]hUn?WMt*E\mC}dPbݿeϠd_6TƢ`HoyR "Z<voFrd<&I2,C(X ^* 7T>/bqW,sz< Q_8; aa6fµ͊Cnrj!O01k MNL1t])w Sс2U0b sx0`[k/RS :j\5}OcA;$Q+QӍIrRIQ2'`i@Ϩ ܇pËgvI)NϰmDP8$Y["lp}d+u豾L0РY& GrCĠ"{AYd^\> yI"(^a)nQhNO[)JioOQ^/Hu,#Wjy :X Fyi은%Âdn{Vc?PK @|v7de/regnis/q/sequence/line/QSequenceLineRAByteData.classSNQ]CE o Z@)S@CBxS'L x2DH1~ Q3s>{s/'TA ~Ф5`HwU1 AZT#*1ࡂGmT<+@l!0m/uʹlij/ lUC+%hcj V4Kl=̰niߔʚan =_Is*%lJv(|dRU2AI6Y. Uμ.۶i* ̒iOJ&DiEnox9-ܜ*H0裢U8c.Zr5\?vBDD`; aY*BS!Lc~#kD& DLQ/k M1.iάcgNl;g%Ѷ\0!/z݊m09KD&*Yusť!dM.m#GyB |1/3de/regnis/q/sequence/line/QSequenceLineRAData.classmOMO@}+JA9zA"MpZʤ,[h2N!8dzs|p¹!e~MhG}xKym*Ka3-xBJ6+08ݘѶOn[Ku,+.S~9 jv)OxsWKΜNW?]:6}.7.ӳSuuT0; k' p?PK @bɊ7de/regnis/q/sequence/line/QSequenceLineRAFileData.classT[OQNo M`[a)PI4` O,-nO&$?8sZ7#>̙7̜폟_ò :L(햎.heikP0/8~2 ׼9k|2aHg_`Rv ڇv([w|i?6V89*A=ߋ go 5kĨq2xT@:-'XSѮ ,sjH $|Y@ƕC dH@3Wef$KlRnsg'd5Y6)0} \f9@?n w a],=3 'BsQ5nWK3LRvLi*Ffiiʡ4~B2zwLMB-cf8&TYb=AqVlZ&Yc{ Z_GȰcLi@5^4qE*(2BݘLS /PK @`M=de/regnis/q/sequence/line/QSequenceLineRAFileDataStream.classTnW]g.7`@ Rg C4 E$Q" $Lkϸj_V??>7EsZh^%,WP_FM9.qc |ˢ]cE\S( ~:kS J0%nWdTLAx7{LMVG 6ItX;lF-un c=RNOCGi$H:Fp}lJŵiePNPƜ =CW?v^%qZDKxxݖ({c /d-/pP>\*6r̕d4s9W1,P5d 8RIԋ."npj ?Q8({{! Lo&cx7&A 9NչMWyMDKF8 yր.翀|هyf! (SiSykpgϘ^r2o9ZOX(P8ז9r;-ws=a#^pKRPysPnc ^&9KH?."Au4yU,Vmap},kƱM0E%Rs$eK(nWz 4 YAYݟ!g2 ~bF5hUmef ]I7PK @Fde/regnis/q/sequence/line/QSequenceLineRandomAccessFileFactory$1.classTYSPnҰEYTT[DQljg o @:S<GznZ6g3=7;ɹdPЄ> HR 1Q1*aCEFC=4WXFMx)CeGn~k"L&"9Yscu~<[ 6WAwtpv*6ausG2mdK&H]]K剗-AH' شГA+bCw+xv^%y1Z@ PA8TA!2+ShS2rmGME Ǥ9ILQj m!Kb#KY)뜠ZvQQV(zu #g> JKy@i6PK @hDde/regnis/q/sequence/line/QSequenceLineRandomAccessFileFactory.classTNAnnKeW0DIH vv݅h"*CNk)4^Μ3|;?}bIV MAZE.L#43T$=<`HXUeZzߪ|/+X3D&Ct1e- zW7krC+ǰX4my@؆Ы*5qۦS{fBBh ~CAS=TRe他]Χ 7#Qz΂&hj Y}{؞$sy:t[ۯ2ڨZr)LDzC?CO4G x' *DKA>R/©Yиm.U /y,0_ G/w3s6 aаwi]vM]RؾUe7Aկ&^nJ{{qކ-&quzz$EiOS@tZ6DT^ 0!ZFB7u12ٯu #t6 bVN]qAF1FWkWZǍF1IN(ԡ̬G>ɤtôCZ|[k}<pSZq6u qRa{h FqLk0.Tgg+໨vGSGgŜ؞r r9;#UuԾa T杲I˕sl]JUz'*ijI7I]v(\'Hhm9E+Y(U+ FiB):]`iO(bE2M_v^@/Uv2YκV0/ s®}NQܐ9֒0 >[R\nY̭kL^R)&]*{&Uq:*M쨣l"eU7+O:J);7 A;v#h} !uD`CNF&N d5@RB*!0% yvaΚ\ي@gz1嫪˖\^,W$U-k!SNSAhgTZG'!aG9.1|JgMLslїH{^Rxi3 g< ?xk,#j/|G>=l}+S =~6b ]ad`xɓLCijҶh[Lw7^p_PK @qJ{/3de/regnis/q/sequence/line/QSequenceLineResult.classSn@=I%iP&2e{@T$$qצ,X> qgb(ytϹwg~ >xy``W2wKx=5u\ !ê}|txI21 !1%vP&F[@T"A8Mї5q n`Ny7 aQ-Vp=ԣT"=Z"'Ci{'3Uyjxɹ S TbB]7m ðz2"c@clz[m|2[tAOO@5] In4#NE#$e%1J+s8O.RHb\0?#lx_RHя? W%bg!*Qg9ljhh7ǹM ^YؓB5dcJqd;c߈*W/*L8-PrH tL3[MQv%$S/ˏtPc-yLԅ!p0IEƮ46¥/amը؁ 4`׫>0q ?PK @d+:de/regnis/q/sequence/line/diff/QDiffGeneratorFactory.classR0W&&B^Co\ &$ 02Y-8P6íy>}o57|9Xigns-WBkBs@GFhs&T|fPK fv5;%6H4뭶kVl2XNך5m6R"30(6N[?< _h6/DaCap3@exw1j@^]CZ_:MAzx$2X{G uRK^= @Q_Ci0 "+d*y*$[oRK?U2@%oce`0 DS%ΥxgR'Mqx.ERH\N H`yPK @!. 1de/regnis/q/sequence/line/diff/QDiffManager.classW]WWA$h|h/ !LL}Whk}$&̝>{9߿,*aL`2)LvGpinAŪ0FsvwBȆE$Ͳ4_X #U0cUW*VMLN-N/[XTo|g$UHd]Ǵ i]Uq ]2U]}vՙ0ׯ K8k;SF5k3FV K v^i%f5,kE/5Pw ?0 G,xUaDHDhۯaev(.)֝2czD UB"F^÷RIi'Nz=ʆ TnZt:fanR7]q^ibׂ'D5 T>TMb ~7f,`(s(m[ӧGMw +or9QLE=&|ifMc`VEn*Iz+ yٴL̳ 5#2 gYqrBJ?8")Fq04Ç*4 @ν k 0ێ7%iQFF(b;f8jIXn̬,ۍ99AckҬ4Tq_|bG4ˎg2*J4| [K`4 (!5<]߅fskEaN(*8Ȭ9_ɝz~v'-ӷ뵲 -0-5U9W}81dZ HAfN#% JkM@ܞT%vwfZ|ac5ގ",+!tđΠ>l*8Am1NpI|T_#`@.m/M;~B_@ Ǡ zqOP =}38M$t=K:}PB+gԇ_ Ҏ GQiu Fpsv~ z"ɖVk ayBq;YuR뤒TKDm䆶jѮ7h (ƝbE$=I'YpA8ْpN:aN2?dWIIGToDD/= OQT6C74#eӔ8GOo!ˌk]^ѕg8 3`O2?BMY2_`.\Vl՗5)~+? {GS> Mao]qσj=ǼPK @@W'u 9de/regnis/q/sequence/line/diff/QDiffNormalGenerator.classXitS-= g*lRj$`$njCH(Ȓd]65! &FH !%$)M m}Mt9?QidY9vzFs;ܹWX 5^ i߇X9C S|Z,|KYe<ixROi𴊯0|]779[-xN1 '9aXi j89gl۸Z} xo#{((_3f7c9/J$T&jш^ZR 0h"ܕfE_ve ho{@FAU.\}gJf_ t镱DdۋDHVJpReȔNUzR`mS\Mz8[8)k~"zLZG]r#)%+25L& ڦT'JB'c7gV{qj=M'c恮>H+rDk^ SbVZDfﰂuYf2f1܊S?#sR =Z6fܤb^㷣!+Ĝc^uXF==eh$J욣] >G"oJdղS˛Qۉ/0B:d}V((XڿJHrZt b<[u0S񢎗り:^tPWyMءz=ktϺK:.uS:‹:~HW.Aax?3\s(!-_~Z2L2o9g^9 Zhmx$ӪO:t& [$yO&MSg!=`zm] B1Ό⊯h4[|[q"BtAqG}`Ś4Ә")Ōil4b1p=PahdFM;DTaV97K\ȕJɻ(t=68Μ"šإcxB@c\w kL1 Q>Q~cjR+QX*, w7s*\PJ N"l؂2ftKЌ[ɕJnQp;yB~i$*^AE,*Y(Ur&tJpu n8.(tņ3Q㹠HdV::;Σ aۋMs,uq;5׉kj.o !$0=hjj!rϒ`n!,[.B}+U{v{&@Nr%t^s.usKN#9 Ur"ژ#IЅ`mHQ(a=_-Q`L̓ߓw@C@BdS͆Wie\;\٢&jH9,㹆fG0˙_3y1;?_LzigfES֔v^0pAr ld<XG-={shrhshf4ơ/{7i+#CpnR} B+(d֍Ba}9U9UܯbrxPC <~9Tà*Q9;)|ZA\}FʣRWxQ2^QE×}xՇ*} [*bVcX$'9|_T>-#?OTsR/JE_7r~' N=ѓ+BWjxGF3i;XdKO(iM#Z]DXOG[#zmR+kSz<^1=[iI9&3|[ web$j7' SOW\.6 ]B#nKG:<^1;֦'7ڢtg"^J=6; Y<R饌= $ݭveE#aˍx(# :66ŻMꪇbc,?n d!IQDLDIQzӴU>8ްnhX2CFA|\f r'Y%w^͂t윉&2,MIDfF2 \Fz\@lꎚ9j!m#XCXUFT?Ω3 >Q£=/59X1zԈIiwlx1,N]1׵] d׸ٖшuEvCR/#ӓ3PwPJt9z8MQݦeW^, * wX%λ*SJ 8ᓫ;j1ˍҔTKԊ2#sAknp|X|tenvpd7U,:N˅6ZVpw2)'M1J-jOxtte4ʈR7&a]@i;h4Kfa=.U F 7j_G*%HZGSíM?O \_TO2}YvIN(¥Qp&[Mx 3&ã U(ׄ(5&&BMɚp&\)x]` S3&rP.sX;N(H-EL41o$y,[ƜQVr\һBV܉VU%!JYlԤBP4j5q(X;񲴹m<60Nv,5Nj& z;<zyBդ̞(qtEIVWOF{0;%,fj1Kg3OQ1Gs`h.<0zGg(8؅#2{2uZN e\Çb&)Ū"A3{X mdf G) n]._6F/ B~9,e@MՓ2Ξθ )J/ ES#@fq3dStXy5fЗ>3')7 /$Ԝižs8rH/ee1s0? UD0)af^^^(Wgk&{L>nUqr,oᬕ+IR90DepUVa](ܕ}pC-ñ*GQ\-a XQaͤn.η|JI-y+w?!!*<6؏,~9sYEY3Tpl.:#$ʪ#UFJX%ȑ^H/r9ҋrJﴥBN_Uue?#ȯ"PDAkhcH)`@7{bcZ/`\xXS:s(t[1"+x3P3WVR`β1Vދ|kVe_>&т2~q ij)}q)W&XUhjv ADfn }#5XDOk!D11IU^JLs >FϴVOǫ(z;o:/'0Yyl҂An:9ufVxJ#8{JK,|mu]F/67kl=IӲkvkNۗzeM>?eO#AGETl n ҇Z*0`7.4WUO!c T 8G1IͶZeb1: qN;-lU`%f d-X!,`2=QNˇ :F<-*YlFjqL839ksb[M.AԵV[Ktpԡ7U&f-$GJUFK:3xn=J-!'{-?Ӷ],v#Xv% & "=\ s3y>`S3Ilb'VI"J˙*+fˮ{{,6>lůB.H@6oG"@W𕬖#XZz}ɔ#ߖf-Q﫦1ӫGIA?A䡬4H X&k&eɼݑ>-Sudɲ~SV_Ց:rQrT $8w]Ւ~uJxVY֌:ϡA^wYD׏&"_)>9f9#Fމr[=qovNg(h} 0|ki}PK @~ 6de/regnis/q/sequence/line/diff/QDiffUniGenerator.classWix'd39dxx`EHQAA@ ^ I2ٍ-j-XmmEjj VUk}>;,I <;wxLǶ N|M^%efaVy~C |Sv#VwN9cwq]^k{x20<":c|\kq@)O ~h`@xf!=_uDA@dž5B+DN$zY7sBL:io; v.uN2"`sSvR9+TXO2IM;}l9ELen+2BhWDQheN^70keIdKܔ97tHf"vw'纴;> g3Nsju줓#ˊȶ>fYs=3 YWe^Sh)Kr=IqH\na*ӵUP˵cEHdE.=EԆd$o~'=`(m !EB\N6X}9I33'\&-܉rOq8^Q 9d㞼IYMyqkf,`{}A}9G3Q-%UƊ/>뻲~C٘3f=V3$9U(8'愡+]^y坠"e3w q*h雿WNWeUٝ]MW&n:9Be/ʤRD㽸}Mdžۯ\OQe=.Ps_<—򷅆 qz6PX@|A} jah#l+y}48J*z$zè:L W 8K|SA,#ʇE94B#J6*Rf_XNQ UT05\u(8a" UTs`uC"1^FvxVt2-".884ZuQG@YAY<))t H^8ZVmR:U[d)Ш2PC|hjYKYU2m`5X$+ܑpa;g A |AHEPnj5oR$ t Q>4,?qHX 6W67y{B(k*iDk$Z5~2x yt=I*$l 9o>^U.|&;x2Am3VӈXm}ACo3pTqrԳ9㌚[ZI3a';l/{>~vu[؀`#>ǵ×^A[MEIuuzRRѧ@Z=:~W?"SxsMkvmvh3i ܢŭ2ܦ]ݚ=ܮ=Sۏ7W{wkjĽ298S]:4b9%^ީp/Ŝ#_\Bۉjڭ61]䳱XG-xWߚ̘"tE(&B>dFdvUJ6SK굏.iڛHg C&fnj\ۇ^B&i%Tfl!TVl%T_6R+nG):?2,ŖW0]0ѣK=WAYQhOeA*;8Ty_t܏~{aLǣ\MXC3~~qq6{lK-nԩɅ0%J@};ff$tQI>4Rk5Zn, D*I$y+] .?Js̜3Ý7'(cbľBu"JP/gдU$ГK &n4/^%="H%b%dKHT;%cqm~*jE뚗MGP֩ &ugžTzt76PAp-'7ko!0#0|7h2X9|=jlcccӀ:N!0ZsCiJkS-f>'PK @N›L3Mde/regnis/q/sequence/line/simplifier/QSequenceLineEOLUnifyingSimplifier.classSnAvHAU.ZXCZ`Bw??)| F[cb699;ߞ9ǗVcIW᪆kR_װ,!EJE:RH**L g-IfK/z*w^YENjmY$xe(txo|7[am29O7Km Y9JYg&}fR;@q㓎"a%=e,iV<`X%u!\߻g%9DNGֱ[d踍;:CxzhpG}<:rx? =^r;b@V@v}#]yS4`M@KSd;:Ibjn2@O u*1Ykr0ŠNˠ3%y<4#H>c$Iđ p&QHB#'@.R%k A%&D0.PS%)zy PK @bBde/regnis/q/sequence/line/simplifier/QSequenceLineSimplifier.classu1@,ZyXQX%,YWaīYxehb2<_%F J!&7B4Ky6tn1NGiUvp#3k_ɶ|& ̕W_"!@ °PK @cr܆`Ede/regnis/q/sequence/line/simplifier/QSequenceLineTeeSimplifier.classRKKQ~fG4#h!E(Bǫ]grFW$jGE"h {^w8O'ȇn>IHE@:L|=a;cjUM# 7u# nEN2~wn]zT)Uju[ b2u=v:EuK׌f /p俗\NivخѦ;1'~E:5u~)poEA. BQ%$p qIWo:TV9PlFФ45bBNVxQ5J pmԞX1mcp_R/)$ehI +V&KЯUR%-3PK @6z2Tde/regnis/q/sequence/line/simplifier/QSequenceLineWhiteSpaceReducingSimplifier.classSKOQn;}0RaA2 ULh lN/aZS{+7lqS$3s09wwATFBܕq¦ 10ߗь4x2mӝfe)Uqif;Kz"K[hֲ0Jn,3,s\sx6ږV[n\V67KnrG{ixDLI7kϜDN2:z& Y2C9ы&Q``)i6V9.Ig+aM<| e6&ܡ2Z2W )VϙbcaDA ROL`2) L+SIXJAA3`:ђJ&}CK#F74#}$5c+:H*IIHN>Y=7MxbUH17..R{#w݅WX&aI>xϯx\4GPȄ=FI:oG xAE b CXC6=#Azi%4(T e,3-n̜hc4!JՍuC;Hl|PK @Q>Tde/regnis/q/sequence/line/simplifier/QSequenceLineWhiteSpaceSkippingSimplifier.classT[OQNoۮ UhE)i Iڃe[[ HW|)DuζAb41̜|3gٯ?0g*1 ƒq!$HHݕ"@ ]'W"x~6acSL&q1+ ,VzQwbs} sYw0N'ekY_udeiZ6s!O&ͦ%0z"kx) D f4bN<2d Րo/ܤswUn{ iXb _LPsc Dí!\ :J daNa_xr&edۃi z% iv$I3!'ZxO2:{1@Rkp!9NGBHózo;;lH XXC,ܵG(kAYya?Z@d DB!$q-)IQҟe,,WI1kݍRv9BKT1BCGԂvp1$҆v&~PK @de/regnis/q/sequence/media/PK @rn7de/regnis/q/sequence/media/QSequenceCachableMedia.class;o>~vnvv^FԔDԴFQ OMIJDļt}5#kErjAIf~^1;#0LsPfz\7Wp~iQr[fN*#t`pjaij^rsbrFbRN*XtFÔTbBbB\ }Ƞ՘T)P:D( y,@(*Ĝ \PK @&=de/regnis/q/sequence/media/QSequenceCachableMediaGetter.classN@E𥉉B/0t61//eHt0| >2NŠ!l%/7ݓ0D*Bye&w ]/]xaX'1T ?l!%t)ߤ(Ş4"_.MX]04ꑝc;i7 u'a:n BB%kUPK @ۧHAde/regnis/q/sequence/media/QSequenceCachableMediaLeftGetter.classSMO@}$8P |inU=rA@ܢ ɢ`A(pBUuqEH(y3yodz =r^hkolؘ% @ BT> 7F\q^)^dZ7Tŭq=P-iic)ě0o&a9Y'٠O+]B& ||^{#5S-Gޙ4tD;Hm|UlI#c[3yx;籀EB?n04s߂]~v}D2wwFWF[[CCw9Y7$5J 9qrCbaA$䊠%h"\ЧcT$oc9Sٕ R.{lV)(o˜?-M/PK @{Bde/regnis/q/sequence/media/QSequenceCachableMediaRightGetter.classSMO@}$8 iPC ҤTR9qA"㌜E.ΦG'D~TڡUB73vvvkf1Jbm<ahSJor!50⪐' ydG^8KuKu[nPuSç]}vNr'mCPƇ윳׾_H`IF%cwV\{2$2-fdYG ⒺɐxyC/Ƿe 7xNWϗt#$9/7V(32 GoZ7tk!:'umW'L^ Q,r3^aK9О l{c/9lIS+}Xk0~Z-lXsi2;ߴQ0s+Kr#oܡ0u5GTo( D2F00bvl@|BҶaUl}=hz{͕A^.m_E{0V}*ԹP¢VpS&.\ h&W-YNTzM+pS\;nj7 :n-L]k8H.0EZ7I}xwD7riu-{h݅\)6Fv\%MVB1%pi ?ث\jt] xɠaˇ__> ٶF6;;ڐ}VF1= }1a? 3<#&yK7DQ#:J7JϨX5Q=y.'U~p#^hH'6$'m?PK @Rqn?de/regnis/q/sequence/media/QSequenceCachingMediaSymbolMap.classUnU]3IƓKHK[:in"^8GTص( /@Ip1 N'Q#&ۆ=,d;Z~Ć@od)5fNnd6{ʪ^&y0._S6^NtsWm$mL㜍̚kDFK&>cLlTe)0o%Cj1 k'Ͳ!TIl!Db;=ecvvEĻD^S~}o<.0 S(#3pjc "@R?1ɾ!skUז-qSj|^O!ƶ6w10v1b 9La\((I!R$77͒+2 pcD\[ӈ!lsFc_:J%<9D@iiLhwe3Ѭ0"C&\.2iLtc]PK @b?  9de/regnis/q/sequence/media/QSequenceDiscardingMedia.classVmSU~n&閗R[ }P* -`m}鲹mnl?/~q sn6 f2{^y={~4 8c^uа] >E{,~\~ ol$-^/u<˒m d%dٱ\UԤcɜ= geR^Oz7\rŵ >+v2U K]kz9,wJU pZnAGCO%]gV]gE]^Oo hy$#j;2w*I]ˬlr=4OTa3b7ssesŊ){T5@ZU:JMt$U(j w_ZOTu0R-US"vCL6M6I58˦633 'めQ\X#f뱷 a\`G3p :6 5e\1i0a*12P[H5cGC\tʹg2Rh=3g:]7{+zԅ7O8-3﨤WCJuܾ{Nx؞IPK @ >de/regnis/q/sequence/media/QSequenceDiscardingMediaBlock.classVRG=+ E,;Ʊ ,B 撊Ʌj-byJU^*$v'$93R$@et鞕>iF#\FtO,b'b`S5̈%aVCM; sY;ٹSLn%V.XvR&-UΩ?/4 JSL/kg̸ZMe- T(X>ql:ESpQ=^UNY[ASӥ͌-<5MseWMR79t8岝BNϻsc+IEO`XC+H~!)r*GoFƩI^s-<-0i廞0} :i`݄RP':stD䣊F߰m*uMEwMY٦o7XK]`@?91 $f3F"eJȒ[,{C}?!6u0:eMhqI,QhבƂǀEЦᱎv,XƊU(X*h$f!\+mҮ.|ms'ah_屷<.zW~&|ɷ˺').z#̼O~=%Tv$$KrnqRUFi(JE@+k.#r"|~H-66:ʛ2,>5@J"=: ba0z٠ùeȷO8|yi-8H A kQYR$w+-@]aHB|Pw,Dpp@jߣ/jwpK Hj8D3:є~/2jq%9~DAjePK @Jde/regnis/q/sequence/media/QSequenceDiscardingMediaConfusionDetector.classM 0_Zcx.DEp.m2RLZx(1Q,ua/cz3e]7; mcU;{Sی\tkM:]lκXSjaJBeӳ)$'iU+/Ao š,.&=- @f$Dx0 tPK @NPBde/regnis/q/sequence/media/QSequenceDiscardingMediaLeftBlock.classRJ@=桱ڪq#jQWJKB! RUu4Mh n\~83Nws}0ovjACM,&y"m:>cyb G,=`>wN\".A;|F(9n ]Q &,= IGnN4=vH?[s!ֻxNw0AϜN?Փ'.okIAtX+T_G¨ӔRi$l|3$/L)iU/8~|1ȅ6G:/Np P-]PK @QCde/regnis/q/sequence/media/QSequenceDiscardingMediaRightBlock.classR[/AjExR*]*'ec hZZqpQ?4|T 4R"=C11[!''ֲ{itv, 5 a3q##"I(+{wJ |^.9y<<lj*bXPK @;R Dde/regnis/q/sequence/media/QSequenceMediaDummyIndexTransformer.classkPǿ7metvMM3gAA&CP@4K3䋠>Gަ%ւ_=s>o [Fk5kWX{niC=sy8z aX7aЛkO8̎Lq8/綟~}p>c>Ka_OON" 7σլ!ǚj|Eߟ^<8O҈ LfʏKE㈡ptڤ8ELVLQGM?I_byf.w Ms k:iG_^د:fIRg`X ._P -50\؞؝ ,йH[P^Yߠ0|AEXUaQA]tӹA-,Qdu2e@Z+JxZMlg[tмT'ۣ .a(dzbqBvaTeBSh ]VqM4s-}@>2y 1(!0uV:]pf PK @')?de/regnis/q/sequence/media/QSequenceMediaIndexTransformer.class}K @D5nq"~.0&$#Nx6C`@7^|hhh9.u7C+U}3*e<L,|8΍:ٝ̑h/0 YV:NY$8ڄ_@ qZvAZ%J8٫pPhn5Yv 7PK @ AMETA-INF/PK @ZBR)META-INF/MANIFEST.MFPK  >4META-INF/LICENSE.txtPK @Ade/PK @ A&de/regnis/PK @ APde/regnis/q/PK @A|de/regnis/q/sequence/PK @96de/regnis/q/sequence/QSequenceCommonBlockFactory.classPK @,0de/regnis/q/sequence/QSequenceCommonBlocks.classPK @L2 .$ de/regnis/q/sequence/QSequenceDifference.classPK @˘3&de/regnis/q/sequence/QSequenceDifferenceBlock.classPK @Y t:{de/regnis/q/sequence/QSequenceDifferenceBlockShifter.classPK @?)x8{de/regnis/q/sequence/QSequenceDifferenceBlockUtils.classPK @-Ide/regnis/q/sequence/QSequenceSimpleLCS.classPK @U)4A de/regnis/q/sequence/QSequenceSimpleLCSCommand.classPK @A"de/regnis/q/sequence/core/PK @# 2R"de/regnis/q/sequence/core/QSequenceAlgorithm.classPK @㕋/(de/regnis/q/sequence/core/QSequenceAssert.classPK @;+de/regnis/q/sequence/core/QSequenceCancelledException.classPK @}"v25-de/regnis/q/sequence/core/QSequenceCanceller.classPK @Gj@+.de/regnis/q/sequence/core/QSequenceDeePathBackwardExtender.classPK @*H  81de/regnis/q/sequence/core/QSequenceDeePathExtender.classPK @7I=V7de/regnis/q/sequence/core/QSequenceDeePathExtenderArray.classPK @P)?9de/regnis/q/sequence/core/QSequenceDeePathForwardExtender.classPK @aI7Q=de/regnis/q/sequence/core/QSequenceDummyCanceller.classPK @oj2>de/regnis/q/sequence/core/QSequenceException.classPK @>q .@de/regnis/q/sequence/core/QSequenceMedia.classPK @K ň&:&Ade/regnis/q/sequence/core/QSequenceMiddleSnakeFinder.classPK @ 0*2@Ide/regnis/q/sequence/core/QSequenceMiddleSnakeFinderResult.classPK @ ,84Lde/regnis/q/sequence/core/QSequenceRestrictedMedia.classPK @)RhD 6Ode/regnis/q/sequence/core/QSequenceSnakeRegister.classPK @APde/regnis/q/sequence/line/PK @ɤ3s-Pde/regnis/q/sequence/line/QSequenceLine.classPK @E ?2Tde/regnis/q/sequence/line/QSequenceLineCache.classPK @b/P <Ude/regnis/q/sequence/line/QSequenceLineFileSystemCache.classPK @7QaV Cx[de/regnis/q/sequence/line/QSequenceLineFileSystemCacheSegment.classPK @mK(D:ade/regnis/q/sequence/line/QSequenceLineFileSystemCacheSegments.classPK @ƇFbhde/regnis/q/sequence/line/QSequenceLineFixedTempDirectoryFactory.classPK @{P $2Mjde/regnis/q/sequence/line/QSequenceLineMedia.classPK @ʨ,8wde/regnis/q/sequence/line/QSequenceLineMemoryCache.classPK @|v7W{de/regnis/q/sequence/line/QSequenceLineRAByteData.classPK @1b>/3~de/regnis/q/sequence/line/QSequenceLineRAData.classPK @bɊ7de/regnis/q/sequence/line/QSequenceLineRAFileData.classPK @`M=de/regnis/q/sequence/line/QSequenceLineRAFileDataStream.classPK @F de/regnis/q/sequence/line/QSequenceLineRandomAccessFileFactory$1.classPK @hD(de/regnis/q/sequence/line/QSequenceLineRandomAccessFileFactory.classPK @lF@33de/regnis/q/sequence/line/QSequenceLineReader.classPK @qJ{/3Đde/regnis/q/sequence/line/QSequenceLineResult.classPK @:GDde/regnis/q/sequence/line/QSequenceLineSystemTempDirectoryFactory.classPK @2)~!A4de/regnis/q/sequence/line/QSequenceLineTempDirectoryFactory.classPK @A[de/regnis/q/sequence/line/diff/PK @2N%3de/regnis/q/sequence/line/diff/QDiffGenerator.classPK @d+:de/regnis/q/sequence/line/diff/QDiffGeneratorFactory.classPK @!. 1de/regnis/q/sequence/line/diff/QDiffManager.classPK @@W'u 9|de/regnis/q/sequence/line/diff/QDiffNormalGenerator.classPK @Gʸ. ;Hde/regnis/q/sequence/line/diff/QDiffSequenceGenerator.classPK @~ 6"de/regnis/q/sequence/line/diff/QDiffUniGenerator.classPK @%A\de/regnis/q/sequence/line/simplifier/PK @_I((Gde/regnis/q/sequence/line/simplifier/QSequenceLineDummySimplifier.classPK @N›L3M.de/regnis/q/sequence/line/simplifier/QSequenceLineEOLUnifyingSimplifier.classPK @bBde/regnis/q/sequence/line/simplifier/QSequenceLineSimplifier.classPK @cr܆`Ede/regnis/q/sequence/line/simplifier/QSequenceLineTeeSimplifier.classPK @6z2Tde/regnis/q/sequence/line/simplifier/QSequenceLineWhiteSpaceReducingSimplifier.classPK @Q>Tde/regnis/q/sequence/line/simplifier/QSequenceLineWhiteSpaceSkippingSimplifier.classPK @Ade/regnis/q/sequence/media/PK @rn7Tde/regnis/q/sequence/media/QSequenceCachableMedia.classPK @&=}de/regnis/q/sequence/media/QSequenceCachableMediaGetter.classPK @ۧHAde/regnis/q/sequence/media/QSequenceCachableMediaLeftGetter.classPK @{Bde/regnis/q/sequence/media/QSequenceCachableMediaRightGetter.classPK @D$e#)6de/regnis/q/sequence/media/QSequenceCachingMedia.classPK @Rqn?ade/regnis/q/sequence/media/QSequenceCachingMediaSymbolMap.classPK @b?  9/de/regnis/q/sequence/media/QSequenceDiscardingMedia.classPK @ >de/regnis/q/sequence/media/QSequenceDiscardingMediaBlock.classPK @Jde/regnis/q/sequence/media/QSequenceDiscardingMediaConfusionDetector.classPK @NPBde/regnis/q/sequence/media/QSequenceDiscardingMediaLeftBlock.classPK @SEYMMde/regnis/q/sequence/media/QSequenceDiscardingMediaNoConfusionDectector.classPK @QCvde/regnis/q/sequence/media/QSequenceDiscardingMediaRightBlock.classPK @,,A2(de/regnis/q/sequence/media/QSequenceIntMedia.classPK @V!7de/regnis/q/sequence/media/QSequenceMediaComparer.classPK @;R Dde/regnis/q/sequence/media/QSequenceMediaDummyIndexTransformer.classPK @')?Bde/regnis/q/sequence/media/QSequenceMediaIndexTransformer.classPKQQy^zip4j-2.9.1/src/test/resources/test-archives/missing_exended_local_file_header.zip000066400000000000000000000130311414265447200305050ustar00rootroot00000000000000PK)\,Oz5 sample_text1.txt51rC1D{bǵǧH9AaF?(?鄀e?lJ ŪM,uP/a *:t;j6\hf.mv֢%#R⇴ѽ#Otm̒ЅngK&uD=K_I9 4ғ_%)\3ɑU;)ҋ O1򜤝L YKZ? ]ѷ! Yļ2\bcLL91L1i)nRyڹa,۬niX\]ϧPK)\,O?}=sample_text_large.txt[n}WY4N&A睖hےh`>;@rۖ(SUUl{ZBe 6o{8!zLgI{ScKHs>OiMqe02ǐ^ҩ 'x1|/ۘxnK DO_VD~=~g:zi#{2;K9mMc^i_d=9g879T{:3{᧏<.ǥNݱ<Қ-M)6$4!Ι?oe3IA~^e1_`֑NQ聼>ez?$5Ӡ/&IIy<ΣZjGo=yTVRח=prBa$D 䪹 siI9I~$b17i1DbFg#mz-([hzN%Gx룫Zq9I^ΝeǨ x >33"8R2[cvyRPi i$tV?@r+U7-)dDwkCiRkYIOsjsYT25Cx%-iiPtfOئϲʚy]D }59Ql[D{72c JԚ^}6řvė|P x+?IL^*XX"-OQ KѤRE8neuYՊ;IZ7QlDz찊B] ! 6RgUM5pdv٦QY NAmEDzsNO q=h#3G2Վmlb@DHpY)0ĘaSݹQV9?nhҍ~,U~cpcXKUۦN5o\AʍN'Ua_18 oujFxg[` J;lHa6,DtwqV5\ װLA \7:?EҨ\pO>JH;{\ԀP@CPw(SpFQ78(xU]`Jbg,d\ 7i0xzf%hc>ЫnP`u&jƶ؛&z󝗩,[$3 KvF UJQ}]5H,.5tpe"XuNJ-Hrւfu&]oŶ~n6g X寧b J5f#DZ+;E$I)E5Ѱ@K VD6DA>G ']ig MCtF`h_MW7DL9cn@+wFh8xrVʘ@ڟrZɏ&C:k|MD k~%SiSF'µ.orXMYYl)ȲGћVQvP/VxcM@뼚ЩH< Z$Wn[\i&V+-;{sl$WR=)m$q`U&d"$C>A8Ѷi復4LRJ&=qk^$&&I%l5:N-蛒*WqʚS\CQ\͊Z &*0[JK pLbNŠi,e7XH.G:PVע;E ,j"ݥd+F$xlA\q *S$sKW,ىQ1)6hΎHhZjVְЏG?6],O*P;=:MUwUG$N+ 6tvO҅Op-0d>ꢏEHA2G \oB 1m͠udz!6ر%O3SieJZ4Eժù=$y*<Ty|͹\Fμ@ t9ʕ3Y Ē<) 瞆Rs,1~`;rӒQp:(~dllnFEѮDl$,ýϫDOj-KG^k.`Ai*zy\szRЉNlsh@4ۮd쿰+S \)U+5_( gpF^jD3q#B=&LXj#JF AZ50Ys)L#]+W,Wa,kRy;aD➝{Sݖ,FWUaAy,+M:rɸoj˞?]Fn]~e)TƌuGKB忆VG]T~`k9kX*2XPVX|{|v j.IWF@U+z+[bH˒Kgڢ7wН+nT;.+bu `wC- +KNBK [Zo.^pNtA( mqA^MGS`EƝZՓ8IFO%"F˜sI+SާjVàyP’CŕPcEM$Nǰú0w_YhUqhL]PқXi! Q-2*BYn7F"ޟ7-OT)A1(NYIL{̸$͒H^4^o`MZ'}ʼvFԲ}+Ʃsq)aCvA휉ȪQJzStvBsaz溲sMM`9V(on*YQS/մ5תZ# ?c<&߫pSkD%2 6lx!j\r<;TpQq+vU`]Ϛ;.a mwEfWtR[g9> PѼu76 0Y)P@^[@gUDl4ntp xte ߆$OЧ>%)O }JSBЧ>%)O }Jѧ>%)OiO$H8p @ $H8p @ wA .`XÂİ`İ  1,خ0,aA bXÂ1,0,>%)O }JSBЧ>%)}ϣO }JSBЧ>%)}>%  $H8p @ W@ ~! $=$\ 1,aA0,aA  bX]aXÂİ 1,8bX0aX}JSBЧ>%)O }JSGЧ>%)O }JS}J $H8p @  $B $H{HaA bXÂVaXÂ,İ`ð 1,aA bXpİ`° Ч>%)O }JSBЧ1>>%)O }JSBЧI0-,X8p` ,\ ,X,X8ppӂĴ ô 1-X0-iviAL bZӂĴiiA)O }JSBЧ>%)Oc|}JSBЧ>%)O)aV88pp88pp_w0+YA bVj0 bVlWpĬ f1+YA LDЧ>%)O }JSB>ѧ>%)O }JSB>if88pp888ppppĬ fì f1+X0+YvYA bVĬYYA)O }JSBЧ>%)Oc|}JSBЧ>%)O)=<PK)\,O¢ sample.pdfVn8}1RkQM$F4E,dҐ8OA#Jnb s!.O^d:{>븎yuRw / R B%5nׯ]G:lR7ǺVhxǬd=aUp全 }PͲKPODr;iik[> z]zz- $ {"H? Eo3B8m•A ] 7Off>*S |:Gױ$Y:JY Ab2Ce'!\Ų' g# Ek1|`D)a!ND40&sYq(  p]H,rbv2JT`Լs1s%R"pKF<*5І!h{C!$,!IBG$If~CȇҀ(lf98JS6,CA_~n!֬?{je 5Ec5O]( I "rV=I@OKhO'7Fb@z M4WfO[ 1l~P:QfjJU7[+nsN/Ĵ{8$t$^h i &3 ^U؉d=f*9"LlzĻ}> QѸLc[|a{mWS7Q #j3~/U%;G|1.]ؿύYjE/X Q+Y=8m'3U:4|/p#`%4c<%,P#o|>Q_:Acm)p{mceAmB|٭}(T)h6]i#IW|Ҫ /M&>N/\ PK)\,Oz5 sample_text1.txtPK)\,O?}=;sample_text_large.txtPK)\,O¢ sample.pdfPKJzip4j-2.9.1/src/test/resources/test-archives/remove_file_with_similar_file_names.zip000066400000000000000000010022701414265447200311140ustar00rootroot00000000000000PK.2QRT 123.pngUT ,`ߎ`ߎ`ux T.L!n5w6 Aw8r{Z=]յkW{TQ~ [Yjpp v%1|oFBBEVB\'ZG}/W_M:H{,hrrM,d֊vL zp(=( :5NST ^,޸n g!ܛ!*Ӡ7R쯢-/cXUyONM<}ߒ=֕G?iRQ\c&}ϊ[6+2ī D wTm%,A ~hp*c X`P,z8~D? ,:+]zE+G%GDm'^W/`C E):(/+\C XHjl8B0H? rD#B Q7OʅM \@s~ VQg0A[`HʓU_" s.,ҜqduN[4y OYf@5m"5 C[q[VXDFlaq6KU ˤ,K[a(qR1(EZmJEljKi>ApSֈVbdV91qEȱ^jIvLB7z ,pdZhIh/J ۗ`ӽN8Gu) a :s_xtE-y ^ з'6|-(c]af 5zXnH \3tt=X{+|ii [h~Ag#F}}in:"χ0vTȗO}3jZ{ӛo$$6dį=f$7;[ԑ~wfnG3i)'QonGOg};q?f0ኇ^y'ꅗ"\s DЁ#y 'LəD?z'5}k91>7ZA&TM&p?؝_t&S:&>] K\ ,r%ugjDYщ׉rOI☤)77]PxdODѽQu$ޚ0F+j[T(,W:d۵e:^/M;&XD2Ի1k_Z՜Djv(8v0qHuOc?Hn I0MV׋.dP?SG/ۢ`tl1ʋɰ|eBqdNdCMN(MNШF^K'PsAny(=^8zOġ(.A;$%AԶ,IzBbb.-|.r5i;=2Vibx3mxlwZBrX}4b m}:Pްj쎳]=-_Wʏ7l[iNW-rK{Q̲RG{C%aAwO {D4D```CDD00ߨDlEB_XLF8x"crX Bt, ,NSeA_@;:K=9 *gMU8Yff]dKg Ϥ5lU4jPumobk5)ZZ))_44#/DMM#rYxY MvNsf)9'ɟAP}=C}ޞ(ȃdhN>GKǟϭ ip:- }+HʺކޞO $̷TF1 $.sT o&>:o<ׇ(\]r*ʳ& V-/x5{^\$M޸ZVr*aދ?l]9Z7y䅲4_ V<ǮWwrgui F:q&&Y ĴJ,VPsm*Of>ThTF;te4c.~J|| ) W ~[I\>1$Bvnv}΃  ܆{#Sz!AFQ ډZ <1H:UHr1ֻ/Xou3$%}9ebr%[ YfS-,xDB&0u=z3cM^!2rN<&ۯ0xIWueyR7 @} X3MSi08`#p JHi\Jcaeq7 }j@XM S(8 \ʣ!JJK3ksi"" 򔿯W_լr7K \3~zF W(36a[DC<cvyhCys"3\Kzg;Mq v~v:j v`6yRҦ\NGT}j*ZG6p1lFP"$DL/ڝEJsvA&Hpe>jHBBR8s,m'WWܯ?M" \}|;ZBu[UEFt/'#< eYHEϫW?1`1G@GRQVFCxA Vz;_WYmu] y~V‚^_Mp{oS]GWk'78lF)dg]W88<ㅬ1Y 7E~s'S '3?n^^B/RNRGQ\@򁅍R 99%G QZ9zzzxr8Xqrp0(]L]ɿp5wqvqr$9 QR柿?#9kZ >W?_W|q 60;7 _ 'Xn:=&3S⟌fԄp0OIlQYv^yN묝ppp4^L]\.. F@q_E#]N&IE2 ,! g΋=;% -1ףጹ%*峪(^%qE+_E^P#|+t{E>i렢H#yw=t&m?tZw>H1$2pY3{:45?&|C}i: 697;i#3~p-x6̹.cە4Wwx9g:*pj2:\7K:QzZ>cð{NE&l'kUnc{xrv6FNf47/G域#K>| :h8j&*δ-c[VWqwJw($׊YT5^T&2{K.0U,G/@I\i+Ӯv/{+N"|լy| }z?XpoykMd#uȳۺq1}q)VdSL7@#E4soEC+p<:x +B.6,W>Gv) 7TÞ/\:Bp.DPݞUڢ@p;Q#lQTU9I#)rG}.eR۝'qP_tuR{^Cdc OuUyWۃUbl;ǴY"uKcNIU*ݛB1@cPwV٘/&FJmAAOgMQM9lݫf&fj׻LZJ.4Nix̳urZĽQĊ2.|uYyzY);]Qt9ÇVN &1a_;k@SҦ(\C*̄ %~c(ml~'='}!=xL}ㆸU7Sa:QIِFh-ZER.WP$BrA683"6gIvb9-eOfY_L+ˠǩ=)05ugn^t1-嶕m,nv^br/c#`\( 4Eu <Qi> 眸 rSxw].欺!Ėl=wn`LܷbGEe!tcQj[ބkkS.fl ;-4Px+I{ɪo^Ѕ$j{5DLZT·6 6Lq${bXB*Ga*sX#i̫<+úá˨Ir韭L J&+\$iN^r/{GDк <`ѿ\U >uQPZ W9Uki-\QIQaT, .5DRJf{мj*ٮ9ˬ ☚0T?^ Iwk6 PFӤty^E"PTPW:IC鋳D@ 8SA>@6As3Sv;cTdwlh˨Z 2zR0[ {Kv(= HIt3Vs^V~[-(F)6]>x^]b}oj7OPЖa~4ej*I|YQ#y#exNzS鑷4'Z8b?`c;KH5sI_NK' /qv6ZK8RE~2< !G ]o+ 9RH<1xa<&|,_V)1ՔqrYk橊o@W88o*ub_{ ^݌ݢ]*nA<;=FPda. "G{k^V91B5M^^g~0iIcMe!C|X=Y'B^ׄqh7=:M0\̣8Q&ic59vK4vExжt$Q\4_z(~)Ty'~=lOGqh|-Yk}mp#%nI"}\<0`C>TQU1x> q۷ut2 fb~N5r F^`RL_I!qc3a0mvч;bd‰!C2+" ay&`k|Q֥~W?XWUWv*ǻnƐlGm$" )R̾L)7(2F&BWجygMCs=<]oט ȒsiU+X- dxw=` yXd|j~kpdac2/KyW͖)Y 2h3{ϰ9+ug[%9jKPղC<{YDi3-6 Zӭ  tdy؅<[7\c#qT$~Tx brB !oe* |]H3RX(d3 6cx\=T`ɏuz Ɠe%-[D΋B(-(3hpt~ItG6aW_'rA"ZhV;~_1qo$1cc14$C1+@A_cB5\aEaL,G`oF౟~j9LS*1}%Q# ]*l>g\6^vL˺㧶S},[ OyhK>(`GD*h =/,BRMZIt *.-b!U CU-J|eVfKUFr0; w݁şϱȎt;aoЌDŽ7xSKTj~w%Q=ErV`#t4kJ=>R",*i(mv؞6zCcؘdZo" `7:D â)veQSa_N ):H:uZSZLbP8쐞Cw]}Ɯ5~gL)Ax Zdl8@]bzkqm\~C7" @,}ZlefcC܇n*q.E84N l^KoxՀ[CNz!g1J1KmFDNk2?gcU!4t|׷M¹_jq4mC&'3ə&qNzQ$Iu>q35!݆PZ2{ Co_}vP9>{dA0I;؎{|]{}6kO2WpCWh()Wem Z-䩰bUJ_`z焍W<^JG=G/ԁh~ h$T _5 H3 ;%Z ^¦ I11ڴ& uU, L"l5UDaP"pK 閞BX{@$htsoU$dKȹM\W(w]hX.KOPi<9a ?]&;輜Tv4,[nADENjN5{.0= {ҮOW)vKRu~{6dž5cXpW +qiAL 4OLMpHJ_u7 D^)C{ѹ{rxw>cv6* ˽M>\O !ɐ̩ƒFsVSqΑ_f4j0\Ffq@PWvX̤j8mLLiޥ 6]-s-R﫦ȥ_3I`:z yzpM֛;YǬimxs2%5h}݀-7iMwC`ګMˊw Bvq0?8p ]_`k}a M" Y]]ҨV-F!!)F|CxOsn.\ ܜƉ/y8|ϑj !rdd jZ5 <4r"_1k`,УH}ӷ,Eo4uV_#ncLANȌ]2vـAkw|9#s]?eFbB,Ӥ<5[PgƝ߫19sV4#Uq2'UGen$iQ9CV:( Y?RlpWjU, 2OCѧX&y%溎^4<~{  S.H}%Q_V@ I>{ WiQ1ìAR ?'zf70jf0% ҥ9V8ı$.'lW؜G;'̧)qhn<؞ @Ĺhg' ?Eq|([|`翷!JA릴-2S!8@]ӣ U˙iF]КmcQjDuc$g;Hr]7pE'+nB%<>H$BzGV&ՕIy\_zFvDaY;,/*FN&j,§J'ʂƤ@+cGjvHSДYO`yUĐy֪VA]fcAJQun6h]@㖡vѱp-QA)_LpJ v ;!,8%fޘڒ(-GDƴ*ߊȩDW"WZ%xvi@!插3+DKoT, w&1>o9cD7/-KmxeXv j%]YPKԱp~G1mi)ahr"׌Jw Q,zfS\:)‰Ju!%ySA_]_Ld-/{e*t^>y5-]9b?u_vyԭևѶ[ }/˻_vq$f ˵gb\Gm х#\e͔ZL,ue)3Ź_G\CdKCSMQKtA dbUX%Q**VrXR5㪔e7 qTsԩxRbv)nT[hGKn9Pոޟ ߷c'ë}OwOCKyy[z[sI Luu3rঙ`iy.F(xdeKp,7wߨz732ON* h^AZCJߺQֲ۠I?v8.f~' _.JT/r_WsRgƠz[Mǧ*p^U_8]v@q:h}NyoCh=f7p6w ?0%G.>o ЗHšrʣ3glmgVPP7&HkU:M^SL;|u 6A뼾tMd0{6 Q4u%##[-#H<ݓTy"/Jw¸e "d>?Fߦy{S<8RncQUuX\"25 ɜFe XI& +)~=89(F^Y*n߮yC\oX;cƬ% Z}uk٧gLG-<--N%Mzԙ BTg?ߟ8EaW#0dصHbMh{f׀3|{.G72$ji~mk_属'4xvZf+ >(~N/Dgsa~Qk3f8<F0W>zBF!sیdKgzCӏP;c)r-j5CrdXwot YZ∞ܺZUFǸ# 9ϋA+\P)HЊ7){yxfm7a:[!ydi,-i[0_Ph_j. +"tTw>mNk>_<^TV_nod1ʏtu|T7 xm_2fs=& :1ۇU/ U%>L8o1yJ}ʫ;op5 q~jY=TQ2ïjЧkAg,'ZdfV/JB긫""8"0.x/qTj7Zg"4!IV)ewL } Y┩dBQ`Jqo[Ms2O3/8$ZxnZn-CwǶb*# b,%^P`B?лzgTLSf_lEUڹf?o YvYc!"az~FꀋAA g#/Cٯ^ЂSUm#{Y>8q_B͎3pu%jm}:'#;(yS1b=#1)m{cAzfe;gmskVl\yVƂPDe(zŘQYY=/ר*׀꡺;7#C[ .l1 s=_7G }w% 4>[)h ٺoYf\kQXeWJG(\?W_^7R>;T;[z f O'')wMt{_Tc|Yt<O:@p)hw('T*n Z8'{jɜV|'ߟHJ8C\ie+L2*"Y3 Kݖ#|u5>kU>\`n蔁zqh_|m;N=lS?er_[L0dWdct:Kf&]$-JF#?hLrQ>G5>d|森U,{KT\>R:3>`8vxb@v6ڣ Y8g LVl#=UWOvuVA!jZlߒ^ukk!z1]q+hp Jnue$tj2t7ݥ9~v0[&EKB$J=w HDfCO\dzs譢ZTI,#m(;YUEu[RFeUɲ'gZDVǷggJs~[`%fPjO=s]K ƒ\Rr,#f\z=j\zOБƞc׫OQN6TEHQL־yI}vAե%r3so<5kv*dz4\.cyaJo%D5\혬}M%rX>3OHiA=iʂ dwhM=7yWl[l"9z=D䛟kY܅ÏV?jY7HCz#:L0{;?n" \gz=r&Kj@qģUŘ|Oxi!L@3|p'ru~7?df HΏdK7L{R^٤ 'AHb5U0!]1=TmR~]#܈y-qJ)%ΝyUCSdďoP웗Vt=H5-J龖Ϋt+pu&=/+5vlGꕀf2^L_6mkrف;W@mVhb] +P܊[n,8]k.Kqoq ܂o12#k}֜g#SqObM^d;7(K+%&M U ~2y9/ }2_;/MzE͜1u!>j1D:`,y*,魼ʺ]F=v'TNmXRsČ7(K)akk` sYsj02w]UKnjz%SR۔p!M\풿 !iC2_^@ VFɬ]qXc@h3m>?1ﯾ4 ic&11*Vٚ/g+eӰ iӡ+$rKK*n9n+#UGTNyT~EgIM#*vkTAUo d'X{O Y)8mcvٙPހdO4o-@2׼3-p  Łӧ(|a r3( AI4 `0*T<&'vƾV0b{S?no0C_/iG|\bTؐ}UNsi=p:S=ղKS`,T='=mtkq:0X*)/VQ+\^42\?,d}+v5i=2"/3踤lBHa^WZNtԉ ΖrTpBT8X9…k;_o{ A &o.]Ǽay6J>򾀸X:]}V%*"|,\K{ RP>aשQ "XCe =L>V$.8N&JNS!jA"c_4!X\q-&StAߤP+E+T->}~ p\sĥc@U"$)ZK+Zx՚ XـhtPF6}r^MCeԈg&!|᫠FF^F[(NAbٻm$Bzrկq22 IjߑUǩֽ%7zRb"cIu)!mngҙTCr&3D\m0#X=g$'VZjJ y-w9'mnUUܓUѠG^EުXN/HN~!nf{G+na=:,I\z\Dʿ϶`7C܃խ YVubksZ7s{,O1B}匹a |K¢"wt*}~\k`q Ec.pX6 ig[h1x_}+b*gN9Ji3H57c' zH!(dYf'ej涩VѮQ@ _LG'$v'ˇ7Ueu042Mwzw01v]ʩ1+ GwxnheZry̏0DbWQ- ;ǾM:.iK~L@PWLjWw}ncxUV h^ݚMR˅7f@㨤gdSٞA*guAخ{(h^fe5Pʠڶrw g66y`MHGʖr I\}hSHt*mY{FԠd||%YjI6،r7HNZLH0;XʸfGp;ʷ?Ou+ C ]5k '^G' ZďOp y^9h`gqhULj1Ǥkࡵg>lgtvDGCԫŠ/ j=/|kQ{'dͻN uSȖۓZ RnweHJ`*VUzJNKiG&ܻ#fgz0GudTtCr$dP̱7Z> r.R$n/2bhf4JiMd<0VK?tI/׏w!  vrt!>17H[* Q3O!ui kⰝUʷtv?8'qFsn G* t.L{ MKl),VC%Ϳjx[cxkG[#9fq{1rH^j 4( @?~y nB7x]v7;RO"o=6ׁk,lUX}֥^3Oל9`yؐOQAo@  ‡ qMnxߞ.k^đ& jlrMgø2+NZEYlj.)(oвւt- _ocPܖԏy,R;iP>"=rqqwwJ91=t?=gSQt6>Q%J?ki~}JN.vAۆtYP`zvxk`jA=^#Bg]"hr\cLD:y3O]/Q0»`aA}V$mZFhn/a?@a^Y p3漕Ϳwg?0̀ Yʏr[?l[G}UQȍPqsBEQoHn/.aH1Nw;vpmhS}E!RdwTwIwb!JF/UUg`Х2D.?TpIp0lR^M*e癊m+t1Y0![LoEvXgbj= T27yU&Un%wAv;u;A ,]M|q>+14V|Ɉ4(@'3Cգ=(  l1t۫]1A#å,E8[x^<;7V͞ǾʢQ(zCvwɡC0d?R˷QjTLbL˭(I.> DzMTְ'<綩]_<ە12̣.ms NZ{XJgKl} ^XJǿсۡ6p~W1;[1[ueo9[ W6 z?Z)s:$ ~7.0rq' 䚣ߗ4_#zyD\>PW @#7`x hdxf!i^9E&T|1U\ocgQ~f&:uQNcDɍ'3~~QCIXhЂN2ׇy'3=a-U99cEG3i 1 ۘmnϦYC\JBʙl5/ޏΚo'ԍ0%l݈ jR^6s-]vo4!J4jKڤn~۲swc & * Zu cvdʰy@k6wq-3?kAQjzQfFA_VU=3}XncT}ʨQ`7YpgyNŭDL͹,=-{9H] G-4Q pD]f𓎓't9\Ă }-|t:p4/ey;I PO?(ݑ&!ӺE9u&aUXg.LkBf7TF^6C3 Q3]"C8o@+"ssZ+n}`oH޳`7f!{=5?1]\0m"QZ^`Az0BBIB_"y79zݔYM,O?!;+LL[Rd} iQ*O  xȰХcNO !`M'ɢZ$2#)Et=xɓ!$@jaꐥ? {xulOa3SNȎطQ,y?|䂆o?Pb|ckV;1I n| &KE }o7D-¯|yڤ;e?$EE+EsCdηivbVYv؁L0*|/PF ߇m)gͲt>w\w$Wc#έs/#PlZ5߷n~q!\jsҼ_xĖbH2Ux:\^8$ae\Q8pxJ۪籗E/b:Hg,̗gGǑ@Y)"ᩬ8CbZ &&hjjL:ST-@FPMCVk΄Q9:UQXD>t83ay@w<~;[+taB VȦ[2upq4fL?̈N/$u!A `ߧI id8O6זB Lg2a_6-lFß U|$a)X#Eԯ;3$/xfM^wQup׎_+%$?u듔7r,ŏ4f#NT,c4o-S~/˞$Z8PK1Si%s FpMyLf= kH/8 cex:qCMP}PN8;kkXpQJ>]>kZ`ޠA蟷ڦ'~.jB}DN4'O!]H+yw71nW6yPB<@txm YZ[[gfTp7`c_'xio3!o/G}X;N/5n~XғD/q6'+q/ư#c7V4ԠFimS=Kh6B˙Z暥9?G>]ST6*BWO'8jtۧ?8-3ngJY*|tI6t5-`vA:6ӷ/?IrOwbGWMZ&䢫\켲Mj.]o_V3JI 5hD@Ku9W$D膢ek)у#J[c>jNDMCW4n*_"N_>,eӇX (6q<|5ng=`o}f^eOc|,P#Ma)נ<22uKBe {'߹׃JmtTfLa>u!6vUIÀqbTAed]z^ia'wr*4'aA\4huT{cnPMk*'W:$ ]&'Tp&D2}N]yAʹXfh5:Tq)ȥav@]WS9$peTY !QD{Ò682tL koKJ(Ñg!TJ"X%ЧGpe5P$慍؃*MCE?bɡs+~ ʉppL43aCAo~^Bſ!߇|g~~Մn1k,xjiLb>(O\|`eN߲tf qWE*-bv~ 4v"-n3X'\w&{K`#%^s*Z6&|cawH&bJŤt7p6q/eVN~k`Q~qN ^-8{X5>- @aP`a&?0;T}1h{r00A) 0H3\HMq ]fNHL%NE&^Y$:HttjL7~Y$s%g 5R6T)4a4щ~Q|Qh5}mfFqAKL3" W7`Qo[$l c3U!5ϸXLf72}*7GX3-ZW?aRH^0-|A"K+N# 1n"kgT'*7M?ӲqW:TxvP7t1[mNP'])?$bq el܉/ ĹuI[1!KMhիKuhR38ۂxI^|BZprYgdĿm,@t +tY/tb3e5 1.Tw-N ' #I=Gs/4XrV%>,u%)$-M1!\`g}!XkIΒc lc5" %⇁Iz?n"H|ƃX8ϋS79c> l:e+W 'QD {lT `A޲-7zuu<ڛzꨍ@Ǫ.Ko6\'VO݄5=Ý #VÉU{ hoUc0s 7!U mPپc7V64(ߔ Lv[%d i$U!]`x{>B|*+4zB24Kﶽ`W)0nr֥WP+WD^\צ8BY_V J y֢܍-)$<]VLbo960c_iDmb [2u\q8dž |mq=bj93гMtv F߿ww碓">oK=OoV$S^j&^~Yә Z۩y4|-+|X/YSeJh8cy9%7m>M#j*E _Rd)n^:Y[689}{ i›efxoan-;=^*J߳d=Ƙ6*%j݊a2ƔXe(]/Ac'\>Qw㷓sf8$\o>*MXƆZQ6-ui /|K0:?QUNE6{,?jASx'Y[W%p,Ć6^Ծso J8c XiN"ت~pHf1{Qi158R6@ByXj%u-NjLz:9A l@ۼ|5݊v_~ :&!w/ܓ{uLu?>8f"]CǑ|3zB+yqcs0|V; E?ޓ6>uN)})>_wd["ch$,P)-#{i#ݨcHTlÀCHL,M*T9q4ZK}ŅF&@87Z"_1RO$|1Ahoh.X20CмTz &j]O|%nP@Kh^g~~.nH뽺)okz<˜U'9z8ձ&Gl-6tno$ X&;taWc[CrBM3A%<G92bLK%V<% ى}O,=DȨ3ۄ':fZrqp0^ɋ  S[Q0UN}n}(I1Y+Ӑ!8uCSў]Ø4-HBRY=ľ{ρ`" )/R.۾MdH( -HdyRWɳ͖A_Hvz˧6{wI8AOJVR!FI#ӊ [r'5Vtsr[JHڒߏ4{0;o hN%O`f"M{ rqTm;gèKwi>$sP ^d%,|Lt7 oR-4#\9]>mS)A-xPCHӚa ;X@Y7ukfO揯t2{hLdBeث| pN Ҳ  " 1 xB+DD@!, $U+La"zT8psDdӉ4~ &rH*<|­zSkH9'1* + ^m>gBz j LH"g ;ǵ_)iB00I -dաݵYmǒ&bT_O˄^`^4 1w4;Y8U|ж2n++m೑&/K W S:rwGiL-(+|kiSR9c V#؀HD0OLA41Ec:Otpaw#y>ugD|\,]xajOu&8gЯV!MMQ<=[1"rSTJcKǡ$0r*}fV] 4vRW*%Db.U ~WGUt`svѣ0]:{OU}  yL!VqA* zAz`8ⴂNxPoa9~pNoG)H8IȁYw U)J{Xb=GbA2B,[ACUJZ%͵vK'ç@j&A2.yOOR WkS#ûU@$0?d\&$L,W2BEfZּt [ȡx&ʜo`c1 &᪾ N|itToo6m3Px vN8KX NU':on=m,[Hs榓7Zx9:Uݎ2+'~is:f:ӱP?6bFuRKkY'O-8x輬U-ӼHKTodX۬:bn\ XC?WLC?crֳ/!to h9a[ww˾\ۨA 2DjERH3<9bongԙ2>eL{>i7Ðcj]FDŽr5m^ϐj9Ac58X0m%H Z8/o] l[.bęٲrӵ3? 3Af0 T. pd= z`S4ncwj3}AU8/o919ω©KWI#Q"¾ָj b(.O]17Ohuuƺ웜7OaiX^!.~Yjɞzm (_oR*t>1*}OpiSGp~t 1`r4k* ̹ ؓ{@ D/qC?QmlH.N _ AZu*PeV1zxDXw|[X$0ͺZfXngF€Bil2Ivq Hly 篨Ѹm[k.28MTMW5ol4‚N.qc8M ^77T.sƒ\]!\a1ELiMˤ~49E= hbIj5~GL%'/ :<ݧu l4KR ژsi Ar 0s2eic[eКoܒQ6[ݙ B'<"dT 01D\#CHaa~[K5^'o:5LylX*0G!I`$K`2Fm; gjR1p[guKgoXX3=$>W`IνB!繦:όK4u()O6R2 Kw0:k]??8 Kh cey1 z3?I.y`/il ;-]#ej 2K9YG?\*0|[/N%MZ $M*3 jV8+;?ɯ{ {-ߨ*ߥG7u7#e# YH6} [lT)zȍ`>{/Y֊v_ZA(Ɋ%d o;98o&IA8xem߈wsLͰ"Q,`G^4"K{V"%Lq׋Bg|\JpP,Ʉ݀"޿L$DN@%w>L kE*h,B#f[=K?s^Ƌ\|b<Ϭ-yViy/YsT=#§kS;ΖvS^[OP* ]9 ;U6ljƜvJxVw%۵pA7 DOVBsȧ Zt3i(~}~4Lxg5W7\,{0*˥(ft[H 1whOp=DDr:{9HKLj6hB1l,׏+t#9z5X=N sl]\@I)wղ :;TI*% M pUlm7u: -fq͈QUnĪ oXЕ2o#0"` kś5+4Bes4-:&FRM^旲.HV*r]v*{91:^LTOUO0׆:SbIpppdS:he%N2M"J)N *6gx[7'&,t<ÒAɉ)~FKLC0J^1 L@*Nq4y_~eZ# r^E ~"S՗"[H6D+SROS߫k%rGQ4U̺yhH2<Ίp4K24mΩ' h C1Ć.o(3KI IEn 5=XP?wyM/s) Pm|"Q|} 4i)^M\?s\~VeRWJldRŀ+8ko+xjeI1Dvd'^85sRJ߲4ﱫW޵qFKqA"1+?bzxDؐ!g1{^܇`!X(zk ہ)i!4IN 1Lq:%x?=-o_VOί=e d\O6J(k eU2#DžtGT¹(iV<,N~bsjO^d*W=4>)1 ~xb<pkߜmu4I=IZq_ꂴcaǗ/4x0#A; J|}(Êװ*t/x՗%U_Ne߅0'y;ɋ\׌ی 'BxRZ VkTP`|EaR^@ɨ0w_UD Y\v^/_⇙7)'u0仿9h1fR8梅qP-ƺ6ċQV@Ku9W)O3-y3Pǒc}qѶyrAӹ 1/Il_v$a}q}jj j/ WeyBSrHGF3>5حE't. fv{bx #Xzz}Au|}=!g+>hnQJI;;dwgp¤XʬY>ABz.N),εGQ%|w@fܺwo/>XG/\ \,J|4#YglDTZd>k=;~78j7USSM,xbRjMx }ake 1x-A.]*iIbv-\>ؾ ǯ>O q55 ot&mۏ\3IbNR?of2mgMan= xsVeT?.8M&T2?ҿ|xrnY]UӴG#ە.^C(|wdNk=:DFJ?l3|_nHVK-~ p߯}|~<۵<{2K"$ɛr*r|gy4AmfS8(zOlT&d,]yͷkЁA*2L)U. Vxd2u:-xz556>{(L]0- z*/!(i)aއ>3GF/l-O2*4 oL<~BEŎ.q' H4XވbJcZcءQ1E"h6, ?Dѫ>e.,u E?|*upq$tģoR]]3 #:Pa'%p[ g:<[<6&t>؉od_=Aj?ϽQ1U[Y)1פC#B@73 ζh`Ya@Gd+EcEDvP3SW~?PF$Up$$Dr{,V3Ȏ Hd|ԼPxdvy 5,ruK @w= = Ի8>u$M19b!>F"~T7gؓlǏBOt@'-=[#AG#20xr_aˁ2)Q &AtM޶JwGT7vџ^>BNt6İ.U1Qd@|b}U-Bc?H'gւ!^^XcyZ?&;&ڗ$$"|ŧc[t}'ULYU7b2@ BѦO4FtdR] Mc z/̴Z-f(Z,'9Ν,͊s݌FX|.c9a?y"!4]aDܹ>:(U&BqR(%1Rr؂@QnN.ŭ}e3Ebd-Qi@tCV_Ty^,| 7%pH ShS$}2:;+ n|j]:#4kIqׁLڱz |v(3+l53z<DIz hHQM *bd|gDok7pکh2mXUA. Ԙ[SMyʾ`}4x\޳eģ?bۙ3(/?aݿK/P t.U5gFՈBG{30Q<3I2?,>Fݛ\~ΣҬ-.G>6/߹3{ kv ;^=!k}3\$op_68B1n= Em CBN333+jRo'Ȫ:)%X|]ݜ'"%7H(A g'NK2]n0$|hL݅KBv MAF\:U,%3hGgXpD%4A (q~G &NrD3 u0x樸y-: yW úĻ^SEʫ`䏏U([*ͬ}༟6c(,5N"5ѡ-ޫ M&4?X-kb< B7?nvOQ0E b>LTQ ޥ':kED$z+Ȃf(a]g )"Jy믓 3?K֔G_IomkoIۥ8nhR*fKt]~kXA0 9KE(3pv֧~׀= Ok$2hJhο-]Pv1ADH>]u5H'* ,=4.Jм_JfU(ț2do8|4$(Z*HƠ$Ѧ)>S8pwt(ҽm*>٣G ¹Rj+ke|K+?HiXWzlqԐm豰4H&mh/ rcZ:kU^Db;Y@[k]~if,}er\5P66`.e>`CqsJOE&Eծ6 hupM^mC܎*:\[EttvTao@>sDm3uqsnd7tOퟖ3qI%hZ2uœ`խnD|.BP9Dm@j^8jG_NmtMdLUZ{ )IIQsB$ bK up66Y3sٚoxS)٫"t>*!wa\_k'3##FWTI$/畡o(eK A+,=26eẒoZ?iѡK#1)q"M$:!,`1'&r8F-~f ^ QTNXC3<0Tf2Pt~ uڳڕ(*e!m4`а `>6ls-c |-Q GI|?dF$ӡ^bJ]Uݻl (\ #>S8B yK-mİe(6P/ty(Xmgm]$ ]Xݠ`UYo Os4߶JIY{j;f(^#zq?(2222ZKqq^+̰>2YJ^@jNOOfMaT@vT;ѹwPG-Hnڝڽ_%d]@z\xrZתhAÜ3ar]%|@ѫ F$D p֒(]%r 9=oI憨X-cnM?]C 64)k.Ad"&:0yι?۟)^.^Uf p0e7,$.S6Aݓ;Zzv!"[`GXɩk߻K=H9}t&v׻|d!" zwd-*&JbXHUHE$<INE䔁idΎ#!.)T 'b?H M}$H|f{덐~HyM 6X"SWk!3ѷ4ٴes{ʁӴGP7C3}-J#}tYGiN&tR6z4ڌ1B3\e#1=DdC,Em3qY!^WV0% :2w%#+8IK2$Ov ݯ Wg963JgO_F>k}1{҉OQM'HRO+`52aQ6rĆ?䩦BG)ge>o_.f)Cl(Y6gX exrX(7.s<>s;֦'n)i M񜒱)$~ibm6m*DMV +ς-(j %yT i 1'r?a. au%K뿍5`#W])\[.h)-&S퓧܍~7 hvK^6P},cXٲ@HBnafR֘M)]@2X3⭪ar h?x#Ug oSHjI$O*DJ׋:"ǚ֜3Ƚda&dˢJp|R3P1ʪ8;GBfsM*ӹ?q 1r[{?쮆vE!|ְj1^O# դA0YnZk\j5|hD*| )2;lk„>2C"\B`u:agxd!W\'Pm?5kA|Vm,2u5gL'wc^IF gyZfVet26ɗ$e֟Tt0^(0Uw im̻Q%!s6b]~~zC8X?O\z%W搑>h;2S**z3*r+^F %m*o㵡v=9^Mhf,Y&EPD q-ҿ񯦲ul-iY^AkNU.̍ iMny;pΏWʶط\04?/ȨDPˆޏȣMnA N< .Z}4b+y&0ǜrHH8&( T2aܪDL_Hb}Hs;,}7K- |vlէ"JH8Q5e7FH={$zGscȀ 1Z$pR(27UGioJCj hhk}3xe0^wceWh-=N\@^/ord9$E%|/nEk Dz7Qeŵ 5Քmm\6 Zvt(hNayჁxHڏ://"\-a3Wri{r &u*<"kL67s4,=W*U.\0;nk*{_, -h7GIq|a^<3ەѮ_'Cϯh$O'4-rxwiW^aqn˔G}Pp?~jJoj8q( G!!rd 2Be@\N쫉-*ެm$;~Öoktn|VRw=\8h ͌&U6Ut=ZALSU%4 4e1FG_MGk=;cEfe^[%<*׻a0ֱ0$`ZsAE@ b܌62=NubNCXj:Vs hfh'L#ǻ7V4֜2ZE 3zE}oTne|s[cTvWj&Jct]}^Ï_iⴡnNva_1>|>d0q<+.!6hh?'[%+idДGy8lLw9*UJmmFK`-]`xGQe|#O5Q-#Nԧ w;@I0I՝9'.D9 a (Hc OM]-/L[2(.ժY?S !TݙTi>ͷmO:3{J!!TW"$dYocŨ¢J[Esd~j`ravCz -/E{f-2*pAUp`2ՃYʳ2s3ArA\ YW;Yo];Z5 >pƴ|V,9ebQO/fwAz;P(:Ȑa5.}yw8æH (wa#@>/ED^-qgB:9%_5Ðc&jhd9:> }z~z08ml?;7czy(>ҟ[d\ebn5lA?l"N%ZfGBeS'Îb).) zRE?ܴšLY"]վ\, [?S'C!?N_f'aSfƒF̽8ٕ![|^S K֜=`ј TTx6x>@*{T|:IwIuap벍8,dV Yʥ Z)ΐ~Np m[jJ48a؂ɝbs~v0T|49۩OsǠy攽 Y"7 9E@qNãq$fc_*sH%*` u4a+_Md!mgf<{mu8_a׊b.O AO?|Q}6q)E{\/z=f\#~D Pu~DaS$h.Ț?<Fvq_ Ǜ?˒"OGp᡼ "LAnɭ-)Գvůkq66}MMl)25 WՐҩCdg E=֯BM+YD,*U #Jsw|dmNjӥ19X<( !rԇb$\ty<chk\x~[Z;!l5ߣ-!_?8jGگO -S/CIn_16Ỉj|᪹)&p@ݤ۾ʳ'WVj_W.Y,ۊAM gԐ8o>ٴ610Nh/P|g~9i^CowNj˕fzzk]ڿL1G3ڕAL7#w=W2&-egJ7͇e J8nl!w ޳:S"j|75bjZ~|q&wY@X8o_ݓ/üvp!~4v.% W]AJm JM 3/HB"moR]]=tUgN ?Օa5XJl0MgrgW?t Ӱ`Mm~U T+ɓѠmzE\yVќNЃ#J8_f#q<OT^Y>gnbJ4h0-9K WI"U+0BE56(f yr6'A;`suy{v le Ɲ6EPO'SxgK|V`1S+pbUe,Altf)8h~O_4ZӕI|yߚ{y^,gZ V| 㘝o/tH׬yÖdk![(:ɜkUoasg1Gt댰3{a^`IuPأR,=#Z#i&K,dr Scī֗dSsdy-jCj ?OłHQI+F)nVS]H[UO~S5) x,tn(ȴq  1]]??|M/ svkU'YST|-jU$r.exUW<搨J&uN-p1wE.9 1/ySL[1 s9-s?XO\|ܲ';qˬG<4aEk%IVyJ,K<stt⩢OjC0+ʃe_ D~JS5B)Աz7`#6o%-?Hr6 X!nְ 嫮:! nm?]Ӟc2՟Im&%^Ϩc>Pwz91<:S `¶u(1ZΩN9QD:{#|8·, 5yD43rz bFOǶ*YzSѧ#X2tyr]˦n%v4 Vp6]x/¶m7>rTͶ?h!Jak2~dd m .~zqQN&DkwF_*҄| 'ac0"eCǗ_ V8JԤ;x-Eu,*dqJ e>n.OvH#?&o; ;>n'XĆzum#тOOi;rM8v51w+;5Kق:5&a.F`Uߢg|.8x_<Hط)9$W߻._P?5n"OD>72 3F (&+ zɿ񑥇-m?H:Aԕ(}H>Jp-k{Rx?7F;kǚ\}gE9G8T/ߪ\KZA&o6Sڜ-f.m&pi⠲wX~gxp usR l2&qqP\Tx5"UˋgK[Fp=mh/е`&ȝid^"o 1ZfxCr-V>Cj%j'zg4G/@> (1 ,Hך»>Rg{VψX+{|<ɢUpK4]7L{*ә #&#x¾?a9ff4.P3ɸmGYUd(Y,V6J˱!TKPJn5)JOM7~(ũVk(j?VsAw&>>Պ0/2ؤnI*b= p\e'eYT/ϛgy="c~*qm1klʡ-ku]XL'np}P͓cE6\20r,g|p%ڌpg?\F 8cR98 '>t}H TA4yn΋ ajcy!n{Gsvτ;_ޖUVMi-I f<6UaIў}C RˣoaNBSq$[m.Kh@Em@IZ;:U/ʳYM϶a!lc؜?ݧy]%9"qv읜&t#(Qr w#)=D`(Ԥơ~]=k`c'EOW3O^mծ5+q'ią,잵?ucEޱh&􊪘 ~"rN}vS+5-C_qEoF5jXFĂv|/;e>|X2ɢa]`mQs&)f}Rm9 +1{.ηl z y'xRz>lC+Х4+X1;#5} RժE7Qu^ԪU^Qͩ r 'kL>D \/>ed$I&d*w.WMfE `W%{[kX~FZO:N8:uItv"e7ϭJMYbeD*: SҎyY\:FKQl#Qvtʺ@Zة39"9S#AKHL_v:eG|!pyFoBs붯sgpyw? uW2c8> X7 8jHQB"[(OBvg(c@gNlc3Ze># :_#ک܂:B+dQlɿ-%b[]+~f.$"DxCLhC`6}KFl%y* XE{g&ZXKX`ĀH2MG0(lF ɔ*{JTtXMNtc7k]d\ A{1e`{.ķ,($z, ]]s1QO?"@&m coxNI?J ;GNlkAʠ:@|_:֍WwG?NWһЪBIm>pO"dֻ-T$Ҹu4.b[B/-m~g$Y{7j0'Rf$UQx|#f$ٝ )z笅nP~HvA{!Dj Et+)rۈcMN5ʧ}3 2ovokJԪGZ.,ǴLNKSBݠjl]heoۆSWs\W.Gd*wOg;cܟ\?a vɭ%Ex53nnW@]]'p-czGMQ\<C;%q3t!z98e2jp7quZQxwlRaVR ґ{&{[e#I#:$=]VlWK TzaE,ԢچYVGo!꣘[D<iGHp 4$nӅp30!|S R)sGg3;cMu3D?-͠Gn rx_J]r{#\O5QwP}$+?h }rvEy '4▼7w 6* ^چ068osS}q'~u2Xf%H:K,$ateVT{+&T/R&ad~d$&!۔ȩca(-6f LM&Gc,<(,C(eXn bi Y~`R*C%*̽T'Gru\wۈZU?p[t/ܾzdNmܽjևi˩8aɶ0J~+ƚ͠g5mв_G4xR~IOH-xi;Z<+R;|'Q]0o8zOM#]pDq򁱣I|wM힧 aΙbs2H/x"[ԡDXI: c֯> J I亳,UTKD~DuMN`Ѹ%u˶P@3]FS$nΖiϐRINY-PpmƗ_8?PGѽy'b8v [z\h5$:(J16[!^!ǴL9@cj,*ͻqlu7@O*Cg+WGhs7Uo>f7G]jHs||)-pKx2Hw?+цZ%B7t̮-7IB=+W-}mam6[]PK)-V][X Xp^/Z4hR$H5 p⦅}w|?x͟KZfs\T: +`.U__/O7; LU63Ԩ#ŶDg$[Zm ȑx3L*JM6&Y?W<<;p|a/nK'lh-{7&}FGLca*2+Z!ib(Mrc6 $A⿗?9D;z9 kC9y >c2E&u-IbLtd.\QzWțނKE8WG UfZ k,$?K1ֶ_c5LT+No n_P <8ġK͝W<`z;yu>φXj G|L pܪݢ?0v$ż )կH =ryf6 b'?jV^`s̼|hӴ~m1 eMfN+.,mCb|G0-1l EXζc5b4'hu|P |m2ct!^uQdOCᒍU$?&c?Ș}$AqJO͇3=9WAho\*L < ыm_5 @MDXۢDP3-Ie_&;NOh:.51%$4H438ܬ< GxIaUvN=ӞXƒ #Y"t*}i r#hMU`E9xRjx;+ndS~JXJ_JKxNb0Ƣj 2{b@\DJ0L->;@c1(4R@Y-h[BqytatRRTyV v@\zjU\k6y68Oq7dc#`]:s{Fti]h8]zQ^]e cu);BÏ0L55#-9&JR |?d&+:㴻Z7XDTBy{PqPӸsZCL͈3PJËC_@'\h̰bؘMe&ƙ LH9q}0nm.5UrEnxqVьO^.Lw_ǃp ɢ롫ery dԘi!8H/oW)~f[|\ )kE)>ԮI󟳔Y@FkFħҩ]˛3Nע$Ij]aC|DEUv:gYvsҩL:DZZ e{y}A-Y[e۔Jb_: -fOA1̇<':Uӳq:7s~dF(wN8e.~ G>#i KJy< aә'O]@jߡ ޻aS:ATYrYfJ;"89߽>NrR˕1*ȏ-x7(ɽ7KdZco;C?۠$pB;ʙv$ZlWwjOX U^<#xGLH7+ϢDf+Y(Gj}3*;6KM~4+.}mVtĸ0ŞL"v 5R0T"=&EY|&3|b Ab߶Lߕv}ezӅF[/@%n%d5x=YUhb^{Dn8{imF.YGM)A^A:uBsd6m˄M^~aEfjZ*a hXfѻ/ڣTAı1q2I28,?(TcdbQP:ޏڡ 5oC73L`l"*΃T^)OC$Z}fF6vBgJ7QTv!e0GԒ܉suB|Q-7![N)\aqo_٠xJ\vG[mu0s* Yf)6a&.2tT_8$~E/w=b=k98~⅒:Sp{(Y$kc( MUbBs?L uxl|Jѕn8q2~gZ~CvdR}Iq W!m?}8 }ѹdIƯWSؚVG~`̦DaagY5̽X\k\2q^~Aʼ"zIB#vy?l5IĿ&o铤$v?9L=D7=V,Qq?SP.' auC`>&KHMa$s`b>^`>jf!=v '酮T9I|Jԭ;Z-)u釂Ug>]m"`}v06+km;\%<Funz5&WNj9OCxљF]*LToGCAP Mn֋ٺi{UaHE=pѱ# @]2&'V`޸SOii5E`N5ܷ(5߸J뤽}Ab4!)eѤ 7Vt$J\rD3s^& Vz\ßQur^閲#dn@q (O12?r߲ėuxV=Ps}9'1unWiș|n1?"2L٥{%&tbKӦk{;d˾ӬdQs\F` quE_G; S|qmR{a7?e V"x] 4a6{apF$6`Þ^(ffD{9Z+tsD?dT^Ȣ2F&-HF%^ôaNV󾛇m/Rxl}RQEc=x/Me0g$3G?:bU%uxp#mDo`O~֍gyCX;ڻ6 @8VǤ-ZajD~4 n Y0VƒaMnǮ> 8-'CZh~r쿿KN1.W?Eжϯv~1e0O;~,9h%EkGfi]~电<${,έ\Q+p>)nR6~N d/){}Bט7uR~ ŪwOu?-h!'V4{8MZ$=.e'Ǽ}`npO,68֗Gn:}Qng΁eW9:QK5ގyҐ˷tee˾aC1|SI_-?),W?z;}{f[k睺vۘM~*|:z(wp"cE. 0+`1䲀^oڛ`:V&^aI !0-KqbN@i<^b8k2V0j{@}Jpò7eeU(13ت~yGzbO[z5[Hk>C u#{eѮH9uAaAb~ؽq zo[4OvcJ$<%NWA]9 9G ;&IzSFD%$ DI`2eT̸/NmViNfI)%mss uLG Jh20nl0JQ:D~9}"Sy((P[f qׂDxrmIՏ,jɑG"{FWMwg#5Qc b$o0MQhXb' '26Ў!2?0(L#ݜ$K!BuY&<cJ!OMBHq:aoT?I&&S Hi4͙/2kփC[4ka[ZS:s͸*k=]{x)4r-9rF{Vu9ic#<.5~EKb˴[򉹬Z7[[pO#qfc5SlSfy3TyIT=Az^(/7 hߔKk.;7L`Ig7+ZGƣ?iћk{Lȟ+OG Rgj̝AD :^Ci*1cf3j{I5g]R loG1':Xx1hBBϚ<]c @qL:vC O* fgh=ZGNaX7!.*󭫳f }#ytj_~7Fb5^M Թ -~q_b}ofYì?^ڶ:rr};Šhqۗ*xp Rw8* 'q;)gp'0vQ$tTOĢ7Q1)(3+$RFN ׹(3QAF?q)/%:nOO~^w͹dStcAヺR-c|'|M^hHx4@%?QJ9YY ܵ }<9Iԏ;(*BNƀl)3;ԯmߪk;U<5n@ZIngŶP8w cb%^`Bm5'!6ɐ%8\s_g'h9? fx 7ĜFgr6bЭycxR ~} c |5J9&8)` 0,MԴ`-S4MT͚Q5*}<8flG8^Ʌ|H+:budɪN\~%,i/R0;4Dd>DQ]^9lП5Hո9TuXiD4-۪jCVai&ȓa^j][R80SSc(hvLˏO T抆= ރ eߪj)YƎ Y_[;(L- 3ZU4@HI1 9lV"p(͗޶!%MW0E/po{4,a d*>Sý\k)E~WiI=kD@ 0O!xI7(\8'mv MLI*xB wݳJ6LY>}pGf w?QuRHl#e5_?W-mJUZ4S.>bL6s&*i>XaV&*%U=5$E*!kyIߓMqE+CQLHWYM|WdaJlsAO5FX'wB8>~d[73sMJas^'x/,16V>[A\)eg3bl45HՔuffsTlIΖ>&UKMfMOb_MNvӿC)a}3ݵD;,Ue)A䁄vJyXarޮ9a\+&'Kv/.bbc{wD/`UhȲO,[DڙM""m";Ѕ%C+JNDXF L?7E1Dq9pHm:dpc/r͍tR^O'SmK{L~|1B k([P4? oiiYai0~/};=KjB0Q0U&@ Rj^dVwdduW]R NRe#|?p%Z IMm~/ؗz+CmO\(QlR !E?wVJw~FϢk$ oɀŜ.2=jSN0sb6c4 I㔺|ۡk=eJ>Gx|:Y޷MFS)zޗD4,1iof $'_72c#A@i[wޤ>`x\9g֡lVC4>PiEN{ʞpl\VC7zc(.G+ 4qBEaRh[Wh^YVꣽ;^)Iߥ+\ך%1x/%P/Bo- D-"%Y]^y4%+"5WBzh/ÚHkuob߫K} (]K:MJECK\ZY &qy-+l~Hn\CMkƑVI)Rz#\W^x=n&~6,WB#pByRWRǜGY[1Q*VuzݩUTU^u6ۼ1PcLREZG;V_-V6lܠMXnl>~&Дy[ߒ]!(w;3|kȳJ&6ᇆ, .qH_JQp@<3?{Icy,%_iYMpX ܣR 9$':3ȜvxfRB5BC1,Zf^.BdTaK7 fΉ6 raO0-@n7g +}6è~f=*@ћ=n~sU;6S3@.\5,ꮮ*\{KApuׇ}]FDݲ$qhDŽ}Q`_ާA!*cb+PIa,SM;yB't9~q 2cfM @M`,%~zQ\ϥeHW >D1C&ԖY|b^*+qsݪ'{)m As'7.F!uKWҁ,i 7٭353W<` 4j[ۨۀT.1ӽN9]l*וd=M`!߿p9zxxH.M ;zn|PRPmqG `y7}oAMUqZ'w.GD.k1zbl(̘ApUdS𔴎d(>X-8l+@\Qù7g- he- QL|jfaBV<3ZɁ=&+.pZ|"&UTyY!={ӲX@|&cH܂\9U%N?V/~El Qy{B9 BZ Ko" c "Rτ'@k~nCx~kiH1ODH9\%BƔ7OJ=S9uKHf my͹fjhayi~T%5,O&Hwe`Y̞nFfAQq.Cx7~td8vB-qf m) %-Cr?%(yeM[(@_ 1 qG B/~f(|}§o2ꕚ1'hژЕ (Ӊe2Hs[C0ҞpG,_[qcuCb_Wu2CO/< L=EH{yM{ZPd x/P|C9Jr"6bY>H-¯Ŝ9b3m|Vbu@蔯XW Ui]#J缹S\=v"C  gw'͎J"sƗMꒌ6dmcw>|L 52;a@s @esҡ`Fhu 9=D10Pͺ>f( Oxr^St^[4ϖS$jQaSG|8.m Aޑ*1sFġur%EzEIgŊLޙ|[_{RWr%_߈IoungId Tǐ__Sr$Z'( ,7 rI ׭/Cpu?"dLC 4 %D>NCUi.Tr$uԖvXLbp^N4 Յz<-#F/,B& eϟ4l^8uRozeuk#S{*dt3x1vstyQQK: `fZO:beƷe3OIq݁`3 LEHxQtC\U[avȳk7背1ɮ`w--t"!ȃ%Bd̟Ç5wڬT8M YFWܰ]{0ϕP:=+x7_5aTWQ6~ 6{-w%vm߱|$=K߿ܾZnTbt~%DU\lĨΙWׯDD^﫻\|*c[Zг_Wz&+"s}\qf0<%%Pۘs,o$ї 4fI.5y 9y0btqh. X<98 >/pJ֐!yt{l m=YB![$/jLAΕ2|YR]yY 2tzۍ/_f=nu{7‚.{58=4]S][c@CTm*҄+fʤ"ιްfJWW~99)ry;KX1sO@z S^[g1":P]TgTRZhH&71p;$27fQHoR5|p2C ]:j$0wuZF9CYU(RT_VPNi, 3uIOas8!N0߭UДڨ=p#Tap-S%ye^xd(.p=T'5pr͜`*lVl ~تC@GL!:;p( 'w "tD2؞4+X-uupPc zuՆXϛ/#fλb;=@ZU̐f4x8Nsn dH#0E̘€T_S[gi:5Gx9q{QNG)7s>n]u ha>R~]_ʴ!Ɔ֌X}Sq_CHIsza:+k ީ3` Vddu9`!'y:Ȼg5Ěks~z!gGJy\<"h7LKn'Iٯ'.xyHDfY%wPN@#KMtqS p[] GzOX83 fg4{@G{NYAPmB( ͊ js5\^Vj'Rpc ]hԳ# Wkg43R,eK\yv9w;_nT2K2XN+Fʠr3]cwo}C.8 7.ezf4*4)T6ށj!F_ʯQUv1'lbVBX#'H$eRadueG-8}oCޢ ~hXN~J[Y;}-8tW٩ո ތWÃ08  "Vlt,7whh!V]=2OiF~lQ$e}x6Ixك ٪0It`H (꩞L9c\Hf9i@Ǹ.ہ>Z4XM\gW8 -EM^ 5] J}$ױW=?Y VY e[v֜>pw 5! B2)";*drZ/ک U)77걍v}S >zlӤ#'-$<ĉv焱ssAHR*hQhh;w/̳1$Fgcsfȋ,-6ɸzч,,xsl1r)'jd y®CnpIeBJl5c9̬%4o3[<(u zQQrȪ!BaBxNWٍvɯ!?dY-d2p!G -ؙ8xӽ})Ea OTl6ih|X0d&+Y+FG{dX!UI\ب^$j1XT2.Mv? -X,ck\h"!0r6{MWvc}HHB#(d} O zx;zqmV,3 sܟ4`!sL,U0]?=˟ps}E KϟL$ն.AK;=rKMmyů!kځkd \B5n|8xGd{geJ"ּ7E}(~ǚN{M kt0 u2<\gI~+r7 ̐?Oc1VoY^,.ul>Qx߰TDpu4mP7}~ɧd# ) J9> ma7Kz60Nֱ{WVK.4hOi;Rq }/ܽ)~DDVG$܍m_d/0Fn?Q|#U:V LgG=۩ҭ_GOK W/9OVU>fq")W9gl5M#D qSe |J5I60J`k:hT 6爅 ?M]y5(T%E+{Ne^jS{eY# dd=ILgЖ{# IkћYW .kԥ9RG돮N 5$ƒQp7jQ7I< ;N0eLzH^Fo ݆N%, 1-YDZKƂ|n8Y^ֵY*&BQ &SӢmEg{}n3ߟUo@'=Hh#j6=HPnY)*xAJhA_;sWTv͡Z ^ ..ƑB,k_tPI0@v==Ww'C{5mkH]@)AzP"I"%AHSj ({ M)^z߳|<97x-oqlen&GY-~T8>a3V̪6^ l`&D#viS<3m  R'%&G,4 f(moQs~@ MSMe`߱1ũ.?H7dBs7*rs cֈA:݈R ފ$^_UHfq}&Q'ǩ.\rL4|bhh^F0h 3'6ϧE3a<9+eQ,.å] G9wbN7R^T/cզMOZ$֠1SR ~'/x :Sg[ 䋌cA fVJ~qvMzrNu毕O-X I@%S/Hx!:j$Ba0v(AL3YjeR ׋k? @R"xu^H <86|h[$i'#U΂r{ YDKpin;CB% I>Q>$PG#se:Z: hUm0=wFn潚ݱT FD dQiIHkHRݰ /c$[4%TdipesBe jxiûΟNNd=qŠheѸoKkytT[%_}ζ)Wƨ!66~v갶fϥ K _EHT{V:Ir$TOYSƼl"w(2yPP1nwΙԣ٘(XïcARaljtL5WOpE=iwx6"ZIwkdIC/!썼YB PƄ7QMtq+oH /Wsu79_r" * TrAѪ[]N}dA:h}͌|noōIZHl!m]87D6ۦNDuKִ:+/&qEU:rF2fk2 6ȋx4Kr`uajm$"OKB*׳N!WξŬӵ#:no<՗Uy}=  Ъߚ,( }n (C> ? rkYsriI.OvDϟg ͏H6&\b@!}V 5H.(Tx4I~YC@M52K}5^݋G"xi kd-JHc/â@cّ7L=6y T#@ K(EMDYaG$dFX܏'`"Ay7I񌒖;p؋Ν)Ul rn QCK<*|4?fTĝ`2661,v76Ř#] 1 O9KznñB~̆@ʺM3:l&W9fYrPk(@ÀXJٷ^,&oӇ=bQL &=8SM,HMi*#ㅐPa]v") D'I=dSCv@3>755C1i޵Eh. I^ZHOanf*9ёg6iچ-?w}GL"4# Yn~= $cVf*{{χ \P9qceO/vk7<溼ϐ=y wW76λSqs @+^-s `xt!.C'~HENT6PoZl4u N CWa|ltŖ?[ =߻&),jrMMCQ)ԹJyYB>ZE4y>s.1)7byDJaZR:9MU)mG8,Ћ@paC:t?zh+5Mֳo?:E\3\8m}7 ǚ2h7oa:J1,r1 9\/5o7rK1.ԇC?9^^PnP=а^s `%`L9ۄYsDnW6iOo"=~|}/ÎTGR7JOEoGgu(;^L7y?K 8{c+#yI*o2<c&X-֧tUf+Fez3_OA̋ט\P=_nYH]b&Pb:FS3t[dIZq7ٗ#CEwڪtTДaDqwv78L`mњA}3bTg\Qy[}q^\fhe8Y`t℉孃$'L"uz*S0TЫ KڱhKЪ~+k ۺs\罰h:^K;WseSwfiSzP J֗x nvݲ ~;b 989\|E"J.+U'6w.xwB ˦u!Cs_pO:ɽJ cz*?,btL B''l˶_Dl-k>mwh|1ViXp<\.<7M^F#ʔ^ԭE}J:V_wn@~c1NW|Uo};͟-|^sЀyroTW!ȬLwFڬ{Y`Z`5s˾޷&g(w<]5P}6C%P['ݻxAZF:>z̻h%%'Z'%+31O?!wȺ|Kcm,תn'!WI)OT +,$gևZ<],Pl@>!KnDd0:2u pJV'n\[|9$ԐȑŽ? 9D/iD!f[>c3lj<);YxdD%2X6 J v6b6&R),NBC[[1=J } =-U3`E1jL>k*:~`;jBt+։Kʟ5\7{CkB[ޟP9x[nj> R}3ɟQ/`R!ތO/ϼVv6h\.Ma8Qj$ֵ(OMrƶ4 @/~ZHhո XLMQigbvUo`}Zzg γ~C?3) I6%t`w(09'*:(ؒqǻՏaa7e[}y3RbA:rIt>>-w)j(I뒏Onh*fm{|az7hs|Ok# G'{VOlU1`7M$L ][ ׇ.3EAq!suq!%e>)÷yWX> |e&ͷfe1ݩʤ~5ᕟ3Bjnj$YGZtc="UTkl~{ zi}ad9ANC"WRvZn^VM& (![‘4۾n~H7$V=^q?bW 91#x<bJM6f .A* 5-bv2m㵄p tAVzO䣛%cÉ8"XҌ@+ vY NG|O6o"vVVlXWP |TbMhI?PB4}"wٚ})%3Q:4v3n_0S''Vމ;o`n 0᝭US_^2F~yH_]Mc_a\Iʽ2v (7JKa`햝 &U%ހR~Ey'ܘ#WPA9miZYsD1VqKR\P(ÊjYyc޻9"/&ˣqUpbfM%] {-Qm d~"~Vvw^'KVUnj"c9uz'D Dd]s1vS}~y . ʖ"5I4& =;҇᫯p4cGNVu1^I &6Ie yOh1u\H522*_,~ ymb6nTbNY`ώͷYXf ;Em繇fpFďP u926|](6zh ?1oݹ@nkJV.Gס Snk|7^2^bR]c\EgeRW=Rd2_ZOQEvL\`K{hͣO!jE)1>brfAL BoiN~'G 3usAkMuKi iBc΃u\ǭuH/Qs ch C3sx֙ĕ^57-1h`}6F.j^e=-Z:_;t GL{YX{/{`҉Ï\sv6 w8l`=?6^%}o\+QG8bb@f>Wz;LiySМFduB:k=ÉAۤGeBepG<<^y*~(+`Gws[|݇T1-?V,3?pBp3TqD\(ڿzdU:RD "Qϔ~1(a΂Tm;Ւl^z6Pkv Nb &%HqLJ\ MٝncDX7Qw\ϠDPGBI,^QOѴ%!+8,wa d獢,مdv_nu,ȜiIYT?v/sW=)l:/@ge7w1yAAj"ߔ=zݻ< Q1 ,Yև]eI0pˬ O7O""]Sךhz169D/$ Bձөe(."fci\ћz ;+YWwMhũ4o)G4K~4ZfF (W6< o vWGW2!Ǜ!Ct `^_ZŇtǧwk7%In7$AR WNInG4:}hߙ>8BRe;vPcJZ׬7ϲA0 =/*&L2eoGpF>˯v2a/n/O9.++hhf?e*psyX\+$QxuW87T, kdbPX瘠Ky Mywq.zy TJ9=m!!T?vs_#Hz[!:sfT-]|bm"ٖF\"FV }|$Vc4Q)s ׾uK|x= &0x"ꂷl^hJ>'M%QռAxC޳O9t=ww˯WGŻ,hU0R1I<ێ,m:{\9#?/P I h6rgh[ aAa䁙 HolG޺]5AF[, -hsqTk~ձݫi4;u5wzVrLkRj[{S)^7n= ؍OsXG%k :Dv#7MH"Hӑbƃg__7.r/(Gf~˸):K3a<d1)ܗC+Šv ;TK]XP쁩M`+ިcC תD-w4qP9C mܛ&_>lwSa3Ef G)`2 6)(OGqQJJ'yܓćTđ z "˒s7 wUD1r}O]%ķ%w\tV$X}cä7.Za/2c{ng~,qO{2u\Pc>&t e}O nO<˺Ne/5ix%[LL}OR$;% o|j_2}/K0QN]\SWϲ|zWnǿtvQ[_-}׸C1WOH7CwT64*RYl^y7v\j0%e>z2OOJ n<ԐD4K+4<϶* D!$iH_:?W4p>#@~.aGL]6d͒ϸ螃]o9(b8ąwM֤*3EvT#}F}dx:s:*c{!d7Re[O/_4&7:R7+C{\,r"cv#i&Phh6P4FOh>lܭ-]@?l?>l5l5]""cNAU MO}?+~`0=$?%6NE%Lu~HE'i4m+N6#V.rcJjKr'}3io6O{Ea'xj])@ҭqSJ:BXۜbPӦEȸB _F`(3Qby%9WQ3aӐШSO]"֥&T}7u0p)u2wbYsrC%Y Q tqrԓq1]: v0Nf4R1]<눱iRu"n.5x;P(±CYl~IQIk*4yJqj,A(A [-m4G}Y jU:$c߽B+F P+AY4"8ݽ0ͻm"ȍoመU]|_01ƻEk1O-!z7s<;/r_aͿ!uMv7ٍ:|3Z6WthmOm;MX/) TiR?"5QZ#/쀾L=\Zc'51q\U+$*H4VA 77N3a93:_SNdӍJ8ۘC 65o2mp@CYk?{=?Cd,},2xdj:ہq<^A1KJ$>p4 jce!}޵+pmM>[plp¾Zt/}lCr5KLܖ2|y|t.؛@d(yxDΆrRi޾ƬCMz?Dr˪)CcM;h.Ro5rɻi N_X2Sd$0˾y dzx>OXP4:$ UWXԦO幖[MHgv4է<άbuZYQ@Z|ԏ_7{u}Ih%jɗ!Nπfy5t2t ˑUʪ!]SjsI䊘hm}AAl ~QT5HAN=EKљw(2~*_mj[_)S7/m?ʹk|Sꠇ &o]yP:/E[2jwO>p=>.+y"@>rw"jh_sO,-L 5pk/a!!gi.ZgRr4ޭ,P}*KbƧ'dH_YN,2[1!irG#*:u6_-?䌫-]FEFP=dAg(t%S~#< IшLU=̮uRܘ[te4̄oshl/-~Iƶ[rf7Io~7_H3:4,?G>R^R*8"7IL1!]07_}kb@tw{{;QN3.M7 aDW#d'W~sEr=NNyEƯՋ3fm1np[Se{y,Lf[B$ Ʊo?X{ kpyآv<Mя_gH(-`ɦ=fe]HֵDkdyޱW;UU*[I}?Iee'\y(GpOi|ɰ"8.Gzw~e_dNoE>W*~vlJ :݌blmxׁ{=%+TaT6k)Nh?Z]:}C:1/|h"}!9975zz"2/懺o2:[N@jδlɧ;>2xS*Ԍ&ؐj_fQ(:r}Su bzG^3,_ ]k7d͊bcyqRN׶|1k'\ZoG擾h3Y2N?8aV(p?K"JE_Ex:,OeS.1c?[ibac "D_\9V$\dY78Ry( (NU(&g>;u{RYÏ>'K4B*|DPɼ&mɆvRD'2k4-]ƙ ƺcn.FYW޽ ve \]ܻ%ÌbZo%R1rJuL3mZ>Ipu{ ZGck뭔/ i6_:K5M| OѰal79;%S'6j5U"St7\>R*'#U4ܝQE.0_ۀ;Y`ջeK<]Xɶ6U(R;H sz2lǶӖs?⣘5Pm9׊{$(glqR1)ӦCˋ_NYukH7~sgMzFf&f5@J |]g$.}t){ME?7ė%" {s,Q2-(zbTR|'V8"&i{.}D82:É-_F0R_3Ɠy FOKI"(k)?.G& bӛϸ"~J&m^gBzޜjSKtgZP+[a "M7 H#ڹ1R9ugDY]?EQ51 M/~j"; Ȗ3z  NO:7kta[y[޵Ẃ_ou];|>~iqlnL[ w!{ŮDÿz]5"$u%O}yU4  .7 H?tZZt[pn܋}.zɞαo֓RTO7oz8UĂJ]nRmafJvJhݝi28%Rƃ?5*@Xw3[{8 :Rc1 ʚeƉl!$U[~ ;]vt9hMQP@ß nL^޾(%) 6E\~nq.6Hv\k(*G(g%Aȫގaz}CD(o2fo(,Kh 7:Zgu93%% SRSN.N7%>T4#Ma.k}n Lʧ﮺" 2$LhBʜW=ħ!]$6Ж$K;NK*d*ȑaBYbcBLpȨ+Kmc3~a/>D^PubHԖ j'M87hf%}ecޢ"u@PxnPܽˡPLrwzc?Wd@h6F:Vd!_?[33"-M7>XEwV&mϤ4OG95CXt`ׅ'l]Bj 3sˋ/It([ɸql;żνY(@!^UuOR*i_sYT#>uWst~el3ru;A9._x}KY_LݦC~@48SǙ=BQDwQ`"mX`Y-JΉQ3Sq c$K*iì[ǟdO6u8M%YKMyrn¹BHBXB iTt 5h!ן$!bVx4FzF89KW 0! ŴT lB Br"ZF[7i\{=iO]jQ~ԸP݈AOF#bVW*_Ljw:5Y=rcš춶QEQ& ҋ TMzҕ*;D !4:!B %𮵾_{}k-J62 CfRkItBM/8 B]lZTCި$)Hte.|I<ט<ԭ7"].|. @Dɣmkڍ>pKfPj;f-!]4ߜ%5p >ٓnv9Z)p{~ꀁM6Jx F>ϏQj'[˗y K2O>5Yܤiȱ^UV۰Qx*"F|`R$Hq"9Iu ?̆g;3H^vn̖;C/2aEe#fCbIQ,|ˉF-MﺸNQM׶8|dFЦ)B;y^ܗ8c g-eO'.=N ?~wע%8S.yrls9LNխt (a4{Z&7XU%KbW+l7jHbf3;@u kI=<[FPJy/Evpr>ک(n Kr܀8q6ʥ/"rqw螱j3i'ċX-'<y=ê 8&nQs.Z.4|{Dxr9:[VNOԭmJ"E9!Ҡo"b&WbkOvp3+МK]I{RrFxAE9N4EyL6fBrVR9DvSp9xÿ98.ߣ9R:0eإ{ѳ|p—q\f :J(T%\lNM~W"cg*p(X+Xf:yzGA/ \ٚ\Xtw4 ]|hP^}rA_ &wgMqoQ2 6oŐ9Mۨ D<+x_GWR{h)aE[۬f&1ĴM6 AJ(f~Sj!urnL=N>p47 U~o!5:qН2l^{xDz;:)_C `r}M;p(wsw.H :K \^w~;u !jL9 6m7D_y|"pVN4/=saw-"e^85!df?_nz`sA* v8b~8*@3_/XwLn P̿55+gcYj%g_ Ju\]"D{m8E,EN}7CD蹒VSרlWP`KWe~^`N.±QZ󍣝%,EbJu /EH_LhR>e7T.cW{RM*V~%/h샆h^2:,ZBWŮWM!wQt|v yn xH"U2BsI>9L,Ixڜާt4峱6auUEKS ? '錂P9i6!SzѴV3**h7^DIPM䧦DQQ y &7JٔfK>HO, $qUB3~5Cx ƍ΃oSCv ˺Ά9ԜƧmT.OW{6|_^,Aes>O^W$w=EB.M6yfsuL%ɪ{fQA5{G|2W0Qo\xY ph^|_'%6j'EX=CERprIJhMpg!;~XH |0qXafU$ u˘=ߒ~.aB {u^Zbg3 ֌kLDј,wT$ZVy$#wNO7]yϱLtoz+̙s\B۾]V<k~aNWEwA4c꼩M+N3I0:#m\,p13%}ZQ;"3Vdbl-W8ji_NHmA U]%rg=5,Z{LM7~e &WL`ұ|zk%BZ~#$x#Ԉ0?TߑGIVi;+Z'Wzk.(IsEHphz!Nk!TLnB@D!a^maaoył("MPh̋mU:+g3(,57@7)gDĮ;WfBH"5r4`#k|c5gN{VMF=zX]JB}}="'^c.7ez犻@ҨE[{{SC,HIwImtrqwa:V0@^<%Xl%-wc9ugެ}9ږ2^=;kh6t/%a&}d-.[ Jŷۈ1jӤTdat;m5P@|V&$?fr[Xə2b:m)h.ZUw mԅʿiU75(Ji` "Lᙽ?.Ɛt. ysƘ*0jeܧxQLk\3}2@s '2ȴFy+4hע5޶r\nS Qb{Ȃޖk$U+>P-<#kg"b:Jna鼘POG#xIaϷ70 ݕ%M7YNi܍m'՗8k-B.Rٱui/ǟ7v n8~_+^9.XjFrF[@QSY材| Lo"dTƶ^Fw;"v^cڱ+͘2(wPCvI71pw^/?86HI9M[B|vB%v"Zoc(S"~Br=>/{j}_^a=uM|ɛf0ogM_ptJH'9F:$ޖ3xP4U8 5;^iu[ S ~a'uQqxΔ S:T};Z 2V} )&ll}Psw&׷ٲNިwM5*'¤Տ%12 c/O>h$EU60Zt_lwQo{&8tJ'4fZzm؏BؙoFD*HFHOdL ,~lXǶh&ٺ֡4z'"?-lWv*6\%Fpjbwc( *+Tp罼%lBՕg^Q]Ow%`St+* AJ 4[2߻t-@z3~YUx)Ou nO͗ͷzpZ_vȉz3oX޲vf.^ s|({vH@lCn>-~g1hN' Ͽ;!Ymhw"T |CM^:{Ujs[Y XdMFߍPJR:bc,>Ovg[U=^0e< - _obk 84r8`<΋xIx? ZVԪ&F&iɡ%NZ(x=|o$R6Ha@aOvCŬfH8{VmNd5祠-#Aƫ2𨎗348!;0<{Oe&:<0\F^F~6k 17~Xz*؎Ag1oQp]l<"{WЇ8*/ɐ>TWd5DA?YĽ82w>BAc3Q^[۸Q=IZGwc[%Jؕ Kj\"wRn4yuuV +Prr~EC?;ېLux |vنV:|:I8>jpHN<$c=w8P8+p|:s vQ(Y*`ʟVnSOצb5-[.6,U$'*0fj<0)Wl l t9$Iz!jخH?Th\)դ623ͨzz2uw(CSh~ ٮ$]=!h*)W ; 8HYu*8Wz!Um{/ldЛ78NO2:!L0jA\)o JKO:se|Oj~?è''RXmha5k14X ptLghL;b2xWz[Jw󠐛u0Ԫo%~=M cPa-ԁyN𸔘ѷY&A(ex-4z-i[=?lM^C'@0ikZ,@=/-cuB#_9KZ:Kĭ63d6 ڣv˿+V';I-a޿%{j_RC Y0)P$!.oɻCoF(u>&t?-\:S;.|p+s!٤"FEq)KN-ÙgxAH'dTō8σݦɬd1)uY^xG<}՛ǩB:A6.-]~?7"MLl'Ի1: *2R:K-|#9 #Z8n%š2 u` r]zZ+mL&i=_QHh?5PhW|TvuUv1`7-7 찡IU(_5P/6kVJK'_@U<[|<¾vx[pCl[Lc;+0ͮF 8mf͜] YbWhgV_-^Xy t0@Ma#|J ۟w ގ'-42By"wMHRZYpT{.ɅEO#'˟~JEFbp۳iblfM0 .M¼8phʸE~s3;)Тk(Hb }GE SE] e lD%-%-m9H8G~ϙҜjisc .ձJGӽj~֤usWSUF>":,k+ {uKs˘nA̞ ԰Tݿ=څ'ѳ!c난qYcpz?F+q/B7ZdQt= ]teìy݉z0oeƆu0?ݶ$ݹuWuRgWl>J4zVZ"1={ΗnNZd.y-Dr (+^ƫ:, k8Y5%IfͨDQ:ʛVZ s *_&o8GEkcj #!?'>Ӗ1nP&w źgnF.m⺓%\AD0=cq(E'={fLlt]RaakR/ `󝤐W! ꀹz;o8$G7n7jCqcb'ֹWZK%`Dw~)rzwwo3XLaCag_4rqSF\:P̥51LA޹˸PEEW]94]ft50,$AМ)>}uawi Ia0!D3n?Xzro]8d/@!. _ lGQ6r6.0RQ*xv`E&ʸ|C3/$BtT)J3$V7iV6wq+M`uԯ,ZEkD}e}dl~Lmasqp)Uv_\+fl5BBj0sA"짠J+dt;sPgC cFa̐ԏq} 5 I_ʥfaMuYxCݸ_Ss w+&}kIq>.5/-?GrZ~JU(kek?#3K Ő6M{&}ӱX͔,[kIomCSh}W`[L1{ߒ] IM@҂ :,{j5Hcè@JX b&9Dc *wvVrH5kF!`QEAi^i {ǧAcyyʿX+Ԟ'YXpK'ߘ_bR*di9X}_D˗b^^ '|uuJ}zܛrzЖsr@?+*cw"I{w4k#9nSߍ]tT,"E5f0w+PG C RX82|t8пn2g?hV)9xb<<66s 22@1Yȅ2SЍqf(Hۣ=P3S&g>~T҂N /lBUwEܓôKk)\DXhYƦ.:g48a zQ`|k*35&~ʳ-1t=TW`x91֋d,ToH7 )7А 2'ϪLj3Q=QQL8N'x}MTΫZ-l&ݞZk17*pRn|puZU jIZf $ڵJx-|ZU6^:hWiV1>}cqbgr@f0uf fayl4_u)ZhuNƃ]:WV0|l݇v_CjCP |rX6 p4iu>=S'LcӸa.Uel*)6Gp7lA4י)47iЎ?ݢ:lt\OUУJBB>g&])+~ѼOԚ=ka^LI@4faTί- 9DQl3/MCeu oHںY[6i2R75,z&TzLTii6r:[T `|312Z (Cdk Y;/OLrrIM>]|0sn 4,RZ4qY7Yk ؏ ̪3[8$HuHFq$=RU[$g'V2 ^q( HA:\&',# !Y9Qg.D ݽ %@6y6JH[(9f5tMjdzPz@ZDFkԯ:됪ZRaZǾB˥b"JWzӟUse5B[A bn ׯt]CQ-#}6 VJܼ:|rg^+#iT׭OձwĤ HMh \VybP* ը=tc y鲿B~Rr@i6SC0 e]_ Tq\Ym-.]-щ jJS ^ n+??v%{@㞏M?|A*ԩkUnTY?Ibd[8I3?n\e$T]̄Kd0Uh*nG`Wx k;ċV ;${U q~6kҕP;6.fク\PbH_ O'go-of!ob.wL2O\. txӵ`e̦h#VW9].?{zę>iFBH{Etٿ8cvQ۬$iC7S48T$?XΔXЈ;ly_<,߷(̇X^w+xRKŽu|XO4Kc]GIGf!Rr-YyigR̥"8Oɐw- *MmQArjM &ׯ4Xc_A5c2ѧ*kr{Bs~BNVOՖO}ݖO|z@\%œMύaƑ#or y~kͼ?Ӕ5=c$M+Qv'm h?^/!禯}2O$<ΓB x7F z|| t?ݲbhm |<_汶kR+j`q3+5+80o>.)Zvٵ4, Ce~a Kc'W& h̚B،@BX۲䏺shեcY Q12ീN,X1YUxa[C&)%.ٞ ^ά6z'SBΞ-.Y+DSΜ`Ofe >sv3 r$vȧ:X HgCYʣ*KP/^vP+Ǧ.xm-{'sņWANjh2]Ed1ZCLd_.O|4iڋ@u"n{ߕtƽJx#MABe:/xc9oYwY68/hzi7!BHމj?XU8qGm Q9c [c%| Իx_{\{2_"u1jFz:]$J맻 nKmLt8*:=]Ub'͓R͜!4V?XHA!%Nmӏ>'z? sq8yFA;>xO-1T06~#=M43 ֵR%@^/Xĥ0y1iY)DC巎f-]͸UO2$^{Ǩ4oOqaVE VJ:&.NS߿ EVh@C]ۿm6v1FeMn ڣM;ƫK}^x~H5H^RIp>|}\ū[ k _Y*K3i6솩ʇ:0 l<yZ4"o,xYjh<=3MlHEV~b˾?MA͠⟳,6Vvf*SX޹-4P cf~6A7ܫ!](R͓v|QH3a,խTɵw/>ӽgNdɫOH0wK*EwA]z@K/^ 3r?^Bl59>a7d;f69ʴutYAth#S<˩!v5@G͵Сmmz=M ̀ Vl.6 vL&Pkjecn 3o1 |i,/IXh*GZw i}yV yG2"O+b2Ɛw~qרetxWp <+X0=fsSZ+q Nֆ35ڷ/`t?b4=g{fyh,ں[vrv:L:<ʟ^$F -𨟨Ty.;U'-LɎP%7dOſR;WW_m<΋7<:4\Z@0 )a%BXV23T09M̃+eD-(,yi'u ژj?^[|@_<01R2ܗ-{]3VU_Ϩ\}S+m'L 10#ˣ$OT%H]Rtr01 aڈ"@& JBU'M?2F `Q8gy?nԧch>D+iY7quzy+uћoɰ4FgK*K|-GܗYy]~:z;ԕO{Zt ,ə$7RKa;~4CBGGm\`)]#2/BUeb[~fu7I^De縷]}/'#-a\%b.D wm_ puлGd-qGr-vi1!{^`w k>/yHzA,-xGk \y2!UT4׮=9J\f- ¿dEyJDqW2To{1:DrMmq52/Ƥ,U?Bŭgu-~ޗ ].ïmCqaNBQ`\x$6ϡMos(COu6Ci=8%Q;d3x;"mtKe v+ۈHMiib!9GÓk@꜊I'hk,n Eב7pBln@|2,ei!kp<@5]A[6, 眻gZktuWWowU狼z1  ";aLv]wdQOefke L8-B"K>ٿEM0q˰kc>]g0[tk+baEFahfF8a-b]:Gj dcskSi5^_L6N~/*$4qQe=5:Y=':+EvxcRo ⧯q.`ڝؗsn?lOf.QUAhf~[7nqFh!$ެ-yež|y?s޶BH1e䩾duJkgai2\w1v=$x .yo㑟T.=_ylݮ)_.i-\-f/ eM5x nTu 皭ZF_C^ޯ*]SAxhNZ\K>It(zKnQ\9vC(KIw7"Z}1N?y>6:D;9ƆҾB8/ ٥ 𒟰`N/D}*"3,UbJի0W_Kp7ߒTrc*~[Y5G$R)z şN޽!TE/Lʀ)R9!z~avܑ:qF8<YZ;ZE%$ M5X_ 9 ,yit5|lkL & J7"TGt>5Ksi> kkا(ݯ:`qf6 EEXGz{ :nؗ d%ȋ*m8媢yQ1i4)C\>Dglz.7ob1)#/fbs!/\sf'z@vPh $_͘V?? ,} Amj}Onw\WEմN<+bm؏RjhtPprF6LUL3Ҫi$lmXCc٘8Y:@ġC͸!zn~B2m;UiSk;.bJP㜥.{ eWI.w lDڹGV"o(xNDJe ~f 8.*ghU%nN;< 9/qEQ?iP<2%C<hҤV=( ^Z|J$6:rxPnơ;Hr.um%Ѝ3M"LjFՙ|mj#;?4édO똲:]T]H_w]!՘pGAӺ \!{i?r >-[) 2Yu厒L ڱuXwF,uH9㌖]< .cm@w j]۶l+6b_wҊ'DT2И =9ND8F*X^V^Ve;m`3-ب>PL)6b'25V&.!}PQ;OcIvN`WgLkK|gdOI aQNx)h@ħjeJ)aL;?=iД__܄{\?$P4#Op|"zLKׇ=OQ$9$cc6wۈ&e$loJdt>a>ޥdޠzq44BS >6eh󾑐PBjC446prMߏ݃dߣM^e}BRFL#|V)u Fp#-,9Pr<§Xm x<5 *G!'U%7A͚mڡ 1&kjS2-GޖXE Q{w|&2Wg-DDnU2v%<u}}IM=(l$0#&aކեg2bHi+=jHa-SW @| q0 ̇0z!á}pd? tz1  nZlvTo͓b؄~\31xxP^\ט{z(ּMPA#qcT%V2EZïE,r0!3bz(Q͏)O%bR}7SLL^DW=E: Zmqw$"aPCԩE i.Ń-I ^uA=A qq^v6]&=nõKAItGGGM-X;X7q+;Ÿ~meGnғ$T(8FGG,l&>E F#ptȫ*$H{df}χsIE=3 _X\r})a#IEև߷%qqŒT9[~Ϋr&AZy<k4UAT6 zMIm\ KֽO}vJl2upDMcѼmTLƇB:"ZcNJ1hCI>F'% MCYSJqd6ܡ]uj82H# Ow^'(VB^:Q"xv[<vٽokvwsu ʣ!(4춧5ªTo֓L2cyT٫?_ z,>:Lg'&7m '"JzDR7 BQ=UX\n$je--}+EW$?tiDJAB'qe2 |,!ETT?Uf}Kζ'=;ш\\nO@ɅFqi 5ed35ζyn୯9C&?ޣdB>΋b>_R}HHWr w@pW@ _VE)&񬾣6K+\k^y52uA+UR?ŏz\/:+kMUd! 5JǞSɦ2kG[_dYo%-“,W|pIf7ҾT"fAH.XE8臁_jFRv1⬐5 FnA7ߍ,f֝tS~>՘]Tv+篍h̹/C6%+hRVmKogwNpѹ=Cc8*w864nkj\$InWP) ի)qby="8^[|q3QElV%uS MS:XI$,UWBD `+#Jc!/rpRHI+Bӟ* Y,* U!} YMEsl1A-7 edT"T!R}" ǝKO'T;.wM-ǛQuf@׍S]'Do%8h#(zډ*'zuLH&M#uL8?¼\P ߱zE3vC[FT?,^آIhOG=%V-vOKVlZD나=s7sjzx'|n%b4զ碠t@ޟP}u$k3qjٿsd՞Zဗ=qK*G'&ϔL~IrjhTyD6l28f ʃ}TKk B. -( ˢ~bѤJSm*7ê\[{ .z=sCKÀ"ŕl7h9]2ucVw.h/Z=H^[ 69 K x)c yֽb&V-9 2}@B˟rr3e}} S,wh1K1 ``A¯Ȁ%W3P0E4$b)/ A>8D_7ќ֣~,;PxpqvL@!h=[W@0Z%+*9,k9=&vD%+|bwyք)}@b~J<[?=5/$ ۄ(Z[>lh, ҕ 8-.lyX7bhm=.Io}/WTQHm]sC ggWGfqHbqcǿNF:CͬH;n v.%§LwWɮ\g>/w!O{kױF>U}Ǧj&:.Vf00:{څ)cS@6b;YˍSzZ к[C!Kv]H\ޔJ#8jz.) c UЌ{GBLGr3w--塥N]v16%}AwNP ,=Uj3`ƼŏKbsבB.vE? yb5AqZj /l^VCcܡfB˨{ |up>3KÂf) Xf o|}1M sF~fܘpد/` ޙ }eC.P2{r?mMQ.PzGoчGת 8/B¦P 떽8*1m%ʷxICqN*)!70hG%Ke6zoN)reIN^Mdr8j^-&'1ӦN+494W)I̥Ա kh 3#W61=溦_׌+V&F -Ӝ |RM"=dJo:"Hk8+,ug0YY,OP0Opv5xV{*z3t͹dm*ggp(QN`_Q钌K!N P\Na^qFxV;@q( #\pd^`z9eMpp+"DFu1v',ӡ*, [Ȼ.J29}PpU0icR:;(pno/s dqQ%qmIx퇊~MZ.+ӽ.ErNEU"OR5rpYS͝:&=ػDP&C_bBaGWq2"޺X*C!wD\K}q*RxpHE(J0"hv6p$,,Mh/}OV螺"eߜpE0*ӳ2d(uVPqѵVDxWhhk`ZoǓʧM)[)o퓅D-e?&QɇhB$\0jv>cV(TP'$=> ORO}tvb \[ǥv]vc?Uu3i'`k =K։tc,C@.TSaBJnm{i]n{.#'Fg[sAZaʟXk( 6ySTٷNu>!Ax d. Bg`b qЫ4|PC[$ֺ}q7]sDb?֘aj.Eh_~$GO+_ZEIQBZGrDbb=]3S1moHaf.&87C{UzPb'EAcH k-[ᯐ|I|39r[Ba!"V5USPHA's^C k5Od G ?-"FNXc/c0{}4z=ǚ??B=Zin.`8Xs6O7u^z2 U"F8LL5kл, < -y2cytG$B:8^+8E͖k9I>Lg{!z@/'80Ē+߿"enAk`/7iVl!ɤUE`Y۳++3X"v ug.-v |ΕO}%+Wd/sEmf"C#?tD9*e*<4r-8cek1Fv=ìwBO0 (lZ{ 7BhnK2wFE: B"b8 )B#u1Ac=L.#eoTFެcڧ A!#dm"ߵ&xr2Щ!}/ s\5 K`V-'C7wL->?7$P`To# #ַ̨:V'x pп2,,5LgB9H?GӭLKr"CwUvq b74Â[Sb p HF6|K^Z ~&EEz,9UyģسÚTX"QubV4k-&9L!NϿyGjQ}Ȃ~Pr;uVHNڄ1#JJ-lPX sj1>ԄCٚr004Щ c|(mSmO=U7D)^g( (|b:/@'h}gBR+t$;!k3_.8Kox7~[Dݓd`qyX~n|o11m7߹ݧz #SZ9p:j Zm?5\ArČ$/qg,~-c֧ჶjAd==5 `j0g>(̓ D?gR}U}{E^WWQUqRx7|`)gP2_4κJbrK2L WzCMDeokݴyom&dꇣK31RRd+=閂fL ✛ }iR;[jD]|Q2W[:[G>VF[y }\j\fNJ^q~h8^{4Qј `vپN*ۢ,Fc/OtR O*ֆI3?wF! [Q[(z.u |N (41I@ 9_n}O`&a <) M ?WUxOJbbsvbOb#=@ʧC]`)9]Y,Ƅ}{m&A5xIhRjUi64ۓijfy^C\?,B~еQ,VrpTA_zVv K9QȏU%<K+c$V6A$Z<,e[p*tVO>y\aЋf)ܵ~7SL:Em4ht?W>̯Jz$dBF7ׁCz1DNU:$r֦:-tq m%{>P"BBUH #h6UFG.;RY`KE),Jm>y~l0k0}kko)N=)M1[VۤaN`\($QɛUQ;EmZ#"QƯ^Ǹ SNt7̡ΩI˳a9xmA+#7XU )ǗA d Aut' GNHf -8ZQWu,|Gba#[C2װ+XG YxdA/ |@I {Bq[r 9se:t-ACfr5u^ү$ʐomqѯ賓)t>O2 ~8hm1S|ZgGVQeU"IuDaLڢvٙc=VTϿ5oF `?կ!2H8T~K"$Mǩsڈt)'rcCe|h*epb_#R S \Y y^ s ,2~l1;яteS(94*Wq}sI$"Ra(t~`ƈJ5e`ljq0QO9}h: o/<Ⱥ24X P%k͜n:~IEb@ZW;E= Yx|T mK1qSsrA[e bzj9Nc ;ݠ :N>lMor DISlh5w)?Q> ™1!5z**y- 6}͓ =H: O Û+eop^(`b < *)JA>?h"oYT+QX ?Yiz?f sqD|a1l',a?&sƌ:5°_#NP猤__Љ 9-A|)LPa-27.XJJ[ݑ݈i= VyUZ*V?~+s:߶s79Ɖ~c1-ާL3W ơnj˘9K OM1bGMvl& !3!َ|.`.Vc: }ԎQ.C{Qt亥$_.q{hHU5%>9xJb*9i95n}&RyR=-(ֆ)w]Frz/E˷L"'IθBq>p>5A)hU (dzɶx#!a-{A|ATXmSl}|K?ܜF,!%xdvxLOF937IʺbwBE@oJ -(spy%8Ex_Z#Vnc+I[Kڔ͏R۩j%6E qfaq{4B#iÚFɞ唰{Hzɒ) }שطΙtm[KH@k;ܢԞj3-'T dÄG&-BiO5Ez*_I d>l\Ѫ:hC O"eXpk[&Q4<}͇ ;rC1i#z?h_* 9hp~fKGgoK*ZQvGΈ,K!řUFI@O=[&[ ILx #o M- }\xkcg<+6gob)aDcܨ첐r> (J'{2^H@0k#id'$-T(->Ufk&jYOwg5CY q(lk7'L=o2 $WUwxB,YUm509cs;8p%_;#۫QHz ;,_ ^{T x#`EF0r ^D@#UfƵq=űFHf`STYkP؅]MP%;_1󃡪30iA-~`iڀ3.A9ɞ88*%p\”jV)2=XG'^q֭KӻIK?L@;dNJ5ډmBZAaf0jeJ3ICQSW/tQg#\,Tpg,<|cULct4nM$B8,ȵa!;UrNAѤr8A c5vnS >:W$m𕵶2B Ӎ/rvNPW)9CImq^;=Xue%H|1?%zqE0EѪjkh`\R_NI3.$ve8'#Hlmh;F7YBˤDԤMK2x)G3MX7bopc/GY-gW#j<ΣêrK5v Q ]/kV"nC\F,l*XRya+kUQkZ/L$IHgQ WvU {)H4xiDpG l60o7,Y_cm0e'~yCACٜ͡vaT5RV2`}x"7E>.IFX후Vqo# S-|[q@4fc}~ oL^b:-mب1Ƃn3=`4H_4z^@Ftitspm7CQxoڟNCze!'JY)A*yLC46LV(fqͻa<,/ b% 6*b5"haNwr8"7GWVUORHAb 4;뽽nRB5E5H}M4LjQiN*mV*mڞzh<'ghI0x9-~᷺?kZZlJ5|0-sl/ش'?^,WS;TXsDiq@fўBO+{):nHz=C6)(g)BՁ#qE2O(dyKx/[bbFE$NYt0ⷌA>(P$IOs^2vX|&` |-/^A+ j lg3pXDM_Ru^8|gl?ޔi{++7*M`(I0߻X!nbE֔#m{cQz?TƘ_nJ~3]'r˸kyIҸOԓ~щ8V/=%`MFQ2/Sbti}oFG_dVg)68·H~XEsv[w) 5q4}9'4.l9;oZʹ}2W"0c얮+ys`cE΀TߝQu+y9*g賂\ 6:ʮ?r!^K~4I?Wp֬7lB޸R#F5aLkG[$N%Wk #ԌѯC5{w?w'Z<A[)]o9.iBsD۩XfI֧_pA.[-;x#ݲ_/D }RLaiA~lnoR3ʝg:mg>./B8z.vs|_ Ԯ6ⷭ x:W*dXV5m,El?G|}eAv)Z/M6q}+BėJ.5fF Qe}A)2{؃ks_nu#9x(RjXմh^L' ;'g߫SknLϺyR⿍(|@s,}>U'RFDA[L5÷D@5#vQ&f:X6EwZ|@͉>>OOImci_=K0 a[)~Fvq$k_A}8$pR 3Xw_S,[| &ptZκFO6]t#9;2~~ 6= #MȭGG!/n[_-B^.-'XgS:u!ޏOe8v,RErZ}4c-x{,ksH1j dT Ve}ryʱ 3hFeM~e4nys} 8**čKu';.Tk^z=Jا74rtg0I`ôy"`AlyX% ln,[wi1OD߿[wȸW.[mōl &Zf,|8":3@u?{Hތ:B/*,(~bOB 2wJ xfFխs@yȵO{ 8v20y i X3{O GU8cUTwRHV2^K2ϛ2t@+]tJI|=H)Ȝ 3Вhw>NĀ'kj Uou`#@RV MwE(A'M t13oĜDOUe|v*e =*|iIZߖ9{3zְt;b^Yu<,M: kLVandg9ּe>\vӓ ٯ`ݯ6g_<_,j9`?g2l91*6cw 5C/mtQOyO׶eZd ͺ:Ti_;Cf;2˺M Xi=]#f!a6nb6maGQ[6>.)"5u(T;2Z.|㌔#Mh1Q`.L Wm#Ij.ܫӛ[#{KIj<yI)=3;d%dK"c[Pxn̚/MJ-[yZv3{E7KN4α#4:^NFF핦3 7.)Ձ!Ue; @K qJ-RR 8Q`|=S үKV4;7p="F0-nB/ў~U)Q(|G8n^$Y}9©9օOEIOr,r\"S Eqsޒْ ݦc^ 0X2#﹎G\*_a>.|FW5|k0'Љoz>*1ҤY1 (+d{(qFMB->8 D|5ҕOp1ޜs.HȽSӅ:< [\3#=PlnܡKFО y%wXVgS{ZƓ&mO|}GKˋPfO*K$ ǙV[ze,: u@߫"g~٩n26K""Fy#u 꿫yN)S76koڲZ~&w !EuU jwrSDk2eX/W}mX=o<{ߔ>Zًe5wƵrEn cIt6k8ƨĒAT^?G%oKh^g$zk%M,4; >7NEʷӑO+L 3o;E4p?=k%>G@}&Zm(Dk} E]Up'3_kk^*PZo5.ِ&+Ϡ2[eLab^GT { *lXi 9{bͦyZD*LPX9-V (, B{Kt&=eUpW\0֢5;"s|}WUXzA{(mh.ΦB^VL^ nJHq`Ԥ/K#z_,'hXo2ۺOSi7dmL}I'A'G;v'uCl1źXT ]^ Gg&v(:ׇ"6)j{NN_y5Mu %זI`Hٸp܏ $' ;J 4>ʼnVd}5_5 o~4Uwq@H'p1Ȍh-,+9ӈpYlLS B&?L-渇'-iW<)B力\S[2 :n3AEvklJ'Fv~#sDF`/dB!?>Yaeek"iVӪt4c"aXm+S9Xz* =w#@cze5-%#QĮ_x@8ȌcB:޶E䣿E8a*aqS4&]0yKr]E+j ',g| S'Ɔ9s݆Y0fKTMAXK~ 0;1)(*M%F3әtBAS5d=}ʴz5x7Ls~[I}!QMOcOZN;:8Mhy 0\eʼ5̈/,M6=:3$Hq3/Y7]1##HhqZY=%Y6(+tU^~=㐃HS0U&r~t\mMC XK;bg&n= ~&.rB,3'K͕(u21'ӵ-a.4zRt=O?Ր2lRW1j~4f+:+3Dd2GyJ?| MV˖TMz^;`BWiSlE =qy\q%n.b%^%)Ų-gdqw^ [%q3J~b$Q`XR'zAN?j"#'Ĉ~A7Za߆d MVƑg,.)3_V.&F4~:`JMs$\k~\rHs,ui0S)FF0ZK|屑1 &B x#Gj֖WmjBkyznqkruM CQ Bt%0Oa-F#,^{5>o}KG޲dkg|aOsv%DrUFE8W~45D!CSYwWw_㪋;ޜv>㾷1>ړ΃6CZŮףef"`3S^ٮFRFW}&\W`s .7s/'2IvPNz`#ͿQ,!iN.g;cc(Pqs&`:5 Z<'4*Xǁt̴"z<"Pti튭}wƖES̟e֣< t gu%t_P)eň75ʥVzC/( a| &m (hӒ\ .׉y1, (IZD|I{舼&xN>݂t/7AiQBp޽"М)D&uB=vO"4xnbV:cbvG1fQ#6}*hE Yl!bzU7mgrF UJJVeTO?dd:T>є4ȠGg tJF㰸" 3z,t5oВ<=~hyùEx7!gΕgYkP f"9~卖UOxV2"O:<TDsԙwvJY`^?U$?#J5(M/xْۧbk;o>BR-SE[֛'&̷,pE^|_"[iQ Imqі$f`s lhtסP]9"wv"n0@juA`Pӽ!.e]Z6::W~A ]̧ط,;ޟN(/dMSTjp3Wկ Tu9ErmζȺ}x)ZmbF6z 3c͔,ʽ(3{w0%TX{,ќ$dTZQԠ=zZ}bN0UҨX.je6_˧vb?vȻ a¯J ҵ_?(ݳhT,|8 *V%D@/&$Wf6";dRǧ%YE՟\ ?&uY(hZ)8B;PKڍ,+"W`DʕnIۦ28J"Zr$G Vƭx]F⹌Y }LĪfvM`za8ԭ`OYpn8&\)X4j.kY$7 XU.46qЦ$Rԏp¶ Ư=q]LD-!X&Os*[&)jF'?|}nMeR;g$,SkF.@vø e2q rO&88U[ Eu~UCF;/]ǮT rT Z_cUfB\8aߞ] k#'ToƷ6Ƿ]CZ\#~v0~n\,v}nBo}9HLNL~>sOaSU։۳&2e|`D<8p$2}v|?b^u¡-IW=%UjLlǶG.#uX#S*ߦ14JV0,ō]'ɰԛV H+XA_MuQm#I$PɅ$ަ rVp{ۋ(gCYgQ F)Daڠro+EفeczH-D/=CHJUY0 սV/Dwcq_w1ZH}U]췭l]RM-d9jQ@RBY> C ,T0u Fz>^ ^1HHNyBb) ˴@ KtT@ϝB>> ҵ 2D@$  Z~NoB&s?G8+t0 3̙ƛ?-#SDeQVS_]dlƜY̱[5$k1_{%lXt׻V3g>U m06M=gԄIq^2+m}gA!Bar3C_qfmIoBL6=S'zP,"#gMb=;q"< yo^!g (TnG|F pa'tMAHS&JkFN^wRtJmNUp] {M6=A%ck֨ @+sڊ{[u;6Uɘ߭xT-热[M({^ &~,W[escvZXb?hbz.§$C*r8z/ѭXw-SF@:.ܙ#$dn+_^zohK1ց<J&V;t O❦B,޿&]ysԙLBBh* x[~s{dtσR>ʰ|$PeKGԜs2?+puܢ!r(,9[}J=G8ϻ3rƐR~DEU3Rs=H#."1Q5om YPy[%&RckE\غSN`6\:^uhh\{̿Xjؙ<6<:[,|Oa|Ys]Xя2svä?Alc:P ?~G'evF0daYr歎i5ͩz$2 ɉ zڀri/(1:bDRB=(S]s/Ԥ.M[t6H.pfמE6*6'j"Q078KH nˊ>|}:.u$`v[I"kfDZ2§ɫ17sE$'\N<9?/"Q})VPv~IߟYPzm, nS?09 _xf֎;Rgdu~ӆ $'SY36CBos»EpxG njʾvE|ךMĤFH ^jK1ߵ!ŒS8\.P Zf<|^͜c㸛@8A΁}p?O C٣C3?8ʤ܁7e |X̵[F=q1l|h`>CP e|:P-fI[ZeQKS֟Nt!|.> #F pc#c7߭X֧N+=MeN-uKq ˀ0!$y9q|wj%dž)<3&gNտ+&3s`ZV8!\O*(vt2N"MEѱM~?\)kφg?Ve}o^[.C]+Xe [mO'`bm.bN: y)2cFOrN#zHf#B1$?0B&Gf킕DҟuZ*s?gꇉM>X4 F1NPɼtC%9P_̒a~TւeǛoB 5Bpo?Ks-oO䷺#^'QsDe?nwtоqLE@ C|1i̥t. e d9&& &Oqz˥cCktǬPLI8MuU݇Iʵ\R]Jկ}Yl/^y:+½ZQRZU@ԆWv[\9o0( AXfAKBN>ꝕb 5 Y =jOHN׏xe*՟y@yC_*=]{+ dH=kp xƔטaBp5&gEoi}Bc[ 8̺pd?r{-k5,[}9n*Ό"Dlϟ? 40 d>`SێceV\<v-閈ɡ\q^li)`Mx;Mh <\s:Mf6@7&~eKq&=S_['=J҉gɟ R9KRKO*GRa]B\bh )pš+z;3jG=,z-ŦgqB/ m?V]7y {:gVn϶vwb/|2]Z 0oZ gtS&A$u754Ϭ$: eA?+\ϺBAX$qG?8Z l('2ޠZކ}zlHA(vTj}ݠ(Ee}Qh{?&- uDfÅi[H^ք[bj@,)EߤG9)&WbU 0]kwbSNRTC. )69WCKLn]] |L̞&,H *8TN+2w(~?9L8ѣ! m8Q_kՓAJ;)@e.WL*<5.~[e QZ\ޓ'h) ۼVSR-M5SN^rSs_psJ(l"< NMc $ ꀽ7Mf[IӘbݤw\]rj ,ǦOxh.~9Jݪ%ѺÈ$x[~V~IPU1so3Ȝw \K kARyē"rrEM![Ns㟨46tˍ4ܗ+㇭+&L{ԛݖ70V7#H<>9]a~Lk`gc@ NO}73ncYHbrR7'4bzkv9hLA4\Db3fwX*ˎVĚ LM>zʯhGHEcᡙi%ec%֜d`F7|R>1 ?j=aS`9OЧ7ozq2K1}L KEi`XrE((m7l49EÂzv;D 7ޗGǖPym5=k +km:0߽1_}iOVF/bFGqUʫoW=66eC?64{f,P#yNz_o8Wka2dS*7#^Nu{Yc6Æu*̼4-#ԛ_݀ȌH1o#k{ۣ?SZXۙE]e  &9W'0S\ p:wVW]hun!xߍ+ռ錍W2q k]`HeSS2Mlmy>W*pg#l/T4]vøeܒ9/ /m긪F`Ww~_J_*,Տ,9&e  0PKCg"coՂӶuU" ܸ38mJl ܉xdV؃Yuχm'_~UK -]O!߶/u*懵݉AC*> HJ !LYv̼,AEgynQTꨄ>V?NO]2f.oOGu M!f%oN6҅iU?Yt?6+p~ۖ =BW?wTc4aLhH~,ALz%Eyr$_@l}eZYh[,DٷZQ"DHzT]^3w2<,80Jr\'Fr5h~Po mhT_:tt}?"L;M~}tS 4-ڋxE9À9TWDc Uvw_'?WT%T|Vrr\%7%4C#/Bw*[aIy -Ç-3]_o?@Õۢ &PНG=؋nS?}gT~[pzMpc@6%|l;CSwA]:*q!$j|ѳ8)0=zM.dީ $t嗛v.1$  f"_.b^A^Уw~|o ܉2FLlSk.3\KC2W]#Dkg @!MUMzV5v&\+/Ul7g|B;^ y`9-bV{?#oٷC5> |"Eahes) D^3n;nw'r S8[UDE41ŊŬ9MhY!WsW5a5hՌ&x};9^{>^-H#5CYeOT/B"#컹U?=TV^ &wI^TA  ǵJqOv0/^gO\̯$E~xߓ;56N#S5$H, t ƱNoVCiFZkTByL)JAP 7})bξI]1v$1S9lcjlCpʦNI!~΂Q z~[1zP"Y{tD3MݞWր%}3m8G0Ȗkր.G<ܥ;sDU,h7Ԇ_J\8۹1¾UnUD :j|wɐ`{[1 S0A;"ZU6y\W:ZեؒW^z[<,E6=}a֫f/Zȴ85g'C\þy?h A&YFVۀs"89`t˙WV0PQok$P;7<7Ib#zrr0\9:5\Up>zOhkIQ#PZ!,G1(︿!S 3s7&OLeGbjBrgzkrrls( _gd%7 1{WEM\ _׵ܕ8{]l+eϽvW_C% f4ݢIDX2/Blie&8W y⃴mLQUNjyzOƋ @/P=ܔ? v MTji "1TnYPO<-ѕool2wo_J҉M.TO1~_&a c}%7 <N%4դnU>7,eJ"nZJfudc w@ w"zG$OWB۶ARTNj/6F`-AXS!boہ\mV‘1hb#R|NEb?L+z[64E -cdT"}~p鱇Ą-#+pv? vv|Whp Z^] fN[P!aRze9ޞM!Rᓈ["#=O;W1dKRKڊuS2`I fECԙ\~9G<jJX@ťUJÀaG%,,pbt]_ل9Se0hjU_湹I;| BpS€="`f֪ߏgt%1OWmBAD|[1͐[Xm Yv 2t% (ͶbH(ੲZt;_ROEO'sZK~F6=D9.bVo8wWB5_:P!VZse&a/TR>?9k5hk.~W%`8IeVM[b+m4;E(F`gHnuqONhXxK(yynU!֐#](+l,>v=\mk5-:01 g"ɚE8~9~y0p^ x! WEhжlb="wyP:Z̉?^֎+M|Yqmj砃N`FJNbq8~"u4ꕌٓNIe:Q-?\"M;YYݸ^ "zI/;cL#5*)xëKVxp{-ES;/&X#4U}%xΦXuAiB4뱱|ޡ1&<X4 waٰ)2.@k[S/+&Qa\9a/Q7nzzCi4yrq q!:֒3з39Զ|~y؍j]T?,* oQפXK5W3Ӣ&yy~d^X@Yj*E,< {f` S-Ѡwp a ӆ7IUym RM,а\eI@WM׍"z@%zzE{2B'u;`ׯb%7)mpr T|](|E-A9Z_X@/mOMGgA՘VoF҈_s9T,s$c?/R,*kx c hOv=Xn.TRXNd;>NY%/RfϢ]ä;h~|cbk~rF&LRfaLU]LjCBpe;&m\ eCMt\#b#o‡r%%ax옛xgtxy<vb o>cq0_ owAº y*!oqf s|4pǸ'{ '՟?qH}jSx@(rm>~xeޚIL59[X>#8Wevo#&iNN )ȉWHKhNj4Ɓv=󁥃jrsó(( %|I˔g ,K*i,9Xk0[d踒RbUxtp-<6udF[dH-C2J#.)dxu}=[>J@|DۮT& &S J%b&DEmm!Dz›2K?eΥBi @$H6yH0cyZ[dnn>Bl)%ͲCU9Râ "B`FGPo>0?-Fn@`9ä:],|??I|/Rm ?=lh 2}p"Bʡ|Ӈ">^oC˂>@-b)&ȎP/:zҽh/R@o>Ƕ ŚEw%8DW9upEzUuc玲GYw;`1}{W\۲^B$$xn/c9۾P#`jm ٲDX;_oaV>xM[06,曬8[A!TJ܋4gZǢX>/fbՉp2:^"EZK>77'@jO 4CpΈD gz.R#-5ߢ^7uc(넑{dbZ <+^ rZe>@3j+ʅA"PW2sw3w1XcmV~z>iKj>b!P$3O>`K=W}Na첧|D-, DDW!H[`+u]4ou%DYGy.1u}&{8&89JZW'oV[C_sPz=W:CF|Gp"P3D2iJlSGs٦5MhG `*̦Vy&D^lr_Z>?Sfeg|+Ǝg8(%9e!=_"{e9r6>4~/UYKn7ed|r2ρnVQ/`Bwa˿ Th ܾ^cHTbTWʔD 9x4.<{ Av"kYQJ n/=8Z]Ӡ׷R7A^ CJUSӌxfxG=q8 2)J|ꨊp D.Jܝ P_/84E6G^6~-$1,VuuMh^׳*{cF$ɉC|0:ɓ+ZIn\f$UoJENr$'=*"\rb02jyU?W8~k_C#M֯ytu!vdWYHux# K\ ,Wf3CC߱DlJ7YE!r!1-N` [&`IUtwfdSmx1ҙDGS.Jܥ3MvaeVW>ˤAryYnU§C EQF<8뺾#MT,0w>Ie}ՉR}Si-W%UB0s^9֊npt 6%V;TeCu^bV]?ۛ:.IlOP]]TBymqlG=׎^Uun/n֘5CPXb8|?, ϕ.Oiz F?C#R48+#Ub {F?gMHoc nq\k)=n*q )M5'n[.7%s>ʹry0 6fd;ȕYO(qƏ64߿Ki"] ۤShf׌6}䒙! #륙{X3j" RXޖP?ǥ* ǺERPSlEu͇Sx8;ܝKwB߰wڜFCxnڎ~M%c'Ow[>ك|@O_.,'Jyy\%N{'#+MH꯴8\PLhc$㷋'őB]/ jLSM5(hӧغI,X?Ut- rI2GvS#ޯWIr1* Bpy'"z-?y,:DXґ3TlMHG+W/ouaϞ !g61 >ݴ >HNݶ)U==Ƅ,o_D߇QJCo5N]y+<#a_<O<[GS~EbF'3yIiW(p߰ O9ACxlEti?s}K8O)&>]l錫.WR·X;|'&3N&^vXsbM~*IN%Us[j!}': Vu"{{{Su ` ۪F[# ӓA*̐i1C+(GK*t1w(+b]?FVbH=>mF#p},GD x*o l; #s-[,@:OgEYfB|;,sv_!-n jDіVbxBUpPwr5- }VV1kLBFCAo BT4uu?3+Z~99.|725qo۞tXLQ\#}PznpFE"xqp^֟f:`N3W%IN/}*p) Un#(0Ff+Yח;FԴAJwuJz; |W*dV51Iph;'S^="zN( wE,|,@Kɕ[);1d!Ab99Vx$g~CQ[ ]iW Bt&L.GHլ$pX;(>w Z@g_!:p5],S)]4KW 1O{7@XG0s]^Yo9Pn<1\X5v<__>v.QtS( "Y emyMŪ'Ls׃ $"㋯I ȺӌEL'Hx)b}3)G{ӌ.gQOX!2@[AS%HWqoe(:)ZM@ڥg4on#kGS&/f5ZPN$\xqH L|Tȴ. 'rN:Y~ᱟ*^Q8׬,j%iVvDnTrgua-ȗm'DѪyP=K׋FB*KyB_Hez6mWżc"^WPUe46Y(uRyѪ"r"y"[(C!BFZZZBmS-+"Q$!*pw޷ x8<޷EJal5 Wo`XϫV[F%nO8'Ĺo[Yu1wr8 b2?-}ZQ?+3haj4B>"{4؟v|%ע"ЪٯZ PyVԠ.ϟZV"RDU89\$,F_aFÕ-&0%UK,>'$sV3Ne"6~(tUՖF0cfU* #Q?/[!lAƶ&xMFW_2-͏B/eg )N!k՚/G׍|{p$uy?Z}mv.9SX\է'_P&%: XNJ[{‡*"~^Dzw}?? |2y\nY!1X/"@ +bC>-,5I3=A`T}#L9ZC hٱ]~8^ܯ'O<>LicQ^9i}FRDB b Z ?y⑙􋣦 6^a' լ X$ `ӳ'x@#K ^ON - WT `8w% LjFg%GfZefvU~WrDl),GbƂ A5`ûxTJ3 ̽]^(g"9N?G(h8b QtH@Te/P?qVC!\̫^3K^ 5]6U䭘[*0]VٽJl?H`YBCzܼlj3wj I-]&WW\x(Se(nt$1^2}l[)zv09rx:Z+tyVڛ홍^-Yh J,/<Ւ)fزok%!!)D훰qyjʏ5!-[뽇9]:۷.*ĨFG 7.7FXh3_E? 2 յ+X Ћ% [ mnwͫ6@S)I,V#vƓ80J'uqgŊsm˅F o|bbT$_ ph ܱ yh:;T:._ CTWk`Kԟ:^z+2m(v=~;,?fREݖ~\ÉpI_K@+:ZdB騟*bULQ۝)/tY)uk"[ xZ9Md\~lG(5XMV{:cLtß#\6R=PLY <\*UPۃjvgfUiޣY?oqISzi:j"/>!!hxM4\ϕzOhYE[\WcY~{&yLhQ YMlm3;l!2<`IZ1gVEܯpTj -ic:eg glժ5nBzkqw`t۟>"`TNE.j -bV~5i?J沃 Y&!uU>q\w>y?^[C{,cD]y[>u#M֬}Muf[ ; 3? mOhO>X.E f^49NJY0'.|*p گ$NdS $M&`Q% Um}6RjDt~$`쿓n)٫e~}M: BTQ~>.yho?kh]5}JaFwznk3C !GoNoM'Pjs_?J} OMŃn؜'\p玐ݢ@/Rm3Yxqj_;MmtGq"UڥJB́TFC&PfvOF!Rz-6&BeBCv8ɺ<#ʋ5ݰBBUiq79hubY*ΖJ x4KgLsc[:-ѧ֔iخI& ׍ƚ֣QYj*TiM„ Näs$Y%euz4Z1y(/5=swR5>(-[cWbHO\A3vr`!aŗӪz4U6R23%3@ߌ\qJʲRusELկBTqzt`3poG?*!?g[$XD G.MX̏>`B&bCU-~^bm!Do8͍aP_ OpF*-qL5&tں,&%k.gp{͍AQ\6oi3Z' TV^{oi\Z:ePt7*׀6H />R}mSe{%/u0Kg&^ {[sԚpȚi@rtS(TJӿ/R8; ؍J//Ήr`FIЙ:DTl"D}C5}@ 6 ٘*N\/<±;,nPMVo;q?an@7 j^Z Vͪx0rMPQQU(c!Xt}g%PER=PzSbhƇGFSf"ƺc(MC3DjDVC!cUN&ҽ*_q5ڟC0(kRkq݆ wUt/R> J$roz? `uXg.ӱJ`=) HъS8c-*&?ӯCCR <׳Im9$YĞ䡡]KaWa~" : \ME<ާ(ip?Kb#ũU-.SӦ_Z̆# bl 9Jy"U)',"-rC&02EezK>+SX4y3O]0 ỳVѪXR[H^a g peQPB"2')BJyV0}(bfX9qW^dW׽W׉UlKӈ^>Mp'?.RJs !L~rn J1nsG"̚aUYXqh?gNB Dtzr֛B1P&q?>$nb$,o)fe<ćJf,)1Ӆ ƺa?@;ngY:{Dz Hzxp&s(NN׳T-4%^BSzJ0_ن7gUfg3hQ0)*)kQ/RL[ ;0w~Fg_/TB)sB||?+ mH|Ŵ(vU踠D%kuV5-zjR6b(/NˆXyg_eո8iW;iSEy`A7Ws>A8>iȐYf_Z*ZzxIB6V(D.&~m,I|)r{n4Lks_w" MK! eU XZ¿mĿBL5(a_GyK^dL 9}Qt!g_p" Wg]4_fJ 1U׽:y:2!Lo9XH~ɞ)O($Ȝ^%И./ci}C#J!T`W\-OZ0(l6_sJtmAJKs1C/ u*N%m Bor5B(+ G2h3ƒ- '5J}eWriBO8\eزyd* :D cwͦYMeZwnht$LԇR^7=95ĿŅӱNo%Fi/\7 vsak*L0cįy~N2k4mt?v~dQ0'V''˖i~nPoX90+!JOfs" < Dp?꘣t?$u(wn{$䭜\[ hflÀI8.ȲlenQfXUNVa}}3ǖ\3M~:IaPʐ+d\3ͨ䳝)0-z;y찢g3_~?ٱNΙK`6I4Qל:M"EZ$zQ㬙 j2/;9+!2Yvt3:=(M[wָB8*U)!Y^=/oQH;=n{qg+=Ϻ[j,A% i#{r7F$q#+*GxCdnuHБ+ %5fR"=dˉ K}_C2B@ݳx:ƤͶM%ʆ--Bn \r L8$DTFݞ]E3pBȸ{qNXȧMSmՓV#%Jr*i ??0+w7)J90yS0r :yk2ndĹxH096bә/ޜ)178KNW[#ζ;h`֩Ndta~Y\a{jaxл3;] }׸<vKt5H_䀃tW0bPV;?^ a#w>PQa.,rёka~4'WPՏ3é~Bmu:a3eۈ(C<Mh{4GFΚS/)B܄Cys 2+8ASFDgaD2|Uce\%7"YMV*5Ŕ̝TL"`-Hr,fk隴V7&QUCOt`K; 3e_35[rzMY(T`.(:]R8Q~5c|D:d 3<7hΊEwߣUP!.KNeg%L_U3]AUbheJ🅓vZ.  70`Eڂכq %*Vď}xoL=iiH{PbRdVkpkl[-ed=I߲Q YcPOJXXODkT<o?4i`dԛ<,a?o+-x";<<"ceWǎklwqkPSJVK o{]"qb-)bNŔ,9$Bś!YU>R%3n&m^Wሜoj^#,oLN=HtuA~Hޔ B*PGE]>qu#M-LM[(3# Ħa}0š%?1g~ö`y0<=HEyarᶅ.Yt}vzI&~Z b:U6+j~#$Qq׉e 71%QBʻ/<+8A͙24Au㙣/Sfky"2:ȠcW#8q*TE~:8Oۜ э$"zB=n7 &eB.2O ʴqu_wbZy&ZMpZ> 3#M D#:.vX{@%J_ Q~?|||54F~W~(g0XdΘ2+1)eTԛyt#FkVbżiOše'|j\yl,ϪqGRo )?8;BO>gD8ɿMwwd!SIV%G0Y&?N^xۣ}MP5{cL,fî]OLnpzݟbIBQ9e{cS6Wbe@-ϗ脅杬ҧ} 2Q6Qii?ax~׊X,>,2*:2/ ʿli7 ٻ1u>) _2+/~]O\W@ F#ӢiEJfHmz4٥h{"5K7}3r&Ji)B`C 3@o'jm{j!2rܤJϲj1[aZVPM$'8W!,i<Ʌc>`?+%(9 [/` !:Ŏa(,DoûYb=6|\ kBJ/&=T:*zKb1r!msLR~,Ht Pŋ%b9H.BvaKj$ ԻG.OѽO%m"/>3|2n¤ךj(Ҡp%ׯ`Ģ7O{և̑M CPp ?*a<; X _a -]3[?YNvmWlP~5*ai=+/f>7n8̒\:]e; FXExٚ&d |&]P 2ʠm8D:Q+l<# KAmLb#}+7LU]h!t)<-x)gPe>MO:']um(Cucg$ֳCSpٮܒUQQ6B3l!؟a00h^uwL(% 9exӅ>BձNvG!͆!1?L/[g3_*>HPnp )uO{~ o> ]T9D6VBmh 4'<8Ʉ?q$=]rFlGHTzWBe\:uTrתס›vI~uhіFV-KKgxU]lR&ZEO6C?F\U[#XLGޒpW֞A#E+[k<g%[rU.fY󪺮Bx^)2>%! ԊJ!qkm@4-ZM-D/8&1oZWC+6㊶Hnr28ǎk2M\4~+>[fxOnajTk,/58`*S>,r!xn&'@ l\r;a;\=1-ww6=^edY#2*_v K,cy> M;c)^  gʫ1>.2nGdի̟2|9K55>fHvFgXwF^Org,TTT|쭵M҆> x쭿} U*(׮Tt #8;;B͵„kK!ae]\pFgR-yNHۚm/1@NP Ql)$@=!AҦݙWк&L_ (?JRi$6]*;.~rjG~\>D6*E HNԄm563÷Dڡe`'|5%9 ٬@eqQאҮw/=B6V>q 1ʅ];fD˜ 3ӻUF3g#2X\eN0X"=E̹Rj%1iB.]o-)U_8~ٖin*Q(/pxxvHph,Agl`X/+~5, %4Hk7  JI+K<XdH*nzRm:մեI^IqKoB($ h[qbC D'G/g1fUk G(}ԗC]}@KQ2lߡYJǏ 2'COV# 8"K};tú N pHٰvF }q"HX#:#>u*i(1P`ag %KD̛}h.)s$gN%v\Aqq?Uٽz`՘PUo~_zn|}NIhZ 2nNa*  5 Q JzADY/|>P3SZ)fn\IxC#`L| Q#b|Cv]!9gycpjhnlm<6i4_h2iY:sީ 'Ipڌ=ғ-ڪoq eHy9s|®.,+*Ͷ.fU^W'bWS$XtYtsUk0de\lxot;* ۳z皋Noa9ھ>ـOSYoItވ' 5ĵ4V.Jty23@e9RwU?Yņ HaD3 NӉwqqlD*2}AQ ȊkE Ҋ>/ɟ~NZtR5}"hֆҤ6-7&HTY &Qe1,4Cew=*o>Ys0>5=IV۶)[L[؟ӄr \hPZ͞2wݱ7C0Z(k΍[c. 'a7EE'ɔ_=e智Ȅ>ڧM2YQ͸c uJH;+Ce rx1Fe89jSӺPb[l%ɨ4>C|y_:4ao5cbفBۣwt @ #Mqë/bʀ@$;HKmk뿁\GV YM7RTf*mkcQBmsE7z<#tDx:6T9+hUÌD=^7 FD@}ui:.KP%Xf nXܽuT_JtttwKШtwIC ! 1tC7<߭<>k]s]s6dxi8Q{&YAJ [0ԾAJdnhU+u̼c>{DZTqinV 2HX`w^_;H"(^(L`Zl9v!YAJ0 鄈-~S}m6%ϵ*ϻk2²-ܕd$0-z !^F Ots4l :q}T/D2\j,Tv {)WTuB4P%W< C0 NY>4uBPB@P6ӡ, ~#' {8A> Մ$e /pR[S18(J.7!؂,vb~Rʸ+GC%Mf tTQ-&$:AH!i+rCrm}9tƑq\q@yÂ5 )|NoCVjz( NTиnpW,\Zn]H{!t(7QG_H;Ŏo<ΓAl[-o%Fΰ:auMXV%i"R;0٩&)k2.>뿵a=kϺk!)ʈ#5* RULPF!Ƭyp)Z9ËSD8~ Fh?1#%qov0Z=eO< [cd@٧=%?6T=-8{ɟl Ƣ~q?@1&YvED+  畼 lzm&p$ Q߫|˴ݿn7l }Ә(ƼtCa>qvgڗ;@Beu?Fx>^;aĥz<;~g=dkQ=ݛ"ۨ?lxg"􅒟,VC!| W*}eCi雂FOKLRoޜ6zL_C_PP{!l|Zr~(hBפKuAΌZ1!x!Tmt^h}`$[X~?vۦGV Ta}( mF</2h"Xn?+ʿV%%G U~1pƩ5uBqU**K —_CFOkףH˳v@*[S`kjjOt6^~j%%奾u0H|}?ݰ8nK9~2F*;ڳuyS %Xdq;x%Z=58\?~_E{o9jN9=h/FUn(lPV{k0/YWHj2jϷa_ȗ6i^-=X i,V:C|fn|ٞi}A a/'[zO `C13WW:m3b%'6w&78p4㢇&)MJ#)(݃:W Zwvn¸zjEM;+П,niU z5NyǮ$ka 9/I!sWͽ5B׾J2ȷ_.>eqfOF ?^-ґn 3Yid183R9KK4"r?[e.. =O eё⳾]#6)1׮&Gz*9F)v.Ǫ2ǀP mr蛑 9;lB9~D&S՛eGli>dǁxQVa:;ꙊJ©m*w`j2p(s}{1#{@}pc;n5&^ R1 Wfp716,=qdVX c-9@yk0<șyPŕ?*k]㓨4(kYvJS5zNj4f*@36}.y5 VT~_$AQPZ|Li ΁vx7o_F(m >iY*sq8˽]pu_mf.;v+3Ͻ!xJh [B}ԈW,]Y$IY noコBʢB=NT4R[;-uWq ѨPtY6_4Z|VXm!x;׀AQp_ޟXVrDt|ZJu-zz$Oy#{Z>׮8ڝ-O7<#h8BlNVޢ6t]zY2_98$V?Jس!^+q,.}Ҧ;ڪ աxe)q"F]&qbXYŤu>2 x椏b_+Z( t?Ű>QhbIO$r .5Uyht [Ο"uԨ`+S.C1 SW=3α#WC[{Rh)15oЗТT{^sQqU_A2NpT =uod$.T.u&Ɔ"KHBA"f\%,7ʄV2pבMD\ ;INImiYWA3aZ!)Z? *'X}zE~5ͦ"c3c4L3ͩa1 'X%>SʘdvLp:sASVf@*Wur+;B=:QLv܋vJBe|MWm\ %՝$|Y 'ϞbBa+NR)%jz7D gIEީ~)ojIZ[ҮR|0##4W1$.5$Bz,v"n:A :ۅEY#$;>7St=毉cr AvDD Gti-8,>"D [ȴ<4?Θf>^C.SeO~E "r<90-9 0 3MjF{ڙ6 uLkEoZ"аY-zzR5ȓns|{ro >I`Ƅ 7(}>r<1ްmPk0HRk+CWb1{zwx'M 84*O7y |zETG+dwxkG}^|ÎcEX.1~3OEUU>] Woe[o/JV1k`36뵗A?tx>b|@!HUn#O3 &17R>u#c׺ͳfa7OHd_~=Hi|;~b }z5Q LʢPdDP'YSO46UҖ[@ p~-𴠙|8Us"Oh0N RҹbC?I\ew3DB;RF`dcΗ&O"%PZ\?GKVWrRTXyތTS]<-<@~A{O%EiNFA#VoҦ]p]Mɳ?n{8;g)mA4Y~:1>>df%>s *I u(r7@p.^4.gNZ.OIm&kgDցCo v݉|t48=z 9G=|9"2E$ G'55+(aۙ$p/@gH E Pxu%Ͳ9K|s}9KnOy,lt,~\zVZ8ά ~āLQ&i8TkE[dPO\kYx:dy Rs}A@ ??M3ȋ췞)hyN8AmR}` E_/!Ya F/Be$o0Y1;E}5پY|k* gou1þ0;O,6ku.gsRy43brz/d<b!gwr"b@YpD '3 iZ &Ք@ΰ'U͗,3gtsiˋ'1J<'q @s&]9nKI&߀@5nOʳ*4 0+:[e3,]@(O6H8zp\f~+ b9sq@pO}V*)JdqÐJDOWiMuFfBn#ի'^AJS(tV4r/`W!A+BoxmT˖oj^¹#|܈cMmp9]ى%&7F+| ["xuֶkX+TNime 5 /fA4t A!7FM#?ODX&ʮT9pjZ 4O,.6]t6{B ' TKF|Yt{-vTsqjE@&{b,(48%t 2]p:')]ۜ)'}Z*V|=[2Dte&Axo=2x͡i \1g'.e7'u^)tM&"bCQCIX77 &kVU%^*? SS:.w*T٥m __`{x˚~-W:`/FGC}^WY1||zv]O,OB*6rؾT5%EX*oz?~ץ T9$|6RdxˮjV[D3n7MunoYύZiS5i;;Y*Xi}1R-t՘S04AUcKp ;5{Cp'6-v鸨p&͍ *p*Ȇb*Q|Tskjoj_{y\\,ɘG|Ro|Aȁ}~L<$bBT _;~qq޹o5"D>p˨An%߽7)KA{#gAFe]zEt).ogD"Ptx*Mҍvc%?.:fulpK j$ ǟ4QD#c >OfD9h<S1JjԲҨ2lNeSEיTX>f^Gte Y'94D˂2_ՁÏm?,lCο:lNȒJ3+@r67=Vpsfv-JDW: #`R劸cNӝp?!x$v:Oΰ_2`}m-LJLs*̜ORXK: F l qQkQnW|8{)93}QqIttjqB kFlFkmΎߦBa%J J N.z=}.U]'s"zW|Ot==A4-IyFUͩu`*fPNIણl:PeU)ncmHDVt䚘}8őJy*Eo/*>׃P PoFxst"^ U 4kjtnHkcx%')e4͋vz2׿LdKR:ޏ]p݈+ PbfYЦnT:ZI㪹L_7SDh>;cnVWrܛQG#!Sޕ|*L8 /߅D-*3TOị u_7 TW H1Dڀed&iU c}h=dUKuI<#tf&ω]_<>%^u}?JƘiy#j 3ID2W% 3c¯C-r.o;jJ,V UMyG6ٯ TTkY&=j6c:}Vl 툤xsHP|$y"rY;-x(}M'bC7$ńCP23N;]exiWw7j%3PNWMB H^Clw8[;`?N'KJS3)@]vPߘVJ\cO}1޽ԵDUl8UC3[Wv)Ym,~ : t EוKd*FW Ь~W$HBhDtl$ba@t-L_[T9xvsv &lñ&Cb6&?[ ߍrCx}Vid gTNxWg?t︧Ud.wi~f݌ c{S I]IR6CBʇ( f48w ` Y6E7̦D{$,^UVGK5-Fߖ\z%X#f~|`+§/o_X ~Qړ;DG:qܶ]8o2l"}o.enZ gxhlA$҃Aڮkd$N{ܵuWu'*/yt>/Z|-W~k ~f:qk~ff`l+/uIߎ:BSzK3 e~,W_-U{d ҩ'-"O0[.7]Sd/3^2׵'U#;rD: `BlX˦o?įW=7{8[\  CT#A:w+r y:xszP$|g~ lvLZ93 ґ+=r{=B!"4< >7?*HGHe}~1 kiYpso+?9?put* |)sjtҤUy{Xܞ`c S4Ј 'mOY_,3:}zS9%ה{~'#ܖ6+qtG*:iM54A0K׃pnW5XcRsSm NȈ-t.Gc/KgO^Lj0|>΀=lNm5"*}٠@-?Q+n Ycu *A#V86yڪVd<#8[D- 1[V, e"Q"coh1c*BtMI@'2fV~ &~l򣃈r; Gpg4FԌ`ǽ"8/sϯZӣessLQ!h%KD"ճVG_f:`G6 jJr'߂۫u!NZ?-m_@삮٢T|Wl tÆ[!|n@"a7dwZH⊳5O9aUggkc_>)DRH >5r0+Twt-ՏgևN-kf +#$HPq]ZץG=jfܒ(m| cmw}gƙ:%ۚBdžˣ^Pّ.C^%*"3KEy?\1)ȗYl\~qq z|aF._qЪS$7M5=%R'.}|:K _\ws;F\ b? hֽ1==|'4[J՞UтB!Mknʣ!}]:"wAN[|!.# QSh ҏ},US]ᖪ Ы*^?=5<v}Տ ,6]Õ?t _ %n@H9v~Z~67s,/< 3/X>snvRny趟~/Zn&bewF%tEDXbBW1 S˚)>sfܕ@8GN/aDRާGZ#3%z\o5OE\Ds>5PtQEZlO d[#Q51z#]ċzha#,;?i+rzG*]QXTw)|Y?n[5k?3A9=İǑ53&.w L:Zn]`D?=Hž5׍t{Ϩhikņeq2V 'p*I1Os(*hhCDpNv hf~;+G̫I{9@ғR\{Ʀ(kJ0y/|iڹby:' V6AÜ:7;" \hHY]fp6n+JkߠMcqGoL99l|4qVdLXxUt'x)(1DOUTd|N͊>;A *μ[%\3WKAT. iAϕRK|~Gi|6LFܿ"r"]^Yhʡ$bSDhFDgMcg!?Ԏ}NrLP&ا6wHH&HXZ*Un>bO]A2{..C0֨`ykjPtzcɳ\ۘR6~tcHM} \\R_#a:\ȓu0RrWIBdu,ʗ~nHRYX zD"~PWe? UspeQk(A,|iZ9:ےjt psSЦ&w*>{7DY{aLv"Зϼ2191lRo&[i'Y)yײ1DI7X8['FV{oGJNWzM& T>ٽ^c6[`3Vat&Y"HdPf);ۻɄ鍩Tw6S3; $*ɟ!YZW d}=RSr<1p3f.k]1YqeH)+[?b)W_oq|_7hإMQ 4I\'~ ׳?<쩔oU yߟTP7Riz.r Y0I7W+X55O' ȗohQ&˜C\n}rqשF.|& /o񿞃yGd4*&=ÁϘC$O2t7LWmb#b` piO)x^b27e2rb"G?uW/fxz[@0ny\$nR?a+Ŝ~6 ֏{;w?Ԃ`w-=.>%NKΎ\,[p> G*V?^i^ /6AO2jF~vƠWm`8Q !p;Kpg=paqʕV.+b edb8hTO*!c[MWE 7~5ўaGO żc"6>6DgFd 5+·[ILȹA^WmZ =#aŌXZ rNXFh45֤\A=`W )+|Ѡh-y{lHFy:p;#%j /D/ڃ  1t6|& YCW']DLߊ0^;cqebݰ/b[#ʍR9AP,i>@>,])`;I "`Xiiy2v<*'D+Z}y<_z!@j񓧯/7eQf?%C帏WYK []ct*o)T]^r[GLn)1 !*}.Ѭ:^nf!ӫ=i1.ˉjٔ? dmH)3hckXq5B3UڇXbӃ&Ȅ6 SAT1zIH )CK sD?I P.ߘ@-{wVI\u3ǀ/v#?X'smU)u9-``Ug)Yz൦Tj }j|[&lQ p%yw{w?''J1Sz@kBԗ4^qx ؤfod[ܨ3$?*k!5\9D8%qDRd{ڰ s @D.cf$2wժpSRfyX-{o-fmc8ށo⟐J ʭt _{P㠐5rRu\[^Й8'݈)T)2z:GXS1rXȬexcJ?Vgnq0p>cZ#9syX%;Sڠ@YMkh΂Œ@!f,~5)->>Sص|uBq-px-7!p%/7£G1B+qH[y!*L!Q8^fإv{{8MV,N!mmAh͌((Pd]RdlfnM{F( 2P{K9|Cy_wc7!$fsRJ49RM1۲}ۋ[Ҝ5b# wÖI"*;tk6ki,;OҠip]'(Zĉrk&k *CpҋWeh h]+ӳ^вrd@-FEKA6o+KiJW/yJN`ʏjUܴС* ͖yAkm]"oĞjF:>a@:GJsyaύ]\0C[ A;~l@N”m4Y1#㨓Fz[zt8l! 3W0Ijt՝OJLJêRx)cbv΋ٕʟ JIo>"C"n Dئ6M(FQc l:r'e7ߩCblu F"XW{ mZ<"7&n ʽH!y52=Ž[V+>h[D}a8?r8q'‹)YQfuZt&Qmt2rSoϧI>u6N߀ sQQ :8nгgnUj}Llv8yry&!v?S oGP6eZ 8NيXaG|ImL8YfVC))n\M4:fxΡsWbE#LEnJOI64p:d Lnc9Hu£d>#WB&{h Ł߽Z GUE@#Q$CսOMg;KjMnxM %>,kN A(ytUsw%Dx؟DamfƤGȗͽ|X+YE~bJ^Ae#EYMﱏDtbHl87UN'1U kz UtN-Ɗ5#--8(xJm xc[K;w2'OxO?]i]5 H}[{" {\( f또rs@6>~iC7ʸ,Sa- gA߸7u[b)|L~%Ιv,rw.İt UNmi줤d6 P~ׁitBsÓ-q--i @IE6ڢF>C(Q{oc#tHHr>.hU=]/g6i5e咱8KP'.f$~!F"W˞.Q}n}m/W@bAZM%c0 2{HҥtD&#mOG6]f"XB^|dN -ȍRC$Ҍ"tFwR Z¢F]^P/W0K)u)`(e}ZebۛFw:V̕L&lu^])mjp'>H֥80 9^U'zsxN#hW1NV7uy& *UX%P?彩ec9513~gW'o^*I=xDΙO;ɬZ9oWٙj{Xx4f5.bU\6~M5iiߴT9 wМ901Io:u23kkn2uhК.st/R';I={!ŴNs+E4*''JmM(}>66l=plGxCarTP}5}Rifzț +L{e0c{}||G.?+UKmmU!lyڬR}0JV%V|& zj d*K02 l"iAt']CӴe@ ?QNlA %Ydd}ZyX/:8'^4';i7y~ǶTrlʡJ jcƻoմx\%02~x7_Rl\)7K16Vek󷤟K {vt39_ \Ż bH;tպp Pz\$suEs?\pGWu?>kkyTt嫧Ϯ?>7 9=-oϓo5]Xh~cjB\-K3 - {qsB;I6Pt㏏ 6 +[kU2-D~ NAr,S f?,wޫ(!,$ `:[ ~U*~j~98AwHKWfoݺ'Mk1:I4={%%ܾ X=׫][N%R[PMqQ%(\Z]c4X!QMMIdbou;jr4+ !>AV.Ym33#unqvw[=3]z x2WijkJ3T26㣮HrO.5YTwyN+iB.qާjF>c)Gt'vZ@i3^[r'J[hɐs+q?vV̨#2{%ꛀV!Χ;@w~8csr 7~VJF1S[i@3fd3Z sIkG5ޅ@ . )\3VFBFj1wY"hJQè_zρ,)P6^˛+fgfbˮB4qdʆ L4NoIfNz/_ZD`|(ZNIJ,Q1/}٭.pU} )QYV ao~bX6JZ6ybahh ֪kgV9B)QX?o5|lkBC2F*qwA4{Q-E<#+լ8a"=5Θ!}Sdr}Dd4ތiFU欣h#GjzO6=_HI-Xpc< N#H)d׿S:yΙ[O!65T= t(;yNξ):;:G;泋SWYL_ V>"N Ei1N] -7O+_p4*wbv&4L,fk/z"ʷَkjPS<룛 y핔B7 g9wq(3[o͍9a˒\}dxR(Nd F7a ˄ F& B[TtQ#? J =Ej!<~ >X2 j&ٰ:vsFfL)% y=Lj3dk3ٔ6Ddσjű1Cع܎F;; )#R .͎n^BQ%}8kᩓ>,Q8e?zV%s!vByE!XF͔FH=<́EfmaT '9Sek8U0.u{%hDEl$.dBeX3\N >b'} b? ~.Yp?GkoFE|SI`E"?V,'_A-O}WwK+<is<ՄtRp͒(vw2$4?XPɞ{D֚p {b~i#)8z5BdQ뒤ۑN[w Jv=癧a蜨d ^Q>ڗL^{í}ʂCLSKxӅܜ\iyߜ(> HAA'TBVӚdSLT@@1lϧu?~Gw;B}^Ĩft !w/.k jf]v z' /Qy8"EzL3lQvF?`+EN{TF ŢT[93mEيO^f$r PC`DTa2fdnwVsd,Of"d^l:]yKm+^a,273}~z U;$ LK]C;zbR`|i7 Zs-)R#D.SBb.UH\GҡL@ :̝ǑO};J<)yXmlLUa[H+ QM6 OV; zfA: T(u#p ʹ,,ML8Smu^QӋ(l&P,?Յ :abخu(ln/bd&v]q/T[| gi"P(S͞geaL;BZ$lZę#Pr `N+ UE슑AaI^S~Dz4ڇmY⦤"R EOS Q0.Xܭ"Uq /o gV F Hi$=LJ'*yVs'9F1xY%i{-DO&I]d-9gLSy%Yj?zoMu5@咂vQ:<.a̴o4{Fp,G^# ~6g#h j'Vȡ/+* ~b+ 1\6lvբLt/GgϡNg=6 {{\Dw*1J:*g|twRzK@]tWN2p|dqŝ/4!\PʔH/' bd\&doM}%q`d'+=؃R(jyiGCmV#Zq:sq dφw =H9d6=dj9TTV3kR2;3Yt r Bw跕t1eM^ )*RWˑOa)7$MP Ͽshhij[NiWLjQmUqK%T=[ϴR5ρX=-Bs%,9Qz%gNp,Ekcr4Ӭ -x9@QJ~Icy%ƲנU^'` mVk3OEu^X\S%GQ]_lxsie /LZA'\ g^ԃs[R=HR+stLOMlkӌT| IK.@e?85넅gp։8i5$!RI?- CeeAY]@ aałlG0I\-L'ԥ * Zuxfk+yo v]!Fk9}Q!x`fDڎ]d1{V&kt6c_;jVn>LusPp;kǪYM-gR`6ٌD&$p4D#U1|崟HP ma}YBP;Y<}g Y*'~?|W߯5Ԑ[R b@ڊ-RnyNXQ?2_//jv`:N3\-^E103}̞;5{2ښF෬ZWUnn}z|Q:!l_հ%=<>Ȩ]X`ڟ }<0 DÚ% 3Ffn5[+)8۴Ϲumo(zG|ک+شДUq9*泷h+ XzU@4V_6)-J MjT{X'c=MmOp䜷 ZSovj`D;\|qߕV@Am0w-R{>qg&^ or@-|u2[ R-4R@ʫȚ,'B+9g׌멈|Nǐn?na9?Mt2GҀbwJUa;V̓ENQ<, k7̆H£ސa#l63-4n}g6bG *؎4&g>[:x&#1߬XɈ"`<_E!׊c4I|I@Gʃ"hd0LX9^3r`1T@xNeя+32՚;56Wc;.,Rb>8`nAg?7ZmJ d}\^ VL.tئ3>RDJVX!2\|b$lSMF\V25Zz?ݵ oc{irZfhljfZ4 Twsd]8,6PYHņI>8axG+ Ixj࣮$0 թE73Ӛk9+di(s1(k$qV#  c%rppp|dΟ&F7˙#l ǰ35rVXaUv] 0a5[ˑ)W3:Ծ!u e&+/\9c#^id9U(alu0T[R HSFΡՋ!:mZa4楩 r\Om矛X87,L8DvZ픷]ffvQ6-74.|5 Z-+rW|4h<~CՒtD؛{tG=;e/hhJAU|?*oEJ|#ȶU=,@sAdOL~KS*>u>DDs/ .ZO]8 XK%NDp HB[E pA$M,'(/{wkGWٯ0W?R5015J1^3 6$qTZ.VR8 (&F#-N[FÒ̔ YmTJ"I[L\㐊IP~ P.S u@Oד*%g DH\E?&q2Xfn zk`dftB%ͭE3}^) 'Qz:HC0R%~uRs,ņM[ppuؼDNס7YQyu|"e'Ʋ]99F6˜3:bM&ؓ1jS\_,uFt96G;5r@7ìYZg#Zh@Ft7 ^E:+8)X!sCv=r=ҕ oy,aQ])a2V/V$lSg,NV`Pʖq6M.J&.yqv4̇.gG3=06xb߬Džul[xsٕ^LU&9SoWGį&ѣG֙eܻL;Y?  Msa;(Rq@C爊~T?q^bju+}r 4 UkFqWvb׮F8q2\|Fjʨ0XK(D[q1, &I" ^F'+,# ae,E=VI=+: G42ƟaB[_*TV߮ogm$Z0U]DgK1}ԴM'2^FF-zpUqp2x|.a3̙,>B jP7&ޖxyov"Ùo1GgXĊ9C$ڷl kn9T +.K52QY%p'yK\uqtZK7B/l["ZD9I\./xL0#V WyvM Q{>X.K~r8÷7[ ؼ$u6̈́q&+&*@ZjQTZ<=AV4vUZL _Y\,'peW`l\ezQ 5O&ݰ@pAZcooYJ|],vP .*5)Q+PZ/3VwֶI;BgI@c}Np~V\sF ;D_vِOrCyL}"o<9mql:[(L6j; UV.$m慔"&,KثK1"T{'*BZ"._|-aa>91VlSfxҥ(ziW#>+:&>{dtPj]{w1glQSn*}rxKܑ.?2_'zwu\ӝɞ7D>>h*tF*R8suܾ*7sw?ME~{kGGKP5!o>"!gsu\֒.DKNzoX| SHl}ePl7.RK+H/<[3Wu!OMݘh9?#&dq=rٙ-!đ#&l>W<{Vc5ᩢcyugw" Fyϴv eMp%4CӒK @X*g|4BO.kn^U|1h߄/C}0j97&a %s^>1t; 𴦉PAxҫ|7s/zglcಾ`KkuީINwA1F/s+ZEE~8Wxo-K~VGc Hyc%v2ά2!fi ʵooDMR*c+4׳\~.s˟Q*=Z}\ZGV-OWcdjlu*bRHKɋ8fg/**w|Fhܑd& iTePD(ft{u!P",i#PzMt՟VY6cQLv ZBsCIG`cJuOؽgC Mq+B(yA6nt׳(p h)6O?9}CRߐ$7 1|뿙=Ë#UH!T&=D>Ii a}Ӳ5]eY֙"rūW_.~΀aN(?yn, fi8< 4><%>ӛ7&tӫ?>zD-vI} ]JPJBF-L,lHp`3#3>SR@ޙB=-w*Ocנ908XD>O1+TߏCύuऺ pȠwTbm]D =t9Z!=9[;5I&4II3Ec35u6EdgZOh{Y W*s;Cd"Z/vEOtùR??NRz۶9 LwٶL7nͱWS dvmLS(}{fAXY(I=Ql{7{\z+ǒ6S B, U9]Y:K,ĥ}%.+[fN@l z}[-?z?8N68%`PrM\WRA\!6>M@*.>Wom-z:&該,OZsxCpI 5R {bN?uFhvᑰ_}:08xlo'9ƾUp,(:U?ƹRT>XW6ȼlox=Ky)(hAn|ʄYGo_={l2CYS|U%)6Mu@zy=ߗ^(EObqApk{G ,о2BzoI톳uvo석Z#6I}L5FZ:O9uwu[I*9*̧MosM:nM[CWiωZK{`s&>>:SKh'Ilէl*3`oTEX*Bb!"S+x#0alk6ٖ{lXǕfxv=`QG;$*ytd‚ZNz\7Q&a=&}!nѴzȆe"|pNQ Cup+#_0ԓSfaWnYn$x Ldϓ`3FEQ/ezh MmR~/{ sKa$꫹ T6:(M(<mRH!w! ׭JI>zfm0ܘ4rVT;$Wcl5 WM,LcmO-ށi2ޝ?и+*t4lB~5J5Sj*&%1u7ϺV892{]T|L|η7ۿM0վV/Z!Q΍[_XB,B85 f$ύ6= SgfM1`ЇTKj,v{x5e`7*hxn$d+lSnBɌ|}.b^yEtH}兌1!KODYDT]ys0DŽR\[xǸaGOʿ& DNP2arȘ #|H.6kngPDy;<lt:e!F෭wOs6'u L599L^ĀęoVXsyk `g2ֱء 35(pB]iԭvFã_buvV}/QB$\5_d 6]B$O#\1 b4{@qM> LO>ȵ2r~NLx'@\ĢĹzFpegl9\h(v~^ΎJ1RۍtK_xӵ*A/ՂsI\n|kѤYfxg9^TtKO_ZR%o$-gԬ}=`6oF_5\}-19K26txqU!Ux 3Eg1RBq xBc55W# Ôtgjv }̈́@KY1hVG)'QWep${g_DIm ܪ GgJ>?AF` #/™‘s.>ڐ7-Snl¦_%T"KQ>狛uZr==a[MPfm+Te6)J7|WlVxj5U3v .7 _{ d9ELwxPb0N"ڗk93\_tzp9]eH g[EX.;2)"ܰIb qqaI׃".#FN')b$&y;DW\El˴*ҙn/G)= >%[/`;U#6[Lsʟk(ZQJ{<#R}a%]/ÎEse(m0xQxL 4wI)mu"a -$(3%Y~qŕ_ufG%U,\@,o3v9N[Na,jۧ`7g_ =GϚ+/w%rQe+D-5*'L~x/`,~ELãe"@._T\P2{/S"-RUatm7H2 <{;l.XO]jF{G0= -DnbKjRMpDJjۀҕ{I6p%Fy}z͔^D~SoKk 9y{ 9 y k:$"^t[ ݻ7Y+,rP_˛c.PM-<ׂflWUx.K u @;N^I e]9uy.#C$xҌ8+7RDAfs$qg LF77{&b(t;L+*({uiGaIZNlUp}JsІh۝.:m0cIeFJ1 _K#IJDuJ\ʄ.HԶh fqΧ88 K…+AK%OIQNYp/ܵ.zֱ;f̞oRepJ\y8;n^=Vҹ* K[ԾhPm_B "&Dde^nkCj*\e՟ GnvL.`µlW!^l ?l}'y,L4(ۻ?{<ĮYt![cN߱# }P5l6=lO+mrPFWi+ 1݅]Hq=ǕU2T04hɯB6!ڋm5-I_XOSUPJ4K2Oz<(Y(^GZ͵ lMh, Jͺ՗zT9h݈p_]2&vM" _78Vyl5?D~wXAR.??wPԓ(?*qp^sCtGb;Ң#GGSE> eZe<ɼȏ ǚ&]QV9Y<ñ$Iɏ?xPYk{ư>C*ZP5Gâܩ]9fwĈG~.I؇FUG+fF}7SSχ3=<Ы Btv~u60rDBTa.H48m@dsRQ j()z>Pu$Ndǥc+%i e_ }w%o>`,"4f51a7(3idˈ&7HTJwuB2Z81}!/{}( b߽h2X6ax `+[\`DjsEYR 2*oL B68Ӊ +ѿyk=a䳊!VR|"JhTwX1Jid>X]OpHʳk[Tsލ|Mg켱3|Y7 94>Dj|ٳ*Dh7xkK~{r;mfc+X}Zk3ݩ:'O|]ru#3LRO1.E$֞a$\A!bκV%JhdG;p/?pbYlfc*( ?_u{%ӎK#vv0u.aqUawBMdR{ ;JlߝO靄{Q KyŞ74;%]WqiE Ԭ6|X& cL6@b1sU? <}'N8{?VG6TeSQۭ߭ŐFI4]9@ѿ|Sf7]7{wq%~4LE;wvGA\ORk+mS o8VpO%%=؝;y)|/N1 HÒQY٢\mRʆi々SŶzyGKLSV;UI&5++Ni$r6$KgЫv;~݆9-(xqz{}0ؕp^~Y\ڡrR;ETYI|n,Z[ҭ`%̈ D+: IVᮟ=mTGn^W+чY9Ћ( IqW Wʐۖ >~E62U}.m>]8:_hܼ}pYZq2 b`>`B74Tg[s6؋!H),˭C|XgHn}~(SۮMDNZ#ZҬ+eWǏ[a$Is0Hnƙ)3l{[P9kzY5 ~Sn3ǘ05-n =K.v:O>bZד:\08y&LU7#E\nkEؑqL؁`9y ѢN)vruM9cK"B^ 4.x^^'s.;|ƄGń/[OpNloK}“~fǶo0մQ>Cm]OpoɝOJ,hF̳)"Yd]jo)j2Я؀}k8A"z V~ndQN(P1# #]:F3f1:ѽV>b YBa(P:˅;۟'Tle L *{Ki 4^ Dxj):?Ң1w$r)a}XN)@? ="vdegHu{Us0s-:ߡDH$WbA\ 4xgM*{݀y֢Lӣe݊H2+TKʭ!xϣʾJ1ۥwI[:Yd ..d`V%3ҧ)NcUĿkd2Xp̯'IԻ_UUY:4:hO}]y/ pi .ȈpL5Qd0 VX3RFmq';Ss$ _WLj,B 6@ /lw}S@-u4emD>'9Aik+0m}Oik =%ԾTAXS村Ĝ"@:换{33!:NbzH (ҳ]^Zb|X%+ *3}҅ Jȿp 89mp|3u6w]2C[쯾~<[5nq!3=p}, 1 -+Md]ܐ7vh[geFFN`{'"58}ݢv#zֿu 'c.C+ډc$%7\2*/=L70֯*Rgc8 ?AlDR;jnܼD k,޵OC/ +b",x], 8o^qY,& \ЪJ}^p[hwpbl7ɑݧv*ޣF~3 Pqzs+v5<:w߿K =a|;_|̔dtC\n7L ">r/>NX{|_'i0[&Vo^oλ4Qi_2attbA ~?RNX6{:KKyefO.3 3ۗ~syYu;{!G0U_qJʚ8txaYVK7!28P>1e(~S)ћ&rM7ۀEM5@qk>v8LVtg}P0cJ{u)Ke!߬zx@{$^욪 8qndv)5Fn],e3ioko{Vb/O~ \!ϛzxw1U0a&{m"d .}Kb/}#$οO@"@iV3;+'6m ؈[@}z.~W%U(h ㋺Z%5-ta]ߗ;θq%~{LiQ[Ͽu?KE)h2v0C_dh޺,Q_rhExwDso(CdL* Bȃ+*I ]c88%HT ثRl?LfsK?0w?4 Vr:V̛L*UGB͗?/{ԱreD n_P ElF ZHeH<U&K~ZNJ;s$8?-|qwច԰޻̼a/[[>f̌c`=hdV>=o\\~4Kd"q۶)f}NPͳypQ壠'WTke}=\]vP V4]<oweީG-*K@snDX{|{1P QXs cBQAd|Hz\.LK~!,Q)bq)徾Z?8!KxN$_D/Ms7(8: )T8u7THj.'%3aQj_"\ Bn.ېOALh{{@:VbꫯV@yπ\*^tI\7f=9ܮ=fycֵd3 .+$J`ɟ0ʱ 9;!+SN{aff&*K4(1AxM 0hv 2/7%.A45f 6.~ B6ߎ'1O~>N5=.Y -\Xqb@w=TX Kzoѫ0Ƹ!V8oA1vٝ# 38?ދwP>%%7oA_^*UR뢛a7qki1gLJMf\h 9r_oY*^ĵ TlFBG$MmƤI UB'k.P:FOt6{[0QꍑXXD~z6 PZ u}X4;ӷ27!pZD0%vh83z{7A? kIS6TK >޴ﱖ%/|<iPu[$L|qoIgrJꌮ@ Acԇ̹XGfu*Ue)ac"! i{j,Ԩõ|_5|G5B@eDM]tߏ 8px! cťvvb@"M=m8c0rܸ6n U]~BDTaRzپ >⭩s`LEWX+9"Y鰪 E8kdl`dɬZP@800;O@z Nzx>f՜ZDLўe`v"[ګQe9:cL1 bY-GxlL<<3!D`F._0HjΦY zuauؗɇHtRW=L$I}WӵlNdd9 {WNY}ifthP m9xeF EcKkƜ%ȹ#wOV d}m􃳷-_PΟ(r#yx?L@lD )B'@Cǔ_{11mL;zIcG jۗl>m hJKm-9ݪ> s yX{jEt0QDꟙ7/{)n׫?~⿄р[ˋ3e8A ti_*dA6]0Ian U5q!stJ)zHd7M ﴟHƛ>|:Ujrm~sr؈;h y2Y`%?yУwm̒ҲSӳ( pDDŐ*lə_ o@b{ER2}iM Fpd3H^ ce^HO6vl3]hIΔƹ @0ջU\Ư\QK_c].B R?BI䞽bt]6+Z > r+3vS󺂌5nA (AhyGFeQ}2OXY4Fy{&D0[N醰xih}q+C.P=QdE6 W,m6 S Q P^\~X; [Ӽ{{: dmjjmlj`t'@c?ЯZwnr"CEp%dxȽNhM`4Yώ›ag3bG`(); :Pi;M-=!XVkK39_]K30A}mk+Z)F8Ѻ9VWJF$nw>ձ))j0(!%2Jj/5zf/PLVa+l]KSM'd0yX.M(em=`eR1셾X "bc&798 wy#.Y55.Q-6/#4}@#g*,/N`z$*l7 ms&%|>@lͳo.L܈BM;o"/c,UB3AWґC*w Tb<k!8ɮ>sf[Dl/=Wyůz*?>=;{".!'T >‡Ot:ALY΍p :7?V&`sJ( * I=;"| w.s13x_ԛz.6-`X|@L /\жcp$ZyV؎"|Zj*ٚ~cGӪ%3?$:SKf&]Gb:J=2r,yٵ=.Alio q$G0׾*hv}֐-tb&nesr1F&fP~ v"-aE4w~k*s=_Th"%1^ޞ TxGBƚ%g8%N0OnV:)΁nacz# "+5U"D,ܡuŒcAYap@QCs.:5 LO#R*K`sﲇDbBuU_;aE7@\tuz}@; 70T8a>IaF|Q05{b-1Y)zN_'J~My _\ :L+^uI?ԁzH t`쬚d7NHT]Չذn Z"H}IrA]edW- x?ʅѝ-xc)a%qX„~B7;&&ʾ)Vf1g q5<1jB*st<9NӯӖb^ݽMBۘs!m <*3*JO{IBv[ЄIC4K;r-}{En)Е(gB`gvZv>x OqG*Q$OҨ%a3<^z\JVy;m 𻍹i]3BدZbp_csGE(ql^4<_|9ek͟~@08hl@[y賱&BS:e/m6IQOZq/Q:4lqnIi#ץU9_uFII?yq$ewKJ}Q֑&i' QŬ 8R޿@.4\T+-DL3oD>v[ܹzljAԄLMV'|$#v}By!bp, B>,n;Le쪃6e9+A+-G ( 8u1u*Ttey#1XVC?9/RA#,sE/F#}hQuBa{ĊU$ѯfx~o ?/K3;WhY( +3|[8>T䖽m$BK1~G'*Ȟ =,.VBZYfͿW+<_l=rV)jT'APskiͽJ=DTի9W} tW)w|[+hbԵbIP[\/C9Y T[^usp&UYr οgJ‹s_![\뭺̇dfd \1 )@m?: f%]%(|AtH(JiA?yh%N- C& A6ا9v#KU5&9'}Km} 5ߐg JwJtwdTλT=eu>oD^ITVDG1nj5 F _20؋C̹.?]*P 2}C1L`pQ7AIhb!TWx(5qLx_Zꮿh*Kga_7#ͼRh/i\>f2{HF.kF,څ2{ b}3 #0<,fzs;[sy-V{lҥ(ZnAza7м |ЪllI<[Lt9K>`2Z7 (.t)`؋lX)s7p.۝O+{ESE6YI&ώO%'nlVZ@a$ɤ9y|KV{EON;k(x$AKhJ,$*.#cבPP Lu6y,||TR*.(x -<ؖbRj+G8>n1|3J q~À. tѰfC;i6IU, -W8kF]@ödA :0Hw\VKuĂ$_VI;lܳUyF7#]ЍO/yN7Z!lG c1!f ,zMlDOnn: qDQ@7qjEy[B!#oG]6.^3k'&Έ y-!%pc6d(QbJc/^b e)>HL'{N 6sYxJ'p  VfNwIw.~-(,EƎiΒq|f tTX5XtԌȭfŕMtb4򮏑Mb ީt?Av P+2#:`gcX!aJAwko}\r'-N䰽Np±]#~kO}ˏۃ:7|0RހOs_7is<,F7h[JH?HM>x$ΤGG\qHLB$axF3e~XENuĻ =Q-Csa9~cW]Be*{&j^3U|mIyy6?[qy|B)vѽyA(o_PmykcK[*|E"1{'%pJӍ?P= ƸTvf<1WmU>bꪧ@ |*7$f$L0i]vҢĽl*]U6{ +3i>ե[1O &Np'ZmGK3DT[Vybv#0fX.E"Ó 9A2u-Ğ'{r.a^2c4t4d$m;' &e,}U>siz95f eCjH}a^m6_/ȏ15Wx|X_R fpa84d'ZtXk9U 5]LծԞї;h[>$fj.'Netgwo 5Vʜ6ؼ?`f}ȥɨre"j?e6lstW&7W?b 870Ly B)p-rj߯ܜDaDGp<Nj¤G}os!A5/W =|D~NY}@6<>Fֺk}6Gb NZjL$459w?@hr /`B>1b#ŻXu)2шc*?4V̎*.o\̚7zz9-(E+Vڱ%!aETw.*s5-jV9\3EwI}YCI(7jgr` ,9nRڥUajPU7ڤ<#Q;06tef3([W~ uߋn<JI(`BdFىaRCH_2֒IVwF[t'MpvԗP҉8o_2. [CGḆr%&U:sEQUpc =IJ[wi/6%jG˜bGuO@KT g [UEWG*;/͇$IIfvʾ/hj؏o lcsdgeA7U? d}k!2dQPG ̈ Dž7esiyvad޿& EwԒ^Oe-X~vV'O%28{` MɑhZf[V9OQJrک8#$R3Yfm#4ФyM4p"~KITfpiá1"+,|8{9 L{r^yܤZEI}ZS*XkZ'Es+aE !SXw/fzEyW[QJjNσZjX5Xc%pSJl)+k>qwHMJ#dzh펲cE(hvbcHh=2x)܌%@ p|'_{<܊dXI{aL2<.n3Hv8r3AA¡sXkT C,xs{ ׋dQ> 7&r1?dB/1eSPG>M$%T+2SцJѴe2!/zfg2=x@4}Cc;upU|ڳA0 ŨJ{&#ߑ]aT V+F/Y̜SHq;7)Z~)TgI q5sO:D@\4]]Ye/FOc&\1 Ww%L/LCB\kAL^֤f(y?u}3+ݐ05oז4;N9oJad}J7"mk/um2X!?/vp:2Y&._ԙIn'6nkE 7Q݂:@ JVab컈Ec6Gʋ.lQ)Y|a9h0{2H AL^jPԑAx]2HD劇a[aFՋ ~JKu[9MvD*Zf!#Ƙ&Gw:j/HOg&1P3iS7@-EM600L}]yYs.%Z\惏dYꃹ50e 94Gl|^`M)RS-i\J{;iĂ0^.}3|kMCIܾ`1,I<DV=r`%Di'~Ez%v ZDw}Cn8}")ld,G+ ZT Xzz=8j>TY^ jD\d[(F\QBDdMlT7ݫ; \PmM2&c4-_zc32=ֶQь\~֞i=0n?? X$g{@}w%wtۇi.وfSM~_Xt e31Qt./&h{ǦGN賜؟|"4y14 5܏6 &0oCr,۷TK}L]WP/t%VC/߶L9~aeVhiЧ‹BJj`kNUM;dR?8R ӫ}S1/".M'{QT;}]d(.-%h/!d' EӈXQwXm'r-A1+gf)QO[Ͼ p̈́OG7 O#C̣Q5{\~1̆n\1-% VM9k~~OR2f$^299D3T{܁qNgI;z{gukss!P>skY^Y*ݗ9tϷA)4_tkB~$,):.7Qwȩ{kTߖkԅx̼`"It X+/?_}rC{} ѾAǮ%@ovvUf$#Jޜۆ\d=|kZ;m|vŊ*0%(bO;TT`?sQQ)fTHf]egt-"{-){ЗIvZMxⒸH )mTH,`8 fd9{,N6ڈI՘ ^ }pI#4b?w8M2+aXseѨ0-Aةn$Rdm9-*3' wR$:È- wV{ pTQ0AaXZLx"/lfx4,[*^ՅHmm{T}D}Znw,J_[ۿl&^?'03?)c,;A$.Z{5_lK"맯}E\>@ćMtE{/at5'w>9QWV_2XgA꽁Z=T%ظ6\'Ƚ} xpTHrlXxZH&гpXQm8Cr(!doC^ZN6% lJ2q )nCODUcb|WQ%}%~!L_wNJ/D_>$eeLH:Yin#c&9*_3ڊ1%zBmKwCVQlNEW@A٪ "^6f(/Z`%8D\/6XA!әޣI8>G82H_sq6H@ZHf/YlNZy:7p94H> !$$Ă $-4P.lW>!̴t~q =Ս -nRąHWipgd~dȧ1?<ۆ{;a^eh_ V8>?<:4XNn9 "Zըȳ!3DHWo߯+Z>.{m)˻!Xi{Xn8o}(I~AIσ1"mS߬Ȍۈ&Sq_*Y[J&!-jv[Z:7OtUus&f=SEe^ʾ@Ҡ)W }p=_ܜq.jp7{_ YwG@r$h?^rTaCSX:C(Uuw/1 ؾOەܛTs~fhemPd(y&UL_.N 2X{I.Z/] ӅD1+G87KlY7ɢ >@'o~rM9;;Tcd[L[~3,%"ui=5 i]*'h r3 "x{9jo(fܦn*B1dAޞ.~dMtji taFjZ:E=E+>![Ev@ ^d+\hc‰ -サyyx0ZeyHs3ǣfW!zq 1#w契ɨ1&N{\]7m:;}#gwQfú!+og?g1m& ݒcԆEw!h( fsJ I[ZqD_U@dZ7㷌,QWؽphOS∛'Z[6Yޙ0$K/hAXg~IQPGAwELߧU 1xHiR˕(K`{$aoٿUNhkbc h=?M!k.Ζ,1D7 ۈ o #17}6͆z!}[b΂l/N 뛥匙:fr7?hĘ0:w?qlٟE :=mX$k{n=>mY"!?Etm چ5~TzzL|' ȡ$^a &ipC'*v~yH)b gVb % ѥwָp^r>):NH,mJCD~S*t65 D= ; c/هOd֧k^c 5` 5(MBͼ xm c3tQRMՎ;1ēXˤELY{϶cu?`~ʬDi2u:f#Z&nβ7>ς:JTg.sƀpxʧV V82zBoQ aȯ9w2ԀKv b17vk}ʇOq;c:Mo}T&V&[`]'`LL' npvƎ\ΗDOYOR)}v*ȅZX@iLԆjǼÿǞ?n|KIWY0R_u^sX1VZ࿯_-_Վ!ދ,M?.~tVT, $@=J<u&:]<_6ww:q yAE4kAIS(u3"!"۟:#\ UZKIѺ|y򧾇ی&Mp&QE?vF\]0cgյ/*O6[0$OWz)|í߸߳=u^υ+I 5PV4Rꐹ-/X;l? O$:X$`wգak "z~IV<,2(1{o@^ExG7bHoM埞QmWwbKMuctf§Hf.̬ko]L57׳Q#ظo 4ݟϞF?N}a֙4W}J#-1Xf0f`V;盒1&>_SRS32 :6.̒Sr(EXQ=pD̷Ey'C34__^֛drNnɛ f,6F4.NMoԲfr 3v~~FT=˗c9Dl2t SXj2aQh+_yMUTsոQ=iq gH7lJKK ?;\w1Ll>Ha&M^Rz2^q\+کt~ٸр&:)ii3nrl#=Ӯl`TxбߥJwּ?:m~(o!,hSLncɃXL9>Dz'u֍TvgW~m36U 5a G .u]sONsD)H7j 6l¿ĕ^oVojtO{Qm5Vfڅ= ^Zqˀh K4E!$:ATn|1ydyHxgҋiJ¾,dm6sp`mlYs-2dK7\ g d{Q_g QE3LQ mM K1=6dWK *vsM)l_ oªdQLoCLPCTpөAtQo8MnV75}yhY1ZR0Vu(LMUf}0kk~?{ݭFWn3dĔقcoaT]M a+EeO.k(JegD^.nY!VeN-p{O!m(f9J;  0! sv;X4/a1^x)G~arsmw }eW7PG1#Hp+}!gX}½#41_m\m &A>$.P%"w̐u cX!BLadq| ?lr۲.@Wcܯ0cAq\sYJs)Y162k}"(J*'hk2)Z|Ȏd4haēX/6=|H`TWr0kvq7R!J^gϮ^6|3[% 2K(2Q7ؐf>!ȥ&S iG?O*\ȶ= މRדso;>lN>^W:`Y*?ZZBBG|f;Om7ERfg=i;Dv>/)X%kc|rV)Tju;g}mUht>~!bB=hD{3LCueλJ}s.]b#Qf\k?.$0cH`~0;!y10Z<32K,:9Sv^7Q\hn/Kʅ &ŝt049S|ZW q4mEJ &9BBMW4׳yx>>/xokݚ|iLac27C""O>{ t|El?A,G:0k{.bQv*C;=3p/1}G$m)葏NXow1jc6H` & qʭ(W'ǧc3N=S]4T3YdiXD N9w 1`l#4m'87̺A@)!R *d=LwPQ3]_ 6kQ2(zk&@,cQ=1dPo]\`-zՌU$.E=&o>n '.skrDvjSv:[ ^A?zcW>X0OMV8aVf*.yqq`.H +(+PEU~n ljA @ÀI3-!rDEr;}G11'|t~hhi%[?ӑ7)oï05Eڀd<*+xmEG|Y*;Iۭ}q2axH;5 sFҀ0CFmDI`2qњP=l!ĜT߂9~ -u|7=žvN{UD?;c+{woZ׎t}бͺqzfy:ccFG]a/Єֆ}={ 'Rհ!Dޏ{/qiyD?_1uw:*(ʜ}L$muv'4mj)756VsΙ9\%⤙^sjĜAڨ2 [=br4QNIfy4\\䄗n(n7/]3oO֙V>t9mԓ 2F-G[Hg/ *냊h(2dYrTrzF%q zlzL vYOqL [h#77lEfA4@9A !AdVOv~lyzFP KTSh2˗o& Kڽ yF$;JڌP|kҗ:'Wdе_#uӖsA;r/I&rs@"[D4v1M>z3{/+TƻVAjӄ6AjցiC :7魀ߵLɧk"?X?%`26CfTѼ@Wy'Z4iȧE Ά5ƥQdV8Ƽ-Pk5`ieSAthoaX4fDP"ҾuG[m1]r=u24,mIkT=)}h\F$96RG$_X[IϟO|D,:/ aZP5@^ym}Qt)R6CKRسE=)Ae!ˮ/u&|Z XJ4`qķrz0|#/s5؍;"xڼ~nJ@fyVN[/-`o.!Wh"f!vJsۄB&W: !2G_O-h͌酒ԍ^j+nZ~V…/^Z?JC`SS98 iz6e tm"O籕^)>Dic\yRFYWU)TCT˛A\1D1'/Yh>S!p\Gn+Di@p=͏4ǚN;g̿.RsVN)uwx+Zla,9xN*4󟫻Ӡk*~SD_:kRò~k G S#~ؚ s98qt=Mp귯I6 %n6vol@.iUf|w +5gJ\+ݘ Lţv=qpSQ~F7ZdbO_O€cܭYپ3\`FGٍ,gZA#͝ ҉2#ucICT@pDyIT;rx\zy3a雁1-ȉ=5%#{q`/>hK\OP"ytc4 ֏e*4~[k\fgϦDzpI<¥ إT8MjSp76<xp h?~oq|ę40m}׹g,$0i{Lds)=IJк Z)qcm+~hKc{Qkeȇ44 OYޥ6JӽvwKgb:5Z L*N䨳{2jC3Tw9 203os6SRgCA?>'@RE*[ч)ʁ;;'*ut<~ovsߐ_=ur> w^.jK&Q9Qq^-oQ'pMuvW"We o|`yXB%E>|zT4 "%1l\`Ow/)xdg㔙κlLݲU"4_r95$+eBh% k*?,lyiyfT<>vZ{Oto4=OR~*Z_J,ϣY*RV:җ*C0rY 'N9ũKiZbf}ft\|'!A*9f8QS?)1x\-<Ɯ|էOڎ<n~yw}_^ڷe&5WF]?t']u+8-b"X]j9,dXW|$!!K>x^jwu\UeWEcB`F'^Fu9F<L24i~UNA~O#6XGc~GW{dX;I5,줛ە*|b3xdEb(2ĽԨoܳ&MH{lX{&ƌ*e`݀skq|(aK&}=zń`9tV<.#]rҦez1٣ÚVxu1In>gs@ &٢d=g,\&jO`]#I@_t"v;Y{:Quq vKhF "61]F߆OJİu8勗ha*fsm-d*Tr=TW&eq/2Q@7Kb\fv]@}D%K9>M#-@ʝ:&َ"N.U CYFns?ENg6JSG~_8\7Kټ'ӈ"n[}iULM^[s2 Gt'6!H[2W+:mOSE8)KUcI'Ӹrϙ׏ 세_}O0-g?޷-6ćܞsINI#YU|iT!3i6IMEwvHqRypyhv}72;:ِ_MX&}7YrǼA1 U$I6[6zE%DU%(f@='<ڱ>"t[y-6yxܚpiCex疌/w[g/]DftS=ZRmi}Gp+aMzJ WzVdʩ^Ery?^KA @њ/mp[FͪZwjW $ '9ʭ]&nƎV[wJHېi/[emrk7U-[6ru.MTGibIڦ]:CkAX7SޡCo :X-|XTU5A=+,=3V(s9_P?~w:$_hL%ﳫ`;vJ >G6LnA썺MFQJUIZuًƵ p.3#ldQպ6|l1zR=IbJ&GIi8Sk5\uRuoeq+ҍ"%-R!9tw H 0t Cw׀4>ϳ~}׺uuo|NyU ?oXtdm'?㴋Ӣ}! }{[Ep } 꼀zoXؓ[J]Q2dgG1VB΂3{\9~# o>}=W 0W?mK hP'gNojURL2ĩ@^8Ӊ7re*I4Zb) gȱp֨vq8LN;ͯ"s/ԁY֑̳,/&\P&KS?:v%3hƽJA]q𗸒O`Ut)MAvO$p]kv;u`N{gvRKI޲S!5 yTylS8p2<%xh [VA*(xFcj0V3b;Q07g${MC*v! g8IDrtdf)%lZ⸾Vks5*2{L۱(!qd?fСhKŹeENI~$û7w^G21֖7r ]ȢoU%t[^Ǜ9˥w`Id`X}[?kv䳳|-ZZӃuH<Jh8'b\.+7j;T?tpnuhRvݩc!G_|mrp )uU ̨pey'NE4 }ސ[ (~؈bktEλS{Ql j♓Yt▃$)\{o4:94IWG\ 0 \m})/WIۗATsJ U" ϏS~+kU^[Gv9эL5i"bS/Es3 غ[ƂoC竎 mI7|WΠ$YQoÍQ2GsQOjac )c z8"*l^rxڔʫN? Eh%AwXVaCZ .FR<'vg!͐Ҹ\ϛDM})d|`υySynˋLc5>e(7YȬJs"C,snE E.[u/kfH@,<ױ})&\5q"2,u%o>NzYƽ?jkKetV=\kmU(7#d/x׉nH[1#^hDJ?H7lZF&#U i_MMbQB3 E5߂R1lo aԈSdChi텳"Bs#1{#WQJfx2ҐpNӓ-kl\;ɻi:uo19-m#u)k{HF D[<.?C'Zɥ"$|*IEQ;/l-ߪ[/l?R I_w?wKZ :2j/.pHU39[QZw6iB?i֌ S\읜Z *7-ޱQGH+<{WWjKe[T i; 7v, IYLe]}y?{L8彭|;l] ;Eg輖?7 Om?=y*4Mp+IMuڜд n.gxLĚ\d%Jnc7Lr8wvEʭ¨I5cPz; a2کWbm]`GdĪDWdjvbi2@jίe"txFZlt!^)01e)09ӖZ6y% yY@y8̻HwǷ5&M!{Z"?8 Dx ,Rm3믝Cbf(F8XGn³L;48`.J%sܝgnR:@kςA+ &_qNu?GPS:P BoxKގQ~0R5cIWD )MbZb6M2{¾>ַ,`ԅx- &ս?!^ A ^߰pl]  rGҏTKb['uۤTkY,B6^#Ƚ>N_̜XI"v5WdxfӾ`%.?{6X^[jw`.:v;D_G[&Fc!!5!oeo?Oe?>R; 8fŽϰpRCu"܀8$ !`:; ofVbFQ0גqO?WD@)/Gi/"uw-ømάRrYN2XT+p]Eҫisٮ, jXDKl:أ80?vج}JCoU7Vx2!Tة/P:_U\otK͛w M颐jid qpȕT&M=c3c5*Wto=ad;TEßayOp͓4qXxSӦZcgH~ ?h*F]<'zbdypjArւMk"147jx{ <|4vڝTu@<9iOyNr2^Eu+ ohY j`\2KI7'tpGqcy!(bʣ$Ѷ-ΡK e8EX*eW5v1 Wqb|܇v;3A#WbClc.bCbUlXT5}mMxA C^UC ^EH[TK_i4׹- ~}B+k%QC"I_4.pW=/ `/8kq]hz*Q}%d͸LB}mhΒi3wS&˽:w1#∕>4߫9,`t =56O &Wd}LU/[يlF'1* uhsyS>&R5^'z-r`񀌞{82 /GWnlCǷUfTļ>ˌo 4-M? q"NRZNmI\JP~{E4k[:Y ]M5N7沼e{9-g؝s >%0WgDύMa' Z"T:M0D)8hzC!&׃e%a44Y>/vFaTv]ƑFU@ŽXl9>m`vV|8-1V >-u,`Lo,fՐ?FU;Y]mԻ+ʟÉmx߬m]giCI3\4XF ((ǼZv=hAl)xj7g}T{ gB«9xY,VJ?o\\AyF~  'R?rl옘X:v|_bZB) gF\̏dh9V RzN3"CgP̸=jZua ⰂMFIԣ}Ͻ2 ^sj F jETQ ŒqCw% v,qI.I`jcu &|>k?x5XP̴\ ȣ2O0xte (4bhSmŅOp ?t0&;B;hkPdi(y%kB{)nѬğ((gG.i#q?FP@mHh]W |AKByvR0m0ˀU>G) KR䂤Ywao+{#F 觱V/Pt:W/Fz7;ٝdOټmP!gᵚxNsy7bބGx|m((bk#i~DSDe+חI7qJ~o7V7o]\oT qhӹ ZO@m O(WX=M1- ֙t=/D|G+VSY-D-ӿfM2"ΆtVI8$Lr#h_|4MK֡ RQFSԠ2OY}˚kz^^#1-nlI'2SϷ\U!}<[Ljc ]*lIpɆAO- kF;liO;v뇂LKާ*腫iQGICW + V5z.ٜ4.u*9ԢAraNBgGZFӫlUOC # sXQSqfI/vg<[-ɥ6Tc_&C5=H/b8'v#ѫ7,mz?RvR6/vO1nbo%<2j{r|xF[}zJ\ IrښQآVEqwQd@I)Af]=fR|cq6%k]\,P$1ĴU"IJXӒ@ Y)\EΉwr' DKhV1"PI;iNq$9 hױ 7;v\潩>U|8kxjb̏FO2H&u࠽|6˂^{wƸEvu,SRНJZyHwui lNPcZXc3#vxF"V}Ȼl(Mhda>b^t0Wto'mZBf2[7ӱ1eZͦ^D1PQ4Ϙ yc Q^E=3-L2Ր}A>ÝBE–b'U-_xj’&iʍ u!&I{WtBv]6Q|>8צLteel> c_>@j|_pf;X7j})5:-㥕$`yGJDG.&UQmp'UoPQ;'g3 ^^! ~H6!)jNҸje:3I+c-. 'GNl&\Ln^YWy>{]}o1}ӧ.KLċ4OPVʶ9=o| N}B =Bx7i!%\:lX-}C,8sMKZXu|r|ИoNStt2^OX5V|}|[|вb2` `{nу/ m~Z}aS?TY}bR$z*#Ʀb"HH-x-.9dCw V"Re,n@$\CAJis zX8̺?w ~|pI>y rd>LQ c$|4PǧxjBYRB->"|4Ԫxj; :6'`7HNPbATi]ApXBh.~9cZAT z<9Qbx6<?F˝[)?',:@z`_x&~8WWa Zťd?usywWLQTmEJ4O3 A% KL}/Q[ {Vs{˿c en#D6+dA @ukf,]%ǡrܦKa|D_vz)ԲOLH8 @ECvb0wj#CtNb.XSgS?п$kҴ{: Ezdˢ%{pqވe8r`G!ͦCIJܳbH3sG%> NXgAg{dEBv>#1rG~Pple+E#?Ɔ[mj^\CHmՆj LjǼw3,#fB5%0/@~ͷ,è)wF X zSA_Ftv#' 1 ɾa|/\R96,=^?xR̖C8~t;>!2`T«׈b37` T*@ꝿdIIew $`?#tװCS6&1F*e!??zH͹Ϣ#5_׮\IA&j׉ kgKq$ .Jdl‡&Nmg[(㒆T^[ӕM ՟chWD0eP<.@ggGYKF3Zr$q탄Ճl+א6^  0N+UtPk>̳%Tlo dD ~)Vp3)7)ei{rX*V䂬,;j/rԦcV\XOp}E@l3[rgV  ͷ's?K6~4p\갑dks_ Aolɩ/|v~6/wnkyXj5nM?[7" ύK jJU"TաMYR*xT+w:#e-K79KC Z/`KFAY$L{^qZE~UmL]`sCIԪ}~p4f.)>>,@JN=1nr>eN7'{-HߘaǗpE w<' M { (1TlۊvS2-h~%!Brk;flO-sTLUR:f\{.cwձ֬[.~(TFo n>uDQT*J6֛S;2nV7ݬ5Zˍg wn)? S? Hm)@Dߙ^W͆$f~ΐAͪwB+F| Ga&xV=G".Tm_5bSa1wxh}W{)B F_u)(jF-YΤ~Q6 u(8'FʋKJ)WCSsCz%trMD;o[* أ%+[wV! Fl${QDsI gpy!g;Bs9D wѻBT̴|W[Õ$F s |Ewd R$RYfQCM@ IC[^Jm kȶ P#sTsC[-cP=AW9e 9V˫S0 ijyChU9^\҆Ã93VHծ*Jx3xDn͸]TXjELTD ~xW5+ 6)z\n/OiL8tVX* su>- 4#2^8t@*dž'=g>oItP$:|b?ZXdI{eAL ‹Нl؏ysM[|Ӹsa}׷DݘG/Kɶ'D`?؇2ϗ4-1[ŀA0 RNsiC=~7~&Xehux­ZL܇hR^lyP0ٍHeT\ 8$Bpϯ˖¯ ]9fK4]qn C*a* Oj}$v9D PpV:qhͱ~)EUchK(2mPǶN찐$RҕbjhXīZ*ݬP*xAUaU2P|pa\au5O`Ӿ:&C HAvNi"w#҈2FcXkMo k9Y$r+=(4K7\ */o2&I +[dIUδ UA&_̠u_)T͆@W7-j /0Lx܀J>=.I15?ßxUgCTvDlg|sHĬ?+6?PݛP l~ ig{B?)IC-c~6fRy,u퟾|P8THeAkTpI,'9xmM)&`CňdSW?m{KRY TwGt9"E? [ ҢBnŸ7՗YHHH Uhv+M}r7_JY 6Z<;-__jY|np3Aӟ {Y 3VrPVr{mêK!-,WR߬DvQ(l_2("%8\4m)jYƗ[ -2;_?9'nG=Psmrsw/ܨF{άԝRqa-N~0HM"K|\h;}'Xd+C P<{P[TEKoy.o9߅1plwk$)/ J-M2+CƊ7 xl?a-CM'"|59Ov(-?&ۣ%%-_W!|O/O)$&X ,Le؛,8 +Vr>ӳ*[`G;u Frux[$K4SAhUI_3 ~̀HC9dR||"$wyxrEd}΋PMIdxŶNM `=-748YJ).uGARzjNB|9$v`i= q moxYo@ *a֝t=Q`'#:PA7$M}EQG|ݺ3ܴ iwlX.gSOi~ XWݔVTZ8x)qUZ7H*r?⿶(^R;xrJI쇽'w\VnQ?U'+9%v.l bp4`cY X~W,Y4;@!9L)ceuqpk<1Ȁ!>t{җߝR*鴗ĭ7žL=3rnmY\,薗GS+hYo]iHr&=}],yoj螾׌+K:[dTNg V3wYSm]5TG4- iGKuG_-QuKM8N]Ӛ4s dL0I2f Ό9S (ؽ5ٟ7#IC}ud 'm(ӵΡAMn.M s{߄P wZ#WE~tߐ8MU-x>BQIזPmWmu8%P= %X`Ƅ:u*\$tkV Qlkhs%g@p)j\oWi8>ejQxo]b.sq?{Q_& qiBЁu-*GfYn/?gzLb7lb \t7|U]tuFHplpy9Tƍ嚾SIxic4 IS8?aJ [u%9׏c.%Q Z' UW?[n#/ Cn,$3tN/D7;{Ӕcwhv]o.,Nĥ Ft<48Ż=>2Ls/~"T|u0 p>tWP'.+DdG0tӀs:<| ~lǎCNkS.:!F$^[-wfm^YZ^>B+m%")@TqҎk`J!y{?+].vvpSoUσC v$-e.+Ç3 &l'7SvC`F^τEoW97}qJ~5[ B~?e7~\t? ރW/]: q!TA'*tE;nO!_PK,a}dS9>- z %x<(ŪmB>HBu@kc;?J(ō|g\A=Rm\,la8"Uw^kb!=T=Z:25>zMpy5]Pb0ڮ2^ԹfhɃXnB=v-"TqGW̊FAශgD9lXEcfZB jƗ&)^`ey$⎅D%:NL$(E? !vR/K޳lz CM;;˸Tn%#Gʄ?j k*"%d-ᄎpAO_; es[wI;_ 0ÅiPn3Ȋ=n(bzZ )/4^7YN56 J`k? f4xo\{Kp?dcX Ie/&o1Ŀkr_j-h.ef0&BEXl"l(EXrnt/Ν1gm6dfjGDY!Bzj JD7tҞW7h3JflѮ_5H~=1 1ubĤ"M c^Ej4D.)VN]5X-_cJCPzΛօG([Nu@ir<@$b‚zte3~`kK )`ɽH(/0^%Ynhdss%VnL\PUL}Ƭb_SO5) Gt~QK+/wgBf4X$!\Z"tՄdk_V> }DѝJIUIrmɿ j`?JWn|[cʈ ޾`@u9K3\S쒀(\qnyVVa<058/)^KQp̉O!{YY]lKܳ]OTFHPLDW+ y!v>zʩw/f$3\ Ux<{tRCW| Ds ^iݧ.x+95c8<[͕kX EGO="/ ]< f9s= y`~1=e +l -*[vf|?)lC"$"Y_+ٽ E ¦rWhKdpr:"̳o lnQy ssj{T R.6)Lkۅ3+s|O 5rcSw+9}sF# Us9͜5CL5_=4+HBs:n3wO  J!#S4blְ J/} c$ȱZ~OW9}3VOZH0F̽-E˦xUJs;N.6+"lWaZ;M} +GCƼB3~zqd߿9'm{lAp%(_T2F?hu4ѲFތ MK| nba_F l="~KCʇOJ8*6|8忭m9j4 P7շj<#@ e>nA/j1Xq}$|wkvf'cQ=}yf,,ON0f~J1E|7矿g,stG,xWjؓۈ#8I2Vi{3g!o;7pϲ$ߟh]{)*'$7;%$T]vv.K{<: wON~rywfhÔ W1j>l!)Lv4ѯ+OUtW /m=h6xz2Gؕ~YX\qh yh#ޮoB_P{l¢`M91"L=~K8N*#n{X^ɡyߞaY{k.T;0_,t+?>:>r[kۗҟG迭+p>}騍is G=膎pNOp>:__2Z@7tWq"ov9j%')7g|gg;ozD3}ã~˃1Й!q~9`5$R[dJ "edma;]$~=jϠ^EJS )~pF忆+}de󆮏9T( 3'Z@0|apec<]~{Vu b̟$1C u*`opU@߷&\j?VXоEL OZO7իTMp@^c~ `4UtbjKxS2֒tkidIl \ϽKi%۵ hjW rqVQKd]b$8?:wrk14/iak`q26؅\Z "Vҟ32f^N :V! C.)>p:e\ʴ{Z%\28g " i6i?7lw~4nM@x}9m66r]`bJ4^"A!eL~p(و1F(lŔ7=[G>agW!feJ@3H [:OIޗ.2% 7aan?@8MʍI${ڋio-pYӌ֛("coLe~*8?FژN+ D _973Ljx6nu ?_T9݌@ :g[JW̩>#'B= TC9k N}篲 nb >9%I.y:q )q[`p_T||p(vzCy>!hCB+AIH/~AC͹ݰW`?/lHU4 7pB4,n@k\1B?s>\S!S1eF{{*Ѿ䵃-y* j7wjL%Ak)qyfP*q[x&4|jRs$h\?XҮܘv%p[X.rM=8iJ7cXo]QFhNZP lO?<(QfmMl%RwT׷TwOTZ;Yho0EU.,@B .BRWL ٯl {?O-O8dvb/9Eĸz~gMy JD/m;шݺuOۓ:+a{hs|33bT'[r L>[n9TBtjp4T'\dFK~nnTQTTѩ>9X̯dC-B;D'9B74UVm>ͤNv|6cMޯ6R~6\Aug:H^/7+PRM: DNGP3 i59 gitM@Nnq}zZEhО̷EGrÚѵ9c46O fϰB2CCͪJe!L.Z; V#9`f;'&w^kgM:+/d>%6X@xdfAa[Ӓ^O@:]B [wBa}{]7Y򭍻_ Q4pg#k]6ָJ1#Jz| zrJ/WXEbB7=8',l1XWV8J.daJK9qd+#m1}] ZcngA/ʍk2ưs ,OE!0Et*0"F|*Y~eN{D.Sϡ:0!MkN>5!Mjm~֤ ک-{5h1)pN%4l)Mm`U??fWÀS[UN+m^vy1RYHpvE0)B/ k<vKB>EXj6V>~Z&7)3-r硦N3]4lbU u W'+"Ǚz P})c[8n/5;M<~0:Ap2.lt2OFDzo'FLMTO(>(]]B^ZŐ'*2o(fflO=+E\8אmg#h:tZ7".ҌBe_gLh}PByrrbPW,tQ(VHKZR{9Dۂ Q<?.V2GCVwf?oI`:Dmb@} OMthUpϟY<˾"N•pV!fI\idPe1q;InJ]tJ}ԘڄhxL,J; >G+4K:f˯dN 2w ^ ߡ1% A)?<$h⻻qQ oP]'8hTCW^=Q#a{C\*Ы;HfkmLjoYWPݳeh4|Šټ۲~o>zW_}-pmh\zIx! ) [k26Z.z^v"G++ :Tseu}n^} )9Ly/Q%$8hwAlL~ Cwm, `b;T>O]U&o;OV7 E|;|jÆMщJNjٯ-]?,,Ikq;'i&8,f̊٣<šR *$99& u}Qg^ Nx7c1M=cL\pSCSJqߑt*%ᷡ:k^Ѷ^yps͞+z{gל%{Pȷ19tF|*[,1+i#GQ\w-&)UR#QF>O_.E,aRui\Lca=&VZ-YЭD+ʷxs$9!;qh3 bR{?/:+л%ee1QWc\K/'6>NWwCWGg_c\\ɱ+D#J5<6"-}s).e7ڰ n)V,jt+:F˪PQ h԰)OP9q環&$MpNqrF6Yx_ybCkiqf'aPԳ_K͔͝lx)NLRuN9yJŹ:Z EI6q;Uj* 3̊1umFЪ("&z{r٭ hqB"񰪯^5g^ĔH,/pSw&LR>|?=2Vuwm&/* o] leLosNY~__%qmm~T^Mϻ*"3^rSmjO-ʔU.6=RiUxwPA~//SZZ>sdSwK][ & xm֠ϣOv/UHt<0bo?ӭ?)}a6Y?nU Ҁϋ)OjZOKB:C:/0Goȕ:*w㣤*U;៧`QWi 'Q3c 79>'u"^ jlw@ ~kLv'O˧գ+V-h6aQ8@,kY6 L4OԜ5~u0l]@6=$(IԒ6teఢŲJ2Q%2^ÛYD-[n3FCEѳտ7UAܺ֋e(̼< I6T{<ӭ{I"YԽ Gruzaf^Ur< %">ףvHˈ<|ΉU{_khHr~SϠKZG?3XjAǻG`Pty_-$E޷+|o#u9 ߑXYi_"C_-yZ<Cvql/}ª$o;ҳ?iҳeY_[Qz 6 ʪC} i,dLݡ1$p CGLoڔjH6Ch <7}Q-!aX7a rkO[,Jf&0X٠zm:=r*Ï3#rIQEeLDVNAT$ģ*- Z]ZNV7pFDfLk0[7ϰxЃ@@Р5m_)\og"e$Oa#Ĕqʀу g@eN>)qpy͌zҝ)8t_"&Q †7CG""6籿k 8޶Tlbv s ͷzLזpTu FpS wFyPf2l 2IJJqRL}.aF@i}<H RLP^/[J|}Q|%W>h'^hwn/U"8eڛ%gsyoL<]@腰`{߭4aTE >)džB\RZdIUkI}'{l.nk5gf͋ſnWGu6bkxp&w,aa1y7 W+[k^}cRUxP/΄ZWQf`Pj TuJJ}*)0ĒxI w`r#*Q`<$DP\ y}M0Ge0n\I|{6fVXܒ$PG=F3U0=Tl4þx^Td$&3X0 'Q̌1!e[na>-jI%vNɨ*p||m~󿃋5F]'0I dҔ3b"+WKT/xo̍)="5fQTJr?n0+"s7s .kӕtjI ֫! Gn&h1u0|2ڹ}qyE>"_n&lO6v IoT ݶFWf+?LapVյxo}[!y*:1ų?"puʔ1EOgT(FWc5/y-bOT7\6` ^(μ=9բ26&ZCP {[1IՐk;#mp ZL tVzCpm͌3\?gjBoE"ףo?ŧ׏uͲvJΆc\&O[ePpx#(+{qGm: >[d& En}I; &EkmlәVOg}0Јr5F nz6>z*Ys- OL5Zץ_3Ɉ 8',gƓW}01,@LeLu>45- 9z)?Nhu[ 4֓b.SfxDm=\خgxG8=k<$5|/.;Zϯ*׃- "ɑk|Oź&K~6]>mykrTN};gqtڀ:LaP*Et<Ԥ9ʬ[lIaЋAvȼTOi ?Y7ԺR겪A:%nk=du ?79$z0L0P`-on8lk8aX#ȬӦ^z Ж.Z˖!|-Bzq QWw\8W7+ǐ0jlykQJP꓌43s(m׺H/3λql 6^kq+J_bopp =?il^}詛8E"70R'6,M]ƹ45fXQz0̕s + oOgneړ]si7-|wﴀe[@13븪|4 :#=h_VxyS{w( Od0}ȥLyߕ1J=duM L3,[+ k|x pHs{DJ20\Pg˪cw4S{H6DϺw5(tcej4Lq޲|U P|3<0xͷ Suym&ɢ)wq)і7d$q}*.,]n's~V}8>a4N tnrycfDf۪1N2l8UTEj!lMcVx »$x{s}MPj^%+I^ǖa-?KC͚/u{w h\"IRhXޙ֣k8ſ;N"x;lӐ3&V{TRN #1} !%=#>S8JR@Dpk~^Bo}U˜wDհ5{i~nk!3jiٿ?')3Gfq! (<' THz&C&rJ+_f=m'}w#}fף,PL_(qH!|U^2'<4۬7r>v୒(g{F{Qy QOc6޴IF@wS=s yT`ٲ!e1>z!MQCkPgدD}∔lNOdD䞋Eዕxeyѣ_5hF4Å=zVкP&pg. ]o1.lzN`z˧(9"8mͨ *ovR?9Ρؙ*xAV֪h̾53wuab,U`z9|>߈s\KpU;[jYY7c]j͵Jdh?:?7]@'Ha036Me+P_rB#4~Ǟӫ9u'?gy&] Ѭb*U2|$>A RSrj4bw~Knl&:ȼs1ZW'ثgՕ;ͅt+zrx@#29L*ESiqrmTݝڍLdGFq믧7rwNĨk04>i;RlܯH*—El7!'lr#8Bz:RǠ3i>D ^~j'a AlZVvZÍRx5ϰ>J<˒F7I%OuD{Ε)JØQH4{Q%|4٤OGs"SDʆ|xF$[h~|-9Nj &ksle3YO.N@Ǯ;ʛhDjTMxld>e^ɯ{%#`|#hLJԢSol'CCd:[>GHO4!\l2 -$D?$B"-uyln犒Sok$3nƪ 9B% MUIJ׋4â&R*>d&N:kw0qI]>co{#|{7P Аk:w%fީnW:Rb{U|#]Nm 赛n2Zbi{&s͞iu2YS%4$Mu.3P׸ή\#%WLqs;+q"z>qg6{YQ!!g&_,ELj/r쿏?[޿a: HQv!iWh0sHAn &ycm#Q]ˌ9+WDvtC|fl#7\,eg]p x|wՓPGxp0kØꨆWM\JAm1hgn7[_>whѹuAlO,/L*09',ԛ+] E(`p.~m,EmՅoܯ>w$Cu !%,-V6{xgLWN)hP~\ьך=Tة~YGMMGUzFP%%3%fd͔].7e{n8 1i^d*I^ n SOt u\0n *&:^(#.ʊkq;/v >󇞏TD30iϩ^Ű0n:KElMl4n(lOzid6B{^o[^W\qko.FGf?pTtȨ0\J[<{HI6#R U>v׍6Қ>|wU8w1])DP]De_],bB=0 B)n:b|BW5. n?h4$@\DmTZA<7Q7\1nu9w,OV#ifֆ;'&JFk遘$:T*HqBE5l~i(G*?P"T-!jDQ~EPVc3E#t¼hZr>#&Uk7HF 6ɏ,~!tMJHګ$ĝTۜg. ZRl [ǃ?GA>`J?{V^t@k9kʐyɝvu|X^ VhD~G8"2tE7/lF_<ͽ$N- .gtT$SXpIWA7Jx B-į-%Jh}nǛiqdL\Q\[/GI&wOs0!?,BaOVϛ;3q[ˠȴBaYx$x T(awqOy&E,˂5O纊˔ pu<߳,r2\&kː7Hfm߇` =4pzNTAJȰO=9=22oXB?pz7^p{+(ɢw=ΰ$kCLuGk7w]1Z׏wp`f%`[4z`8Lv e0 >pf\aQ:%I^pJ{zs.B!" 1ɎdN(ӻÔ͉m/.;o=oE\8{Z!kxI<ɣ70E^K8Z*TChK9ǒ;9 y;s̞8!W>R2k0=w]QMmnqq q(Nj3r:OiRiI/"()~]zW5s]8;|;}u{?[l9I畂͛C9ϒa@F|h%S0 '϶)q4W<ܝH*YLK+w$dl@$|S"{FܷP6q`_Gx%tmՕo]ݔ}S½*o*v1Ab. i ܝ7W& Mph3m icuS7cf&|{xÖhei{ݴ6v-}?>O?? <?$9l-eixKJ .dWlӰ\s~Sܙ4 wаioLN*9rim2ߑQy`ftJ Z4|\7c|b^dוN@ɶV.@#lgӚ!HxHRfzxAw_`yF,TA]Y,%Nfwo7/tv# n21;k SA;)&5Z{_倁w[u I1=G?#{ ]yj#xNhB$~րRz\.^ȐB,4,:Dd'jZ1>7Q̊2{=u;4`\.za_ !(豢$Վ7\[XT."zkDiw^t VurLbJߚ>r&(AdnF&n:o|aYlFXp>#oO쫿oպaWh.h,l >H m{GNZ(o.B]-M"F6쾳i:W6 {ICƯx7q+ȿnrc5P;Q[Q(r;orBCŷZTRqlPyrϝR^'Y} )Kz R>YGjj=t I " A$@"B.9`=U H5."*-Ћ\8ƻ}{ss5 ʯEw*X2Ik:P HJ]?~A=|~H(,Dxg ӀjSU[_g_Uo } )y5N:o/*L؛ &nw>o `0ف#dPɠX,NT"pɧic=nhFGN0 )jf:|;ii) ]}@// @w̯ZΜζԟ Mykt?=8XSL!M)Ёp IlzX~Mύ5`'FU$-w)zw`Ɍ ٸċS,攙;hX1M^G}ѣ`{MD1jW?}a|([kvM]guQO;Q_yƛ)6#-M؜u՛bM&"qȏܸV~/(5Fk??g1(12sl/KgX/ KPP瑑%,1[<{\Rd%Aܟ8kجѺocESQ5BY&xWjAsEGTo>`ˑǶVݷoOŮat9[90 TfA{үx-3F$'9$}vعDy֞LZg_@aHz/I/TUP}{%QCqoa֮H/ٸu 6c =PP k>Utb+7>ɹzӚ-sia9O ^Ux\v^عglόDa&BǒҪ5Gt {M5v?wSp|Flicf\=f]d9h 0ª>¦' 6+Ɨ`$ߖ]W?+X|poI&9fTA?1cř*+s1X=˸&+mXؔmg&0Z{+W3荃3U{=$Mf(\~X^/Xq< >۳؟=BNGl).P|&ܲZ3 0vR믟a~с$ڭPY{+fpw^(L!-KO{\GNW^-E8 ZV@v*mtJ$ӲL-?w1]v{Gi\m. {>vz.K#!$oe !>$hA@4׺Elr4]`\3闱p.6v(d)_Fyʁ"s\Ǡj\FJ ÷0N$$ / }5GTTk?UgFS؆QjEWT׾ k]۷= NN5ʽplq49 ;`xv6uu)Ē:+aW0+OAgx.\ʹ+kbK] 4*[:wf OjQ޺bϢtFzEo?IQfŗRэޱ;8x Gū9{V,;9;8ȃ9aЗB@ BS:oF~WWOEnTFfwS >kւ9^t3;)c D:66pn( Ű݊E /[7ߟ^z$~E`yJ(v\ŏ+3"LV%2\}9`FJM-&=D FӉDİBVeJ3/a![iGo1YηQ>KrZ_n6{隁ȪY6aaDɈJ~}\X˰JBҚakvw`$z^J<(ʼ/'",!ZX*:zɜ ~}=ܦk{=4R jZ]+= qNyOC;37Mj6xWMCPtALeKkd 1ƤŠj)W );QKƵO"DDcd"x[s(*,?C,a/>[u8yU}8)iIF GV=ŷBx]:ElhV)2RO#ч*05 Rb<ˣ_zoA:g Gy0 LܓH+^b |Ԥw,h_v^ ҾOڭY w#GWo WLeŚjh3 q/[É G+fqocfDt_~xL/d /喼3adSv:]m,rn:;j=ܙՖP-}7mq8DZV,ՠ[n Zi$TL5sכr,Y{&GcVJ:fDpߍy_O:n!S\$; >F s(zTh( ֠g;?1 !yv,Y> ^0Q{^A&g_\gs݂.lƂ8/f?]qؔ\2keREe\]DM r5ǠQgBZo0.xÍ?D0.J5n)N*zIs:4*r]Fu}(֠AHZs&d-x9;֔V{p5S;{OO{75r^i';QV.;Yܟ}~C?q r~1ڼW[_l3RU@9~B4V4 *#`ޒ&#ZqQ0Qzgk \az{rG߮r8KZbeJ)fH޸lB>2۶Ĉ{ƹ!VX~yJڐ,Zj^H3'`fYau7o|!<->@j%%QPO W}C's˳9Oߧ 3\Ϊ׷ O_K%qm+WG0bf a!VڭO5KMtAc.yW i2̥6dp'Df[ ! 2;wfg&?xPP)3 \b7d.qBCmh .ң^TE߅",+pi&Gki-//uJt6 W6 {0;VA˪te׼`BUv[QrdɰMG`bYl MZa |RޱұӂM4}`bטϟ&fڕ tKw6LӋ>ۙ@>S˦Zۗ5&hd=Cxۀ` +c" Ѣ,6>i'v5$;2÷dUM0=Drcw}lNI14~Vxw_kuGU|qvTrJ~qK\B8[쨜u鍱qҐ4eSք9qahJEH(Jт88K2p55NF3oþ'tfzh'd[9 \:)Z{(o4m#'׆⼠sm,_-s|6@UYa°}IFugf 4 HT8p"{)`쑲=ZS%_+??{/MNSc,Μ :{ʗ0YHw0a胱Ǩ= Δφcu{, J]F%pPKRv`TPK.2QR __MACOSX/._123.pngUT ,`ߎ`.`ux c`cg`b`MLVVP'100i i2`CB , VAS!XPX\RZX Q8Hx00#&&@ - BK-IOu,I,N.JMsN,()-JH=[.Ĝ aCLӁ$(B_aibQb^If^*e: Uۘ@43ÎW)o'Yk q 'P F40KYZ Pne41$ ^1y 4SYL5Y LB{ j@=ݩk<}c h# -,N 0NOO?5iI 5 m"GDS4?ex;,;Lpo?8xE&~7M# gc,A8 ʤޒl6X>-POP@f*gaQBY&<8+_^$4&/qaQz4*HȮG g y%)pA:ba^ٜ̈GG0 *),pŌUk`hZ$4"1&AZ*cKG{ceZ@F VȪ<":?IOV:1͈\3xSs '(\Zߔ)$hah- W`yɊӬedBPD橒ﴖj`S"E)E OH.PtFZ1pt@Da,2&-6hEZyLLjuI3w&Bu T`9ڪBch~eV$ \pFoZWHY$3I?*qL L(ibLNƑl5SgQ#VcǨ@/kLHEED5\l"L`JL]KbW>oQJh n'A-S*Jt̨=l AE/V O(0װS=s f GctdcJAdZ(T"9~$Xkwh֠jT /6KɂGp *,5Q\۰*؋T'Hx|_62ٗY'&zPm7y:`!D0Q#ɬHSþD ,mD`M6B >뫚 o,s?n^N$6B wiǙ}.giIn@-'"IM+1F;+h UUQܻ#;VkLQ&֩5/tq:vc)JĩvDS2@&0R/mZ5CHA ,J͎e U4brY}eKD-8LgnKʼ1aayT^ J@dJ gn<@E[NX Wt_+JqWI(+гVEk7lf9S f"gbY0|e1;ڕ~,#6m)U$& G׌GDcY7|g *Fi yM),:Equ%~z[|#PY7'NWx.W>>"\ oкß+q Ű UrWޡ'iu 5 *Y.>zAc!3ɤs(D'։HN6[ myY^Y#v@1@fkŮBF %ty.U%0gV9h+! ,S r+?(DU%6RVcEGbXWonw#B|<ڠ2`%mzfL75>y?fUHGcbPK,+W> $PK.2QRRv`T 123.pngUT ,`ߎ`ߎ`ux PK.2QR<]L __MACOSX/._123.pngUT ,`ߎ`.`ux PK-QR aa.jsUT ,`ߎ`uߎ`ux PK-QR,+W> $ a.jsonUT ,`ߎ`ߎ`ux PK[Gzip4j-2.9.1/src/test/resources/test-archives/store_compression_made_with_v1.3.3.zip000066400000000000000000000023441414265447200303720ustar00rootroot00000000000000PK ctN/ Passwords__7a76eebf-0445-421d-8dc6-012d1d6bb33dAEuG=5$6[[ |H1T[eWɟ z)POεCOGPKB&PK cVKN, Note 4__ef72569b-39c4-424f-95f3-e35e90250923AE!ʷ0:Q>!XKMi6(/k褐@PK( PK cgKN3 Private stuff__7781229c-8441-4db0-b88a-906c30d0f004AE܎!חL`v9G tLm6UPKPK cjKN, Note 2__66313c2c-9d34-44a0-a84a-4d1d27c0dbb7AE$`04z+JxS1q>9`|PKPK c#dN. Note 3ql__c9984480-ef73-45f7-a026-20e989264683AEaDhG-ɂvG@KpPKPK ctNB&/ Passwords__7a76eebf-0445-421d-8dc6-012d1d6bb33dAEPK cVKN( , Note 4__ef72569b-39c4-424f-95f3-e35e90250923AEPK cgKN3 7Private stuff__7781229c-8441-4db0-b88a-906c30d0f004AEPK cjKN, Note 2__66313c2c-9d34-44a0-a84a-4d1d27c0dbb7AEPK c#dN. FNote 3ql__c9984480-ef73-45f7-a026-20e989264683AEPKzip4j-2.9.1/src/test/resources/test-archives/strong_encrypted.zip000066400000000000000000000007541414265447200252600ustar00rootroot00000000000000PK3AdQar Ftest.txtwRFS⤙yjNi f$f[>C$W).>Fqဋ^;SZ7c~p2bWaܴۏ+ 82ŮBZ~esc8.*K+A_q;fF~&~k[P,0=:oӣ>i Ď4]>qsDf_c BHz }5sre% *s.b9RB.g+HrEI&5V9|N3i(N{m'COՂg9/.T<+LePKA3AdQar F4 test.txt tvtv v fPKjlzip4j-2.9.1/src/test/resources/test-archives/testfile_with_chinese_filename_by_7zip.zip000066400000000000000000000004711414265447200315360ustar00rootroot00000000000000PK cO]yfff - .txtaaa ֲ ccccPK cOإfff.txtaaabbbPK? cO]y$ fff - .txt p"S Q"S Q"SPK? cOإ$ ?fff.txt z%"ST;"ST;"SPKjzip4j-2.9.1/src/test/resources/test-archives/valid_empty_zip_file.zip000066400000000000000000000000261414265447200260550ustar00rootroot00000000000000PKzip4j-2.9.1/src/test/resources/test-archives/zip64_with_only_file_sizes.zip000066400000000000000000000003151414265447200271440ustar00rootroot00000000000000PK- 30OcCM hello.txt I Ƶ\f7 4 $fVEPPKcCM PK3- 30OcCM hello.txt PKKlzip4j-2.9.1/src/test/resources/test-archives/zip_with_corrupt_comment_length.zip000066400000000000000000000006171414265447200303630ustar00rootroot00000000000000PKM|Pz5 sample_text1.txt51rC1D{bǵǧH9AaF?(?鄀e?lJ ŪM,uP/a *:t;j6\hf.mv֢%#R⇴ѽ#Otm̒ЅngK&uD=K_I9 4ғ_%)\3ɑU;)ҋ O1򜤝L YKZ? ]ѷ! Yļ2\bcLL91L1i)nRyڹa,۬niX\]ϧPKM|Pz5 sample_text1.txtPK>;zip4j-2.9.1/src/test/resources/test-archives/zip_with_different_passwords.zip000066400000000000000000035562611414265447200276730ustar00rootroot00000000000000PK3cܚR! after_deflate_remaining_bytes.binAE/$N$a$/RW$Yhno1> 9j]Y#n4!_|"54+PƷlHْ?Yux&D?%/p͟_5.llzU&W.OxCm[/$mjF唁"Wa[CTA/Y'iSȆz$wrr= ZpkwV!$^tC RpHf7qOnFZ>#@b  9="zTA)JR[UCF<X7jCDKbaW Wƭ8Kl0 :a } Ne#79wh)oLnFd%P׺HM/{:<P!p&%Z$i ϫA(bR]%k5gsf=.UniFkG O-f]vV[}_|&1qSV(ɣߧ?R>&b,`;^\ykj_W?+y7G[1@S.+%}lS خgoOV#w\oS[n)ܑ|Hljjte#ofuf [0gܺ\HjV$r8Ľn)c[ ֕p8anz?%W+LIN]CTfp-q ~MVkߵ;RTxC5?b5;R=aD1%:ʜr!O:6Spt|H*cOs;o,.ZsS>~{Íkd>p$Ř]fO8KS{ZJOl!Zaĺwe`2w lQK@cAs[}`*}#௠(a+ 6j3ad<ҩ4Zϲ$f$~+bhztP|\n(ڜ!99%`$ı0Bs~<4Ze|[{hƮ~NۉIpqd.#juXɗLX}j$O,u0nVzkWK+*/SѠ\ X%p&6)pY5מX-**+DĨ']T9Ku7Yl.!@ʀQb}j$:&7 {<9ܫgEm: i%=Rhz2>D/5?{h 7dDssȎ c6s{NRIOC)f3歛~X ܜR5 %9eא=|gy1F. f+$Ko<7ݻTX'S6{@aOr1Ӕxuޢ]#F?z'-ce@* Sj򕋇Wz?O)4x9{ M ®iս19وmJwkWED(_Q`mJFsfHٔ{ 6 iG)|-!M!c.Ee"UBЍ!xujnHRYJg;HhRO C 4WqW ?`Rt&:60ߛ3+DkTy$"nmR3s}v,La̗֓uO_%J|h䢃zIpӳgNPk$U UAp/CNo,;˭LǴ2%oZ`1VE-%V_ U2 6Kwn(L[s9cDCl闵zvp2o7NU0XkOy_mU OZ$N*OP#qͼ!%(0 :Kk'A Qډ:F+OǗKK4dJ=essPdKrZN=>~)YhX^A Z4Q'_j27ㄨ`AV ܆ UA+J>o`ZSijDGso))`lsBTN{f [׹˖0k +U %Q3E<:oOABo\ %,|uF;bAQEz@S,)`sw& IQS;,'^ynܠC}>UP|g=8 d ?4ٮyX7wD_xkwd$%YdWŰY~tŶ>`'#$:}e (_B< g-E!DHE\"NZBII\Кm4<ըPCTWV@F,i UOv 2O~[ol/Tz )Oh3e:^kл (HXz06MP]JOtB6zVy#3.Rjڜٱ41z ?o?W8ycO\|>J`k~P2pkY#.nԜ~_s?*ǎj(!|6Tx,93ߨIPʅFv0Ik輶f [a*\4s/,k1A%1+V"c2cpLTgB?|P<}بl]ց4tJK@iU'BBR(q'zb)\6j ?^*VOOrBv}{W~N}HМ|E2/45h>sBϯ/Zy}`q:X: Upi"C9XYx!\vŀhwoJ5a%jb!*^G&wa g:8sfs[?3'~%P7yz~8P*b9P%&(?(??](gb-L*4P#PK3cܚRZ file_PDF_1MB.pdfAEFgó@\O?=˓> 07, ry>մ~}4{}g^ z o,yЗA5$7e(?,NK!n?Hkϼ_k3X\MJkӹQd'>ݭ )EUor;04_^TfAϘAkk=4ߧ9s :`Cʶ 2jx쮥o!`D+V8N-D5pp't!F?-jKٶwt%*!_s,OpHz]7Eߎ4=ݻ260B%TԄPKoh`oT2{LPdD0!]D KiSL;H@f- vc~j![ь"((kdsF@r1HGJxnlt>r~^dά;K7 7&#P(C'0D:U"E丠`aK։gP:r{Tc05붵&}AϘ_Z6#`Z{$qٺDO?ZRw^f[o_`}5 $ bMb؝^CAE8HpX`Mů-SMl=Vt8WIFF="p”U|TF_G/]P(/Y ~(8]m*n':kN$9LY6!LɕK9UtMB)Jdh{1+4s8stL60 B4>qߠDi\+4!7Na^h᣶ }s\U +>Gl΂ꌈ"E=#"Ig/TkmU>? 8@#G D*k*-+~Z߲didDʼn?w 9hR>fG״"0 ?+'ۮU0z|dY =/Yrqk˦HRu 4:ӎp(D|.(B, Pn'7 gz([h=j v.PnM#rp*0m~X0ץTv S=Q64tAg}\ޠ)Ў !L{en;]S!#lݘxA׸Ϫ5ȹ;&jJuS|0,M3|-2htg1tMR:BhЛ~\fAɃ>AzV- L4ho4qOe!کy5g;bJ(*wMgƞ ,߲ESU@&O x7[ʪ vTC0yW6B0GeA,G{$pwIhk C@Gti#1jtMssE-7V/͑(xE\΅6n~TlQ#J ߡ"^K ywt>rn!yjr m3bΛNY˴ a gk;Ld9 W'gmڎ hSWv 5*Xgd aB㽳ZC]sJbiI|FbP,C/^[:Uw[F +J}U׶'ߚ~>{K]Ҳ-Z|ٓYq3Vճ>Z\,/.`Źc1k J3@:Ssy ]lS}I#S\bšn%@ZTa pP 4-* js9vU4fYnF\q': ȧM]pospuaMT)] '$r,٠iZkw(4xVk̮!ↄc롘܀{&,.HUD _a:xr~g^Ib>ٰ]Bg0|FАA\WnN@4blqOI@E';$׶JJ\ģh"VPьJ= VӤFS~Ede̓UEn ӻ p&B=Qٶzq>Xo|t k8rLiiMwqV#.Kd4bCMoNC6SSdy׈-u gv"xuEr7I:FPؕ IX 8!YEL. A>-D RmWӛ(Q*jޅS5Z3x.sěyշaKR+I"uTWPrԻLcʼٯg04Qxrc-/^ tCb@) EM*˷ȁD.6]2 M/3.Z ^Q2]) ʷZΘn*q5!*p {`ye# Ah8 hm)E ; 2"³A9יmp٤+E]hqL]A &]\N q /<;^ %kzP=oD)xh/oZ %t+m#O ?.wtb?>>G-lnQ"O0&!yppUTz}*no#!3&fɀ] -KM_݁Z8I x5JQկeUR$C;.CJg&9@G艺?}.OζYCJp\;$՛LBO UC4Kj=ʢr1 2`hΊ+όE©tɓI,II֕9W󦽠\)-qKBO 38($1Z!L~ZZ}Ct¤pMBZke!|m('i;ü[GCAC= 쭕&e=1'dS(q ϊC>RPe'/Vgr  _Ճ B'2/Q%h3:L )xZӝWYNsﭳM>fdpч|v9bmzZp>V_c+q|&Bqhlfz\] VZ~շî)|~{A,8cz+"z0ƎV%"HJJ: Ufg 9@RIww21{5PfhA.bq=˂oݧ2Q+L{Z`cO"W3BP*,`G|o< ||S)14vŘ+$^NZyLY%ԢS+H|9>49Me&6 8XB(BۇRMm:W;j!c,4ϙkw˙eKs|mY>6Aw2gV6?"R_ +t8#{3VMd^?"ս/f".mpvʲTA/΀)'M!0O:"NFӷ$͝|WW:qz 5¼hH@8֨'x[n_J 㺒,tiM8lv0XPb 4`=tpv7D? Oh4% kvOxbX i]GV/Ԙ4>s-)^ȵms͗Ĉ_mӵGvN+3'H~fc؎ H1rs2l=$7:zaUbSmBiA||mVЛlXT;+!FOE;sg!.xO~1/԰c3U%n``Za ȥjqZT*h;ZYF΄ l=Ÿ훡RmμAbyLe`vLdI!Uv)+"Bv+vz@l%ww*+ 1"ri3K9%ps=\Yu ``W5"beYKv>ZSA|<;$qx@  4ɉ΢kDyW/H|ӆ(8߁j''Pskq6Q ʳ袝:SLt{>L<7I I]TY+de闄췺^^ý70wMV!Q*Δ64gtTzvsRh#S%[acG]|ÉE cp^]]23l;K?ISOX|-"3X1oSrr0Z͂Ytvy5ܫ4ݟKx;Yb/w]Jb*biwӾi̘?xoR*\0n:? 7$b bf Ǐ1 WtػBi rѤ.@*k|`Ү ^yU'C{!%ng vsi-7. U| }OlB\U62\uUۗظb"k瓑y\1dѫ~¢whk?X$0n#PwmoSp_Fj$QM0q]H`V-CS_U}WcfM~*Nۅ6cA }&yNC)yR궅w%QڢQQ&X\?YBpX]7LßߨEDHEta~#ex՞, ,!$Aǹ,,<7(/JIU3q`YpG^iИvbraٶ3i=lqaq J.?O9d$dU:W!UFW`怡2="\D-ݕknnNT.R`ܜvǫsWU="#I"wbq縒Z*oC?8i8JH~'b瓅&KH 2R\j*[6mj>TAhXs ) P~[5曰 )5 [c0uDyzg=(Վ,3NR$KbT(M6q$+c|h٪dqv'7u4sLVH5#-!f\Dž vS+eq$h5V|4[YM >&ɠlkZtWs%?O\TŚoS(-Wk. .ZgUT+-gade_XNʢب1S"D3WhMXgR:*tNXaWn]5C}qvf5Zy "ua `>jr}c2̕Cv/!׵*:EAGF՞w~*Jp\ݯt)3R}qLTZh5m@yp *J(rSx{܌81k}`K+Or/Rß["`:GDfNڃԀIJby .w2[S>%hYm yd[ԥ٧lZ½ɧ[p18WE}x%$\7[ױVњq̓2;W/KZ~9RJ˄.^Ks3gܫ8wT_ABc6=Ifyga?N0mNx!ȍNC/I-gp9>167#0KW7飅CyqYyX,Ȕmf*еv8Y{E{OH e<`X*tӓp@ S6pC1zmh t2\mџuʡ:ˡ]o3:,qvG!: 능ܟC6dW,Wd$.ފX,I?fqy0t4]o="e/+g'sW]ҙb`l&٭)Tl\zs9;/&@=U$$M! |'gFYl:|s]Ī~"%ݵ~?&VV֥b̪ # D0F\8r\k N03=6$9O1 _o<h&yR]#Ivy%kR1π~X@. ..xZ 4H F_w6SP{NLO#7nB}i.Rtʿ+r[ܜF ~@&Ɂ<{CR& yެOLgN"d< n i0KՓq]olP:Z_ax0%!;yp O4{ݟVҙ«rʈ=lLyg3֓BK3\{,! ݵӁ!=-}>{'pT[VπoK6}f4z UОWeu~/?\=A2|v4KY݇i[#$Q2 t電dlyvu)WV02~G,Gh56 X [ULyLݠRkC,J<O>+wkԹfW |ub32= oxĆ{ C286h:X&eqX黫ĉJAh 4uӼzo(ֿI›ջ$!½qpX_{)'Gہdž|3xIZcT_^ﲟ4?.\6JhĜ~Ghȅm[o\i3ɌL F n$'q' hanWPL}X^O)he+|% ܯ8x3nѮG<]0SZib yK=ԇ&efjca!7HuB.ocA.oGXmh-B#%tg/5-4QF#.½E),-+9}2f zh9Yη ű2}B]K̡cτ/< D_z25VJiesKBӟ5iw:SwsNSig9}AUDh98?r] @2zF ZD}WX  4[,I.d9~'M}Pnҁޒ?O>ϻ.`}QZoĨ<U 'ן EImnw}9Aڷ< ID$^Z8$~WFГ?_~)0@,z^@4Nլae>s ˌ{Gf% "_Y8G%׆=z ".uoR=nOeR5s(!nJ2ީY(J$L*[1`,G:CC-0Fe 1&EkPux}g3o$&_0;wne Sx]5Zt1f/lr9g-J$ lTԬ_xN%'DmHEdnEF䩲6(u"-"}׏uqJbkPgЧ<3#Ө&W]i݉1#^})|\`G15!?rlzRiqm0˭vy^>tM8κlB(S¶t[K?_`.?ߴ_{i""p)DN;+'ͧB["$, ;m0O݈1=sJVݽ~xPPtj)r>RdAcuYr 9J'zB8J/Q!9ڲP5_,Ť "l`sӰyWz.Kd59+zJFbϣx^1y.0_"bkּx1yЇj942!ލپʭ=7*rWD/TO= 'RES#si4^,<]•[0 DW E>~e. |OFsNpN4ma«C/.ߘӕSơ_&~XNؿV7$dcٛ}d6$*XUQc^"69"S)4Pjt{M*G膂#M7XYE@ANtsQA`F8cR!VvE,S;.`ufGk:J,+j,m謖w+̨MﯨtsZ{EyV@SI0L Gn.sO2LԠzRҠA6{lnCb딟1:iv9ThQw@oar\yLZU U*"pl.\ 7(EZ5]d)52 >ePȴwf#p Hgx Y30cg\1@R4Fgvv?HFJ_;B5qMNɑ\bG!A$vWpek pU"\^* KX$Gq~V ?TֳhWr[Jd=&uVR%L֞}Q~竇/\ؿ Yˌ w&jp /zCg"S(0)$YԋϫaA93<:$~Hi`^mG;w?{.6^zV?5pn΂]SAVC5Þ8Ş%vhSrIC|F4j  Nj媓cLN5]JX%/u7y#?=b iP6xkAzx,i ^ 4Tr|$GWk 0ΫϿ:/و=a۹JHd}3c.E AQd/3]5}èdFNٗ&5Hi?zk2`I3v!˙ >lF- ZX~":`/ؽ!*Ⱦ,R/ֹ`1:eCF'}rB @6Ujͦ}!D S+s1Y0)xߴ⧈s7!yR^C472j U6e]2$>é䔂)|g)smNt  VĩD;;n/UUd{9Fc^z1*>੶~OrEn۬;ߨv-bL腭B@gz ѝWj}曒GJ Qp@xwjVR|mSa2l؂Dz *7M | 7-d RJ0/:v/.f2!BLR1k_)RԅЌGK@X>\Ljo̚pc6Ƨrkz3 (9#Y2by1mIB1,8t㊶[ # qvLc]BB\ֵ|6zK֌!sMXq9!z]1e֚Vu?T՞Es|b ,ѻf &i9Pơs" !,Ҿߎe&B=<^>|  Hf{crOӏmx F( , <5Mي[ 0Mk`׺¡Umކ};ͪr4-9FryS+P.Z >Ht 0 {o_tAbu r78CO)32Ex޶IJdln:xғ ̓ # K2_g9GR1;߇i-u/O"GHrh v3jQ^N{We>'o?:tsx@8> |?8ONB[^1FseLJH,aJŠ4/ N+ly<qq":kyO:{HxmQtq:7ɘUቾ^ڂ9 !i UR7`)yÁK8$?H>A sqEq0VHZ$ ԹkkL߫Z;wI/p١>(K銆G:l~#q(,wB+x'x%ٻ&{.T N.OΈ)Ր7lb&&y|ޒ (]a%#"|mW|kV8`G[4m\KLt@Q|{Jm#Ced˲S!_x =!%I?ڌ{"h&Up%{txGP""؏^@3d~=L+Zs rZ> @=" QO),Uڑ$EWQ0 ys8:ͬ^ + eV4AɊqGN60i<-Y2s2"8Ԑ+<(=V_7!NWo 68!ǶJ']#1cN5AW9&;gf@iu=Tesm?wԽ@!%1PacHHEq b] EMA0, nDx{ M^0G1nR9gjXC+d%%BEx2x—m hi&w<4a>:~EfD+uj@[8 dIs#1'n8U`C`CeaSe.[mQ[B?Nх)mO{fb faVI@q]櫈LgE:QK@ޝ]M-RxTEO="Z5k.M`2 ].䥠 Aq}ZSŃs+L<'ˀӉWRĺrwhE|"K#=(Y>Tl).MfR7 h&s""XH`va*5%ҙA. Q`\q&D"y¯^r W`}"`Hvvz <^>AU*r{knc![\4ɋ$ :!?PpJ5K"rW F]*Gԓ+UYwKR$yf=IVpt9YmBHae++ԝ+tOG_o pnUy쀧ȎCUQ̄6q{t(fWKx}'K$ >MHz8E,&ڞe64_~Ol/^RJEҊ/3ڗ ]p "k`loZ5/>ZT~ɰ?X|5kPHSeCBűc =0n I9 Au$jIa ˂UcʑQp5|ۧK +fY|eakWy(և*4k)q n)˲^"ё |G_Oہ?zpfch$ȷ4PQ|H4uɭ M"W8h> ]CvdJ:d(8EC*X,Q܋[aIӧ9>k9`yȷ)) |AFz(uIMĢGp|hu{@虹i[0Ȉ1K1_.w?v36*d-<6M~|Iآ rv(e}I V2dV\:sd!p۫K$1j||:@`Vn -i4wkQ6U!*݇| )ݹX͎e-ySYU)idHCMDO|ZFS*Z~KHx0;dzw}0@1{I敳hU*PҮ*#!劽n ^QT ;ta GitzjRqK6@sTd9(D_w!+xa,Yc^)sc*=nw`Eвm]5udݡ n~Kqn#TPЗk,Wx!0w='/Z=l ';~XԀm.?Σ5us6@.򝷗OzegRW+$AKMGD0HF 2a#g5=>DSo%rش(hV^w<84""By8iפAiC F=hKaQ~>FTD'jsGmG&g#oW -Y(pja;ԏh;zj-.WBߴ^kȦ*^0?`1p3j\7ѯ7W!I0[D1A#q)m5\$8j$KFVA!IpV^or 캿Y+Bm%oy!=tQֽ+üf."=} D*!CR"?I Yf-kv-flo]nq @M" *̚&!N]n9Y;:Wͅv=p85#K*QZf4kޓrn9+'<{L UtwJhO 䔕:ærR}8-iS!(GWƃf7P}װݬh[FVf>PgrD[a jl+zрuI\话Y(NhqAou!- ˰+ݱ6t=RcyR@2^okD΂>`?u8qBk/,IB#ςt,I+tL:,?TL+j#0ŋ=Y_AO/o E=:* ֘\$&horN$H!o |9lƩmOvώY^n wuANqyI49,uLܥEkchUv|>?cYU$Qqnc|K:!43/a$[v9ܢdiY.v󒹮R xT y|蟙{ * u(5t?U+K,`u y)O09 /: O)|rD(Tr+7)7(HN -wf:\H]8@Zƍ8dJoeḪ->xsbk"%HLɭb v4l -wB/oG%JCQ:ha>g [EelR]|1ͯ򭀷 *TԘz `e3#i޴ϭ7Nޏ$]G?P,5+nl*䃜J-XjU;Z1tRțU|^*]S]PYA˃EҘF ]:|.d^gQn5vuHFMuUk>y6M{IDmZN:â vag'!~J`787Uj;?YKJ)@ >Ƴ~խ]YΐXOz$_ o-F7;T-3+ \yle/gd J;h2O JΉcZ?#S5 |, |4ᰩ SZ0!ys[`X xqVӧWZ0RPpM@2q++u*5_+xGwSW{pQ3cOjt!3'l#bo8 ҽrMGղbX2֢VaxBK=S!u!CSR=x 0/ʬ 8f]"GRI*`h v/Q䳿YM_sOx:`){}޿2Ġ3O| HLU)oV-y8bmr\8NTyhigJ wG|^Z܉=ZTAp<0U%“ F`= Wp΂9*2m:tRCzR7iK㤴H@(;Ih{!ƒ]ė\e_yy6II#I2Fӻک>8z\fpmc_r[RXVAQD&# x|֡3uV+$d̴ֲf } ['yþUq4x)ay9+F L3`>1~HY:LILm!0{$EM%=5r?_P h <=Y]Hr 6iv+H>G8 tY>.KFcìnuz֕pT3xNq,P2n6@ӀmfI#Y0Uد܋=+J j{ /u92X'iǺ9)4=SEIgtxoCĭɅB ߊԞR!x&NVmR4hDmlde) 0cx)p"XiӒ581*T9?+ '52oxbw OЄEGJ]yr@AdH2ke0tdbw}~)Djmg Si,%76>D9Mm'Խ{W]S8{+K/(nx~##cm a&GkjI*sAL Sم)mwr .} сd9Lzƫ%T&f`r6p!>4̖kÝLfl[9o7ۉ1^pRl7W9 ErH~$:сG3QlvlUv%(:19'⭴]量 /vYbHF7DPϻsP܇O( [-`I\zڸ^Ko`(rTZ FCj%߳O(P7=]Qk(ڔzB q7}lJ1̎,U)hQ= m-)E%5o;2pOnx [źF3fg㫹73J+ޠs/'֫k6wpK%0nQL|t3I@v3 R+V,ItM@AZ)) DK<~(Jǡ#m1~Wtby^fu3|W ZO{(, 'ANWN\+RUiSiՀc{ֆX+f`#hTR1)-ưvi#QPp!-y/ UQA>wQ4on+%" JJZx>3߯IᓤKJ:J,R̨: LÅDֳHe$N'mr2dК&ۘ`#/V$!2w/3|FK)`EնnL %b7 Y}Hf+E!s@EDD%5L̈mGweEH5pUY)[c[}r(h]l+915]oޮ4^9upr 6nSoj'QdWݗAxƔhDFNJpjsOh6We\Ͱ*Mdwg;;Kn?i?%(&+蚽hAeմ,J S V0 k:ӝw 6n<]]rwmT*Z2v#؆ F)^d83z9Ė1 ;YO*_/I>7M+}YùktI CTϛJ<6Sk o]pW 'ƀIP+Sj e <ܡxrh!3]JH<3YJ-`/J0k J|=f$BVnP̅x|$Vd,#'> tq^>+~5'd#%}ۡ~kXz o~s%}LL w+{*RȖ5VjZG b}t'#Э{~!js燞+3|ԭph}P) Ч),j•JfZx㗼240o1JPT2m>XK 6|$gRc߳M>X^9v CD.pc2d{w,}BAr<3qM.!сl\=BmJQN^-n  sPuIS6SG3"]m~CT"A`DXG ЬnK͑+fLK`dJqJ;~Dhg[{D/{vDRf:#j;T8٦0hCe5-y9t{(Hz>%`4"m-;eȖځudz9 tdnaDy5M(`Regquw{d2(e4c ̍_Lf(A87.ǮJg%4H%{1>:Oi祄 I<,nQU=d6ژ FL{C,O!=4:ټp!iět 1'0D6tPuZb|dː }1"Cz _Nv~n9kHDuJ+EA˒ً{LoI;?! s9ytu(Up@@]Bv=17HGkK8J(Y>^Ze9[tuCQFBs&l5C~>B -(Κa6p_ktp7Z2TC4#]Rr7Vύ%g @Xɷ X ,U}7pvٚޤurN,K]u5ƐQ=yc|{w {se4,ݯ+!IGo-CbNyW+0iס">-!堘B˲`%8QgT’ W Jf߼Wf?q3(B8 kb5Q3Oʜiilw,zMR"x,'t07Xk`TE̙opX~-X t3'yS@-y?юGzWm5.Rr[0q4]S5mDIN W>aiʣzסʲ?/g#*VDycȐÙqoS97Z`V˥8S7s12ój8Vc*-Sd1]<"{Rl&z[ȘwylY3\7L87'q~pnh,`Ӑt  C}Ud@ YŘ~㹫"jY ^%6h=H]I[ vSnw*B>ύD`62͙ySvFM~#^d3;9A/$ ;=zC0ُ~ ?M$vO_E7,c#|;Hv\~򊸨HxZ]68qRb.yi凥Kd~}]\* N:>Y뼃j;1O/MËu̫^w13o λ o+9 \\8Xyή`9 M :ǯңlS2ߧzUQAy|"91_4 M`5ƎwoP+T;H;y/uKGIyj ^ihFz:#=~еFZ g*6D&vE j%|N;R; [\_kxȟS8 B}az T Ko:2 f-PALMM4.G?G3{B!S*tƑ}u g-ě;!S{D_O=nXwLiJU]*$^hM7 >" 7 Ֆ&w4t!1НC\G혁+n>Et^LB~%!"ErJo:,~2CiiT!x<VzdC8'?^{/b$6=38fJ;%:=PEN{Yzl VS-abx6 z>:pcw^}~f2${zݘDH=:P j,VWHVg3y,YNA0g"Mhhc-cJ+T,䓀]5*rj"ɞؓip"0߶R?\KDb!)zINZ) cc rwUcf-Pem5Inc?h*s1lw=uǁPb!x} zMi&RѵP;W\+h}UPHl1ji~3SɔE-;ݩM҄)~!PK:"܄uJbЗjLk8;ke.%I9|M%鐶-B^9XEdUuƈLf:Xx*]ڝ rp$+ckql c۪1Cǐ{.OgF=# ս< |.Bw)[03ٴ<&1ߪ;/=YoKtO՛r^rx?&"Q=^9Y@ i6@?QMh~Of}N$E6PWV&W4e<zMO/d} J[}p-eK}OWZdQEVPd4HSUexDuym4-㘜ޝ9Q|#`͔;9#=pT'sL&F|ڞ.4=i=%j{ B ^-j7t j|Աso`k~x&JT5dW,ۤ7fw!:Aľo 9npK3 U[rl,Dxt޿w`JƳjԪߨpFgff-wMZjb4QfȲ_؀O="vӳU}XiLy TA.W>jAL cBT7R OI0~'I9!Nh@?hN"<#]Y9f\t y.l0\lQ1ϲǼ(઩Ya :&mIz_ SpTȾ+n.}"`zzא.)K ~f(KcJ[WP*?pKO3[,bUQ?o!cUP6}u5:'&Yƕ-E#; )MG)gojhv^l"`:xՙIb)%6yN~GQ )')»I-?X&9 ^*)ty GP`N,fe÷FiC MQ6sw}CSeq!f5g8\5dHI٭:"jQm+S.Z`<^X{طl}- bD&ºKlݩuU05T$3'@&v}Ҫ]v!i`kGWc^ܺ._*`0p&)nSь3ƪk) 4A1wRB_(G& P5ZdW! w- 6>l\X[l AWiХlVՂ"Mj -wZQ%du5"+˧7O0~{"!Bo"{1ص@TN3:,KTE a:/Yw-eͪEa$$sz0n,ͬ * هǰGmD8Ed >WE7b;r߳!J<ӂ_ouP%hh]LH~S-;wA\oF{Mό\_m?]_1{WQX>c#Đ|` j`micMٞ!LGaq/U︑٦Eh_,/9fVVmJ)4/o{ d[DdȾ+fZp\. XB.! z$m[ZyoU!zyl撊8BpMu *'ʬǛZA]%O<\w޹8+Fac@|@va?V+B3 D̹G@6U;Ȏ6 徆3q )n{n).,gE88N~ooN!&.ywѵrMHΔݵ#,(- \\vbq2{2+JtQ>"`V|zPPYtD3H|bZZI'cK](bЅ ? Zl'39\39DL7T5Ɛ渐c"mJLGbՂ,[SyCmlKf,`4'(P=jX$֨!=$؜ED ަOU'!2q7 8ZS~ݸ*U^C=sgt#`̋%͸6 9j>{ h5-Wر'+/~_[@ "Ho";ғMCv:u>4$;77K7h'90|#ӑ;GU|?gMeQ|5eh+B1maRLR{}ܔh*$d'PgtI|k$MN)İK*l?H:ZiXM;i!7V?yp; |0 j$Q9M"jDc~ȧҌrX-&@8PwWS8ǰJគB@ac#5ǰD@+bI]<Df_UG+V.1Z9oilNT62LaefݜC~>ȹtM/0rXQOU읚>Ic9Q\cC@E/7s #Uhi4^֘\mwHmߺhnd>ɠ+wٯW\nw ;d/8M>7l|v&kj;4!KHng 0LTNA8][%B@ *?sgQ(>N8x?FκY4-~6ʳزbIe ݬZ>ZM!ݎ3D/yXm:/x=$D[l-Hsh|BRku^ävDH 9kNHA:G94[F΋Pjy@) 'ᙻwp3@cg1g,k)񮵌1plb*P>2 Ǚ'$Sp7#{|"]+X]a[1Ɔ׉^.[[6\+cSf +"'I?<8vWZ+_~-T5mC3)>^&nma Q*̂i -ڳA*S ͇&hG P2?b'O̜Z>[n֜y~Wj[RFIa^uq]L7ZsJCC+"!j_5woJ&oBѯٯ ׀_1f6) : ř8rsW˙x~K+Y %e%@?PAom\ i ׮/n0[! s!ZѢt2r;!ƅ2xH|ξaLBOX/6߉hYȱO Μ07 `1Yy(ddge ›]xS^-}o?ҍ_EWĨp-"BPgu8D;2/N\gTSMrA@:JC b$ĴDQ~c e3k 7&nq&.oS^orl8kiiw8Ȇ GRBN 0mCi&rђeTz\e(: |eL2of^668@p똆f7j{hg^ZFۇpjy=Jڎͼr'>NP]OZPym! sqeBg _H`|LчEʗW|t7,ڎ6 @͜կafZX.Tw)5h֠U趎s!tct T}ť(J"GXo;uo$zm(dPI7qo/Upd`T:-.GiUm{gwad9+<_a*vKA#Dij.mHln0y²j n΋^G* <ϨbJAz"x?#: bmZ$$ĴoM*Tw%wo0gCWJ'ցN%;VM7(X](՜G6ouUY:CIV {vٓdC=Pv8@)2OŜ3 yy{xARr"4  -D:CYi/lzү{B`K6sHXӯ?#vzVJ)M.{*<&p$Y U^׸جiksHfoY L8c9X^?Jw:H<gDzΈV(hpq ڤ^ w,t-G6{䰤 {ԩQ031k|Ņq0Яl7$QgSW㒐ym|р_ߒ0xj3E;H]#6K4+, |e-k$r[qr@u*c]1og0)#*qvG~ ?ZX8&0#n=maj LsLhFt&NF}&[o\|/F%XN`gvٺюH$Rd/]|oM)Ϯp|G1)8_k"bWyLj_ {-wwzIܝMȃ0rO%M$鋯`24Fx%D} ve뙧~ON-7!s?ryjQxFBޥUhhehwܹx֏@}=܈&yN#20 &(N=zC #y`tmgS.ْ^3@SQDqjFL-;-dp&~xv7@c)b_* '%ےe:v grFY.hlQ:PHfkFVR6ByQyϜEl7ߜ2Ue \ҸW;Q9f+d %\V~{)mޞjYjӚh,:{]_8`!q11%DFJpƋ24+0iz R) $a @+o(3B)e?hPk=Tjtجm]to%U&椩o]>e۬kł]i+U˱ GIe.e?"YqrXH^Vm#睳Sxx)O0)ʵSDqɷ۠pQƻj=ݼ~ f}hTٙl&> S'{|x;5vu+y!vk$N-YJn*/e^8}cLy*#l`ؿ6o=Bԙ7*5]OQ&}p^0$(^QqhTn,|yca䛞HN':;TqlCE(>N#BG KE?K| 8"__pRӌu?)X,1joL4ꆆkT"Q営ǿ<+Јol[/׳F؝.⃔M/l-~O,/4?|[I@ e7ҮpM6p&|o?ͼp Vl߇7uXxNNM)16iDH O4<4}_+$$gBM'wrU wnYh;Q aKIb)a1*=yʸw~L۽e Eishv)Lt)E ȋ}9qƳ+tPe~ʒj`fJ1C| ɬ`ѭq$ڏفۿDIW1ߥpJJ7д!dy[Ykk:oL*B؄ AmBNoÞ s;wmR }j0a"Q[ЏXTN&bkhrtdoo|y qMyLN~9PN~/ `$=MOFOYÐdE Зp#U`MeJ[ G5BQEܱtJ#\r"X8L̖K7Log@9Zs(Pmyie5[`U!x@㍌D"jػuI:R@CcXlT5{i^裶m.QVOdsh%.:0A݀74*)i(|jX_EHwIJmq??^m=>\޽J=t2ܵPc|wE1+FX$7Ԋ6O™ ek bU- I\@@ʠQ(^%hƩѩvT4mP'R{<"?ODGrAZ^)dٌpGÓm wwa|ߒ]A)Cc.=ʴi[M3K\I2fF'gjD #:"ź׹^0'"b X/bmt0g*$5瞤Qj~Y =dRQ âQuNI"4~>R\/e]<)v_p`4%i?#B*%$@#[bYG@b7L 8eMFJj$_sh;&S4U.ݫPAB[N(LA]'ۧe(ly8$2ޗՃe:['}5II1b֡İhLyMhT\}׏A&D'N0L b$m,y* Y{Q"7S0GbJ3,BO&JmtvV%똲E[|dI  +:Pi8IY{cPP| !7YzHILAcPDŽ3=Me'#x X5{=\ O8L9FUbfjxiltT%O_(./iYW-ƃ#P9čҹ9;ҳ3j. 7ЅE㗐bBD{x_ž6Xr+IJ@۪pD#*"#SYїr&j "&y]n 414ЮHNkZ `#Pۭ"YV 6˜*}S@#@H6V[&|\-?4k.~fƱW}pOxx wǜ-՛x%FG| +\c?` fldRh K*% &EFUs>IT .T +u0)c1j>CV%XE>$e݀Åfv-k9Z+D)E\ʪ ljL$:( +ceIZ+X Ǟ~ ?2 op;9xG*u>"8:[cלau; k2()A]6wE) Xlb# #0AZC?UC\~-6KmL98K˦4 KV|$yU) )Fd \` ЛK ["gJ8lFdI{lW@ftı0YJzmi{% D ] R$*kƟGI1XrUOmDS90+?8ء~KdN|fZFon7<>ga/M,$uɏ:;&088Df̜Ll!umĦ)hlC)r?lcX2/?-م3wcbpyt ,g:µ._SAXUZY VjyNѪ(Yt`ъ9teI#aUJ<眉%({fH\Jƨ]?`Ήx1lY/shH\R迍ĠP9,~"5L A.UrxάbԱoEٺe[)Rʬ!@5-Vd8[1ohk*>8#5VHz_IXN%j |.R^L2 jOΓtT܁s"z*GFcȊF0NB ,~^֎TS>#DICBU ^&잵z)b8hA B1q. r O ҞBKUyfsAer qPɢwSe;HHDIP^eى'YE.kE  c3qʀ0x"Fxnn`l2c(¬9DG+qKH?xwwzeDʨYQaֱV?Ma~qlteY#l S* pDezȕPRٳmr UJ-3*jcaֶirF3F\9q ߷h9Nl㌁bTUaȺ1]۪|Vy{O«)ԣ# b|-s6{wacSB2V/5;P>e\{Anh /  nd^gR[mA(űpq\|Op3v DRx!\Jͼ'ϋBKf)||sYysRuдr^OrT {vu~9#0ylABӋ#nae|r7ݿT;#^MZ+@ox͡w<" 6ݬҰ#]BG:>A0UE*I&a'EѼr9߉eUsdJt>tlݹxY:p\ 6Viu#T&U3`XcڮtaYɋ~2Ш7knc8jsU?@ KQx(Fv^ȞCYCwtDOXL&?DtiXR<; $ ! ;iKt–f&p`Rx{XqQ)z g2RyCYsApB!>l)q{88 ,t*W&[ $qOzeAo[ Y"E ^Sۥ& XЏA8 VyőZ5Ԥ`}%C?Vs tTo @%8th .TC:-wRqRiF0ahe,x1 ҍ~"Ĕ^9wj+SіeGtk.h`K>35&N_Jf}jbE<}yO Ή_J $T %w1)%;J|^-$ '|8)CϢ#xl29lW?ꠣԕ8|ĕxcE={ڧ2T8ʮ~Z@c؟ԝ>nXOw]P7o,> PzeUGCD -H[]=6:чaF|Y}88*\!OJLj~n-iFKyQ\Qӭl+~b ^R،=4O,k{Y6϶᰷r\q ƾsLLe䍒"PƔ7@ƌ V!|c7"dxd"4'= !h9Hn*)^% =p7l։~+;+Jl=o oir 1J 3V -S!r$cy.=gͪjb)ܲ>?b/uǍϝͭ_ʸ CN1z~ǧC9hN00C;}X5dZ2MH XO}#6qڛjփ#o Oou$w/G(|J(l*}b9EN8 ; 1r-Ef dbY @xu"TK +mOePධΣN W"$jT'qenРb`0mIbOc6m=xkEʅ gN϶"}vM@*'';>S׺u+L ~NOy8+* xs_ƺMA4}Li zuZĩ3rm;&|%U~|RK$R?q|vpǁ[Z*O8%1;6aAZY42#PS&Asm< 0cVT_<2 E/˦6aZ19 D։3h}thy& jM e\6"4>L6/dv5tF0 ^>~9 XTUiw`l{6@N?0c@D2:r45H%6 Osvs!hͶoRl lՇ+Oj{'|5QqyᮒJ\YP΍8+o]BU"m8H֖DI x F7A<`6|ǁ4qDS0Ed8{UZP6λXR;bJ:t>|F(']~з~/*<-P5yUv\)XJÊ," ށ[`Waֶ=DD:.غE[o-B[f 샒.i7|\ƚx)B4Fazn,ziQJkSmߨ&(I(شv!\'/P$US y7@A n^ZV "s>2uxr nykEoI[SqsL+awdRܖD҄pB>Uc[|f0.dI.\{r*keC;r~KrW)vg3_Tt:NʪBNש)Y-fΉ~Foc.99h5Po#]چ  m3OU,[t-s0XSNߵ3\̌KtOJg@J\auKKֶoZ ؠ;nyq֨;7w ږ`{[9>+&WWQj-ʣTMM{`cw_eX,py]`}Eu!h/Z"SOG4`&bǚU~ɛ9$OsT0#:'r{AW0}.=%d{oXf ֮gURQi1z2R2 Yzi.hVGDKwgVbZ!+;au aҗsfY`_Akqxz=΁܀XtTvV0 +='zvmn+ЦJW!QW٪MTi ɥw bMLGrΖ38i?qNM7 3iNB +.Dw&&h4ה^TAJx=kDV( xV]\V4Ȫ;KPQ=.g3%M4D( %kS1q a9k fɊEJ_ WG% 3 }iܣY񀟘Z%{iP!a܏wo!/Ob( <$ }r;w"! ^>BF:[b(%eJ;W[뤩1Z}sPF{0.[DI!Z{Gh-/JښZ>Te =7gJG鷭-@_@;fyB{A[,BuL ŭ,dNQf(G.H;~ ܏$xDT& +َ=(JUj-\X+'pxHK&d>:73#w?X g_y~QM [Z1W a _Q*asΥ&R:4ֹ;5<)D9n۶jy +4cwAQd7N+ad: X ښ˧ɇ*1>bL'5b _`8r{EeН DIW@H~5Gak5JA%{S0󼬎Fݟ?,_*4cփ[isUUC`=g + z/(=c`s2M*yW֦ Jx>/]c!룈 )S7hQƧn9óŰ;.}3?1\F{]'J})A0+؄ʈj9=gmpp"W8QMq@kDqrdhʙ,2Yސse&8/~o+4}bJI!,Q:Z|bQ _ ύ27=Ayk&ul*4#_P g =Sses]|G?'M٘HvdR|Sӏ|0@!Ϊ$$$ /{c$>#ʎю"X6F3X : R1pbyBAWa8s s?g,qڀg?^ Lh\jĬ[z&i!blb]^X;RTR{:F[xhO'. ~":a{1yXAdzΠOWof6GOgLjl$M(2y/!s)/mT")i%F( i5\-4 '/JZ 7dRC4*TBĴܚkUBD|N4"f~pܻcE י,?n,_bɰOO:D7R3l (Fÿt00Z(KhU巨F핫+)(xnF6H nB츜ㆧW@xb>L*Dot Ċ .<' 㥴=ܘ-dw? 9XN4"D A5ʌ#L@>,6yߪ[!OĐౡQ;`X6{8? ZNf=}YDKsm#KK[+fYܢlWZ=yjzуa yo#ap(5u/vQG ,*2̰xKU3liv&d >K,Z=ne%#Mpii芄5j.8ݧ#1.jy5ղJ:~dI7^T- j1@D%p:Xd$՘J4&`!oh]nj>_9b]# D b5 lJ2ۦd=]i $ ?_.罗V AbHYTXBWG/(2&pS%cs\0 }Ne#/Ψg׭12S>UU3ݡ4b:sfٔU+rRǖƀ dYf4U$eM2 qWB^^1u hBY \ *ˤ ҀH,lр,iS)BM5:RJr}r`tbMn }Z.? KP~|}ܷ^4j@0! 0O+O~^V4%ܘHHFBxi*V.'NCz$2̂J!]XNщ.(̳@w_lS9O%{c_A@]IBf+oW.Skcԥ&\Ţ?[#hJr="hL3yKeuqKv?9w̒k ߻5O˄bMqq0?Hmֺ$@"uso+B7Ztܜ.jwUq #zI6#0:>c klꀲ%>kD~+bx6ޓr[5-)by=9GҪZm!y9YǍ93d.7|t4/YA7xqߏvh>*tC죽yeL!7PUK9d:>?J*(y_~J>: b̐I| O}1ҽ,gR`gXUE]SrY%$ `RK}ƷSeԟf8ed5Lk=ȸs"6㛻G9`pԦA!u(LbS5_9xy E1c␿0,Ă6Z?tv9QL1Y Q)C.8Rs5~QBKd&vv1S[9.*"Y#Њ9# u؏|?j{E:G7yi8;VtqoLN;C9b&/k]` .ߣ=E8ݥ$X|6CQ`Np4Q_nV=Z2>*ç,lMB')^DH{nA((FX?J-guh-MU)0:XBY{\%-=>mu?qްIg3" nho(@ ]'դDӎ*5e4u7 СDP9yρmM)Xr˷,"2^遒L ،L!Wi_}1/Ռ L |F;ٖ;%غ)$!,qbܥNdl=~(Upj)LQѨ_pytN 5F+ zTXAaJ\x^D@9׆~H +rzC[~.t&[P@9&O":C`duڵو|]? :@.19&tx4Fށ 7pd0"p6ICW2cZ+(+#[N.PG>`-ݧ(Ŧԫ0=l\l]0KH~U&R~FT- DJa,蹋8DT,; Yv6H?K-|nKǶ\FY,Y+3GPCZUFI`qh6;u,X脜YOy>,eZvꂗ ;O 6Y>>hmnILLfᔹTc `w6Vi 炟jsL$i7=%$nD4uWCcud?RpvsVAb|ál0pջ}-NyT518p`_Ɂ*T ͉tY#(w9H1 c3!!y諾O`|׃-}犡%v{;&H=ZH/w q;@޴b~- 9i"NԸ꒟8 Gѳ??w-#R&) c3'a܋T/ssE>xxeuUSѝ”Ł}{cFn7{i҈iyP{T {FO.ya#`Ah\ ރ "g6 &E6|>d7(-ŋo7QJ!V]Wڻ>YM*o慨y$d "WPS"/K2ow s p#6ًI5,"ljTIc,s]aL/jrmV$/[SaEfY/Zx dUxzǤK#_DnJfdW^޾HpXS<ڡNJ LKɖ{2F.)\7?7lj. 1kEѮؘ'\ = =[Z*4҈l(瞿ABbR+7:iGvG+Ws2ż0S(Mg^M7[+Yo`mp|:dIJڃf>7U RSkڡ My(%2ևhKɱ>5X0%K\~UJmj'TjzCàr 3][$MM+vlHSu,n!MHt"o$aYD]JM_2k ӷ Xv]!:b(_w'oAQQE+}9*ߥ ruCFo]Rh&_)M\h|; 7ObZl _!P@zlVaLlL˲ g88xC4KmC9k#K$xέ f\)2'ɀasvCE87>pfoodk廥 2i>L 1W|%-xڕ̑i`O|FLiYf&T)3\g"ݪ洺kMAEa"=usleAS$1^"ggXjYGbd]̀>*b7AG㏙W.uNp(?n<(}.gw">6'à}}V :l\;PK^O("T!uSc1C'+oфg28ZڶYlTzEݢc qBylE˞(+%==:)a 2#(fQs2&@>.SHum4zA;a6c":Vt>CRe܉8*UwϜ!1~~ˬ\ ^0mh @jx>ԫ&h4~Z4/z*J&1f#j-v׊D`"/sW " CcbY{ alvXt牤(Ze%}'gO$(qIb$"G >QU߈M-e_<"ms8$"iɼ e3kO,X6ʻT(rtwn. -3>q>@7&ɑA,1m{윃,&hqo>\\8/j^!o+:$)uM2-I'ۈ_c%:گVʹn'NEjoLK8!TTο+RHSp+M[C.In* ¯j51yUP-6YSvެg>n#V1](r1HG@3twQح{ZuD(vCl~Z̶ӡ\+\[G躙ˑ5lH`'3aX&Rx71vlΖe{?n62{g[4Gy})%lYp&^Bc &okAXwwK]e)֡vs.BD7ʎXۻ e4L ikОh@8v[&5!Z3`F սF'w m.g@D<,/hBm%Ϙ&^ȓA)\GGm =A Zm{г'T =aOHfdId>FNcU=GV23X;ln>Ve!BV!2ZZnS]k~j^'(~E9|׀ fvr"U5-WY*I`ܕdKKv`-&:d]Q3Ә+w36L͎ A FUȂsay\We:^2!. Xp/-ӝ]Cah0? "}qt 6Sb^Ǥg_T7Q<MK&%aW}SP*GT(M%]ґ1<]7^iT~ %]U3'B{Z{oN27.ܣ m*3 HIŸ. (#֏([5d->&U0,`߱.*Tkpȯ9+\=G)=&$xd L_Iq2/$>t޾ʞ+1?sN.6-ݿXvG)f.è|r+Qw|p$jUr2{d+Y"gxfԄg0(pxV'I1ALzbϕ繘=K1ɧy?"\39X[vTd2')>~=z`gMX!r 0Y :ը{;A?w}W`j_wO8Í58ΞHH#]+;_#ò䎩<cZq=,]V1z.:њBguYf-hn;_d,T^O,nxTߓ3_Cu$Y/$gF- \J^^-QUeHj|We揎||*שOQaId&f|GKɯ}?qbFҡ 4❛v*V3!>*Z% .xY^f,2&IkXjiV A ]c;|BXgmS[*&W5ĬZȫ"EU8!]B=}OI˂6%$ Ly8)xKJ(6 ;#Y,="z1b㚿z~sNBC6@9Cgzd0@_ ߒu(7m)-Ïm5bпlbG"XI4 L:P'ɱre4xWUnQ.8l~B4f18ɟS>EH\&mQ+lBHT#/v<4EMUe,~kFm;B 2VE<4cv5Wh~Į^T[7+"׾H\FU752ŊUJP.f#1\N;pc Jd'e!F $.&$[8- XWTBL}qG#= 2K{ `%: d lO(n'oÞ|ֹ$rY}>~O@2`Cv+1BS~M&!ku|bjQj_o0k7`%:8di]"D?Wz|偧7%wzXSj<λ UxDDyʹJU;H㋈ @' Nb~)u'B}t\  qV!НTHZ+GGO%g^ b:^[-bq%7hQ?mXY͗`-5wb0HsoN#76Q9=O =&<(€-,DI*S%w,U1TR=(B ('g'dMܭ{ _ +ƍncMmoS>#+T(QxAqL5"F@@tȪI:s%a&\U!T^ ׈M ^-)MU{ )r-3>!SC^z.,a< 0Z)A_"m4dpLꚐ#}EJ[ccIc pV'%.Iy`4ճ 5`sg]b$ALdOq{5kEDYp5rRsՃo@Czy$$=\R 33ߓCDX\1lJ=V2WүZO/sJNE ~߂֗Xtv!جdc:#bLPc"!p-asʰGLrp%%,-1="\/ Q-lGk ZoLB }*VNaѢR9G4}/;FsW\p?Sy(=Т4Տ,-]Ck6!xyH25m3*R biH|w\cI{ ~'4grۄٮ1nA&pEH¬%(764K?srLo].YO0\hRuÊHg)XLӻd;AG>]&RG&:rA˱8FB`YX g((;>%Ԣt]=.SRT~mx ]<$#>) Bay Sgҙ+'k.^຦NJ/謽nLa)!Z?9K4-@>`Mdݹ[;V J?V%GY __"F~rM_IܹGFM>6Jjs&:";ӜU05iCKL5ΆHjb!#U+4[}r2㧓+o<>IǽXm8ʵGz?`!9YwBG9.hܝ :ժ80}A#Z+WdUظTwWy\y@ӜV݋;%.up3aTh!F3"2796o <ǢqBM}^0Z:9c,Tv!ce7%beH]yqH,`}pлf I7)N% 0[?)SB ޅktzx TU&QL+ʱ 8tgFnP[#(O*9A@2|d ʯ)5PuN7d+вi"ikd$hRy*|10~ 6uSElMҼRX$qEa2ۦ#:+5_E'Bf9gZgR(xǢdЃ3 3QЂmŏZ94&b<.QK'-//|P%*%u}"Jfܘ:Z֥}5D' _H#p_ھac$IZ\$5/9~PJ>dZǃ$Q1Q]]"ߑbfF:HH?Wv/I> ¤с5Ƭbo%.9 8iLB”"uy[2ڟӾ 䕨9_ rWZo/AaF7L  -g9ГvQсTG\k!{[(Q+_4D|H~@5 CvZg.(z5F9k-T3IMd5TG@R13U&-DpŨ 1{hx|h ?YHY󱧽OLho5/[<حz8(#1twU𛰅A2 z B6GQL5erQԤR!I&!k%EB^'cmOX d J䴃+16)ޱް!YLhÉ"pb+4dbǪ.I;w?*bk5̠Ͼ!檠Uֿ*D.Ngkm~-nr b , iWwٚmxՐH,mKFuW^xg466k ZV4AJ;hWzXMP?O3/r7`ݸfF68,A{z7ә\C0&:#&ik}Y lj:sgk_pcxmF 켫׿#Lz,3*|.ᔫ0?#=K*mHSx $tܼSƞFIqjƣ8hI8ϙA.O<(LFZ%(O6+2^_CKV5,64u61& MczMP}_9WL+ub-v9ͬ̅cdtKo+ 2B-0ء'^Rz :hmlqvЁڵF (cy ,j*'j42JWi8|mcz5s!vw4|tY+[Lߙ&z魀[8)]a/FI"4E eE5 L}\%;ews9"$?uB(:JiҒ7r3}8TAٝUpU}h- ۸Z߬V ^UO-r2@ې_kA6F--J0BD˄OHfF_oe>iѯV}q!_sd),;^ L|#i.muBCĻU4Tϊ1~ :ߴnQhi.lMXof#TcЕM.t 95n %M\j.\mnό¶r qY2w^(ߔ_T5uU AI R,9M1лJrx.2߻ Bi QXBt /j'XXUciW3$뤱9ǟzALSrmO?p""(} *fm[tQt74?nb|!mӅޒZY{e5[n5ܘ:U׆1mW [KL7꧹ - \s/  9o*7WVv̳][+낛B>02IًOvB턊|n7һ >TE5}UnqM`Z rkъ^^A_vW0h*>'&`5K 3ٰyYLdxշ}VG,jbѷʃqdTy}eu#j?ݹW+)&s/݌hy0#_pG/fkS)i9V^WkQ+6SIgK]q̪H^RƆŢ8TvSOj+"gs@wߵ*(&XmݽB R4\b#׎v-2aVw6iND{,]<Vixɍ|jMȗ<(gHCW\U͡aWsmrx sɧI I;Vj j[e8KY Yqlu ]*9vlJlHE~Ie+s &|3kP$Ua\W0_ʆ+Iz s$+ma@PvOZ1GkGDT`:)N+qre ,.FDŢ2Ca'ݨk)rC<=}R MzWM!IVdq&5Е^#<07i[si5SiD'.l m0M"Ѹ&1\N<=[<Ɯ 9b[@m-9u|cCGVXmؽZ V`MF!&,Ӹ8 t'/3Cd!zT{o˟oM"fצPqAڞѯ|xDSa/l1sg$)[4%|VߜSXMlw2Nl{5rop21dFglTx}r%eo-G,Xᖼ fx,1kM.(mHd~0 TzpuS*G?9?)}K9>π֢J/l0ݩO^+{r$=L{ !Y+#*Ubvm(YL5R`*,A>:;  Rkt#UN,bd[a}48'ׂk-lLǛ&XͲ dW@F r CrC$`jn'4\䁺V7Wk ǿ|CoD*:&xI' +䯉rY(=dhi՚ XC%u S,%Pqz8=eY,_#ZJO3Ď z9P'"~=h+D$yC,rk)&*iol~EǙZ=]<+d ]d>⑴tp^_ǿ"´8Zּl}D֠!(AVכv\HFS-'{'%: JY8K-TovQZq. +S 1!^bqc5_)в1X֣q޶"(gퟙ'K"eI%`x%anAEApLR\u`#4|ڢw#SA>CgSs..$:,Kx TU^i vUz$Wc @= K#E־ʗmJIp| Obod"k5mqv9f !x#Wm1|R~[e30L 1 [i3W}ZYeXk!㺦(܍":$EI{iwRzz0y`|=AdX$m{ƩTYe q f`Gob)?axУr-T;0>.'3r5M<bH `-3,*MOf{Ng1]b "OY{zFb3߬cT~Jr]P)[ iK5c42gb :2ݿnu q*'ؐ& |=F*H6_I 8~Bq1$w'à) YGh*{w\B~K6⒫( CZɎ{zun"駁FLH)+ʘCDžPȾ%|*P+=/ 5YLY%9Q t6EixoIA'YZxg6*- >RЬ2pKВ( wԽY㺷VBQ^dxb?^)42 ۭy0y7]iXd"|Nz.EIlI){?BFgV:256K ycYVJunFV/iy$J#yƗd}ATC0AfSQ]LKg=+~PؘE1lB?S?A"~ʍJbw6V+v\{yNf~1nO-3?d/jnY &yueu!搚Ұ2zfwjuOr!U]GI%''.Ѧ.HLH}Ƞ)\lKDxh»n2SYhR?:I_HyIV{D+xөZy3]tXWfDqat~p|mQgo(jFzkU,d0"tb-^*2.CW D $$PHʰZ/vt7WsK?IJǼf\_B2E=BYJy17f#MF Q#ٽMzN$qԚDLqz|eFn3݃in*_Ok)#ݕ+"7sVc8(K64͟t+) WۧKt愧 ,t6K]\dcFDʦÞ,࿋1.vVk MyJ8)tu +|V/e"KnbxVia:Mu7ZӣkUХ X )Cժm u$qIņ-(fk\kU{ mFMW)D55}(T!=Eu⚥$'N*/ƚ{ cW1P⢭/`Bm5>~h@SP;)(}Fw;匐DxscWO$ý?}/H0ǪXOL@fbtZ ksuʠ w hh(wӧ,"xښ\;\#iRXe gw4Zf#C9j_tZMhZ^ )KZ%:{];eѵML@Y}HًX^CuxɶWm^֏hL`3c;@hok!hcFB_;zO5xQ3EZ󝗼n }N~k24oѹ*x-hl6wF"%#C `_)D93ȇ! æȻס7Ʃ D )!YZ j: {WcNVW%^TY,}2k0hAMu7Q wi=cѷ|2ooi)ZB8&>E4284%$>%;Lԑ `QcmG歹.G Go;/F"Q'v@v uo|U+]djJ8կ Caˉѝ[S|%뻌@$3V8U#oav #^p,|Q3]##-}X!<ɌFqh)cj_2-y?h|xleVd^n9pCxwc& WxJIU;鏭\LZipnؤ.OK-Nu!ŬoA41&ȃIk8n<6>Tx|I|~+1KGyݻA0^',b ZJ w2 fb5 $ͷƤd!wl=*@W4OA9t#({'ENq- a RԼ71 k=Y-j~jcU[&!1.D/dU̘,8lIP5l՛߄ziw璎Ic@Dy`ԩ2 *}H`f 7{z :WqDպ `&3 ;Qym?dae& p ww5q j$sNoW}+yIV_RS>j,aw8OUWAէ|\rVP{4bѫ$zQlrC'%itGWD#P\uDl'lw&գs+1]6s?u{4[iе$,֬Jx 5 ( ԸJ8NרϤr놫{J&qTCTВfٌ̪% (G5PB L~Z_ Q\~( 'ߵ:¡|inNN鉕S;$BJY-q#f)e*[f eðstz(潓 E77~/ߨ]N6 Q¾,EUnHvrI,ׅL% t /q4c!m,7T-'}+A;3{^qt݉.gǃnfZ- hׯm`aL+W+[WoH ?%;niw1b|~.FY^g/WǛDGf,4~+uy6fL>꽝%"419?k*WVfg9̨BSkpYMT5Ok ]tJi0)zu 7XN{:\%#k⿏j?qRÎݔz3WYfCZR46[-DX6m&.~Zo 8O Ƕ\\RiJlfSp&~8۱3 5P4V fmas2F#1bfd^J t0Skwx 5¢mQX1Z%~IІ?bm\j(t$ T3ˉ%!}i"\+p_f:i.]JG˃$ ߢ #H-l xpgy_V*J\D2`8i(8ȊQ{%SKRŏ? t<⩛;4YNȵ82ʣ+L‹_hox{Db=vVu(}YI7G55&k~!qD~/s\ƚ#tsNFˮ1i/\ ZPHcZbŜ/fȲӺ n=]j+} %JH0"35dܼ]{yϜӁ؃eleנD@ey0 U)x_v\9sCNw*9Na/>jswp?6SdD 6xmGF~8{q['{'N p;JUyWivt`98ny^2VxsE')`EE]7.o(׼'!کp-ޒvs>kY^w4 ҎKUt@pO)Ѵ5-V֤7\a-VC;1v|*Ka:nrf#:"(jORUj 嚆5`*9[59/6*Sǰ]2„RE8z3k{pФ *ůJwstdkÔf v<4NwCz>q *ۦL|t%=#j-5V[V aǴ"3GO[V[@#Z ;\~Q9ar3rWۙN|W-:~ iAkz .L !⛗ЈZL b4̀`Z5(um~ߏ IdeYwd2_B)" c "Rkݧ0FX+ji~yڎ?ʇm+)ࢤzL> 1nVח5;{ ?NMZ/Q/H=!-DT%0wt_}x h\yHD]1k~&z}umLH2)k.XAi!(A[#f{0~ '5fng IV \Y*}sn9NOc+[w'6z曡,_MGE4 @n ՗$IKb!],4[T&oƒnW"Z竛K<]u^fbBP-Qed( yPlZ\$se|ip)+d4 fJ@$6oIQ"$[o%fN^kq7vFi䍮f&Y,ѭ~;q нiV /բ='.4MeU\ MTߩ%cL"$dl n3'C'ɗ#3,|pw q#t:?ܾwi>7)L8Ag"ݢnpEr9,k}&q]&=!^q|fc*)B-=: DS%v!^SUxcI&ر2#Oku~ pW-4Ov,q5YeM|3+Ɠi[FپK*8Y1{F-CvD=yʏ/eZk9 {͟T^+aNs/#l pN;%[ {\ug% &x"!{n!F.~,hh@@!xMOTX\9N*#B'[ vE3wf)[c;ow}  U.DO:tƼ RW}k甄>`R '_x[2$X><[0}֎>{1z^MU[MDKljLGװ+= Out54xf*HlL=6en0//;[PV/cX(ЙNex-N_2c 霩IvрAc;:"1Lou|rF uǕO"6/3+߼vF `Wa+6>"KfOJt uv86]Yjp{" W@`MyaSB }.8 J ]r$>33 Ku S> a VGaѰ{o\ǡ|:  bIFTq PgWuRdXmrBz $$hgKl^2t`ZZ $w'O:0r.j63hn d.4>lHS?9Iv'NM/j꫌*(&%+,| jcq+GމeX+8i|rE BPo"?[g8%{8hp dũMtxTDP58_1wLL/ XP#QqR,r=ABԁ:0 -DDJtq2i7Q YS|7y(DD| 4ebrb:3 tv..](zrӿ9x8$@u}2 %L.axY`*>L[Qm hЊ<ԛeA0DPkp*N6tum s7n'}G=U&=D^&Éz#*_RD69'IQu. a l/X%#uA-pe%g㱨pr{7 >{y7Y#ȧHGr5 |G[Rrz(S_ ȕmK]`4DNnAc L&`B/D/~A*<j^=ȒlRUeaZ3AomEY*6@g" CSfZwEQE*f/ɷ쟃{,Di4-V8YEh͒?xy!!, L|d0ܲ\lxɼsf+&R}lJ&|MkJ]V}i.)ɭxrnhM\yBx_!l>:7W0/o,\!*$|А+ K&Me8LDk*0-F.N@;pQ՝iMڠS`CZf'//h #\ZXW򀛧f3DVNm"s viBaDhݰILk 'Eȑ4a'sJmjdoG\EUj0dʚ0GN#+#? 1b@]= a< ;w'c='0Q/FjLҚfoV_!`Fi?[eb;*6ENJ1 UNa`S!_]T2aۏQտzYgn+'Ftua&Y u(.{Xse+y/N4q8cq+QV [kSOb/{ecI; H/z"o.v*Ki,oKLB?Ď\,YBL7T7_t{~\_ljRfT}6Ay$·!:U(Cd-Pnb6;ɦ<;<ܩ{r:\ʙu? 9ŠM$Q({z@P`/KfՒepiiHUCV)xpD3( ig1$.-؂Pxjg7x_ǰO}ja s2(ƪ>oj;DTY( j20?p'3 `u~ ,RŕI2.ϱ}o 4Zo@V9*ƹ;juOhv jߍ6fZtînSYϊ}zɦnJ*pzY}Czl!\Vs3B[ f6;?#;ZAN uo/ٲBӵp銉|<ޚIOAEFB@Nj(sU*4B6|._Ih97L\Z葃Ä` 6vS,F,p)WdPêF]񈎞-mڙZ&2Im1Iᅛ?y-[-$szocu y+JC AEq8S j&3]˾֟\gC']JMrcb7"6Tn`3<0NoVwJ ;Rp㦅ZمV% QhoϾǭQt'㞵F؂g[U-? D|H!' >N0GG[x&|6>ƈp1Swf*vkW:k(z ,SVїשV<2~Ư2@zbX-1(ߑԐrewe{@{N?ũ\]tO`b :d?\r&7D{DItCow k1ӗpM]pn2~f:=='R)喐Sѭzv]栱#)[}>S E;ηC}qxݯLK*sPi_H#FsaB"̫۟m: vT!'%dn{`=Omѓ)tBc{L$|u~zn; 툛3rn5HʐBfN>c4_Aj팟6oa$rIo_h(8o"LJFsEk%(2Rд&C<7giozA0"qYI6{ԟٶͯ튋L^'E#%.䎘9`8'(oG͘]*c9*!A!ߌM7YBoJ?mòswmZ78b z$7(LC٨.GHn.OT"Y |Ϻ(Dl%8.jsB~[92JKps>CTs*Yo=֜"~֦?) c;\%f ?=}w6wٌ"%HT݊bƐm#0&@%߶#2P)7U*n5-pօ?c= @O2n>Oqd`wV%svA \B[sacϙ{')1w3 w )xlW˧Y{ D$0)aO~;Ļ) njn@]V|qDyO ZNxIpꐟE q@g 2 ui^ b"GE5ZPb=%˨.Iu4fXraw:1􃣾qtv&ٕa={ILCA@ʂ-*i>Пf&mhah*ܫ.0gj|>] tr?oE=JX[0dqk+㱾%6+I*G!*?drahìIf% 闇X4X*X^1}IkCN3oMR~ ЍAK ޝmt;jPT'p;`6 ~fL0#4hcXoJ4ʷۋ%צ)Q /"52v11|9ĭ-0yw*I:2K Xr䫱_:sTe򾏱,.EknW^&6mv Ѹ=햔)-Ie> K 0NԜaQ|~3=C&#Pl]B'iYaw_Y;,w5W$<-0%k8e҇gR8G`->Kt-zj?P >r'gуƳ=~u18-gw|C@מK2:0.lxDžtaPe _'/^y*Ͱe=^sH GF2HKiQ3\8of4κ5hΧ @ hL$w{∎Z@+m6`YF8TmM?yJgۂg)̯ k#zWBBKңy3]iďJz֨gqW`2}vv}JmYSu?q tkl {%sV(OUP6x m">7dsaI,PMH4%)"(8s 1r0[}QdtKg1ik) tJ/ȧAN[sfբ|cRr1-']OFytgȽXp1 籹2zW[;ΣXc#,߃o?w e;Gm[ZN$k#tm=HI K\vf==.Â^k\d n# q O7Dj%A2*y$&x\$b#-xsB8K*o卺M +:G zH|B S%nvhڤo?g:rS+&@k¢`&%]ɺS{sEm)t⃏%F(צ"\kFrl"(2 N5;w10#]kfnSdhjr%)Fp]^nÓp.[ʴ8IL R=sbPJ>voo~cѫX#K6Nf/eG-f|:C[ G.ûfS@ʅ+7peq^ ?dwH'ƕ] N{G2D'ҩ{ :D3g2SܪƽC%ʔc{pNѭEa? 1 g3k}|j~%l3JU1&3/xA(1ϬG xm-R9s]`~tL !os ?r>D2ܑrPOW&ʗ-uY/}A+GØMV"_28"Ow9IYkJL HBP>=3nhc|U NKM,-jѸ!(|?T q7a_Hu&pP0QYǽJ0_=,fp*H_AdK.ΩM2Is͙ erK6(a&k,8l/8B3ҝɑ3ir1֔a@8'nZ[hWatp Gʼn {tjcOwwA#eTM tJI %UiĶOY}X4Eשּׁ~?`4+~j85}NWi:Z|RE:#8YeHIg2/`SX *2u0$JWAzzڼREy(>5pw*p4f0%/mJ 7W .0pG/&I=/!-~60Z!B,+}޽>bj&n8@]g IwuqbAD, ]DǛ LxHflxF Eԩ@'z4|Ul~t?-@s\۱Լ-a.k0d+PKI͉pH|܆iE 3'mٸTMp .}ٱ~JgA!S%nDf"ә&ʣ)r#1A'0uVֈ%KXYЩs-zce\^4nD?᳠܇W|ˑ#c{"n&J1d7?iڐ5}\hh/S'5V;Rwj6AQg'9 l(3*sV`e4+$Xįv"S'OBBP " wQ3WOQkΟ-ۈ:d @np^lk-tl<,pGz%*@oz ?'d8/=`qEXcQ?"rq0dl;v̊”oDAt7,iq2$qrx) vCj;׿6RDPQpUl=ՑW+ZT4{o |k8q0.~֭k2Se<qW5~ȬŏӚ-e@f>>s-"IZ5I' V΀e-s@Þu sY_STdc<A-#mva˝6a>$Ĥf/%tV/tิ;z\t$햷$ p{-H8>E2+L(j_ ywGo0eAk8G3!RIP&,O bvo %0Fف?->Wa4*+_ Z1tUq$%4JVy*2-  Ճ#(&I eiZƪ bL,`Hidib•Z nZֻ3Lb^/p2z`IsgFNU(A\d?8d=3]xUn+i(*Ku[dn!l u5$ǔE.\v {$/[as yƿÉ162lOpT_8A,W9s䀬\Hfsi7_Ծ8_"N/|ҍ%5#UIׄ5 jN ܈"~[wVSG<ݕa^;ZR"uBWVYօǻFՔ'[Z^SWygCP^>p,-&PbLZ*҃Thr['Z=X|'_nШۅB7RZKK"*(nkujx@ſE`!wII ۜPJJyW=&K[BBYAUD\;X(M (Ƅ5 p/rje7k^141GJQB:VlJ2~}%"J)`KáYs CZO!<ٮ3}G97>XJViɐ^g|tpS+B O{ rJd}1?\}e- {gE[„sy ϻzq%. y21SV0Dju*Ò^<1G"/L: 0Tx*[|%CdX"BQE!\ $nJW/FeET{25g2lm'c<: v۲}PWy5^BU@#H%N_#<}2"umqV9PUrIL瞾OTM곽o;"n1lº~ZLk%`>6ږ:eGRD`=:E8y`:#5Nz$xTLMVCՂ\'*/B" 99Ɓ*w8QMގWabI͑YN߬ڕćjuA7`Rn3H㘳veW 1[W{V^n=mGҽ("\^yD{giGl+mw0}:!I\:EuzM̔hrIg?gwD/O@dpb !>=4rB1&ꨓYNaZ&_K<'>m+ķύ wjbiю( }.d帬jTw8q"[^tQq6#@eKPj8}O^/M9ކ -ilϰO!o013[XOY`O8yA]4!\{QVoY\io (Hь} dr/h]weu>갯:%C:8GLtd / (ԆJ?n}'̳?o¼YI"3V02[}nZD֍ #nb接Z 88*؞*1@.NqG0qn8צCs 3(CX2WK8;%@*ZH!wNe}p~`|K!: UAQhts{H<81,݅Buha(_GF?`9/yǮ^<{sGOAv4ҟġowX`Ej,(&jDs2nu #/&scgN.w/>hYILF̧:A&~`D'GD Arzrj!jƩy! vfp+.Ygp]h9JEoȢ98pt!vYFC#X5-p%4倴iMA*U\.\d UMeMxvr[=_I]?/5C[Xر& Z,}A=k`|Ȧ.3aYȕ?y!8L5 §%P拲h4Jmr~n9`pO;\=!(,Cll@Ucha4AaQҳ2l|ϐc0)72wwCd8SОH'R0ٰ vpaȍ1xڂT 3r*tOE@|2y0Gŭu}R\gۑ/̀_F@Ű.]C/?V$}~2:U{k3Ty3_Erݿ8R:Rܸ&@S2򜉃ZE3ͰVM|@EejqC\=EeνqoK`?D5P@@F:k8oATIr wVLz'|V +А'h/܎ pE2i#Υm_lo|b!.d6!0įr޴c Bֈ.o4csPtvf'{)c5v>@J U=sWQ^.ھ|VY:njJBܳRLmIp*'TnN}[`6-}#g/E0{&L`%Fl"rT^ by8~1$I.(E-ke!%#j DvEгs/@Dmxzvt+x2r#8o[VKb.VB2t\nes@7b/,Gܶg(9t ݛE+>SL_U6D aB;^Vӱ3`ptHЎ.Nf(ua9ᣘK 1 ʄ>? (G1{'&یG]Eu+'sPxD/ )HT}H$&\XW NڣҴئLyLʽ9F+2[%ӭNbh(5Q7hMо<'߮$Tw+C]OXr|2*M\qGe)15o3FVU h|`_.O ܚi(Mve ϮRp~)H<}jLu&N;|O@ڑU P]KRCgF`_S;_$R.yyӮxY! O JD>9KW]Fm sq45h:@Ƃg^]0q5yBj'D.IBLJBTݽ6l/"I 8uGSO~(;˄$jJp|ąA:=`wBGBȐӷ1 X>ZW'H4UKʛ.0$ڜo QzsV,ZĸtEdPУ'r4Gw"чόa>$[pm,{ƓN{Ibl#d ^GkM q^'%bu*b)Zha+xXU95 'W(UxnEUAe< z\\.*jX~z;Ф~jX «q*bJ9wO}mUѻ"Jo5F`aY+zPe;2 u3 -VopE@ϰR]ڊ'` `p]VaA 횠j<rPVqf"μϥ/@^Qm9e 5WZz!̬> K)V1li6oH[*P.W<9-5G٦|Laj1ձ@alc‘ٯc&z#}2KmIk2𴍅g PzPM5U[6IBQ9_YcZH3Q5ܒ%/y(=c@҇:Cb6n5]fLt #tRykp%}1Z&'G IbdObcxtG:T}ಏ} Ret3PW&~/BcȭW!co: S@{̗V_~x ƬzAJE<|( QqW 3vb^dhpFþ8&٫.[Kbή1_'K$ICL"OE޽_ƓJE P= =4BųNDf Hm>yhk-̍2hh꽏$Xxo)?yI智~9xls1< (b0c t!9ȧ4 0i3 {<6Ȱx gd"X=Fw>Z씼^tJ sMM*ZY&uGwP >=J!F1QoˮkZEyFe,PEKIHO^8 InlA?-#>?a$Oפ$i3bF8lh֤Q8#;}f9υ?r}yfi/XbT}9ɢy@E'@pv{2ӟ\NE~t- yӚ /6K7AAruOv '^\ڷ o$fYXj-^Bufp/XyOP%P:).R|*[N2~_A.n?=3h!$4O`Ƈ 7 Au>‰Ӡ$ƚ$a Ob8C˗2O3MvSmL ICLEuucy K S^FY}G,ccئnC<$ijt (7q2Ip!P' (i.ؙ CLb[rY-8}t}ƐQ䑤}V^FKW&T -Tw*ExѺ-0ljw!$*Cɫ*~ʌKL EZ+#ȳbttc=wWykEIE`pdB4:`L@4;o8 vLlkpaߌ2IBjWRw̺95l%ڸ>zo/a>`Œ.~5|,x :߼{p;r/#v y}RԀnZ{vAH#q*j[+W N-} am~ OAY~?,.z*ZWtލ^B<8; HItx)| 81 GB<7˜3`hDZ|2jyAz~M# q6E7"=u*3&s_:#SoEmx gvjwttNIް^ ^S_ea:r"IsǑ;w57~Yث8gp%f]x\'&ucGEN~ 2O'C? I=HQwLiԭkm5i;Q\T‹=dXd grƶG2['t >RTûqj?;Bꃇg 9+% ~o=o)ChBgkKj.{-q@֞n74${1eadʺ]oîyYVy ȳ,}8̜kRRc\Et"9慴>]}+q>g#*6)݂j!Ph܊/_DhL hmp9{5tjTgC{`Cx 4|zHjo>p 2VXey쨔P̩A|(muKѮO.-)AsC&ڦ#Ϗ\Zxzh\7(7{`q9 Q̙(v7f94]a9k=X/X:&~P?ΎgFer@2LZD,k~V~>n V'%TWAm]X gtޚ%@S#"uUd<:r4%V6R˫o>!`=T ^Պmch,ɷ=]e;U+e8qiQa'lEjۇi!Sp}s^ gԁ{(ۂ?"NZ bA"jm4.tԕ* :b_褲#/o'G Vb@~E ԋ`5LW6 !%݄(ðkja+_qa}exҥoSKd݊G. L4t[#N9%`mrC 1ѫg(۷s"m]8o[U5^s{M Yy&G!ܨ D`[cSI{mk!W/a2\TlT}nTWȨ(E)lC.((OEo Q~(լVIx;{XP41,Z#g&X[?'jF# 1)W/R.Xa\憫d\0u|7dn.ll2~s}>3#!}fޅi9joJ>A l Z S%]ͪ;:9(DVs3҂_1^\쒖T1$Bum)C2kd'b`\r-$ O}єXu\FJ<&RNM+r6jÖ SBbՈmq3m?*_yʇ#y^J鼎qd쓠dгYʨәDŽ'Jjq}J6Em{0%jcoA4G>}**-?E-nfVPtNtt^ч*KzD >u!0de 3-nwbzΝF顸0w?gBqTMVm;0b؇6k#]WA-GE0MBx1wTxGbJݲCl Vh˘APriԯ1X :}N@I&Cᧉ19izA>ud7 A fUP.*.v\ U˅qgZm ı#rV († ѧX7Z UV'yIĨ6.9|s&|LVV}P?."6 Ǎ\؂$]8&z"*WCԁbܦ?+CHC=0zbm <-Ը"ƣ!/%͂ [ByA/XG wA$h"ƺ17Wׁ "U+(*cӄAƆdG?^ynnqUAgƸb2 tڵ <3>gFh$?ܝPb1|uT>>b|7uH{J5װ 3ZOYY}89{~POu[;/ uA-&ؽ\%xqqEĠ:!3 dqZ~7h" awz7#/NFne:vR; .y7ެipIN~b%A#u tOiv(4'2N\_?XR˵2O.e6"|U|oWWbwh11&죵kl|rV{ [@0àDŗMSBQm=ț lqV=u&]ԑ-|xe.Mk!s9aeq^R0Ljb_߃1sPńb-XL`ݏ- 2qR{XAcFMGT)t&W:,ʝ_͡?YUBg9FbCu?Yb9b MX@J_)5+wzJӖ3A0=K)[<{7й%{Ӹ[KŰr(b[C)h04OzD=Y w/@Ym_Q YkUPo)ImH]8u_J_琤k;(켵 9 4{:Fh@:SmO.evU=jyB[F{DtQjR4XpeWԕĚw+,Kkb-q!̔Xa>}1XfLIL<;/878V((p<эA%A;,pmrgU"vHKڅo.EI$wPX9" j,Y;,L7Ww10^^?KNdJ\ӁFT%*]A4С9DL\1D,FWqNNZm8?;sǻ6uR: zп&%".zD7w?ӱĨ9 tЍA!H|čN3-3LxʍƒC~.KAibH?0Yi6ZcG|3(lRo<P39}ϦZ~.U6*sR{^j4s}"* 9H19]'M@|z`,zz6(.ySB!ߦ|Z4+EБVX,~TtEh@v>ޚhOD?,n o?衒X 9>v~5V2Iӣ7d؛w$mO* gҢ9|Gef ݿ.|ǩ@ľ`?lj`0doh1V|xVy<&Sǝ]{zRR 9BވہmCE)Jǿ䁬USջ~IpI^/*6HU>sʬ$+@sCQ57םw2֏ x>i;egw?\݉~H!vG4luPe7Lq_#aBޣP-Ъlg-b*(fL@B[g[p$;9B"opOAVmT\`ebjA ӦY |~~iDm̏{$EObj4nKQ4ShBՙ.\1rxqs] eٝ; wJnpp.IR2Ssҹl ؍-?N&gl^qX{+(Q_sIPW yȃ>+9-B0(H,׵4|٩G[[M"(-&å))8guB;y{AU,pkd.zDr=zbƬ1"q3S%{$ypH%T>+DhӘu'@PHkjٕ62]#JաR4/ s]j.*)1YbJ0(<-H"e}nzK \=r.}$Xab+C b?!'aE@?\كgv#Tj,;_y~5r(Dሢ p^B\\NZax %zC:>Zu*4@ņ8c4 tt:2tX'G+»USY٪R}n_É24W&8=1_,՟aYhBUsR;$i:24ۄ09|.xPVyDcz}TlG5K|4P|XJٵ"M6Hݼ_h{h ˡM(WT:qr!#\ $S3W&^Ӓ߯«iϞ5sil`yHfqlly;-O+ %qM<{_ h\GO{Ȇ?_]#2kgE Mtj`>(h:ȳ[ZNSA^3X֩&Ў Ҧ>F[K'|H􅒾ٕ96~]r%(\ϫNmɘ5S5yW&moFB /&W arXīww u"[ hþ@i Il+OOKN耾e*|wGg=ޤol祽E_O>Id[*Rlw|g3M}}RY郂xMƝ#|C "`/!cy$ /ϫtZ+ˇ#0`)hmW8|A6p-&UD2M/1oV~|r4'T,(9pK`˼V֡I*AS_*SE&̖*mCv2!]H` UMJ%\nHDp'?((9 Ł& !V4[VY0;o/כøs?bơr_ 6Jx:QxـRL/#4Ke}\@&3Fn@4K 6,ij27RX_ ):~a@K ޝo=s@H'.UNHYf_.>Hʰ %gǙvcvI֦1pSהּd^MWZZ+?ILD@ ZHXYKnKSv" 'W2rF9pxT.aW.vHH zftU/=3 \&5h0ϖxT"ؑZ,W!ٓw" B8\*"+&VYzB>SvgG0<2 t hGfR #5Um6(z~Z1qcODLzEkd0:8 #@5GtZ@v@H_.TA>q|" s(xXӁ4^F8ܦU\cIP׳+{H֜Jl&.EX ׈z|8)@i΋YlĂ#Λ3Yg- DKnrds/瘠57ﲨ 8¿%_2_Z&88k"`(qe.ր$A\=6F4g̍a Py;^fx`.<*ʫfd $I#gIO(.5L<떌s^i矪9&ZoNmZn(G7j,%^x{_FM:O{)/: »d~~ v^K(k/p$'lmĀɣ(5W|hvŬki5VQިoW\)WuU!z%jd/7i ;"{^yQ<ף47}[2u) ] :LCq~V;Vi8¯ pikNM7@Pn",z`Wz˜kgT!SZfKz5!iT7 ?Y|FuX ;G1˴[ԻSA,3,TD%>Y9t?|AF 0Jǎ>=Lň"\8A .ҩ0EE?)zC)ht(W?+O:\C5#=Ak,|: E) fY!^mwep*D=6z6λj y5caP('%.Łgϊ] b~y]l$i@-br{XӞ麏>>1,U [P@Pvz _ށT;^(>V|ZEsٺJO ͨ,Ȅ|I rkzFX:i)wj:mwY.|GxEbaB47i*p/U)x*NK[A俻z?^?KP šPv mƒh)T(Xl-j2R?~?5Ex:Nы~SSI:=U~r]KYVIL{4z ofևp MoI1XI%7p N|.`b/\"#U"hEތC)RE<7=/@:i=D^A5}MKeekv@KNO}e:RXDwS߆bpA%2Zxo#ZԻyvǙG\ gbZ 9j9od V ) raKĵFAb%~)005*(\;:_%arYy`қFyoA5f{wx}knZ_6qNq t^0Pi A#saB! $W|kZ@UsUon5߈<T ҝǪP3җ'c %?\HH0\ynEŎmv@TB.zRDf/|HH3H%ܻ^~mٽBW(x^5i6Rۻ[@SBȞO("`亞Y hGo+f+ztZLBˇ>\a`p-ҕ톄OE[ȩZ{F4֗W6`4^ aa6XUј7sj8,0I1mʣ#T&e'A Cjڡ3&?{)={[ v'֝$c; N▔L&l? 3+*@2[YnuyBϾ?+WfxsHg !(DM~@r1( T5YwN֯aۻyM@BÓl"ЦFE !uϹ6Uε~^P57 ip]B$i#\HN51-m ?Y osYk 5B> Ÿ;tF+F~vؕ$E`af9Ƕ )<2ޏ2 E~4,%T3krc0rgc;¢o2pHJS&*+aHe&~86B9"0ǖEZf9,ΑQl׸OP=~rq{|t~.־ՑK4%XL^)1 #Ff偼DOYXE6{fЄVeTpÇ8%y=KaUΑro a~-vP6ۃWUCA!SMѼJbzYeKUK{`Qq\>[T4??mp~=Ů-I=)Rj)(aֆگ6BR_c.9$,/7A*|yC'Y2{KO6.L+t#~Ae:-FǒџOͰ"uC`F0'XyZV[ #3G%|D~򇆁H:DN1/ AtLFí&zVeȒuf=OCȸgU?S2ϲlPWkԋ3Z7Y?oqtvp):UYV'cGIL-[**ʊ5a/U+OC"nՅnll/.`Vd蝥nߜxK™i͎yVgzOǰ^ a4F/ދт 7!-#'hC:K#!xH6gn|*Q1^pIH5Q{Yv_ :g+EA6a@x_:،1ξ sx~P пOJo{R}ʚ <]vlc,(QQ|+L tl- [5I3]Bߐ 4Y>b24GQ24QiMXjzP_~iaJbY(->|a="Z-Ӗ@ugԀdGLZ+{-C.݊me  uV!=BY3v2*}|;K=r oJfɸ2 jn]ki^wI gbzK>q߫$r/{,UL>DBVy񋛍4-v3wGۅyhHwmԆS)ƷxcJa\pa<=Y%B= f0}Oӡ_%P5TR!63S.:\g_}.3aq2ނGr0)3>M(/:\~*,tJ.*-l;]N<J>LDQ#}N79\F08 _.~#а(Ħ}pŶ2Υ_k&V-A*t3hxЁ uc끡 DzC]#걜f] 36GS2hl5O(aBW$xZu@ 2U$r#x`Fܷ;[3/./~{h7)+xsH_O%/A rJ>dWCܹCLl?3'u)[)O68lh{L'10a1~+ n+(4sg|\b!nјClAqZڗ'6,_?s#\.HEuIZ߾$=2l:bCXs\M !<3 ([*76sT`o! @Jc.U}aExf |l02fK*r[m.w"5.4$YΛdջ"N@02v)UIGK ehbyvڃ=ƽEGqpO,rtc' yr\4>BTLY L"9iOo9+zi۵oD7=fٙ%?z9ro[ lR!ؠL#'ڲ Jv3K*Qv> YK8 ؎69 HC6 r斃pJ6G洱ɇ[4\)+iGs)t i99ٌnz/z?3"- G~v똋[?(\yK_KPSWf18?y ;jz6Ǿ}LJ]+Zͼ3\E;B^7.J(RV2]˄*בc5-$`g&{ / 2ߣ R-7Ko_CGbmkq}&4$xaG3[>ܕF PHYx;XȸyٜվV*خSF˔3'6DkTɻǝ0za_t][M#+ΉPW^5؄ZK (f%#w}T 0q4~}2C F#( vV82TAnYP)19ITfӓ rMaJte)K>@|i@*;n,S"w:AwpK9YNjFOw_j;G=כ$/@kE!XQhږ\E#I/^'*hw)&]%җSCS)~5GŃ \} a_ҝVkvX2us;;RA[ YNdhz!4Ë1ntÑC^WҐS\i )f7Z)DKE^ڈ-=ɡq&7?"]< V(=*mOt,"Ri8 x2mm`$ Cp;"RW[\ *bc$>eyl$j q/dDa1Za5b/Z̉0)|V ӉnG ).6a}7&y  N!o%2.H&ke:`,U䅃ӫ{v(d4e:%u p{WOmai6-Bg}fѮNC"o)Ʃ6ߥAv%dTMtXj6tRjTjb&ƒ^ړK'~*rݪFS"b;yW@&0Һ>X#~_˪ G ']id} č,{&0sgh9HYdL`p#v:[. ٣L+w[V@zx-.!ȹH M*C`]`,2fTb'e7}ßb&nz }Ҟ&׈3"t֭gPh /Q0BViIV`\OXB}rY3!#ÿt,_u@ ;[TΟ :ۄ@-F.Fwְ=a  W*kIwmLsE]-jmi]i Kf#d=}hHG84g`-͛j21AY5l{βv@ ܬ ѕ_n;$I݄r"G"Mi?ݻÎ5G FlF/$tI/PԜGK\s2HtAI@i7 %V*8yzqXU|FGw&O_Be@x/VE4T m""*?U̒bFږ^rͲMj$Q Blg)]0c tV>gzCgsF(8͞IxN-T ĝm;gMg桱#tayKg r~c_o}bOvRPY+ /i6/?B9LYPOpKF}x 6}jPJU>KgDr[ldEA,Fb3qxE~lָ7 Г2f9;J. fIz1:ӒxJ2 {۸<)`x)_3wk> GUT*OȷTUP48yG☖ioE*Zc^OIjSNo;YڗR i3%Zi Eeu j :nq{J8MW\@*8RM6 !??C9x뮖 ~ģ2ߡG$.yhm$ܞ놭D |b~|uy > 2E؋w'0,k`0ܒR2MQ(I="^pqq`'/ɟ^N00xuus&X:dTcd:4xoC(ko,ScXY9=U?V~(.#90 W{-,AYh't0Uiala)M+lGEajnشQ S3ߜY66$/#`LS)?W,IВV|nbM2|)dv^Qxi=)d5VZ: v:9m 1O4UE۳S&bߍjurcjqDY&2Ğ?"تVG\n#G: Z*j!a\+gr>/JyߥK~_ݚ|~^;p~bz Af2QI|~kG ?V(=@j ޒٶ|R^OՒYb&f#ڐP#S,fU1V_kuH'^Z pM(I͓%s8 ƄYG6/!i^MB2^_?eOlgwQlxLCKǫؐDvVP6%Oa_ sS7ur+[!ęqWpsˋ}\S\骽TX= n>)A+OEy lP5;l'a3ywW 1* gw\}U¯нz- -0o(sS,ʧGZnlƘ29MLjҩQX7)hԞϊdּ%Z1ţduTfosv@##U k w$wg,NƼd#LP`ף9o UMq~,BzdX %[ ԴDP']pDu/zKN^xZr͹qm@b70Яcl>,;ئwԞa;E7 Qyi-tD'!&}f(?EqIIC)Gv* 0#?#)zmNAb`س7>p|V\Ƭ7^L3 "~j7V!l^ z- \T-p`1P*K> 2_KIlLWJ%{љo`|DW zv%cQݍqߑaH()E`JM)H} +$clPT& yW heΣ7aߡ%c?.NcVyNV\g}68IXҸ؊f{Pϋqъ+އͰ=]mdVN'KxzK#2NW͢hPh'QzEDeb%ϙy:B9BWSR?*I8(@:7ν7q'ULNfS:DOwl)-ef>#czwP0 ⶢ|tN8a$=sDZi `bI=0e>vhoWI޻3~יBjC:G~*@#lRUȧ[/mVI1T+gK֕n'[Ej7BEtӁ+ WCy:Zj )|.cY,Y Dl&i|,;ؔ쨫8G ɸKoG٘u|ow cݢN"))\Q.sV/: k 6)I#0 !TmI:aM #$"htNJHz5K,$R\&8 %22>C)٨% ̭PĀ  =:a΁fc\ZtB/]}C(4ʤYpB£ HeM;-vK. \F_TGz\&u).HH.1i߉[JԾh}0雞~-NɁm3Z5GaZpWa<}h[*Gq#VϽL3/]ӂc6X-FCr϶@Χ[܃7zr#K3?⊴%Ly 3 Zd:FuT׫.M-< @jKHA͇ W3Vm1e &kυ#WoN]$,_[+zĹr.W&sY֒WmV9)||{#/^a:=akV+b*T({}~qi0"oN@ι= ʕL=$]͖*@̶lUfxnH^P/_QsYt&ޒxh)ɳ״ $è<_U\5{q)(q ^5z3豊1{:ؤu^ t W/іDGaٵ loH}+6 YX>yjuM(S✟(\xYM~Jl{%:/kS\;ڲQn\ynKqYdNxeoOPU@ɇ:g)]CT$.Һ 5Ny&8\B2:E*FŖm 4y%]q#lq.I8qdqPwĕr/Չg/]Y22q__">WT3Fż ɕ0p4|+^4EKLf9E;\cmZ5Y= \1 ۈz1q!qd- *b@\08)j; bIldJ}S+TR:L<7Hq/m,[ħcpP1@TI(f)g4p~jՋK`E{ 2@G(1^h$wä2BqnՓ!FtM[4Obh"k~ ('5)+HȫGRBxZK *BT(T oByP̎aW8 jbP1qQ9)F؝[2Q.Kؽ Ve0>e G>92PpTQ:-AW<kJVG 2BRr:4(f vHí鬍dtw I=(.ޔ۶8eK̷-?3~|y x16=yp,eyҒ;4 o=054ް( j=t}^Dpr?x?],EG HcDz%(I"Ų{Wl!ɖ -C3ZDqᵚ<8Ek^ @>vjflUFøk_4rPY+|vq;4ʲh̔,ce$222bgHJ'WY~SV=>6 ޮ$-܍T%^a ySJ*{I+4(*sevާ,Jۥud#q|qnZXUx~Ԭ^N|NdPKBE(.C =x2?rc݂+)S"*')نvo`naN$zg|'$E kob[&1%5WB&;N=K<0 0h^GN@% ve<8`&|iww]vD 'W\RKZUXx\3t:uv5Vd˽:0P|N!vFs-b;*w/m}`P|e7>~RZF\ǥ1$U j#OŘɰ:ևnՀH O@#fp$YoM.npb!d 渫Á*mܪP,!Yi R 0;|BqN=֬@4:gs|r.NR[7jfU>>a8~jZ`՜B#z[a5,_C|)|hS40, bVdzpCe%>_|5m Rp;m~IZtMFHȂ 4bNON<9MU+{-Ϯ tvY"h{>Zv ^r,&qɐ[۳Kp$f/JEVuvjy,G_MpٞɃ"7ƫfeP-g\~.X {i1zl?kDZX6K(>'n Fc (t.hfl&.2v,KfG4_'Ny5{O&J~It jJ?V"ajb]G=oySP꼳D㒻FLiv6MY׆}*~:=aqf)uvHFY(*R٭]zc,% DIBe*j yScO Ի3Q;$pqVB] EQ&U@xA!ZsPl"8,ld:2v(k}oVDhU8_rB f=%b_\ su,G.]v$S@Nte'@SV^w7"q{Z QQX] 'Wc^qR"Nd=GtQR]I_h<OEH舙ˠ}rռw-Y+JnTkgPK ¢ +*ŏ@هMɉ:B`_/^jg@!-[ T# 5>89#q s/2/TnS8hA3ms5KW"O>D ۯPxlΙ;sx nUrRfMs X;\eVfj%I7VpStc07~$Sǩ;D[2;ycHd !$Sfz)r7(Jr)ˁLg _9ɥjI^sMyh7e'{"}npmvi}0䂟eH8 gŲx>L(Ҍ q\ I\d z/=`[oĞ<Ǖ OLH#pcxMv؇n8Sۏ(9iJ+QJIi{ LGʌmr֚<aDpmPi!vKTPávk~>o{"uD14&#櫷Βޫ:_4\BM(L& Sx^g=› vU.zR4"]mѻ|P \M?LG~.<#Х1s]d:s 4v$՝ƾ=zkCCu"1# ;fo "T:)m#ZтfȜTW'7t_S0vg8=Qb|2}E@hV\||',j]XH֡ N8]wy> ̕5gS>k];8e..)k Jlm y}ej=@~kdU~E jOtT{%YJBWzUasYA@IV:RQܑ3f? ]ߙZ_]X\jΚF#8{ xD=07I㎰v6K<&5NL۱qj7~tA :D<fJf66q8GO ON.5W͖®b:p|,P]ZWz3Z4䩽*(="F Np3tʖ8gh‰,B<=8EiwkAsH R1/ YNҟ&$Fv 8[S&BnÌbR"+?}[J~ɡvLr9`e3vU 5 ԤBu. >z;~1%bxl78y<N8O|-/p"YJbGmaF|}t>_5p鄤4RNf=y ѪlmkjɟR]OH^*:]`Y鸇8')˰aĝsk/iV!f$֊IV!9һ3y[]GU^ӱ1 X k4"o`}.$7yqQRo {߮]c-]VnjZcBGԿO]zxDXLv)x\ }24P,-ttW>Qm!%m60e< uN #yZüZL3'*Iil8V_)&.v* 0`28v;FeQ8YQ U|@Rވ"-iTY:yR$' 8xgr{ka%" y Q&6 {>sٔ#Vug"' ]P,=GOmAN,fA} ֜X0irMm%-ꖻ=VaXq|1$+Ϧo+ R c6J܈=sPm@}x$16Ub1f#71LꇵMjFv]S$V&(֧J0u,CubFx\z:gB C]婋 &=AjN} + @ >DY̥R(^,VpEc'>GI{ޟ¥ M,B+ǽxqx?f޿ %;Ǥ\g+l`7!s\]l#k5<56&]S33Z $Vw60ڳIl ˯T^B6/#W/+Cn{e:Hâ&mNNf;N#]|`gP̞lݼ )01]D3XD/žp5~O4$Ȱ䂜لo~Ezv+$zGd,K/^6edMY7،d2v{IJO~WW>J1͍ 㟀W/ζyk&\ѐ|)3}`̷L1}ʊ T{njIK'vYoeQ 2Wc^>~c}]D$?=;wBzgխO bo_OH}0+AN:`2C"%@^fzZȶ8N[@'+]bL#,*T (׏{轤% R %"$Sւ ږ [=Z$7̠rfRy&i> ?i`-tćPAl V1S n?xyl$בɗ~9(W|%MZinPptXlJ |DW 4Tn'WU\QGu2~WF@?S{1AGծdTEJpVkA"~0 r.+% $y3<n@}ԑ[ntO*[b0] I"e^RӔg5ޏyT}ҍUj8D. 6kKEHDBQ:J=·`R[W ϢѼBGEq{Cg,B̚ ӊ珺$.m> vIm; e->9xTKpv gGXsE+&O?!ҏ-Kzja@qy.]cQX8%_yhe$\{7zQ=/Hc ~U%+ N/0~3 W,W7tTdG{r]x"]&})jrgbI8j~V ~T4W)(| l%-n[C}˄]D.q_?~F1Zɼ J{|6<1kԈ7H_:w^~~ rV0î$yapZ6 8^1tnqh|ۘm,wʠ{s-s̕,^? zY^S?vUcDaU-^wzә5+!z-P8:ΫqM>_iy XYz0Vʔ<ں!wb1[XoÔ(ݞVR"D[By)?Ff洫'AGvHRh{&(;ⴑ2Qck _o71Y2~Yܤ/m6("Vn)%ΐ \ ԑĈV6|UPda,2`6)A.@F+o-I8MYt2Q.F-F_hr~-B?6x В]/] 6"#)(_{? o j/sv3̈P"M /"K28WGC2br=ߩRJfjl]Ry*#v k~a?Kߵ /իx_)U,(H]1%?!l! 10!sW|O! f0fΉǛ)LX%i>6gF* Sw%A$\|.[ZG=@,w7<Ɗ7Yކ&s*\!X=7tBWCo~lÌXiԴH²5L=)m6&: Ql>:xsrSxUju馷m"Rc7Hx|g8S5U{ d>(fѠ1ґĞqd?RmBle\4>FPBv-Yh܍C$p#_|ץl4){›1I-V 7AIR!h_358cnoG*H[ynwl4]2|kj3/Kp$T̨x-;lvd&m7 z\*t|YGo5}Sp{mV69Ō|Z2zXcq~2о^,"㋚ ^ҘOr'GH W?%H[UPGb#:!A+| ŋα>3EwWlޫP Brq`/ᶪŰ>'v=zctr@O+Xjį&n5N;@6e|'(vԕ:08}bb346TtL$c] L 3ZgwR09vM=7 n@J[&cy^TJM,!DMm,)oLJm][89N :nӁ \,F[ (_ZP/HytQ3AVMcעDž=+Zlx5y @6mA&}n 7\9gaHqW";FSQ78F{.E!LKp4%cA4bAq謆*b 6Xۙ/贔<5X]f|hE@ryt$L%7N7y-RÉBD;g[u5}p/)(/*oCuΘk<16kEO>p]7u+?@;Ӎ+ %x0ˠ>:*;ț7l5PSF;!lbuY$9V$hDvWlW)43qn%Qgٔ)GdRA0EK`(D/O",].|–)U3\ sAR0!v5i:yꎵ eC1Qc${$JB2pMK{ֱ#-%ZQc5.6ޟ:"@ YgNA ǡzQENn~n@R:ݑi>6, f.ܮlkK!6 [ oԤ$@NVhGho/󄰐BwׅQtҟ8" cgz"zA[Z/T * j8kv2MвXG: xȸI E28 y9v&m7 ?}Gd_ݭѥ `bH]yS!j> N67 Rv*"]jb>͚!|Ė(ͅa]VE9ʛ8cXJ9 Pg <D `+佰bArH%/f9f$M &b=U~H`tE {'l@TqMm2!xv}Ex46y~]R_i> Oy)V0ׇjEjڴ>v.6QP􅴗&[KF5Ѽ4@^b7RܴI0!15n!+1+z%"!T3)qzF:;:eoqqUB` 7ļ!oA@7z2:ت$r6D6p' |T46U|iyw_\ ?-{6z׻`+aF#z9Ae`kK-KLF3609%5t)1|\ Q_ [D9M{t@V }D06CdrtLzUvg *$[:hYhkoO*񄀋Jd(huyi~3[x '̉$]`pL,y3}; UK'y,zoa/JI0͑VRE.|??;pkXw&R>xk2Bi6Y_%԰4[6|-<l l]Wڪ_::Z18?Mi"[ B⫏\k ^.^*N#Pt:w5p=U .^UI s`,Y4#XnQ亚yo,բ0'#%#΍'e X"{" Zb`*% _4sbcU<A9՝1ސlx#o1 b;nZ>Rba=pe䑻ʍ-^2e,3?]Qaq 9QI:fE-Ppo}DYrB'QoV> ^r DK_R991-E23Ob{NP#_f$;AMm>%#j<ˑ7b"Qhw-{93ۡn:i+'B5&l+QcIjD R gb1[c4!Ї]qz-2f%]lJa%4䷿+)+NޥD1E\kf~vUPX1{gld÷Wn>-2lKtC@^X"H!}̘pn͡'I(LҕM_̈́[6#;( @XsD$Q?c4M:ۯ 핳_l TKD"vFzNWίf@+OGVnP.ln2l6qŠuL.rpd|Z^2^x)|"K 2K_]DQ| ~lOݑ܈Eo KvjAXO!vwaP+׸S~!R<AgZ3($4Фk2Ḭ$$ tFo8Ο a HHZ3)G1425=DQjهD 6(\2 SzeD5nU"ˮ8L ]sF VɖG9b •Yѩ*Xw`nu6 NZK-puCJ11#Fj1\ĨɢyPGU&ʗɎ ?mQ7d˒X$^Qko0ˤ7fMBᦜ뇻$@[ 1t78%RR}Gӟ>p7rd,#T]ۛ#& Hſdr1l s5KE%t1Rh%h9Y! fVt]#hM6;)JGIa.\:{^'!wNk}Be-L[sawy b-5XI'c&(7ًq[MFv 8)фHf .OILa)a}d{XM'ށvr:f az"(ߥHEY2Ī)Jb%%-ܚ6!6Ie hNʪ* MxVǕw2yy4eE"]hCGd8upn$U^sElj׊O赆P٫gWwn1_׺PڴrMN˴:xϗDN ,˅Ao@6-n פrTr~=NzkxDu6@Xcakm7Ǘ^_? Τ"=7JX:OD*?h gkb)sV9LЊuؚ?u =,]Ow*KvS4h1@he,ʆ 414EC5QUgm{U򛗯z;!>Jڏ:mFO%3JeOkB8"-/8C-jʿ4.(46-"OېB"d٬G' 잰CG%֓D_Ceڐ<0b'=1?>cQb#RgY{xfY tδ8 o<?+l0d_]bmXn\o5[ߩX!k? ᩕ#O-*Z u6LD]FxjZwGBckw{HObD7f33Mv )Pg 'oE8ׇ71T6(*G#BSGg2]r1Z!S8}+uy-ʖ0j7퍲_xPj MYH2(;\do{ i :t'zR0,P*au$ibk`?Ѩsp,EFʓo%/ -IFA Ǖlb J!'om43f!Rsu,!$JOfd ,ǝ`gc½rS]ҟxU~ SX/PFH'uzNc,qi i-:4r{2gآe>ĭI@Z|$DŖQ:[L4&#| :^J zvxhۚ:7(tzaN$u`r%|FY@=PgqYZ> ¦&vj-[&2VߺNi%faE4:lW_`Q!CDQ#UgR+`tY83ҦD1YqCt?u[%˂}?8ɪ.K̐QvӜ`Y-t]TMSoNvٿnPt{rV_$4\Af W&!p}hIII9:=HƳ;RL83{_j* Zn#clOe,boҠab8k<3n'*1OK ?Fi K5Sggx7kM89قQ#v+,bԜ2d̻pKl|vzchhu';26ي]ұ- m|mhW݈IƈZHݯo ʤ czhԵglpmHd. 0m1oy FأMR!0pi'>KdjvjagʺKPasXi^߭EUB]*1%wIyTlo="9]N\͍.X 83uPꡯ:(C8R.'|Я!| F[%ZS4LuW0`oe}ooB8?NlY_0MR0IbD EMDbLrF9K2o@#^͛83SS/s2Wux3*EulP{PIG!WATZ<Uɬ "VBU*Z*])U\Gr!3.Gֶ*ѽ5 RQ"aQO8Z8exM3pz عW94pYmoؐ' KOkC 'GTMfCHSt҄lb:PԔlT3kb60)"PtP4C9"P/UG،9|342 ̒IZ8PbG MT:i PvOQ~kͭ3 ]y~B9]t}u/;?kVj5OtvdJu1hDܴDRD? MPcsqiD8 W;Îb5J !;"J^:$WoCKbVa-J 6֊rԂ.>a*]sa鸩3[^5+ֻQ!+TE⊱84P&-0nF4i4 1`V4ٗdGcq夶9>:ڸݐ8d~w:ƥ㷘&AΖnHeY{\#%|9=U:s&;PCB%{4ωOmڨE-8v鞀۽:<@E , 72M0A0R7 |&.P*_dfPXc<$HG_nƧȘ[; s ,ǰ¨"6E.LC'D[%?mR zS"C>sqYLkt{((K69L]\ن-"E8=Š?93j 4:h6p.$А|өL[o5~#үJ˜{'dᳺkAD:l2 ಒ?qD8t13gS<3Aѿa< b3a5m}IXTKڝb%`$8_?8p`d:ThP2ɏ6 ?>I)QJcֿz9FZJĖ _֝f)E 5ɚWh$L竿&7Q]I#aƁnL^8)9I{S[Ԟ0@6 QV)O-mziqⅲ:C-NMPm{ T +(橄]ӍnGWB^^*Ci48h] Q[/{?),Ne:o.ٷ*ST9' X^$|EۘWFqɛ7+gqq(TmXiC,s^?OMMlvq~([k #/<8Re?^rTqUp~U!Tn\ޚll8o(ʌiQ ,v8-6k>o i?G/}0Cp>/D;J_L<oA A{3gQ.ֳ݈:2;=P س ]YjzKm\4u$[ϓA@б ,8Z̲){:eHi_*o 8ѿW`P Co:@= Ϋx[F6>ڸ.ERCs 񘄀5&"k!xkԦBB;C-М|!^c _Ete"?<ޞ(hlzN.6w={tI !Ka501t5{U86{·wKTس3V]9m7d~Kan_.>w6UI[a% I-GlEg+ox$Uzu2.r6V <%̵h78F.܇š"Pb ًzz67`DaOx0; Dhg~XJ~Ӏt6$^KDK1};J9yK[<?nV_I| P0?`v}I, ed=#1p=c4-EMqt 0>G+W}՚*Su6e eG0/<<yw›Gܫ gGdon:VGPbH'KbB .$#{=HPT vYgRݳm$^U#tsKc= zRq7w ÀHWבYgUa# ?~ԑ6c6=>[8I&~ lFJB+1^ ̳BbڤammD,Ȗ$:wYyYr@@87L)kdAHH-Ki:v'0g=l@"C3,4QYװ)h%0uj8w)gw);Lq/kp*B)e+ rϨf99^ZC6cRXgrΔq kk sGAiHma083I–|j VgDD*}Tt7խܡ/[!oe_-ٲ{:*T&ARɰ&v;斝IXHa)XHspdRV P:yZȬoäHD)*%|#î^>_gn}&ĸa3a3"LTmFB$YX?.l"xj+Nyʓyzx~xV1Ʌu=EP6ם(XK0oT Dr09qNE_ N#v""ljQLcF^XiUq>x)q/3E(ԞZs9CH`(`= Ϡ܌o>4GP8xc47?ENiEQ9&{1\2en4/66]1~m$&Mnݴ:t<r^DI*Dv IRiԥX(JB{Jj!7TuZ ! cS DDѰ*ԅm OWܽHu4kӘMobU$2 WYyݯf_^q=F#+Ajfb^XIoVFoߢt9q]KmMAsW,6B+;@ ¡OCeRjtɬ=hSu/4MB&8;'31 8JSdO喤gL7z2_ګ4!~I 8I+lY~'h܄xo3,n"ʆ a솸 z 4AO?J+_y|U ذ4dy}#%OJԦ*z>Mx\7*  R{0YLqᡥGJȪ x74+vbNSQWdQZh:](.le1.Htx|URjfnݮ(P@%WR뿁JRnafY]?k.Np~v鴌˴\$KMӦYM #^ ض{% 0p I6x*:QAi'$E2iE98Rnc9j@@8MD @ L%|gUPфK@̢cR.|_HľrӅuf5@'8w4]"&#]k 2ЬZt^`2`bIL+Jס.T*+l|Km2Qj(qNܽO*]՚%M|RR˖zmɌ):w`&]*Fwۻ ++ĵ邃yj־BcV0Of 7AnS)]RPPS(^t> Y¶FGNw!hMXgDLS%}PXCwZBy$#kI6[)\qW(^I6(L`nUs\As)CV}=[7ķ#ڠDbSZp.ul92-_@Xc7G-GE|~ddvG' 4w̧%[z\z5ݡ5Z# ;xc;_㍡ %b!MJk c1 BQ;UVb'lb lJG 1 Ǝ5D nb.`ݸؔh&JN_Xءg"JH+B$rpre[2ű*|^GT>~{pg6 8Z7xՎO4X>M70F5?)}(ᮘ5ދ$ z,ׁٟa1kQ>$o!i_>]1O6?#̻e@!VlLכz=%e4ϒiWo|UWs?ʈ f".YP|K BϯȌXע^Մ_a14^BAQqQ)Y& Īm犷1zK)?=r$}TXq5l (a : >+w`ߌ"vMԚfxrgߤ̝N'&Dm-gGSBl*~LQo.q|0Bg^V3jKיf~BeZ9ro3 sP:8 2"%$PY#շ _ —'Rk&=Жgjj9H^9Cws4Eheɡ%@ `;s5!^C7e䬌2-Ϳ?<Ư~G7a%i|xF 4 "Vs"!#HDz 3YA_Ұ,b߄`!O*&3Lwַ6Q.T!u#M 9*T(hyN#"tWs _4sij|\`m)= 0Ug0gV~R&RV+ 02:RcK Dr\֢A{J6/g`4\ /u}Mr0Ї|2C55pvH{Vd&NDWe%.4U18PH?@\ kx"lWy04|=kZ-ePSgXLl{EךRϣ_A O>Pl*]ғl:J>ws|W\L]<(0}K=jn*u=BϾY+6P$vZ-=d`HɈd6n☲ɺW- D㰷I:KT3uR L1EuaW `L'`WY,gܾ>b>޺{Lv{)bP$=pnXbUV$JgG[Y4yRTVf<(=7W 68R0('P%Z+GK1_[6x()ZV@3x[U ;@:[yQS( Wl4+?70@s#_eqxr(>Zi$ tXÚ_߭-$ zƣ'+#Q,Fl'ѩ1av+Q0駿\ɿJ?*|d#@H,WB&mHAJ u"wd*AwOYp{%T 0sD&ړK FsHT_:2c 偃#`ywϾNx|k;47/gH\=T }K~PI{۶ 0RյyվaXuxtQjE)_*<a( Fy) +6,x 3 ^mW^:!'x_q,Afg)z{l.TgiF=^W Ibmu7k2ss&UJah91'I9n x֘=g 4D9sn0CF:WzR\;zDr})ђE~7RT>ۥl[P kߔ`sLӻ~;]Q=O57YmW@8eڍ{;x¢7o\V!\ӪyMEk]rph qiM)L'!t$CE0;=يckUSb\hӎ/[5xr|uOߢRǏ,9.D Aiw9Y)"@`Hxx"k,*r|\d+;G>KTm泯Wp85Dljs_(F֑>$~5[Z0/(`/F#*.w3AQ'YX*I4;g5&Nm:P3i3ѶfTnJF% BMvQy}Ys㺋QLBۊ4վw-wl(#0ICǤ[ Zwz#ߊ #ڐI֔s+(#J Vv|Fg&qzZ~ht3 mB`+kѸQ~3) DD0$;Zv:3ӕӏo1G㙐¾/-{Ec'9`vJF PoHgTO䴓\mu6 )_;47r gQ04UK`B61G_8.TIAǖrK Gb~\ v\@9~\U*WsתrNqZх=릉8Scy3ճs|z*QUa4weruK6+*%c y()o^Mq<#>#]כNuu \ 98l -_} VlH a@}:̧.G| z*AKSx0?KWxFi W''P')3DaIi!^R,"y:kDcqֆI.fQ5]`ܾ?*r?uVڍˮjL$:c$&+~?g\gFĒT0m9 h)LO6W nI*q N 5UPضVripby4'6Ujylxs?2ףWx\'NS!"ԅso5[5b ˔NG~@>krC\_j(K*.;Ͱ*z0PU,#lBVH!~;fhC'a|,C.?zbsCeڸ8U KƯĂ;z6u+2옲Mȃ(Q 4ƣ A NѰn@ߑbR{pdF>lIlvZ< juȅ{ץGiȉ'~W!!p04P FQt{Q.86(<'-:Ud=KQf@䗨ni@5pwS_K}p&gR!&ꇍL}+R;YjCtY8t " =xqppAjn\dX+J%%^ |- =d}譊,&C/ZF/M u;,Sh5] &آ(Q*eK-m!.O9yhWգZZsSID tɸ?_ՠe$x2Ž'%29*2ν,MxU:Xy:Xk!A ?qoM Vuh>?fV];r=¹IacE9tX]4Ut+Npf/ظˠn,tB*L&-9pq$iڰp9"[󨞄fTN\ڙֵKU4fn9&0CKosP Xh[!YRdU&N^ ,_SւIe7cKY)>=jLY/sk{Sb4Mj!ހt *.n#Ra^|$P*$nuޝ)" vf'!_E0iXÈ(a}[+z)x߳79QZ )_- 6u j" zښљo'>sC=kf~9Adט88#P3xVu2j$ t%.,1hVakY!ўp3e݇% 4╫=m8I)Vƶ*Rfi>IN)pEMj6B< 4fr[t%M"O_n_aܾD:?/Ŝɪ {mr'zz) eUw;5>cFGZ (W`\'1?p!| z^gY4vx znU QG6ީ9V!%X{4MMO8\erxKJ0I6HQwP}N!E~M|ߊ^^7S<5MkʾB:Jq櫮XD B1K0Nqq{E *TCwҮOH'[8\|>]`G(FcFS$BjMy֋ypu$-ҵ0G9T 9Hd"ɠUG*ȐwV&``p߃eC?Vi 6 !Qd*Tzp1JnrS}ѧΩ-o>}~s{&kWZ p`4uiŖ52$E";ߒ@F-i27#~Y9oh=Fx;%\h#gѴͳ*irQ>A&ycmkOdDƿ'*Ͻ,TG?0;|%u%Jp.SBls>;HJf?|kНAJiq6t((kNVɢ2"*ˀTPfTK/۴rr?Up\&4$wFKkS5gP^t0g vԐm YRHٸXdXJt|lvdkЀk;SI1Vy=l'Cۛ @)LVO/4Xvo {!LBoМܸCz3Yvvso76օ|^mJT,ھ,kZTOxhFj PK%m4uΖ@M͍|8R_jŒ'rH3#qA(SEےPʷW o\.=nT@f#3\GeX?6ƝD{5,Μdֻ48p拧1.+S;[nӌ?yf^}l}!#}]z,T HhlXγ\|:H7$c3?%s}|9KKЙ,a^XwfWaPwF1wCAeW5wX^r6?ꚑKꓛFzn V/ dڡy]H3N,vPpB̄ӽUG@\#й}:h:It{ޞ=p{]s,^*b,5:#vC2-qdd# ~5u_nhLe=,zgJ:ecN2b$p͆eߧF6|._եu #0FhUjEAYBXWwCǷ̄*2J@)ӵA'Q#X[WjސS PrU5UeRDĵY%zs;=ip WuL'#9xStrTgG:|`Mh=L4a1AXw{)m yޔnH]& Z53I1҇)9e*M*_|K!SJCح(8ܿDrn|D J:۾['3*R5D9i> 5eQW0J,1'VIEAβiMߏ;?G~^! x}-pfC7ӣկó:&A^Pͤa'g( I!^q=6 0#mS[Q%GN! -ky3Wuh Է__} /?LpTWNZ\r~B[ُdq$T !膦0 ! I82C@Do";qpTW"\Lss ᕺ2K,NdoZvйt[ %A7= QDȍ(o\ 6gX7s 5mFάi&\^ I4=#9"Mh[HF *>jI(#p/$z'F~fk*7j|Cp+ݻqè+y|SqGwU*^j:h#Sw%Zڲp=̋WќIZO;.<'t}/P݊&:3d(@fӓ""'ɁdqH;6A6P¼~RKc0) ICfgHIif;HϏLTE"f ?b$=eiHZ:=7*ؕ[a`) PEt'V`9~Hb.SKeuYHkHxi_OS\]-&w`>}嵔r vMw6_lrBVlS/FQ9nܦtf1Ka^u/"y;!inuuj^GϙNn˃fv=qJISIpr :C_d1"~zY¹RȲ6lo W]ƶ dBnIM.d-a[*s.yNX.*NQS}ň՟y6**SGU`dKk5).+욁PEC󣌛Fɬe>ҖMڡs=jn`DUnaiئa9ao+l{z'fc_xoю'!%Ys(iJ߄&#Q~ރG5bTdpݠXWT\b\ۋ̙YvRñ jg-~4gjبM%$Zʡaވ_) 6{43_c}?6f6zI7٢!΍n%FxHx1Q`C!UC&'BZ Op.lӹI@ewj y6$Ӏ9*,Z\oo>UA̮}ϒ\):]*QYqTJ]:]B{kK*!YҼk'Oqj-ݞO9PkU`[gokZuUhUWCK7Tp%_;T]?,A|϶`ԓtqfr@S˜ٱ@^٧ƙTI-!)KKpjr\Z|$H*Qs2U""&6;i͗75']E\z\t- }!@mXP$ OoNgdKպ$>4}CŬܪi R,bRD6؛6wP$zl\^?vXC1,brtV-SXɵ->fO܎)]ڞqCh3w3t|)Q @Q7*%+%ϑ8a#UE (&'22im+՚ZƎfy$UF4)rZ-!]vԜZP&xDU,%7CfIXLǬ""M ~!~E}GoY = $] G;u1ЎƂQ/]lW :,C{'O(`TxተQHV |Tm&ѦF_txS(Lg7xڂ6\-IqPR͈ a[m%e}5d4 !!~BWyEɫk^CE=R{ΐvk4Z3{Ra)贋BABۡц^])NaK+f q ik{mvE;:W_nڿG6A 'Y@(O1"WΜ:v|!Kga3Ŏ\R/0p[K34御3NL2wx B>L)(]Dj6֫s,Fv\zfH9l\~QWH <,qOEDj0;{3\"0AjoQatJ(Z.  o{C *vOn(wb|.aa ~ ]X8}9 @&ɭi3*hŸjRwķ'dې~Կ4-A6 -m$2UA2EMIk65&Rf69%Zͼ7tno~Ϡ4Ǽ(rg(;}3ѐFM5Bޔmcаڲ O?:||6Q#V u{Ǜ_KlC)6hc[oI;&^x9Z@4olWt3uW+ #|?ǰW;{ ~BE{_#kRpMgT%5Drkү.êP$*xk'D8Q)i0dm8#[δT:msJŒuizYNѻ-@ߐaG=4g8AťzRy7+A!h G: T]C)%1CgX yBbԆ*sAJ3ƻ}ňiݵǍ5c H9Zn|"l%*e9d\jg.doi^aK峙]Vօ/jӫ?4[>(Vҟ|ޠuNC&Zj7# 5.Z0៍~gJ$xގ5\}KM2HI~".ĉW:frcoV`lv3m7z@ {~}a J9bhe] A0R!\Fjs~\yT?np6)NB@UߛDŽ͢CkFY˨}+~v7BE"O_]qP,ynܢ5f⤤LnЖdc֪JL皾C'nzYopx-PUy fWf%)81&9#UP-؛)loW6YR_&=)txRG~!Rl5>?}4,<Ӂ6HB_{)[ވ.Ds4&9_wDiW_8y+Zbd9 񴘑_K8<\F_߱ʝG´G6,d1t&8@"r4 䇜L㡴kHwtK)Zp:RLgW.ҼruB|1E.9|b |ZNb~L" 43mRƻ,Br0+ÎG?ʄ;0ASowH tc܁(6{KzT*9`ST+XrⶺKD{mWcqOZȤw7a$7kl|eʤ\L[7u~򯯼l9mx owz3Ks_*1r[:ݞ64Q tKЍ+ @ X>>pE+ b %M>zܞs2xV#eu^10&Iy_5Uұ@ǠPr[ȁyO-Jfd‹A(h TAT3;+IZg :h.YDvc#e#ehg@eAφr̰M4bC̪y}F8 0@y%2)ۀskq#c/;}UaȜwb*TTo`9kB<~N}$OΝX+ePA. )DFPS/gkipai~#U)pS|,]MTݕLIOLR9"Yu>ɝFИŌS/co}Zs~ /em];β@"9]p3ojEWX!X֢8v%>ux"#"o=s:*5^9 uгx!Zskob}ݶExxʒ{PTsZőb5чlZOȝͅ{F}=&> &h$\Dkq> CeZ:!ѤI,UЦj6m>Y9ey?NKΙEYZ׮+ zmHizvruv`ϒh5Wwa 9&(-GCDfc-OJI+4e "`\^Ҥ @@yQ-SܳWEV~ p$FBeQ4G -<|i0φ~چџ<|Ʊ警[+ƾFCigegTL}g'6_PcayuxvQЄڽע9ã$8 NL/Ȁj<0k}Xeaa1T\mDhjk9X> sA);Ξ{ P+ 0wH[=z1a6o' S HgZnܧٖcΪ-}),,y4uys݊>5)pyH\Sr&S/&Pۓ䟗($4=w,sHuuhZV}I =[7YjT0 *P;iוܮcŸ]rP(gg1 / .#aG洛=Ua=vّ:O,e3m -& I0, "0x'Fde->eL^n6nɔ>uNYe_Yp擆zB i#bZIr2%o>yyl>''.L>s1KZvJǜ -}M늶9~C&Bkm9C`,76L˶^dtv8ɑ*gi;|JޜImpP'>L(4X2ArO:mń3zF5fffE`ݱ(WĞΡ/C}a:JBQR6+?W p$_S\cny(\B1 y8QE]8)<&mK<}2]SxDyGiNE/T4̈́wT|Tz%~Qϴ'?D5# bf[| mK2,CgN}6Sj'Ej 3m^$kĒ-oXD}\DSojZ~'yL$^\xf~Kt\*(r>5&旹Q5ՕVÇMh`٪"F[ {Tj ˑ9- =xJʒV:G8)̴EScn8o:QlU@=}*ql< κN>FUز`}2}*PLbvhOmOLAןtXCX 6D(rS0/>a1R0a'YcL#VubRt!še9^խ 2ws$B^ !5FN%jkz,tѷ3"1:_:R37ԯDzsHTMn?|Vm҄Fp沙!#su#d0^j4}fHp6&];|ߧCd5hh *{ϵĕtĚT 22R})r *G pc\ =Տ%kHX6m@ǭNQC KPՑZf+ w2B=n&»-RChna$sMQ' yx#Ȩ+vzBW P6PS~޹tr_}q`@G$ T7 G+/3B0VP6㦡O^7W=n׀ ABp8pӝT%0׍'E8{X;>HP"M)n3A&$:sFJswDܻP}o=;qS14#Lu7$J*`_i@-~x(A5 L=ó1N{yWB՞%ntP*Kr,E8{tjL*ϧW2FhT!BAg@$s`0PlO9 Vl|&ݡI]Vٻ*BU^kĔ:wYhr!dJG?Gh8ˤ7PP: ڱN#˔Gz- 3|]vyl>>L`o'6%oE\6H%OHoϚd(ȤkSY?*o2,jQQŊAr [e(h%:V@/15Uֆw%cTӍuSvS!ħ85f2Ov aq&"Y:=1v|$NЂ͉֍,4ƙ9NOeIgX"#'%L]{U=wfCsL!9&`GFi7ŻKD!7-xȟ6𙎴Q aS)6L)|/CqnYMiRmr)jHn`BRbeOߏzQcÏSJ\7ٟWGa$ JEy8<(EDyQBy Hy[-8%ͩ/=[%>QzmWTbCLErD?nlX30MR\FDZ]gRo!2B?y!CxK$^{pta*l,J=%0\٣O7Ɩm1 ghrאJCx ^])Ɵvl"V|H؃q* "Yco_lF|mӡbq-? ş#Lt 7~R~ݼz9A<Ǽeu> D ƸޝnE-{5~4;1V5uKMA'wњcD\u.g[Xnk~k BK,a|QBE;C-L?:wI=]Gj 6G%.KZ5/C g"5 ^.yfէ@@JuCKi;\`kư_wNIr=ˇE@mUtǢhF``.E #%ܸO2ys3zftԥ]=cW8~~bŀy `ĝr/P ZokzěT'D-#J>T:n[VF*B='u)EdEw&#ue2ZjٱU6>)6del(@o-| .q.hF |2O|Ar;N/8l؞y^{}`; ;R>>r]3PE1qk[N0 DsgF5y%rDǛ$Hh-5i.UJ$ja̽=5e/sVc1ukw# 8VS9\y~Dkԗ29$UFqEKWz+uܥ%^wX5}pEjm,2?* -2 ɰ}BBuXǃ.@]^~o)o2O|zk A$5nJ_ϗo  eM+fQo߯T\ X8"Z#k>&Կyf@1B"O#4uMU)^1v+DCkp2Fƃ$!D&W^2^̓8GURbFH}`AH]{5~b @:)u]KIIuٽ{p}zz jB% ܠ#oiZ \\Xg0d+!ٱdzR~bR?(3);UpczuƁ`nj~,8dYGQɥuMڲHJY{ۖKMNۍm5}) td-Q9ME~j'?zKe^}v(|H ]]7lca(L𢁊Z6uh=GFݐR'jOw=R(SF;žd4^ > .̌(cnz;T\?Y 6yvUYrڗnLV6,i8?v9]G+Vҫ!djx^zp;L&SF-PPG2gX~6n*-XAe DVڸF<5*)S#2{.l+ cG7vg= 'N ]I ZKFsk*7:ڿ pyOT 7IT5.tEvrX5vkSyeOWsͷT3ISfe{!#I3Z|5Z2g m+ھȮRUoULReSy.&r2+﮽1mޣ)IX Ix>a {k?/F2T!ruPP/z5d)/`q Cj!"I6}AoE?!@' S#$9E6#[l3qtCZRiӉE.2ƌFh-$)[2Rr5E) -B/A|Py4S%##X^(|ZogpJFUNӫHAFx<4-p~˃5j=nqBqA; }(>SbXxz?j]d^/"ko.Kd )t~/M(v l!*)x]g1PɵfuJċ 54B8,=JC s”'[eX3l'Ŭx 'F΢fsO#$z\r5_89io*G v䑙2 =E,xIfBa4W']pxp>3! w,}9=`ݧܰRxTǥƞ%N5wegGBe-vHwjDmG_<(; d᰹vCa5bࣩ?\ϭ$lw$;E#1؂ M*)t#Qn¸ߒŕb=)\!)B. ^KBMHN3M}:WȎle4ȺK?] F `љ#_; l]lHQ *:D\KS+N*I3r/zjH rwGT3{ x.[ZfKaOiclp#⹓bse#^@qūd?XiGkLAl2fɔ523DiU~kC0 zil%AБžAGµ;>!43fDޟ4Kƙ]~ C"U_cj<{1QMgԙ./~?5X,.K˴q|TSfqDOMG yQo4HƟ7q(#-V_ [pj~N[W]Rͣ6-sI қ_/j- Ruǹ-킄z6=#xG(>y?}J`3*y]&s O| Rgw:uML43z"ۃ;\5\pY\&\g-Ya9oAM՞=RrdHjq+EJj}';p 9޵o9RS @榢i&@΅X/"#W>yN}€=r{d@'~,M:01pi2ey+5 ?%#1~–M'A!ʵ"Uf^I,6Pnܨ$ŕ҉QGQ&{tTܔ;4őXJUI IA F Q6{Ȓ!8 zgXzwt#!+ tBg1"g0\9RśxbvCfR5_^=W'kOJZc?qefb K{C2##1Jb"}Ќ+ft9|{+f?߽q ;a:LI(WF>X-GHE}UZCnb(f4af":b)OJHvm c7k&y0b`fSXv:Nw]QGX<`չoJbAqFL +EW)0ź_7`QA^_Hc̀f>` e&0 yXړ_V 4'hKN_ȁ+))Zm5E0'c" -GnFk!vc4L~|G<<ye9z |pϤ:0܈-M@Y"qĆג2 stM3rY1P ;6 QSy )ؾψ16)ynv1 a&~ ^IG0rf8m5me AwXk 溂+GQhb$~{I&kf'seUU:e4*)LPN8y{h!o2wT 7Q(!vMs-,gOrq`@/A&# SQh,pٖI3+vc vK]"- "s+K \ PgXw$fiJ V[|n~sZe 4is)( 78Q6,5s4\.$R YEܬޓK4MsC$B!>bZg;$?8*5`aU.QV ΰ#Dη!Fxu:ScK06*&sψZc*"kGw\`ԄY"3;$>ι sBs04Err f2Qn 6Ldk, D"'! ]b+ K[˰:9RH>㛱ZvN<t2@ƸVEAǔgOmϕsN*4QNdG\ąV5AFU)!z-ۈx{c_5U[)GlxMf UD+%$f2d1pUp8Ùc4*= ɇ;CN>ZndzSi/1`4rnc L+Rৎ7Ͻ%F>:cԫc*l!(1 0_,=UW !7G ȔÏnZLQ_1ʿVEFm\}`hZ`BN7f7z#gj]9e+$>2 D]1g]zIo_dJBS?/%+w6N飔G/Tr)c%EyF)yI/QSt=,#7#뀆07`jRִ@ǢHM&+[ 8Ơ-? JEaZ[r~塲ߔ(qc+/\dJ\㽡QUV,2$;+4a]kHBU#,cV"Wa{5qhrdgncĩ|/OHcX?#u͝&W,?. d}ugqwm\b\⿡y׈ơgLgba>ݡ֛σ)]%0g/&)̳! /8p?[y`]@%yV"9 W6]ԕN-SSXګ">Q;QMt qS Ԍq/A'1<:aqo] SrgѤ0T:N41wtήxunΣXi]>.Mg$'nY:ίN +㢎 kYBwHf1T}0_ɼѫvjaU:pog[mbDYr|h$F#Dv>GiײP]d&5!M_|L;35ޙK!|ݳΣg?*WØ0 |B6Ӿ8tM kL ).LXkPzo&Xv!hoj^ _pvf-`3]+u3fSb[*D2&1͆\&Y {4[L[qK(_A~ߞn\(n߻O=+9vmiCaa4lI9bYGp^0~%HWk\ӭdߔ 0'°yjY 2w7~ T;I?xF?-pT8kUfጘ;!mR@a,-ZTpAvKW:n<Qi~ۂN"= q!x'3<-g.͐N)%&T0z o/0KW }ʣ!*F% >l1#/`fUa8]WIre?D=h0Og=<,|[wrͨWH5II@%dꃚ+Y]Ʋ~ 1gidsڄjf h-?|y1MDF.lr:[ v mO\]NU +LM5\E^bjc%1zPb/P䐇~H󳲛<Q-~;0D3|9KyE'ғ׾RQʤ$;RF\zJ9;MDUl fw*y>%"8O Θ΀(M}VƃE'u[QL_~ӋcWrOof퀫HEfD6duվh#ZEp9H҄ I M1:LiUVkD ,;SQJew*-MQGbpJHS-q4 #xޔ S>69Tv.ݛB㰄!QրL^iǽ.<* VpRv(a(aCHl~@^&XgU(g~A?XnF|p[wb,w;{FRg9Z<> QEvf0ѬeU Ph'g4ƈ(iu)d "h,JKuɽ0 BAv k =9<9 ֮{ >RC)9 丩ZQSz]Rr"로Q)nϼlض2S񜉧CڻбlX.S!r56OQ9oU.:ǂ2Fyj(iPyB܇.oarg4Pj;֏ђg1^픤_˜ݶ56f Bw5r6=A-^, Hc6/F VmEw슟ؘ,j%AN4ӭkcWy*X>%W|(6Fb)hpo+@2uKBj2Kݹ"Ł|ř -l0ȁ'#On^ ;;y )iD~j]](UF{t]L#PXc)n'ԤgV7H.IЋP}5Ol;%t$у(n>q:y3Q~%ZǺ_k\)껼nܫvp+Fd;hÃ: U^b.7ԴZwxjc /E`&'l[]Q~)Y %꾋,t̠:RvA o龄3z)k8Y,#mK2܋*XJBT2SLD2ų/h@{[Ue/y.P]h%8` ;~jLaVm+9F7E޳&_ug x8'jS#r_ 2d'I;"};_6HF7L۲A#CoW`{KX#ja3t܅jXNp43Z =3ud_Ow]ַ|\KCj'ifD0/ѭ{+2Ɉ ^,8\F$=ymG}io7/>>iaa=t:L iW+.(o 6H}8VS_+g铻!Q:'PR &na#'E7ձ͸e':̃XEFmqz(D`IWS[Z6'9MO}hwRqiWaA9{T})tS,8ү pDmbQnl7BkD7xL,2ޓVap 4hf>(?󡣈D9w);}cy|#PiI$ bkLx,ǻX֗E`( 64KGjyT| Nƈ"w3hK%} wԊlhψYd']/>fF0P_xg>2L s!6یXO_sv 8b7G ܌qcO̳ 9Wp~{Itr9^zX@\TBY,vuW~17+cch?pρ3~lf*[1JEƪ;hfӅbDE)u*qkja龕Fz1ͼe ]p,80cRYIT;ԱT9Q7x@hMn4 E1^6s)3q?8ɗ^ XdJ*xH#*)/uп@T fbg(lvH(j7a $ai.)k0~w1.4j OeI#n b۱yuU1gvC"k1^@7}R}O_>tC֗`rIj>?hwygj; A-}&vai쫫'y+:,0_\Z؁$Ճ;ē a\?C)Ʈ%Qva/?([\Y'z[?pKB+7: ꦺߙ&ALkt R,cǛXNz0>& G`!̂ȕS[͕CPcY<sǰkAC-q '$i*SQ|wˉjѸ ʣXz~nSաU:s[wwj}'(xu `@Zzf k(?+ސa@$;r6o`&?K['jBYo=c5X$ZҶ\ϝ^f2?$iK>uZdpx&WiA3r62PXUӗAk|ɭ:[drϪoWYVB(Pa,xd}raTLƽt !`&b(b dѠ)s7(Zد{쳔e?GKn?5͂ 2fI"GqY% `qxea7C ʸ,5_Hs٤t9i9p0i{tIH7D]fQ9*pm4 4b,(S!UФ*)8]vW]"NfOL Ig/6g\71!x^͚/UI2}jca!g;K` P$5 W}{ # fuQdP.UCeWs<čw$y#!o&VG*0U(ጛ^Br뭩)켳Θ*F}_ dybԲ 9Uic#iN*oM( yZREI NA'JႹU()ؤY#B+^[$ $3.#VPzpk-vSQt0k|",SGFз׏v P_ѶO8il8l3^M5?fxΩ>h?vno2]{z@$Z35K@NMs|Ah+oH!.JDeVu0DK 𻺈Duy3LlH9ws؅ɡdsW5g10-xx0/̙.IxM\y ;(F Z6U$ؼB4s$=)ѿC;AV,G1XgU\dkI^\SHn[`9mᰙl|6{>fT[𫵖(Dm+sF54%6G:8g^F/VLrͻk8A}ܫЦ( *iGIz #Zj`ْQ(\ v@@c>8ݧnD#5(2 u%?m^(;0׈BPP>cu3Xr[o7%agC"\8ⴅ`mEE,BhIl9 Jftgh7%e’@1rMŗEGд G]fNrNcwDuh!.y?ҟF:7QS`5JEx.\TceTt"%&>wJߣG:hRڍVSr ؿ[J,Sf"nYRٲ>aDXy1` K">$1ɑQJi[_H,|7Է:CKsEɡG9Eߋ ^HyyԭR~¢yh ėH?Ip}6N?fuۣ }C֐SE*7A7;>nMg}sSF89%Qqnoj!7`/zf| {nݍbA6$m%42fA\d*W&<4@r GʢUjO6$FN}-Q ;7 `碕qÉ)c'F{(SQ[fq`(,o> 0]kfC<'k_SYMaӧ8gH o\,rf iý}71<m y© J3.J M,u\O[G9qSFMHW ,<Or&Di=jfgtwrx1dR5h&7#"'2<|m(tjV +6,(]I=[Uܫ?f(KPzU^&Eritʭ/IWt['T`-SOa u*m!P^A3-eD3ӰKA}w #}h@.ap䬫 T=ZlF3Kw ӮN)CܶaD >"%MEgLI ?p6%4!{|HmqHMujCR)9"J(g$w!tA,`*Kouڈ3woFdW,p(e6Fg#w vSB1`4=εy =br{]a\9ުTEaϽψ*ҝB,5^!%?7VPP::TR3#0l(H/b< ԍEVǒę#YnN Hj;pY0[Rx7 "J E*8޲Dx}#B/:Y O[P59u&]]ڍipG.?3c6~^i勵nU>0L@%U e(s{kҼot!>$396kOJtLЎ!嗎7=F`+sL:"H_ӊ$:jDT(\haMb -;hp?.J KtHiLCY$_`d3?)yFGCLs؇KNB/f 29ʌ̓BڤUBԓౡ4 ?U ʸ _ۍQ d9yjõO('Sa+ +.y 64VfnD['QqF=>ήN-,:N9ɖXs,ʄ҆%S;7rrF+V朧p?ɐ7/ӷ0IF `bfѸfv쎫;1. 9@:r$=s|aXɒ7JN {TeVq^?;XT65V;Cd -lbx`4/%>o Z즋?TSbO#G $-a[O@ܘ w]=˵lԤ cPHDtM'j@|pv=D@Ez2JG4~@=TsfCq-*LG)qwXٿ9w:޾SoL~L:P46^jdeP6֏[WqXs5;<%ò^5X浶M_]A"m. x=H"q$L1²CO_lǢsQլJt9cJyf &PIb h,1I@^z"ʳ 'FVѸdq%J=|9BQ!ːG[+ofQX6UȇnorɧeME04m4_D~NI`mu]@?O3,>pcꊰ ԕH@OEgIg엦"0icQgcZż$]rPj{4;ÜaIq7:oe뿘~sP*0:7ZG,뼘 +Zc0Ƚboj9_]n,*躡k8vzԙ?RZݤvJvP|2exGnAvvϖa3fv2jݳMC bvK/zϱ.7@c-h-m]jkG},_Bfsߩ3R k:%XB)W(I`gkpG<8vY&&?U `({oظ˭)m8 BphQ8X>hVl c3ξ(}czqITO(C5ۗMk%'/}4V~4S?nʶ0T<1e'Ff#|Tk\`fl}qUZ]~_Ҥ e/Ă3"=rUV(6tcl?\*"2e>XPܾ&$C'ci3+rq/&ɇ kdv}9Ya?" ЫYKfk"z=)&w2j F*Z׾ҡKq)1W~>]&X<9CKtÜl[cc9n9gF_mlʀn$CHv[ܢiT.'36Q 搖f#"NLNBDX##f; ;;4SAfdߺuT4f g48ԭdǤ#5+]ЙɚP)B-wXYmތ[" RaOv-89_QN<ƨ[<-58T(y 'ipw!H yZǔ`E6˟i yCjW M-"}2 ww yL'9s<}=+VwàgKTꡠSf󛍋Vb-|Fta_Y"Vޗ1r&kfXK-۠r]YX:Z I5 V*2M >5͑X(h!k|#d0NdW L[<{nV>9NkmNE9J''UMgvDhSy@[b ![*.OlH^'V烦ɶ 0 K grD 30'Bs EnWMtY!.j$3oHqhX)rP5Ѹv_jÀ38]rV.ȱ,:Ģy\;><뗣+)P?g-]7͠qm_y>YH.yO;3+@C3 3@i<0rЀF- {g G(&'x2W,_>LFIȟLvK ?t'P ol{=\_zT"н;]엏-F)=[6) isr]w9Pc ;.\ʡjHx i_M) U##%ai!?_:x*mGr&r([$Y,_2*SBER?Οiˁ:[utH(V etlk#z&A?̧c?$mq@XXs.`mfd~8'&8 Ěa~x/ҩJleRG {Lm2cIhOW.:=rcMr.a㽾]#@zB$$R30$qۯA5!vݼ1e(W,k([C+Krb[}E+s?K2'StZ3-Vyi҄d-7AAFئ]b$1'>0 3ܷtTe.W3-!!Н4It`"g-!m3ulˀyNh_87}ҀѼ)Th=zO %FH2@`S-^wR$hI,vyo_КV1-K3㑢Fv5K"n*&qEAR*l-֪!w.o/N =R4/nŃz䯊 ۏi0(Tny$ %s\ә,׈9C[}P=f\+\p ~@1 ~D%Xt ]ʖcrj|:QdG))6l<>a[/Sm{-:=~b__u aš>6 Yd_VNO4aQؚ;R@S5 fmxW_Jscʥ5ewhTnA5W+ jp]ױi@/Ͳ=ߪ˧$Sdū@iebYU<$-A@ g}/ VS P"M澕 8.ck.)Ì-@*ћ5 h+$Cnn8UMvMʟ}޶7Gq9=ǝ1n%P.ڬ /O,0`HP'h3:G0hK|QQI G a9Ǎ܊~(vwXefG;c0&vk[TaDHF+~I?&;ؐwr]Hɾ۟2"d49Gl"94v+"0O ״tMpPHHɀ?is`l$Yg2#w9VH-rsӦy<2T!7W^^hޘz&' y :煞_D81hN r=ܪqB(JtT@3Tf7\4uh"j~hA3R< N_l]6SYVs)e sO'MxP 9ߧ[l-*3xbwN i$ C`R̔iTPɄxȶС@YQ|7EdUl)=DT~_9F8iR R1H'E%Cz/pԮ:;i+gb'*jxfuh'%z& N0 )۹egVρ +E?v{`=#E{`,_a3?SNEc;Y2 lf]PINCO\|xL @xd ȡ7ܿl,9cYjJQ]FvY=C_-9')[tIQVecH{ArpP?&v: !SBv?-la!oQcKdXj(D?ďWlW҇+zd^d |3ɰ*z-"I]ob$3ak`TޗoO _ ÇS3jqV;80Z_u`jP1c/ʙh:dXuFv}PLg Nуj{ d(?(?(a 㺍R`|sذg f [s:z :}v:W׮> c/7kbO-(L,9]צzB)49|)ŷZ$!+P GEYLicz.+ NG])XERD1h34-f 壒-RX2(I(9?uԵRț˶s,m,7D+H.8)QH}BBOq2A!C_]t[EdݜB &uXWm:.QNr;c1z'&Lg2B&4Fs@VDw.3 Z \r˖˕f ۫+.`i("4N( ۜ %Tj`Y^R ^ HcU`*{2Ϋ3ovW4:²C^YMhW`]ju.6zppEpv{yCf`>e/Z&ȤT0v@i~@MK:5rV414||I:1 e),:'\A٨Wm:t~v&!KFKaeҝP$CW(tV ,fA<ϱhEʇNA322&F}NE |['m5 RI &zE@Θ6vO"5`(1t%dX:p1"M$b +ʅ"|(Cld[7Q%|q,Pcŀ[t?:3 Sb"Ŝ^\2Uh0Q%|5A~^Rl7}nBvv7BUD+z9ǵv)Ydm"\ Fأ|)y+E9ykR~+{iƽ;B^Cg@|\_O fhA]K%^IUSn;bpSaCu׍y4b/_m,x͎+D+,Wr9̈ܐ?y1mxy&nr8vy9d&+m1n!yNe@z Q)WO&z>c>hrۓɁ\j5 31OލgsE\9Rt`ZE,kKiZ+?BFL:]lgZ>wLU zf|*)R,u,@ |셄n]Gl`?xL_rF5j|},G+Xn _n۰t}D.݆ ;~ܛF&5j ΄[ F5;T^3cab8n[6yiQ@Fmϳr05)VHk"+["m&'#yi:e}Vnx03L%R{^#Y;_P U M^L?{.{˥ kuw˭JXSN`8Fm 4Qq\@=QoyӅgwu`O }.tyۓn`1Hγߏ"iƒ6 3@{<MVr;`kD9P$g*إD}V^')^a`U9~8^jJHQS&ӪpDHl`X!Nh g=E͛5iڋ߰[$sTU*a3'+ңS+%hBGT"B>$UJ1tTjYb&3GO:% Ra! w&ȯJnI> \#­ H`Z[O8[__xe TeAdzmJxh_̟͑ r{爾(%`@HW[t$2k/]nf@6-%t,`"}qp4e6Ed8(-`4OI`$8cljQjIzaԪ[l}zѸ9ی QˣЃ2Paxz$+(YҞ-D^r̗*% g}p[w ۛ\ؿkFxI;W4KS:,/=*1_q~e`HH: /o7l|S\BߕIy&s%k3S `OAv a '.f/ :W0,>Q~ҁm9Յ0)w,3s;Xi~&,YR  ^crYګ+hAVF#pW!ފ|=Y >b2"Kr+++WĕWrʼnXi1:,0`#CWQ.["-hFrh @>>A'bOc,ʉc&!HxɆ5-Lc$mb 8{XX8?ޣo D;͛?Պ3b ͬ bņs(=Nszp}ܠ d|gWi3fx?yDQ߸PP7%㈼'g5R\dn!)xkNqZ{F&<05Weƫqe\ߧRao_VaW䊿K)Td&,!Ǫ7 ( ,WR2n:F6J&q*3q-9Ӥ{3A_ia!}շiΉ00N4U,u 7hN:%׀ȷ*uq=oE lnf' b,HU11Eu/9!叉 l\20|MC7jEX*A1/>VpA^nӖײP=.A"%z-8Ř&aWDܜ/F炗r对Y:=ĩ;Lw*mM3u.OQ6L2>SVmᦨ'x/x gGgd,l4 Sl}PR6 "F})kp/0xC*{Xl,J+{-)<%#ȼh }M=^r Ja]X"F6,olAo^uyONKuo)\μ! bn Lq<'Bh]"ѻ?}j7i/gu.DϤ̱][#pٙ n3p"1+S@(:TMc ߞtfY- Yz}f 'h.zд'eߧVCspLpcU7fh,GM1}@Ϸ ovd{w^O'VY4,}2|L{3G6F$5zb/x߆܀7ɩhCeiip[߯ `mZG@( Y6~k$0 >$_=SI W PHw2;(υ{11J`f9%()'=iSj ?zi9v+@\Rvxf*]7(bDwZ&f<4|l:2vP7gL?҆PfR_'u8)>U;$9O Ds[i jQr=Q}j\3DZ~=l/b(Q H%= >L fl-ݷS/k#N t$J`3ض, :Vƕ)J0ݾ`ݺ}fVS|*oW@u]ae/Bʟ;Q9F)8/_3c*<82x8q-ֹ8^dC{Ί5}F&+7V |FG@Ed?-RRWOͱap>_设uw i^KRX(f#)71NoV.ijRG?<ޤ,fDGאUȦF[˚x8_xМ 0# -Ii&e+v=Gkm.2mG'{yLtʰgHR<=f) Tۃ22` M7 TpZõjt  q6e0}!Fq ƝO TN:z&)S᭕ :~S:k=2D!] e$3MRmm|P5ZJ.ZT{T[zZs$V JZXQo! *w}\(O\, IsYY-Ry7^ v&&^a:ɛtd8>X^'&5{ YxP1?ú!E?C92]5Nacue۳k"g)/ t86h;c{,:oA=-͗W/{g*?=O !/GVp ӆ=?v@up4eM)gLca(Q'T7)V:~uD@B=(Ho`ϔAE2Aմٟؒ{Nѷu./8ք[龱_++,4BE,B]z&wn0sF7kqbn )<.oI-\%&6 wozLD?{)$'G{m"-~~D?$O #xOoEWQ>>.pE2:6L ]Z%Ҥvv%ylxr-;dq3M=(I!(ƾtXkhMn-[̳m|dN\_97yszz YqW QvH\P kE:JzH8&u3%.H9H[a,T$,L7[ ;FEO:rCl 3\- .>l>//$ P~Xm</A^PL# ;̫n-6iX! ^vjAU$۠CybVN:/~2r[lٰTö clyMV_]-­ и/mR8 YX@ps$(ÖG}GXVߊb֘>7:WJY^^]2:!Ui QР} }ͺ>`Es`dsUP7#zC^`7&MzwV!BoGuBv  _DKVi^JO% uV:w EZ9הvkC|@qN,ns .҉@N4۽4KZYU?* e"@f鮼Roy"f E B099nS= iD#&!JA$ 7pOJy@W]UD78kذ y;z3<̓~-[yF>pCͅoC]5fw|Y7xҟm3qz(шK4ΜJ/XG\T'm ggPu@wA`&pb:SLyAWC¸X{3E"HA le\}[Et+Q{q H%{l@Ǟ2WMŬS(nR*!6((Nm[Z)- @ :JTC0X=Oٰ,, D8[;.^HSvkmR9)<(cb_.`ZcaICَՔm $ ~(v44ňE΃uIIq9 ʪZ!D0DQX.}=`IV(ÄLxzo$ )9;dbmlu~Z8G K(ui=LXǡ_QLW V7:/ Bܞi8UbZ-S<s^X`1 r4B,k ӿ~" iKkٖaQs$Bi|,)]!*SRfe+eD8bNp!}FBEnAמ rg>jUFKhdDm 4m5-_cct~oPኔ\woТS<6(*s<``Àg?j@km\vI>UDJұpF(^jB#;iDq|ψq'~\ }U:fRR)8◦e-n3OZC pp $C }ٰ1CJO3X2D+@ڿQ&.#bإ)~"|ޱny'&n/^,aip iy'Ա*B6._k!ʷ?M0b \f|7L ;9Q/ð RֱR(  yZ1[%cUI5O҇CK}[, ONjr}h 6_Y넝R}d [s26` AO&UxTrVRvkD4]5XRz1+s1g%ix UP`mQ+*ێt'.77|c(&HPH4e-7mN&>~贆GLvӽXuתe%QŞKwQr`sq_ؤSPz7gËY>qU8<:X6x.5 &]>Z|u2o%P-QB۝cBl t ¡tf㥊M:LxcO_F0\*n xJצJ9|a5NZ@3*fl'D@fcZ'M'= :Y.\fв|k(Wps-p+2Nvy/*Sl@LeNsӗqpjTw`N;1qH3*xTe8'4 N\.:oKˤ#/y!R8BP{s&ᆣTC1O [.+G59ŽD翚fEILLI8,J=3mDR8(~,=9( w۩4wQu'~CÏB 'B0~tP2x&:ٸXbTP>hsaF%l} ifŶ,$}># GtIw% @[vM*nGy@, ~aouڵjT{8g>9^@@vK7Ϟ:z2zrsa#Nb8Cu#۝H0?&}5KORoHOڢ8`]^o4/l(<ٙfKHC:/< @?SX964AVKKi&Zݲ>2 & M@M>Y ,Z-/^1;hT7ymtZR"1TCRU&Zb;-8^y!r\\υ)8B}Q mwnjy⍪|g\XO|QELXcleQ|#lp{Py^H)k AY Ҏa!tS4QBp<* qmYpvS_~NѾpl9sඐ=C@JVgr.9WNĽs,%}xB~MEw=8*|HfHЅ>3[a½(iI܋,jQ=R,x?fM`!i:_&hv^3 7&ȚWZ)x#'w%N< [RŽ%|A$+D=y|l#-0 δرF5|Ff)d|˿f.iLJpxd1vpJ$&eӁmPwq&s*뎦3N|a[-+hƣz]؜K8!-U]ǸQ;&^0v26 >n ]gnRjXXcB1MF 7B'}9zʈ@cU.kKK zdHyzo"|uVl&#s! F2S5G-JJL\Ch%bR0fѲ)3vKD^n)FZ(!}xMVI¸v5#k_q/T hQZe gάPgQ <5#lz}mC+vȃ,ަ2D᫇`[)%,;_J7OX8)@]: ϵ;Dţpҫx p!!d<% <طP㟮Bt#rZeJ"{h1\䉜aR'>ŘQzr\W@E]nױ||sINT~Lúxm!= wL vAE@v{r~JӴ`*C(nXl5Q&bB'F6"m= w D5Ws 2d{#4ꎠRM1Hi# 90ȻƖF,8<{fH-l1\}[}6L;"1x K3ChS@1s:&t7(^d*'g(옛 %pBy߾|)oD ceʉ(Ն? /i);F+D1S ll9n'v*\,Yĩ҆dUzAݲ|N1VkЮbVUNuӁ6<ө[$ isAѓנeqLQsdT|Ixzqƨb:6e/Fy.ր9"847Sy'D&Eit > cLU?=_o4D3ҩ۶AKJ6Άn˲tFuED4% K[ӓђ AJ11+-H@>nK[!иuKmڥF1ܞWY 4slo&rg.Q*,=*rp3:qcuvLY,;N)<g8MP7L`QR3 kirRBWK ^֯:1%vkn95f.#ܭHbM/dgLSUFD1-F Wd~Z=^H赥' /GxU=ܦmƞ|? :;ɗՃ G<& ɣ7vd܇ :?>~jlBU{M ef?oVYսӀD|NFʰj@\v)soѼJj h?(;a<\ *s-f<^XaFgASX-V\Ry$xu2!]feL7GRa-c[>+/53 dGFp y"ΏI!S]ZV, ]ІD0 :jranBq @h QmZ|Yws.'z+2BfBn(|}N yIH`UMY$|~~ b/#%swx(vBzvI%ZmPƵ( %3p)45o斨~I xa0Ѓڐ6gvWݘjvcnT!F5`'fs5qRj,51Ȅ/g#Fdt7.}37%W.~U")q(I`Qr1Ҳ詯BIR a?r in|)-u0f5 ftR65d$UWye&lkURvD}PR0>*S;>i@iH $IaN$Ѭa;2StC>IZ! ?=j1ސ ?sDVΊ]P]e{\m`'%dNa:dŅ}rzEKۇ54QK[gz_Jʓ@#*aqlbBq'kB+ҐkFl($&ƅ@2&BlN=R3O *wK3nv9N>60GuSM>jUD)$-gc,|oT"KAXWҔ-JG^2&>\iQ' iX\ₒb( z8m1}y/'.5lrYCGS]s[-0rM15f{%p9~r"sv׵0htv޲㔬Rư h*Dp}m'Pή9܋fZ6huR|qD:Qq&`֋Wև>O2O[˳653b{C7\aۨ2Jk[bYRCSWuiRºB)yIzqXB/lHdX837:wi]suT)Ty/OaMj;3&ÇDٗ􂬄#[kX¢_M-g@bKWq~6ݵ.rq",=&NyfVTSRԊo8o춅H]COSJ^NIܭ. bԉ x#~q)u~䠔?| ʥXԶ![ѓЄp'Րаh~0 >5`o!};Ze?Q@b!m7L,Nl8%`Ea+R^I؉'a޷yW#ĦWbb`\KUFg.<B)TRl`4 xZZؼzw" $|?'~K;ggpSnDLu 1HiY*8bLBp}`3(I(yxBDbY]Y{Fdoڊ1L[Ǣ*-v/D7qُ݈B V.YM$ a:VV?+uF*^TDZR|l+G=6FN -mR9-N)N3Xb 4~=wul ˗Lud[ɏkrl[R\L/^B !{@n1D/hƃ,LTuɯ*u6XB䷴)-qRCg5Iy_j={֯q:#Z;]wT|r9{l\>(:lT~or:!8`AoBJ Ĕm;>^XmŠtTG|w]@yXC Kxw٤tyVHj+_Qa˜)-Y?^=Es*VZ>+)VCn)at>ΛM\}`MH) Yk/^CqN!߈u:jF>q+XŖ\Pܓ-2Yۤ xpm[(ja{XZ`>պ6=ZZS#'} ;G9jRS*눊Y93.T΂!Ccҹpld;ɿ'> uɺU6;VNU `#%<+QvOvN*\Ugj0CAܿ^'qdD]JbèoSq@Yx Q%~!3.rmBݰd @ՙ/"%?#@gfW%]Z%:&X5<Ԋu/f*KC/8jn>%Y3#%<^ŀ N2Xb D(0>H U4Vi+)%??*@˰w1V"YП!CV[b$7],Aӹ>Qr.GVw%Mf w,=bUۥ&_1?|7|1ƾ}֋Ak`o^qmm6# fPؓ@<42n7pw@rgw rԑ*VHLh/ WM0QO]y޻Ik`&yIc_dou^HU0gs߇W B6|R~BI#(x]̘ht*)i{ӥ5%ڎQ۩q3ɇd]>v|ܔky:PҐVv\*3<;DqJ62Qei&sܱ4I,]1I~$ (ꮷOq؊% ?&ꫲfO&,sܰ,&0İ=Eg5.`-ޮim&ʣeh"ٽ%@_?MiG-F#1qQv}ldя)H cѩˇkJ#Hݽ*ZPCGSL>;tIPb3}.7*lD:Q A$#v{vOnk' ȶ+:hnz%ϴΟi#iHb]Ҍ|}*6\=9 '̞?k4T2JW@X lJzs$TPZ`9]@}VeĂh7/:UpږYUd;ANŊf/c31ij'm5ҵTX3s[5^};RM爜ަLI~Uhp/ )swL] [1 5AWkfyZ4(Лϒ\#Mt&M><>F߻Sm9 4~@GTӘR S QI,Gr0`qĶ Z4 >"d]OB%> 8p,_ P  _ПӍA"3s:e*,eR5sL 8MCbg.1NK2z]G,mzep8ȍI~"n]ݲNǀVC-9hxE|^r(;/j ~!SS Q17Qdԛn\Vﶍ=ip;(uTK#:9F>G%㓩% hC7z.D㺴V?E,;kz lDv㠽-PB)<NσYunZȴIkܞeQb w/(ˉV))Xd:1垺Р]iK]ѨG'3=9`hISjd<¾L%x,u3Ha)\nP wj,WCź"Yv-=Uϱ,I5DH|c0ڌ?22 6M-++D7v !F2_ZUe4c8i(`5nVDwt y"t_2+EFbfm֪=e hW; , `m$mxY]1Ѐ sI"X+b yȼgWaˇjHt[Zr\o)U=u]o`_uRh)Iڝ ff>k߈jIgӠ<^aǕz?C('aell YB^K[lw:Z I~zSa\Ixk/υ t;.e۩s'y쨁70TSxiiPM |A`F|YC6ͤZ%d]6aA~Txq 2G?% rZf'LI qz ̘m:3d2hR9Fx(N+HB֥Ĩ Fsc&^ rqhgĤ9MGڼtw%Jaut$*wTV}dW*yc!&=UL:swJ4DY^U_F㘙cka W^ eoR$7+_*_F֖t#;->x+߻wr7i0w !K*T1x#ÈwO~@ŒZ/vŮ3Z{ӛ{Qt4EC?O_2hL`/Ux9'>"2\x];&HdO)G-&j1[ Yl֚cHq#Y3hͿZ;0zBV( MtP x0tr&7T^B'6܇c Ya<J-XxgUxւ6I6ڢA}wvd!b1-GS`?O(a]Eu`@xbQE4!}Z=Mܸcq8$W+yQHZi.]f} *׸Ay)OZgV~a޶@|Sʈ4'[NMFRbb#g[q5śJVƑ@Kܦ$GO jc\A>d)ɢh16 as&ȡv(Q'qn<@~|227QzYȈaTf{5xon¦u4ۡ%@b3!T'Lsv*V 3j*Hw65xv:isx\s8s.;8͞$ݤ RohQ/HHyC= ko偰Ag횏?1`f; m,ʻ؃BOGKŤiK]‡3W+#>'N#̓-D›K]H]x1#pu[ $k7z۠#~ʵOvoq/%`;r ǿ+SNΌQy%ZWddR 1dC,ZZÛ2$(Է]x8Ilf$Լ*mdS o:8YDc [RIQtr ȳ6]6!Nj6Woރq ڏy $ `"RK Ta2SetաLT'W"ܫndͶsmYN ہDײ5dW\ÀKa[\0u]vG1!aym-\`WI~,'Gj{ mJYޯth#?A+Z5b[/s1?-fvv}cOMM bjʦԀLEe;.-A WNBΘn`Jm4rvd7qXK4;]3XNi 䕲e>O(u+ }TӼ \jC$ BVBxm9$ҟ vU4zW,q8H7LenjcShзBvY}tmSOoWX^HOR٣Y>t]g? ty+)gtlNR,N;'0w%Y$\e/ QGNc5쓑{I/[ e٬?'xO|0&mV$4cc@ B~XߝЎC},dOK:b eާv,C%@2 z:"##&Ww}5eoŸ"á穋FErwS(j,5-PGTZnLЅ=ac6^)?Λ_ԭo^'֗oդb5'Q /Nj?S?H?@{ iW'ӄcǼL*e[&wjB&"=q|IF8**S>vBi jO/8N4 Fv@TCDypu9ɕafJ'Ocv;F+6V,-ᆧRt/PCG?ϹG %I &~, e\l9A- t⢰Nz<\k*h7f}) imS@AF[\Ge1ܡ-& վ6&%^$R,3o,h? `_c63w1# !/G]?55}1g_Q/2CrK\F)/Y= 꼐+V ]? > 1xkqC q_nYVn"<`h[Z -@j ~+oAWg\–AhטV7#ڵ R}]ϲ'xsE{]7"ZÆϥ^,vWm_BD81:BOw7e ϔtJ%}}d(e3pnU܍:Ɯ]7V8q5 M)aQtb0D7cK;%GO玊-!>5Kdu%#ӥG.L}^}#D81cv%E=tZnSCAcibDn5A04_3ѓ6ci@5h2K2Ȭ,he%j:C }QHۧK:4ˏaPC,_A};KAU)ϣ=vs9G`o:vxq,7tCM3< Ȍi:"2ˀR%⒊Ph'q<Ѕڼ8_Y{ r#WZ I4kW(3ANG}ߗ 7K ` 87^ ئ>]g¯  ˜ux&:b\m4wmʎAG}Pʑ䒺pBs Pb WZ@8 c29F&BOoerJ( R G{\F{WfCz?VVfT^XRl0b|ASq|6^(kݖh5]-,.!Jh`a]xZt #Q :+D#N$0ۣE5!FK|A?^)=dl ]麼/w1図[,Z; d }=o"}BvpZUI^`ՒL:i-!DEn,0aًw~mi}֍^\MP.ǜ̒LLPD !f/3Ii `)+>SC@\&^'G{@bla*'#D谾i#6@SCpT6?lS(BAIHԚ½o8'Q _s9ty|(-1[^&˹g_4~l*V#G\`2ЪHnBw }ɽX dUDIg=tVI@ה߅i-¶#k}o Ɛ lӣ8>)5]#&l% y"b(9r2X%Z_~<*bϊz%C%JG>iRiþ{FK鹍xBU n}1*XANnM2|X9b1;iWfmsrAf',mbɩabK _|*N/%]6)RpI8вgXJK\U%+^< 0- )hj`F 5sQZlB8.)h)Vark<.u3sh(\0Qq&:Vug<*Q>VꠠKa2p1QzjG4Pɝ M"]ɳNҝAiQ"s4-3Rk*ޥR/'kbhRe&T }krhZjD??!Hs"rrۺԼvԪsn6YMV_I `^c">*a'Ơ[10)t~i`2l(:Y5(7,ފl kk#E *X=!})Kԣa"jc&e~lϲ{heuyn~6 #d~>kWH(c@r߄m]L,k=nӎ$e >UY[gW=NoHNC9]sN3I8Y3ڵBw[~?-Sur)Ya0߻:;xe,&+=\FK#?6&USh ռC˿lY,km4 _~fVSRn*ߦ|MlUY.!9)p=݉ۜH2MH"j12Ô.'#꩹KNwBJ0\[v{DW #kbEѶI$mJ&!+u˹92pޞ~i&pfE84BqҬX"A{5q{'Ῥ=7 \i_R˺w{ϒY{0châJiPZ{ Xv_mn 4)`ڟz*dߨ|d+ aÙ'n!\P&?K\H2_ܱCL$WZmd4$Tc-=I1k0h?HI ޜ~24]rVp`KG8@QS79Ns$Pf;י-7;En)Fҁ++#mMpmʿ[\oF҉ˋ/ V3a*H8S#+@9 `fr_{SR l!˻gaܭU J17nvtOgN.?3*|]lb]1ZB訛z<ߥ{d{y"Dz7]~/ץfh]up$ΑS-(*B pL4*DуhvWsPxD^9w*ȕ1C` ;y3`,WpV75H&_tbl[ ۡwf jR~ldΤvg'T5Iʹ .twx4OP0s X!,A|$9J,˩8JnID0"2|۸HiUl[H6_h={hHѨC!S*t27~CEn [;RI >k7I=cszrDB8VN-<>;)?o yXJnڟsw\"Rˠbf!<|MLg\?^ [՝WzQ{X!W}tu&ra R! sL+e7W40_ByV`$;uV 慚E:>ItJ䯌h񸲿8JhF9_woDS; L7}욛;m4{ǬLw7FD;M*Ҳ)6dI ^?Yw:Βív;dxȦH;oU |b3k]6Ε=;;@Y)_>?g WbҔ'}6uRZpolѼ`5 Э])"!̉.Ʌ) U膅ep&xu>E{ApyuT5pXPܩ鶏HF@2X i%٭x*eJîn0J Jt Ymw*H!wsХ@a-"ĻǬ4=rwe(wUg3*ݛX^E@x{` K=HK ƭaLHF[iI{RQúU~p0Ɓ"<I%tB1ѝ#bw^PBjOURH6 ;"GOC]mȼ"T8AVHΊB]s/w7F}>匿؂p}",{9E#K7 Da氓uEUN?J; y="cW[s!SaMA|NGl۽X{V۶ ѭB cMb`"kJ_X4]a'nNO.dLw3it$Mb Sxh":xR&@Q ]59Gg쨌KO-O}< cn:1SGtq֔ܖ-& -; Xnr{鑈Ӟ gGr<6X-{}8vgi\""*.{K5ȼ) ¾L3!}m]L(EJqxNenp/O")6H@kB'\z$Imi DW|\ooS 6uQۡrӡ9qh² #v| /ׁN.li=6@^ďW& 5@n5M׆]} Bfe&/ʭE=x'e~~cEÃLRl@AWtEl߉N= :ng}z x%~9Ȅ+Gh>ߴ(ZzdNoW"8[@F ojXH.{p{2n 0gDZzɵK .l ѬB _BP׀'#'SZKJ# (f2u  2sg;Ճk_oSMo|A1HC6{=7_1ltarS*)(G<rƧ>m2`ǟdpz.eJ}$!MʫQP5hSrI^/F >A jK (w?TY/_ze$;%ZUl, }YL^z}^포,JSI$!j]mX} E1Ю78یm$l4㯸{R'kH_?dԁyN־UTZN}`Z<~SlwOc{/S'7bƘBo+xSPUCZWxL_fKy7Y*[}ڦ~Ͳd:?a>83~42׏ؿ2b 0f[B+){aOwo0ϻ DUZ䶶@x76;(HKgC\ f,+bd(r}!rN Dnh?48o> ;ypcvh-Bd9'QkE/?/A.su+ԅVcTOKah+6iMr"q Kn /o߮'ڹ:ݠ9?5$j 9On0cjtv;.{Ɵ6$+)69|F=$wELm63vAdzhD΋ؑo:R.D6acM`IB 1_.JL#i ?HӘ3M14/:?8tC4ٯ]>M9n Klݦ=F-b``86B">amOt25K5]vOt[l{DәW΄2 j4"^qkk{0]h &d{_6=+O*^)L_Z8n$7ϻ8&mDQ)p @D HJ@x}cZu:-IְbGf vᅖôCtoZ*lY r`?M-~{yT~C]'Si]렊niKsggZHRQl"2X%DAO xD?^J92٭Ve7hB~^RvEJLKMk%4f Wġ!̿%UU{0C;}nR.3SU!XIM$ln3BZ=Ɇ GSCI*Ru$xyAFeYàV. ;W|gw(ɭOsScOw `;fh9),Ēg&-*KmհV4[<`߫[#˦dJ~,GA{J(fj`"$1ͭV=2U{AUQ#2-ùˋ-IeAwЀ@%3 X* x؃s)ܽ R[#'8Z(|XT߄s|I(X'١ sDP،xk|T53w۹<*d2 F Bv?y 08xUR>z`Ebp<T[+[en\#"K)qB[Ś鍦|F(*]2@;jrzc[kNP%cl/-G{œ!7741r97}q18A6}̒jv{!n\isQ-rS:=G _T>kԘ+%Ui~NxJ1+dl|X *տܚ$?\>j.~u6?Zg|T*gӧ뎘 -+2/HxLYœvU. \c:éʜ)#\ҡiӀ0_Zzxl$"׷\\́uk߭ҘOkNR$jEQ,/[>@)دR^d>?R?Fw)]BtMoo ]f B* HݺJG+>*PUo(EPb#6VNb8q 'F9o-Z#|ti5uޭ.v;34ڴC8U'Wi-f+ܱn."<$Ud橢pdEϵ ☣=1c+;NND!]|%+6EYGV2GzTJRf&GLuUPhkt= x熶``@Q} X++~x\=ܶncy>3u(gVo?1z(ֈ.ƾg|&[ϗ3dpOf3r*gli`(uu7"*eGk!#u~uKȬҙ}yDK%Ik#ȊEEO7(aɣY8.ل)|ZiZd ΐջU|'Y(U(]DpDP N+=*LojQo#JP3Ec"ÝL1X<~9PBDWuj bMt{rIh l3WŨԡbc8E?d/砆*! rv S$dVsYJ*-~IW.hF]!ns;]-Oz5CJ$ѦW {@Y`It\$&W|å*Wx?bBy â *\{cy<>CAq0SVf w*o_P07fЕP=c<_&FψAoXjeܷS؞xe1bȴu hWl~* 7aJٺ.K jx7~ $Bkf=8 к-;5w8+w^pk[d_JآBB2c5sdQ#UIl$iPVĞ飒7ë4ݪnLxC_%4z+_Tbj ]WvŨc&eU΄EI!,)C2]J)LNYIr1vs`y=0s{s$x!MH]`84zxlJO 2| e'=YCrA9pev-eSsJC7rRp8li)`3q_TIϪr!C&(of2r\Ka1]M-(83I{<7^ +O2K9#DOaobWbFsP.B Re_~egM Y и=ؐT%F+Zaׇ ('ux4`˕B}yΟϹ(,r:q:Ec1XcӚ 1f-~+\ bMn xqfrR!0ͯOiX34iֳƑet{@uo' !zPoSmӻ%4Aߣd@?tFi^HN@c mP93;1:mvM0&wuP8%tsqCiA"l ,\7+dN+Qd/*ͯ'b,68Pl85{,}?_3 .wʱNMőPQUZ,9=.AH_)Z}[حTPkz2|0m%lfw];ȭagv `xГ2sړW#RvPKoLE׷C%C7j,.p7EbUdaZ9zb5sH XL n6c0L [GZ\CVR{^^et$GOۖ]x:U fy=h>XZzԺ'_GԿM6@pKu J*Au|T}1g-4 YL,QGγ[}t}Ȯ 3}-ef.jمT+blKZ ^6н17ŏT9}}tk'l|><' g0~5-JsrZ1^Ic~zD*_B·ty3Rϻvć)Cl!;U:F%kFOMJ26SGWD&ӓ W'vc3YK_ >)9=LzI<)B;YVg&t@@xItdgyzG jByn 5p̹=-UveQF ?@OYȪ"qYF-N7Uh} &; smZ޸ `n!Pyh>ORVfP*4zZ?/VKQZ^7L73e|-@& Y `(eI1[9y"-{NV_rE{@$blF%R(du i-vؚZ64)T[u/ '[E-MpzAֺ|+ c%:jrd㠏cmN% DBJ@iVp(e8F1DYl!np 쑶{|Io!3DWJv~9ۤEs|}I-K g`h /Ŗ9Ѧ&)a>n'VuVu|•RL$0+ ($OU9a>3IJ0wbPcp-O?XGh)1Z׶.= sA -Rtx;EPkct nvH -{oڦJ]! ? mCg;A=)ǪT-Kɣp O3ǥgɉ|NI5ԨݡHjOQymn71UjӕnG3INmEE:?a`bPM QA-ukQbk 6 l㋿J|Y("tsWF}wIzyPE,s!ّn`墕e#]P}-sƔ57,&!vv.޾` IqfMJ׌"<$ WJfo:#]ҶC ޴)؆υtu64jb | _Y0AQ+Uԫ&lXk17bD3 % N,ǘC }Ifњ\ DRyU5춋ˊ;c0]uT%tEmҼQ|F ^ɐ"QzJ2S\^g b Iv7oOQs\aΓ^>nȴ(t?&RßazmةI'eʐ?\DJVQd$1/G2CWey챴Sh̦}x VnN@wN) `;v 䏩 3DVϏ[9 .;$K(NfbmCܯS5 & hpvonԽ 3-d K@G4rဏ=!yPb*9X/EFm;ZuG-_9.jNYNFvg&7Bp߇֗nhעQ,Ni3e10&qX3=t%<'CvnB@aR㿞gUUuBt˫y@[ƤEIέq[#ꀨZfҸV~PWc=\5Z;[z>#ıwӤ <`R zg@x#P߉7 Bu<Ƹ8@xgFtסּv݌B=v?XK~ӗm d?b$&l#|߆pt  ^((/򌞕Xt I xꅦe):|0*h ^M+WԈb|Vuwōh0ʧGn^{r<=Oz"sHW8[Z̶olM hhZ2eۢIȳ_Aݘ8Ne푾v;PnFxՀ`;SpmFd_>R{x> 1 iTQ_T&5֣M؝%DŽ:TL?r.N]f x}<v^}Y o fVtcIQ>Cv$ 8Ƙz2Ee1!yExıDeS8Ivr~>f ;d,D;ܵ#!P`S-?NmAׇ Sj{"L]%5+/ps%z)l;͸FP!Ƹd'(̶F$lnr|Aj'88QZ[PYԖU21Ɠq(۰O #,f(ƨ Se 6Ԍyٳxs_KU-CJ3"Ud'6=G$\Z' ( d'KɎQ<,v =$ͽKgW Y*jLܲvr#'t%e0=$~+aQք2(bvE̙RDaIZTbb^_j! ;㸹X̐]/D d2oR\!9EF>{6;Mhtzx* P4ԇZE"_ KoUjr5V7Ѐ`\D^g@SsH ]'aL5ݎnU(-K "JGVVZkn/K naEV-OI<$VxS?˲t- brZZ_ wϹ%1̌=9_Mo%D*y #hY))`gKˉ#x-`SKκ"7EIz9i3LkV|7DR<gd%s 7mpG!:NgIs̓:(g/Μ$-Z%X!@joRꨌj)аP˘d1@M2Xxr** w#Ħd{޲$"8^" ?Omd'AI?7`4S˴y;<%BD>N)U+aɂ e'3>ڬŔ:]L)u;}qVa!OWOu. {'SB[6K!FO5{?Ѣ ܮmu ֲ/EFmX}X1mql)q3֡p])wNyd(k;1h=*X4'D֑CqBr6R8q BevCan}AL9ʠ6Gp& !L*Z=)-΁Nךo7:c1x$'e5jR% !js%[Ҫ93[ *ħގ4A#Ad?RjmP};U<]5[]ud/&~A'@,,=]):V< [' HJhNb.Q`ÊU.Kݢr5466.3+jUc䪟|ת'D*ki™*ODgKh`}B,c4LXiUmrwUo$?@jN1wN Tί _ê83cio q#3…D~S4]Iǡ;D6ΔrjUgEkU\⭠J LQL*z~ċL?HZuy.ϧ6=P2ɝnz*9B dB{s̤_Gڎ'QWek-;j]|!$DZɍ啯jKkpW a~O qcn)}{f+,{=kc 5["?uM<l-b*i}/]ޛ @hZ,+6OI?y.GVC4t&lY(WPG%(r=0=_#㕸 }/Z;YѲ^OTT=il)mGa wNJl=&s Th,pe1Břu;4?gOVJvJUyΌƌu2:Vz$}PyS65Oa="Nl/(b)Orx$2R4j5. *ST Y[swL\%}H/(ɭ^byiDhQ=d"N j,Vq\t}8l+őrY-ro`tf`,ai4ٞ1;*<3>Yf697qJ5lɍ3 b7 9,{ö*Vؐ7ko~^1Ccd}@>mHj^VMgcHP\LDi2~3PcD ɢ|BT =fTh-G`EWt v ߒ5[K'L@`mCZtE5ug5.n Q.`2 w4!n~jG!Fw(f5}UφzQ٬YZp>==^ ʠ)y{A]Ɉ5qhWGs—1/lasD$#' 369HU5#vT6rc#١#:,X:h&O<>ql3ũЁcq Ɂgaur7Ki9AکgTuIp a^!/7/=+6B0$쥘K'4i{>8˜dvF3 @j(h'G@;sN2"s״x *k+>jU \UTu]kCAƚЀ=tY4{B>-p`gJWE'QB]f" )mKlѢMuGLXثs֍D[ҭ"D=⮰Gp 2-dLiYT|Tk1 :cq=oȠ'MjC)߭+Ӯ:H 55{gَA8̼pkJZ\aXJhG/5g50 8ec]Ӣܠ1QH!+,Rr?>=GY?Q^-SM+i$ˬ姾SDjgFK>:);rw q9&yYGOID* 4`VQS)<7-Z.LIfB/K?ѪJ=k)C(;q!(ΪüX yz~WXot4*nu1m&YK;? ŧ9Gp*CkKh&etbd 둅TGEސ*ܒf8vODD^_P×<84'B Rz$NV߀Qji|l|<8[DHA=xoWБw\p1䐬"5y i\~o% `}p3Hkvx}O + e[Hl*PVKkP"JAe4hƵWhEQԩv$M/V>:#xQ=ihs,|oI9KY;0 E0tx=gzv*[Or6mMjAs Su`GMOtm#yuWLMZDOFʸAUٓӘt(ϣ\0H \C>֮*Ԩz:# h  /vjaJ 7s2ƭnmpiUizTkG@{$ư, oO c;066X  ?Z@VD$odfO$^Sm7VVBYt\ewL a?6 p*r3z8=D֡ d(/V}#]~rQ^P y+|KZGU]̡' ûWx{\ =~oUPoG֋H ɱE,j%Xs8Z.}YI[xv&_R3S+S! W㜆wn<>70Jyaj7]y+ L&C3tft)"ec,U s9P>>VN ~#J<|L#!an 60 qSGj"cӜ?|KŒC#{ǹ˞E8vm(hFxۂd })ᔄf>bb|7DRSX@qPs܋ῂ=%כR>;XK }.cy! FR;͹X|?V!M5fת3|:cok{Xq?k龥<~}xgGeu;>sk#3]-o`Tb7O`ԩ_1R(z*U+zd+Ƹ9ŵCS8Ê.FNS{ZTzh?5]ZEYT.@g B~q;?hcp%YErx&PsA}džYAd ٘i3.^690O9|Poy|S9&h".NJWt'[*&`E$1ɤhnɑ?33yyjTXMqҢ߈v#3cs6i|`piR8RsdC; WXiֿ+8@•µ" *|<,jKr(m'y+Z_$c"y=@sӜncKٺ%U.4D(KksU#!"3$+@2@l0S i/6gǀObxWQrL$zc` $v={8M'Cxd $wV#hsMJtbiB_ȚLV:7/+qthC.kpɚʛs5{3/x 8YkxcG%w)"7x!-ī|JP$~_f k3~pzm%iYNsh[u J~YQhz` R03, ȏřT|XI:4\yIp ``F3 /AKGd1d2\8*PEeXJZ!SWZtw]5Tbz-x vV8T1npH2|,uω ֶ[*L>_vm&jx(CBa|oW8}>'5]KuY M{6 [#4#B]с"8r{Sf :pdQt Ke!a}@ uѤPu1{M,|Dr40lbZ$* A6qϰ/M"coXe 6'J[ 1_1+F ԭNm-70;RӜ x^Kwu@jm=5@Eהl=j}Je=x))*8>VuݲȀ&4jbimoBQ@G#VxBJb Cb5o4x@z1L1E%թ|G؂4ݭ=R$^HSh?(7ʕeVX`Wn88kh?ʷ GH[hȀ/ιڝ)m!v,{EČt$~5G$_ve$#lvZH3~KhCIĪTt4;XXѠ3JNq)"d07jޔGݜڇM(-HV Ѥ_|*E Vi Ri42XEo e 09tda*N< \B Z$CE+-*nhA].lBU=-t3{4ԁA#VԽ~R9*+ IW}h'F:nSck38us.1OMAEЎ,ׅ;%@(1 rJwJqE7/_M\l͏)Jfi} Dpޟ鵁g ķDLŖXu#{=Ku,pcط~,T5{ g!+P 8V尩3w}&ΜQC۲rz5uUpp(R-guPkD373R<ʧMK5ʩe$`C%Zo6mHOl"l ."t-A |(|E=Ǭаdhsmj2~n 2lWdʱ|Df>@"Z6FS1H'?) 4iAqb-"Y6OJ4ɲЭÓa%%*<#6K}s$>NbzU 7aypu+G 8Ǝj$Յfnx 8garY49#0bPv 2GN2/Y;XO R! GU`Ju꺰,Re)Ek|4k{ V,Qa%ݓfdRLv0քoyG8$!DFۈz6c7]C@s25d 5}i'q/x48" ViG ʗ4d|S\]3FgiRdJԄ쫖]s"Nk2s>hGzHOp_kS"2b^\(/̲ ,_۽W j)8:y}FnZ:Z45DVW%#'T{8Hӧ4;qCVf(آ7=ba7 yd<>i8 Jr=NY9@`y=xOV5F+H -O| ]껝qd cSR"{h-XyCU?ju/esR뷱w}һ׫QlPcp>Hd\9L4kB Srk3Qz;I};@R6ɕ#{lgR),.4dVNL4"iԲ`ģ>r)L]dwsl~?hAE0aNLƻ\==4뺝 g pkQ[fБHtIN%K9kZJu4 5~VDtd) {q!).Wa1R/*^ףbu%għHP?9iYIea#r*z X}`l9 ^b|i3W=F)5d33D?|d5"6b>b5/囐[eꅃ`M27Yﲞ8Y8[[ef8%|'L%RڂmIW:}h\KQJi0,~NoW[\NKgbmYѫB073Pv5VEp!R tvo46r4{?hAO]b CKNZeXD R៎c-# wESr\?JXyJ['IHM@Q xG"a:jPZZ *2)YRc,4r}к3cDMBnpLsmI/n4oZ%RZ\na'l8uY{>tGli0[$ǎqޝc d(7:ƶP& q}{k:=H(X#Tp#/9uPLieiꀊ ҳ9@MʅOG/Lv=g;x#zqV_ /$݄@.85(ي`]8@pfNj +f ln<-n﫦:͖/ УL+bnȁ:hy'ǭcVٸ%D_jz+cKhW|+$_S/)deJwbc%oMJf1Y 7M\M2H]_0giIZ89s*£u/P)6aU6貪{Md B}Q9wJ=En&Gjĸb;4qHk&W4$^ɉp/YYaA )p-⬻ITʢ9X}݉B66xp~o,u2JXJG9Y*40tBZxj>5p^;. Zjo9Gv{{5̄'RJ<(Z; '蘰Ss2?q^!Í&Ꮬ0Fmi>yw6L=C A3_\z6 7!gg0eafn'/Yj|+˰ꚶ-}[40l zšIB)TzxXCdv>eG띻I7 y:0tUoi/2N@O]-g43cGa4IDw8=Q,turQŸh,>G76KEC pƁ j%<*9yf$+o[])/Q^PkP_P4 T*X2Rߨӏݟc%?"tѩ(F"/K[r?+&YSTw[ǪҐ[Jcp;l  I=<]ƹz߫dJbN}!;(+XK#U(*qUéB>%L#w=ӎ mG)^1TۆbE][a|aT:iN`{*.b{jէ85@U#ݺ=qc ZbwipV,G"-\q#v*-g5FZȡč6P'9)7kLΉuS!ĝN"n#%=B T q[0+8^&ԇ%Bk252ՖQI(q;ϩ69!d}=8dYR4Nny?ܦ+)u."CR~+-{u#n![ ؃^oӧMm]B2}̖J&8/<P+@սFdY 7?$! eNB.=|bZΟ$zU*עmA6^4Ȣ:T1 AMVʇ3ə2kJw_X ցdCA,HyS旕ή h~$ֱB|Sk~צq~~QvJbal Nk;MŶ.b <jT*#&FJ$YA~ӼzXomDinl5s[,uGzZ]Ve,f@^xrv!u;wcǮpYlo )lM30UM}@(Y @b0~1y Aud55 DxgY'~~d.}jߐFΒʕ_;T1er߯4bO]0;؄!|5s UA}iߴ 'Zukj~ΐW8nrPI彌x$z 18m>csxm4̌M3p1;'±rwh  ;Cͳ֪9`L3{"G&s$OZc fmHBk=Ex3 4S?&)lR#܅%7hN<%!4X46Y#4bN7:omTzz'5*3uҞvLX"ne*#W]eZSaT/ԃd h-TueK ڪF J16|k|73='\(")wFKo4%RN; ~-tҐiں5H7Aa}Ŋ ՗]ڳӧ,jP6+Y' f]SZdH"tP Ea֦*}Xm-FSuPOa`[.òd2sK#nOmg;LI>a4m}4FY#`lUtگtiTtͽx[|n0aȍ1H^Y6%>P^FI]Nlߚ _@+*w/!ICfH 1XE. l?`WKI`Dj:[HcJ#s+PĈ][ZJp̄É;-KٕƦ.S[W^Mss[ct`&u5zCJfx'#<8r)%ظ,tk׋.7aD 6@[MqOrϐ9W/Kcj0kӊ 'u\ZIϏy s8Mzz.K*I7~ebr ksRl_9QYS.MaǘlK%H9s3&{vs46Z! b/Gؗ$C@,ZOx~?vᖟ HʮQ-H/QY])0H(}I0= bǣ%QE&AχfTӳ^7vuͩc%?ڶ%T|&ôPnS,407Ш:uJy{&(l&"iGBpҷrUœiLdߙҳ#"d:ܳ{yJL*]޼~d3hp-}DφH 2B(_ݗO*932~( E`K֜?0+^~m۹NO&ᥠMqG`(qL)p(l[;&v>gv9mRV_EYB<qƠdIakE_G?0MpC@ɔƗ$G:}ԭzO.[Ev}2Α=TJ9g ־! N7EsD>)'UI1ZQ_-&ztEW4q~&\\`2Nq_TFmמ+`x]0?[L}HH?=;ۅ><> Ix@/Ei_ a"-S~!հNn0A[RDfC${}/:Sk5(ɲR QxLPAU-\^cO0b,)%tmcr0{!=~gSZϡ}ZyUt!ԼZTs_O)g|-gNLs]EHhFW+l 6&E_=_:tf%\<];C`8̲hEc=(Ad%Im|X^S$G8ge`G:jguwb039'k22`ۦR; {3 [98НVb?;vg GxP4AXii~i4OP&:iE[p ED`+2/+ju1(r _aؒ}| ֦1GԚUcEY.0)竰{|l{O& [mMö=DĞ|pS~ z$ {ytIɀLTGG~\.(ؘ+)H7vsɉ}b *| ]qdñ4*~S '17SH,}YT/ŧHɚХNcDmY{ZBy .[eq8zqR_Z^;aIx"4 mj+o~)ה w.YA/=~%r&FkGsp~BXh"]9 ~p<]2^^/̄6}i[Edf0tKk}O}/O jʍGAJѐyL?7N=v ':6[Szul!]xrf;w9̳G5jzXiz3q@ʩ ǫ/޻;`-wVsDi+ƻ7 Sь^q@mc`1GX/N&432K=S#7FM_ajqg𻤭i6 ZGՉMhj}\]azLKNXVXF/A%|us_~gk!f\6{4}P{V42kӗ^Ki, Xթ<_eHM6.uT](,~)`H|g a\U{BpDn& ׽EyweZs 'P./!YNx'\"[o Iիu3XY´d7eM)^rϢ sRt %B;jF,n@2\('~stuc+uH-ý+(QxQ-vo/.#OLؤMj!7VP%6Z v!mrz8Ԡi#NĉDHeFIZDK19+:""  .\EPeJo;o,ehwBn/-̋X% C?=f@wULH|x{|H0ډp,E5/` 7(G6Oo#k94y:GKgdHP@tJbD +@%Eit?&=L2L#|!gS_ (ۮCavCR JR ATqvaTM8)ǻlqVm% '|+P:|jSmxo}F߸}:uam2Qga"'b:JA0SKaAФYK~L&aVsJx<fJ$V,Ƥˑ*/q*2 `ƥ$ٿ"h&鼂42 !c3I9j0A+ts,Ƴ:9 Mwٲ_8G@ĶgO]䶷]ݮ(<ۓ1%6&W]^:ߪP_]Yo8aGfHOL~"F?)mp5OEKT*T`R݂8 {̬U3AX]{HcjsXM.﫞#-q6_Ҋq +Z)t3y` #7(p\?iSn4-6Rz2s/H^͒)z?%lpY~y_O G,p8eFΎ0UN7Oum'|/H1LuAjia[ߙZ9x#2AZU0:Q?(>ؕΎ Av,Q$Ð!4[.]e 4k6*amK4MɸsH_b"4+l^nzB,fd m\b oN I0]J½.ʓ @4^& q| xI1jm9bniqj95uaIwq78esZ3>z [z7qǜ_ay*RDE 鿮A0;`%֬ ]jlp=9H=F8Ib`ZzVY(?9`8'ntPn[1߃jNV֨p"ͽfRt.bp]*Ey@k+0ݮF'lAU#+Z'Vg2MA#55n_\¨o 8? g/7@iҵv#!iF = 4I3Z8݅Mӎ6l3PJoK| =6q.)FT!H)Q5_lbIx+9gFSz4+c\#hjSO'=希XJ>>Ǚ".uڲ&$@=.O^)AwEa/Gͅ.G#j0PoM.$:Ӯì#񆰱$N֏0Nߔ>0 _OlwK]+M'sx/a?&^{Ch^:lǤ  S_JrkvXش 27H&!PvI\Z'5TK j,1\x+>) }&&v4E15}"w`3XpqQTDv5 :B4+V%aox||:As^ )݇U 5PSKDXNV, @NT5'zhf¯BǕ5[EpA5W'+ : ,̇whe? y #?tŷ; +;+z6+C.]Z$:T)D`\@BOGԨXf5xH 5`('j!^HYm݄zо!PS:ԿcJ(eyw6wiבVo:/#0w+1ìQ+R(IDӇ+iӒm}2."MeP5w\ۄgV"ϑPӯmjSQu ўSAKDuTw/g@\amF,c |MpGlaQrC^|Zky?1vt"J~ji`(aฅ~`< ЃML1;'J.':F r)S`&4 .S'r1ʮȡ)'ܺ:$an g 0:x!eRy4bO+.3ힵ2) uF/ Û{ {:/ 5"h.cgtjwBc 2B=K|ynPgE必X+Ɛ}Ŭ o!T ג!A`×Q},R!I[*cj cw?C9G$#?NoώWKG"e\q:ԑ!}oY dx@Dr\$GQ3fRVϡ0jlր,0r=KqU vCLGR툜x5 O/>5Z lD^ƁX) (n~`,| 0c d/dZP~[ըQj`)s$iM:& CHq%w9 yc̪] u7kh iT؁=!F( # Pbw|{~'NƟ 7e~W8dӱb= FsrBY>?HRNvH }7@:`UOװ04â.]"(Bnz,!ODcAdOab<F4Q6pkWuKGT-R݈ =DRWԓ&?Ơ[ )m3OD",3MaFؗ$X )["B,}D!JioNL ?-~TC )U}AD, Wb=0턃. #NkgRh ]S-ZC](K7aJ,ZXpΊ,xT3ώ"$t3`輙+%QGUq Z` =vBqKXs!O f|8CՁJA6;.~@tgJSῼПeV .[rFA^ʇhQ@dnrBJ YM@2{˒s&^9c-v=Zt[mFZxd/7)$bbZ-r:Sݒx!;Bv%pپ@]b賸gtD %4t&8;%i. ]NEȃ= pA#4cbK R4OFy0k7Xx`k*-E0YUDõy簿QJ9Xs)f7ej8rD[%HBJ[PT¼ӊ1o{.cz4 Aj[\^Vi.|Qj:ZZkآ`IhdtIē ]yu$paTuNDCxbD+iX5;/V! EI:8VURo"=UWҜ%_6X?@~i&su/-׌>$!6(>&DhՇ"8EsX;/@2#D/4ťʣ+i= |?d -H\Ŭ[LKQP]Rn=OM%5k^ *5>väb$ڕ4UfF`D(>gg׼n@3l0FU*vITӳkq6K挞$aI-5N۬9'p;ܫe7#WYkPkw}FB$V+mxaчjR aETh)*uRx]pFH⹌ 7K`%ic_ᣝEY;F&t^c0d¥^]rح6C`a q->ru4?݃PwK/tg RZ!0u%0OyǚpUnEȩUK'A}Dl@Yr (1\y={߇KQL:;j n\'hY)"+"eV)[ X4crllSInLk}.WWՠLڅXu1Nag323AO 'YC `pˎ[{w x|*8C"KQ=ˋA@7F ud`mt_m‚ssQQ Ğ}ۆN,3\2Iڽ~CPBX?/]h#Yl Xr1xKBM) Rr9;$'rj_Qu%/mxrPҔbV7 hPΘx18]~k R98K@#-cxVQ۳h"ub M[]І^PXZ .{tSf0@*8X\F*{3Y<k߆RHe\8&c<0_ntSA*FhWIS[`2z !q]0W'Xѐ z9ZlOu;jF[Mw'?6OiOʥ"'$ q| ~n_Wn%Z<U ͰOK0M,xxTLR>(غ ݸMRV:QG -nO36s9U5҆` v$Y>C/M+"%4Ϥ+3i ] =&l(VHg^q~W"=9 o>:FBZz ,36[]N6WEc.d֨REz'JiDeIɘe tr[}x@JHX^c!.Ev@=2iy֙ΔJџx09޴N{s|`JQ7AcgdVf/z!=LI ~;W;z4VOJY&Պ?*@LIkKL ڲ7V78_HZVP wJȇ~Ƈ1  wZHx6*f;Ύ Xӡr#˂ 4m& 5!v=?OR[H2&[g̈́*4@d*>pml5YqX-G(bXX L-^"&qt3 oAMq$Vlp 0-[];}|򼞜l_O>b8x0hWܔ)\w`88qBs666rSl:Yx:s$LI7O ^a,ud\I׻^P(Md6aQKGχ+s-C_6'54c|N#=$ c?JF;KUS}e>B;6R&.WHGE"eN,.A%I<<Tm!Ke)U_ws[>UquthL^N|g~D#3 Ot&/:_=,*p:|t]+(Aa-Lkkw;&눐ly)2}&_<7J 2PR _6 JTz |3Ĉ?Ru~ C$#5RS 7di3Ba"Յ_ZG]*~V4]R;_  ёbbdvZ> ֤1xݗu%jRlrF`:MZ?` 擮qq'6,b:Kꚅ&)!bj,ple.6I>t29y&23)^Y O% @c%!$V F/( VgbgU[R_(k$Wv!7. /[VB XBLl[^WQ@ŜD9dȦPfZYr]u ~aIqKQ*iT빎ܵMpDR^֗@n$P;cwJRymt*go2 2cy!W-"D2J!< $BACij]:f'bcxd-E_E% wɝ4/'jdS橞^Z> EȢfnBQ,ei$+YA=F4.OAlfO>Kuk% Xu\6X3żL۾?ʼsm(.tL^5CQ8*qFsc>0B KQ J[!MwI7Wmb`B2CHPCd0R?~g뗃jSx; ==y;k`izn?W_W̜_!_} [IzUqUuOUZԋw{SJW@Ւ$OKW{2  bw%w'0퉉iQkHCEt ymYF3 i%Rܿد]<F(h?h2A)LmaOSN؜>Ppf֘u B!m8-!kUB56]]isC}q5hۺ\7UёؔgA0UVldϚ8z2!1j2L ,@GN̫_NxŸYQ]fUNi-N[ȠHwK$-veOB?c pœ>!vN'3h-(%)٫pcSfAvbH w| UpWEB.V]ot9D7!g}a[Hj\]P: d;]֌*>k|"9PWxo`։.` {swe?<ٰ xuӍkaʞS7(GpWsKu4?nB斡w,˽'lM\o?CX r˔n4 ']-,>c?c$(.t3/E2CXQ0e0-)v)6< [$ߣw!`5ζOXoD!ӆ pJ葓 u 47>픏ulx 6C4y* 1o3'v.z~o]'K0 >`me2FDxd⟗-$n%iQq\wQ&{u\-<]sD7klRLszd*P8-ݜQ* v4aܗ]9 DӥIK쾦E1?7z%=kHw"rn^NHhq@4&K$vUDH 6Ghz'dHkZZ6Y_L)h1?m.=e$]ϦJ2kdEO7Q$Vf3f\5;_#NйȡA~Zgs$!0M7Ἳڇ!嶝1p -^iq}_;&yl5doot%iTls y_-Yi-mpP(ˣg]8mw`Coum6+ XR$*ŊEZ8difR]K g{p&w]|L>vA{@td1ZeXFL5F2hwi ?iee(n_ץd#Gˬ|rcD (g0"6~yė<!EW(#*:˼6/"I(wqJa?M*rNy%<\Ҭ]BQM 嬊g@ ^f{6ߦ/ƪ  `i; ̼NI9I*YsxIXN5R0Nv;{[?%2h 9-*o0l|T';8x=vx*gÒNn,'̸,gBIV9Bk]C7n~'k}1 vv l864D^ ?餅5sQaC,y" HȨAER;“A1+{pyӻvZ~CO MN`J^WLgrѢy_G>He4yriHS8pck,opD9`zr !;;}KW-ǣ&\+Mʋ\t#T?L԰*&5HCAʱBJ\eӺsRշ"Q:zl.\Œ 9AJ K` D“╖/!Y iX<*OzK (-)zGYh1"ܬ*#803fLS)&NW5->k6:<1JX>Wm3( +91WHT%uWۘ#FDn: ײ7V8@m1$v7V ! HF)}2)_ 3Dxk+LP[1 3x5^KH*&3g[+c8;ऋ<(i׶snrΓ ) nsFhy[)l}a$Nk2][|&w4wOSDq'Scpdy*r*~5ZmL| گ*jF&nH 6-8~>p7F 2H.OsjѾ^4Nq-K)݉h+oa47G~ :yPۨiŲj wEIٖoaFnͻ^zXnnBF8 bڏ;8f ҭ3Gl;RoL8̱^ؘ9}>@!\GڷEnUD` 7MDDfɒ!PWاapkذvqųW`C6H[Vph` !C2h6zFLgeǶ5MSZh,kO~2ֻ*2WJEFVšEl/W1*py.~ .AŦ*kHze}ElVtu[e-~TmǏTKphֆ?|sETV̊}i0X8L&yK& }iz5{`D_PrTd?Nn: _^j' ;}XgvT͡3;]6yc9}\}*o;J\ߖ{lL764EjS7!j&.c!fX%1 Ȍu9EY?.YsC;CJpZ~RQPBMVʇbjDWFlh/"rRo_{y@V})L%_F~ Brn[@~U*F^"KMH>s/_v8jaonr>8D ;~JKHa@1e*t/\:3O|Qbs*#n|W2dZc^55muDzżmH۰{ I̛~ wmn]Qhmʶ+y9D `2#HMr`wdܛi|vf̳W}Э[Gn8^C&9Gё/ZԸdw Ώ$D,Q3[CPAX x\)^e EAu" da$ Nb'@2$f~Մ6doJ^*$Ρ5Du&MT68=&Y vYs@ewȩ4T;ͽ}gv@A8kʁĒ9|檄e&ڛ (P$ Vwy,,!=GX("cc `D^S>!΋`O1@e IRVo\Ej\^9A$ >]Q*5TŘKupnFw[7=~^eIKd7M Ц0k'/BkIo R=aax'Z0[̣+<:ٳi;³&GhM$Sā"2+$\39svc۰U\WYε9Q^tK}!ذjf9L0:D~7Zif/7 Fڬٌ_aaN6nxN]p¬t_;, KxJDe1rǶޢ QB6Q6Х]+.wdeI&yw#cinc=%F%R&lh=D ,^xnMpYJ,҉6!=mm͉8GZ$m#lpSOt!nfsUJi=i!Ea,:p'Ծa} 4ĔEOuGV圼 x\-1{8ldX7 ]yxXNJii@E׸ nl< "<% ~广W6S "8fFr0r L`P(?~OuHP1 "+mqpRJMv;/sPՂrD ̴vxNqt1NC=%TӃq\)ڠA'k1|10.Ӷ@܎w[]欩i8fjQ˔!9y(ZW_n^n]˟Xx bb82Nϧ 2_n90l+UI"y98LݟX' _[KR÷bOLHEYV Y#Dv %W8@S^*48s05v_x {G/ǣM3V`Qg_LFwtS-aC^O08EK<e#\ } q#P\zҎbNn|?!*$W^m`VLMqin|€o%,-}ΆVE1sI:L:Vk,ӝTF roKf28񺋬z #Rۃ_YG!r`(!OMpjI7Yi r]z`]H/,HBsz1'.o<_x"E6 1a7'OJ?y z֝M'IKRv wBkXyLm=wXA[%!2Aȶ%PŔK4\7g-JhznuRWMk*ڠM@=JW7v< Z̈ 9ڵ+ - r"D4thɻ8VZp,o zlYͪʻɰ VC,`0i?̾ jCѶ.SϥJ+ZKR0rؒXwqO+P%0?B B%ۈ1[ i]͂碈(̟lԶa'ѓ܄9iAϪ ʑmؐvy#>Pc:mCHl, k3G/o!zc^{õJS|Pm匡aЋS>٤rZʮ׾ &Y8s&pVs)!YeRs^Q wb@<ҕ58ר {jc׶~6H5!?% 11 E)g߉Zv6Ot@X|ҬqkŒ+<-t$Y CK/ <5L}Fˁ/݂S*|t9M 览= VFe4\f7%^-E=Oa #:ML0}JE%Ɲr|ƂA~En [IH0I_ cut ,}]DCN*TȡɫfF|6|΋6`SStft!a6roCJ"iY;LowQoXLpap{ ?b<Աƽ5!/0igF)f(Y~da&)@_b,=.6ԛ~9@|!mmyԠd7UI  }=P#h+<یOEާX*uWh)㱄 d'[]RI~j6@r7z?>-52x As?=sZp\](zS(0-K S)%<:*bO/Oz!Hs܋Pnh^QsLCJON[x6\ sf2ԅ ,%"EߌP"ʀA{L/'Ä6f1]ݶ~ޡ e+G5혺zN 7NIfGa/GnGllo`Gz !9"L x}' &:'۫+}y :S:hvjb?f`t81&٢(QsWh)WAβW&DWyGW͌#(2M  P5%6%3։Իs#|v/aU5a w#&@vnt5h`[7x[,ע4,L},wݵ洋)OHmwSê vF`עIAWS`PB1 !ѽ'ʺ+(ى6o6'@⺦!* / 98g>nmZ&\ٙ,sZt*H|1=m^ATKYMgv}?obxp=Nt`4H]&JPa {S~ixWޞ/h;0qkWѶvGTJEX;oZ2}G,7۫bk9cx ¢AzN##x h 1~Ru1L+xRW_ 9ݒGɣH}!R`Ӽ+GƬGYVlM uxEҶ4jꭀJssa$s.j!6;YSA96zoxqNe&#쫍0&3!XU@2utC$ZcQ,%TsXM0aW,UvkV=S\ 1h[N^ILu,#]T,wzfIM6 Ë8@w'"i#}3; S: r#8|Y "IRwJla|˵&Yvon"Z2[Fs濏۠^No^|b1_^J$}̿5@' }4^w%Oi~ˊb$ؘAzJGOJ^+03;`RWeĮD8P9Fa9Ap ұ\. 2+jDU~044ӗCԴ@34I^QRЗ6 3$/ԣ%W7K=XS=Eu5V'^f`XpY]I#+q^vxfMV^P*EXZOw@ù5Zr86>~"Q7+@wo4˒*`B{1xJ̢ǩDNl*WZp); N0Y|X͗{ͼ[`h,Eo(px]..{28yl~XjdKwRKcTeg9 LWC ;s# ~/y 6*~z/43[zؙxӅ8iux Qfi@g bK"BI Y9ԇw%ۓ2ģ{|g h8::VpW70O(Uw}R[uLpu6d$N륬'CzT`ThES1PXܰhxA \RGKwS(P#/$ 'A *hHvlؐQ)? LT4< o&L:*5tAD/2B Mλ8.+S$$W֏xٌSRK Ǒp߈ecHFy ǃ+12kNK|ͿZE 2ڿEJ8x>PIo LDa()Qνcu\D'} y`94)23Bh 0d>+S'SQР *~M.:*VyaSUh3; #߮ M>϶vepZG~L"1ԅwٖvEx 9 ʿ j>5ȄRcJM+\ My^R6P2m^Ou'qw%8!h9BpV,{;ќ:=ΐQ"ǜ?T?cN mo\|"Fs=e8*xpkܨCjM:Ir(4?6s)Fw G7̨_Z_];Kߨ%`  h?Lbėg`K9uc] ë g5RnpR<ݾmw8,>MG"XX\u]CŌDO"U#8v>lm.Dwxv 3 E l #8*ɬ1hfx3\lu!DwfNr#;AO4hvR Vuoj:͓lOg4|?p(= -gcG%7Ȗ_T`mg!1 % xu=J5%wi`x:a =&mɹbCyt ?W&Kn#TWJxu`*(w{:ΓSDrjyڧN/a"2YJc|fUN/;/_vzmF#;M"v)Fv SLK _0+ z(LY*F`}M#x7P;elGdXOE_Vf&uL0р)yTKSM~8Hq!kB RM@xZ,Ԡ]ygӌ-R[y]u#2sGdL 1sfX?5)}_suI?$c2X -ۗC1++V}͡ P]Igx͍ivEVXX8y R_P9d?8f6P}8z( mE96 p[B뛰C E GPao*0% }&|CZhFfRIvaly(#5qNgB=QsV1=`&9qkvGJFoJ]BEMi4`ۜ`E 8+V$s<ݱ> ,EEٿɁtAN?*ϲopS7)za%tR骓&y;krH]c%˒ Dug{z ~ې]Š"PXHu12;? 0^|LfrSʟt#r=7ˋZVЉXm.<ѳgHp paZ~ ^Qqߧ%x0]=Dz;/h6sa:e-QJEcHjۛ~ռ\ˠ\g[Uaol|f8qX%c+>ciB6?560ME<51wg0k#rM#) ]wֹ]R*EXMOT%MSk|(JQE(APCM5n+{PY}͔gV<ц l.>Dm@:8pL\4|v\1O4eZ$^ޖ侕awnxAv&lP3l1~U'?H_CHk].!RNd'\(D1B0Ѓ{midv@2BKsf~`2:)Jgq1,oxK7~NVr"៕VhrUO*%i-w mې tr QHt&kX™>~J>~S㕛Z{ ]:gR Whu2EM$*[S6#ڂ`,–]q,EEfsړ J8 m&dxlGʤX<0qYvYLiFDfCp7X2:l^)ZV.u`vq=nZD=4Od\<@Zc}MZNûKy@1kbhctQti1եvڝά[6\a*,4*c?4#}@0|iñZha {s>tĩN 6+)wU cv=:eVmN"mMSUX? ? zۤl}s; kFc\+p@o"fL)W^ۆYbЗq>"Xz^uX$p5\ f;lIlP/̞=j2b'(+tɗg@Y(ȏ m 8 8U)Be-B"uY_\qvP~58NuNMjaКl=",ko] uh_#Z ^n5Qܦo I7|P4\S."Bt/\6__fх3F%s ]BFllcK@sʏ<~t(˻&V?-;ϵ_1S~jq:s?z"Z>D"ܖ4FnҹZklPI-w2LZuDRs3ƣ|{X7r֬?||1 ABM S;k8VjbeF?\kYaN,1e-X@}ƺG\„ѓ觛Bk:VgdyM  'Xst6;(݆^_ ӡ 0iTg M ^oup(R3?EE+a Qyʝ@!D1o}VڟKRZbJ'?T^qDX'۶jIvàT 3[b"e+GN5wnEC57s Oo3T*}bFD"s ^82rydN9cE&L5If?[ԡGd4 C_Ji̳;l1^8 ~qz/zS3uc\8Ch669n>+^Ѧ◊&7o M1W2AdmF:6lb0o#Iع P=+&_gv:asٯOxi_9aLAН oR+ɬZ״|<,"n@7zϼm,~nt,0k5B&Gta+ MZA|4:j `LXrgF nur"\N%,"$ڒ NCCX; ϛjūX#wr'[=4F$2gY%m>Jf+R2d ^!Pjp"eC"͆y̜ku8(h,-⻄糾9|=1iD&|R5$@@S\QßdаgZ =Λ毆`,dvAjU@2>,"1hNK?z./8Ĥ_@*{7bYW~te 1@{>`-u]vJH1l\ WCT/#RnnvYU + I*7iZ5C7uӇ+~,CY }(_5[f umsm&my,!_H} O d:Ŝm/`U^-uV*o~ a U=z <(Q؝xkhs N/Q{&JtwzYaPcA"%kM/pCgan#Mx1Qt#:wR=9/beO㮘]2^)Pm&Z9j)`7(B:FϠDΫ?Hq!IQA!W< xAaOtmʐm@ +K{MN T]d!N0cN;ӼuxDɇS!Oݕ6H" LכA֠_# a7rmU1Ez+ յX֡EN0`&wAo0#-a&hU^q[s[ Z8o{e*ɦ&hgo kPG}';^^s(2?1жوs^련=CK㴐 ,$6NBog/*0%H4-?, Wh(8aV92N{ىbB5GjR7ҳI=O.(-WGm<?Yf>e0VS.:4v`mB<쓬[2d)&PTEXq˽bClBn+Xܱ葧'с#@=drAz|6:5~ׄN`tM) 85㩅E{8՚ I%p$:ϙŠ aUbXKØv8G&R@e#o"r;&Et,Qy("&<>qzMnhlExYWl:tʭ񎕨xL{I3o@e׽?e/W+:d?$+7KRQa06O_X<}SXb1y`wޥC2pUi,5OGwF38(]R)t%e|{4 yeU*vybTw rl̔VLҽdٔ~:SLTi=A yЉfPM9NtQ8!G,[m!ccud85x muVvH1 @̃{72`F=?+B2j; :*P0@&<LDj:kW*%=@̻Jot OZۨޭlu o!/Aбj cĽP~_THiEN?C73e/ "]I+3}&%U-<J]rt\KL7)9:vBIC ̰mh/{Xmp8(lvˢ۩{ Ƈ#`iJnƒ*89(\u?F $Qso:Kfz݂= u4uZU)"d[zBTYƌ hڂZr'G .KH0)@1ky+D@Zt@YoT~ZcМ[|iz䯒ahR-^6mzJSJ:nzAo wzae|ͻ>87R^ΉYAM@֨Eon-A{uYWc-ֲ3#sHӭtϤƆLI!`+!EUo"15CO V@$$bZ,DuhϚpB &퍒cS>ELW@!ͱU?|t3$\ ME/,Wig QdJ64IĮX d+tʗH4F:(0B,RCO'Azg9mfe7:RԶb˧ĕ6Nl1 X(_^҄qӚX W*%zB4RB$aв9.ܗǭ2}֢I6rNNDurGRBK+W;FZ袾Rc p5^hؼI4a*fTVgs>ٿIrw^e=5k8",6gIDMHBcR W=^IuwA/݀ 2 *y۾̘AmFRf~Gpιb:F*Fg^bb:CXCm,2 nhu5Wn04%mN![E!!q&#wSP(z `N><90~w55$k!q}eA,RTob( ahXO`GmiǑ">Z8:O&'kqd{a)=/{QJztP琶 81خJ x6k}FяlƠ׼|a9jYlBu*8옘{'暆ĕ x-I9(Z2( ^ld5wyb啻:]ѳ'p5N(Q@CuJB &SqAD{v; _ku}z<@ |j+[-G9w9~6ql^`L+eQw}iخuWCG}nn;i ?n!Pf}M{E'' @ccl*3Y\_9.Dž;( X]jy][uk5)!| f:! pYBHNI;a]“B οrq=F#@Qi WSpLTΰt&;TӬ|MYm䑓@ºDLC]_l -ϖ>k0prcNjZIau}xeeJ{%zsDE:9ud e\; !Gm6{|_4IĶ @( 04d<<mQ/lU Ȟ/ahLF(4{6ϗZn^BhTxTg,'k.2# cM:@{֟FJdvi08x\.۴ ڭrN OgH+SEOGl6T\K}Ao$y"GsM+!1zd DQ0U;XY #m 67Y~nYϧ%Kj=u~&D_x}%4¾ee򑅘E+})JiX55w#sdU@X{twz/XůiSeдg 2TJ$4h`^:Y+teL`ҟujȕ%B-hps űUg(34x)_VYgWHn+S- ">樽h(:z9Ck%XX@2v6BdVM l'2elfpITfw$zy8nsLۀ!GaA)I3V!Kik'bzyԛLvj!9ԑARVYFtҰ#.eC0u&Pk+zk tL#W[fMdr'NN,f 5~+ܴjUdh4|<?=7 Ȏ#i/cqfb} MԝI窈I? bf/xX&R%?Zk]d_Vzux5d;jݵ%7@ZRVK7$<\-4bw'3am,}e-Hw_=M*ŗ1jJ>!n{TWW~|¼ɳ=E^U _< k΂J_vHV^ cyᤍn :NP;MrgF},%`y a`HŘCBLh|-z[DSҢi]cԂ^E`QO| 2k̈_(z7#E?m9z (dz R{a9Hzg@mxW 0)}I@pP#f5b)5 ΆTEigF\_+oĨ]}X^@.2]G [+/z?78ԐuC!ND&c"%psߦ`Iyv4#ue#ϧ3'6*b+ q=-qIӼLkg@LY5v<.j7ǐB󂀻ݝ,5E5H)Lé4u8In̹ %zM& XtWWCشÉ9jz+ |gF&'-gbpfC|8͢'fi{oUSw[d`d +xK)g?H1/K*A_~&"H.!998-\Hr#e%$sC"aVۜ |95KK"Rx(r/Q9ǔ\V{.LXɏ{(lVNAzp#-XoQߤpk#|M6}!;0=o|Y>Y6&XxfAcrku!+.\lĹM{% rk#9wK'?!B.-|σMojVHlq"5*ї ]BeRGa}t=f=}ٜlBa@˴k!j+JyB~L!GΛCƄ:q5ә9n.KMCi3Oߔ?Cʼn3*KKٱXHW$"U^Hlp1CȀtwO5\ %ݞ0"ָW߇GfN}6,LuIE2>b`ES?( .!bgAz4%7SB/Qg96ECt&6 *Pn%OŖTVA6(i$a]!0؉(epx5 C π2`YTFb֏䃭){ z\*:SԿ'j٩hKyA~hVAQNwX$][)jGp???0Zt1sogu)!m*84|nJ3+"s;/ .4:T 1{ן('l:UJ_cc ]^}j)sʧƔ~M$ñXAX)u"qIԻ̥to0/f( M^->ISO"Phvw֠w P+#CF9 p%?|_@Fc4vDB{7,% "-kI:.:ͷx.I-UB&rdg_7LN$޴Dg!e2ZΒEݦY\yM] ޓl!oAo*mF{hfg1w],z}.VBJ}/r3\T0Өa*L|3XzVA&,zȞiɅYP,V9m}zoˀ% :v dmc_߬2l/ aPcOa;AF%$|6!=*;t Ԝ}¾ yooL7(: rK]b4wN|~Ydy,5eg-Be}RCM]U;[(7нڢ5$7 "T~dI5eJ+,=\ҴjD|ʨM؇Ξ %g#0{M‰蘶ÔӤv)?sl'$ˀ_7Y.`"M&|fPVĮ~Dk2N+aXϢYʻ4O%Yƚ>rfH86|"ԦMp.bM)y##BaǬL0 Hс.J 3n`-Tx pqi&-q$j30W~u'`H]n1^(R[f[+ȯB}#4%|Ts)Kr]>vيV|S'ϑB+gmp(}=$zW؂KAqXAxIŵf`dC),hfR2z>Y~]'6CD'a>4@_HU2SrTH%TJ@"L𣥗b8@-fGWH:7&prxQN12Gݭq)Vl`dJί ] 2ptW{Ht;l/<{僺qQLd|l0Mp ES ԿajV n%lAps$C&  yM7\x־0_Cju~0!l~K^J!CZp#/p@8S(M[!D6X6)(=$ݖ1>!VKdjV{$ō{m*g%0QKqI7[_Cr^qhtREG'0] n X?Y NH+ ).(W(JD ˄F9^fMӓ-R4A8=ukr$5ЇO{!Ļ2Ճ;74^"|.M^pmS|g$[Q3Rr7b{LJ!l0-7Z^OXF 'NY Q~Ml'Byh9Ä| \D\.p@-/ޘgP3MIc;BuYR$ 6攗J6[]Бy64 5{M13r,_56Cr4^ ~.㰐UJB D2%v'v,$Cew]RW&1 ]~-*L[C:iӼ0o:6g^W( ߌa {Ʃޮu}(:a{n՞|h7a]-tdZh5 ͺNf% ASVmb$O}U֎3 S1ēf +32^G0WTU3?` q݉Lb,;m.N"M$L;k*H?,x pJv ys?c˖PaKyfg.F0K;6Oo/`QRP30֝i|RyB>Ł oF6:.x HvQ,x:6үu%:pi HlWPtā(Fo=%=8waLKTvˌ#%緖DuEMQL׌P0~kS?ՓdSlŇmI;ԬkK|9;S ݐ9T $҉A?Si~fBي|TrOY(W\֔4Y` N<Z&*Q0KKHEնC>X XlEHfETZm_-lkxơё<#[iDvIڮ6ϋJ&I~9 |CfW?+[oJ62k']4ԕ;Ɛ]bV➕]gjh."iD?:};`e3e؞<xrk `:z#H9^l0_q3rPB# *&{G^W6f"][|$V Y wUUIi_6 K-Rg|TRxլa:ARz:—|8 i- \㕳Q9vLxW?ȴ8O-BeVs3.]HaS1qC] lLG]}´)}Y4Wp/3TzNqU07f@<ڬ?=8~)aC*6D+> IN]M. ^”gzԱnZ.KR=nCyǒ ʌ6pvFهqh@cw+twN  Ug֧ī1lՄ2Q1{akk57ե٘?5[ ByC%aF*mdrȝ^G=S-Ao$ sڦs{bNHku11e*XY)d?u'bíu `> ˔-<]C/0L<)"y.V9bYWCgK*ZLaZ&v۫ RlC̶{Jz@#F׬Ed3jYe"ew..C[ouuI;?9eB 65Ni+c@"<һ'|S~m'ҰM0:6_؋iN c$ V!&#pۅg*ym.J}w v2sL+/57 >`Ie?C i$t3>mcWap oܺ R+IwENv.4e> {L3qR#(jA m{=k.Å0u\JJDZU1*\}cyT{נYiDElZ*?kO{̪ Xr{[α;bJx,-,,]JZ,Σ`),^6-F~PhU@ޒ;fPQ_4k<vmv,; ju005gRB9/I=?6 n0*/kڕ 냘S௛W439R%CO'n|;+X(5kN^ 0 7Ú6ٖvR `T*%BDM-zT MqDidr3adb79Ppy1 ą>Bʽqd,6x:v^^YdQŽtd ۚGtv(HRꜸ~m"Ny |xc+Dfvtye:frv:l&fW& x0QU(_^[ԡ52zfh]Y}C9 ۭN6۞gUw.lCt"I|c5%ꨄmrUVikӽD _7Je,ogonmhu Yn];b8k;yU5f3-SP5TE`eH)9ΐ7G/>uicyLB13"&3j~bbZ>kT)0w RQzg 6M%8!LA<Ϫ;/LS8/<עX?K73ԀFs.o>߮P~&fy1Q,؜lVN0m-lK6^ժ `z ͑P*8E[>1|-d텢yov=YaFBۻ eUMnV-kQŸ+"82kOiSܜf\@1f~3'yɧçx#IIg$\Y x!LݮrM)n\9ۜLNvRw;~!dPZ Mn] bԭKB)M 34P#8E墭S |FO3Uan{tcc+Mp}0,Q+ gi]4i몮Fxz z)wL.2XDJX.L#_Z.[C&'$lK)w3&<ЏeK]QqU*$[ivqs|:wn?"+l fScC>tMA3&mg8NbKc%]_gg&,Y}:|; c/JbvR{sD1/']B\ e!L_8b[W5LLlfaBkqKghxmw٭O]Wb~[? 30F 6_km\,Z^cG3Bvk;u闢_'.uO⦷`ueeVn(,6ut 1U&c8-y/ndac%D#]7A~"-W$U[νIVl;%#2#pb~9냳=\M`7 416hG\YG0VmJ06<ۀ.lSf F CefPvaQީX=A;`}^aZK4}k|Ck4NԅSbIoͫ#QBռJuHZb\&ccq9*T EEi:>-D hPmz(m;7;K~y3gG+]I8ɰ#̜ l6Ot j&Ӧਖ਼o14hKBx,%7u捾\eT f)a4D.O `@V:{ٛG[SMSb8Zl,@>X[*މ ?1)EdyVտqxJ*ވ4l i ˆ(*+Oy_TiOJ#3EOPљl٭SL -0veʺ3"p;ynBQZDJ#{"TPrr&k1Z="}|hJ.^( n?\bT6@͑)@_дnt!.bXeyazgTa c-U[D=XBځ)ߪ]HN7O )eMQ`N3v~LS_vA᳦1G3?efz[:3ͫi>}T^#e o9awxt(Gm(j1Š}_i@22qY(2'._(e؊ʊf=@JPT|DZ6N͇!|ܪٗ .O 6 -F.ٚm"$J1ݽCT jgۅ;I$|P36eʆNY#rDžC 5iו΢*mBز|zPa_]1"1V.g$ڏ*n:Am)XUn y mLhl!XPԉ;"޶%wh/bqZ᝔ %Ě&FN Z5zo={ޜAI妲AN1˱i!dS)u0* 8Yoט3hk;8pk: Xxuj<&7{0CZG/>‚>2|sz)-O5P_~1w:E _07*<RXVmdjnWekéZoO(jBNЯ:Y)L䃛ωD/[pط_7pz~puTd ,wsGs1-V%3DJgPP.&e︡4!iŇt7šb"g&HJ(5ڢ&cZ< \>W IOOaE_BJiv$xf].i ﶖ8 B}&jTڷI6zGG=nï"w@'D{xX] pR ß'gT. _r.K٦yHTpk㪫ݛ:譧~G^Ƒ⨫]z*k> Oj}=>;aԨ=bLX=:uMfc:)||.p8^􇋔05W<>>)i,Afm7.%*.Rܦq"jqlp[<'p|/b?{qPD qVV$z:t^6%wbf:p0:ji_J [$}ϠP I'ںŲRlT@qA ]R%lݯ@xQzDwZάC-'ezk:"_R/</!Ћczl;H15!nIfh:5hMDmbd6r5 ՠ 70X^P 76LH :B?Ҕ;䂚+wAĵG9#S+ [FT0-xnzx&|wۏu G^73VzӓwtT1!nyDC ]5*{=Xm70E?F&:l@$=xaZ2Nb璩J /mj75Jq !?NCgO>BƯHeeUPՋy(EGyj<Ԏt:Cw'Skb $q!a)8cF2}m[|@,i%Tbv PM("2ys@Ma-('KuU[d[_1ek2Dy |VR|f"+c)Fr#7DL|7_*7NF=}T}3KV+,Kn](OW:fISTǃ4sbv 38X>zv1Mi\AuTZ @ nޱ[RS(2uFxSdOn:y~ae}AXJ w2_ViFB\N%WmIX L:DW!~ J +ü)Hc"\=KPߛᖝ b0W0 @;`|%sgNƈa΢̓QLF.{F"ML'Q(LhoL*.b@/=mq$?ږ{+ڏ SRGƔ]"_n;,Шo[>h1#N8aXqp|LT@j!j~c!o=0hT-:Ѕ\Og;M]ԌފM?lYnV^b>ݞ3Z ~FQV-˝==ږ{&l5Z$?[.S?c1o Lֆ8v0 BDdP4Xf9W|g U=N ِ4JN^0!@MFUq عj4(~4.A}ƣS_zQ9.&1[(dr^=yDaV0LW: Y1dIER з0H|Tg,'/1ˮݭ {o" U_MpwжTsK4TWGb%佨a?"rp"Yx [4GC6(τ Ytty_{wՑ"sUK93D4j/2LK;?]TM]2i8bnOoq? m8mh>յ$aG`mgh϶7*%3gfp5d!pMAj#Z+cDb6+<>snߑL B<zM%~Sj seoh=pQ) _nC [[R]e(Ű6+k'V]fnf~/g@s.|4 ^=N|j?;cPz5 q/tOp$zer=(`.G#lZfR2M"B#muJ8B ɤ.>%RCWz$$UUZ %pWNޮckqI7~MvjYݒF\ 4(kEA()NE ?jF>Yhr) 3:˄%V1NA3gImS\IaϳSbĄ+3&M`ebc[RS—;o-GibrmB*%yy&y`BY1יrx^.AF*'}YX0L*mV$y}QNi.9&9e7}{ugHZ%Ы;2lς8Uus3$\~oMY3TkD:׉^s+exWqO%¢ZBf5l,UeKB;f?IP≂{ 4Vl_š \-|:_KWa2}׾{tFdOL];X>?:,q=s1/ֲc51fZ90t͹>1{s<#"c-&hk"cetrb\%p)QN`ዮyʍ Ů1?Vi#H<ZhiK_%g 8`wl0g_5@_h^:zHwqxA+)/$-УB`[2sr(->$`PJ֭?gHd|;,5_=Pf |i EnHMwA![M쾨l +طw[BhL/fq$P_muO*m̫lSuN=V{ ̈K[~ELGapc-ufWYl+93u.8_S91&D>xK4Lll :Wj|Gs\50'ynusqQ&˄brGL_munܥ4u@^:ϴV|-䆋[aJ5IUj&Uי)< Msw#X<\2Qo*1#“1BB](`^LWuXl^8XwK_U)6/DɆ_l:eZ jPL}$4.ְ]6e3 G쾁lZ}V" Zi$Böm мJX9QQFl}vGj8 ײ7K9Ϡ ܟFc2Ur4{+n.K4LؽI݀p5w3 Rh+/!CO-fogH eҽ0S\@+;ah - W,{&NC>neQXil՟=7۳PP0VґfלUC= BCl2 ԐH6\I.p =&Zo w#=H;%ika &TxZq Ԓ@piك08oD<\pEɵ^^??~.yny&ˠ'ŋpW7qv\A&?>>0H6~LS'uIf#Ⱦƪ+[)ڸ.q;ܳi98VѸ}oM:Y}o$Iz"?tߔO C[ "hU~ܜQlohq]u"A1zЪ;;z/~%[3v W}YJHH-${$ hb Vވ%gVB ;=;;04<۹xJU%>}Īu(f4:[' J > FSWYpd%D #*x|(^ yD@Í&[]ɴI{vZvcl_dčܔ0$/} aT%<ÕZK;orQw4VWd.A $5+v`bH$ecka,actףWx[9ApZv"Ħ =1[%L׉>K+~I ?Ȉ|5ܨ̫ u*9ӌwĠ1UL8Rqn "k(hWGrܟ 4xĆK9s p[@u 6{Ё7ee bu('g:1xT%w1eYn&_^5lAKZq1/rS.n)5s̛ _C@&$?ۼe}/u!=n3_yjU3߂EI*d0un!R] nN~#Њ~Q<}X7GPhV^X tʼ{b.ݕ,Xef J!ע0Cq<'g >Ov ̋wB?SE Pb;*^%N,?GSwD-cf=<߼[<{VIYr5{xIA mV&;e#3l?9/+b8=MJS@ȏir1V=vzcn!~Y"0N?u?Ytɵ鞺ލF..GeeOZ]V&vm~Q1dE%&;wK4nF:㯲cB-%3Msz$m~4(/o'bR$e׺Ԅ#Ԙ8BC 4".A=mi A:>=jUU,W\Ε2vDtjxsEԗ%qusFXE 8س> C!r- zlij6v!No`Ef^mbq@)"f{|&Jbowu]O'_J3rNO e c2Hj8iy a]~0b  ^,U"^"Qc; JCvAQO@.gCVz{:GEbȚgdEqrNt.!/-uy mވKI}T|եC$qu(aecd&h +nWs~-Iulyb ^}Ecp9Fˏ3|I+(~^(<>ʆGY[M;ְzς.-3~*.eޏ`6Ȣʵ!u0oaiTG4WN"4/ٸ=GjaL$4P#2Q!‹[ɕ*OW% Hy> œA] 8H0p52y!ӯ" 5bEWe!,!u (%(,="d{3gbK[퉌y n:$G2*@Ӿ@" }CWx+N'd𗘿 >Y'/EeϺd86 R?(NԪZi4WL$[1µ}C |0j+Yz GTzv2hVYe<]<ʒG ]a3\ΛRQ`Ne|lc%l"q;xg.e$^m_==?s~ߦkr+SKu6՛(bgEouC@w[(I~Ҁ(fV3gAv0#rLC#}CUcǁÑν]rB؂I.{a~QqOϒF]RԸ*Zdn7/aӉm&R4BcEyUJCSkpDd؏Uڰ$#My',qm*Q 1sv4nLlpJA2G"cM%(9ebt۶+a;RK^PGOҼ* Cyf L%hyϗA ^wp+1^RII1LE7 ;d_CRp8ot+|$37gA^4qQ OJ[d #\>5Lf2n 1trRr?8c?- u;YeLfN >x&l&ƿ3 3P9wSp\g%4GȻ_i A]U4m;ʙ; zYRUP$[T|Rtݓ LꝞ5aUsCjAڬM ޺ATrawִ+Nll.A\"k風Gv{vmTc"6+ۺ=pIg?|,x""ih[Pu9 D)mֈ6FSi j]7w+Ius D2 - "b5/ycɀi]~@%F T욞"+]ꆫ1x!L/"QiRɪ*(^ô9%YƨغA,.-XGhdڢ鑠v&ܿ0gX'Itu艹Iߏ?RKP3`Fk<3@,^\Ȧcm!p2q_4`W:^Q9ww5w{_ O?]VZ9>n•j-u:y2Df@.G#i>հ,%j\ub@f^TEM7l@=|1lmj zCu +|{1u>0mfHho] H[= om5'p$,Ξ$}K?J~ 7D"ZE? UK s$m tX;0 '[7e7c:T>=֖ۓ\̝Q{aBtgP꧘ڲ@б߫mպ$eDAHjz;Jm*2>rt7O/ϰZ"(dmt"И6 ] B$z&lŨG%MǕ/PM8yʊuB]0M>շ$?K([YL[RE Δ?Fb{w]ܷair?bIDPq ƶbKS{Veg;šCIE Tǫ~vR`J<8*Q[Mފrlխj/ϧbmya&p;Ǯ9_ 0ԸWA:[rz/^m:ǿL{YjD}BӁ`g.ѧ73?ײLqGk 7XxwF= 7I܁Q ̀v6kkyΞBz δH)I %#OZh'L߫m>o{2696[\T)Hqa;ɗ( bIve9j{v2qg6I2(خTV%j<~^D L|o瀢=jryw~=݆ #RC'_+Y윂+/s{6mрFWTuPA@9Ǭ©ygvZ,4G\.]c%XH^Y+{ذIGgKZlԹb>3C7?jps؁] H)@D_}%A}S(aƖT~i`}=1`n xlܭuNXnp}h\C(>@\j=jI~f"u5F|s{uL/9Lշ0 #1Y Ҭu =Kw5qauhw0q9LA}\!ke*{TTٚq>6%Rsl,lS=wl0?ĥngVݬtk JWD^|oPrFr,zuPX&-8T7l4'͒H νX$>DVi`gRvO zC-|?ac m͊V, 4N#v(*:ZK2K a7mjiʏ@P`n*m *gǣ8|nӓ48:Թ- &,jCu<jŒ/}[ >V,zK@6;G$@>tF.CWѸV%>~?K=Q$4 fS`U69[gd$XM qʮVuzV {aV&͊¬\:`-d(L$cl:Fn1L@6+@sVn8Q2FRUJ &Wڬv@(#E5QSЧ #*qu5ӪxpNplۯt57=XZXQU0(,{zf'hvν޷Ίlc.@L}F}juԖR\)Ӛ̴C%趩X (fE92UpM{8* kQp &~ j+h\tp! "ߤM9c>$UGp1_Oْ7^]68q&X6* O@Ķ6C"/Z4~U Sa]ٯT ٻ3G`msH|X>C:{~L-|}4Vn H@ :Xg4t"5@\]2b婐9-߅5azAiT_+28hIl ay˻ DH#,xC'Z4axvlyNӪ1Mer_Q衯v'gnA}OuoƜxCB F5mz#;G##f7!C2Aex!HfV:NjؓD驨:$qm'ܥ"J{X`l?M`>t(gy.dvC6}Oe[h32U/ΘGh+LͶO@wj{%r4un:Z NXߤGLrf&] Ɓ8W!|Ln\ J48]O2b ᢴK8՚jo3]^_'^XA< .Kž,bx!|:y9n8ibS9)+Og~^z)Ndёg P樇z p%[hhz[@W+`οdqD;Z| [;izMD]h8ӵKCPMu駜G>@>U~^>z1ZDvzkNJs.K)s6~;8LUMT 1$m 0]]h &GY*<,2 W&hXu(+ŏڂ!`˕zkh%x"+i<2>8}zՃ*Ck4gDLX9C/T}m]1Sqc,NTA^+쐵0fS`Tg3?/` x([Zn|]K<842^s1D68@N)! coZtۘa%hAYQph+?ddj= /o¬y@F5Pbvp{vľCxe-#Y#S4`}F=Hr ]7fy ;vL~DN`Zpr6JY>s;,{MCKL,(tZ6;rc?@v8TJI~[MM/ ۗ@q^0N.ڑK,bBdU 9{0v_@TYX9ADi؏G0}ID`xwyNO`|SMJ[;>)^T=a™6q1:AD+a IujY67x>R-+%\W^_X*MmHW xDѲ*߆Ljc8 ¤qf<8ˠ7Z)hȖ+rP {@Y%g?Wb~YUN̑$ 洝 ;:ёijmA;l>; >d+8դ&pmQo`[U>G]ǝu 𤡃+_3/PjLs"|!y"Z^>X,K񽒮=YT!&]|]KVMz:ШuYֿ$K g] kWe27w Me9{O͇vvF'9ԚG!"=IZlrA۬^iCZeL*~H+A\*­ڟ[Ⱥ9bi|ϊeMFLA%Z4iF-mSwdMtDŅ.a+zGpr1,ZWcI?\s5 !bSɞZM;ʙ*Xr椤Ps{p]:PN#˧e8~9 GY*U /k&ca|\oɗ0 =7wFi? t06]rUFX-=_] a''5@%;BBE(96L6hۊyhC-j)1zezsEkwA!tJ؍K}LVT]^uBNiUvf %$>JO-N@#;۰>ЅӸ\.smDK-.a}F o0M4yfd)I:o<攡5>t/~d?쭐tѱ|H0L[F&j$ No>~2qu-<7Y'TZ,vK ߖYKo2 0gl;ȇR\h}P; 0L,o]'嚿0Vp{a_y}3m㓻S? Rbx+Yu%BS ~ɅtvGuP[B?:+ť ҋj <ºr GɌNW0|B{8fy$qWf"K;+b2 kRafsgt _?zcZxV!!~ppK/ Mi##-7 4 %u6.ATF;GG}%x䖁G? Hii0pf\,N"~_- 0 'I`C^z:[QrJ'|3H5$Yu6W8Z p.B\D裵I5'9pKq}/m)# xmufT^zIXo/B_Nم:[)v z*|b!%|WY#ClgRteT.otSORqщ 8먌hټ8-6g;|CJ'gK0h޽% UAVAElؕwk,*Ib1$ Nw@ЃjVn$,I'ɚ@*\VPƮu_RQ(}s[bi2(տGWO 쏢EuWq _}P'5M(fݨd^ilNi2J`Os5pA,!ENt#@xGSR0{pX׊ڈ@zi>JVs*)v$Vh\;)N4IU9z@kqʔPjvB&wlGxЉY1 f NaD%'=)j0܎E#BYfDCtL8$W,; ¿اP`QY lwd*\pdk|g7]9 Tj~ynq>3O* ::$A㝟湏RV7L{eAF W{Ek}ǐ*SԠ 3Kymp pB;LDհݹBl]f £7Y]Ou!wg60-p8,F B1lvR[?K`TQѲH  J`]wx*͈J$eH!.Y|LF P}nTq"Q,oAqMǨLCX%COp40R~  WxsA6M!ˀφbMR5EB5JR_ ~W3(>ŮѢFps\AQ!߽cC@a@ÔzrBS&5?&zR'./Єz^ _ v Mqf˚D<$bՊ/?Op-#_DSM'MKJ05ܟiMd%gͫE]6m|U&;)"6)8$GЪG /$9ѹrZ 2ȁ0UTҜF=`-)~JSհGevUm<×>SSC9ԈPihYykSBL2;ž嶴WVcn 9gVn\vO l} ]6ҙX44vX́qQq\eځ'$ovQ]ڭ}QD}0СPI׽J8KI&~HQ] 16_uh]ttC'?D]Yۄ;0W4 _nPu1,wJꢦ||WFFѿۥo/0.Sg/iG~\ ͂mD,Vg[ b'vw@pn2WUP0Y6 .RN;Fv*>Jw~XٴfOMERM@͢p0pĕ5^*!Đ<F LVp?#4.,<'9ބ摿PEgdBKsVq `vC"ҋ o CNB8dgƚVkB)B~2J_׮h؏E{R$\x&EzZvXaKV+Ry>+2vj0G,f>*RnFN`N8R=3c!X%,3 ,SyDx 3 4t(a{!d v #UȦXMx<ݪ9g^ }y8IJ"$HonuB=$~|ep$[M^y  Z#MG֍E2h!9B<a c"jM;W*ǡP^5ZiA;Ըۆ. 岹I]^ ~H_CG JuyM`tִтLq1u0n U# +"m*<uhľjO/jm޹h]>o075f9c 0]RÔ`ƷHO:I|O7ApB^)gDXZkNtD7iT$dI)_AR0L:xO;7~ FgLb^D@f.gssGj5Y!=<88>1mPΗ2CTУKanD58CoûEKU9t2~=֢RM?P"kqc<31wbmŒXH}Ha -CAnbtgP0$,l?Cġ(ۮ*7t/&@k9^3'G&Rl7cy E9A뱆 ߔΑY,!F<@ٶ{y22X qפi=/:P(uEb=zI>VqC sC4fSz<;S}S۝߆xuuɂ.dՓ)dD2)qBL؄'0 cçI(.`w8hـI2#f\6ȝ|[ |mjV=qhHblC|֢]\l.oF;B,< gahQxg%}!?s'PPRK͈Ҫ+h >iUmL@jйzCM7#F?1Zγ%1X]@"2{Y5Ǔӭ: $$0[БDIm(/6 0{ۜ+ʻ)y&mC`E . !G)@uM3 (R9 v҂|U;ۄ50`{  $B0ymJ]TU"6^&a5Hyao+vW~ܚ,шd@*bc6+=sbc{ە^n %F2&v?Y1zI F yg댡r꼚AO>Y~>ILdvf{U(>W9>hݻwR:L\;>)=lj{K/7DeYAü\/f1ɋyQ2gvhюڢC"zWe(Vݻ֭bx&dV ^$f1 g+u222i_L/-c,kJb%Fo> ab雒A3,4(lA`]O1vCJ \v-BQnܾzQP u5aws)fDRf)8(3%I+Dw݂ [Ӡ,gyǪiQsh[V4oY'4o *WKOF‹Mh N KLB_`&5Saٶ aZsyԨs#I3-lhSs):-qLT+!*q슬>J2%vOJ ~a/TCKHM`AYLs/~gRvEi ]M#x~6g⾏ixmLR).HNGrWw ͏jo+[N ԗ,!_|No2pk9|$vXjS_ ZL'/%"R%z7n`*aH>w9f u5E+cqZ3ġf uzhWuY*+}gZ8h-g[97&%{( IbQJ'l&41P>7#\C5Z팞 > t2z n|\ߐew!5skJH:@߁{wMqkҟa AƷw7(r6z} /eeUB>esa4 \ -37Bw.< )uʿH㥢Z( X9~쁿(؀FjLjw`YD G3\0vXkuzD\ͻnS3hi}9"/)٭ I `Y,qnhײ[eJ05*H_YbY}px–QyOjcٲ _f+ZFyjFمO U)fٜ11HJ0Xq%EM&f%&)f;:kh}H&A5QOQa-I! 3هZU+8Z 3{lpG91qbfv)݈=3l~ﯥ97hEPոQ [e ɔbXlʃ.GO9/: C i V-)~׊jH3wt1XY NK%Z5H/X=oneASpTb1_k_( z5Q W]zCN=Qrˇw#w@w&f{%8z7h6ً|fk9aeš]n6<?Ajt1˵ЭL#[ޞ#21!_r>%a83dw@Ϧ ߯I6R6 !W0衺ZpЫOR_[< 6!>bՎ8yjnWU!yEG.r טF Wj ,8|j&hUm[ʛ)9Ji󝠺8 pS\jx!+oM]=tnAwa3)+ZGhAh>(~;Di:]pP*X\ߡyz"cO44Βb)_@ઃ%%E=Zv޾>X9cuk;Pߥ-˹Pʩ:YSIwZy/:EƌgiSv65'K,ɒhw3"3SI~_(~A\dt$v=m\3NaEZ*#NƷ|J ,Bg뉇Pe r}Rmr YR"ZkKt$^ttj$ʺ `) )*3H5`˺]A/eM[|ȳ_gڮ}WIyp*LO๪ u'Ҋ9=Bb YJa bܺ' Cߎqqָ*xdbmEMDQSP?_9Sh j:DZqm0Ai>RݭS9 jהD60>%,kC4~ͺ*;2N\x"_׈ȹD1ԠGL2?@U 9Yi bWtL.pTC|"7cUZ4c/+5F 4/뿱zpUs87)!- 3Fgw7YK&\Fz=x@lT;U[*? 2@b1Rnk ð"(DiPmŤ0e<x vj1U}%^CB'YSD^5a Jkr咏Ϲ<%.&R_lMb(GFj#t/.E](eIukbHus[6Oa)%I `5@R(7^Y';/Da=`Qf c~x)͎B\.xعadFC6&WEXqxEti-5s̫=lewW1$pnYI !X*ն^GY ǩ![Y`df#;k'D(ihC_A2Ks:xzY[itK.UנlF2C{j6]j2 _xYXpΐGG{[=N6U6@S7:R#l˸IDF8E-FP# \NxpNU/ %FPxnI7H aۧrxk>k'9Muпx5!5g_-e1i;ˌ(zĊCjDf0bI : !<~1u-6WQ_qTB'3ST1lPꯎ0H"W?kg.Q;},e݇XJ$+hhaWvs `+֦A.J RRO#u'XsHsS rLX xڐͱ v~ pì_{61@~}jUMTg/<&@+B}rXtE:Q*cF߯wMRUS%eEvDwWBCUE dbUIr2/^,P<(B .ix$vw9[>&Jv~=4;EC i-2-ͥ ؐiȵi,#woٰrz=ɜKNYra;8`t=Nlj 4O?Q;5-zeUWڎ4ypGZfw/7v%s$+Ƈ(*7(ߔwGM7G:I\joHn ض 3ZJDMVi_\L J^Nb!NcZ˵X!wbҍ6Mkiጚ.Iߎi{TM}0ͯ1,2/n\ mVI{1CS.#GVsvp`&R 76ʦWYD?̟#?H}4\wmv,6+vgCUZ N<{ii}\8sUUTVyM4|̿ T`#dd3 U{lN t"dPݫfi*֗TSN).dorWM ͙Vq -Drmg8ʅy(﯌[N Ej0Gj4nAF>Ѝx|`6R]SNbfo'l4?s WHwҝ:;IP}|@h5yVg[[FG{cJZյ|'D`۩POWOfyJMQ0"9kj:@_eд$T8S:-sfsKCxiSW@s23!8{ʉ+ԁqҫ^w0KͿ+a.{A=ˮdfeMm%jiVYqa84{nQ&Xj  ]M"!/ƪDxd<6gt{a #q0/#$G;Js9q0EvQDf~<;HI5,Pyլ՜E隤1%>*Xhto&󛟹nF)Z 3nkwͪ&IT¡2[]&Wڿ1 ~ӢaSzYҊ'2G%WT|mU̐1;Tzxl;̉˥A˛b!s{[H]Q CQ)& k֟cH=OmԾ@--sܞy :QH `\ CVRT;ʒ۽8e;@ޒEtvg^qodH}>M.U4@ʶHtÉͱeqo>'h4Ek`,274PAcOieU U˸@&!9J tOǚ2г!*2h;8fzZx ߞV4`NX7$s\WmeIb{ c1.mU*_[7t_zk S; t< A+xrJ'љf$/DKgME,dWmWtܕ$B;Yz 2g_< LD8sCUuU<R;?\qjfSk&ı&L+Z pQ=I&)J.=6{[g7"&+qa9Px-%F JW]bOu6C,VvvH}+-).._?{U*g[ˣW\l, J :b-ShA3fM'G\2:+ؗe89tzvjd#NG™1ځC v :}$@Kb 7@{RU']^20j^#ѭ튔Λ`T/h)r N|dY0bi2ǻxJ9BGwYgg}\9<\O@&dxjySBeY:]`Inv%xL9n 2yӖJɝee;9?WE2Q+u  Y)FM~ OK5tݮ~upl:@;cq񑄬Tiq}Te-&٫UB՟ #Z.v{US- )#__MN VE=͹W;e@$†#VOWG)]Q7K,Y+~=8}B6u͟m/R>)͂ ujX`Z8)-@kѫaBJ+@ZriKҐдlB() r!6Au^Qc~atJ1, ,W$s$m^1bDio =kfɔ;4`~367wc:&7<`<)bEqj[f@W"J'|2 ›*ŮgReAu:cAOVQ 9 wpCȜBtXwِw& d0r`Yژ7Fp<'ۭ:C6 %jrzl,0z|v @Mt o>gYl^/oߵCHp™[# >x-G-qryf,qOfUy3h &A897ъжzwla\ )Wnkw\.6"IJ-UGZjQ (5oxt @'B S/ I:{{R~?*) g4E\vzuo"n]v6S+iKToSE|;"GHidfUP݇wƸ<n$&yI4K8ɲ\.Wƍ+WDgi:O9< J<BTOh={S.#a;GeWo;ި>L y]L?.zO쟊h3 r ),^kj%0Q1:܏D黫e+Olu~{P!ԂT$ޕj}MҰ8WB80HzP W :HhD l0}pF^3X`sYe+x"Qуb#o;<7 3,j&1 b/k]̜l-ƒU㔜kiɭ~=/%F=듚Yr cC"UYRy@yq!]{3݅m8u~Z8'g\.o㱡>MyJ|-@.E_0s\&200^/"EJ%eD1NH^O0;. ;r0ANk'lMU(G͘ja,C0& OՋ!:4CRgxT#u4i%JS QP9؍#a#ŔK`]Aa,n)QB N8K FȪBv? LFQӴg<}*\%v9_`U;?wK*s3W̪]mc=y6G?~la8B͏TIܔ^:Hq4NOwy:,w0vzʾi%VG Q.(-a?"Ҵ=jN1/oEo} dm&X1^|.WDo*6UE,EK (߁rTפxFbT6?>JI!Ԯr~%ꐫH:+p f>H77\~ȇ [E;N2Z7eE`[ۘWlyvIT_-kU 9k?g,ꨥE)+&F:C!iڐ7ToLC#$nS>zl]]^jL/NrW^LU^C}M LL (E&Qd-O,m/+ɽ;1}ӈIJkaKXT#(d?djHrDKWZԐՉ %C&hrR(KO(:i ݦ\_^r::%޳DeUʙdHDL.0/eQ)`Y-{>|mF2@rᨖQs4JlK;Ff`;.λ-%oo\_UlܽpZF1\;!a?3܀6c7Q۱\uZɯfЍ>+Z(odoC*UZsH X2:I8"fU'-oyG%*V1K:? Y'LX:$|$b7ӏ2sunmGF7Vq ̩%Ip0CYdZL0Ӄ"u;.7dRRW %H y(;NPݪmШL4as'1˟-oCTWRxYw"Ɔ^΢(} M┧'O.F5jQM^j-j#{ӑZ;S{BޛD4mM?i $~g,+dfFTN'dWA&\5-K/s`ݚbNjA8vӶ#z~_:;`xw_ qm>'T;KALB,(ڴi.@)=>?Lh3<35P]'WӪ5UvN!TnG-{ •:ïDܝ(ffU/ӟXh>} YLL2vASKo@ƱQrl\ &n޽FAԄʣ@Iޟ?͑,>H1nBd:mG>pgZ+i7PWؗK28f.u!F[T24C)fb097oV?m'o6Vg Iô'G \c" c;6#,pEQ $Z>w4.!'rSwzs=1R82bE+ cCXkd_.)c[<ͶX^szZE O6kB " UUs[rZM"LvKyȟ( e]ZLPP$&B1/Vf q7_!i|QNFryjSȥ@NQ4ҊMCyWh#4\Ɯv[OC뿻wfF^Ck u(;HM.ߚB" lW!zb}+xS7Lll*T,m7_w\FLЫ!(SqH[8·㳜K;l]љ*;`.DK:EYRpKD Zq -{Ԭb2;'V¡|~# +YX؎Ig{[3[˽P _"Z,PbBq77u >H6ygxh&7f3bjzNӭv_w?Rxw7?nm$?0h(pSn:yf@VL3Wj/$; Skr,RV)ab{D.P]x#d^rzf$vDSC7`c{{HV*d,;C_UbfbzJJN a!b|J*z:g| O-eWtZ=@/hǐRVC1wV}2 r#d&[w}i}Mjθ/j"9gjoj:?BK|5MEkq9c(KeSGyk 50\L^a$O>Ee鬒ne EIwR1dVxŕFZu$٥B>ַ1x)'p5^(dOrv,2ya],MtayTF) im#KJsѧ F3^d} WVUO/wY &7;_>ۏ`sCntq2.޶ s/ȝ'u%h|5A{I3glظpb KO܇)-yvFw[ P(H0 \VdAר;}x8ӥs넴.`F͂g .[<;`E}my2E,w JJ4H6;qqw퇦 9ۢ[2[j),-128()v5:i;mM](dZ ٷ~~3E!.pLp֙)mLU+c NUTJQySz CLCf972 ze4o(}Y(͘S^oOU1%j!8X_G+\7IT,#`ƭ)n8ْt~EY],9 蚤K},9K^x߆@W]s9̋5zw$;k7dJ% )Iȶx jݠJq++ qs=nqg|= Y`3A+<(#CdW(4uVHFnΎLTE3b%)Q2- f]ZH?5Zc 5hQ6ȸ#e qz@ncSCB[%\X$ aő3hئ~VpV .BliJ̑£|8oxĘ>о.*KyCNTܶ[t| AF1?VHX{ Z褜c3T"9&by{t5&O0v(t}83I^SB\|zLEo:=/nM4]{ŲX|lHP/P|y|@+[цE~_a}TډXns!Xډu^䂚NX BN@tkgPRSSDN8-9pBsӢd+ګ6siŵ= h~rV΢{xnfTd7HJ2|>5S{N./L9TjPofl0=e^種 r֬y=<'7 p}g}z4<tDAz Hj ,&Úoy FR'2 8h1[ Yt!ILI}IKOcId-:{&XHNٌb=tl9-@#Iƍo.3D3Ig`lsaW\f뵸m~/y|ˇ^M{3[bت/57S.rkՐheЂ}AN5s9k>:eH!o/;|w,wxrx8r!('zүYLXYy9 =.Avu\œ|F%kId٥L} C3KhWisUdM~!畫YAf;l֍m|oHeOp8PY{τK Q@0Ԙ-SCV: n(Mrn}kX[" `E)i 7QL7x57 T?vNAaNp"qn  rX H[򐴱JNT!{:h]B~ #*chՇ5"F{wK R d]Uf%$OcPH悔GyיR׌PK%wEu$-Ӈ>QcHNrX@aɚѬG _U#~įmӳt ws5c*be|5U՝YP`H+t&Uc;CKpiԌ܇0Ps ?a$?rf!z/= Ro,c=gM Yk"ғ[vSq avx -`jͣgaw=OȦϨ47+N2F"*`-gkz'uf_8 ^dQ=W-d[Bji'1#ni.2oBů5s륓TG0^B@]NzE^h-) 4[bN '%؎٧JGȲ4`P QVX4rv/T㙝ՂH1Z:ك9{gmԢr~-!-g?ȝ8ݞKARg~ 뵒~sĿ@<Ȧ] 1f 1%)ON^&!Q 'D:2,#]w sV&v+Rlr A(eĘ@Kص0Sa(\L G"|]J (WjB |*O_ ##_R@> `2$wf^T{?2Y`rtL~"!Xw/B"c1E] DFوƤlJtٖGm!* i@ORL"懊,nʜJ'ut[S͋G\z۴ gT{ ៞qpaOK [(ij2ρN>1C'U3[-=BR؝)t7]bi2Z9vy޲T>Ճ` ¸1`ٜt l(ozmƕ0u2M@WNsʋvo)|ת_! vvl$b' "Tf햴 dN?ώԱ@[i/!놚 VfԀg Jk&.A%{U)n:+ ׎F2!Y`NPټ bb45ZksPkyE/Em'Yl= V+T嘹MѵٙW*U~M,s\}<ܖ"^𷷨0{9iڪ:ȒR0b HkdDA0|m}R{7 KS yݬF^GC.#}xZ.<#q?rDڄ ͡5|m2saψ^o:>5醇Ӕ Q[zstXMqσv%9UB' baE-| 6xoT33 gb^{;+;a>Dc=׼UE 8ߖJJ)*0`smUF``9_'3<>V Sq]VSkdb. H<}:ٸZdmF-t*x {{$2Yi1|KcJ*>v1٠ђkAyh P!Ea+V4,|5e"P&!m2@z%HA%斍eӾSku,4c]/D]L 2\?6%R 8 i224$g\ &WHfb~&k|og9)ѻ0Ƞ637?IF\+/b:l`$~˻26G͂,R=wq|IB"r 2U>SUO P٣=D+F0[ M~ 6,[t:UH8Ήw~:FV;#ĉEpDßw@ SΚؘWfox5R@4ijfHppmD qK+FKNhjb+jĀb/ԝ5M؃20MZV~ֿ$.Mw50鵰$yg&W "}۴O)Lu.%֚pog?eUuCT3V[;)T3[)]MWng;mJ-2 Q~谡<,C~Gue fFLvJBSI;7sWF#vx䙢?xl@gdD|+_@i< >lZ$!-i*VwlhN؍ϴX* #E.41~ K?R 2 Յ(IS5BV̷RƵxm5/!"q '2#`iqR:khw `Էʦ M𐴶ӏcؑ@ڐ+2vܡ}CޗݬJŚRc9Ҵ-3 sFA lC6MjC}Uxz aw*@_. Z5BA!/W_xK ~MVwg0 zB(fM3$f9\x/DgBQ`h88/G ;;Aŀ]бI 2<; e5Je=̿bE(mfh&uj+Uj۲" Z_VGsx>5rqtΗS)L#{Q5cTPE6n`B4 ú |y5)*_o<Yw2"rKu"|caʽs3BvO߻rUuyV E`K;I7Rxqv_`)0`ɀ4RȨՍZsό42A[93P#HpLگ<PY_ +qw"nH (?͸]hH)r?_HnE@@J n/Z"LŽzq`F$b&3Ŝ.^,ܳ(O$AQiW(rP I 1>>D x:+;7gqR,ۀ"Z`]RA-uT:JeGiT Po:ZOnxV$EW>2ﰾY6#^6䣗\!`Ƥ5y4Fz-Q\Z/N$|yf>DF՚j bboH q h_HĢCJty{DV)cta(> 8:C=;BAhHCBh_ZQǨX2Owkk'DGD~ ZfZ}P6xz_K )v3.~3d9 %!售J,1@!#jkM9?)h*"7?v,?k(Ƙ5]P(1N$9 G $ )߷>&'I,"mtDZ4_!+u|3:Tc1jGɰTfn?o qMeѣ 9.^~ǕEh6oI_HZ|G'HC_{,`d1iԃŮ|(~tBM5%뻎7 )F XA.F:E];fL_wbZÁo,˹2o22| E(l~;qx5j@o@z~ZUBOaFm@:H{5)6< _Nll!9qy Uf=c~R8 Ohtn!G"m QqYW4B[iMw+0f \hdcsrõ5,D1E$:AׄA><(cp/VI+3C>"~ 7춁a3WU#c)6c67 <&nApcw<*+Hx*p?@D:vD s.]t+bzB[PD7T#GBFx(B"e I^mMϱ>hnR:3vJZ6K|?{-P0BC~i*KhgT 9%Z++MڸW?G|`;ֲ%)> * [qs?/)Y<Ӕ&ٿcK߭\] : :Aro:C[-pK fbN\?N1F1g΀)V]}altc[ufhX?;SCpkrobY I#ׂc1rFY+IEGVۿG]bZƦPFy%9r,.hQs>,a|L#0= ٪i]xepC38:mnnWΌc"T%Bm٧@b=zhq[zYA?GDw+Ps-V?X%?xv-foF,hy[ds#ݟK`*dgT@I$ W%եW Rϲ]8A/+<~axL3 tKtG/ɫ{|۝8 \ntdځU#c2j#e@=F9z{}S&Y۹shΪ`ӥŪi>5UUi8 0>yά&?no(5WDeeZڧ:(*,ek t7 }71낊5IuǾj閧]_gO0%zv <_!K5卾9ޢZxގkuryĔ(JUtP,7GTzj14l<3LUږ~A8'q}ZQM";+Z{ϐ&sqI9M8i 2/ VAw,+36EEyIM.jŐ-c,ki(hBm侲R /fݺϚWF#^OCdlHU^ZիNF0xHL`Sب\82h&s݋j4({ՠǤzjѽTuߛWOݒ 1]{3+rh90$CEQLx6i9Y3hiT5+l ,΀Vhr~lv~]J6D ґEYUqfmxNa`/2D*(Yz> vȜ\nkYXa2jT-Z%,+ &H${Vʟ Aos \X0VBL lt ή.]2fG6W,%09 A4l2K8RAY!cGuK@)TJ؛LU9+*?_Qrr0}t$Y'|N[!C&^6n*Yb2=Z+]H.egl "d"8;ؒ~x .LO %3d+Y&,Gՙt.{pOt &1.DAJM s8rR#u%Ď4љ@yCջ˘%i]fȷʈ%969^Y+z飜g*۫lzjXgƍ6# Q44\ }/kY쟷aW)P[F{ KR7b!^?3<6n]mev&(go> `MAACcqYImnw#t,'DFgDd{bL(㿻:F4C=ceq\ DW#_n` gg` 4EwUv˅AfW$6q'8yDz#%k3:ozY& `DhMtp#IuPWgԳg{?R+p>w"6BQ*D-$j~XN\/i$z۔Au`2TdeT}Нmo~ETQ:p}ѻ\ORRf\  ⥱QP<"$k-瓏;00zY{5KՎ;? 8hMKB݇J1&;'mٮF.'U .HLg2x\rC /dtqS -̭ xb))E T(;i`C"ف6ff/Hy ň0=26>(8 +wf{&j L{-ei:.(/&,᪣pwW-tk(ȑT۹hAkr{/]&Baۃ%[ sIs/e{fYB-Hi5~l[O8;a!tICV~X[Տ=3#⅋f~|7Ś<HVPNtl"zf&2$l0x"Վ@&e[~L,7V!>R ԛ:53ԭDaiXSҪp!狁sax鈭Z+|O4ha%jL̛*_XRp'5(9z>؏ zB379\p3RĥNW7(tf *y$ &wH/9إͺ↓.6`hd&am@RWYaUzcIP0Y[i.DkI1ldmxPcRRٌۙzBn l6ǺݹqcotD39VdƵ=^Z+d܉$`{hgHJͽ)ORAbFw?αiMavu1ZW _]gɪbb+Q]+4B[d3EqD{)#C~xwH]# v #k{{2Wm IfK'nd472*':8`md4W7Fv1q[>`|#W:&MmT niB _m腰i8?Ls1MuMS|Jy |Fq.3pBRy f3=0MX5b@l26ۧE}4mgh2t~j(d(b5=Q4N/ZM2/v|&Injۄ`IƗ(;-=TjN}|[]P8DYE:oQZI: SNQZ'ROGUݪ)_a(7C YbwKU271_kO\UL;ؿev(8~$IJP&1 ="RGʟ4`_9DYuR35 \|ㅂPmM{@%ˤ77 d|W$)БAEʽN\/Hk5 CKRҟ?*Mr,lZf0f,a%{B{V R%O^{)O8 =(EoeQkh)'9 Yg|o2b=lbVV8FսI|BKԾaV֨,0=z,Êϙ15N_jJ\M<\Ubhл԰ER}/?ulaS%VcHXJ,bԩje|>o DkDfq1\$Qm*/.7(c1ilkNFQ={M Չ%IZFa1T6ȅ h |A R불 ܥPa~r`%5QjtfWxLWzP73' zӯ*M gŷ6M/a?$yX {P|p;9 i +GLYWEǎ>/˲ MMňrK15o([RVI}6C9#(59)O5^ B0N =4 ѥ];X["X"&k}1*"|4.CyVd6]3#|(>֊,"jת7F~4|,\z8?IL2A#Ԙw3|ȌiƱl\۵% 7>oV8!o* :_(_w]D`8?WQɘٻ6|31 nlrސ8KzE(U&B0=?0BѤUpGgqj4wљY3V`f3V%d^l=LSz;dk_h?e5wjBHٯy ps8rbUp]*C5nџHjQܠ-&6RK6#/=[E4]UzptJ< Nҍ(l4eNQk φˈURG'е}b<'dq Ou&6mgI=5zB겊p ΕlTdO%/dR$8 @@(̸>:MXcLfua,~N\Jҧ/PcT尤 ZM튐Zͦ jc85g޹k^}; TBV,C>t#GFRKH,i pH^gh!1 V6Ђr3V?5n9*pzXp^: a$|U~!EAjpS鑔B!Y! "EnI ,Q&ǏַmokkJZMeSry0qEv$"AU=EfaG=o!K6fMI]n+m@|~*!vY0M hgdW`Rc'm| /_"<ݷ}udY7Dm9HfSsi2K؊oURϭBsl-hLtx:=qM2uZ86&u(+]K!j0Ju^3(gC#Di~26-CI4 Idx2}7Q& F A]ظ1,c91@ksa/ipn8Q^0aiEʕ>өL"+QT0 F+SHDf_B=hA ;/LY`0(q s;o&eCde=9 ȃ'u6`6JטcJ;T*?>E hH{X`6p7QnY1 yXyK CDݜ9 Չ{>K :y^*:Zm082#㶌TsLuGˈus*- #1Fc5rsSԶ[р.+(6p^;j9;+S|bjk&|_?BS׶uaA>6Ewc"y&mE)5Hi"+${>;o<>/J w< U&y6xm(לCrU#zugG݁ۥ|v%f4bNaAŠ&K ~)ף{xm Wu$F+WmIɞR۸rĪtwJB{W0WuȳF) i l7ͨ> h 3D3z- @,;6F/&)H:B!Cx |ō#oe5 E [YrXƂOɥm7h]OYP-VBDw_#uEQ97='tGt 2lw=z j>9ppW.]aZќc$5|.'ORinm oAY?00%w7KL`m6f0oVe`[0 2s+vfmriVdkMT 35xͲrbɦKy ɬA|TE h:g^oSI1mz̦&kWY?{&W;EŠsyVDʴ1|85kWV,GT .tϷscUKd`^{4X>T@I~^>@96qrt \3JdYKC6R_L=5XQ eyoϫ6nݫ>'+$F:5Cay=mNipxYT ]FZd7X5/r{a}XU:O.8+JPZ1='~k=ːɵu55\7_]z:&N {(R⠏.&  :Xj<\ʡ e.AoP"ѯ Bo~AV2Dꖭ'F:uHA厍[=3-OhobbC2OVXOP{H]tI*Tk`u9c&h')a6bQ!mJW4~ZѲ&t~˱+EU"Ɉ AW57k08ԩ)q"~&! zKfRiU ơކSW'l4lఈr:==TWu+=͑LWQ eoߍQ,(YwE s4뺭sqa.έ=Pzb)E[OYKQhb0? R_@$"N;XXWx4 {?D3FO8d|LW w9|=>5/GV-fv4W!K6HFT~AG0fdSmE3=M5HL),ݕodncw-l7PC/+ibOJ"Q=hi 8cI#që9bI澕n*ҁz{1t;%!50\H"{|K t >溨+|7Ys;Ȑ_d, <( v`S^bٴm̩m5D,|hd~Go滦OU̠OI[ bY7pff֯KWkWH 'WQi=(N\FHٲSu֠`BZVpdpO a\.V0%oѮ&xaZ ,`*4 P)&cL#уrruO:Wdi;϶"fq*KҸւ5p Se sԼb-2>Ke}>cUZc/,<+dX Q*&|F}@(ǩB ,b>N(T~I_6 eI)xphO~}we6[ Rɜ*ce /O?dnt_C\HFqE IYnh(UYby.jDV`qO_fL5|ٙ!u.y7ۛ-Ʉ=q#p|`>ʙ? b h#Iui]}J)ph/v١I<WXv7}7ϥuC>gtoUXp2h HC/ø@r<$.2!%Feh76Cp:@#0&mϰ9fr%W鿪Ǩ q9eκ^ T0L6M&L-ߪ=͔V{,Mf mP[vTN&La 8 1Z62aCȠ|:ކ;]wێeEDd oܮCgi<5nm7?u_K] |_RKŬ~hkRosp"*H? O˃ <ƷO fM{ecޘ; ,f޺W6}L@)n  xVU/΃qR{eW6`/ၖBJ@jxY!?R Y(6pQŖs"KBdgD%m©HߥB[viDbٌ}. ,A)0|K(>Xwg|8I|4?%wMR{$M$+ {HAy 賽Uc:xY5"¡CIP"Gk8ڋHX2}9E It9tIHD/?G#0O Oo dObWԀO0]^Yk"9gFC!D:?נ iazs?ywL/ lv){Ն )_B+8h sR i 7-eHVvcMО /JK .#JTSw u~yuC$A$Phcq ]dD&^+ȁdq&2$[}++xݳ9~s}]~~ab#7u0儵gѰsgum/"p6@4#Ype7^HqH<1:^_)<ݠ|!N#׶mDWq*4N'bϋrH ^򏡺q m ˟w|ž^7˿b'&Pʳk-P;/VS 46fY,PFF9z}탙Z0ڠ hG0{DP' _JTk0^I;V6o]UnΑޓ=S*1]5"}^D3qI㓥+xD)njd%801B @F$#\;VuêֺCπ^cS.r[d_}碵#OIax+*V <"4D> )(2fMj?k0t%"y/&(զئUDzqvŪ]Ш8xrarѤ7ǨGP[;T= ns8(2ESn'mOSy$m̎OҰnD8 4L!&NkE%P1sؕZ# 6/VDwEP -WIK!ާ6RZ;[wLe{N1y?zjͮ~J!$|8F}R *.WriW2bқ:$el|9` 4jeGC" g7<@H1g%˙X˭]N3ണ\ծ,Ue>ܺUݔ7l" ^aÓEUG?p_IWi/`fՒbzLJ\wԼi-&1p>aqܸ$a6ɯ$_٥u_P ,@s`13d]T&3L0.HL:8e%Xƙ֜TL 4;31Z &b\{T!b5}4;=?̍n>1 D*[ 4e}|G&49-rF`Y: Co8|wy߇j旮nP$h~Yz"OaĊd|_o+A4VŰ겊ai߄.U GM}Cź7V]hV JcL @Y!{$ S > b9JɭEV )b+7cǑ@R>me|w1Ry1B\2? C{d:!8Cԡ^Fܑ@r@-zh8}:L$W΍BJI nTYQ >n95~#~#?o9{ٜYC *9Cx:xx̊w^ww3Inx~iBmyuQ17N(b\28  ?l·5j[2^gF>t4lJ>|P~iL?qgLv{{#3zw˒٭jv( {+ڶj˃7$\M${Rh fiVU*hI,)W(ogv0/uit7nZ_,='5!Ucݦ7yԮml%`Rٓ{RcȖ/?{F9*#flËN&93ۼdRS jg,ʽ(d8ޮwF5 FfG#vN0E8g(\];\Cʆcc4~tδe,DZSrwʯ(~!:gj1becz.ߨ`'xT!bPҭj]( EӶL,8QJ(CHm`†Oω=Ml5OrC̣z龾R~wOɓGvEOyaC(#h8<ٽxЯ WƱmNz=-}D"7@3M7.9IVqu =ȞwOd,_!nۡQڜiV!G,ڪ@wHhlkaǧƚ0zVsx*IB_z?<_3#W)gvD%}?(/R[d].3j8U3Ik!Ɯ-%c= 7|*/dAIAuQ7w/Wл.bks̀H=u&cP lع*NES ԗkK!|0P F!w)1LVM'X6M (Ys٦ߑG?%_?:c:-`H GX>|z1 9IWafgB`˱l)YL`j6L6]cJH IiT &s\$ד͂FDqqa 1# ĵjaW񃪐uي W5LFL;_4`?֕:/Q0WǼ;="ÊxwǀŨ;i7++d;k6Cn˷≍ Z{.*2w~fj!i%`4D;ސhٿnv:l2&嘥3!!W>= p'0p선&҇ITR:_ޱbe;8L1In|)Y@\[h-v_-OH] xn؍@l&slPgj!=2\Th~n YӊeFzSaZ~V0;md5ŁFHf BV\:j̹Y0#zBٜ](})Itwr~–D|b?V&rE[K Z 7n3 ۓ\" L$ TYus,rr"wKX0 >8s 4.bS  Z樠*չRKVU2 CBڢJ.Ǥa4bR3 _${?)fcCnb\'_(yC(ʼn#weS0u/B4lQ\P?6Ya>o}G* x%$X-*z>˃k'yWesc>+pݐ,AZ$; #O6z-Mf2Ȏz̠^c ?9f}ȅrTT4 lNY벸/l_*̥>߿kxT=+M/oZu1G4H7}OT.[Fh,bPS!OR3[~~HxO2ŐJ,mƎiۃhO,yvN Vh^PX9 5+4#&~L-0Xh7Xr:* J=}"N fyX5B|IfR^wx":9O[A=(ZThLHJ] 7*噜buE찇faZ*ͅyYe6x^|ŞPm\~ yg6KwXQ~'4Qw@rrObUߎ\30bU-w֓8 |-R  ژ? r1u&Eg0wȁmE4Ҙs6)_{q>ETLdr+XSawG0/O FlZB"GP ]{䃥 MhA7Yb4J]Wk7\ B|O׹EiŪlX)\}SduH2NrQ~ys`HpO:k}:>Tŏ9s,,lik3XIx}JJۚ-09F:o3@=E/"-di]˵Y Gu%7Eڱ+!s.ۧߦ[ B>ņ^R_Q1ORI%@<).da'K |WfB8t* %G`K64Y 5dIFτ,ҡʋHCwՌf[+)Dz\ []8EU"YklJ^~x7Ù0G:b͚'eH=َ#-#ZWy.c(̴WFL9)X,PNZ競k V%CۮQ'䗄<͌a"[]^ a ',NɄlTUo,g\ i~s`Fߧ{—b؂^65wW1; l ӂMtڝzŬQ ;_ d3Lfcoid_iTjuTL\м4::il7 RRQTb&8r/%NJmiGRBeЙz!q@ƛ|dzBFYDWE#FCjcsVM&>Uw~w)QgVa#~&D}/#zE2̭ ȴ͘YSܺ+l`o⷗hNV`9ϾBFߋRUq?Zsc !V~\"-) PjX>cy]E3h]<n/x6}bbiv+A ]̭Fklš,Cs9$OucXsu[b.;sw:dupq;T6Sb63U KLlxyxiҋ3ЂeNP|e](V*m*M bZ5 Hj,88(Y 9$n}4I{x% 4HY o(~RF+ȱڊ+DJcRb1  G"kwKQj՘Q?P6l!2A# fGs]ϯ;-[g\;ةEƂ :> zr^fWVkhEж*sTaDzFܚ 8Hî$aʟN le%\[ryqJۼ8 ?=IHt.6m $n!NmXZw~ R? .;Ÿ;G&q6|J5'!J;l8ƹrb |/ޤNmI5 o[t˝5=g%B.CM^:΀_o"yE( +0Ki}O'kZ:D|P999SyY@2T; xdPC:P*Fj Ǝ`*c1f8Y'+{Ny] m[n37xLN:7W7w.cKfi@?G hzggvSn*IgQT=(>NfҍkdܹE>RE_řb!scT#Kd>]/ygD̸Lɫ&XC~=,OUV(^ʳOer ^nmS `GGPw=v|QdǍ@m;6:mE8| Qm97</a7FrPbI7l ^Sq^AWC߯{ѷL珅>ֵ#5ġ/C+<@j7C%K]X@^!pF5&`pVG!4mƒC7?M(`*xq{\UR\PmK[17/ɓ^ s?VVqϵv/(ŃU7*kRĹ/!jר0涶hC`x|Aw rYT]3fp tٮTQz! /}%v3U4w6{U ^1ES'jMA '(xݢ *5;w`c IH캧[4Oy%ߒqkh83d0 )G416fUݫT̂Ū}Rv$j\$(Vx NPF0] LGۿ}#) \_7' zo朅gr_DR?j,yrm5:mB9 漷uCH:>ޥ@'s: P\WS'}7MKKTzz6aAud<o1sJ?'xmMQKI{Ύ;FZ ]ܒXLz. "m$2vPɾ ʳj4U|s(w'1Ӈ{ԳdkS R6sk|-28XӢZų&UEYRT+6@Sm&&K{|@_R/c݅o4bg Tn6 M=O|AsH'V>*M0D1i]?L}y7eAsyḣqiRؖNo$'|?HuNz VGQYa~e}^kɮkxor(CGc|}Viݧ%d|͝ Z۽8\}.homzhBJOfў1"T<-y02f= X}mQ !W<_d{|HDv4(!y492vWI$k84d#4;Ϟ \|-WAȑHКרV+d_Dj,3ӠZ?MF(㩎4å| BY(P- /xqo/dE2~ΨE[Mz7sꚕ;🄲ɼib` >G:(BېsnټJzL ?Я<[ny];[ Y2tbCńˑpEc?-?d杖jlGo"EN''M<@`EcnH+@7q~V$,qv%}ӣlȨf=BK$milX_zĆE/issCz^h%yڌ&]e\ I%N646XTa &;C'&$_K2S- ޭ Ӱ?  /1ذyEg!+f6Zb3.>sT}3Bb=;^$k2Tsͥ"Y<V3FOzre&,4߰Rc"?, Él>tW^eǷ 47Ӆ2Bv*]pD/斏afBJE _OO!p@BH On]vhȣgl#+9̶5m;O#"]pOHG8F, $ctܠ.FmXb3Oeq8?R6oQZ}U4]Y/N맜O L\f;GR퐭b&Hbh砨 ⩡fBqn4&iPAp65HUof50fI0HN=^URףy*3ge!p/ɖXx 9~ i|HQT]S:2|J5 |iKw/bCJAWѿ!:i,W)XYxT=zH=eF$zytʢhW1) L}phU'r'yvܾh1Q{` !".q +u̜^LUYjē7â'b`03ld]$jrؿSUPD~ҞkT2Ƽ`Tg)&B+ΝfZDUw#kľ7`Bӆ% nǗzk>IEe+=?l?_譮X;iLValŦU~~RZ\TUX[č1ĊRAId~bl-w9^bYؿ@AQ3mZwn4*8 ]/gdB`̉FhB!0T4,IrOGS i?R}/PϷ&#H>./i-jIVml;ƮU}87U WFtG?cgFLJ#}SХ5LRPqpRS>""lR$HfYSRa@m^ER@.摬K(I4Tqbi^ٙl/КhkLd oU~v/WR*e j/tDcZ!K;s.4fJ#0^~+`CM#tG&@oB4 MO**3Oŭ%ocFWuc~3M܋uu?Z7~J\ӇvLH, ֯2;vDX%]%VSeAtj֛|GU}N;C& ZOzXPΏ@$9l]P322Qki!x5ϗ.myge8;8^:koS0ȿ$bDžGT2a(I0ˤYr M.qˀ? _y5A8{k.xuaÕcݹk7 }'i/~4r=O,1#_1e&ӥs\K=?QS@c]Eos|M_ /:%j w/T{6T "\T?D B?!,^!6Wfe| xe;NBSyqܐ{pm${&h eu ǝ<ɞ:٭|Կuqa0$5̓3)+OЏŵ@XQl5\C8< Շ(F<1PcG;7@6/e"kujP(:` |7+|=ѵc,i m0o=9Lp& 3=.`,x1誼3r2.<7-#؁QUU[+;3qJS{x2+ϟ#ւ,OBqq\,s^/*7\-ɐwL% X}WpzB^*0kv'o:Uŏ  v@-H]p}!+4ՉD\!_e+(וKMsFjhi *ke0 ̠$OLN`>R;%+5)Mvo敇St\:Lz` lIE9q`|faU[Q SY+kJ~=s|V79T% P[\uX-%%SIE1&!~و#m̿rq,EGiޖ( ~h($?=h!_N c:CS7!t2&?S?uUa_|ЋNdGaal8_TUKKtsw+ +Y7R.w x .KtK ;on'%b(gYޝMrO y_(9> f0SN?v]wfN̔Y0<$uf8l'Fg2 LӦu]Znnc10tQ*JNo,'T%cVT̋׵Z# ;bV!PMw'(01p13z:T>Ϋ`m s,4?ě{SP`OUЇ5O兗Zp6˄{[ ׻.[l=b,S\?1 ?wLmԲ~ r @y m) Oܽ ]E~"T Ԍ&\ڝG6%4LobheMQ%N?}xg±$~uUq//7#fC[%Ef-{2?`H+QTdV/FRLoјi Su?MOe4zcMf utݶbYjt=DA=wc8^fm;F`5$m(bB̿gKi'fzVރ`O^(;gGeqc3TP!L=\ j`els|o)*jJf*m)l g\PbJVz !?Fڿi΄L.U^x ^.ko\T0k쿲Ko$v1W -˼s+!E -GAB0h,غs9q5_87q%媇($ߌL8ogD"e`)m@񞄋 N*^aY_DɿK*ܛ/ tTQء P$NYFN5}ޜjmnt|?!]C,q|R;MhrNOSFp0$"&1ܹ C=FodU@MPgR͒Ӹzm6ǵFy^`ǟ5@y 0ճlkIe29 UbH~6[6`Z|Uv#XkO5lJ9j; V,{2Zp@2L,3L~IY?̳ o/̴'ca7RO7\ v{o~/lHM> bPw-ډPt|l.sӵg>e h7 uCOd Y_/Ü)O}mS@fiJZP \ Jt`N2@[Am/Jdc 4OƘZOg,Cg"/qJ6}#c=51\K'nA, oR4/=6k:qA^+1QE_21ڽ1<&vIISoDRjDكcץr#.8Y,wNPf F("(&2S5؅ǰw :F mVA%K{b$k~4H/ۇ4He:I,[㊤s~`*6,wΓWvFC%]2@2ZÍnySeJ4L.6z[XϮgRtgT.? V vP1sbMGLr_Yfc!2X6ZKaWʀꜗߝ-y{mܜWJh!:}JAfZdϒ&#&$:N GOHdvgc "u5CSUaBRIhp{|l+6l cEV6wˆ/mJV\;;߅$VOυ㒭P|R .Z%Mg*G?(qT);}LM @+O1٘9xo ~WpKrp+M? (D>>0r"UᖓP,C _ $n!]w`Hg8!R-Aa-,0 .5jwkM1ə+$Mc7Ȝؙ}._ j 0c[iMEpJڮ| J˄+)W &Y3}B㿼Pr$1m(x>V!BoBZAV`KxAc\ 4mrpE韾̺s> h\Xwuc/}a=~U3-h"5XLz]K²QGfIh}uHcqf{MUk_t>ˆ'UrړUUYmHw=3\7΋ZH Һ7q1d?p y5nB Q\e$*wj'}Dk)b6PO_FsNt ҏ}J5Q)?ˉ͟&x/էayMN ` r@(Iqe.KQ&Aԋ] pX"9ˁ(2{hPm^3VoM nk#aRj:UѬaG:5wfwM}:_חzߏ=sx8ɟ-~ÉmOg,/u< Qɭa.8FX=g_Ny<.L~R甘9- Zxgo-T0iEoj*K0p;JvcSé'PJ[c/&E'[?x;%9ix4+<"пicmg{)Bï#ݒUIti.K::Ҟlr4q9wJ kLq>+uUIx $aGWdC0`LŽEnGk6v ]Tp,Sy/wWħnec=ׄSF 8 7i7'^nv8^*Ѹ_Y ? "v&RݧaAN\2K=jϕ5[@[ czVO;i< K(*{E[3SHKsf-./ ״yj4gd,K mTإ#0 ~3M2:tޙpt]^]AW;!bz8=q:;F7\p)$Y9k4Wz."+ FyZHR*S Fo/!SCtyXT ^'aQlWNVc WFԙeHlfN66^(39pԣZZ .0p ljj.elt?sS'4Y!,yQnGJv欪ABp=_~_TWL Cjx5D/fZlB_װ|QG k7}OakI:-y8!Ec̶{Oix [m$a| xD=jv%PQ <%n PԺ k)eC?(wۓM m* hN47H,,;˫9#C|$>6<6965FVp]D=2X801C+=H+g52$!(ʞBs/Ϭ0JmuHC ڧ ~ݕ 3p%ŝv.bq3~WCL*=̄ Y}@rp$0q/̂|PzWaɤ=L 6K6wgfv P,'N̆xZqiTCLwLX",,`Nuxz>$4^ ~$Jى1N bS3| !?YQzuYn]+܉(^~0 -wʕKd7N^)xA ٍC2^%!%.`L37P,X)\M5@CP[ug_k9 3LO7DL 3JE3P%>?2vnAx6$xɶi\X7uVG@UJVQq=[؁ȸ.+ЦR)*  "hc/gᴛ;jD.=՜hMr](\ү.}drBCvHXYA|X{ mMyܲ351y: ޑ8O e/$Z8MuL$qm5`CyP["Z"Cux%{gt`ODb"Tg `|'ꬊ^(Deg={ O.B}.g-3o˞߰I7@z2#Fi1JC )_G^Pe\:xfő~^.$`-CtTŃ tݷ? Dˍ v,! 4KNjɻzut745J6`܃6)@ dCrlZY-HvWI=r/5KPH׾:Q}WR.m/[*L GKSݕhx<)?-=^͞(I@)iWEQoT2w0>;*[[з}]u !S{sڋㅤ!vZ>"M=OYtR5dU=( Q"^ })tN!-eLC,K`cuH)\SCZ/uKC7(6Wɫ[uߢmâ3~F *-foY\ 4d. Cu_r&9)zBIMI4?7땒:Nu`SSYN*ʄT!JUJi8<;!}\ !7S3(Qw0r29cO&C0:dlދS-Ѷ TuyI$]x8 nMmt5 lf#3ˈ\H)<` )>ssjuqUTeT%fpUT@t-YH(#НHPݹ[N RD¸Կ{_˛^.ΰBʋ }zE/!`ޮ eј[47jbM?GK㧲|Cpf]'7xMIbF`²f?LLh2 >,imrx 5\4+[4 @J}2ѽ4ټH#hq0lyp&8#N;߀Ӟ/дPFg-E94k;j3vkW1r \RZx*.Ze8r !VUՈSn ⧀kG*}}x 31a(FpLCs?d|6Pw)MR]kO+gwv #Sˈ$4=Qu(NB\K^L趢1^ą6oW]h/PŽ,mFDkڴgd"޲-Ϛv{?Sn2Š*d6|  @%YPKk=XFSߊ.0-y^l~zQJK~v9{<4+Z={.25k^a]r-ӭs@f)ھ/zN 6ZFYx8HvMV"53{%8KV qg}/ @y_a-nRK1\iQjl/30Ns~ '"3{RiyATRYʮ:4sZ/=UnN;V hހl/GHyؿħm@ *?Rdׯ5VI&TljV`Y$t>>Dn ;"P6$Ժ@LA(ՙ}K HHtR(-p*uu¦!#~$DAJR#GU\/UAn"AJހǖvSӿ=]Pamt§Pr垩'-$NJ ֘v:1:<>퇝 \(A5B.&ms1KB_6$9P1\' 6#7)yg? !ȑ_v>GsV?).ߎIb>>T9݅2lED`'(u+#@IxNЩ t*bAzBlRKcaOP{L (lCϼI;4S> _BSd ؼl|sWY+p36{vj3,ܡ}v+Θrݣ* FpK5&jtž6ι,(k sz۴gtEtHcE~tÉ̳KrHr Isԧ %2^>c2)m"(xzT Y+5@ּ*flAcr:|$ԊOZ@xɤ<0n2Pj/!J~썀ܵm, =%Ld;ଖ+j!prAT~Vw@^;Y U JjWѽ;Y}L@FCrBKu@_nujGrYKQk0`BPlyƑY::P+KWz rȒ{`گ'KyF/DXwP'Ҋl& 0%|NԇB{ ;dPjFVF 9j⪣{BFUܥe>@Y&?ߩ3`uΑogg6T;@2f" LDգPaُU9V!\9bV{v iGKYLjܰ`NG0H⟠q._%Ekwj%q@;_ȇ"$i WFw`Cph QxsJrAk"Ոq/~dR  {;qFIRF\ oR4^Գ ) !hÖxZzݨ' 0G1ŵ*𴌊F5 <.QUc!! Ks>ly?>*E~e;?P=Rp~?Qxm3*C] (sZ>I8yD~J)'ͧ5n~;)9d|w'zCkRO9)6gRSXcLhQf&Oy4ӑ7pK*G׬+CgGEk+=Dq c%9{٣ R2du" L/37j@hzc-'ҍr,U{>zO5*]l;oI|Pq3(-1K5Y\C:J)2p𘹽 E@[W)#ba4^sٺixvZfʳz?~`.T0 -Gb N51MZ/ﵰr!06O lfy H^?X +z܊ A{vP[Ԕ-DcUlvjݶh,VizO+u^C68N `Xf:ݷʈxɿUX|WZ~gBQ9slZ9}P#y$D'ABSb{#@鏸CIJ0 '뙇^C_; 7h LzD 7j[C$>;ԭ+3P6+4-=@A kW-Գ^c<99#or%V>8JP'k%dc*㫃 ʗ˧nA9{o|ʧgr,rJMoٸoZmgN "G+a(t֧XL!wRVi̚4kpTGuK/;+Y^e핋2Q.!65iºHTc,'WICQⲈ{? IV>2=_!)ȅO auv9+) I&phэ;Eic .%6_U *xs=u+_FUh lFp_s@&4 ve2u_ zl0գQDxhإ/XJpBJzGBʙ?LE{"d(D$LT,,0<h\Wi"$d"$_^!&(XGlfr⧞ș%!eS=*hX(s 4ATXt*,>BvjQp>UɃ.Dϥen*A:#LK~DCJ yTLƭ-ލeNUHQLڏjkFY5.+-U4ԏ8b-A%;CE:z. *=2Y#~\k'ʥEn"}m>ilBK#X~Tc9e)wY ZƹvgӟF拀m2Ь3s"ֵc`QDfwϜ[PsD Ɗf~R\o0OYq7(opz 8T<-sԜ8Wu4K6T|}ԌU]jz嫤Nb*ȟT0m锈:Psh&=B!- 3TE/T_7Mߣ8hRZzP: \θI!~>M)ژN#Z)en8-E|(+ <9]n$ݷPkW1#v/ՠMlDs0t`aV[AץncR\zE"Y~JZ: WdEÂ_t]lkB,w`]w5뉁CH\Ø`:24P߅[,yaƋ8HppN9 n?ɖ)͙AB.$eֿ?%#vj),D,볝)dc?'ʨWpBkE?e3y|:E{Bq>ԷwwlX:NecWr&>h*t /eQAX ,^>BGo h|ؙ~L *\~NMU!V)N1:`XFJEŸÖѽ[CL*LQ~nOD[3 ~GF.TU]0G 0Hlޅ]ZB.)4 MLJOQE=*~ X+GDi-VCl|i\v$whps%{?.K vz~1q#f- Z%R6zO[p&pS8$%C{8i,f'DZar.+6򦧾/kJOlikYK ??Ӄ3c>+zcB&`%HKGLztA9^ 1kOŞ u&0w& .Ѝְ3}h2~u(\6D`z)>XQO-ץ_;5޲KzQ,dm q nEuϫ50\QhHp&}>bNK%xOvHaeG'gɘl:k5B](bpOK99HN[W PA$ƺُRnH^_iKm‹搗:G;x[>V`(w՛nGD$F=Ft +ǒ~Xj^OõCzLkJ(|GIatu8±':x5y2i٭> 2ECnu4l9w=%#2M1K D;Xjq&紋ٓTԧd/ζTRf;,; v~(M^ZzmҚm9C2 .J<%v& GL`'Qہ2nYK%W{ꜱ+c@Շ&E G~M9NEՌ yó.6+.*˴o}He>,&L Uv|Y:jh2+6hh dSUOL 0[X`EDnbZ(hu rJ1诅PU1^) g|d&iw  >>|SBv=s$`f/ SVN /*\?ehv9WaχRmdKFJ0٨f'b0ȻGbMAqg19D}\ѮBo)Wj21@p2dm NY _FscKIC4)s{危_ 3ȭT;t0zxғ}|RFju)FTK|RQY+B +Bejn2Nv!u8%P4D>yu_IA_4> nJb?Ȏ\j&Q{M1ХvdrMؿxY*)>binl_J>z%gRn~% p#1 ,?qߋׇgfIEƙDLHXNl1Jh$nںĭhJpE7F?+d{2_<:nKa 49xQR- CT+~3^8DxD/:s ߻NZ?cBdY~= M pDR|r] {Pr+y_w,#4(I?EQ{oEf^ 1z,yʪ)BHE /}u h ldžfFCXpj5'%.!C#Ϣ" xg]cnV>seH6F5 תӵK:oH_ <"d>#2;}Œ ĴM٢xIG\rEm-T2:u1f fk ( G٠۲c 79)|2X)+ 7Ҙem'<-P^:_$V@'&BiO$Ws6XU Ru)}Jqnij@(gq H@A_(<;'#k\ra˱WK,*QʡqRPo⑥|^hYr}{L)"1?2xZ.[e3qbоK Rf%uO4@ԙ  !E6k:GcF*HRkO@(7D 04;8G׌TJz cg]Y8g>^ ^,($){4-g%83hP3ۉ}h {M9ѦZߴݺ>ew\"K#|)3޷yHpb(aMƒw|i *Rދ' ̙.c`O'iaFȕpT.M٫5:!<.L7;-7(ǚDE1X_9d{.һjՂk1|Zq;P|.C;xՒ D+B1n]jT;^T9g/EMY>i C/~̻ c M8"-2(Sv˴Jd]^AT,CJDkálA̽lgMX'n3pKt>.DS}:)ں&E;m9,J'?moB M,cYK_tۜmmqN.ë[=v7=~p7HHW p#Y*; OYs ݻ!,]E}H#]6~f$֙FG8Fy1@V}hL%g;3%Qv*v>}p)G⼙짽"κA ʲKPq |,xs#sŶѓ$S?uYґnDh ^^[az S~;:& }A0kڛy&LϑQ&W 3~~s+C TysP3_%V8=1TDΔS2èM!*"2:R y'$D ̉ ȖԺR!LsNl2>[BH1Ϫ^FՒpejAgC3H, F;'D61e}^:G텶R8ROO5i,BFpU֊Y- l2C@"whޤ]a9eę1Sqe' Vb'4;#:83!vP6wg3א2jy2!)]i70Hg?sě`T]t]Ҩ[I>b)D)yȿo軗F'Pt5ChPfމx"' ef6Йs{_}s2rK'u5jعXTL) ̀t`x4r?]{*o ~H͕^o7CSON S ! &' 1Y0_kFKo%#ɚUiJ_I:=“a0WlT- WA+i]aF/j3k(v*t)ĥB#hg˼k\#u n"\XE>"s4?3 f=@ʤ$۾ hIz0Nzp^3~GkQtК &!y{U֔a̓ZB⌉k/vOA8O37Rd:n&85[#9ZbB38#}AږPy4{%]Qνxs*8LDo%xϨ7gz9E_W9)`W͘'T Qh$_R¥ūnOCO)n-|3JT i!45 ĵ<^qHgI@)&buwo 5y;n)@ʘåD{}\1'#&Vwĝ:n-,僣/bxxlS)^mZ JA|] r45H﫤8+mk43^^C{u_T2(.j,VbISA}wV$̍('p=gt 8Y@2DؐFpa;,-bh1QR ku8 \L'JX[˼uk+vlF{'CK.xp f<1lXsum}}Y9貣2?r;Todx(agoh*g6cs,3e̿J~T}B{nꅿ ;|A47Ʋ 3cK8u8]~kO z$+._bH5y * 3MnrBümyk.#.٦!81ʹB`J,ՈQps$A b &S*~7CZ9e{q{F7Lmv _% 뵼7,YqNh gye8yPO'mʓVnȀËJS0Zw,B ?Ͻ{9HZMxƜ|=j_j@@BX='ȽCP6!wYXV3a@+"UE[7 -+r:uI \m&b%Xժϩ\cNau㰯`Q{ LfTtS' o p:F+jpzl/$V ċBTc@Gܟ#Fj&Ͳ%@X _.κ1 ߴSq)h '!p3^Oȝr_*Гo"],kD_p sGTHȖBFu+cL}-JF8ՈӝJTV뮏PmrS>0>wG:s.p~F,*'OrI*CLI uw3kpt8'2l+؋̔A's]E"%!E,j-Pp = 9%t\?e; &欘j ׾7M*V1Ga9.#2둒t#*1ڱ5 HN9iQ'˚Ss C$ZM02~Y9;([ urTsٲcK8/E MR p'o\JI, 2 ['LSEăJEoaA;0UZx>Xe+PkVT#_0A0 öL*Jg2m v qTߓJ2APon(\˃ Ylt,{vܧxonIdѲ7[Y*3. X\ MLhDoeJ+sʁjԁx9l" Eƥ޳?V?A:v5+iƆxިq>mX .Fv?@WLB]~2`$xONw SҦDl 罯R03eU߻#y17*4@lZNNY[8|Ksxoo~5 Hvrt' [\RS tXhRoS=:\-XPD}O r-Iݻ?_F4;Q6~YM 6y}"@]bxZA"ʑeT@T7mGB[h."w3xkSV`k v1JoZ:Ǟ!9)m`ij,)Df3h xuɗ4;{6tG뒎_*^ɈJض #]6c7$) F܌N11':I_i}Rx] lHUhp^u0FOy1^cWg%os3YgeL d _k?ۄϔ' n9, 0?{^3!50_YԿڬm޳&3L+ǖԁr1M2B߻Gr 3 8%]@7 f t?s]8i \Kۅ/asb(T5gc(g2odM;};$6 d H%,ctd 1jQJwx|weknc4igDUۘ`lcn5@\EmP2W-\^޹b9J39nj=kpvl_378_'ۂ!@?䱰~ _bSN`]`7}KL?zV4Ț#V]@?X_ N-+YwrLc lUYV|G]<JF~fYmZKrVGŌܾ*( -c"T7˄cMVל5"NCK sKN̟z#s[4>I,)V]}THE׆MR"J;?SKnn4,Dz ū3)]&;Ai9IZDoF^O&&Ƨ==@T/lMUw/o!mBG!sTGF:iF7518ohܖiW ɔ!pc!:'WD1 u TGƓ)^%UR9ަݯR姸3࿋V+Lں0:bFl~) Tf/*&t6m;ӗ N9.^!c4eרӛy?U~`zIn}1j +IUnduj/gt̻#2}fvY_o S d)P"UߠP Jm)+`$B*f 5|@$(~Q}!oF0;a.:j/kEv5%v ק"a% f`hPW\G 'R6&!D?"M8lY 4[̆ B_׽!.INtp?x"&oneqKšr ]S۳'flPmNaND<ۡC xF \Jӹv+1n@M\XqcOFlɠ9qG0&l=Ck: k%Gv4?TqJ's:p꘻.BH:ðn2OHZ"@;4~ǚt$80i-*bA7gԸefHO=OO_:*@n>9scqƊ3y[/IK`g 1mL@˟5^n5NBCq٥JtX6?ridt 2@IiLW-N4% &bT) yNk8zlDWB{ z>Nf+Rs*Ryɗ\h(=N9eBO0FW9&4뒑y1uoxƗ{m4茆ik K?qMEHզD0+=9{[q~7Iy#ϹqGH䤩o'rhMV knxO!b'"H-KN]]e҇WvL=6c蟔"cYĒg ;lLrq_Y,EՃ9JOmZhvy`ŝ(ew {i?&k> ѾqRj#qTR$f/v5k&ֱ,h>e@ݱYc2?{Aph2OJ^}1g?Q+b+ɆO9V%ׅ:)Y\I8|aK풄L[FbDr1nG#-B)o\amB-!y F##/R }bnQtnSO&8U&Mgv?KP >]Aއ<*E*<>n‹nKbB൨A &#Ɏ n#JBw?Z2ݔ"lȭFI~r[.q bfqz+5"~[ 2:2d;F`t_Kt<2j8N4Lg3X'>a3 V3{  p¾0C'J!#}=Țyy^yrxip;SZUys\ K"eGw+LE8[ Yg4n217ÖċOt+ԥ[HTLJUtPf{ZJVt@(6%A\d99̒hDFCF_q#9B.l[pu`"/{QL_]Yk@B)m N}kV*ۿ3^i2;!o^09zmp36s~*PW_N69&lxf%g@mA?DUn܅ImO<%Ҁ)~)u(0SY/h嗀c=P5R!ﴟobb rzHc2q㛝 WLA1dY D=DEkog'̻ xSZӣf|sBSLQf0#ǎ. Gq=xRg/P T ~*rkɈp&ob\?rgSpdT&E?vp@]+ֳX2V ^70 #Tkk2qbnz\}I~]XN&,"F*Ŧp!gY٤z_W7g"W}[ՏgZ40I1 )š,$^9:ev}x׶ VI*1 ^ JQVOd`ga!RkC=|mƥ׹5~=H2$r>ZX[C ^&GζyֲCm1JH\YNE: &𰊷0A;] %Y} lO& YՠX*XrIMM<Ƨf\y>dM҇Ш|LfxƯp^:Qa$FTl)LfMJQHVnS$jnkN8sFQ-JH;Bٗ!8\?y=W?f-k}0Jb14Smo}aDveSt.z6>Xγ8-f_JJvQ7|i}@p?N硶s8{Rj&k?OӞ0gq= %kK/d(㦣VY -#-DG#XH.{ _Ǯ@f,9ރ3郺쿬#e"إ0|Jϧċ֛8):;'S!UqE熰ڷ /J>V|!Q$)`FSje,> >޻2lo2 d̒qAB-*m[7w5^K{W^j\e)SI,yc$S5[*^G(M\ݏd$2 <ͅRuV@/ mE5CUAFyL* 2HM;c8>(n$ֻD=$nΊgB4h*0w'e,' 5Bo Ƨ *N^m%EWxk0ê>W7:<̍f?+é=Q7S" clVeWVwC,w~Yܓ0*775Q\d yiegK%ut>9wDzH&x|+ 紟D:Gg?[v3=LފAП`}5c?=,g;Ø-9i*Eb即L `~sz4w;|7X%}"c>45nZNAC k LJS:+XwBV ="ߥ.Hxf77 Q\,J)*d+9-nӎW\dWXOUBմj=@VDӏG+9sfXE3xGqkSJBS=rlT&΃c1mC]v%^j@@цzQS1}DnbtȵzQ6=ak-'鬶B#nrW8]ъ eצ I5 ,>7~Zs)L{60iFT@zraǔnMѳ.SIƐs4S?&\*'ª1C*} oHGs)*Ι[C=D!MU KL%@R׽(0w}B;[Ĥ8 j1aP 1TYa]""ϩ S=kܱZik,Q_dGE%^NF9qXeyE|Ĺzg&otYx_l,F>8< ET2-X1g>9^xOy6O24KixaQ[O48:I|]^e2{ 4'= }?"Ez/;?S}`Lj'` R:w>_!ų~vi+> X}ʱW4Npϝ!;^]4&1֛$_.OʫᲇڒlPd_b?mV og'J)fDcndsq~{1 C(N6?3#|N$y ++CG$3KeǤp,9tW!VmB8YC/G< 7 u_s_Glu==F*::=ZI4) 5+|uѼ +sCQ0skҝlRǶgI %Y|džzN;vZŘm)H<>˂4qk,lE [,],m`$fl]ҁp@q#{)+ ij,%I=ZGi 2-U=ȩhqbTu%B3<+/V V竨20 nX0YviÏT%13Z{6\wh]_/ptQrp$zܲ\ Ϻ%:v$㡘VM/_k.Pqӕ YIu@JU(VM{3}r>l(N$y98::5N$}2C<ֺ>0Τf:i^QXnJVz5HXuik=9ola7]_ FEtEzE{U~ rmMv{Kaʞn6V9? Ax:MidՁJ 7 :d剝 {jt}Ȍ)* b /(2[`.e""$=EQ! tˆۂB|9 /mr=bn{}JhL wYM)HW۵v@d>4&QSڎij-qEybܵV3`J%!Ӊ)I/~j!gi+/3V $t-M6d=dWqXccا>T$V8CAR~*f]qލ~he+Ѻ!S;8/h=]9)ԢѤg])Tg*W3KKľl֯P4acv_yi)mM#ҍ' :el7(=[oәVR S[ZF#mrA$.4)٬Unᇴ޳Nш~-G է.c1_u@4B0q`uFJ0*toea}c2,ѓ+=hh(PjsdraEGܗ&{p)Fr4 ldB.uCۅJb+$w("‚, iûoܣT`eNG [l xs!&1NT*Fyˠ!z A堩7 "}!%]/DO[^ޛȝ5Ci&T`p6'EΡTMEo (k r\+GYnΑo$~|kSbu-r#Wfd(K?d#0GPΙ Q2s;N\ZUE]*g(֫+AX輬*>D*6T׍N fps&=ޒ| shGf5NWH`ࡰ%hS0A_B'b6v'u38zcn#2Sj})Ym$eb ^~EicNc&MfcpLQK2v?]a3UHZhf_ ap}j ?b#歿~<˒0r:?_1Rtq+?2`u,>r2?VRR-3W$=d^u>uʤ|7vbgoyoB$K#=߂q!BlX7a#BBB{`Xl2|&^cOEqU%5Cq{Y:B}Fkmr?QU6vA[ة!a#my~߃i6a'4ٯ|MT[N]9wLE*K7FÝQ[P.?ԕ"M8>ўJ#- p.̂:M6@tdF O.mX GYȎRH@@&NW,&/O7ueUZWڒ-1%]?'eE* eëmo[[/Yh@WM߯voO#<'|KnV7ZX9YW慱c33iA(ur󣤠mis^&Y`Rl 6e%fPhliTv:GәX#sajQ j?!nEe~hu ^NAK;mpuF&I3 {fY43 3bwiv2|. (_ն?_c7ՇsGꧾ-5Q%egDכM# ׂ_haD+p*;i8 H H^iM_y!Ptרa-vĊ4og$m;ʽ G#j˔|Re202KlSa8UA^Аʯ4^dn^&4cCmwٸ_0UI7AǚLS "\9e;37|E:'/bBJ*^:n; gY3XxJOTG$_24̃p<(bV1/D4 0@ N(ߖAHO<*o }ꐳy\n' {@H' a34F1\ـ'8.װ(y ,=vW{nd`nCI>1y?<ȣЩZ^`+h?9)7+u]%x+ jS(I ؚ J;}7_ct {DkjްF]*2қ}Ґmi,,ڌHI5_O1/l%%yРL:+mkzVeOvq/T0UZ1NEv/Uz6<˹]Y@P]MGY<*\|u%#aijqI) ةd͗7sؕC!|3CEh@?2Q*Z<+inl@3|ElK +`O qߣ0DS c8d}d`5 aZN d.㯉?u,kFPJ2i j*Y וB^~_ΕoƭZGit02˪3@D3yYBSqԎ$ٓlV` A xv͏]ډ8TAM~gOBR@UĄX0( ({SmϷ@T: Ouժ*dd<ǿ7]h8crk憐Wxm {ZM#٠]J{ ys-JȜC_SK8 ^agQVC#| ʖ@7"dN u:ߢ?]U2|iL*>͛Q9mF , y#` PI'JNq@GͶ[*)YӌgA.h<5ݙfvU@U}3H߱d!spfQp FH I'Rr B;ǹRb> H&*U0\4MȻmm)*,/~,A])~զ5ٞbg'yz\]Fim(-j1bO}[;-2w4ު7P\ P޻(*r0! uX1/']_!ef8<1N:6趖sjBNGpxZCf[r##Cwb̹Xx~$|Y丈;M2 i֩3Ex&B#9u=Poqxd:V?UrX蛝aY &6Ƥy$e[uTFK:=l5 0GaWXRxH·p~}EzWQ,}^Ԕӗ>9}M޷9КvM{SOK?=+d`>dґC 36^v#gp5XaXKl c?3ڮ.FcC p}g=Ḫc2ⰺ(zA?f]̝Š*ԸPN9,]ݎ g=~ *f,Uxji/'ʇ)MDϋ V06 h >Z\ُeQQ<"DE]~Wc=6\p.iE{΀dN1݌FAFMjM.k;e _wBG|ùi8]l9< ȌՇŞڣuACC*6B16WrZGwLNd:WgWAߐޚ_)0Pffx0){?"!$mex8|4\9#H&Ož`&uMŵQDi{1l?[PuÁr-8V-^^_esEklczh:LNOjk0njOc~Pm1'6m3:lo)J$ H"KGg ~:NMEri6ȴcuv̫>n ')NA }dߦS|jȆ y(MCrٚ8(#7#Qw;Sl ˺]rhe/V '\4vV𛙺'(*`߫GRBSz&{)ז^#Qئr1gWoAtٓ ?Őcgr͙4 ` 4J-J2y9!59lP?J'7Kzx?ԐR21£oB[K*o@L;:&OGL":Pgq1/Iu`ڹAޕ&+[Y$v%y(?C@:[w49{oҗogk;}|( #raI[F2FPZ&iM]HKcXK$Ž 6:J(2@yan`%U; ((jv .b2imA>HOP}%ܬQd7ͤʟ67م&uߞ잉ӊ.Z$ ?eY%KI"Bﱓ:EPoe%d Mx8;,H~uoQFA6 g8:oّ$nEnuv,ZȾDVS sKĘT):݇>/ҏyN|Nj5o)c?uQW/|Ǜ~GU\ng&xȨ!e'WXQ=4ljg1.39_Zu ~W$ Pr"؈ֳX5Q$l3h-椀j.xLܸ.= $Ǐfv,NO`Bnv%Qg"\{C͸3 av$D[kzhs8&Q84eォLQM7r/&ʆK4\cΏqk3Ć"z@_^à'Gem"9&OӋZDhxAU̦gǽR\]i?e _+wd%b Z)wX͛ФUoM.CWu>r@#Uu!xpr>U8`_̍*6 a-Orб|{)vpN[t5NBU`}`1H?߀lZCơ?V]>VlJ5Fדj1Q? sR\T' '^w)"c uŽKUxx>) 3Ì+&ҕ8 1Q@x12y'aRpDf7O,l(!Gvi`EFس<`iJQ n8[yJܼ;rLC$pua:KouGԽ- $ {_UZ5`$ n~dX-lFYIF;Pt v(wNWubQcwY+Mqa> pGO `2x4n 6>{p]5ҩ;}d`a[wSi ac$ ?⼒ky;w[3aQ綑R,vwyU 'CGW9×; a<G;lrR!w&)ԬkKZZy#{4`^-',Ot67ƛ!NUMH}dKA*} 9*t9BaTdkDrlln\9HAqdJZQ%4uw,"WlI'10R7i&8m26ԁu^5}phV*+8F% |4I~7 p4BOIx҃k<ZӢ /)6ж:o"]-_SacR>*DlykkM+5L<ZҜئTDAE!<)vEc*EO63eqPReuZQw᪀p{mrM>iɍnO3*ԏQ{tR(kw{VWlCߍRNiD/%B%yKyEoD"%O:d V}I!`|dAFn#he<'%8O@/ܯLP?0O?\q"B!Z7 Ft}( 2i EgκqZ[DN:H؆ڻ{!]]L-ђkzER2ݫfl`1+_Z]Ӈ}L9=u*Hdƌ-Hhizѕx ꗴys' $ΟjMY"l8ݫ|[tC $5q?#( n<5puU,1+S[WtnIbmOn{\WA=8./pZRL"@g<$zUN 'gn}Fe E 2\񚯉?!L|VTd= $fMm5Walw0P^R9T' #;V\tAz8w'oivu朐}1d«my1O ;ֿ#Ϋy}w4m;S4*- a` #PC?21mr 7ω~c*KRT&ZF1pu8Ԏ͡@f|рQ`׽B:89^&UzQ<1Wl| ؗ`~5YĦ i'}qqy)55MR >z0 {ruT{MbkYw6m#ّ2DCKEydAEoNx8Dd>";XLZ!u NE{3쳅Wfu Ѣ|U;EQ=AzvU=I\o8u)~E1HǡT{!7T*;׵ܥF rD`FCs(]uԖ{57;7>h$p%=:?&{s{߂dySwؙ9)5.jޏڠ꟔i(b5P0qb;J _{L~1b- #AZy>n _;! P:ߺ~sTVjYIx>eu2os]'|b*M@㏈ M9"2/J+J/&i ؝Hrt5>mf . h5%n-z x:&=n=ͯ%VgG8CVd`,hF'cyx^@QIQϥNf'2sp,gX6P TUL69:Y/"s@sz*r{GlꇣI_BUݒO̚L^LEL >v`ȨȜ7\sPӝAeXeN-{ҥK& T}گ@@nt/?tQFrCU_>"9u_g0oy78JO9oؓ H̘GܦZh4\z]>_`G v`x2V.P0rsU7W`XWBZBԋRV)1s/zuSɵ ?WN!]z:: RIPx{&NWͨ:GTkKOl.,x^J#J_5,.!lYK\qC+A@'v 9"0rϽ尳 -G3"p=*b&5(m1%qoO ֐>Ch.@bF3V OC*E0.m#ohO8>KZbob鍽oPL9$U-%|Utz5A\tJq$&V|L:(3?ByoA̠-'i_Qbtb *y6٠NhLwεF+fe/]z"gy c w;ߖdS%9UNa)ɥh 7^-u=?PM }(=|轸kڹ ҳ ̹_{+cgvQC'\k%'b^o#!9b̓Mh,2 m`E?!8O"{^Bgr_v$t m;~^ch/TպBDc rI 7?J8(3; 3MQo 9ƳV 6me}mNoi'"H!Vy!@9o`|o.b!$m*K>%^FVY"2T%4O =_Vd "D)&C$~$/֚PD:Xs_M3[ PPRce~xud}N'ֹۃ63/Y'\hd6K|'tx E 74?_,yVS֏j;g'&*cɁ6|t:T@_:S%xjiyGCFIǐg_B~ cDf=lr.}zd4[+yb_HY8o`0vKS,.}%q9{i P3x׍D>h'IH}=\HtYK%枖P]>ԙ'ψ}Nݵ]S}Ƒ.B|96{뇢ӓ.}yX]C߼{ N.sX9Dd?&5dm._zO?l$ӗfj;IcAr,={7!-O04 N俰i0IUV7P@Ӆ`CmtScY8N9@=;h0BR.:%8Zһ-^}v DXN_TIC8D➂E"%.}↱5B<p =[ 4fA=6fwoMJ0%dmw]8o&'kGzEF_BP"Pϼ1kJ~NeJlp"Gv~d YZ#Cx =^bxa_Jo)ƷՊWL"xd%нCAd{5B)Ũz(Vdtm [U+#SIwq0 $I gckB*M?#z NtSzDq ͇A7ۛ8y>*n% (N|Cy:ۖuOST̓UIe߼wFOѣUZMyyxE oD\6˕ݷKo=![ёbK YVL"h~Uy #b5f>P&}0cH 'e&]hc,*F\aAj6۹&͋‘ѷ$l-.>u-TÜl:ѵ#9sȴ"7HWl#AIqxc\v&f/yt!3$ A|k+5 +cD;o Cw܎FLAEb78+Se@/:gPM)xkeJ1Hp~R+v$XW~J+9g&c]$&E Bc~C)sQJl՝'/"\\j>,h$K O?}4lZLoQQzB1zFwɦ<ҥCE"E.o#zp TBX,?!}Y>M&1B_&M[' ED`';`CpO+IJ-&Sr!o>,aCvިcĞӻ 9^fP {a>{Q |yU}th@₣W>l'$`~9;~Y{aVL۾ta( Ƌ@('STڢ(϶O%ǐ:G2xV{׭wg1K l.L~|s%E"I gS4?xٺ39P=|44'$&[ƼaHAXsÓ!p^Zɖ40ECaF޳%ؓlS CZz95!MEZIHuGQ0kY]o) װ1oL@[N-06-䃚3%TO.n9\&BQ,Xz(9W+ƕ+RڊMRi4?#W~px.4ZuPo hV +AZ<ve66B"=uHۏ`wa6f-bWRV,|. ;t0. W `쿲!=38CKZ>AT1x7D`~mmB[kGgѰ]<0\[]>eGvhJqXǏm4bߜ]Bޑ2(g!d;Sk  F Wd \sдdnrB̻ԛх{|ԮiBk5Gv-9=B1S7>*& F6.9wu9 >2yf|h{$ZoX [惂 G?#[K URȯWD땰p;M?Z eK.߸Qe`?kjdM8prIp,]9n< B-3?'oW f-6K<7N / {456-:-9Fe|xe:A(A_rQl'>]d!5VفZ`ՁAT&YQgSrT& M(wkz7|<#J.\i1u;&[sQ0S)a&9S6)h|w^ؖ -)ifeB3Ӳr^Qkg.*mm "FCEj =g3S]A%G/ʒ*;\S48Vo_`GozCC0c2b@Ĕ`A;]~0E.X8s&YɤK8|DzFwbi`+!e:q/:Uٹ7*f-zf=ܺ;W0 Yud{pƷ^i~JKlӚ Lɭ sx*y ByR5x[W+ Ro8E(NHz )QvE}KKdbvx<3/Qmd-ߝȩjA{VHqprV]y*Χ/I#j%c^yd=2i}l@hբs ui;_#X1]"O*ds6v4Tv4,IՓCxyl݂W)^h6y1˧'ԉ0w+9F_>9P& [gm6p.Xsg|{衉x$XR6@/IKZpl0 & ]>'c &~>nlPreTrqLD4ng]x u69=1D{"Y[ـɦb0gCU.b;=/]9?t'%: W}GtZo>C'Y_9x*(JQ8c# E?nncҩ_, GҭYh@V%.ZP+1XF~t<W Lߵ90)Wć.&"21ӼPGrw oU2?4&ϐ-?tWf\՞:ݒب9vX)##jO0-<"XW6<$Rvŋ@c$.3>Y00$Bk껈f+4N P  ZfkFk{T+h޾}%I8$,qP`dCH\\-[G`}nϧkӳSY[V*gr^2ˀw~|^+M3F@&o-M!vG3i p:FB*9*x#I;+b??'+TY7D$'H5_+CAgkIbuKR=@y )rz>ŒcR,YCDCX0b (2$RrjkVW3kqŎHc'"vsX3psgر&{YkG#mۖ<8)6!OF K)PREhdrZȁBM=o+ K|:@a(Ng}{߁jQ 3NM>1O),p| ;$B ;X}  oo9XXE&g^b تvh J#;{nU$ wz&.B+ 4ă8}0p*cN8[X\˯xpn2X '< HSN@6@`0fSVMe%R7h /!NOo=K&gN @%o1 ecz%Ia+=+~mFp?!]Q]Qժk6OUQ\& z.o&">D89~lPKIB1p"31'"IcSs]Lc?/ t/Q""7Sf>|&}jqҌ!w&z Er &.g&TGȷ!Jq!-K)!Oi[Wϔ+"kbi0Cڊɇiws?6DZUf읖dl扃jbJ[%Nzpc9PαmH'?euT†DT 1rQQ<~=;EF~kle>fH={B;f^[N< :Uт|}ТN7I=_8icY7hR/:ᗑfqµJ\>}S22ѽ[\٣@ɉ9=:Z>Y Pۏ,-3V+% S?ߐ8\Th/lҨHbˤ,ŕX%̀oZ-7xuDEE:+ "("j2ek2HcZ}Alâ }:)8ՠOkƌI R YĶS0 YjU& |D,W׵alSOշ{0ne~z#8PʦH`uVRW\KζH uH$$ Q&I2jl&ۏMm\KDQj}RX|Q*Kh JX4`vJG9DUeT,@Ԥhն/ƣޗ)mS p8؍=.ikl}^lOlK{\h:(P*ӱ[U*v)3bܺ7\-aذӄ_sk#0d;:y%B܄ 4)Xs-ZW~SU2 sq*sq~6vb֞YP 7]Ez掩GryBa&z`llxEJS%R?A#S.6wn˱2!eJu: AbX!|uWkS?ORChmY>,˦7&S5T+2G+v{K& jCRhڴ܃B% X rZTcXP kP0 pmx^V)TF·YdthM[j@MmU0(}nGTW[d!\B>@w'EUخ|)E*)Xe$>et5lkMsX+*0вt ʮc];Mג|Gni_e2n,jxO3H"4yc~7V=*l->E] ʏ$SiA4L ,ZK]O^`I6RWs&'o\{> ALU=";F3;%ʖcIx<$-wl='wdX*"~|S\HcyB=(>sǗKz/W c¹^ǐAhtde g[j@9Wvꁴ+Nhe7U[Za|y:κ,ط,8 7\^x-a1`wy]ef&SFd 1F@F0=:=01A^ؿsC\4jyt{j.f8*ݘT( %_z3$YO%V>J'$bK$ Dl{( d%奠6L%Bw\*ǓH3ѝvE_G ݬ/G:wJcL qxv{aGNzߠsA\SKnxB8B0}L5h5zyf7m!AIk5G^ P jO/Z4qWkjp6ջtă S;[ > "&r=h^l"* |K!T"&,J4~  pIeM4M|6F%Ɂޥ yΨ7 lCm9GZtR Fl+EзDW+HF]a.XI:%W:RƩVYe{4aiӱ2 dRa @|n,QdPZGZ)X*|R˹j1*!O‰c6O/ b]5^92H*KIv#\Z \h4>b[跕EE:ypHqݹwR+]%8:* e3^_YsXsc1s_5̛@ JלDՆЀ¡S9–H2 Hw&?SxP?:rd)'a-jS _TAl/ ̃'YaMK=ÊsݩKtg~|)-hWʆщdj%ٔqdK:hTIb6W]]ѶlþdP2:}/ݘ;8_1jOzMLY"ԋMX \:j ހc2 K6 0Hd!ȮS5R.u<V!zrO‹x|ECUr~ Xcɹq=:>,zg,fCYy[(rIYfX >vaz?Qv#~~u,(Ox`bH5[ͨ:qf;MX1"Yx=ˆg^|_Z.@t-swfb5@Mџle}>8r Ls%q^s]Ʒ>DZSmBr9`#[L_ Ј61sv# iXiސw)a/p ї Νcm(R"Awbtgj7?h*6@r㦷n}JatAUT] #j~UT}*Т#bY+9^W Թy]跪5۪I)/KyW/+2*_Q`XyGx -)5n[7p }Ashm 7dn:uotC[Kނ)R*FK?Y2+2Qr͘]pE1_B4uL2'=LC5p򂠯,1=(evBF??TbE(w-*Gc)'ӨϨ{O0P~Y׎oU&XS1sa)XomH l4Yi"W^6v޽CwWrIBŵUlB{r 7&)6W0$'Gc>wȪL q>_5Z" qmnYlgb{rI?w/SM\P"ƿeP hukoڕ 2Un <L!'YG)kQN@H.!gKgWgT';8 Q}  pzU"ʰdQDJy{v(s4D렘?"WnjZ΍ic\&a*89ͯؖ.ؽB`T? hjnvN]dpJ뼲;{j!~ȾIA)hbe;EFWKRn;¬,qfUvc7|"Z{ɓSZ9Փ~RSM &e&Ip6|!,cS uI6s%̙s:~-·STw*iGcZ[aŤH;*<*#;R!8`+6Xe_s wZhDyjO2Q?J&ÕQ5 6&81D4[GU p`k5:CZgմyʳ0o`~Vf{dg+qjz˾v.%..?(dC(\-Нpv"TŹ%JWG$5$qPqY^w{U"!>~84Na6JjDS3hpSs,7R7n)=S$#:]'@%]u<~}.QfeSs 8}xb06NA@3U,K;֙\mI*Hwr]o=4eQ}Af 6Y-$yf_;qj>TLqJWSQ\T?u"i]Nq/=$ZU%-K_$q:']V`9" }[@*-NUC"cEO4 F!QȖ¡ j:[A}We&ϞPVąWFޑV݇I]"CGGBbrطe\%#5f+@ 5E9=Ȫ\n o! /vgr4!}տe Ȯ[D\"SJp'uL%q}DaQ/tk8(DbT ƈ^:ڭ8"ߣx\᮹u֭@h[ٱPW%:&꜕&T02" -=mװf ;œI9uS3322o艔NjQVN fM%q(!ں.o/hsg94I}CQ)Ap<-N%<¯F-t2"FzQ18%# M vH+G%-ὬeqT4<)=E_*cwhs.vLM̅Xsm]Fxm[}LD$}9F\a~X P0;Ю,|2B=4,{9s"FȫJRm.Ӟ%^g(PPuB(/;gP̈k>m_Cû~4(2\x7:{O%S ez9^&:Җ|pn/brj~6'&~5V0o}| OBQbSfIBs/ #Y{-OS9-?y Q(Kq; >rq_ Ryt Ҳ׍xM:3S^-ƔD>HhT'sUQVm0,E jlf0o$eWiњm@ I (1JȥQ"W+ɧ@dnC"t :WnZ )Ox w b"PZ'vKahcy]?TRˡ6>s a˱tC]%gg.+@" *Yybͥ]:xnW]o g?sśD1\.YWʆ#cQv:9Lc UFI0&W˘ 1_6B:-Rn1]T4=uPI\ǒɈhzvem?}ϲOS^bXjCI.AF`gpZyɶ7 ypuїaN 8$MY))-T<@ bk.9r?|ňztȊG/p0샍0SoD[B:1wT =8N8;YQ|Aypln^0f g~G;ֻvOPE tD#tp; Ngl@3Q%6Tu{HC rjQOo-2\Ww$\ubI2aa|H/T2XBkiML1G=(#`̷qF8WOeVUM7"Dc uͲFot-?qK:[ʼn]ub]zg쏑+J+.W 9!_:ȭ瘣N7" 3_/mԂ'z3oVnA%cPj^=,mBDX?q{֑E)Aߡ%(F5Ox6 9ІvX*OGV$nzώő@CJGS-Pmʼ=lS3|~>+htR[*[k H`syo{=K s K?) fZۭ&hD$J"GέR|"B_4 `baVF@\qzեl-=_%jZ$GK@+\eݸILf n?*w'Y*!o+ːdX]3< \_eb> 4R_KG!>qzbUhzxetXEQGFH^g8FWK`RQF4 "K}i. JNZގϔ3=HnK<51d=oa8Ȧ.OY[c+ߎ}ZDj6g@O9nkgc#"TIf{t/#z䈝+ӌxMAVPB-ymHWCŻP)f1(DdLM@}\ k7JY+mS Qަ8-p]%\ J_8t)4n ;K N*EW3G c]#J*G>QY#Ki4 &= 0Tn$ErAn7%)A,gF< . Xp`> ]`1> =S%WDS޴i(s ?TNTrw:92lOe[8|TRp|OMA\Z7plڈ[1 6)!Z9BbVVB Y$_SV2dpQy y!l#6"ȝM^4op{l 85֫Ic "{1s3sc0y88ym ʍ&>I9eˇxP5ҧ'i5}[@.#}'e219,TvYҙ6<7Q|49` ]DŽ]QYP#NO^s6pId eSks9XX8U.P^JR{uqtFq?S<0!  f[Ӻ e.Zyaեc:A.ꕓS'ࠐ+O+|00T:{[ۼ_]ˌs>NiB@b@_*fgMߢƕ1?ކZ*پǺ?m\XK]orP]304;U<6{ D+#sԑ\qYt¬ WZsCD l:˘-?ٹcGf 0DכufD%8FSW$vv81FFe[1=*y84 '!A1-1xlL ft!IE2a i7y>LdH ګ}" R}ȹ9֑r1117lD'm$uAⰣᅩ/Ča=~}[e`9D╄'MzY6(>yM>SHZfG#p %\@b42FZS߱/5*%=xiu5@oY䒘 aHۄC1ÇV3$HN)ay4t<i L|t U~G{ц )-wGFET;WiM>X;H᧵N Vv7E3J~K ϔ/j"U,5I)qA)G?g)nFie~˩ñ[7q7(Z[!;D)6p?'p>;* 飣&VZ՝1h7zfo#̑(g[x'MY8c)MkO0>[6Fc>mX{ $l q2KJ'& EV#G+MQu24zƜCЪW?ϔ?A4c7$/t=© ]T9Ǐ&#ɭ F%zLL:0re*SB=;DZ;;#;JaR5 LԨ,KO2)JܬNkIjtʁ[كҟ2p9_.[B|m{3oZJ u'A>,~iV~nwId44y0ѰíԬGb8Fu 9H zmW quZ-D$`V.lYKRIM[ԅ"<24 ~RtCGWTnwJfx&oz^쇬-_ #Q9M:m08zȴaWl@ס]nJjR0߲d M{t 2遅1A:1=v6:Dh v#+"$oRQOM/UOooy*/7 Eय06!N4DF;8^rš<?AroU߆ ߑqۉAh\K %MKzEqW&+vU r%J\1?yʁVu&#V ь:$d\wpa]5Ќ E+K8dWKzHՖуZI s\~>/fzs+Z$KJVx#8$QY[ Z"p$Futa)y'2h3˘iiP3qv9уWF0ẳ!H8۞{]&lFD-s{ +$y}Qq0V͟C, 8CXdiM7&֌7~JnFהKBk&:яp܃ʊ\yC >UJx[Zm8 g5n_y-[!A-bL1w0ٿ=n˃~\fY!Ԑuc,%6JXzk&%(h!buaӡi Z| <| &йg59̒/,* cJ.ͪ ѧ)e?>g2O'цTiWT)oFy/RSB!IK Mtҳ{2f-=T.Eӟ/6~{㘓]ݸx>ZyC9 Vv.0<}-ȓ8qciY=8+aC^:V ߉1j3Egsu5K21ZϢߙ:/v 4^I Q|e"K谕L`poY,h ي{@^p'(%)' 6Ϣ_R{X$Q*#%bt}O<caKK9'h6k0AZ v*S=t:fWG63K7M#D/^6WW5ҶzTCJ3ϱakkH1?J)FivA0 -;2 U5 a.u5\ x騞9sgnᳰa-ie@*P"yQIM\^>40!1'7ZLӹmHrk/-kvEm3dP\221[zԸWT}tP (-6^*(>I=gf Nw) qa'Νb.l- =)LULq[v?I(ocU]Ű꥟ؠ)l&]]}Y%n}H.&H3?\%A^`:ノBlH5۸<,.XyE6^Xz';hqjctz: 51S5O-EɉYqM.&MBU=.N2;MΥHɒG1EʝlEoSoDuؽ5iB2cXGgnp]Фmflyf]SAJv i^ou*P9?G%K}]%[`㻶)aw_)W \ǫsZ^HZ(. ?;:cA{رw|N|3=|GwkwZSW@a? h @7y,ޛ@Pm_ׁi\QiyWnݷy]fotSp=Eb .3<̾q7ر-Z؃)މ Fwd6VܼF6 },*ua>;( mSRW'QQkLBA>\a /.SWE^za]+9rQ64a./wvYq:W(G<bY)zN(0L tq>xHNRoS` [0ws )X݈'k܆1 0}hF hJSc?G=.!i!HAB!u-ɱ<C̐y))qF<lA7~Ż:Ҡ Eދ|6N/Q'96\D\{cdKmVr-: ́X..nl-*H]_FbP.BAƁTW+@ca׎d2.*&@s8ՊE'ʱ]&)7mk Ԗ1]^䞉? ^Z/0t\%3ysc(8{iC$ c~/=ogU@ mwDq2)zZ95l2|󘣈v,Jq2)XoLvjҊɬ]0;d)q֣3}VS!. D< =~qM~6@%_0g/ᮝԵl Z5ްȪ0'эtIbZWNxRf{/r?zj;D%%>sE:[a4k&}`jxMKP^cns&bMpkXBdJ*ͻP! fS,bRƇ*b_*:Ϣ$5?\v7˘WcŠ </AٮLv)QIy; 0I>ש%h7pRu=4J1i' QzA84H[}I9~}BЀKk_m;"[B*͈(zԅ"tUٺF[p#(RₗNMQ-~\q1wu~4"Y\$2_ljGLZaOڂ~$*\~x# Nuko^ nk6p{6EL3ݪ> AffqSUu9`r"|Gix-YϞwaa2p2<M<*TWlU3 J 㮃W[>/\RXzl(LЗ+K=GOX2#]FpP\yWEL,8Q.ˊ.Ǖ.N0#*qa(8SxGX-]n ⛗+YPT=VnH[7ه8yJܬ;*MS_M&l-S+Č(Wv(_le$m]BI"s|# xhGE VjXfom7bg+3n2c KgQSI2l^?r^&J(i:j͏0;zͪ3&wpƴ3(}ɊW6Д{| A5)&r]'wKF8RCx{oVXrpJ>Qf$I[_?t, Կ "JmCYe|RD87p%/dM['AK ȅ Ǭ49$Cpu(P(Q a;V[e#9[ϔ wyT^^4 2hDJ}=CYvTn7S{^Go^Y$\OJXG2KRzgiVyN?^k_\4 ZyL%R/`Syusd-acE:p1 Y;,DNmy]#LQE4(Lc5K.1kfu$U#p2-} AEJ}JN&?6W<0ZMxJ>A-bB "BNY= ڪ!Sbm!ZbqNNN'o0R"*QK8߼4U2L\Mr_3ܔ=!oģ[i;4 X{G4#;34^gޤM/{dќF| u"PjPkїc`nM(w7T%k裁%"A:+QԬ c N+ Đ$cBwJW,jR~t43ۍ2̪ .,z  i'GC6NG4[Чu_kK*d'!hF֖[V([0k51%P9~4ӳsC~= t>F{wA2S ߿ůEXΚb#uwGM0ӯg-j]^CXķ"L&P>HϲfǷĻo.^7:+- SBFO)RO>s0SBxC(;t۝K +[3;tG\P,mH셴9K-'"v/G04W^9+3嘽*g۪ޫ $okv6-PB}BPwЧ/ge;3洢.)5';$>á(ؚUa !sLUYDm?SBT,AE2>G=ڻ"~䧌o|d3a~\RIXTS@#_{|fn1њ‹5&H{&?WАsySj'U"X`\=?4+bir]7281UUo;EcM-T v``mSEEPgFlIFm!mYIK*7aI-]Nx5bm3Qt<-O>4}'>X\֞v@,zLu.0*[KG$cH2̴ZG!NOR~yK -âE [cn?޳A2?Jx9 *A<VZM 5?ƅYDCXkh= U[3SL-ΥAwOuiSt+⦈"`Ui,Z:`>Oudxx9v 1I3JCʹf5﨑ݨReY*MJz.r'&e|M5o 26> rƂ +BÇHUYJWJc#*O!ɼF_.%+T BaoC SH9@QxՙnKJ<\/.|8C]R蜡h3V_ ":4NƏ6h<ҧoӴ/юr`]]G<CDA\|ֲ'["KGˡҔ2+cfeΓYB巁ԛ7IҽZP)ͬV7H$z.bo`Nk`bT؅uUM ȶeܻPkX8!nm271LsJύŌQҳ3Zj+ӻ&r[=ɯ'Ke(d{cKs+,})'|W ń&( uk&PTӆ\dF @2)Mȯ-pEk ͭ' t"㹈Pp,2x_WCJCSԊTFZ8#8gktFd6{7PvaiTQll"fYCACw¿-(" z=(:C{wS Ԡiw5T, vIn]Q5 FJSb<;嘖(8'c4fE"3z*FYRmۉmQOz65}%Ӗ+,Hȼӿ&]رP7@K/g<舘+tOӓ,>]SkGk4l38[`m >Z>Y3{-6WF[H\nU^|I| z|zًq[sU[k{1j_6e"(ZsSGx pjq)Cc&s _!B*9j=1џ6FlM,Q6[&bs i=1*ᵿOnoIFҺs[f11,iõ'1X8)TfDH l? Bi, G9&n{ RHKV_jst|yǏ "[er[|g u!J3; WÀۻ!bR?_n`s(J 'z'z߮7kj+]Sy՞9X# SD\:fr5N\J{,wF&Ws8})V [Х3Dva2gHW0lT۩C,t-4 Faױ{r1hr?ȝ^*o= )tTj|yPBdBOpv=IE>B!V*`i jbl+z(~*UڊT.CfT&)p:3plr?a8Wg{!f{;%|tL-Mne.U4bLQiL{B#2N1L,#YkRB6@FR={tPFWg節^1>VL^Ҕeg !yx7grq["_e>¸8fk;kmJWaѓ]UZ`$ L"+DaH1NelhP|R, 7#'i'.ƂAÑEu慹+>qLG9D 7P:s8ʹo2mwǁ1ooypPPBl> r?gx>7)88/zâxK搇9]w$+~HqcvHu ܆<~e0]1}ϓL{ ľ'qmlvҡabY.;$Y%id ݃i(q :7Ҡlhcy_8rZ-[l"[43*>[Rke!d R ß/WTK&exCjq\tΉoP)?NsBkѳe1%OW̳eAqaK#,6/D9Ą'9_X"~o~k15ɵIu@1Mж33<ץ @A?A,#{GH"*V0'۵^|"QQ C,-K˅ =O] xEyglOmArx3CAheu G&B[#سiZ=xzY' Do];3<6Wܴ\b]aV #t{훗n/shtAܒd.!hhIb֪P3?/LΉ}2áW3v~'66H\XE]8˯ɤרr6F (H&7zI@H ׇNtY(;9LBd 2w_bDjPߋ5l.ɠNjMR0}_XL]FŽv̄cL㙱QeZDs+dݿU7nEc<%C-_U=(e͘AgPp-S9 i,g =uc_{ )"z v.[~|lZuΦrP,5*B{BMF9ze)]w(fҡ4񉉜gov PY釷sr~3ZukTOA Y?~kǭkHH7地_p D!wJ@ɕϩZ\'"uWQЉigw'^\87PxB .^1AuYyE>RDv}o]qt0Sn5U#+ۧ;ߏ*#b)ۖ!c6#R$ŗEXG3< CP٢9ח-M^5pQ7(ެ=)n c1^t2-SV#J/JtRRFtDGkMw QHtpAOXQ5k43J§uW=VbrN|dhMfGKJ;dim6 })9[n SwB[jԟ^#Iݰ7S$ 0An}n@4^QXmjtYgv.Fl^%Rm 0x"Ouʳߍ;dQCDI̚t Y(JH?u좁<~D tDeC/%ƽ'):4%_qm_ 6kQ=C\İ.NDUX6[._{v֢* 8[, .WwSycIІۑg67 fw5 nBn"&!;3G*DE PD5ڜ 掄ʅ>oQ"5*ŵ q;-6彘id N$|!w_ sHoZzfs,5q纝`~:0JV.:h\rҟ{+ 7?K\裑R wΪm{Kln&=ZXkP;#;. .vr Օ~.\SWd&ϭ#r҄ l '=P=a\e!I$%M䳴F0'Z`;%]˪0o qWeMx'W0_pdggŜHR"IWI$i#Cb==#"} H"Xi!׍ANw uRxb'ד>r5go ݟUm/wi8pQ ktᱚs%wn-`p Ҥ3/0׽kf[}Cyz?gXYϫ[dc4sr|BL+Pi }b .+ԂwX#;ĭ߷8@[׼pgnyCJ; ~p6h\2Itرi_c9aC)o ͣs Cf6 @/ ]dQ*, (Z6 J@DL;^FSvG[G@VS<`ߌ;q`ZuQ9 Uxi9F89*Qv-B dmI4Ahm[uZ̬- ]6]#O+},@\ {vhV%xr"щo#+uMAG YVحb=sWyzyEm3 g$dLƫe4=DSoVHE_M*ĽӐ7sw3ӐY?qbVƒ3.:M)[9 Xѹ+CMrq3rmfW2h[rlI );`t02ٰ>\(}@d^&c[ܲg ]ɱ\q3ԇsza8X["­D}{nJBOoem+s񔱿6kƌ ?|ȵGS*5]fPګcm*p;<$%Uj̛^F½υ֛[VuWcH"VdpA[ `Q汴ݥf4T-tڝ5m{sm}P:ˍ6*!^{q%T@i|$? S dҹҭ5QfKW1aH~l6\%FAWa-1]jAoocPWmϭc'Pɮ&<\br"^”W+a4dN6$qv`.T͚uLP߀Jf)DyfOӬ%Yzxtvtư:D$9ѽIwrc76i=dRid`@nHѲfN.18L|3?IKe2~J}Jop\>7UQd Kc_{[s}zh#AdUe=1=gd IHѫ@E7ԕ_B^61! ^Ilqޓ Xq VT}c#ci$\A ϝ !jVi-V&<9`/|gq_IUag./W/L`UH7oW{NJPGaBqڽg(Mf[3 Rݭ>{iڑ5'gcψ4Bv3'rkꠤ[xӣ +] z4 rE] lmziTIB#Dۦ{,~ҷ Lٍh15wQ`N Rۺ|7 G63O0Otk2#J!41yӪ:5瘨Ppc gы^$v[ɗ4u0 E.үyY?K]/{jfmEnK0"` M%k* "LfySn.!{QN.e9_pJmG,7-2j EG[uAƷ% &v?SA8:s;lp4k5e`[3z>F?S  {vҹfUZ}@۟( {j,RrfN=&5ٝ:V aaԹї; _(qxɟ'-: Kqɲ ZBYqn#h|’B77_\*JM̍q"PgW7K*vU*%|,䥊.G2 mb*>(W(LaWŨv)7"w/(,kW`(SNp={gh l'G(|)-ued1AWd@h, ΂&$ J}*~igrtp)% WI޷ &)o kc:]|w8 =2UEa1Jd[Vm˻Mfb HQBP!81!k,WNfYt"dq\a/dQz7;e'14D[oZ?5+J堲VV+rIQNqaxiw\&_M~?K\^.\Xdž H>MJbI@iT_KFzuZ]-pfy^YI&~U 5!/d8;ogaBuA%R}X~8Y;4ږ1HbT %~p`.b U>#=UM==?s,gV^yT~U5a*fQX,.?z0M}qnY~K?^9ֈo҂{Q 7|'ke4e/mfU20ܱ V h 靧Hk䏅iٕY{IlدtVQo b[(y(M$5k:2x];YԀPu̵Uyh SZ3n*:RN"tD 6`}Ioڟo0Dyma-uϏؽ3} { ޠ1Ă)5ᦄK D{A$w7lO!E_8ҖS/wC6.3:G~؁l-=N{_ w.ltZZΰ)A41{*K?!ļ:dN 7jL)%N[+}r^"-ئѷwedW FO_rY+̅82OU<ݮ>";RXS2f;jA'_C}]? A0g=@W1T׏-II+ӝf񵷢8^Hh2JuAzt#ygWr_Kq |,]NbQYMs(BQd ?uu E*QFL6u@W/8mckC`ʣ?f}oT9JZB_tֿKP{! thhpa?2cl޷;&*o ~vBF=+L/kqjv(AhM־6\RA8i.-J`3*ZbT6W ~Eū;DSu1Ky`3e:К Zthrz_9Bl2mVɎ&N@T[HkU4kX(^KPtg_ ؕla.`;[Dה6Gxyӝ:E&EVz{ZK4}~T(Kvб PY;!Zۑ'WzuԽuxcGF:qVp1..#%p&/E @etWlĕzoB@"mi~MQU V3Y "J@xtL0S=c8w8GrUI JW*ciS՛F"^hGNp\]3zǤaKcp@v N=mȯN]yY qF;w/z ,I[,c"^=!5YxuR#Ȱfvy[%8qQ4!fHs1mX U-2bɽ_,߈.B@?Kԝ˯lJl[;BfjNYco(7?6yVclqfd>[ Mm 8} l JUOa8;WCtn`e,%B{U%Ȋ.㉚R4;̯= p%A7&3$.!U= #Dio#}[Rb~y^cs*lLrK/$FJScE&qe`VzS%mfyΌ0zP'O͈ٚ}w*hc/ $gat;;_WtTQi)YaީŊg _ڔ΅.F,8J c$Q,ME[>GMT~3ϠJj 89n·ܢr!%=rffx E@!욊ƿd= ux]l[W:T#5bMX7 җ"=sw3QhkY2\'Jו:JeT">B/˯cβӵ!5U_2M |)9#:M̔ NK6'F wdֱB#3]F[1 ~U N'eOO@2lpLO)\nnjaT*w"Ү ߨM dӛadP= ,AP\NWh3KqߒDž҆c[˹8.LeES߾fauH;ܤ:bhW\d&G ` :JjvPٚK<ͶuarWS=sڑ",*T TF9%":lRk<1Z!:p#z}'ف&Mz^Ѽt}DUSkb_q}uQS&aGU[mrbY|*I_ JB6[Ed 5"vVkEt>{< ʿ{륙H>oR CEA.wĜ/DaۈX91>\%5Λ9oOW-X+[Ŷ,K4+@:gE$ElZ #6D4jQOh'-'\ZQF:s+K[>Ug3h[JADl1?$~9${Np|M8 B.kaY&1Biw} qb?IilfF9W]P b{y[kQrwf0~=3^aIxE^~Ձ3@(6t=)(y1۸Q}qsߒV"Q.l0 ]0 vQm hO I{P}1~|v̋iRO`fP J%oeqǶ,#`' )S Dcq?4׿6LC"_Z^j4Պ2(gO08f\!#م؀ߝ( mEk"bG7wʖԮ$PYA$2$S*æ6@u҇_ ,voQkhgά$q8#e]d25И| @SC#梎:Ҝn*ze[bo옘o'vad@6jp_ҧuᚲ>X%Va5TY]OZz|mb8%1T (\0KtԻ6 /.""_ cLDҴ28bp} 6/'ױ^o w;ˆ cVSC0#p o;[{cp2Dq48dq.en; [ض7SOV8 ؕ̕ &rzr~p:\"4>QdDgwK SS09hQ< G+_GrxZ6pFAl .P*; $::yz*AH͛aד)Cf4Mb&=# ݺDj2rcZzv?|Ez]ko# &ePAD:hX.4s@ʏTQJِ9f:t Bdo;^&g&_Adꆂt reh6P s ڌwljZ1CEW0w>kb"@lJ,m^PLSQF^㔍n"9UY=n)Jaq:b#w=";]a!~PzVc G;79$aRMaU(Su6:m:Vge$_ _ U jbp"mNJ/ն<-%r&}PaL#ʸOeB/ׄ h$̏ ݯ$Gk6_c$^f\뭞َ$l/(>IYDED0Wp]a$PL.HZ&/3{.;)vBʩ:{.lgAMwN )H+`Xb]7iG !5TeedP4 Dp]{Pa .[AXr-["44T9UxO[^ Ebu-mj1NQ̀&϶l;*\^LVtU'LСLҦ ;abJY"(ȬxL/!4lM#{Ej{@69`%u>3d۠gCs;fM/VĠiKط~<~w 2 r$EQ3S4ãW 'ƶs11mPH+@͍Ҍ$ vz61Z"*1Ar%C5fշ}<Ҳe2Gi6ph-ZO(|gk &uWX'VX=e)Ɏ!´GmǗ;)b7RDIޠ<mISH- /z"6})s n+>&AE:nDTi!hE=}l99K -N1 YٚMol yb-U_'dbVf,Wj6$@cU#כ肦+Ɏ_y4 =m/r{ y2f|}-HЯȲ 2(ppԋW of=ʅRdrݠjǒWm?g)#t9Mi䧌maڣy?šZK^S=W.$c tb1] :8<y:;MGG|},@7 ;8m/4 Gk]GQ<XcRȿ박V`6e[8f_R\ =?_ \ږC?F|gp %|{^^SpBߔj+iQmt`}`ی Ie&w7Yaes:!޹hlFBɹAcvr ?pPR]b-<$?UͫhڽPr[5Z(@Bs(beS=A{Iн6|+ #0dMntUi2 䩮$J0L <>=$&kC%6素bp|FR ¿zv~n˶|FN[Z7F!:lEBDA뼍V7/u36@#!s(XEBbBRQ5TvkV4)='0\*9FMOY%gӻ9OnG-K8ke޳si܎c,TΫ쟦[xJM1ڝ OY/bz nraxJj<񵟴T0 V Ŋbށ"3*f9`Bz͠MyuU&DE͔Z׫ )Ҙuf*3*.$D>  JE_ѡdz.}j62/S;e[»`#ٞJvs0/ 8 =]׼uz!!_3?Kׂu'^T2{Oj^IZc>X@;Z[V;\D(^6,|$pɍ(ASRۤVZmi)77ڑۇg)Q> G'֘u8*}ibAh|L6okjCKO~ IZ>!D `@~@X ̼hWHx+@Ota}A'Fn^vP0j; #W*?P_?sANMd " oCRҎɑvK$RdM{RQ0z9Bu+ylH; E9\9iPBmrmW] I^tmUps$ ZNt!M seKWBv6{P v#{K}&}hݥp(~5^by>v];XL}>Y0Z,xIugr sCgPo9;V>[] =SC#=R~w]™ѽ|%JdkF!ݺn)uŴZSiDa]c)i 0fu4P1^-4M  \򗼱_tFJH&>LCdҐ^ b0LIm!:!FF0YіthaIAzQ/챩;3 jB7\ J6:#5$PD*}ы֐ʉQ$?}G[ފRw%ůrĵdx]?u:DB_3c".<mͺA(]zF-%> vWe*U1o%dĺGaM +PCnf9arq|@@?eWv:Ff<QD(A)o&qsڲ PR"T_˙wMiK6Ry t?OaFqV9uŹ% E4N@|˓4O=X_ZM`jʍ7/$hR^8hih}e%l.A ֡nЋK HE ,\$5}Sk7zL>* POaOb\!ͧ (t/'q.Ѳg<ծiz_~WvVŊ&Z3$*zvЂƨM l~5c)&뭮]`Gs'BĂE"hs\8 _8DuvmF6WkÁQUakk.vR_^.*l:9]BW}f}e"7֭ Ǔ@EM jmj?hmHF'$yk}c{ߕņw$9i^5ٍԞyQB+S^2cgt|[*Y]ySAS@nr G+A3K[vɵ{\$( HFC^* TjN&\Yز3:tL-x 2},}wOl5ʥw{=*s\>֫E*KD{V8}\*/EpctAGb ZCHso;s0<˙2Jȴ mAۘY ӎx.dE_#ub+8VW49RV BQ}cIOC"Q%` ; 235.F#2|ᘯ"ttdR.~BNrukqIzN=Iˆc>xL.9J}q8YI2UBm2}̛KnKQrf[ YpEoXsL&f{_c/1m6U2!PlG"k*x6eBܦJ6-- Vl0mH$ˀT. 8T@~Ğd f+T윂>LeUn ZEM^V(酷fIEVvo{TϠfs[IE6aI:tT}߳)<%sDJsj'TMals"O@0ZSjL-87Á@IΙ|;*I~S;gnj!s;URFuDO#64$%7[5 %OQ};?7cX[u]*q=aX_Gli:{)p5o}z5! G~5\47~F:z<|n{BEbn/eb G )N_ fV?<&4#?AW @J(VG_3jzN)V_$L(_ih9BxK@-wD-BuN宺ޯH3=Eq]Q{6uqU}Q45uR0i& ,ˉ|2[v%A1;_y2p'xqNP@e} 7Ĭ,o_ "Sſԥ{g*^\]󇈵ZhGBQ ~6hWQp];D")DX2n~PAA3~=5;AҐA:Qx:<>wd= hVėNtP^IHT |k̓ ZSM~++1fCNL+rK rǗ>pDjrӂ>Y- ~9_lR<1HRP~aj4=sș}ΪvF[+ײX}UI#f h@|{AlROwv-ئP'b1(#[n137`gaʘhw&hw0S&QTפּ腗uR&v?z5qĹDŒ؏v{`uI2_V5f. q{Ϊ7[^ 'ɭ(u΍NCXStLn *54Zæ ^(ً|.Z3n"=oeHS"5ޗee 8ULW8}R JeK} ؝$4f˜PS%gԀv !p99ss?T{$c5(=I^@y2'W{| cL pCɁjL$2sh-c4]Pg`eDPqh2-yd},b)YT_CnQԛ.`;IqE")͠tkT ]z \7hysZ}5xmaT) ?$n[o\O.8/QVQ$ i/o$$苇;؜^u@MJɝׅ=,%"Yݩ^t@7L0{U@lFXӊ٫ X1hG>_YLU,Xc{,Y?;akun-^ 7܃ Y@`l^SGg Q(vUV$D8UE)tp- .Z.V6\nrĊ)n'g6+hk-\ J-?L_z=t^ՁIF;2nl(^Џ佝"ŏ nm-r\. tTde$0b\igC?yZPޔ&W}:dpg;a.QF'z8ԭ.-׼p;fm~&&Ew8$䈱:N,0&^Hri*}HOBTUVՉi ͥXQTᡮ|,`}~zc9#K`]~ykxT2kLUFޟ0%ƶ> 3yy`E鴵@lwۙ~ƹ3BR)lYQ"}TgMmrμuPf \3ϖ G,UlҾlVXܢ?k zEiYO6 㯀 ++po&vq.BPJ$BLNzkx?+\Z Qf5ǀv-VdCr䵹+YlBWhT&KvA$='@ oqrIy5%P1.J;KS4b}GĄŨpIm ^_;8Eټ2rt__^<Gik;!WǣjAevD[uoV9v"@-ۍ{z>S[B;Z8n\l<ьq[1R[Q'%ҥ8MINHpv* [{7abO2YPf;E~P;fLԫ.K܊Ɗ瓏:߲AʉsG:\ M_*8UΏa߱~ r} ~c6y͂զ?iztE[UX)0*#]\ߥ,f"-3r >W~8V eK m 0qgY|u߫uc3@Ѡ-MQ`q5#Gg77#f&'vqKsHm4$qzeje2n~Z |ȫ(N1 rv(  鍻p( EψQ\W<|蕊o+cͨliJZ RW[B 1Q{#zJGdq] yOXloF΄w1 -zNjGi-}jXbٕ{ yKJYEJMEXue9g(ԋjW#7Ԟ/*B]*ldF|ڏfN3]r9FWBv'r.4ZޕFEeD,q3'Dbq6@WZe xt<-n]j11_͋KyPL( m"Wem)f!qDn9Hۖ%''Kũ^//*ARaf&נSxaB%wTnD^w*`2=5Qd!Z+@:NMx2 $ثqa[M!jK粢Nyę@f\ڟl' 4' ݗ1r;,nz5N{Dz\Iuv$ڕݙ!jL|y>H6?h8*5|} [ B}+lԂ}zQu4$Rc-ٞ7ᵢWzqz\Jy$0g ϮLA]yiĸ{HD W¥'rMlњ]ga/OCN3ŜsKOI U-kʪ ۊ_1,*֋muk?-H¥pW |Lз#vr<ڌ#y6k )5*ʘwkk"*LQ 2:Ƚ>{M2]'wdf/Gj:S'aI#c@GV78 d Ri_fzjxV[:vtY+{/nbl\Rx[g'br}(  W-Ц]jI#)axGO'KvLF+!pcMS{«tYhvt oU'bTpjJdVELSpqJrtGROiSǡ,,`Hͩj 2? %>Lv*S/}f疅S 7Œ|t dC cV2 pL>1(>WYg|R溆a:v!!e'lCtT-,SUHF.N5=" cH,`n'iz\{SBosg-;"|)Ɏ`ѫ:^ `:룼jA2}]e(eѥqrgtt` }U?K޲| Z m_ѿ/e]ZTCHG+u<.fwJdۗ.A" Qs w\7+C_,*G84j)/?E% 6Hݖ_'wW%pdu\AM!ty|(F$`!~ה'~sy7 yQ1QSlS; <_,Y%-.d)lxp/<41I\k_j`8TbisZaM#W&ڼqf:y6x,9zkwKg6$LdlNfu) @'|\V*ޞyr6sv;yxqF-bpO)U G%/[t+(N4ܓ;Ho!dXnw-ܭ"qoY(G`;/HG\A)rgfVn=lJĘˌјZ_FqP.j'y ksL-0KٸAr :̥z}_|/Tan n|#gťl-ׂþŔ\xyH+PRCdfѝ=ELnn2^ w#aYgZ CZZbD=Bnp }o:$1__d*WM$wn"O /&8yIt_8Bjvqkq}eld4%yvn6jގ2\9@.ҸW\Qtϝ\:'~O5|`2.>~ފ3 eg)8.b5-s" KqkkUK= Xrt|҂GZ R@,jt&]!چ;gv8oG$ed6 BЪQm5/")r;>tG6(TQTm,uؿ^FRRFꬬ(@.yJ3776I-f)=kzM΍i=s MWB+7;w;L~,fYL9}Q\+i-*;IQGbT`O%7!,4 { jc*;=;=+b\S;EeHy$v[}"5O wv?Eu# ׅJ|~LTмW9#v}7ro"ghut; @L\LdyoOc;! nf}~oβ5*wwN]D`Q(&b7W񻽅xu]hȷJP$oN%/1׃9٫,kQЉnj2ϣ:|Y"QIvNM9=#0.FWwvaD%T ? פ{}\rL!MC}d(TĿ.AHC[eyˠ?9s,#FbΫj\U=e|ni{ĂoZOќM-BL<&=ylKcx+(f4)S/)bq 6]u8.~AĽ ,aBe[A]ݶk5-TR]/ `t-BlU62ơ ?XN ՕPzlh&\ؼZAK XLÃsr'W!KgRCÇE*Vi^._%,'KP$8cɺ)+ MmΕuoxeiFO3? ٕ nq)mms^k+=CDvؿ5N,zhv!NIQW#<3%yi\̌n{ ugP~o+gah^xI&TMyD\VH㟵$-nԽ::|@?U41$~|ꥇۇQ5Ε_:<5$$šٸC0#2\P(˺틮 JUo Aw/uQ<ɃtGMZjyL г ߔJ-8ѧQƁHNzc`Ec KNls>[eؕQ/,Ym4PR,Ek"^PB=-c=^$U%R U}wL. s <}#* ]^0R9'H xMc,l2݁h[hsWCemu>VVTO^{AfdK;(йiw$#t>BnDHuHKbBgH6{Գ{J{USjWJ;I%2+7}#umvbͬk}H,2$ WKm $!րL }x#&UC0gHUs ywBv&-µ(̌lU)*͛ɥiٛcҹ|dNv4J2q qQ/44KȱY mrũ׶\9`mNNr,M"P.UmkS s3:6MP^Ї~ew,(h8@@L/6$/,o\0dh =pdv lYѲEFJ6.duw~~dWّiF\*7ptLGItƌm iX }ۂ&Sȡg59w_x|ȴ  _fdU4g ɪ@&Q1VT߅ AI% wY:BRHdٴ4EJ(㿿>䵵R_tD+%U&ٵ&_؊M!ES-Bi|x1 F`odY XLO*n-UOGm i ́57rrd654!xe'@%6y [xU]bhvO1-vf|Q #,6ĕkG" 4>>Tu YGG<I"'b5{^t}*pK_rLp*@7]@B+ ؞^ !ԊP]cosi!Z*z;=@5t/Jcvj❁6Z:>Ӑ}wR0i3^[ɈjxgBv7.T~$o f) xt4an 5k揪†Mk9$x?P' f} Ӏ/>70gRj -eXa! I9]`s]-dX`j~ȬMڗ&:RM&&HcgTKuc@Dc}X#"Eafe+3+!=4R㦦GՍNko@~ 1ئUS_%Ycɖ zrfGRʖ'=CL_c[3 \0|fjPǰޝBx:XD,Q;a]4?.w.)51冷]f6O#o4Ggl_mP̎[KxEnRSI|s h*㵣zWQdPknd 1aښɎ\۔JZ+\@iZt.2oboyW!EV폗q)iMKPUjGo_G0NNXXl!gDUxkYP_)[2ыgg_ X<_vu j| wǫc7FE )v`%ѢlDZφd cQ"!Hi5m, S .IbN+DlZ:F3_crgswʋol tBZAD ̹qնgz -v=H{ }\_Ȗ\L 0v)~9Ha4Ͱ4( aϼg [Yxk3Ԣ`*P%:x߹ηL陂Pcg3Օhg5F#О?D 8eC42bG8vI>_MO.0299!uL߅Ü/p#S,,: tdKM|Dt2]DEGӟ!*+۴z@hkR˳Y =լL-2@,Zt/4`UJO2|P(n&9Ĩ0J%ogĶSqE,nIJp-ig[J#=}}F+ЭTQ@Ir/R$#pwìE'[:;0uNctUJńLXJk&d o9DŽs!_D SD8gV2?*jb w[{Tr(y9XWR7>z6-Kz{FC9jC1K(qPbluasMApbqr铱wgg~u8zP@Ž|ww+qM\4w0Zc~t8ޛ㥾JqyGQP!ӆ9D" pJmH9?kD5kX2a{AOOƤ5t OsE9$דyo yK~_xZmߒj1 . 5@ jA!bC*4r,b5Gk\ $IvfCBxsHc4zD!;E\*&}.^QK\F_+lɔiT^{$)5[\$b@Zψ@-^rN6fe3nukBe5 LÏ.K4L6Aj7j 밋 A_O74wBMOjnͨPy Q㴖f/DG@+Nۿe>@?+4z^'|3MyP\f慄WЗjAJ*&PUf R\}" >LA3:LoMczc4idzE%54 Y=餧0Z$wRw.pe@[ϊA@g-s}ĜnN RV Q ĉz7R `ͤ5$/cM!iu1F &Ꚕ_ bG#c2~.(d5A,%D ڍQ?S Xk-xu lk@ku >?ʏEhrCdz\ys1ZW"e0@V9-`UGU~H?'\ 2~NXM?HB`B-T~?y5:X{ߌS:ee&$YrRJTvPzŀXY,FB'N.^;EMmi&v5Gژ3uy*p C ǡg[6eRs(AM7$ytd4HTiKyM4QWXȠx-PM ]z=ł)gHQ}OQx"Ia]!}P7}՚ *zS=n!#-! K|Jbe|瀞QNcO[³yYaw6?al_m/[3b:Qd٤TQ54" %3 (jZL 9քf4gڹ?xW ՁG/xřl޳ɑL˛[4tЌ|^dQ"ARVr1?kVJ&ۇ=7!ҵY^[lV[Q#Mڃˎykzwv׍q t崈 Ͽ` uEL6 l1&mUGLpl5,M#g" sp[/03dDECeGɕH0i*ZO΂[J_" yJFDg5OsAr[52D6j< US_~;4∨sZcK2E1n8ԝNF0L@I#t\0zπaSY:XV$lۄj?vn{qf8DIy:Xjhemm&BJGY~ !VMM  $MJRofEr$@y@h+sFӖ֞\B[ PZBq-2a|e_&^uNo\=!U+B6@rh&C"ψ̪>ߡ=+ݩB0xԇ0Òb${/Ў 8;<G[JB,W ū~fJ}e`mç`p~/Q20&PcCO5. O (Hu\1>k&TiB67i:t S_ΟaQC Mhio^Rxă re!VzsՒlk~;Ld_ǚD _/~>Iyg[[iKLS]aid=,d-bdp'-SU_d##cK2ktGOMjmɴ*qx66"פMgE:؅G3rVGrv# Dɵ`ѪBn e=V7Qjuy][ \x;KY<0'+0|wZ !Hkz"{%2N᣿z/eIg> TTLrf ,MFi,K 5]y(5on2 yTb("M=eYaV+XvLM;E_N=5oi,Bp<ˇЏP'n>f#[W)?%|1_b&ւ*._mgfЌlXWYʋyd-|k]n5F󿫴A.y:>XZ=RiyΨ\rpCp&ܒJMŝ\-^H65CoIm_ͭhy;-$;\W;Yh^ҰAೳ"ExZ8ZDbؽ`Ac魉vGE gX1daly}F".PIE'E^1\Ӏ]JWUֿkm'ZY?9oqLkD9l{{L2emDf,R C78[Ul"!1Xv|c3H1e l4).G ۹he5#m>~ȗahH7ć."I4}vw'1b B7FpX 듏Q, 2GjuI.6l*C.[x @W(j3l%UEn12bvq#ZYUE=?QQԫ߬(|m7ca?*Fw AelʼngI8Bۉ/W >*:mm-g?J½j^ddoU,k۾W2.Ma8$@cfkW DY?*l]3IGT}b\# %k%9V=: z4Pc&O G>`iMX>k-zHnHGV_ڕ"Uu#k<( iBӗ_hxR  Qh)װ (mR_&K汎Ÿ+Ni3&[|H8ZLմ\" *$Ey% 5 }3=<&F2(яYUfzW^^6ْD_M,~،5#+~hGAy#uMvHP^#Xc/c{v;r'ٜ\3Âl{+(O#~h^qjJvPbcqb>: ;6sW!VOp +h4.$ּ8ǩ*fjs-'F0h5='@,>nJpd}$BUf_H&eX]l3T.(`{ɢt IXi [:1v5SƆrʏ2h\{I>XjV[ {&ę6k?_V%eJ*G^6-HLs"`b7oI9f-6^%_48qu2Yߦ~ ^eT**b*tJ : ~қ%bV}(eaϚy՗6϶UzիjK[_DYna͕sp#o;V;K`b {i^gW(c_;DOV_pDHҩۧ@'ݘagR-KCI>mىY:i'|cg=PPk9M+'_K:.:ej|⸴!1ʴӧ|m֌c=VI&Ό^NN}4}̧A3ºJI&{\Z[%BƸ;2@;7 -d6 hi"H:;«g7q7\ŵ !qZa%]RLIoIh,:_Q= j}"ƋG48f!mj*BIC=uDCa24AaJ'0MΚXV( Y`ԤE;r*3PfWF N}Wlt GmJfrz=2tL~k(Tl{r+SBuNNx 9%:ح2P&:*~`tyC)YWAOӐɊT's7nԬC4O^rqʕaTݪ|Γ\<ײZu, *eb¶J[jn?ish4m8ܖ9i$OP^TuǪpy63d|x繿M;|kk$KV䮲 V҉?F| %ġ2P? i©H\mע9?:dLK 3r?XЧ՞% hrxjSFw{XWR!gL#q 6tJs-V=rXn Ahmbj+ .*40du_=1\c??Sc`EQ4!]ή.[r(RҞS[l02C-Hhƻ(*&+Mh"̘:?=410 *xlNy! tƵqckڙM ^j^=Eőe,M[|)ȅBV-pZQғJo)[̙j]/43?b9Xv2F9"uc\׀O*e[W]zXɘ3sMޮzN# Ѯ%ޢ8M L_\ :*w|(+Cƙ.GugpnTө0ƺ: !>A"֩^)̔sȋal~%G|$b*e56r?8^18ag.\ͫгF*rlT0&S7;0&Sd.)۞Qy<]Z=P:;Nv|~g`!Z˴^+Ш[p6 ]BcVқO4 !alO o,ET>,sOgawS014 +`/@*^ ΩF^I0ߑTQ%"2'ƚ)Ekb) 9d4?oժ ^"Ǚ}&\'}rs4m63;!M%?\,XIWS(p\ Se  8$4oDų]{  pS.K]Pٵ75Y-"K G43U\%|ya蝔?,N'e6qА0]?7F aK!G.Z2դ[3Sw>KQ u$t"4Aہ(Ye LdKl˕n$T"~GZ ك?Q7xgAɲvy Vp@G1zg>HHh`Ѹ_bsVs+@6 V#c` טFl^~ 8bQݢ^|e(7A׌KZ0&&U6n,$< i5W˄ҨIĴֺ=V-J[UTS&&Uiya| ām.t~?˩/Fw;y(>Dn|;Oy4^sN=!J٪gYĠf+?Z(,|o1iP̋Ax@s::>ɖZTn+9]hp TO5 #MçV_! G`lX|3J֜;LҢl@R1r*)6#W?PsW!"Qz[BէA<v8+dה3B'wK4"(hӼ"lZϸJeh6vёj^Q CCJPB(Zw BեK`̶S.p,d3 })isTN$g:0N]V_!ḅb. E4rL?؋y!/_\}< ~} #G*6Ci8 EPiah8YJ#d#|64/Y6bF MVؐu1×2%ha E"`j_  ްylY$/]ޔںVe*n q|hQj`ԯ4/҃_n N\҉: 5BвPr{F?3E:frV]QH#1I&yt/Qu/Wuyd5rjUN~x׊D*5ZԑohH}ҫSnwLkVn_/3 f|KovpبhmAtRwot],Fhk0+1}ڧק5B>!<:o qU_x $P?I3,%1<\{BGJnG2b$XqBΝZEoEK;ȿD>gIE/EȦ/I()1%tH$3 vUO;Ξ}\g^>zė a_Weol͇$$W}2K 1@pds O?MB T P]Zӈ>Bm'[z/.iE$!O6[.eף@-@|ya{5RjȻL妉;Zߋ dRZ<q|u_] dmr\$|jMp_˦%Xi>'Uխw(m.O&a=!zꐤ?{2$?"[c^Q / (82Ǎe8Hቆ*5vB2Ѫ(YTHt<l`"֨ŗL ̰脋;>9! iv*zܯ jb[/ކFi٠pO.a'\g^ӎK#l󗳘=a-%J?oT: kĺcgwUYp_R7ٷum <_r$%>"7G`XS|m&rX1k<".&6(Cm/A޿|6ɨ1O?> G v& O.j@c>=]v%T5& a<${<3f/{HAXoZ Ӗ[!$_ H-$a0:%a2Rb`YYNiTu | T׊{Yʹ TӷDH-]4fe n|Q2WzNo9шlRPzf@߳5Volƕ l3vo  ,IȶryW7f,0o`bXKYWgsYmEE WN.J6:`C| >lƘ\ZJ q&J&/~q|ah^C ۜ̆v$Gdh4}㔐|ː/džNDV] "i6a?xi_YׯWiL6~i} mHfU\B0{ҙ%#E+Y}_z[L?d:KU{QN4I@L3B^Y}!.@ۖY,b3YlEu\Z{\}F@촵'U(pHcෆuFqG>a5E^tS}{t zKM706KqYU,cƺ95 TN(' Nb4Q#N%EkZGL4U. lέ?Ky&d9ћ\-hM9Si^3!ɹC`)Teߗ KZuM[ bx D x8J#8$}cmy Ѫ9bw^Z tTYN}dUbk&O5dMV굏[.3t㝿HId^8>/j$Gl5m2A8"H*kRGd[ ߵBJ{l#դ[Qh#=54;>vSMnTV ݒ þ/=(NNfKSu^HKJzQɍ f[JDPiGʊcPsH=Y>PLmTl~UVnPv;˾MҚ FYyC/ɠ |K-ݏI O15mI16,8`rH E5*V4U;h~@TЄ-=tViaWqQt7ޅ׈s]tm{*W=x#s(@ r{ulsʈ!)Ho'ܪ`kgXLާlgI:'ZvM|aHFq}sݼᷤmF_׋i(+8]Aebn\=T|.f{ گi>$Of}tYHښfb!5^̧⊽UP|RIF@bGR^ =;0"fdFH \MnHWhic%+0)sSd"VvYv ĒQ7T6Nx+##R$콤Qۨ-eN`t-ZVW}y0]Vzj!IaKZ9wrP Kf zyScϽa*qk {,2_ιڗs|,YLYKw2fz>H@DXPt{X8:HZ2QgPTŀ_h;-Аk8.d,B{?r/~|l,1܅Pz 7#Vx.-Yv``X0B+z{~VRꈶʴ,e Ó/Υ/Q\ e%cZ%6\Mf01(*+41gbL%MiPM Y߯˜|x.1fUxB G7np*g!GLF s]{Cv_/ ;B0B,lmRr01*(ϡ<fZMJB*<FRS9F~7anL%tm߇ÈAԡÍa b,[LM%8pOx~s_|ۏȦ;ŧXO2EDS[gO8xK~Sܩ_y=a1!(8$=Ժ-z^̹K~>,:-M){1)l J1wZQ(z7v Ŵ՞X{r4qE8KPa6t 1RD c02'YPo!k'45*2(YqGan@n`C?$p\j/YY@ xY)7%ԦF uT̴0e\z^e.a ù u H -w \nVih?_:ᗙl3 |z>)^{sϕ: ŏ|c;(/3Jtt YMraaު?Nw/]f%ej=0O±)d:y͚PnSu|r;ooz W%+ xyҼ͍Rڽ̺oK:"ci]Ip^/`<]4J<6Hw si&6uT}nbp Zy ¦s2 sW`$]lvqNDtalQ@?[z9a:BR*.ܡFR>60}*@Ʀ!Oj,XiITq/ l6&9 p3LU @|W4D9Av\~IbA灭0"ZK磕(q̔_}e(ɼ;GhƄ mLd=DJ.bSM gK~,TMmy$\R˛=,1Cb794[վM!іh)#ǡFhO;^wtզB$E.bvX"d -* Gd({؎F#^;pO8 ٫!scw^%+ߙx98j$\6BZk4N>% Ӓ ib\4XÑP0"^98~zI!UA.*%p]7zuz1aQݛbwu5y AoL to qWD P{:8Y܉NN:KZ4_VhqSDyZ>ɡط\zJέ07qf;`/ZJVY3,?[a:QN>e^'c$8jy'ο٬׮]lKR5YQ$@ZS`q=汵M]⵲&ނC5.c?(~%~VDFUTfpsKzǘ)*!,Qf2͉+(oK)*k ֡*2+E`w )9\&Ȳ^ϭWJJĮ݌AS_X6{='" 9N'p!jBhJ%m/PcJu(:~a|`sʢ$$WtZaG]l5[]hC-YTU-iq8X|0[4HP Gɭ|׏']AB ݔD^Y ?WZ3J+Lr~ ה07ǀRNDB`&sF  &m9Be`)-8ؕD)ZKǁM`*KK%xpPQ?۳H +zNa\~3T;|Ad >UIjG9y.qW}G aqKp+ *3Ahhbjjf伞I$\I 6ȹp [qln,wʵ 6WCHl4S5ZG?PTRX3@JBMc<a[@Z( ${}U6:y-rfQ֦Q629ȩ(UZf-Q}AƱ'] t)-r] J->0!|R5CۖڋU;ۉԷE[>gcQ$fE:Σdø&ïۭpeϱϒ.V܊:ۧ6&q%"ضbtr>y o.yߴUJL(KMH eiaZ5F ttNuC^hFbbqӧ;0O 7W< `Eʷ4+eDa-zX+&%rJpՈt>n03<=b-|r?gKv,ʴ]$_R•׿.5mȂmq[ IDݏ0\n<]|)@1W;e8N |Y=mP-0O6~"qTy"jE;k Jco7Y% Y1J9E?f٦tJL4*0GobR(].~ѶW^H(f )3Z$Lh;;NmӾ+'}ύ,`F T(  jIK3Aͱh/?Fa\$eQckD 8Pբg۟b 3*u4I^Y+oT&j$+չ pڅ>:ͪ=rli> 'oy8̀)Ar%qD1XdM@Qt[*+O| ;1Tߣa{駟)wF +(&'I3 Dz_ {;ޑoDݎ[Sr`M1X15]bۏW!auXQz0U~ۋZ4wh;]L.SIfg3̴Hچ\΀hmW2"wƠ%s@T[SR$5OF+ lGEqW vQ7{=U :Ix!gPNywK0xfNc+(@jǦZ,%hQ\Ttg8)x)GDO,T/Jƒ'2ւ= NHHq  vm04]_%Xi`;e ꍀ`J5~?.8'H=n˄V&xF㏥$ 2 'p^Ê#_u3 *t1&lu,$$\ ۱|K8G? cp֚_؛*S *oi`J ##+SmȦ3X-[o큐 t{!"}b"hwI7G-VTSv^!cC!r,~=}>S};F= q)%XoXs/ӴXKZ9ewYNvJ-kq}KgbK7h`?HWj΅ܧ*w%YZQ !2@ IΧ?79^N]Uwvkx˘Uw7y*t9)v/Cr /"2eK7?x} G8wBZӧo׫I>4QP}1MXoiP+䅧qH=y*oxkPry^ ]x=w(89*O=^ L~f + }3]ܶIB+9ϔuԀ$}a`nL+2g}8ډ==2٥<)Rm)ФZ]EA>_^q2a#[)8D868+@%0ۼCK=gMu; lV'RTԮ7!i@9B`#R5v5܆S\19JşTp O}[\4eur ZS/)zX32_}hPf__촯k{5z .ODr*%}^lU1dgT=^֡՗rF$)jcZCZdOb B(7lbHuFUwWw֬m'D:Tir*MS\ =Sg$g4_hk}\ҠPm~Dv qؾ&k,{k] $XYEqA֥r0_sSW|ܜ]XW *25[xՏARhy/$? e\):DZ7%3[γ mRW{`rkvb>wpE8 v&sg&N\Qp\;,W؄ߝ{ʐpy!Co/1ܬ^ Y19'I. ?qbKg P/Le, xL}Ԡ_Y0S^WDP|"+T$RP/fR!_kZ! 4uk ԔDUZG@#) ' IYd']a.'2if /;Qee0E8>9v꤁fyP|dabLzo XSl7C JF05uEhQYq4#f4|T?,n1&hҘ*ߓ:O9oGG$ e-.IZ9Y/{`aS1&$+W췃c5j*E87vw~j)dIi(&6ۜm:!0aa3q.3$26xOxD%#W"'4oN{ ~zg0n?)>lA `(+oչ ~UP48 HZeaaJ0ե|h=kې*Nk5<$$vy}#l0zNH묒eqfh)rc=ꨊDSL΃]^1|ew\xP7M@S>Q50(FlcI{<c eRUؖxȒ">~joxI:.\Xھۡ= Wt$\w$ Ek*p&(ny\Rg9cHzaLMG>}~9@`AOd\hMA_6vnw*7dL/̋ 1XuSܗ'4Մ-PToI ${I%8JQ4؎uV$u\LnnSur-X YܭA$ ş.XLhTZV]ĉlnPW`o 찕~(C(23TmWvUJK{'TF2R-Q`#9 v+c7j6k4[ W5"RFsUZj|ߟmSnC{̩^5N F1 ``=ȘRĘHPK;WghޔߠT:,OAL쉖W[_v뾁nT0x셧`æG2ۚ]y0zQiy^[ӂ;~1F:JOW#rrFWZq&CښbtWGm[62[!vx'Kq˲59GKn^{2C<%z;Y5 잋'[e'MnsyCc]pV#9H`6bP07±93AAy{ր#﫪g%c` K'Q. ]* -Ҵ Ū5>1i`[b <] -HEs@f >T`9= 3Bkxf塱RA*.+BEo"wYJsiv6`NhdE?yTR\KÜNIuM}Ef' (ܹ􁒛: ,&?ƙhzc)+]xKCpjPnᖡu!o16ݔ HW]*PFCTq QV:|;nB|ȔQ };֯R#S@%9*ՙxN߀=;2$cf )F$, 5ÿ?5 *4L0NfCGnBap5w5Dl+V͢^s~(g,nDC=J ҜXBnNb0L/ǤZ0gPdWu{s&ceunj'ci"a}#?wH|(Im>8}'Ap<]µF+K`g$R|a&2L_"!mP۶WZhW ̅ۻu肃 4v)%kČ։"'R'   _{EaR:-$?QD9bݨh EpeKh~ikbd>)mg;RıCFMٸٙUHpFtGHX) [GugM={K&|!H׷۳**;cNiۆ\ ķg3k^IK03"<4#"+^ް&0 g1#m j'Ot|ay^5g*T+%ytx,'+!q0ժƢZ"ZB_[x]M9>r5;Et7isgK.O;L- ۈ]hEvy\ ];Kni,ԷKn竜TLeK֜5fYvxI%62x5#xӵQlc\ Ҏ&% n-<u¶P;lZr% qP6u{}0W_Mnj40޿ٙiO܂YWl $׋HiMg~tee̐&Hdrh+lO2G U_RAr[ΏQBwKT&Zz 5W_: S^6`5jtVn&B',`|+pn^R4")9 7Z9uEGmHU?g T';m׿%o9.` ٓ3Dt)\W[ZzS`kZ^Qh!/#^*jsUӽ?\I B)wi͂a "CԛCm9^`ӊ72TxkL.X6$lF*_yL*N\j–[YGy6)ft'&=Kʈ+{4X˳x@#q7J#0Ź!fU磯3iّqi_g^Pj&A(949[$mn; 尯4h7)LN/f^~wzHZg*.)q=%3lkO\HNg όz*3[ѻ`Yy[W;Ccs%3]m22?rRNű%gV,&tEМQNŁ,,޺ҊCH|:]4P'wxY ?uftrCϠsptqQHO$75F} 7J4[>/nfwmZ36Xs&XZ s>~KWHFgUFEuqաbqPXC[|$2KC_*رN:ZCa B@ %%4&}x% c,0 5DPT%>ӸpT4G*N$w~ AД/{u /+%_F屨wo,̷[}|.vdHa̼M*x0.IؙwRuoRÀ[W3'f/.?֪6߰) m^\9,19\qY6A53eg P3ySS %A`/^G@"rX* E~ '݁l;j42:H N@s'23=k1_OOJLFإЧGZVk;XUjއ~3N| !p7&C/qs`'ρa+a>_X ?H`PMGVǡ[Q!3]D Gw6<"=RuzHUJ3Hb+Н۲̰o 4\U7<ֻ;ڎ-pgIH:DS6n8;$Q+rwL^C28OMp`EI1!/T@(#uMiQ_?<&i'}q4hGRF 'IAp峗aCT\) R5~R2O>/{6t!6cfP~: ' ),' iy؛/a!$ ~fR7\Gza_!Z$JB<ҰCZ`OOK aݸmܝH34)xOf}kdBe8E襉hˈ* q@ac^&]Z1%Y_ FpH_iz1+h\)yO,tmrƃRf"!)-e,@nKPtRCI:=.CDoPQJFP"q?Ʈ^LL2V0o?X=!N>~M{$.>NxU n*twO]//(:Ԩ+TA '"X2r3BuCb9C4z f{'Es nX9la G>NSȽf$-bJ:&䴭!øއJ_%ɟڭR `Ѻ*nHeU,2%5^2|DŽJL_Rdx^(a{)qu?:(f;gLPB+M8"w7]|ORQ6b$hz߮( 6'vNe6Mm Y#9_k6'Eh?/~!F.ep|7[gjL!8!dzϫxW-b"ء'd~c?9 Ҟns|ʖnFfzˁ<2;2(^'0eN[:&Fv,p~Af cy5>ܣpg ~7Z2uDOG' +0KWz)ob{,9j'!D 16?X$e =нD0ǰ?%OUMց@S\IB62+ɖȃ`bL>_NM I-Qf`bNWWexA?UM6?#k8+X[Ήseg[Q%Z@Q>Uc2}Io[j|R7 ;%|")'=i ୡǹay!_ BU9qlGִWLgW{JIjRjA0Q]yʩdw\eКOIeNԐY]ނIx} Ep!޿/Gx,|\y^fh߈@GEU* k:W$Aqx?)td_&n:L L@s #ՁF{&CVJD@NvޙEc*ǿ^(9>z~lS R" c̸3N]gFADgd:Uxv:*4J(n1AnW#6*&Ʉ>3!HH&dhM MS$%[%N_#-ty$2S8DL9FDь 7_!V0 d,$0M>a'H{"ᚿd#BɯQ,8J/hc3tf3'9.5qC|ke4* ٭x:>9b[RvP$Ec(E`-@ v2YFٸ8z&ckܾAPy5@,zv8C˻*Y`qJZͲFSlkmCG9*($G8)j^4p3|-E[2EF+5-n&/Fl!.JNc&`}'w4Mb(aǗ솫~.eH&K\z{^H`irb#6 3fD+.%ZBB^J8E$^5RΈcb.jtuN_TUd'^[B-Z]6.ڃ1&^P;ɯʎb/[$sG46NkB-ms'74mVX1"׾FxfVm:)A še[ci®ޑv'7ר~DUb DaJ6Z޶zM VOV!x }9?E9c:6XQTF`uӍ"3# ~"wL{r7ݩ rTX }"J߫W)L •?Ċ%`}rw`ģ O_10-h9yBVRw71H/5(eyu<č.GKGe?6/,ЎVr<yv|w27 ҃*5'&wmS9F1Oslgoj .")qr' ٲyl?{^LU:b2]=*FOx{̈, P ìW͕m[DJ=nu oVƛ4)w3ؾF+D/Wu'>H+zKY9+CI=ו(Dm<(""; (x-CR:XF< 4LUy6EpGckCPY-c RsBhZ헥3!GKE3R`8c_6XJ|׌.ItxJ)tRC… T[ovao"ZYrL&Đvx~+W,?T~-(/=:hPXD9Bd"-#$ Ѳe!Xc7]c;AEfU@.:J.1ٸv7۫'fC#v-]>V5O1ϾLB\/8iWމlA)x-MjȦr;Zg:QģAGۻ?df;bVSp ]0貇UW| Ը?}[+UB~|w r>GD3\" |T^Ҵia;u/Z=dWu.왨g!hP-bΥWj 墶|^Jj]^66ĊP3Nq Hh4>,B=ޭ(pBqq>zŐxD7dT^0+.i 'N6/sHV6ER L,Yܵ_x|6c\˭ˇܟL >7+>-B];۩yI& ٽHSU>.6zOWԬ1&2l'tkʭۥ휶uA_a}(աHxeW}4WT r,8x4,u!uJNDe$%RW%*fg7atZ*۽1C)cx.xI K7-BÚ.Mj3-jOwswkC}FZYS9}S"4. 6$; ܟFEծ. ;P%ׅw⮊Q".msTII~7vܚ?nD)lX0@qr>G U4/aq D甛:E00k9Nw}2wuLJFCGB]؂p\<y*jwbE~\RxH`4.^>)(ij}g[ve4LSXxՓQGfQM'jC׺T#̬"ꎀQ [d̈iw]yZfAرFhKM&lh8^;5qgc)_x-(t@\9mB\V;!y5 ΦBV4 "ޣn ]5^NM99S, <xձ8a~Q_:NC3コ=yvLRQ>;@oq|ջdLj65n{c\H݊.U*EH{{k\9) fb0/9w 8.B$ת|̗ (׉,mO-r|O5_dž{ h5SK| ]ͳ, Pz{ OleM+ ׂYT`J BTfd d}3}E8&O :ضƃ7}UM΋.g4guZ Be].ք4 ,#(P4VF.#Y|s[|QO@ <8?\Ol /B"7V_;Ȧ UbiUK'1p-i) 1Y)>vq#s{}&הԌ QI k!n쯞.}-ۓiYԫo鄨T ,w5G(dDoIyD2=CQpW7;TH#/" Oٝ2&mwi B<{Iѫxp~Wπ eJ%3V-2|s)G4y1[aA鍦ʫ տl d/$Oܠ 2l||*Ϣn~扪DN +='n8PvgzkV)`}NW*R~cxnNvv@f2˱:i-}Np;Zbmc@1T9 (>}|[__=/ۄ湑_BhRM^ acP"w_Hc0gIvJ}QΧew}JduHS6^ǙѺp rT3W,u,r݇9ciWaY0?ݙ@Bn|:/!UJQw#$9;leA;;Ÿ^jX8o~,la!(a~m 7/{sԷf90x80\,֦e䴆AE:Y:LQJYl=[>.gH(8]e/1GȐ9u; 0lofePDc]n'tY+cGrϪBY3%QGu84Z>LSvT cUk=-9t<!zZ5qjշ/dfL:;8*#2rrL=I_Fy@ j%0c/Rvbd0e/9l{TnxÜp8>roZt#^4 &P{e|Oo@fG+%(o}IG]S\xMgS,$,?٭İï`ƃ)e&q]6ݭnH*M觘4 J/:L? 8cPU-`0@ȯ/WE hYa?0?ԾXʹ&O}c{3W<7#ї2Cy2Y_c£PEnPȤgu\_/{8U)3cQRo`?68+U[K(Lаd^0!\=XGG\&tn~_~񝰙8˪ͦ/L(*K*JԾs4mbY2r.<\7j!K,R ѬAuVuC9H뀙H7 XLwYuE;ơx>W<%a?%퉌ieFGz?Y,=Tr/kƭ%Yu9h\iiJM6^Kcn@V%Sg;wDBѺzsӄ=DC5˸:V mFub_;?uz达\XɈYj!Er}\ow&Okj8%[3LsI&S >dh(*maĄXsquyav b uuA%5Q<J;) Ue3G{!?^>ȁ{eH rJ1=VXѺkuN !'@`͟8Sh{.!JXP:]fsoE-@I;%c: Ǒ^7QT:یRv/0p"LM/L <⡡-}(0eqR[:_VPT}g& j:Hq'z\C~Xb~[HM+d4FW^vm*C0mt E ĢvH,N}lQaDt{'lHt-iPJGY|ɞ`"v-} wl%I|BuLzG]]Pt̵'=tKR~Ytmڈ]x"c_ѐnjw+"жgrƖY\6OYR#q7Z=Sr7q9z ^.Ⱥg45m5'7.[Dj ؆QO%,%$UVk";3럠gG4JB2b#,`KEw 4|%(%4{wA7Mժ*RI;AvcA.(AX(mVe= !<ԀVBW!(.%){2))`ۢ,JLj3-FuDybք˾@;\jZD&A9Uiq,=g.+3cfQVnq[mDO)iA%$~ر[yV5w>ӹ|\&Ȓ m eb7N0~;@۔`:Aݞ$ulH2O-#គqZO*NHNfXl1ȓ f-RKcG.ǝ${1jbA!6e&[x$7>q1dZD/7,"N&;-fzaSltb GrGO}FZo+JiiήHRmڳ]kJZ* FomTMӯ-o)}6(G&dyTOyBܼ@Z$(lOB [5r}m=QaCQ[%5Q\S]Zc)hםXRޞ!z#*¶; 0$FzW^<γb튬;]-,L@!uǩo۩X(Oҽ$)tErtT7GfG"dyb3C@-<-=2IvJi"YҸrLהײu屏kʼnW>ƻ /dg4f"EQ:TNW Yl᮵v at^M{?C@;qxYȮ/zy8]h&RGLެ""L7."2ZՁ,u +ttV./qo+@=Hk]}N7cB^~8GЯC+: ykXa=->"@II @էAIh^_R-B{+]f%38J-+ ?>#pJ>Tu[p^:X8k${H A18k @;)q9`6VJ/Q4Ι-yZҍNc+.p[uGkkTȨq_} l2ɑ%I pةltB7$u*rX^&3~(dC@Rܶgėtn%wp(o 'pai'6NX7Zƍcl&mА{fu8hn=KUoNdU]-kyP夸EUEwƕ*N9o<l/&`8=}'5bZ%CAZS3}&-b "9tn @::>Z`1ϰРozЛWWUo' p">]Ϩz TW)"P+m)BCi]hpZK_8nfIFYbwJ0|''P粴m(#68#8\:ۖKYR^g]vmL'*ߌBa{&d⏻~Q"L\l(8+NMHFbkՍN,݂{ WοeZ#3Fk:٩Ԭ]BFNdX>qٳvFEw0xp<p(>:}5y5.IߝVQ羊9,}QÏП2jq~I0c%y<)s-hNt}|v~+Kvg=|ek+YO.L;/]T#F_ "8z;Yh:R;[ *U.2=%'}imIH\889XA^< FL >$'N p # ׺HazÏ)t ӚY ڎ3|l=%G&Jo`1; e hEpȀ =jz({݇a?yn_[8bDNĮЖEfuh~/ #uq"YhW$^p"ʑɄA2vӎjA}XS녘Ú[Ȕ8X]>rq 9ק6 o;%SRR] HJatc7Գ WZ*/wS jz_E1vᾖ/CAc]:ۋ5hwiñ̰k՗14`KGU󿜲k#>פ"]NpOT#:D[#-FX]Jf~ ?1׺lv>ݞ|20 zu20YRݞ\gŨ?M_799Q1JiA^QrNQK+SH6HXGKqf[Hj?@?(7Zi3_ۧJӊu&:A]Vd)߿z#X ɜ@g";S Q#*TT6+ `gNJoXq݃ђr\3AoφB56 (kN@9y^jՌ6;{ *!z4з3w%j8Cv.g%H(ro~(~Ψ;ToH LF][uWY4@/$F"Bڠڲ:!RqT7X2kbK*$TXobHzGқFpäxlkESeA.F1 869~i#Ȯd&q-پFBtY%H D֪_M/iBJv|ח)69 a+KݺlKo Gm@ |pyy _b] :  _RL1 yEsc?ח;Y[J[NFKx-_qߛ'=A+ k|w 3NPU~LDg31.n#_ ca 7[`."y\tNE[bG]O Zk\Cy#GP UWJu, ?\ G&H%U-HIhyjj3l *v)dRG ~(k+@7͟~<{nCCHnNjHI$} afY~ޕF":^fmDmJrR.j p;.nѾ/_96QS^m@\!˭e㜔{:ǖf`jU놄U%0'GI9-еB?#ABoqUecjfy{{PDk |aab9(tvxGK >k>KScN='g l$"(s4Ǧ1:zOmlVX=lq)n ?BSS3g2>i71ml;ݾ8G'}*~|ʵ;J%kY># b6-95ܢY+{[$Dy|D=ڡ7UKMIyAs1  sڨNq#DCh.ۣBP?e}خe%7N'@#64#^(NC х4YLmtl%GYLk~BE~-9Yˣu"#2A;3 ٺK߸ECVڡsiWi}7,Sm,dvۭ6ň'#+*ɟCrX"W.u4w7~iX6t̡i!79_a+A<'.W%kgPʤ$%Z"mA2`r֞-'cd3=8w^Orc Ԫ6%hv,~=)Gd7bHXشWJW\+!S&* W`9q-iW/'aDVj?3xmś\21[t:_X vCsBE̮cVM:~iGܩn"P"O#*'12+8syGCG#$ s_<_gE9:3#. w}o[T5\AfbL\\2 7!5;,\p鮸ĜrgaC\qNm~*Uk+DEepâ FUE{_56,">_{f#ɍ *l{9Uuݼ.֣>|YcvVn?8(Ҷ0;Gs]yj@JJGv#f T+p8DW|~C/;U~&P螿[ n$-SbǠj^E7ufZcaU s| [!8QNu 5dBY; SHBݤ_j@E%tKzcdPhOv%ȐAY|#$y99ł-BuRS ꫄ɹZ093 ٿz3{%xR f71(|@S^9 F:A]pHUBN14Rs:JΰOm&T2'6f:kC޲œCqC&(jU0]Ӑ/r+=.raԻvOtpo Lu3Թ4(9n%EOm2#?2mrJ# ,CGܹ\̭V}˗N:4NB !nx] ߾qvL ^^6DRv{~Sцo N㗈jo0ϯMtF-ְmeXy{׊]4\Bf}yMY3.!d.4uLO_7&v7~2/ { tѻw8_䌓[xܪ5t&$ URv HU+*A*O_s%JI7>&ZWt1O jIvM싰 #6~$̲д+d({K}>RV/eys1XNQ$65*#UBx]z0Sov Sf ڏ{1DE?0s uFO㞵S)6u1(4;Gø%$>pv٣C8`v|y8B)Ɗ*ſ-楥wnSb51RA0sa :1|Í]4o$^^$F5  *:Ѧ̼o Ȼ{˖/@=)^3D5ܷ+oLC%E!rmpT&_-ќBz}#kepѦa x ~~Sڑ{&4ũڀ%г+gd>hr%yIPV+8gXBÏ3k23B03F3?({NێԚ䳕ļ's#Clbqퟛ-mZ] *X#f6}>E7r0қH]\7VK5S-MrGlo;&(*D+(j 2QQ$uh Eܓ|kRhW\rElPG="8$72:1n>"]? I(B?},м ({H'4(23E5AwF3RĀ*E7́N+SJy1scn/ͳ`YR`#XhL6%)ZfIB\.HՅ~wŊ+;?7LX^) S_B5~g+d?QBd*#uKr`t64 ͋h-m=$jZZ&_ʣWcFTm9f|KilH[G(YLL"yyyy.bkw)I=ǏJ@BasFs{M[y6qg%ۙO* Og?Ҙ[ehjw*lyz;!V#}R#kNHEsԫz 1+9[aJxёm&X^V:Zx11F%. 81B=tB{KJjLs][=7x"%4|[i'IYG~ #ڣDV]O0XEȾ!qT = U5J566Yp#Cڧt^z7\ NI{#;s?Zu}NPnՏfX 7olҴLMH\;>ODW U- s32u/7{ ('wkq+Tɔ!mzX#kY mpMЇQS?} V%{Gj=qB@iHHw}~avOܞ(z[[%fcjxBReqx#xb%`t0޿Ed~w͖ ־\{>?`!FI>*:zS^%G]uTp]a FC[,FfCN9<E8]eڻ@E0}]Vq @M'6>g74hv$#UlJkf&~bg%M)_F_L+[oTW@[Ķiۺ ]|`z,YZ/)|8@kKbA@G;\]lɉK35$@Dܨ'<7ձjoAD^cEb'.ށ.`E8垘_ *l8 rq-G ii3_kAG"R{myޑ#O8ZcsbOTpY! KׁD~Bٛ@쓊AV}@[U")a7d8w-/$Qy/'}\G0&BZu,Q֢@y씴&v7Vp\ٿk6F#-gVO׹IRFd*MJ㋥-9gZz&E_'W&pZL bb{T$Ӭezlܹ nAY7,RK^cixGQc9slxuyFz(\biYd6b`9b(x3q;&W* Wh2\-F=Jn'W ŻAhɠG4rŴx0?K19M&)b:aLc$_5-x"r.؟W^SN.29Z&KЖf ؔ5Vfv߀OX{R(9:cx?B]5=,7PY2`?C!dP@ E|5ɦg=Ԧӫ|0r a`'5hrMj< f]vX<Jfni0i'-I@F>.JMlWz 3d4n \9Wu׌5Few=]1$ OhOBL.dN-ym]&F(3YK}СEZt|4bhLuNc2 &[q0^mfp =ISKB (Q[xetF~J2 dڏK_q(4Y4¨x Ϋ KCz$Ter#K*nfrIfe0s5^Qe=?pcƆR|Uʬ&H8QN Yhj|u X')QdV0Z?(*% i2#ljyD8n G=CSeKI  =ΫL &5TVCEkIo'~ wGAEn>^Ļ1-|=`#XZFeM"Y<)Df7x{puLP\4a/YL^aKT2}e5Y0z@X/J K=EI+(w24yRɶl!]qL#:~I;<~^)\ t:W=$K d$=*!Bi(m4 ]p虔Af!Iɶ"]5|dk~_I@߰О &ʢDUc~PB)@%د O4G;Ӡ)W̼kP5dUfT`@}Pw"uL+ȣNF݂u#ǾсXϵ%ʆpμި %'X(b~PJ"W1ye*WT^5Ƭ~|]Xe*莟pMlz(󕣫* &eSC8Hh ,㶈VGᶕynyY^ID-N~wt@{l*ZŵK j0AH/봂j^u`bP_J 9ED"tՄIO%%D~ϳ}(GOܝ|Ӂ+!ɐ0|+WpFJܮP -/3BW;딺c-_懑yO\0j:foJD-NXY}_APOet7d 0'#3rtq7 Έ At8^qwꍅހ#$,(SH7qWXեVxEmTihbz"9gᭇ#{Jg5XD߉䙁.q$q}홫6* wsZQ?8 Իm* & 39A&n@ J\ S~7 %}dMCL?7wC^%X a݊ X鿐>YvB2'nHVŝ'ݦF)k']Tw;7A^I/wE?# Z ҄0[?;#-Y\SK7,0E G0.7ta.\8,/]sr,XEbUwp.5 Gag 8t`*8= g{OFƧu PP-bSf Z[)=|yEqZpqLxC^~AW/[K5tezN&Ff{7(,.fcr}$eEe!3f_\5*K S i+WLw64227liW^y;ڍp"4*$&Vp$/WRZl"}1z,dA x=پK J[]*R,Vg,%#LTќPrGXK G 8^5: >|8暞Ϗ,Q (k٩ڒ+<bI% -',N؞]HtǗ)e}L*p%>y }Ģ.9zw_; \䧔egT`X H|h]>+d 7b(@kjL>On[y TM@ikUM}rIm^8{1PW;gJvW=kAL?*fH20?F"m:m\lx6V%Z Qzey[ˇ& jp2PMXYg;Zpٓ@~JB m^uKN W^тJ5A{+^e2~n_nb'W|f!@kP{<.K2z_tL[Ȃz0]}We|W(7 e5KbkESSfɂ?EIlzTM|]݅_oAό}5x|I#E-# ؊xY> G]䅗'.EU0Տ=wyO#>kmچV>Mpl!ϣEOIn Ґ!rN+&݈uI[i%8qGQ|5%g]JP }V 8$n#@#vX\hl.;_ԝ}$L$260h r~2$ ϻmØzYn3BiR4}*򳴈g_ ys3Tre tBgb @,8_Nռ$~(E~uR=XUSLW , 7Q`ϣٴUN}a]tZĢr`U)k`{K4k>-=ֽnr*a;ObVUaG|+1؄g?Pq_;h̴k[BhJI1u<[biK$h#r d3t#& 1LI~\^-qNܨ Ȑ0e<0}Hwf-B޷H B=u~'TqcE)cޣGI!k_BbSXT?W&kRoumM`_Ϣp͢T`!-mlf.B{N Y_doaC|Ŝf{ub1-ߏZiutʏE" Hz΀3N$YO77PlC.Sr=|4y}b#m}U Z!`؛'sL(e4ɍ."B  (/lnu=tR:Kėw̻{55@tE2b#t8Ý\7"U 0V7K8Q68/yaj,9⬙a@z ArJ*V1.(e(F֕UEs| sCޅrf/b8Èwؖ,ZA"wK/MA =S#NPS^|J-8,8SAN>`jb4{]gMK,1 h&}3vQrXѥ8Uh\SktHoK#+Ғ~`nQT@{C!ƮsQP~꿯~w#/֯_ ]Zd g?`wN,16q_Zպ4CUTR[;[$%70 9iLCaܥ96bULYL,E hPM2{NVP`H N+w}xsmQh>z)t$VdF0oOksh+!l1MQk+[6˭xX9|8eg" 1ڇ[N /|rpp|G}XuQg^K:(:|s* tª=Oo: ;߶ a%zD&ಒҔx&v6{LZ] m{d/M,GPn$ α:y1Ռ~P!Zj*.s f2E:du%F|P[W eTK3 γ=NqmE 0QϨVd/y̸x*&%sPDPF9JA7'S!G6whQA^KJWH1>jJC'2`.o(ww5s pWz4ȁ1\dj'G|s4C;VY#П\ɏ΅ȄdHҡP# &)fzOhE2yA~Ae2.M6eBГ)oٓpW n$v.jNmH[M G[<2PrI撆J3D|-ً9©D1F҇x$elǻ(&C9c؛mb$'dz?`w>wQa0V1` 8d-4>(eWizhX?OvWFy~/6Rg>j<Ê|#=Lş/ygRf?r]KXоBcy3CP$UrOK3H hBκ:h/ 9LAU<.$[z~߳m[͇BYDOՌ]' ?9+o9E\jmǨ֛{"w^eU6\Rxn)U6]54S\@Bв׌zYBY9)]̢v5AhF%D"S;ݏQl+q}y֊L0KE8S*vV4wAĀhgWdoVU NʺZs76Oߝhr (s+@ye'} L!!**96R0 EO-XNt`<ku S\M\оM$K㙅סx6hJ1HA[7 5C 5cZVo tؤ y@Ƨ)ǡRmPSOY@CyY\:p!C&0wF)bv*1u׬YG־Gxlsrkp,U鱠*v3sH>y*Fu2$T.7aqCc4Fɵ&=v  lJUْ  ?$g20 Ijf?ѭdz>o e!ah.\OF-vlJ+/# Y(r'TTwNYMr ,qڔ-҉|F۟3.SSj]2#|Y,1,a+i/WM$X{ nu4{Lu=׷"yTg5{Ɖd# 'Nj8[TeׯͥҒ_`ӛjoqHi/)eQ€}Zř~ Q`xv}G3 l|UqqM5Y*j( _!>="~۲P=E6e9@$Xy/!NٲY1V욂c~?e1Avq,hu~_%է0ΆJOV`P0[?>G$fW` 6m.< î/Fc{<882"MOi s4/[¨S]VO}IrqD<*iQ7~= ڻ:IL<ň/Sv1ڲ qUs%Xk֍کJ k`6'A8[s~OgR Hh`'.gSk@sFa16"}FF[]rq@ϴy!ڜW 6jL,e1?%qwJ~P#1kr]i9˨6 Jbބ$rA=UOo3fJm&+mo{Q7XS0ړuGӵ'ƴ.)uEٓ> X1LHA"gtY"CK?zy2bբVLl3%}e\}k{_H)Sfv ezq??ũ>_2)lE3a?JYoCu9ߓLb$ @ JH8+Lf*҈#x:̯ 0XԱdQ(␓ɒѢxo.]> G?([TrOf`uΌֻm ĈI Y.Ha:/Q(=z]x]ڭiaf,L}{F;_QR\rMQ 3lŸ "cN~XVE gBY)_e;X\@"_"hbh/q`LKzloWX{oJh"w!ݒܓ*lzA:)i;?aL`;e܂`waGKjRT//j ! ID,>ȍjh:[y>)LEfR} s޼B:Xy:>=C`߼:[; >k!*YPoEFS)U-y2L]v!)Rk˜6 4__!'"ВA)^iAxѮ Z9Z{\9 놋B>A{$W2ؑuDUy'h_GlݍЂC9.@qE0&]?M?aJ7 !Sey%T&z,&7VZp۰_Q8n8vʞeLN1UTG3{FlXNc0Y!A^̪t ][|eѴtUUsrpj'5 E7JdnO?&}}jMCՓ)QKd;qWmw{-;b|-bBq؉/p<7n}1OC+~p.Q!bdA٥nDj/E wpt߸}vSC:yU"<ҦV.t8i& H݁$8{@eDY代Htöc!rքT`:jM?IJɈ]ѹUO ";xB/yt̬~ajɟlE? ABmbW!o `:(վ`xxw,T`1nt #Ai*nn#1vߒC#2b^Ca*/˅|?AO..m'ֽOR%W|4h9y*EW4rіKz [<2.0{NTM?  |MH\h5SR3@l2nuk]GE~>1@CTAݰ>@# Tn֑I@_ӁOdnQz;mPpȧ1\.=9g_1° ۫! akY5x,XJ<g*Z7q1|r1TnUɇQKqk:E*crII m~1HVl[%z]x !#n"b)#ddnђi/"mDoV|w-q< Ί 7/S`!}iڠ=o/.-f.sD!%CQ|qqck\ttl*S^("8d:nkuC8m_+J,7'rxQm9dݵϿrJUf-]\L'<(!ޠ.c$$6 #.c~B.ĮW̙8MSw1H?b۳Xj'o? "ja5CNe$x*؍W/27bBbWfeNYU!RFXR)d'&R Llq{(G?+?+ 8*ys0r˴t42 ATi(_u^Apu?,K[j$=!jN$<_Xw)i{0g$dw$QgkC 4*a}xąKbV_j+-~<3>@VW1R4HD4Xud )؄QH `i鰓L6o%[OL㋟[̜# w2|GoVd/sJW$kb/fyzKy;_Rgk <ݠ` 9jr~Y׹b2Zc\d_(3X=JqcDXSuW@]pI .`{R @],ҲEnj#v+hx.XPu1Dlv0"9h`nsk~IOԅ?&)C}5ו9hv Ny{˙א&e[[BjBj8DQea/SSyUUPT_W]uu EIƇbiO@B=+^RH1GC|#M1sX2K}'v"d.S0 eGjPӿ0D. RIȊc#%4܏>M*7W+&Gh;I9~^):) n"Weo % '6A*U?II:FRVԶ{MO`@ vbByW*kj˫|Q%Ef5z(S8&Oe5PAMƚ?oI)˻6ݖl q'~;,%?" uSzCmn$L3⃂5=4ǜp(Z>nB-"T[cy`Z/ 9䱱[Mԣ2+ gsHЎ+U`9 MMeVr0O_ n|(]=|Ej.nYbp0L} ܮ4տZ!,;6h0@{5" G2^";C{6l.f`ْwΔkF=C-R*e-'&11 ɏ^,+f4Ijr%F{t3b:o*M~ jFC^lq) Z5G !^.S;x>=?7^VI crwP̀_k, zBɫ߫SVitD1rL %ˈKE.,u,Q9C>W/^RS\UJ2aM{w\*Y[>9Ie(* xDiATGZt U2zc֧y&bgE=h 㔵,Cd*)p7nϷGK'lIGGD (UY4jٽL\x`hJ;3#etlŔQe'/ePAahHLtb7ߘ:݀.ń48p50c%T8DBZr-R&]/d| ~[!_$OCgqS¶C Qq񲙤p g;Y )2.  \>PgE~$JRH x>NC7޶9[#5apDd)=P6{w%n@DXb>=$-ww%,c{|)l"L,Snw8W[O"28lXX=X$jB2G˲MtbdC؏ QtD\JM{4zvT" %݇xکm7i\[h15I?RXSIY%c3M)nmXTciaM y-Ԩ`_XCW>0PuR0;)1#@hI n f><+?M7ȂkoyPt8q3ADW/q9C}V`m1jk_uz"7{C >l2$5HҘk%B%&$JA2Ӓ3,(RW(xH; 2]tn dR=5 7R|YMj6 G[kN\1M×dVvdtvCuJ˵u&%eWBDN :8A(~ڼw72* .?*P{uӕ3Gq!nŮgs9IGX@$8b>[>l+h]Y~1_bxjgl!Il@eࣂUnٕ/g" LPʲWjal!m+>=]eئm̖@RU,WPJoeztȈ.d*k?{he-KExu|. B-9uJΔG/mcqXgJ8m+| :'5J*,bWB*47NBV]'[Ùhf9eLJt萤o);gtX /:-v~1ظ-F.6_U u(Z-+מּ!Ǝ(x{ E \c|1I`1bhQXc\`eGc媯X H\\iM׶OuCl=\haLڢgD1E6ynZ A'.H]?pYv0eEgK/_+[SqzwhjEJOdW.Nydν!{7-gL.ie$Q 1K1i"eL$OpYSg&iͿ_I+5'9/)$ԁb5#e9O(CrH2M&.ݥݘ_`S` sաqq(H{KiR"G39dt Ȍ n2$TN/a;#npij$,s[ 0=cp4.$_ႃX!)l J:wp3 (o3 7Tt!m;mr eɤ>"> YrV!%2F<Aƀy63,$-NakYQ#%?: mz:cn2 VE 40_lBw&#t{aʏ";%*ᬲh;L`Kgx>>g+P"j*Q445a !*/+1P>?u6{ݣP; f?Ryy?YLluqYot!k>\;Cا\D!<, y ʼ:|ŮeیɾLV@eY4RiC&>\o߈<-uckq pڔD|qSɡ͵q K+9Bm=w㜬~TK_׭:ٕԎû]]!rQǛnK=<>9"ƊoA74yy ǩ^`Wć8ܶ;ÿȈòT\Y QZ-]N5Rza#`Q2z*k&. &\m"Y|]> 53USHFJ?fem~ tƞitogв,vYZ~IaF7rB"ms?՚Ga 1 RMg 1a0^{ ;Aik .kpV c5ײ[b9ɹV-%S?cձk]W<2jn6Z:'$H}̽{ m+^ۆdC40sg[i\9_2soX*;E8ܟQJy+D5x芛>jlwlK<*k5b]JZ7 C\% 40}$_^9s :Ltk7z0,҄&dQ#>D?*P Ԝo>lo0%*&g~CNذp2$`+եaocxbwBZUAFU&Q {N?- [Vh߇ԓEΠF@=z :PhLbRj}ս 2"#9ۛm%~l,[{dA4#3ɇyiqP 'zò:UySk @o!L G՟K=i,B'Qa ,A/N^`6 D@0k'T(g"F`UwQR!N+{yF: ]S6Wm IZ/׶YPy P飵y.'DUkNidF>nO}t +%1f.<N9fX0n@_aI[OqJUꪐpkIBM[$Ěn[xOZpn>c8}ف*ozaHkT94n$BH}ek_ %e8!Bm~B5)67:pWbҰ`F;*<'cWdԓrk!vcP̘3[ϔ9 ;3-eν^xή\,`Ϊϴ+K@ƥѰ4 Hn^pEWޯQZ&pp=D8sۤ"ddM[n۵Ka/*"n0tn}".9;]n6?iʺC9lf}RpgJz%gZ߻Q!P˕]A K|;v׶y[ʖIkdf O?Rҡz?hJ zP#z| A #A Q{1[-ZJ@C;7&y!MۙW}p"efirQP4P}4uAX0@oISn7i{s??0!Gkvx0)cKEB̬2d71Ov MGsF+Mڛ !% ߅HkT=R w:r8}) #:S9څ.]O  &|wul?^sjbU$dNd+oyK{}^K,fABL cQƚҳjN(Օڞ' WlWZv'G]fQN6|ލ (BB%լ8 Z}oH{Ǽ1DjɐJE}QI8zGQlcWzQNM.\4<@%KP]&q < Bx%Cу=C]`L#c&xGP;Ԍ//w?:?!V˞v̙@3M>zV(ў;mv)4:R!\,Ieٳ'nMן(_9!EnH8nnqQ ܳtaAnVw'f󥱊CF?(:TM%V&B?J{پkץO]CtMq#IJҽ- wsZH&+-ޯhَwÇxYyœP,p?-6=J\ruFKq-\IPV~e躍![d,z)̭u_JUP4U:Fj׀,cM/n7f7"P%H6&B k3kRؤ- J@e 8Z'ZfBzK `rDno2yZa, _ S : a4PWjr_%SSA?tGA0A ԼG 9 xj|P8O($_ Y[T>,v3*LOtacacF0N&"LQ(bX0lnjrV+,jNie!$.d~>榌D!̘ WGiB!P`]Ċ\MT@س&>Ţ24*-r3bYXd\eK>E5HHf&Q͉͝S+YZOf{+ љGߎ>r4".alm0LןxI]V-ePGD3Q?!9QkܘO_ Di*y aﯘ؝Mh_3h npb%T"a.G?AmXXkaF 4,UgAFD{keA˲Mu$S\;p~caaz+1VqRY,I`C-[Mmd:گ߳i=os4b7GDv8:nKnO p]y&I4 ^-k:<ߞ.V * s9 )x(D#N 0jR#tQ&'Ib,b Cp2`&|zy~+ZEwهy8|SJm]<])<@ڂyH!*z3SK%6VR-}!g@p^~Gu뻠)NuHYBt]˽Rz,դ-4/3܈t)F' $—:'W%QKPW]/#ک7HHtd09X(qxȫ8*8#mk.u׍G͜![!VD<J`d˞~AZRFDs2C+Q@ * FSr׋}g[dWLiT{kH]C{p"p| f.AryCHH,BU0͇sَ%dBp,&Pm;:@O+>/[|A`dV=O2 ٹts#.22 fXƃ7m.h^{'Vݪ|RKG*A \+{</Ok NP0յtj fͤ#>\G[\[lpqڽF1#?a&%"2.%`К%K>ȎB!9*ѱF*;kRH=Od7`TvT(z:+ӱ) K/eXߑ~]h AHuܘu; u??FX1+H^_(/R:6&99#$О@N˒|o.VW?L3O`"HaIx{%9W_ox쉌 ]9_]hЗ)$YcF6$zv }Bhխ <njaf#@FJLМUDL:zh ?Q#?me̓C tgqP㍭7pWgG%I Yś~2^Xdh~bBFv 5~dsLhnGkrd&Tz)@4Vjɺ낰ăE9ũ+WDȯDߢR9$AtKpYvn)(<-hS͏o6) b(ZV,mC롂ۻHr=>ŕW/TMx|P@f+2fT5iI׻#)9_ȅhi5L޺NZܟle^Cﺦ;~6q4(] = P2-PS_7z!%`}Z~n3ѫ/8DD^8gj3-BGDގFĥQkjn-W8$TFH/i}~>d3H{{l'SC' d8(_cލ;N9h^E|T47:+^fS1]%W35n";FI9~>5\Lnp|Kc)yAE!oEN'7gk (1"g-1(Pv/Akp:l|8}-HՃ{`i00AAjLe)&0"j]O F $i[)\rm Od!F̎('2˧ICѠ53 6sB1& '5ɞyZZV&)U ?]LBe!xFϮpш*Wc-zF9OPs }N^Sr}v~Θۥ a+J@?N\"LQG{M0@{X${i =~, -H2JJ2=;16LzJ$Jw4ivdzs̨.S18#@Ŷ:yG)Q;_,Il?V2dT˵EdM13 wYŌ ] &wh5<5lmCeH]/O})^aK£Ǚ3\-՗ٴA)Fc =а:<$kSxz& /1-AQx:HO6Xxz (kΣ0n3-AʡVY3)-]zd$@$+^m]!Lܩl7U*lɶjGpk=\{v ae{19噋Ʀ Aq<1plL0霂}r1^UP}Khq?{ :'Mis%= #6  [3ݣ6 +yD }PH'b(ڧI*./`=KteK\'4  -}T4R [Suݻ~MJz•ɭ$FvSydѢx,PݯRp0%(]{_YnJ~) QkЧ<`2Q E%)M e"`=Z`;? UX)Kf -,~ KJ>ymڃ"8yWk+qSiA:V@` \#ܑm9'[7ݯ7k#DNnB!-3u @GiLTvy :Gc]O[tx4-xgPt6>˸W(Lx7%C2ylW3 [_,0y953y3X%Olj4^E2ʾxU.ِ[??Ψr se* CxqC%t>>Tzj/13Zduq]oF*,)-|0;F\@Eoc5k/@Gu*];O/p5h_i r*cc(a .&CcPΚ3H PtX#?Ι|KOe!v͸Sz<Ɂ'`3֎n?㠛2X\WlDn^Lc=kxa.3dvVAbe2xɊ]{K>S+CI.PUkU;Rf87:E4l-[wBX(7ݱ(0n ΓF.zvռsL}ԸcΤIL (C3< ~1G %0N,mq9q:Ɯ촹7xaaDz: K1G@񝿾ز9{I!<3gnL/ULxt电?ه1a&Y P'uOwى#/Xoqg{L!(@Ϧ` WT=FL&Ј"PSR\jd).F›!<\t55ZLjIiM# FH' Ue#KRHwH ط&@0ذWehUpL=ٹzhƨ !w5|x\& `J3`_Gy%$NhRgVL=s6^Ci <;GJ7. b|NDύL%#+4J@9E90v,a+`z Mޮׅ(O E{QY' .EqJ[=\Q@3O%PlNj ~,LުU^0Ze^VQgPm׉=i1tI*.ITzE71{= rsY$ *djTQSnU]i`zEGGh=8a{twLcc†%gD8$CGV礓Tn!QcZ BzFݲ T+#N)4fCu ԉR3&t ɘ_QIǣk&C"ˉr0rtG'f^TO!:.+l70`y  |F9^Vi9>ϐ_Kp7}͊R%E,mFJC#Ih y=(o0<8hؠ8l1-ՋX\u/a(GĴ8 fq}_b1Hx<[TpJ ѧAK48j,ⷆ[(k*{h2ؑA+ŷ)*L*} M%e^}5Qf6kΐ yv=w<ݾ Sd>z01mU*4qȎ6m/|CU"C 435?Y3\EECG}k^ij< ReZWp/\d1;K4fx=2l p "$nOG'ЭoG% CbŜwV?;Xv;$4Q91:R# rp$;R ZG>çtB xgm7BI |OuiNw9*B'=.< A}"]w)Ŵ{MwLF0Ou)iu$t7 5gu-]uJ'Vu}}oI u(ak;"JYf-~~eJ\ܷص geNNлdUTBm{}JiƩ" m2i<&+b?+eF9-kh[ML>XH@~08-ʌ_ZtsK>uhbY"WP]ZUt,>Bݰ>!Ght>:JW?- ոˤwR $0/^д02?Rt<7 4f8Ka#S_M=SEql!EUn-9Pp ah~ڌ.5zM&g4g+/MQt>97kKZa1ઈ&q=l(ҷ T%/h'PBBOlwUv&YHbξ8 [eekYjh$aCw}j UNfԑw2\XwS g\|Ț={S.U];.b|ZDO/OkJszYdI'O(|!t:=2 bO>smG!,^( Il[ߟ0K79=muƽ1bgX[Ͼ-ݕ8ܞ뎜ڥPAn^\z ֯y &c(|h?eΪ 51-.87,}+<)9$9[.Z6kn+iǶ~z8PkID) &;Lr+(f˹rsLQjIlSy?GoDo$1cEpd& wd,j)c^aܻEAʚC1ʮiP[]X.~vU~`E*Vwߒx@@&31#`FɳCdA; H:@zpyƽ찈e W>>~cgg;=wqI6jRl]/6dF .\AyĢp ]ŋ#y]‚+L]l9zbQj7p΀;h-YۅzclǣC|eyqpfR`:sKmL9l IޙY9{lIQ 7HprU5. UX>ߏmxmh; /py=x2M+<͸Emfڋ^j*Dmc| N$| H&T՛ii/9O" %aPfqn J:21`;8om0[td1' v2zfye`k,_7K4gJ=Ӫ.rD3]ĵVr7sL>aDB|#8k-saƐ9/EFJbΒ"}Ҳi %l/i:N .S ч?8"_BpM>w34v#"4$wKٞfo5\ѐ̖ ӂF]'bJ }#YN  :sF pp c؊~Y-gPdÑK'a> ۚh^XK"lr W u[! dw&M64`W*#kNk@A#o #pkM@F*D Ald{yvD#`9YgX@ XAAZJ6 C N4R%:02T:^>pba5?퀟oWJ/EL9İ3ƅ4g؎{&C8?m(R:6"=G: hm{j7_ P?OC:&?,::l eL#_M4(KvLQ4D_V3A{|a:q.&uMR[D`l6Ql~(f P9HX;T¼U5i@/dFR]E¶&!4̄ϭOq2~e<minXAB-|*҈[|nR簶YuoaEӂ@#'׵v:vSNۚ=Dvxk,q{Iw 5ư):)|#딎S+S̽~7<B-8OT 7MgqCE<(=r*nhh(?g Rs?t%/d/rVbc8;zZn{*{$xy1x;-R631BW\#Yb8DrPϊ:2tl-F|t?&ȼv_Dj-s\&)Fa;#"{\ܑ{4.4aޯf"GOɨF,Tͱk*JmmmZZu ;G*kXu:MUe⛒) v/6}):rُBYrHZZ^3.w5DԣAH<`b=[5LQ}[bYՇ:n KglP* ˤ*_FKF 9{ЏXcKҳC^є{E,I4rpbLd f!۹|^B;p=Gu~)rtHt" `LK*8L"8wgѺK $)`* f[yX9b ˖hTb_ȸQwX@}iCa~ w|MR=fwa!dbːV=J&S!kJ|F%Ze]ۉj'3@ bRG% 4)wIA7SV n)2>7v}cBE"2],rYţmPf,+D(z-i̮6s< -0dP1 9qx}Vg}ɔ;E&Z.d'm[?s8lTeʣF@RaϘ g '_Q/ckyX *1ZTԡN*Wiodv r p_ Rk~ܥD1ʇ TMT@,ҳ vW 69fT A9c_&CQ] .‡[`"MCDeY'˝3b#ކ ֏'J~N*>3G^SB  gNp<ӛS(P8#{JRi`禓:h+p"Sb{pP@H05iF)L9=t.;GQ=Eܪ'l *V~l6zʺCsS~ IF#3ԑ#>BG'ki._Muo5JޙASP$濡ъs/WV8H) 8F_ܤZ:5Ьs/WO+jN*6ZScЂ{$e.JĨc(0 Zm7 PeT5Mph#y9"7$|'}   * r}a6"EZ}&FЌ&k.ƃ8擃ӅqS8#:E-y65I*5t[gp, KY[-m _#" J rfOGt"g0L *Xj3`η+F7wV Voan5jC++75(+5: "IضeIq$^r"[<49h? 52I2hux+Yt8;xS{u 4(+ &9b3~/Bjqiu_@ǷRn(pLFF2C*$/8.@*uu wÉA854̺G ʃLR9 gZA_eO#~b_ɴ-gw>2Z<ʮܠF5P]]y9U_ږmA#Yꀻ͢v]jUk{͎\M2լ' ?ДG%pY}~$&b\Ђ+^90E\FSBF'$- C3HG۵5怜.TH:U|N"%Q &a D(zWrx~flE^Bk+י A2rX&`@.rwGiN$q5=>@]MZ-T-Jaooq\?9s`?CyCA,Hzl&_ױpaul_I,&bLT4*;(jaϲӕмvvIյ 4<PT>^N0'n~'{ @l8toуKT[r=jyJ"޷v &q^ JT9<WOL GNۊDD$L.b(pYqCR+ hdKcbLV7TZ[G'+R*Ҟ~a58?!B_;I<Wk,o$5ڜ30/i``_ݬBB\}4k`M6e_P-O,dîIK1_  D>6t.5FC{tbc +t}~Ce,d+l" *^QhqFx-y󗺗Aiłe|kyrp=Q%v*U#"]w8\-R:a&с=)>IXɁxTL2fn> "]]Ö'X $0c0"%U1x-%;lH&~Ovj|he'j r?w {c8<΋׋t%s`ë-J<tE 7"'{F*.A16(!d=i͹V!\6{Ml; ch#>_f ]e!W\R,=T ?(~ \ ʫ4A/Nhמ7mPuUcfK%+<,- FxN-Q[6 JStXX>M6*IlhD}O{ r)X/#7*G G}JUe ^{v{EW8N<½ *;YNlQ[Nh0ʵ& eN~]VY.`#}WVS8eTEq.$v"uvHe%Kq܌f1;10q}7ҞKxc=CK~#w GfI|Z.7ʇ 7uZU˗j;Y֝[ر9jng,|gVbxC{UOZ[/RΧtW ˙OkHtau4֏w~GıkgKЄyt§BH?z9zQDurƚG} :nSQ&~6h0(k?uWbDC^f~x{Ph\M sFp[ bK!C+6h&%\El疕ڽELB@mO٦%/Csĕ \a7c{?23bLSGyVo "H!tka`]Lk?ɒg//.C\~Dw(T:@N'C ~c*o#g;uB؃Ib۲X,FB_e^p@ƞ ҂MOdn uzI מK4uy~1.z eHՖF\'++;*^R(7b}DI 6p_)#EUqUC`CHNNW UN>xO7ĨU5kж$y[g H%k^UM|H*Fum6U;)"oL[A:N2ard.1 Iro<@5V+g`@n@C0^ z ;Ұw+w 2[q-ѧ@{ Z?WW?&-89mCn<2R*2dt<r)vE|4Kj4+%?<=ck璓yp}J(whKtCKuu3|M"-&WH $v$&/zr+Yb]ʾO)ykQG[/fB*L+\#^%d>EmB-0^2-F r~? Z?_L؞>8]j;(,"\ 7[_tC"ʽ}.hp骶=!x]@j[jIвL %',mT{]kg젹yhc׵pZq?T/Bjhk[=0wH`𰦛D5o{d?H4};적>BiL!L޴=0 '|RX?#ĂA,{=ἔg8ApS(nšҺ Z4rmjkGQ/5Cie}Ԑ!e&4̃$SBW||^n:hesR8 V+t&1PƋ}Q{g{eM3DωQ(\YGȻ.̑@X&Rjj ʖ5{-o{+p%_4^{(~ȕ4- m/@8'|IrU? 7_"ercsyg>v\щ.HծsĦ 3̗ѩS /ZMciJ+* zm$D KzD:+nqJLoo_1DTcahJ8pϗXZ_)K4A'Jeگ gZiy k@oewb`2v߬jS^)AfXw8'|vq@uF%oW:v]ɕŊW: GK;iqH7&#j[N0S_؟ȓU,D,ή,QHL󹻫AHCޟT67?}1O4M+xkN#$5R70qӫWUPXjMA,)pBxW"a/wGr! bu jȰrZk!.boKk/הL>8ȡ$<_Gg[, vs@I~@lYGSg] p-!p 8\)>Ļ`yr\T3NX3 l'GP>R|8K, t} e;,`U.99l:@|8 seŊM͇Ř9a\~pp9A\-h3N) \Ї. ]Z0ג /8&<u3tݙy!GD%XLxᙜpϽ#wKe HB[1OCx G!0> Pao!iUA(Ͷ*L<&.'jyX .b*0zxf6H #F !&IV|=E'u"Ɛ&W Tccal5QBe1NOvh`j8jfU !*Y8 3nao1I`}6߶Z&PF^x;2*+V*Y ´,b:PA\կNjDg|`ydoJd;}EüRׁ3$d秮N{V8Su%r6j>aO ‘~>(^]04U Ttg=5qQ_*t{0Yv@ziqVY?(W0}33|( j?/PԝSjDѼкXVt("xm񐀧m2Xx đ H2wmo>$Wå8]_7d! ;׎ TqAb8E-` m݇c:h5S``;rzŧ´b@wO(-MwS#CGoxbwENPvca{-w['z߉JBV:=g;f v<+V$.?"7E7I?n*|.WiVNwq`'ukVמFxp3hTP;U@Ǭ<5*Z?V8tWI+ۇ"XT+6O^B<ͮJӞWp{p1HhK ?\ⒶťP1o[@"wɸq'>p<) D,+ٸN6" ,4疷2a46\^Z]Imް'z8("/vkY͆!Ka: ы ]\FYat'sYBit,S|0&I=g0l BGQ%3J b21ҐXV?П6\k}˙Ga~,O(b:84)mg#3 @Jz߅?y^-{tb/t]G>X1EįB~ kZSq >;xpF8'i`%ubU-7?qJOS 盌B(~G7QԗR烨.]!O?L;Ҫ>ՒwЪf9[yk529LtE tx>i÷/Z6^'ٷAŪ8n([%q^'!f~EC'':L)>O/ቅ59xhU7u-!s1CyLf?&AaLrw[ [w+N=|xvq֨6 {5iM 3b| %a".#3%%85%ly*3'soߌ,q`04pU7vTI;B j%ҥX\\(z2 W|'=ARA\O|gߟ=az*hl; ܮQ=~,&?wzT%=ԛS?O7A}z)/;t9EX@-TRj L/)j/x21fX/|t?J7)l7JAS Ф@LQX}eF׷XFe?*IxH;| Ew$="CW'66ФM8.ř=mE2Y&Ew6@$H28VU3s c`6Tv{AN;TD|ȔRw ౶KF IO QT-aguAX!Rk19kӨT#w0'H&/¼fo˔œdS.zl2  MN%׵GC,,/+Pdea8U#=$)#Pu:VF *v 54 _iEm |3Oc֫ր]l "hϊ޽=MsrP0"^e\ɬ/8&H O;Mnb;IU׺Eô9gB`RA;_e)OCsQQYVy#x(x;I*5C!e#XcּSjia>5ҿ]֥U^Ya&fY_>ZjxY"I\*|bH-:_ܺ2ҿ |cR ~)e)ҸFP)՘{V%s Č:>eOSf"iڢ v9fq1z# :>Ud0 To7qN&H֔Lт.@LJnh_ɉ@z\GW#UMg~GO>-Tx_t0y8QcW%;FQV]Af;{n" ]  f7 D6*d^~!e2=&BfѺ0vIfa1tI9!pڱ_l#t'P[yuz?, }Ⱥ72=4v}#0R!>s|]?@i*6~*\Eוj GDoA]X#GMMPsi-@sI?Lpܛ.۽YB"SPu.,̫89VΣ֮#!Us |wzvQyBklì7&)m$݋m4?Y"+NҚN~6;VlGѓ3K21m, Bqm$PV6e8c- x>i,('/Ϣa }hxZv&3 )Y@#n#!"#;k:X=Ƞ0a4L g&1:?+Yo:nz>(7j; ^<ؐ3aky&/L~Fv0Nm)a(E]ZF{tQ&]80b5\Fz: e=cM5u?#'> :,P , 7MCN} bgOji& <91~ 5Mk)J䆆Ee?[bɱxY*jr=+ɬV`r?ٵx[΀mK-&ݩ %Pc\|]MCbnC G<eX/v8/Ӓ)_sc4 pA# +j6|-P KCd nDk%;&?2 >:{ %{*! 0 DNm+Bk X?RͺHW 1Dh4e,ccVln/Lt#\k,N܍2n"MR:,j=GN d_GS{blEE6h-fKK9ZÃlg u?dYLAʬ-Zi(L{P@ qBeX͢OS9V쾠2zMe TU}NejV -hC$~&+L6HRYӪ9Õ(_=w͘H1Zs τ5%C8fn&;;]G=HH$g l}X@n>N,hv? #͠T 2p؛Lj:\WdDZKy]J1yN[ǨG!KL7݂%TRm$C͠V$3A^˵Wz|P% #'J/doV-e@}+p|kCƂkQ*0X56c}A2 (]`^E1R4r>i5CVZ?'X&boJ2MNBk ? q.օ3Q8N$SXLy$9-MXLM21 bAEp<c,n;\ZʤS->)7˂o\}gekg9]UBYF?9ݹ }a9XګE$ hWɺ@,Y@o}mʄC 4 KßBvM4FqI])j5]̜ y Rl2 ?Du\ۇ&\mYh !37c|^ GSR}Y:;}&IE~9h{l3?DdUmȃ3;@| E&2"(M? .vO:mmWCȃyE~ itfHΟ{PJ,"щ;W*9&)xJ))bâڕ]icz% t')FU\:ιiP8W"&MZco,sZ5D."?{7% AYej^jPIl#5oBz/6J5؉1y`Lc/]>pPY}BSI_^fP i HA~ZF5WUNjw,4)W(TU*殝* lA0nT> TM^mY%a,g0ln MM-O ,,[McN院)覗f#k}lldz֯z h|kZ?nP@~4G:hW"89%tv Nj9ϝtbfQYy SC=!&"&۩8f_pXK^'YKzgZj]m?c&'('f?8NSQP,㙫&նF҉$/~v1' TaqJ޺A,(CD쾀 NH-뛟;3g+B"Gg2m !V*s Fk+h"Dh+01S.!;rx^>]h6`PapJ|TQ5[qni-Kx&D7\fa;fqX Ǽ_zq@=i`^76gVD3 (=~!Cht?f\4hV=o]rNG>u#n)&Yo}pP*Poi5 .@Qfrc0O2#al%f Tk X{?N+;Fg$v(1W].QcZ+Ra/`/ _nT^KSٔuAVqYe 33OW)}B5@7T\6MBmeJEi>7[pu"3C D LS/ @Vyr׸v̞\^6 u3n`x{ֵ!scwW:h]|^kú\{$hiGx^Aq  FɱL?ܤ$g d XΡq!btO-HҼ# ;(Ov5/FJ^ی/&L֭⾧.niђm'\14KCeA)}q*./,_}Q(J!&T:y؂^# a@# afVa w ]XwYy(iRnN' $#->\bd PlmbV/A^e{/u80w Sy|;M!>wnMN\UH~_xaGMgyeT4qG9 BӒv#L<F&Iջm[ȄFo0̖"4d|Skm |9꺈ܟDע~#!0_]E9ۂ `Qmr)6[ Zzo*}A9 iG|SXR4uacd4몴|&%_ F&yGDW4M5h5bdױrHwG=Q% lYJr|,bQEÍyվ{/R̘JOO*rI5 a?@+YQݿyNHnal? h#6KejVz80=K.@oS b ڝbPìi}/,-2'c-XDM׉~C -lxG,"%ɠmeeՌɌ[8yi-,$B+i{_A cCXdXg>{vFd2k>UO%;kCe|VCϧ٤AGcK\GCX;|tdƿ-=O3e`U?W} n}&C`d .sZ z"#C=/:#gwn–j "T ,GTW@⠙uӭ<3#y[4=* 2;oL@baã͢ uX4EBARֺ8:Vgp]x-ނ 1ú ,ZEeSh6 g}vǔV$oߏw!  }s$Wǰ☨m%ah{5;g)p܎nh7Gk ?Fqٛ݃)V .?/'fQ,G}~ "-A\GpW /Xxy0V$jurmJN).bN{Evw{k}ԒȰ"x&f5 Bӎ;P'~{9d&A`Q A-m`xt7b\5{K69 %lSs@f9jor}PA+.IID&#)6HB@k_3- ImI9:)*G&ABpܒ\d^t=O1!cޝycfY:(t(l+x=@#&ee[W_Zu[#0$UbH_9NظUXbÑt~rtt%u?Oe@bS0'We'sw3yl73 SP|m*xYٓYCY>Pْ{لv F_w9T2:& y0(*+:7F0[R[!0SZQQՎxp͂DewL:V1 s%~>48jF=127$P%.Kj2 ,R̖$\F1_++R8e ?nh{y??ۂ4R0hwmvaqt5>)S#"`s{'f+e07F۫EMJ*+[q<ҲV9G!!U!=%ֶsC4YL9#T~!&n NzTq0fTV{y0ԫO}'׈jЎAM/^ 9 a? , S̅ܩncz!GNX>Q P)׿,Қuqy4"eU!i1K-98W DdJ5l Ɋ ̢`Ψϸf*#}D7H^M.{T5Fƅdj[4We&Y<N .W9a֑uA.겱lC.!YaJuO*:h9b4}Ġ1o >uI᳊J{ւrS'JMwL(msB8a%M є$ea̍/w*c )T3i {#Qv?sdPmNYֱZσoF &9-J#%Qʏ|AUlx4flWuįEdvv/{4w ``0-d}śi.,QR('.] GM V,xŪ:OSU,t7σ< Y.([qAqT FڀM<u'`O`+~3BA ϻ_f;Q/ kѴDd5-٨ 5GCBXoyl.`i,]B=7 }=Ըbvk6u]Ԕ!sFM҃, C6t_do>E W/s~[ KKe?}hFl.CaKOx{kljIyј;jpQFiAR:BM04zء x 53 w(UfB3sa QYLq~EbB_6s._5Lug7l?St=B0LoX(|*e=!,TaxssDL5(F}cГﲈm[LM>B%ud焰U9gD6e[y\0ˣrj|SszO("`ϋ\u)2f ^K?M- Xt3]l;1۸R5p]$I8-Q.Yf@k& 9y K#D-Ct;w-p;2ujn[7Ylag1/!ίj%x-Ra¸*lqG ;1^[HF֔wMӭ e? N/^YwDYǣj  Vc P\W%(y#acxϷҏ{Z&mu_M XZFjؑHc"mJUu ]Q3c9!xA AUrP=)"ïϨ."%l|pM oE5},BӞ6V 2\ygkіb2 M#ھ-[k (2 2P_\嚕ϸȬP7{!1{  =JDsEk ~aza[XM߬7Kc.G'G@lƠqJ~!Ȏn75 )>Qc(qkMJ`NG.QRAş/#?xN;+ҕo1V)yh/OOG&,Jt ^ 'DҺ[q,xT'RHޱPe/r|jR~ш YZwL2FtE[ެ 'c_h^4Y=>_j>+d2kJ}^V1Zj{i.\雊q^5^Rѧ59698 ^51Md28`5zۢygs|b7$P?>7*]3~*mṉg+E<Ý.hWQ(*Lų2Q;&`}B.ٛ7j'(lbvAKLp9V&¡'1;@m^9bǼ/O- ,7yvG jj"NK?n-SfKq6D :WhK-X^5 POlR}[_M%GKJ69a^c8D0kiNq[; ³R-?$꓏yӶ4bO$Bͅbf$Owj%rTݖmhhQ |uO<;OmعU`uf_SfQ01ؚyQ 0Gk^ ffħr,:o.o6 ұ8>WNIPRK7Őۿ_5cXW\fWȪß%KzhLwo CkiPZ3D;f)և$/Q6v(v$]g~>asvP{"z+Kx`hH#qkX4J̊k>ͨy@ʺ.+3ϴRf, ߨt/1n^#e jQJ-d70ս<= tV,"BIn`v赋CŌY$2 .GR/b=4^ XpxIu1i{@px!xgx@JqW\@xk=XPŻ ʩ7ZRTU&rq<|̘k6;2 pR:h.#KZdӷ%p`j]>qkq</~CJlwFyЄMd)x'4ܩYjsqsP7r ɖN[Hv d88c Flqrpf3n&Fł{B%qCd f'+3N/Ƅ1H.m2vӻcy |Tk1GF6ďVT£7Y_M5r4?N :~/Q_vINS&]O^HlP:avSSsTc\X\fe_n*0(~ qVfJ^oq꺵e#ƌؙU:*4$0),X@9|Y8O1ay) y˕5ʮ].i~/aa†yҕvvOj% Djp ΋- zz>}@y܄89+ ߴ6:I}\ֱ͢Y]A4|hzĄ +sTbt@B>i1wlg)`u8V;WXRUD^?*L:bh6JչK:VlG5a4 V$ۄ~" 8tM=|D^*DM.f_Up~幠jHO "mZ+VZir͗sCK`Ԏ )]gdT3lm]EOTGcы{AI߶yvKzi& _u٭ks^l)AsLruTFd{Bc@e=A:`.2/ñϲ堁CahOkq%ODـX% 3po壐X*7fE=ӢKT'3V֛1iIœ(D Bۈ1yaHHsh俱{tA5Kd|& C}ګy'}\hz%%""?Bj'iˈwkntҙTQGֻa%B$S,OoS/k,Sq~7']]Tq,QaMy5frؑ'sB!ڌA B |(yՎ#K]̜y״pʢs`{Q gfv 餡|],@}h` s}').P /o=hr2ɨ u@o 71aJWDǫ;1hi(>j;^P2EqQq~F(`?qݼE RL9ʏ i-R!W~r eB/xS#^7Q !cacE4<`zbڥ6ĄM2! Z7XB1x|\X:(߂>An;$ QC$r귔L+', +уGy10%o6{[+-QCFGOt8+F !F_؈T|VSlTnGzHXm%=cAC=,8I摭 )XVbN@z#7.L[XplƗj=:E$eٻ0103Ct|fO=KCNNh)n~^<#kպU (j^pU/Wi%Qk}Q&}z]n11Aa;9RXJ3/;I#u:Q O\YfȪNP2ҷy]3?c₝ yl1ah۽NY+5pOC|hecnC'u0TYa%Olyɀ$58h?Nd.7J+4U$rwv\}B6|"zJJx v) q||dgb=r\CiyqT{я"4H]H DVpV\&: qgYJQF2z%X| ^% On( @?u0u.6F!SʀMvYI/)-j7@@GwĂ:?ecn1χ>8!b`?%AiMrkD'25s|R-m OEkiS*TF7?WiN6: v-T,WsE" Ws@7㢦tsQQev藛~ٕ1D93pYΆ]3{L)0Di0(]_oңϛ`5Kwc^{) -)NSNUx%M.Qz ̯s4YM̅_r"cu$27a;?gGݑ'zNeT@i2Nb 6w^1%aZO\eο_9fn.w=e"X^M7P|I@sA .˗Q 8>LQ(5 g2{e;+zQNlRZ~u- eȈœ{RU_,9 * ܵSgUfYb p`#ȿg!?kA@aa@MA&_&26>J٨9)cRX [ЊqN9V)8ӻƭu#/:ά苉Ȅb\AWT)}K~˱_MfLjkUʍUJ.n권`EE $t`UֵMsB]l;;ƔyLUk9ѫ?=kI)˔rjf:_2_glA~9Ӏ? eW-9{¶.&Dy<ɔa+ pPPQ3g.K<)R:B8= Wuz`Fwsj:~(of;K~7ʻe9xFLcA vjFl;B ΋`}/&i5t1̖׌/" a$yD ϳ)˹ǂ0?"{(]뗈p"Ei(ACEGO1J;<^1O-cW'OP-)=Te 8 N,JbGYWk5]& I锗F+Śq2W.r\`&]sxJsCrL!+WYB;.S&QpDz8^ySJ+:K'v. !Mv9`E3ךEW~MA'IL%A`3L0O0`g#̲(BV UWe`ޞ5n>Z󪥪9(RR5hkDj4MX W%?R-q ĆxIQE.M}IĮg_{7q;rUa\~j~j<|>C;]6X[o'`sp ރl'a>/B{]zdg\g3I=VZAFJ_ C$eX1/tufIÂ֥nRjl1r Xll+㬬\™tˠh`˯ֻ.yL6չw[Co'J@T /'[7+ǖ`U,7kOE>z E8oE' nCM%a]\~BFX0<VВ07ȦFn|tbP%}+.2TP#<F`&G׊'ʭ"'#|Aj >˲f@g'6:VK]ح}3\ߨns<UxN鞖SDk2=&a4z,{T@QA8?.fko`dwL IGaxѐfwX+?5vyGh A[0|`N25i[a /R`]~sxmn(e,UgB߈PFTmTXRBc֌IIĔ!>ܡ7^)E/:3 g{oQQ[$r" PQ!kng\ٚx dWLUzJ^e%~K4=ճV^c[7"kR|%PE#y2FKvӹۗ;ZþGy/r]#g [[ZkBY5:4 X>??&4W=Zw/ugSklX\AX)R! d#o/5wPc@ ͑n\Av*Wv2XML>o,cnYU^lW9KF@j9 KBl rЅh>7n$(q~E(jDD>Plsc&:[[9Kq|Qnܰ'jKxz L_ETks1N? x$ԗYX% )⩬?{.#`a;F=3B1q&X0f%ؐSX|ծs~>&&Cyp=ۺCqO&'PzCï"`Øqq'"qRrZ_bLUV_^Ե9jT}JTi>S` +<`IXZ"}]O7y#bm(4߀@[&>(mzXEb9 Q9$^򜔫Zim4P;psC_s vE}lj>" ?u ŭnglLy߅H pHm Z,C-'m:v.CJ'A1*v\m%ב̲6WԮk|ԚaT5"ߎQŽ Vpdu1nP&7ձv,`%ˆ1UhSrpNÁXi_agZI&*8kpNc0, Y/d1QIW O;l=~=a>Z |v+rke+%D;wZQ뫭Yjw$G,i@+X!H逺-{[i'ݐcjtMmW6ho>v+ Q Ъ#> RTI20UD yo}7RԸJmqb-]Pĕ S,L*ͩ}+))١U~[%GIĔHE͈gkj66"ċ&o:W+LՆb|#}OCI.*e7K7s_-u,* <eKXvv\tc}aX ]AFY(?2rSR8P98AO-.t ?y[ rgcz3 vh>w@b'&Ylbc1`,R)<Ձ3ҟɅd8zԀX) hQܿH>ϱMc9& !r15'.3ʤHnaxX)'RIMHb;=,J̀Љ!z䌦u6Зo ;/PG|ȩϴETM,3yS6^|Z@b96:d8t8$RucN¦0f6Tbs}8񫿿7[@4|? xB\9)TFB, ,Tq Pwޱ8*%BѷYGUᏞ(l鏾XvN.#ʏ40Tb> L]Ңނ j _o)Y3L^,z||2]od5GjvB?,8TM5;ҷ`=532g(FQﻻt B(wTEzy .;=}FyՇ{K=v冊(ImQ2Mmni~6bLgmb.y[X^7ql^ҵpV\{fkQ^>P/KrMɷ$'Au|}iNP?8 R.iY2~Y2;?);VKPQ84hдSG$-6BZ6Nד텑VҠqy2Cd3=-BkenB:G.!8h4wuE+ad NdI{>6.w(/,aj7bA2M/8u ?imo.7M|`aodǒ˺6`Ƀ`F6ܾ>"4Ժ16C`<ݰE˥%tT IY^э؝2rH 紬KidL7S}R'/y ^F"Ui%QGJ͹8fPN0yHg^O G &hǏVtT8+l}/(d/IKk0 $KiiTA\I,O5Tf<WGf3xbD&H#vE"cQLm4wg۬-q ܩP9(Jʳzp>̓;vjɮf!PԲ?_iBYL\H`L26O+Ug6̜cIn:" Ip+zX[6~)f]G;vASXD8UafzH)lOz,8e’J8gqE,ra\(B%^ą_\iL[aEy;%k0ntBקAsvIqPCx#f.dnJ^{C#h$59.h2S>`(xm3K9C12:|2V`e"٘- +&_㯌sB*WU_&qѤ6^@8ibCuBVE8K|SWȫgS&LgT\8ɻ`'tL6$^ *OR3#͙v6S $ bײiB~owLQݘ'v<"!Q<;Z17T$N痘Yf} 8dhA}i5ܨFOӝ:p.K5jbDN<#07Ub0 t> 3QJ-A2,g|"XjΠ9EX'zǧ@S+db>XOP@Yʢȓ.,Szц(!< Dk׮gducVNm QSdV &I9{S՟Z.XɎ3r쨌\9դÕr~t&FAƋr+vw$^~KHYRP`|Hw.P/ 43jQKWNZ;d>ڼ-r>G`]N3)7_+hkKdÑ;* X8S&\Zq73߅,|giLh,Q]lD]劥uU ɨ͈j>™Z(9&K$Eh +*"^aDdZI*AD%q eX}Rvqkc/ V;5~7B-̠%GE>|28WW8}v"2z_L7T+F[Y`ĕJכR,P'^7p$~Y]*dL.H 濼i=&TH+Ǥ+>izlήSh5(s/f'G@G0,iaQ)B)rF#~Z 稜 -}|[btOUDJgyAUIj^팑M¥f%=>V`H|-a31V4g%,On&t1adOܜ\@uHFƼVw&|/ ,a)>OQ畮u# -h.]:,sdf&;$̴B3MUWi՜ 4zWBz!a XV!r!g-Lѯ~f+麈Esl3p7Bj`Fei"  >Jl90笐JXoܗP#fBLmo]RmSprh"gT栓ޙ hY[o6&/=RiL$lPs>3VƄȤe0G*~=\]Tr=N- 봺sXWFN=GCH_t@Oeo"T62#`s|Kٛ[" R:' u2B_.GwܖAti)NZzv(PFv.PYAꢿkA]HJylk "Ã~mZˢ_c}xnЅQ :~-\9bzd:+ Y7gjP]e{x/BU\+x6'/h=Y%6껤q"V^#z0_rj>}mgW"[N%ayF=$DTn)`Al040*[#%`2s)$R XJʌyפ6z Kk.1,&(K:.)*lqL,,sAµ({mhaK!]jkQ= 񶊜V8)nQ5dèҟlr6ѶGhf>e1{Y5:ˆJ8lu C ~\VòIbuuV}S*O^p!$HgP(¤3EhԀ6nz"P(&vLaPI=L {gaaQ1xϛZ 9&.8p΀ӎ e GL*z4v[`sjȋ;Tһ~ tx~FGN i+#à9|d_WA="_* Gj#8oKELi,t*kwgOb~jEoE_:*@P{]_qh+D+2!Rӛ>QHHmUli?q|Hq+K!vz}c.1?2EZ\μ{,LYҫHZ5r}uYd' i_c K$Ǥ9LIX?ZR>D^ D&Yù_HunЅ&^{KHEA#TdZ>Zb2,D{wN4;"`DDA}u{ȩe*dEAM scuxDgXX r.LIԯtH3yDGo'T|jP3TKQ9ˀ+sazE"m]nLVάC6HVc),n!i9nlˉU" Gi4uGDwA8%>,}Dv2Bnۋ WhF Vط*FUc{ 5TSupZv>" }b/K+-e{fhDzcI搿bKVǧK%i9OE}GFQuӐLd,6)"Pgi~/-PXMoE~4E\n]i x6SK F0 kQ}tvG'5vS۳| dec{I/==2r@i*c@Q۱g -#Z}R&ldΏ'W6(Ds$Ox sb}xN51A%m!^&!s ESî 3Ǧ!SB"cU֞s;[UTXtjF(LƯb&JKr6=rTӴEKZD0SGcK$ EH{NU%ħw*4bK8Ee?^ Kw|SSL6rV'^Ҩ.w U3}<3a6OYn[F#Qԧ(O9tU/FxLdci/oF^XX`FíWn? \KuH V‚0W^d^g!auI͝\$,NyvDҚhժU fֵpcy$$xפu-~'5׎`Yl)Vw:Yb4弸ͧV[ˏ@hf)fdxwVo` vCO%uDH%-i%Q07Izlйk+O^UnS"9RDە[^Mu`>2`pfJ; vEOeq}_%DL-ɘi&鹭|sdbѻ)ZYԀܺ{#糢*tDpH#0R+#LU/KG[L{n*xVAR0ɊCC\x"56tޮFk_j6Н?x0GB%,:ZFhfCCtFJJ U_U[N+n!yXl:4g$aOvrϦ5戞;ra\D2i~i.~b .,E*nA-JcEcJa..sS,:lHS!6inș1i["_of=HpӶ[]C}Xr}8?~?ė&b@_Ukmy8vZ65|Fk*,4'[;8'EWsi*P< C o!A_ٽ'lmF`wp~@@(b2l C_GМ||u42@qDSWۅ4r ;uowѲ9jn=)Ff%_𛻨ko6x\,sA ûk5j.' pH VZɽ;'(SҘdއQkRSO"'$jFsinA_Ckը ^:=\3LU>rvA8?hj]Hڢ1Vof{evft&{zRs?iX]1kLKႋ&y&9Jyk]_r:kok=sY*v'򯉠]hbtuJzMBұBL'm՟o%P_'YBG]b ڟ& {䷹]^#EԖg|,mJl&]wO_+L!?@*O4D$&yq(PIew^![mg|B8u`)b-Ʈ.y%$]@.~cVR?hcֆyh6OUS9ʭ,S]uN.!ozk 9& sMtPm${MʑFwf6~-@KءSA0z3BW7/bӍ[ 7 [ԋ`vWVؤHy+&5p! 5UzypYXnF6G{j3h=αh36صӔLHh0C.](Ojc%\|W]y@F"o>:. bL͏MKb~siL ?{Jc=وIBYt yؓKŶV}KKJ׿Km uJ xVb| M P}#9]up)z+RO⢓ qaxYcLTG:%D3=b{UmG%[g#U=qithB+aQ8j*SޫFX3-huGWJ893D d ȷoǏz|_lģۈMZ!X7 ѰJXC"Bl?[r`C; Hz)4U kh93(rOeo{t%[69Qu=PD N:l6>)_nTwiCѸ JUVf؃c/nK5؃ks"\ <_|{KY1kܧ!9Bu pXzڤRb/Vk@Ԧq4C'\ofR]$ F:~5gW H"'~ȟ >l]WdM+J?wclZn~º~eXVmˁS[̛2h&h fjdۙRGUW"J~i\o*}Cʠ3 ;kPol܊@Ц*"ZX;X1ό?ud~Ioۣ94x!Î< | c1cq'Hu7AN :(3Ǚ`Ts紛BnmLLNtu1ErN%1 VKcܑwh~ݽt}8{㰫x 9t " NճPAwZUdT?]{Cr!ɇEz(zg5r|Z񶋦ۍmkl"u+T~hS52B2}צbƓw'DhJb1UN~M0wfE?Dn nXR?xoa-Ҿׁ"ƉaB-JLcƻ-ިuk uw 0%2ՂBz12[DT͗. LI=k\j)4z$W_1b *, 3WXbӞYvL*!EI P]r))xsx34bv<"P%MEB63r#dBp BhB]iphM5]*Ieóu{ߜx=?!oiA֖$ X2~v^,U}Ԯ{sޚH&dPC+?x>zM2|F;.4֏]F}ہFywX&K0O"aTmdUsRxqwѧV4I%IM LMn3f R&uA++چU2>!)4e _Q~$={tz̊ĬJn&_tя^(ʍ4O86Kڏ@If-rDqok@Aêbcx nrv*cƈ=H3L*atU0USLmt,Գ^P9w$-,Xu[(FBX.~*ᑙ2{lT6\o:$xԆ\t`z7p % 40~Ŭ#E='*? XZ'>]^ӟ6:^/W - `FHxȯ~{U c$g}T' ⒣cFW;C Hl*JWv~#D q[Dڠ z;i~S&.($e{FXm*v0M(hk&EU 0h2"搰*w'*)4"X^0OZ.6]L3F4X0<QDU\*-UO&9LR)[oq܈-߸2~vrgX3_bѡDmUIܓ{08-RQ"|Ph%(#]rU"Vԛd^b?g.=|ѵJޟ]MsfQ3'ECy,$i&Csud#gQv)~mtY [ QhxCΈ?rz~cg56H~ B-<=r2Ѝ3P`J FRX]Nw#:qΰcS }d ;_3POHYogť?]Qm_RȊ'V"ar|3|Y06]NrqG05Dqrx%i$:?Ϳ]7nw0F}_.r.G2 8o:_>| gSkAM.\G14em3 ?op؇ З_ hZq5s6ؕu%d5$8P+Ma R(#|%no}/ }i|/r#l.gp8o݀%?\lcF}!ITySѳU_ϴ:a im!H;Fb|gPEi#1p#Y=uL D)OhgԺuZ=r H ;Yݖ%AV,;Z@?C@Ur|JLM<"Ll8j0tŐpT_`o ݃z5Å;wfҒF$Mବ' DTY[#R0k㯴1 Pb&xS uK>7MDUѯ.kK$1.;.W8i9n0U2~enBOZUpuTOlm>!dJ*`X.xڈ {u`~IM+RkjM6v /]N<@Km:# z#"Ow6Zk Ì&ta_)^d7Jb#Fo(84_"#W"D78ugxiaC:+\݆l | SGy9a)P=eOa%zNT =P:@ !"kBҢlWxp7nW2j9OoVdA<7S !)BOپN՝I @-_wHV#LgHIC,b\:Wӱ<2nW.tDZByt\8êʁbL2qߧ[#l aC$z־Rsd1 LL[_%Ǵwh-"3=h9+ 4b ]/*˲'GO=J;&?9&:#lW[E &p^m4Mj 'C6[^zui6츕:+ Qτn,.馋3'tݓ*\Nȱ#^_vە3ţ*]+ksvaoqgkO$ld[<+1D;;A]أK)RDP&* ݀ x[ӹ±|^]-8}|bX5! eN94JJ n';m72#^\9FQVF] & \3֝Y`?J);JLKCK$ InWs$N}X _}1𯀽kj kߒ*nk"SvusG p22 X_B9+znocL(h_ra)T"³w^շ|2`OTu.l䭷]ϚgHA_2E$8!=Ta6| dDh{@[o ]x^d/^6՜$T,*2%}q[JaʐisI*bų[Nz=㹉Oa45O *cr;t+u"*ag}Ӈadl| &D߭8,H sƠ5l\8tRY0aT1B>pMU&d>'/! isD*zRs(7xߘ:aFb[m;ڹv9Cjyu- 2]0'~4Xӕ}gxӭh4X/O~~_BwS;6umaIc“SJ?9!7P%$V1ٳ-PVyؼfN0`0@8{.t7ro&ؽi@[\p%[e4@zhxԊ𕦶Rʏqh6i)Zn{cuZ5c+Pi7zWJrxdO5Ȃa"'z/Jd,B0_Ǎ+`s,Y97֨snOe}VlEwt$M. tɱ]]s6wd1vD DSYڬUYFn[`yr(L;0)_K vj:šc r»%8|e{[ r:N#t2@z DE. ́3w,0x an2ӕ4UnMv=QBExH1&E8(YzLH S]z7ՈR6 Gw+ҥOWVJ?^R8Cid27$wD n#ü{d aOd}>CY)@xl|KP 5-'+\Q`@#AN_4iMT r"p߁йE읎7n^pqm+-׮& F)mU=lp 4"̸p2zORvUT;+7$ 0=l4# ;Fwz%j{/d}a/{? EYibI|z }icL44}Q[\CUYFI(½uCpb~Aϝ6ZmԆ"Iẑob7g'KrcCSN=o5yv*d7O0lQo({U1cTxpv*b)0eykiN?\qtD^?x%a{dYuy8vIkحa2V1#؉Qmd<[H-Qo/' ZLFr%Ɩ3L$IjX/ִ2i!S{Kw-wɹ'm匽ѡSஸhEA.\M^3.~gIib\fx-@^ΒkIWNż~υPPE=ZtXc}lc/Vb>.AM \ϩq 5sv뇴ެa7ZG܊$1i0R_T>wEdT{1\ݐua?X+$Ͼzk:햯u0f ޞ^9pC(NӢJI: +^i cTNǵ,a0yf< bVz.%nDR<;uJo 6lT|>mOB5B8]6ƄY]z_06~kUzɮj&Rx)4={g$Ul+Oˢrw8-2:83:2 In/ȄhIG=&1ѳ O^Hc޾qAR Ym`>*h&t\nMn越j۪r7(}] T.ˍz!t3 줉87Vp!`#0h8Nj,x63I`x$cȵR`GF$@7⍑.t"TNM0dEYQlpgnTShzMP6zND -mf7^gڍ=̈́ MXrIʽ"_bJL-y754NTnWf꬝坶ݫdž8Vb5iq'Keboh2|EBve"ebٺFSe`@ʆS|U uCBoݽo 2-OЗC*{yn'hl-ZCeѕ!0s27I✩ݑѧE &*$&6nyP{H2Q*.Y Do!F 4NK4nj`,H̯ÍKe%V!VΡ=XǦ<$S+AVky4(8fث , ?zf-nI{u}dfM6 EH-_!񳳥#_>> ֗ *R6 ַx+&׹cAa?G,8wP;PgMY Hx )mkm){f^%0bb4 P<ޗ\-Ñ PSX#xt?_V-tȳy-@y"d};SSomx:'\R(dV[*D_o| \?0ZdGUڝ&E ⎭_L4ߖwpȝPYT&)&B(&!c4Kx#XmY̓3U)?Qˊ|wpdhVbfjEpMd%+/׳iЛQKBpɊ5l,:.lB6zi5@?:no hKߜ(\"n pT8mh/+m\oGzc8 &D,"YLUumg.][4uK]4;I0|Y>OpK uOj7#A*gZOКt}j`S=cPDшn7LGt{Qg0nXFBkԗ4bV Ef"{ph˝xtxrF|6cԣvtk<\gO/=ʵ7 /CZ#qj#ܴjxD6jw;rm)c'5V8ug*^汋FWYˀ$GGG'{xǁfW( >]dAIUQg&hNQ)|9&\|7;Km뚩fHb)!)]Q#s)8 !!k#6&?B\sN+bj&` ^-\n Arϯzdf:ͺ=ObL#H]N?}Ꮆy8TO65}և(Q2fľcHibްFF󵷻ӆy { R|{6 ͗񚱽3qaӸwFП0kSzȬVΤ2XSµm$>Hi-*};*4.:kD,:'[yj<59`g U*Eԛ1GmB6wSa{"UDu FCL_45 ގD\&=S VEfҘClOL  JI(yX=GR|}boB/27@=1  Bc#(HK,Ў#v XD9t}U$ӿ du%%s|l{I?2 {k[;K KOOd[<L|6_r,l]W8^`3W@+-ۚdE A{[s_~,ϛz'=tBVY>+lH<5oFy4I֘=C_'z`uق4U%r!l-(\):}&MBBj B\@`gWIZ;Vbx MŠ=sXzqFq h: >g;׬r; D'ny@It}Ò-8mۍ !rxYI߼@'h_Z ~@)w- 3T0 JYH iPP] t^|  "SOAekXHwEWDvrQY>(!WY3 Kz Z*&#SWB t{&5M%RY:z* -\n鬀N Q/.lxyUOraZge$Ĩr/6=󺯛B׽-`}y&P>$& OC]a |4Ǯ kdp.ڿ.{6tA9s*F0 $=VۮQ>,4rCH‰0*'PaG)w<$PvwɻzCz}6c$꒦Stϼ:BȫjڿT7ϸa?Og v7u^'V'Z:[wy$<; =\7ˆH'z0rQ0ZS0]Z>߹ Aix)6F!~dfE[qVLoӷJ X&֒RV{ Z&򻝪#2!3S5})U5$aln2m.$b>K"!3B:-M6+aoވ@s0:$T%;mN2>u:&OIhR٭8r;ov^Ņre./t]~-):*㽞q]ΟiU"!:gWGOql^ U4V/*qѱү]_=mM?;jp895@2{ln͸Wcfc@mjK0SYRz?.'?9n> 9?S5)Ҫ^kSJgtۛ%Λ+iN";r)Wc]Uf3ީ)*]D8. X[_I06f5Ky_*+Z;5a6h=\(A7#I@HTfz?bo=M+@C|˕I2C-J7"5F|+LaȒёT?P*?hFGA-NC3ZZ ,|/_I y͒Rӈ ɷ]̩ҝd[.#ŽfW#]ѯ6Ss d31ާK*4F}Jي0׽p,_=Q [jW\2G3WЕ%=x+pZlbdg]ƸJ'-*,4ՑXA;42Z'ݠbgR L61$9u3YȞY=WM ]9%t)Nɓa*ʸp h"eB0G =ê:Q:Y*tKi QgS.wD4TcKCX|ʚo%i6PD<0#G0-[F% OO G녘sSч[5 -NJO )(zvя91¸Ty4[]p՚J߾۠)"Ѻ"έZBuEH`#a7n볽JQ]n;4 Sg) UQTfX ׫ƒG]?X7ݪ7)m~ͩw[UzMe֧ ugh[ɉSp @1嗁'VV_)KjQ3%-(H( 6xzL9V hZ^ZYD }Ԝb!H*?tb>? $J1KPQ^ܒ o. %'Ը!B[<>goun}rf&Dbވ68.8Z;;/=m "N#dm%\}϶o;yChg{(9~qg?T'=NCjʌZΆwgq'miMaqJuOB5:~2OyO ]ݟ"#vbnŔ0b~yv[ڌ)sBcxw-#I! X|RS9@y5ܨvݛQc KSP"Y#'lأk\\Y6F-q9]afYOJ ,'eˠrj<%FIauGkbfA$;m bh0OнOawИW<|8r=":R~B;S4W1U^8ǶjX-B2Jn6笗A#b0baL+dɯۺgFQEycp@ʽfC]G$t-e66UfZJϥFLod.*N/$vͧhixxT GP,tlIԢY p%ī;?c>ʑk"zO2C8 ~ W;]a!0ocYz $vճDdMRu <9szm&-i8u&DB,#cELmϱ/!Wu;OWPIPlpzMk"$!`` V\iUIji6w5sMUFΉnv_C#Ì?d$f!HckRu%SD KzՊMAD7H;PWHFsaiu 7Q  O㘮II5!<8 oiY/Mj uvq8@!:P NaA{K|tBPR;1,ߔ"PbYA7;1%+i^wb( S=H(>#;"kACA*R6&@HM9ÿo@%w;\9=f&GnLv gUl|s#ŧr`x\X`^^j,Y9Cf^f.)Z7rMeEf9vLFQ_'PP困n/@sC:Ū Nqk,/2ޤ4~ %)/E}0 L1v] D"gqb?>C |uZeBWQEǙHQ fiPPXifU 0Sxq4f%џ;.30LI[ ;4Ϩrd50.xaO.Q7ƣH9xKlaVzuHF@-2谓o0Ij1p6CvC>+N4mU^tYc\eT9gZ%>Fݰ(ۄ+Y }ݫgjFI2z'AIj*QL<Ha&2qcLнQ]XvOdU[e.yc&w%}3 )s59B2!9Kd:ԷPҸG8#g!OJ>6FR"䃋MoX0FV+T0lDȒ'7xgڙ̚ff;vWSxmE̺ +n y%6`s6kBqXҀa)zyPY9oK1]!bIdi@;U5yV :p˱;MX8/K10Ydi`=*'J`3)=J?Gᔃx.8Lm^,0z! Q9 C6ؒ }Q@/茢Ia\(9CyQT$bR,x7Idȳx|0k"QMh^c?7(oZǟ|F}6 Y{KUHѽ=4';#It\B/vԝ?!IEI\߳Gі kznEPѕfMZ؝]}t؋2=F9-ʠ1dk lͩ'TA [D,X*(è /^>_Gmz!^x}Gn_Eq'}oHT2Z~ɂ,|DŽ \ǛhH3N5{ 0)0vq8@jwyiCHetPIPxt u!H^=17o(8Duᨕuh]\(`z7e}"A.؈ Rh`/uYNL EC,hϒmW:mn<:(y-M5J_q4Vj?rL|%hF(CRN|"/ t%եFBogI!)#N-;$yH!,B<#pψi{`$pwz8 ǯb $neM |DTiXnȶ$ BvQC* oT#m,7F PNs)kdsG[\I)vx4%f4ݲƓKk^"v% ((sC=:.9h6ԅ4jrӋH#w_'E?9=" =q|?([sQW>xN>fw }N %|(feA9B"^ `~chx>Sߍ}γ-fГ8/D}8ZcRlaWS^:mOXF\ׇRem>1_J1q!|>'% 1S+StqqÓkTqjxnqAMw#~79M\`76ԍ] :/19|%EB)i2͛/5'D{\Xݣ+=|1 vOB Pz4)e0$&~7c:f٭e45rOTWhr0f5˭'C,H*vn`%s42A2nB\ı]~Y Øc~_cZSTL{ﵑ*9NL2@CϪF(9J{j~ܙXwQ9LAMg35y7ʐsh&7+m:={Ѕ.V!1@(ѝhI4^Yc"Cl+dm~I2&MԚCnt=6Ky9"3%.ɓb:Ybd'r׼Gp/;8]zO,}GqqE Dx#Ew <%t?~ћO7ס۹:t>Y]U6]Kz}WVq .U?zK~N'RP*l1 8&fNٞUwEqt:襭ϡ]gUY E㟍x8̏cg(d@¸Q~[˧/lLJQ}9}#`棡#OPQ1ۓb~ UQKˈҼem1] T 9DIQBw +da,G}GHmذvVmM?XG_(z]@UeNZi(XQ݃%]|SYw{si)<{cfv4odxxIk32>zR׷7v dň901Ny1ЫfM>nڋdH|yPvlXHMȖ:wGeOHke֭'Ӈ :,ӨoP3Q{$R A\(Icg0񺸿#oMfo]&W@Z[gPw+oa2eNS^ Q4'Kdr$q'1Aѫ.Am``=4/,q @ivz$JA`lT!a~I"  ram+wqgFهw(k QkLAHAM᎔A҃n_F[TnlunKeb{'z`Ihr)psqy]^; }wo3>&ujR>O|HLj$:2$GG H@֊:oB.YJ:³y0:߬͞yHoy0Yn^mq%A]&r_4"FYo\77k\)HiʞBcV9J!C~\n>q?(MYSNgRv0v^ܪdU՜` /%?"$5GMSqO: ǔN(= ]OQk|1o_&vܘz;\>yZ^~?nb%:vBwo9.Yg1v[aȇ]S"4%h__p~11UFOR5ơ}DR/esOK%T8ֆg=_I|S{ IҶ!-Tg+Y< /C[Iyq:GU䠺sݕZ Di9DuC=K@ /;Gt}]Ht>l7П:q"W @nӨY"zsj~ }R({zɴ& &(Ǘ<ȫSaDdD~$jG}2*)'GPF%BE6GK[6$BPcCBXN~$M}t<'HR,zTvK="}3+4fm8>CPNKÊwJYV-W&I__a1v >r\,)ܟߚGP\Ny* j'>.yU*iCer΅Ҹfg%fI 8`cO~C*n>2bʜ '7e^+ mR?rgZ`{-v@WN~#S:E.(c! Qc+Ggzt.iDO}]@k#w`pE7.둔 ge1Ew|2l3(܎e(I*,bsyt z!. j %47~_w('tξSꁃ dqlis ‚iLFk{t .VgZ]ULBKDJ5oMsrn>7aE>j|zu/cãe Kᮨ2f$to"i9S'Vtb HvMD{+&oz:#\JO?v CbyK T"PI8OPH=.Q\i^Pu=67[loeJ o7fvB& E`NFts*ٯFŜ!F50BrڬPtF0!p O|Zhh[TZS8lrTu**{Sj2DVW2/mZfVθI.Q(9's BDG7lSˬXH  U.3ꄿȳår{r@0R2ę%y˧TetC=(7mw,<Yc,IyglqdJh)B2s`9?`bḐ>bS ?P\d5ĈER-1mcMqJtm]b{>-x0]!mZ`Y8cEfؕ!G3XlVi[}5(O8jdλѶH_X%[ab,IE8~t^\/[T!]h (}FaX3KkDRwktQx [n蛠ٹΉDWC_c[bn,Q60%pT0.bCϳny7V]J5Sh =F2єa@O|zʭd0{CU}Z h h8 {׳N=sj@,ݫ:lr-:1 4;=jrI0bXlC@Zqa+< ◗=CydkV)Rؿ:f%(TFGgZ?٫L}ogX^I@^1b3]v Ꝥ~cT( 9x}>= `,8ʆ)KH=1mzʀZhe?Ij®ނl+@/ Qm1 N>J@O Po}7h i;m,p<Z2}'{xD;_CT3F 9[=H#4HAj~6]^C~::|>ǘ<b#4pڗ QDx4|YݷnW=yn& \!;F;b^dt;"hB]xP1K,\;-#;?Jd޾9yx@7QI2pJ-$7r^.J rM.ǟBݥ 1,Q73Fc` H}t2#;>(&T:ڒ;5P d{'\"@X\ vmuqhͻFCJVf%R8Vh/miwn zm EuttFVL9b'5s3Z1nQi=sz^` u %) )"@&3 F'(mn,}f dYt@ۤZȂMBC`:T/}~%;}2">{'(wKs gqmUJ Ď )ᚉVczs*HpA=/F  D@Cgvjˎ[5-Ty'K!ҀbH6Uf炲`~fi,6[w=:dUڡ&&pcYS9G;+[Fj_k='=['(&si edd|ͭæ9z=G\^kH8V<-]s"&^ZJyXV9muQW];;ɨӉ *( A '>!afVg3lZD:ङÞ}mu§&e D ѷ-ZLiy/@ 05x2=Y Y ކ+cׁ (ORktnuEAZd|ɵ$xSWQmd*1529?!NkMG:]0 mreQ脗ʓs(zXZ ,C)t՞ ;qZYM\,1㝰zy_Nc3QnG) $DvG d@, Vs ]y1<fYmf` ES8a`8j@;FM;b_Z XZxs D]sPs'XM-ᵀf=CMޢ+9;p~a=}ρfE s:d{r";֔-~CꟜF1K@#=c%_M\%/]k3 }9PdyTBe*Eqy" "w#bXChӉMl]5Ȋ wת!=vt";$ku~䫿dž2eDSwAU.яS[`*AA(V8SɞَbEmނ fN ;d3Ќz]u]"a^`7yFFH!hC&KtvZͳ=g'l[&!څ Y6!neP5H~E'uHTz:u[ pir 7R\ҧz j-p7č0﵉#Υ0!A ԥ. &xB"*o*>,KFs@@;ɨE![Sͨ IlP ()wZ>'DO坊Q< O"cRyꑦ.&FE PTYΜ^' jV!-udj0Ww&qSYS8stow!C*Tg=ǫ@WU2.'%8 Kw;شdE#bd=>_#⻇N;ٚ)u>Y\OIF2l! ȋpЇ]4KI6ţ#ѷ~ 8'שsMb=I|sy" P/khZM+.XkoRwxԗGkl V9٘t!+&yDm8"qVٴj tԑ@Y%*26+v_8+ E*jsVН,f-rau*mh5Zvk3>V 4teb^ѝo("!0ӒihщF8:nKޥ-yW5esp`8㌛>i^n p~"ݲA2aa`Z"P#:easU(\桰c/@8ƄQEGV[:8+Z+sqqS1dmt5Fº<09s>tJQسHO<(Ԫk_b,4v~ oo F!1-`G-Y{uj'xyeҘAJ!yRϗկt^eȑ ǓѲ<G>gFGknx*F]"UK qu*rPS*!6~"=Ydѵ"D16fY_u*~[Tm)}oimLfdoY C,:U9EGcrc7 @} 8W\AEsQW f3I6FXȹd{Ä`D#=סRv|)ý=QIdrsϭY/k7FdxCD(G'Vi:;o)yfJ0ݰRgg6}HpP皸\|Q} hck&k#D/&6dJq*=MPF;CDs,2E:=kWT ?3nE fKEAAtvJ-e^zTod֊ U" s+tI1lҪ Zm(~8"c…B,IhYbE" |!%s< 00;nu&n' S BY ,x2ç|KE awY>ZΉ#h>GC ʪUHi \SEAZj@z L^ݮ1uaJ2 g,2ӛ?gx進`-w5F,U,8^ʢ>\3vޙ\!ݽ\#j|%R토\eWlxtʖ̖k;J,Uff^{a_@sxw$y[9(B5Ս I Xm~ RJD cy/TE;\ kt?z9:3key1υWXc|l7dJfqݘ#1u4ԜУzL,CZֹCdBTBDVV^R4W%ƝKGWg%?)s^_<.x = 9N 7$LUH5w8IiQ\A}ˏY1&Wt))ǛDs:& @26Du|1Ϥ}l+e˯&IfnEO$q-5qqn׉^ᱵw;ɸg(Xm<*xv9>L&6y:'߉WƸT?N í@J'p~(#g$W u=\1A}kdԏY"+Sa~۔'ْ^+r1i1o+f7_O>Ic:oqD_/G͡:|_3!qK<d-m.C 㝒L@8G.D;EF<5{'r` L AI45LґlUحpe#u[G ML3޸ G ] $H:4 4G*t 6с:lVzwa"@:&oY2Rs]+7_T907IُsPyw/AK_OM/pWzV퓎4;7^<\٥f [FoՂRax" 2(A2 {<7al5. <_m|{-Y]#vLUphgsʧ$-dI3"j(T$IV;I9Ya?*(;ߓFY/G-'P/W'HNV/XrW" q< s?d8뵠h&T#q~RW# *dOd.ԾBH[ y'K,FKq&f?TX7[ IP0]cڧ#,At}1V2]Iozszvn!4tGMZM3 Mf|VT8e%jGk 2I z(۷?l._6 ݬp|`<AVr:r0TF"qR|Ӳ'W-J!:𸥄}ǜ t [8ĞKt{V҇R^OB7d4M8?CUR y)Ne[5͙AM3}kx'<_w./U.sK tDȪZKռL|\ݵv0.(~G_%p($Ky1x4 ˡ@Ϧ+anD h4,JQx1We/oζљj{uZ f7%L?J;kG }8F\l$8/מ鍞p.-6 ŽorvegKDwi yR=Qg2-xYmL[geUX_Ɔ7P98&ڗ'R}tسbYVUjQ>H^7L39GO[F\h3lWEd.dz IIs͖*2̟uw/?wՅkXFd,Cez9$C;X@ ^4>$hB6eXEɇSֳz9 D͸V ﰅ[¥n ir+ttɭ )[fÐ7E _􁙎K_-~ڞ@xA˺UTH6-œaBvr2k}CcTk <| pI|9Bg~]\S R ~6.n;J - LLIi4=D*l8޴vt!#_ofEQ㒍kQ\GyD-$ An{kU~ҺpO $<؁;Rera0If[ㄏ+o:yShQ6 =9~p+Sf(bںаw~cY m5U‹< Dtꘊkt׶?,gc=էLJaެ"'퇿k]E8$M(i(?-^39 ZB`sW|WBqѯ'& 'YkU$st 1ubǻ젏xJ~p\ܿqiVqrj"~g6c/AyTQOC(P݉<0~M9k˝0C1D$" `;ɪPDbN΢k* ]e ,j عDLߐ",#z0龳OZ(ӿɥ,N/0֑2p骖PsPx ez鳫ӒD2LObim[` śjkl2tѳG!||EdG|oÌAڛ!ܚAD": Pv/m˩a\*"ioBYsM{㐐GrXcDT+ E߭P Q/aM$6w;ECmG8.Sc N0p1m]V?36qXl,E͊:& /5U^o *p \=Lb8jz.X{H~ؽ@{smJ4 (Pi!nV862ڞ䪓ɝ B,bh1022;UZwx=kE3Il7HHqpFAl)ѭo+C n1YjB/dq0}t{NގW'ܣQo)|̕5w繰M݊D8R&=p%V)$d}$F? IG#nBxQd4ظ؍+{hbRL>%H»5+Ǩa׻z<}HV{}O[5]P<, y!4gD6[E]hxjNcTO臟Hp?9Bc#&u5\} ߆=6r ugkOBiݧq+1=7} <`T ewHSsD! F6~Q)?9S3.סӻ?bӫ,mW)690ڱPF 7=ǺcQE}T?NG Bnv" Vd%ҜMn_X 09@ХA>Stc'F2ߠаnqke'BbߗV8)ܹLE"b4B$|b M?ȱ>v!{_b;#`gb70%I'2X'֣TCc?W)B_D٬B ɾ {qg 4U0RڋXP[zgK+䴬=@$)瞔8o߹5pH鍑i3 @e;o<@rdIϨl)QO' lVC,֟+D-Wv$,$Q"=`1NJ¦i7Jj~%#yrNADiެ=O'Ud\K>}_GE5ԝe6ߑdZ|'?2T%ڽۏ(꛶ezyb+s}f/QlH#*Q+`1i>˼qP-Ȟ=[G3j ʌԽt1F4~}5:gZ9x^VDLa}koTg]CYjLcI9 PDm&QP0(]ޔdfR#|:KO+KCFzK8F1y޽a{<\+oyi~ 5l@ծ7`,o[N:Qh@qY ?K%p|#Br'!g M4vJR86|J4g\@ 0Ƈ#z.T5'm1W4_}ZsIbrYa8\.E럌 *ӂkv5V9"3u25jQH@/{ᗑ}>$;_$~k1>8oL޴ysOfN9fNt궣%1ijYUdd@rl8~Nsٿ+ lʹmTXf/ƙBS(ڀ;[Il;>.q~q_%wէY_%6zc 6s2 ̲W Z8@&Ւķt΂}*b.Rݫ[aÞeH.'TPK.ʃ"/VF%،1>IPFJaL'_kҋma|l0;r> DJvL8 T{7FĠj]k]D"[y=,A#^%= bG?c-(Uoōx@T)UĆ*<фQY$N e][.9- T(W:7gz:r*:E>wY΋f)Io kp#5˖hR-Ec2NTLH`7.q_j]w7qoe%˽Aڒ>խy?,XY^ ,&<ʞh#ZZ[tqꬖ!>/QndYmEzښѼɈnZɵ,VV% &iFɬt"pUvN08$N?LB)/IBȃ8=6;hXP!D[tDnNgnl{O3'0+ӏm_6;{z,D+,E؀e7FROau4e=&|ól?5u &eM\ԔG:H 9o"; KЛtwa{]gZDi#9U);`-[ͪƟXE -kCMZ!XnFFmӰg+ic8Pۼjх}msRV:v.pcWZCzk J^NfZ4[$-<Ա6 B z#^c y`7G1s.!dI*l}~|GXFncMy5=0*> WS3qPwu<9C70Go{0U- ]W_Ώ:RDƆ ,bzmXwh˴z*Sh 5DP߳%y~gO.΂D' >atLʟQ@ۑP,m,S~*d0 H!!fM,@}IPEO Z= ?~p$]d˯f[{)|t?)AcoPzxc`i1R9[20molDg~k9V9iUs6'CH F'-eJcՁXʭEZ"4MGU?waPS/ C4eck^R $Y#O+H?L1>Q%~FɎOxg%LYQ{w*^.MLRnM1o,˙]9q$!H1Qa^&2cQfR1p<,L1ȺoLw^{#hO Y7Z O#R"PdppO"7ΖʅVdg> 敦 []"6ILolRY9{yRG5s8GBEO&iE5H"!.zT9?noW2.,pL? 6> 7D/5j0 .2OVLp-5 ^Z!"S{k?2I(8iew @ZdHjqro tmӇAG_D@JQBU7U/LFvܤ%)]Y@M O#֢ikO?,ꛡAeJ&7,64-+:ö RsG{+|hxęL( 1h٦>+?{5o03aXVE a'1DYݐHIƞcnOe~[g`i&SF.lLÝc8b!L\Ecss 7V^F,T:i6ѶM%L(C®6qCofpVxUr5,+G)T 剛k_H eJJ\gCه9M'~ш͈r1ܥFKc9mee2h]w6E,#aR51$,lb\6&z ]=^:" oyπ3r*KuT՛DEgU! }Am}F"bYeus0Qjh okV9w*0,]1]-^05\kfWaqbN DwƌQ}Sް30DH6~pY4  ?}HV^C} S,ڸo*bx"Ymw!vp;&:w[_MogPd8=pF|; $  NsZl svBw&t; 0;'<@r9r!'ʠh7]P2M#WłAF|p>~*.Io\@G>Ʋ=@+'P`ue7JA R]hM}zym =!a?|%'B cT"eI ,3K*#dWzn4u 5$~!`u > 6Hp ߥWg6Ï,íe@c;* ' ^k^@gdMP11k/ϲWq#ٷ^pq(1t*^H[M!MN'6)6|Ed_;7KN{W KN.X _[RG WlخC j"+PT~nKgTIQDUUX:De:A-tzO/tAWnF&oZܓ ۢH?y_Z9߳$_hD%h2v?Z^h⑳(mȝ-&\+1'o>!FyvC(/uƩIn!j+4?s-/0XBAY YW*$ r퐓`-YzǛn,6+I0iuNrf2ԃ( l(kAJf*~eqO)o`vL86بeY;=tOmkjA46wkS! ;cN^ϳ;gT 80JS28KY7޻bEa3xRq8m\euhRLZYpC7#*Vt2L]ȬwNm֦ŻG#2?Nd d[˱=j)u@C)yEmGz:x@p(&bZ$GT 9J#̲irG욼#55]p(Kz3qܼջwv 8RxԕvtXOY y@[v\_Q^6 &&twG5CםOz#[ڭfb@A5.ivN}{wWֶ@rI; 5ډ{8uMH"f eg^djGJB?BP-SR̐&&@ɵu?G@fHi_U҄h nu!N Vg](f{F#Xx[zƀeyHsR@,D{:Vogrםn-AE52|m;CBW03$"w!6oV2!Q~{ ?[z gSy)h Kź~NuByx_1װ+&ITo!1斝 &srFGz[YBs J!f;x|{̳ڢ ? C@a<(=0{Og wjiN `׃o~j%(7EKcEt;>Wytz8W/'v{A^=#w4Qʞx8JOJPUҾ"|w>}pFW<:H7 6]#Y )wFvUL< ̍iZ@^1~Ryԩ(h|T井:>#*- 3B0id5-0ה"R-8EABVGc4cK)U#Nd+V*0ՄK?I)d;7p3ǁ>䃊 .[Y EȕM= d[L 'E%\ 0 ^ d`-v!8z撔6[*jØ){x}H[ AQP0ë”owXg~8 ~"V;˖q9MOf8uPYd oٛWo}0NDߋ#_t,qF*Dv9Lkw#$.{O m,^Թºܠ쳉pc >zW"ZsrSB8?% \!I|xҵpP^^ X*OBu*UEQSm*Ts3xHBxn%X4#MKR\}>pq˭6zo3q.V`L.O8 %E!ܨ+~J1|P`=Fm&ZJ2.6fƖ2A2U1d/9|o[uȈgbq]P Nk(^ђ49b E>:(O//[|i:hɑk:^x;s%A 0ԛ#L/j`*⬠N5:׌\iIg$Q__R @}i[֜/BC08X`};`PT12g_g4Z#,]#u!{Cv(7[ 9k'׽ jcf4 fBT}:cEi/"5"6MH\)q͹hr JWWɉg7gTK'8)΀\i4ơ=pmd\2EL]+8SA8P-:n,zg$Mlɍ2Ց(- =i{_k,9w;xldfMc4yh\7:g2kPZ X]cݰaWTSr逤 ~Vciװw0z^[h yZ+g[MKD[W܍TƲ#|~1j7Oܘk!^ЌHRVEw,6(9iz-V5#7i@4]ΈO}zg! {0/j< -xh%(UZGGe,X>;,Ns9}Ї\ '/PPn^oj {,/V2d7sh\鋞?MzSN~?՚ܯɸ^v#ޕ[dnC4]VM\98jYjw0=vyzcᘸ2}Y!>H^/^ÖF$DWU;v}Bf{YnmHw:I7!`&wN qrdubN&P=nDӛPcGe+uԢ&v/t#66LiY'x,j9 `y$Jn2aJ;d0~hQ$aw'mCتa{0`a}BjCqH &VWxN-~OezsY-&f$S#g>D"8nRS7M6GBɔEl2x7"6ҟsNN_u4ڞL/>5dI Inv}prGL^6VU;wM[bсm?fGի>KW"Ι!98< ‚ Z2;ݒq5Eb nIr93ˢC*8g&28&=p2=B]dN+!𕒘j(֏P cN{@*c-i .AvZ9TkdQ˼duxRcIRP?eZd|Ia&Yb#*<:L+슷ǂOPҮ>e6"QARw OOVV2l[42o BzJV#!}ޱkb&t@ODPcA:dYg~>R!/iFqI}mXjhg+8O:!ry : ԕi:s٬o*qk܃B(sO7IW |pQ)ˣkѓ*y3]Rm jfm*U$3)D@.38I{dM f712 HQq?A8ds l+_,&33+8~DHAE<1 ?2SCVؾ[+KɳGiDv`ӊÓЛ"f|h߲|$`_yԘ|wL{t.ڋ;-T!1;EF= W[֭]wF Ow;ĢUxuų0 ~O4&QwN:iErB씄 K?N%OiDsfV9>@pU՚222j QUdGl_f_#bs^/t7Rp&]H􌭤VV@iIBFZUGZ5 .cD2+R'i/S!ƒ^tDlZW#=Ɠ] Y)t$`q]#kg'=c0Y %k 0jS0/Y}'}B2d7lj"hUאSe5''tpĩs p_<ĩ^+8)h=")<Bų[9-VjPw<` 4at` 2dE˳wyi+$">ZvQ7tP)tB_Bj3wZ(wbdyca8W(u1[rl*%*7s:(KdKҽL6iSb(o4QYP"LaSЫgڕQu Sي$0̀L[lɗ?[oh~̙K7& >b.* |Nh5*3yޜPsl',1` [6ec_kژ˝1vHX*7cE{3*{(8l`  ݤsx[2~'"n<d󰠛1p71_k/3HrrrYQM46>ͼ)5)Ma}jzK&qn:Z0NczyziF W?25PB$aA˵u͡{6 K[I'7xd( @_̲kk{Jr%ځXuΓA~2/S7 OZuy4BCU'ewre'T0$tCot;$*]FtଧL$F-Vհ.xPwbAn&~hOG8/.jD;e@q~>gB%`X%=eH2r)q/l.DY)sGp70m#=j?0q+@ sEla :m2N\{+caa`ida.g=Ldz$h,୽ԙRhP|/9=I4)u{2`}fI_ĢI _~h\x2Mo:; (="pIS ☎[s D4f25K"{i rak^%()_;5hpel>_-UYO | Օ5EVխﴦT(ϏY)vy&Xz5PD~I{Ʉd^'',qGj%*݉szyIHxrڷ=p7l6Wkh f"&I,nԲG'S*.È9? ݯoM}emCMl64'~jYZm7qtq Qh[?Qs uE7.Gz£+UCLT?'lW5[0bb\-wW4Ru!+xԽNץ6dks+V$82dL54Ted|yjn\:n0߬Z)%GO2..Lf9VHwGT8*pvE2LgTI J5b FdԈ_&I }-K ?t̰p!/KeKzr6 ¨V h Pd3uHXN0p4v8-|r~AQ?%xAr6hI]x/O'm Bn8mIWNX~tٴ- $7TQX,֥oRܺ|bˤ敢 иDME@[`*M[o+4b39-g]͹qbdQ8MST&Y%l1"J9vJFCB$ql~ EV a"V٘uH>e7}+*R~*l(i3]\TYOԝhU[}gN?=e_~()7MGt0YH@[F :Eʝ磳ϢMyʈ9a0m1G-HWiBGQ`7X`m&:&S|TTw]QyҊ;z禒[3w-];t!oĪr. L@)]:|"'1dS %,Mj?UE=$Tfr= ;u` 5nZOQ㶑 xGm.fhԷ?BTt:8vD-|Qsc f C+'=YF§ 2H:6_jl-M {R훴.g d#%v`L=@>E&GPP[pm+$M:NEX<6*T]qd-gk[ 1ŸXJTĜ kVؐuIû-2 %bG"Z,-#&G*0~ jn񑝶>#BB!*f'H9F7j(&/ojʗmtEնV)Hh_nkj,Qo&U0gJVrfj 5o1*d:-$DOի9 mhM4pw̧=%:.QhҨd@ ghW),WSiP r-7=Ιy _ `"&nݮz~2O7m ~ ^09;GN;)/ }VA ʙ ?4`C%~ \B{⌵(A6+8Fr ~6 u/"C*ñ(U  3GJc)|aPj{Qn kG񣻵t}S">U@/_'اN./ ekc-thpN~ 愂Sʇ`5 7șv'kTx)~{o .~P0SBv=xU\7zI;5D!ID' /d F[H.c($|Su_`%#­G h$D$ HzE=t Sh^>EqeY0V3W)\6.wZ#݂e͜n,ShZωհKWkIdWj1t!1EMAh@wyK,y)˩l/؀!aMlcO(}MS: c&U /mVa=g&jG];rYDu2)i(Ei.+hSc4=Lx&z~*6֒HǜPpPSM-]xܻb(_Ge~m<07UK bm$AY|Zgo_;~|S h?CJp{]zsXd (ͤa}w˙޼bMSwy'ςm簏qIpkf[QڠQ@¼} FsQ58TayN!wkϬ"9:D-NU/+b&šoWs}D;a`-Vg|"Xwd:L;:K3788c&a${u^ʬ_'QA~ƣˈ A{fאzfKwM-|$ uV#xcVoˣ:לdMFTfnC7xIxp-{cbVb&"9WJ+ {y:qպ\VrKPٍg"iQ *FP,He`J'qucC `+,x09&΄xįS6,:1b鑂k<+yнpF֬Υ m]tT) B d~|tW_Y>LETi +w^ k8yc7 E%kOH Q&G&gB93EZ l?W6%j'0eZ?\/0o#ex冤 |#Pk7qiW9S,in0:){QJpEq  N6ZԸ^׼돚&n2+ZdD YFra]#{%|0[] |eVą?wAq$Ǵr_ obXe\|#0 Cdi$z'-Y~& c{yWu-b .<'a3ba@N"Ic?kBWZQmt|e?VmfyXAe"ٴSF{:J9C5ԥi8i{*aqf?\C@q  yF<<{ )>0K}uV0ÏbRQ]()]b:),`!%l!-039jFgue_V%_hq~xa^Ō&p 5¤T깽ږơA0.h,Y_pCF篶K_b >47m"詳׵,{mc"ܙ@YRrN vQDe>N!vhe.Ӣ(b]_4!Bg4" ֔ :A='f#FP"ABp/tqR#)֧jJ!AYby[m_eJ~#`CE.A}̄c$lj|5b,!H`4ω}-)M8,)8%pbܸ$vɆm%mK~D1aRC }GJKDN׶-P MLUqdo iHz>P, :5.R9,7[Kt-:\[GTNBpcè??vVd,GC>[ OUMхMLHW0`:sE"uw*ՌSm l{ScݒƢ`Ͽz ߚ:8A˿Q3P!WȮUe+_Z6O F< HM\9ui댗O͗*t'pqDH{QF$C(zAڀ8!;|bza囈:h_̭&7Z!iQd5߬9(YONr%Eg1 h,齽YNQpK\t>F@o}v@ SR 1`t{y[x:ND)6hvNJw7'3劐H};f# S_o- * +#ie0%$u:@XKhMeppߴ3 RDCKrݣ[Z௿T\EUOcc2k(jw)տ>!T9b7 <*kK rqYiJ.rmڇ<$[k 8_X^i{Uj?Yh `(RN_O.щZ"K1 t84Ų ƟT~6i;ԃ"9q80߶&cqŖ& YT%B/lN͝_ 2G[dh>q~*^gEXh4}n!JYYRev]Qeraˢ5Wو RUKG.;骄s:WnM~LF'&><3 dWINз)) ~?f~ XLxJsU !r@V}NVIy*sX!kbaM uP&xܰi%̈́4@qSOz6:k˜PTh_dkO۵I*m c51 E[@\_ dԲd{+^ƈrC|nI98Tp+}PsrcEcJLglS2^qFOEpӽK;KhO&t}nľ>)/X9^>t ^@M7@ "@YOP"$ 2l-.NfnPm5V~wd]*qe&Oj i9|ʭ;[^8tE {ؓb_P^(K v]r>1n_CNp.Diw|IJ`Ic& MUٕR:P/᠞iBoP48 È+F]bMԿjD՗a܈'LqX 47¾$78Vץpa@X?041x޲=eEq$V >$bY~NCNT]$e?l~ͱ۝9(^|6 \b`I :B4tw +¾^-X[cecRʺ <+'}JRz`u 8942FBS8Q=KYsM?/XY fl$(֭{0{MPPg~;"epܯ\-~TA)75=u.;"f=}ue{6^!#q_7C9Ճh U4Qň.Ev6iнY*3k52h,;|'Mฐ!1e̋u2[Bp\9Q3Bubȇ^MkD7 O:LV:m%VI)P  _UETKE&ݑҺ5 ž?gp䭯Ҟ") H⑛L]3*=Qs=R)gVL&#Ozs=%Ŵc஁-R)}LȞK8A?[%CʽQ<n~ oL.~BTe@~0{}e[ܵAv ž ʰ_ >Y4aI0y rJ` \MMBKl9p#q ?߃nBJ~OhSAzФ/Dsdm]P4OșEk %!AdEITfzM m?,5`Uc&Rn!YFwߩ!Qq'QM,`;= 쾸QanX՗@CF K2Hc0Yz¢OcfB[Vǝ>% Q!9)NS= H\u1s}CӊOG48 6Qp=s|/&4n)P6\2@]@Jaô6.^K|2g+]@穈4JR7P$[H mJy{K'Imy3/>S"B ޻@ ]NA 4iU{^YRp<]z#9ng7ZIzf.!44k 4B._j^DԹKkA 6AݑğGL>`0Z%w0t*&ÜRľ~N(q⊛߃\ U>N[F4 NKD\;}&(vwk߇c&PYzo)*4YIԹRXR쒍5mwqDэ-h(v}r`Q`+Exl*'"E 86 ۞}|_jϥ#I<D=-^./gUukaee~|{mGF' du nޞ]#VV"AOn؁j7%CtguTjgۇL5[0(- #cX]AڨkA* p!=wE2e Pp>+: -RTwJh4bi>(6~ҫ_፼AeW_zZwW+a5*v ʝ ~t$)=_IƲ@E'HbyV"ѮDRmv <qv1wePIK񑄺4ki(%Y(H=A7n)ZZ@?}1c8Gˁw D< Y`e1$1։r9clT~( NxFrvjv, \uX9 f>l$JM;#lvxg[,L`&9)=ӭh9T:w/fc LI Uj~ZE781I^ll3zba%2b8m% ֶk҇[L# E51 uEߨLڬY1[!%9v1&7j]h%h 7|N4 /wJZ|P>b./J7P j>Qb%y'؊h&UI}^a 2ECKoqYVO:A-3}rKcIqCCܐMen$a/m2a|7jU`o50ZA f-kԚ\}HOc=~J@cYVb~(5}0#5GF(:Ef@SWOM3_VB\;no o(RK pe:o"0Gj#*u8zk]t*lnj?8{h^REل{J`=2rTè"d! ۭqsxA4)1/YV$ ai}аW!F6; &(b|$yG 4(Q}MkH@[^l`%OS" ̉(G5?GL-3UmC(1jkgN,ݖ6 GlW89"vSQrK(n>""=6>53 L:nPD*,=oA s0SxE1P-(:jɒf1ZkLZ7.r\k&]IaWco*%h%fגc?khxR&w<.YXyg˅zG&HCFB‹mS*PNUUExQ&L!uCa3/\[W>騇P9g%{TB{fjx#7dK^!)[h3Q)RX*rIM٤ymqQD5ƿ\S&ɼi^ָ&e>-(`)pm] V2sPi>yel_k"I8RՁLP`PlYPP?՟4Pj_,чQs9|KʌFJs OOwe9&v'@xn0Pg¶v6PPntDۧ"oWRwwyUlSΥlW0JiGv4Q_;EF"jů U\LJ{#8DYH&_t+#R>yB7N\ǡĕ !jI|p)]@-?XLVqĚOu vC{oaq"7κ-Dx%٠2)(89LmFmi2jҵR][϶$ި1ų) H<O9tB8.+NBWp&ȁ+2>K/yę o VLS{]b. |g6\]eK_3/S2W1[lBC*%6Oh, w&{*=a#IAjlVrdI&@`0[y,f+>J@IpG2K"]1_~;ipYpwbP(7*"5^ͬfWn/Qי[=4:]X+wұ4zy;v!3&,V 8o:,Esihb$+d^y 2DQ`Mn>F1Pld1#&ؒLImUE?ʺKWp*h❱gTvE"nh7:1۹뽥yZ5ZЦK#)*XN'k0ðWQzejߐyKˉGFc' h&eɔ KY\ {e"0ji"d*gT =I\JɫCdQꝈ;I&$Aڰ6ПcB>D>JTn1?Sm ľ8KwGag}OEOYcPOSʓ+No|҃_} ˃)A1'|%1٢"a MƷjbv$ ݇iCO!`xx+a)zc9:,!`(x[s?܎g)h>ƣK!i*U\#te6PylfMPG̋o kO/5p]=:wʵѝ# efc_7)njJ T%+ F0 mB";,v4ڤ%$ s=ٴH̐*VvٚwjȫOF|4='ATeLhҽCȽ<@j_֧;$?5={X~  2W% v 5~H8)jTI{}#HE 'Y7mhA2~ K .LI@-ŀ(#-XGu k;{%Ł*e'[E}T2LDarPM1 @A6yऄZﳈgxvd M7#-i\NByW1Ec#fњU\Th S7)0eN1&_zãqUX&:/5vOȅgodbDڀ~&Zdrn u@yI) p|~:\!!l\w bɼ(=0#*7BB(XiH>YJ18]o9w!NCM?O[721̐m?|9'm  uG܌ Nob_w2T='il Q{|+`S ]T ~D#<0$/§co=-vLiH3ꋑN:%m_(cGl0fE?KY}+b+ ̈M“0d0#Ej_7kro h HK$pxuX=*/0ʅfHNG~ n^Hv\c>4ARaD7j <-נI eA0F`{hޡػ JsA <,uD1o¦Kny .%˞] ~ .Gfv3TèvRNTU a |b<@{'\%OH(-qn+Ĕ=hUi:+y!r Z?D›c{w aiLt]WAE7pX@ZbNX˾^0gDH(z^I03jѳ#,BhP2|/kU D*V!H&sy"C0WLgJM}8CGo,$"= >ȶ#O 9PS9ڰRQ7o/ J֏{$E 5Cǟ2 @a|Gg"`PlI]OڋN,oP0Ygc,F.QxSiV猌0s)6-,T̓u΅F֒CC4HI*'E -d BxG50ـ%iudzqȱc谏Dˋ`TRlhts~:nl{#!H6*R՛IU4q'bT K&u>L. JMwA#6FR4'{]:mqI xL؇BZ꨺rs]g|vYu#Yq}HŔU| l67D)ui WK$jBʳ/h?Bez7j$N0h/SŸJb?$!QJ,an.վhÑ.?0^zA&X+[c šPyیUYJnߝ^Rd Tk(3Y,QThF6jژm__wd].:0h]7¦Z|)X.bK|=D+'BOtiM[&5@'\5*8}ffaOꏄh[!rPBY:[1:E7T-58VӢ%#ϤV\7_5lmBP9pLj c .nKFB*%T<ӎQ.De h4}Ӵ/`M8,eQB9b@KiI$nۺX*CIV7%y0;dВkn9; AdQַP)g (eh!!(? *No(LQ|v'kGhP;DL !Tk4c&6-o3^cs9yv*ox ,N(fpgxW-GrwKuJMCi(>9" \ * Å>`XkC_i%,g<ĵlcKg4sJe-!}KDG##2}oW {˜w̚#Еʍʪ 28{y4r)]hdxf}lpRldJp㣞 bem*9}0`D$) 0dO/)7*+e k幦[[ȟYnd\QCkž\8?#|(<4V>lu!'lI!űOhN`jY!6DJw(yЛFT6K_I*;"0(7'1; w/(BE#|EƋ W? t&p43twOt5eSɜ1SMЅ DInwy݊`YlXHFVMi^0aeS}o_ѣuu `yYQ 5L[FtcǼI{I:1%?64ڦ mǐI^ډ`xn붟{B]1 BpP2O./4_C:kt tal3 +?;=`:{4 QPڞMCR84"s&3QGA({OAeoDmڍ:CK)oڄvQ̰AgR~j5W_Z579#{ۺҊ*tôXt4;)(dЍ$Pl!IbORI|x!uTOr:=^t j#Vr=RɀKo|)6DM B*փRyU55Vu<N{^Q-8ɒ|fB-v%gIÿ$Y,*tȫBmƷAL{3Ȏ4RTԋ7)3-0E La.*S"qۤԾy%@yBM[Yhcf>0?,:MlJ{ԴU.}3[>`p5(E73=/bZdnwO%콃dn8!z OQD]]S;QZ>'kY=igRaW/0rsk`c Htks9mOl+l_|)=flρ֣ Ak-@E}^r@0Xg`hBSZyd);3J5 h% 7)rCOd:NHnCrM^dR&٨ (ugOq^.;>`d5K#,dԀտSaIZ>TF#9`8&q{e]3"'_6&]NoSoV}⧩JrԲK4i99QhE =M*r]^zeP,i!wfHb%4^)#򥏤>F'?WYu/,AB w--ZR8FD䣾{/+P' ~WqB*%'QղV< ϭ >&vW; $zT^`!Of;i t4c@{5ͅWDɸeʸH\ilC?84\3{UO\KӉ4"mY>gRϠ/_`"E2Ww|DfB(2'R2Xiصg->%Im<`^pʴF|3Xyn-t^mm7@wn?` 2h'G/ a;w;IDƯ1 *EZUG>v.pcq%98{QffHJ ȭ1#z} "үL'Ӷ)B,TRj _.tкSJ!!za7a`*ʘ70j%}/\hmI qp'<ؾXAngJ%3s ꋵ2RZtjv@X9)[v%O(,v%k}άƇo F)t I쮵I|+NG1b`jyTY,^RFD4CٞރMZbXB6R|8zZ[ꮦAA \pi*.5~.uݦx6hɀBn 숧9$+7n6o9enaukf/o&'jUqƑR]dB(@!eۉ?T6:}j, FWsM̳PµdXo#om3xY5qq|,zK<p (, ޢG*"/mf3gbA#eM밶hO=.KN殟eF1{#xY4؟4]n#$*:[;A.9$X_KoA !ss G׼GAEX!vy̕c͝]R{5Igb4-{xfU@ÚGS 頗yK_Yig y%9ۧuq[v|g_B ٰfgkLEbb'_v㼿Qfci2|T;fuT-eلZ>뮔A9ƺ pQ׵;1QamD~繠6aFv" 6R`4[h U@@^uHSTЖ$(sU*Y/LuZl҄}Y@ެ |ڼN?j=ww,sϰġVBU/fԊ&/ .Rd`NP,x@q%/)]bɉf2 (5˱2P Fj:35^*ka HXH}D64֎ϟCzTXkQ4sWl>5[Ćۦ>UڱITl$Ed!McAݵƯu>&5 yPGHY]X"/FfNf\=)*{L8t Fo󖟯n;YA&0-\ni_@a""@b ߺ *c%U$5S f"jM($iE_OzPO>3U2F@ZAtǝ|n̬ۙVH BڛvLel Cޑ ['aURgcXzJOB°"r*>'܉kvj:i4gSI9z,dc9~75 ͼ:|K;nYҨCF ARrּϵ ڧjHn6cGUuq~/×[$."5 ꤷn`7N&UN@yH|qB,aj~IQ<8A;u׵$,Ž54'x\tP=dȵރXڛ{EJwH.@G)~Rn;&O}C '!j%$g)?PH)`èSABs,a2ZR2*4WQy'!hڴ*~< j0r¨Xյ$l)2;%'zlpB'N9]5Q&,Lr>5uv&eB.qB%S+4̘DBe>wlhǐdբrQ|D*JdYm `C덛_*/>E}zlvbJ;VE:[MR`uWty3l8]|cq&\sKF ݡ?L+jFHJk=ƇL&%BkM6*a%1/!=ⶂ>O\Qg[?[rOvXcsxJA(;V^  s@V, mYpE r #(}lKOֿE4$`Q'zUrW 𛰆sݛaq(s҉e1 ABF^n 51r7^ßB lw:y:8u6 XI jT`OEx]>#OoP?XKw_ ZAE{Ƿ'g&b At<_qpsE8 9d[_~fkcYDw[3TņQ 1|^ػTh%Zhiޓ,bn~Vsmw4PGMsejоU"\rNr uu ź{N+,;S5c>؅#,  ƍ Lʴ;&(\*|3[/KikߞB4 M‚eO8*2KMBƇc'-{#\l(:ta2/^ڗ YV޲>֢4gu.F $x#7\qgk㵌Tn bu.+>ۨmalnۏ0}O^-*Ky ̝tsC-=>1"Q=ʊhVA97'Rs2Ο1h JJ7lڧnFo'ȀUʾ4͢H>"Q^i{g̕A ̵p`T0+%{GGB.qh >'7^ qs0 ܿ"M^ Ѧg2(Tg#hmw{dY*ҍ V[N0NςsϨ:;dr&iHElѺJ!! .[I̩!#TZo["?eOUR <#/_"$]Y>sVC€cUɟ<_rZ(ѳN^Rq,WBa vWŎHm/:TWыrKfsqqH.lfbfKO%Pgx4 nDFZϤ*] zI&P$lo+D }i'X7vJ56[эQ(pڧxkɶ/ԕNF*Jn#j"$J-x@#15aF|r8;dրB^MoީR.XVV`lM|魵Cz/ uvv{FGմԲ#GA yeXGvI6N3w_Mo<堗Tl ^Mv0;c>1Yu Sގ/)J=0tV'L~J`~0Cysݘ DD)+ UQ{Њ̶ŭ 0/N0 H..)g"E[1~Gm%1.01|ԐVq݇9Vt/%1Σn;~>G^oe5U֓O%bPy߱RU7K#|DFnloFAWe}f$__<)}wG֐) h xɉFFs8 DK{רb{F-@zA~S7@D-7m~'QO?+B:XN.]%˄ݨ5b u:'``ŵ -xoX nI&]q RUT I9L ?a,iTM`?BxmBu!LNtxQnrWVeq M= `ؾi!X߆!_KHb /OhbQL.JWd.y9IU9yf A;2cZa]X (A X?!j`є&λ+RIcqt&FHkH_HZܲXLۉ$wRFD;RNg.ŵS}-&S:ER^ H;pޓm}+EO=3̉Xw(3v: K,yԩ4}ԡrڲ!{Wh|&G.Xoj85(t.Q|>8 U\D4sG }6oV_e/nC; m%[}ځD?kdUoQZ;81ɸ/ FK$G\"=Nɐ!y{\3meUk7w">]p33#rHK6m=+"fb _GQI|hi/dj*{s)%[ܾcH"!xwsr6 >=3wH~Q]QoKl@eZ٭[zOor]cћ1Rj NrwKlվyrif،,%@+5PNb+a)!; eyG|+2̷aʅm}&W=}HعY[Q\"URu-(8@P/!5 ?P !!"C+fݡ4p|,/杆G'oְy^Hgpw3;*@V&Gs&@vz{<O'1w0s|du8{rqۦ>\ ?,Dfig2 7#FA̚J 3cA^˻ꮢNŦ@pO7To@eiY#,EnKv\bY~~! zD?嘬:fO!M:IMlچ ng-O)A6y83`(=`?Z7qO7ZNO3ck4YϬ zU]lUF$ȘҞE`SKJ+7(:POk9 GK5PR_at7`-\Z"VS: /[S^IemO gipN?hf䚧XGq${𺫥K"PjywyXns/ .,N00,]`I'zJ5ذȄ\Q1JL}JxnːgzѹBS̢xw&R)ǝil϶&AmqJԧ0ȃY0 GG!'EQ('Y/ƀH,OJ$Z.ÈƘ1:)0iQV"d6.#85h&HC.XBwUEr&SVz0 X);A K 6$wuvA?Cr%i ˆ?,aS#._LV 2(g[xN Xg ΒP)>Mzm4/S~*մJ٘T4G9$漡3xua[8\!Xa3+1x\)meی %.ilZ &j{vjimQ~V@b*vA0u @ioncSDaZ|; i A;)t+|Wp2}QKA6Xk)Cg yh&zpi.^}Z'KSދ=ŝ왩"|ƊCK1ߕBȄvaWأ"uzT%+ɤ{fɖwƯ*sWwXUSoCqXXn e;S:"J@܅&hKD4}f،g8F-TR?shQɒ&W/h1v6n#9UO=NU vP$ֹJP Ry;]%,QXDtiw⁖xLm+DsBɘik$df$T TTuBaXr*oIpҞ M2SR5EBg>8 LTXI+Ӻkk@nݏa>fA|fIڕ_f.O!sP~r (f[ƴQ)r" I;d%䘤ؙ#L&r3I1଴ S翷=1+pMAUv3dܪTWVԌ2nRr=;ߦ鑡H^#]Gͮ~$[rv0̊ uJpCp ޝg|ORm}d :7…αKb!lv,JHkBJz,H/БE2}kuO_B0?%(n=wYa}im1Z3F/xtsN=y v#(Ni~'~+%^. 2hkc5DR^kH xJ.%-LjC:ߪ';ijZ "$?s =3y ޱQIuɣZۮPp+~r*/SEK&C{R^]^Gѐu ?D8p`vE,!׫'.]u^- -k̎!SimIDӢQt$||R7ql]G2X9D 2c 5]􃵾.(.u94Y6nc"3oԙ6zM6_i'Z"`STFogv᧙pPūh!Z'X\^4B0 #1 ڑ8}sx ІG$NH 8ud ?~K.8Jb:^)q|]YpUKcs)a 2i/Ű+*pAo;= F8k߯-dp \4Z њ\~TYviOWhf͞  6N9V=W6]<,!sX87ЧHfI_X1r~ TCEIxDvD' + 1Ԯ&V7QAk )>L2~,onӼk&@7cOØHjh0U:E+Qag|Dv8};X3 [Ro-$J;Hc %J) G E=oSreVs 򄬨[ hyP7 jxΕ8{W]pM;{H[FwJL(F K!bR2f:K)#&beg3IZþ5VwGC)ׄ(]˺ZN5C^Ż',w8Q˄̇ȱv@Dyy}_ ; IZXpO?NKJ ۑ&27I@Y:='B&Z3 sǽ'9忘:V;4/[sYqapA kT;CAb*W1S>}Ne£\-pMRuB48Mk ,7.(o)ICTv!'ʹBf]_ w'Ҳ*N7ˊ5ۘ@x ߃z ΐ V(ih_+wnkR-%K~!CͣB !{w&k5|gz@nN2>~C+jO3|OF HO{3ɌQ/g$ .'*~9`1<`j^"vn2nE/ Xϑ:%.܀1{/*|}e:e5QT?3& @^"*Rjcg\ AgpSDnaPwQ9lzD1b~k͚f_6 t1]5Tp>bAP>̀貆q]-ulO@4x &h8[[ªꧼ=TNWsU?O|qAR9odNX"f7''սc.;vnA}dփ> 1ιc =#Q%%Р O:$IOx ҞFhD"'ntWVt{ڃQnw+cMWOm7ULK<{i7`q[Kv TG٤AlFG_9BEڛYD8&&M:) vֶ3rZPc*'q柶x| HwqT%Zl$s֪x }x[SaQJ_C v" Jԕ^==@Q_3H?Mn[juK1C_mDO6G!ϺK?|U :MDzN}v]c 8y/u,~B,Ҵ5ULB8\O{7cZX.dV+ѴR'EITZ"̴ҵ|"EPȷ._`;@4ij:咅es>s%{9%33mޑZ +u B`9 @;:t:o9j>=T@w Zi7eؖw\=^4PdqSp IJVdvdR^ThD12OpX3u(ra [L3DcxB=ԗ\0za1@^OOBٯ홟40HR"csal{0bp9WVQ ڑ `P6eվȨ@y F1(qjYJTJOZ@Zŵ-8Csj~Wdr]F2a.D\{z#z~#>Hc?} u@m@aVz8 7)lU[GϿ^)XrK="XE| fqg o $#`A<&>-mdCYhq[WƉԐr4r&(c.P+R[3:rNF.{#^ӣ즦Q.ߠC|twZw瞍 pGXׂáOZz'}]0,%HmGcU9~Qm[(ux)p~}!yG{bWb2?Suyjb,T\/Pɇ)Go4LcN5-串c VʤAV>A#˲Sw3mܒFyvė',Sno#.6XEq^(ŃWh/چT(A[lЌ!ZeHY\,tp*P!r" JHe)nʒT+U =49eag?GxIE}'[P֧"xDA."`wBCUVisơ|+ZU6(..#G,r!@`g3weX:aRCƚA F4jA2kG}۩.kJ\#g\ Nw&?_ݫG6d?D~Uc6eY&I8~Rߖ@f <\!U5X#潬t|=j׊Zw n!,)3xAPA˿4)Uz^>R9^5/%TPNoOP7$oS/)O;8j:ZtĴ1W!N>.s5zrǤu?ޮG_0!tvd1}"IKD{T!F޸׾jOA=%ZM(^[{ STE9YU8Dm)Md._UPimɒDyyh^ /Nۀ5 iN d(jyH"#`BX5kFA$3q}ta<>>`=4iU/ׯ/VOY-2B&z? Jb6|:Ji=ЪM|n;;&"9i+yJ9Q0p#f!ŝ|3֯A`4TϹrk/|_/o;JL[)TȁJ\/@NI`0Ih'z.DvۼĻBvw!f/XJ埄rۙ5庻~u`uE;h|l.(m#|3!>0yy"UY5?{J8OZn~ځAI08-LJ n/FmgAM׳\:fLQJm}\R1;IC'J7Q<,5N :!urU>DO kLN,:I{EW Y"H{{ckߎea|\,?ݼGZRuQ [C鯝~YOZUzDt1uLY % _j,};QDQsGTKj({]08L߳ ~Jv}^Ʋi3cj>- +oy"u0;tjU(w|r,hi'TOGG( \^;:g%FҙsVK6/G |7BZnpu+mY]BQ"cCؐDZ'hh]=.޻"F>k*¸8fj?a#XN|EOl?Za\!n` 503 !158[Æ h'%Hy\s̫cCiO'.M.(?9fi)c()i娠8ŚB[Ռ:=`?Mx )8EB3&P5k{&E+k3.pf8Ge,ӏ }9-~kg/auqnFVZ1^r'WB[@0+d6X6z ͔Lz Zֽ\a/--/b!ßy32/WC>nXPR1V_^(b4S"u[nb'oGI tj,-鮴&D_Q$C2%U"ݒ{(Xbg@e|uy,kK,D)TG/?xU\Q!m O=-#k' 7p)zOҳjIr <{AE;8g7$kc549'>_o|;Rh6DZF}ؗtk,;Y҄l? ІSP(\\4^ӡFcMO765|q :c0 JVm xqN쀇g.gLYcl6^-AǑTRH_L _0 L8Q=oN C1ɀrߧ-$z&/M:H#N ?Ix öm6.v+Y?TOqǒf\SX'RBˁ16qO8PǟO!cX|!=*|!qfPe۱ެH~v۔ Ju^Wu9TZ3_wڌfli;[?XɄBQP$G<6 }(ЏyMOqHk' l|`H]ٹ^ ŤmG:~]M6n'lj>8)ܚK/iPQ'WZ[YU"PڭXjd:Ô , d ^\.!;< O`NZˎl 8d^sR\@ c~TQA7?%v≃.Gܯ8[h{+~ы~E^`I{O읠ODjϒkaqgԘx0D;_0ƵF %>3OҐUG wEzzD2s;)#B%t6OF? r5=&6<VB#x~/iv3ڮ1i),X0?HzmH7]/<\uS%s+AS[ז:a-aa\_"mW1#'mAEXRI6<"wTnrlhdVBT)Arɻ e2hxgғBY ڥ(FPpa̕Ыz|ܺ5BawQkM\賣AAV%&`?((Ǿ #B 72h=nUe7Pi= Z S=UYQ8T.jY^S};稡s׫wbZOQHwT4WeFdc6!qצ1ݴoUFO͛P^eJ=U6A^'>|JW0q59ΡBn@nZpIyOM'c1( !(H^=vW+E;0h$>pGfSmk+} FE)!,İ\ڙJBVGp6zfFhO"hWji!.y{;+|Gـ֓zٍ`f#(䴟P<"ΕuZ&BeX)!\#r*c _6ʟ1_"7V46"yJG"LZe w@9DO1eYJ<sުNx/S\3%pXCKl^ <ĕuAsk>R}||[0_əSwY,P T|SA6 k1 JܦfIY$C*zb3_70v@\!r*OU۱j(1] WD8Tb6JQjT*y)fKˉUtJil٘>g {8CTd>ʡnG JpW\RPTG׸=a L= @c1T &ޙ}*"0ϖR̾T!Xu1'Eg 6ԁX%Wy)HS;%} 2d: XNd‡0^ACpKGtх7#A{Q:3`[^~yj͜ B$_D I}Z )$sÏD(].dihLJ)o条䉴 %@ F ˍE:kheN` m νϠ>k[57᥇)7'qf-_)B.CV]Xݯ]$p'ͬ,P#S>‰/q"3<,SSg42fhqC6!pYfKJ^lxz`RXO$XuAIqRQ0!I}=~F݄8 $J>(GVuC0U3mJdkcBS nc:>R{fd):H }Meq9*H=R\;okmhQ%C^Do6f Sz/2P5MN0\Q^AkeE;叵{Þل9e&&7?;ݨW:R.FuӤɊCz3;2Ҁ$e"#!(3nLP:sxkYX*Vp߫Hͅ;[[qfw&Lr(UuV>f?&ԧm;*}@?o ۆp.clInQ s_rx2f%|;Lt(^Ց6@&w>.G~IPOw+vnjo(V |I< 'a&Ny j]VGIcAiΪ 1NHRZў +FeEo=p쬫tH>Ot[7Qá뀴O77bj_#Z0nys&h1a> RARlӕ~qƬ5\{DP~ =] E23ztWz>$rAMIdYM{׭fцB$>ц8@Z95~ul{vBB+.Ԝ%+Gg)`Bm-QӺh}0aTַLwmυ#J5|+HHsXԱY3~=V=k{ mz"fRwXڶ 7LڭR>h*%yg{da1=Ż_,,R'a6X?%ՕIZRL6pL܃ ky|U!zSKlM,=SpLoIҨ4k}_ *[:gO}e4 W ܭ@S=\= "ddHQsȎy,9ΦL@|N[MD(d*0+w5==HRȌ`V̼oͰU.5[mAkˡf-}b~٘!;*F[ g5\IiAndxdn 3|:@/ʡzՇZ P}+moVD!aqgc(wkBL3H kg}E׈ߦ+9Pq$g+Z\ ˂zӳ b``lnv$1u2)@xLT$j#M*$Ib !w|2&gHSl7S:Ru zEDe[Lh+5T3&]BXߙF?Jp.Y@= !h9x}`WS%uqsFIw<XgOĜREZ׉t927 ;Q$>LP!@A{|u cu^ , ߿UgԂ3Vbi{w2anS &YÎܽ4E)3XZUi>V͞|5ˎ,bVg4L ?}bD+L?J}OGM%old>~J;Nh.gTb'žD8*ibHqBIvc`BGF zz;{TglƾYNalI |աOu!=K?.:*4.'O.L@tDRT],g[0%ȗdwKbgO@P1_tѥ~JZێٻmvJMK[)g;wY%5q"xK%_3cJіS (Ψ҈4֊yr%4Ez5nhI 6ם+bB(`),z>WhH:&,6W$qR SxkH*=QuZ_oPkoa᧟֜Bh1Kma/B i'G.&hnw]a6>1h&;WU{ofوmOgs<_:#!i3kQ_,kI`q4/Ӝ@ ݗJ} I$ כYdžį k܌8&;][I:3l 0_n}Kq@.h)CcF( (/pm=]K(K0q3`6(hc!wQݶ&)Wx;t.XU&G{XF=e @jb=`_d#dwwۘ|?Kf|`% ]ƐXOAzߏuN-c$55{ܴ)|Ō[,gt^ z#мCvmcX 7;C+#P(_){+/ǥ6&N@fbҡΫ0HOttOLw{K!fRO|aqԫM;ah5wKL^:;Y[`}!cӛ>Ƙ) +8-\râAT`@B/FJ ~Qsw߀$&>**zGB,n4K<:dE5c)G@dɡVZ~vaI0Ft0ƫbv~\db&ՐfpdéQx#"Ox \$1X/|L<,[aLőh ,qع:+B2߻nR{.#C,9 "ik6)FZC[A8~!q]:kdϱ)5ck_U09BPO r[Le}(`zi^vOFzsfuS5;DŽ}od}g&b F<z&("C&ܽm{Mxxy(-~OhW һIB<{rE.9}, t5^߳%J~O o?!`Vasn5ʻg40gZtV`# ­t<=y%d8;9Dw?TZ*ǣ t68=ӛngT'?&;4OZ5}OBb,+ŋ2?+VaI)!#Nif[wZK]$z3-,y&ZUqa.SdPAn% C =YɫGlTы`s-H\]Vс4z`+˷Iȴ\e'=+ZrBh%C?H^HXEAʮ!Lf?5vm5E6AZԑDnTc$Q#,8*CiR18cD3\e}|{R1{ *82SZc}>` 4{U)938n$s<ENq#1:Ҽ1 ?Xl ƽmȆm3Å'W0SVЕr2cΏ`xM5oyA \c}蹀]K"]Kde3v&|4EJڰC9y2VV HEsC0_<~:58aajOP.QUaۦ U]ǘ7瞌JN^cjmX(&b -}˾4 KiNٯGY֠0\_Hb׽AO 8Dި.eIp qqdMЍ8-߽JԳeMwyLhs!]{m@< J\t)sV꿍͝K~zq #*RyzDXcDMN2R"8iS)D5Hu.;̞/$J5; XU~[xVo t)XM&p"ЇPQ 5 H|1)2"@8:'h:w.h^=EVsSSӛv}PS4mk.詚|`/oOǸ0h54R.r=HAu:0y1H"~YWytQJ1~xΗi?h{)ۖJ$>3C@Qx?US[adz9?0{_,0n<41ӃlXy U܆MIW7:"9eJ6DA`%wg\?S+>%QOImztUQA=ɜ#ۡs6q 99|w7E9Juka}:8K C} PK/f{Ėj:`xD 2!mN{27k`PNF1Rr\{ܨ"4:|~Z*axS`JlZ3cp+/E}2QĕLd)Mskh!nbzˢݭ+e$|n p $V .27' khǴsIBOx{H|biV*ğV)?~ Hƛ'L^? V%#Tm]ځ77$Fn+| 7XS|${YoS!zQ7;ʿ.V^GGډ)ZV]2D`-l;~T aT =4f;׆)t-m=sŧ_=ݾ߼jhH訏X`D`sZ6brOXx<@B勏 &R~ʭws(ǎd?5&jf*(J7G9Ū?N{Xa(-:%&]C^qޔv_¬%܋?'Kh EN!tmgQ~{;8̑Pv1<-8Ij"RͽVA ?^EYr9\CH |5F?&>|`4Cb)2QXlFK;q9z.];i6Jm96X_vu1'ӱR25P^cr2IሲZ[_P^[~V)'/EDv|1 .G%N-סim!-}l'c*y6\ YpI2RyBj+? al'4$b.9lսq&lY+(z+_\ HZ11՟#XM{c8 0.}&r ))!2W۹'´kd !O` RqzqRp{G(>4Ame/Z'o9F˓;dޕ QqYھ!5}/B*F4ӧ𯼵k Bc5΂UmUmOXLg֕J GyK[۴\}I!^'7Źd<Û|߷KШfYBɣmˡՔ8hsm}@?4,4"|AD7b4&/ 2i٬ +ʣ?ObP@jUL({$ŀ7{=t:v-sgN Ǣ ;qROl̆ >Y>pQgu{^IW[˾os94)sE{ r,)RS w_Թ,+WL\W.G)Y:Q\uQER&s_)7{mG*䉭Ag]K~ /)@h_&<} mXĽ{ؘ'PUė(x8;n)Jz: @X&nC{Z) &xV:Ҿ~ewg3t!w|{~qV=.oTkOV:ZA.z2Jaa&@鏿'  !+2ݙ'DT])U"$d "zlTgkaE5*o&zKr8K'1tp[h/Ckç8ӆPWfhv`qgtR}u*+"}%=Nw`1_ŬZaUvp)Rьnկ7~U|ErdR=షdV]=6I\D╄7?_MJ6e8pYA>yHm5}ud[eT!GD]P&@2|  ٶh-+Fw^6 ٮU5lociE&"rE5ehX||44V^`jp7ٽϾC\8hl)?ϫ(v_TKB8dUOrpX Pbi> n{;V\WOSIlZMᢑS(z=dLy FS1eg;+j/:;~(tNTO B+@l8wݯxۿϏM{`+K}q}2,6|%\zU(7%11:뀴z. lxv.%穛}Fm&gc1{'ك7:_<$n-yA>رۃ2Lˮc(pχf7HeQ*Ha/̷cc'HQld=R鳫[ie6a {!mseX0{Q==*ʶy V<~][q`YyL8}4,jV_+͗ei+scPRQ@̲߆NM)F&q)CAP7"t]ٔ_ϜVo%@xE1`J@@ؽ +n^CYo:BPtK_7;쟚9G͘bn߲obvwjz qp|~,Q <釘u H)n`y^}ڼ*%0IjԔLcnF@"?NY#oÏ(J!is|IguUR-ڛx,!#նr38% C! &^Dm<%,SJ$ʢ6;ݯ{w SOE(Pޤ9 ({'ͽpCW٭"s4 6#w3ԼܢK4fݴ$P#۱aAx͑^rUw3B6/2߮8rz =_5M7A%4*e"s[hhNG8ÓvCXqӷ*V #Ө[Xpas$;ie8{0[LXE-69/idr䦣c'o3k,5K)L08˾_8gΌot֌O ߴ|Sw&b;28'!RrGGQQƒsK3,sSɘE8TPfZ~|^<\r+5e  ,؋٢{ 멳m,xF&+Vg.{6vE?@nшN:5}26{ȎzGX݂Z9dlv{G󦪗 0-CTHk_> 28 oůb|? R6{~]%TP9_ƍ=TV͚O :Mf&CB&сD琂eCW*A{K ⟀,>ӧ'YHDznzaYnCq LUXc1Hnh0=z8"=d3fkH?"PMv:-(ʑx5%cƟiAfÀ$9J@韮#.?%HnKqI`&ő\:^hJ-1ߌ/d=Fa i̯8V eO؉Hk.y$@M1%j+ɿz#t[͉DBA[~(Wl.d~m|Yqu<7Hx=3C.$-w-!J\Mwc@$e :KciNڋJXohK[U&WC_]"~y]ѹr}r0 oaGI63,4iQյS틣 KjeBdK.f*#+{ZM))Wvn7`9f _vLT1u<$(58wO$mRG2T%v UcxcX z.͈$ kh 'i³y3_+2B<~?RGF ImnJ0Nmh¹<;&!X zH SY,Yo䥵to$ä+.aaEG|vGhbA{c[ŠZT~dt^Ǡ0tcz.0${OݿNS]u*m"`T)h#ڦC&܉+?sM/qHU>ȴz(OqMvŜ߉ }A؇Kr)PMrD[> zu!7s;~`Һ"@tN s{`]xtgX[X3 sѣ?44˝[$t7vaW\ IĮW%uᢕ!Z2zҝnRNSiWg-e-0f=ɑAC^}M$5 H@EWV[z0[ծE0O/$]& +"ʟzп<rK+Y3bfK1Ğ rU |X0z#.$ L6Se(,:љ6MmlaZ#t|nz~O a\7 y jt fC@뢊9Yt  /-ƿD(k-kNbsEqE r(*Jdh{Yl~ΰ822>\%2)i0ń&OT-jY` PX}ɛs}jC HXi~'G @jN|Qr[]>r/rJNvdg$40RWV 8cq2]% َG˗89IbykZӁ{3bpGk[EC=>VPv#3hw[.<=OgT%~;0 J.1+׻kҋ=ZNoqvgJ, ]i69SF눼@n,劉8Ե!Bfn#1hl>հ-Xi%KB*+ ,8A<_F3|yvqN_ mDj`sf}1H.~1oPD(u;nDEm$FΘߞ!SrJ.("L7o{tacfD Ђɏ d|l^{Wnt8ZI§P\s/?*~k ??CO ~Y-汞k}7 ^{g)1.b0P=U-ڧ>;պo,fK[0`"m6XcL\X @M,\q7DF))fs"E.nBaPqŮlOU`[pP29lS(qmsoRGOvqwZvPP2JIecGEWmDq"5>y=$.Ѵ?ť~4rqk%n矺mO?Siy 5uPEnA-{{֤-}V1:UϺ2S?i&7/H*ۥLɶx:)g Qt@(^.Gr XE~KYt7508~ )bt73vEo. 6пnY1{]2'P̔Hdepf' 761|J\<\zfe> n; D0r<ܭ3"Vr+`2Cɦ-c+[qm\;O/% $$W6E<θXSϺHķHu]Uc=̀ҩϔD7ȳN[pVNU㬳j`G 2&AaY``&dl !e(ZJ1'bMשkc717X9xab3x K%+ 3R>qʀ}bM'p"48F-47:2]߿ZGhl%6s93_V/ 6}:K<[S#,oE<t@gR"ҕR'bۀPv:T g?_ͿԜb!*tTY|(:W)k,LJ#T%:YLh?%)Q^u%IZ&"՘V'4oQN'8hTIhԘR0neoH肃8%)q$7)9r{2 diET g7Vжg;9^PlSaeCx (&0;vϖn K5Cp>Ê2v?4]l*mB U"̆)yr+Ys.|`q IRoš者T8Pzh6%s!3;' 'qtDT\{Y'}_Ă\&uh#& ΐjp3ͤ6& ь~$A:k{{+xvEV`> ј` J`hqܟF xxu VĊYO4c}W%j4t:M9{0t*4xAP ]\ ^$b'0Q1\n?rx#]ӇflPI{:!""ڞ]T~]ufsJ< XIW:eҭfIwxf{ /7M%ьFP.pPV{ Ȍ_x ӆt'^tm{5p T#QAƸmy ލ8,SOV#OJkNel82_rcw@NtCCK?6̪>-L2̓4gP3TtaSN%EG,56 c1>Fp=1:Wi$WpHi;v) ӡ31cIţ YQ(=PmV˷޾2=KFPf`π ;_?ї!336 `g{kY/ΉP;O UHp l9S f{)*SF؆B9⚅zg,Mɯ\|Y|`KY>MD1}g,|ud4gd(\R08Պv"(jbOW]AD2tUiV?"o ؋Qo]Yg-¨c/L8cgyYEֿJ[. ?[ KJKS(>S.`YW Ȗg . \O~B ̻ ZyT=~;4 w&>IR$~mә5=Vg_6Q-8A- MgЬ?8k6I"wu/}-=E?-dA%UoN$k#U7Lmd 3'ޒsE䎺?kS(yN K}|L)=-hGsT^tEGʔv髓LCJAIFNz c8.dNvY(`ưE~".Ib4rmݠ=Hy&h*2qZWo߾xZ.pK+, 4@ll*3cZr7/Er"% ?=?ma轡2ѵS /kjknCw*= ؖI<ĔC@r&jrXwFzj8zn5dAvw`ԲCX_]#5?Ds%*wɬu&h dYMf P nrE|~?KiE HFd3X3qk4XE; .zH}n*aIl*;5_}>6y l;e)ǁdM%댪?ٯ9B~l;Np Dq$gEtk>U9 T'՗>~P޶pӰ{x0!]ʕ,3WbJBUVReSc92𫷈B47T;IP C:Vo"NBd~ KFjSC1 >+pe?eȜ*~ ۊ{(`5@tü4MwV.J/5EEKI{Oe#sCEÓ0W9{!y4,.&IB S+x0T,]Xsު6U,xWd *?|VbV"<"8 5y>Y5Gosk+؟t\'fXɅA~m8x@ʒ mWV_v{̫0O6pnMpx:)?a91| CS vݧ qN֡ ϟ3xC{?`~Hi-+m:䢾*@6M+̼HiNPk,fuT [e_ ٧W &!j"O{Ь%zυzzkށCY3>,JJԐRCjQ/+[7, h> 0 X1X:Ї8p݁cWm+|ޛjЕFE:jv1zY|JXJkbD@;&{~yDR32i&/vo}1g.BR'ͨsCs. @ N^RrоVZ w@yiF~h7?/Tlx]ĭ .9oɈ'E%dFl(uhLtX&}dbyڊQ٩IoŠ<,%͎"m+4ȓsQP-0c rQVr@ݠimD6xʌsHV *s$}y穨%y2t͠9j\fMa;K 0Oސ&1\@d Q®Da1_X?&A .^BivAh5L"~V)X^m1S(ȶE)ʳmj3_jBmps)+m;팅9<$Lj?\$E$]P'w:z% ݞ(6 ꯳2ƾ?S$PcK0|NAkwst РWcm⽅8IO/т}[49K+83;EA9sFKK;>_kF>Q; ve9^[%隑g`?&;3VׇD"). oyze~Ӭ ԌkI.%8Vm|Ck@Q8x\;Ѱ܅0 Bzܫe'KlimZOB`:G 4ߍ 2ɭjϨ(s[y13ٝU)U1w /E"Y<]f. y=C9I+t[n)ElaJO K`$x~^0⹖V{Ĵ6ٓx/12)agf2iR/t >"nEv@eAGu%RVf5V69DNvz #ڷ԰EFuJQljL! 'GD#m0T m]C!LYiQ qRb0=[ tAx#b)n_OR4ex8CBZ5y:v) n嫏Q7r}gJɬNpo䕫KcXlSmymt4eP[$ϣ{»3ڐ =KU'dT*nc6-:dCwм-wL\5oU耞4[Β6X oM9UCJG:ҶH !>?̔4^UF{o MJ /@_@HSq{cW <0v=ZJ.Xƒۓ/8rOzo׊kԳjFe|h* T.#г񼶍LqvNfK]l*.@cL=*Z:^viED !q|JwcaQ|KB]EbXJbmɘ!c3@ cj\;=bk4 {SGFLkf$ }A68]5q2n?QI, /pjw|(6to]ׂsꆿ#J#*n*1j傦{4hDEܲQ'ɀMoƽ7יڡ*QJZڇmʯXVvR/XJE{+ WJ.gTob"c9&||9c;a1qX ٩<VjJ(B5?~r$wݭS!EO`iJ|a,i!\qʘwȏĉu 訛BmK2U3  f,0TgT3a#[P;%M 1 fkWi:t*ݡ9y**(VbCб&mLqDQiB}F&pV YdyŜ,&Bz[bۊ'g;*m:,9J{U ҈׮qk!)%s:#i%ZsA\70TUEX &H[ > }^HKʏ vnpGhZV׈?n V]/s S-Df6&v܌Z>L8/v _v#%,€&flF\G-l|;"ۍ!/7z˂PR1%Pa[;JыY]=eXj%O?ݞQYΩ^wn&IҪ|_gڧ^ݺ~qPa=9E]K6'}|y\;ꜛJc jJUEDNiQ<)yCQm1&r8b»~g s 8ks U?ɌHx5 caOB"KT GDjK씐4} cw( a<4OwNy-#\@5KJ Ҁ:wSe|f h/R2}M)!p^Ĕ"6QOIis_=\mI] f&F XA9N/|VQ SK:<Ӹ'fp`a.yIKZ~:h Rkg<>0|$$DHz^ݘj'X"R W5$ BN.tU$?0Y9h;{nq<:j8K y/E)ex-T*PmGzZ@I.OyYQS=8jh iB#_M:J|o[fLF:Qrj8;qx4xUj+1i鞑Y>$>`zw┌ǴG)<mmGy5D\W5 in^owƧ]k9x,)!0& H:UWTPןrCփ]Q~1 `[HoÞHހɨ pxP3#b%؁?JRPRΔg|$ 0j#? xY}d4p` qHClDu:{ݧx"(@ie?8Bkfs ТԷoB#  t!RVېA'8Wn g+o k# ]d >laywͤNE@vJȓC-'n sBDP'xD54FӸ3Yzce5PE 68eXMZ D$߆Kͷm2& O뵎4f?DD㪥rwAt#n1pm%.c$dN JBZA.2cr )f[DԊ 4RrW'h0Վgt%h"$/h8pay>Hͮ*gnGX9 gV@.P! u N&r˴݈=OzDr%Bsld p>iFmO b 2aYֿ r/ ;>-(+d ߴUMI8A2آ_40T݀\ Iû1cSC L~fQm﷌_Y]Π_#*}xIxHUEb ^õwojnA"s :I:Cj1  Ws S&t$UJ*n]zPf>kJ*f&Z>Kщvmz#8 Pk~Vw!fPJ+3%hy[dR#gT1?lןl9! O5Ҝ~ wBΐҦ6E)}9):"L:ʼn#Tr.߆CHPu6;j Ū`6K-4 IT hI}#^^Jb2Fă nosHXĚH=*!RhEnV=J:=QQ!DH@W0tԟ.pv CIE{3:|[︾G `oak,aeZ(3HTWwMxDnR?*5ɶU~RceQy*JE9trx~V0 @M5/AX]"s䟯G-PJyڧcdsɺ?N${7hnz%eRk AǪHwbݰ[H*E1z*'- Y vxL &9{ǙdCa|2bYLC:L/+ߛhTOj،q>ZIn39Q瘴ˍζ=rq_0 Uֿۙ*]ϿE_ rLg94UHUx=[ xXd`e&ԅ&fu.T(s\{?!e*i} Lhwo1S}CEn6l^}݆l?DdPؗA<t:!ǖtl:~/A=5Um %r;:Ym|wR6#ؾ;ߜ߮/\Ex`I\ADBr `P0uwHpp ]=ⲏ这r[';MM^Ah3{SxBP@*K|1&Q`a\摌h8;jώoY ӑ<*,oP] +zoDU◙YN#vԡV@Q{Qz|ȀpҵN$'Qf.уk [.qХvm! /7bV J!~hSk :-}c#deA3dm↰1W`U #JX՗nanE{{\ᴴT'" ݐ۴6|KH; 5<-8~FAިMf0Z(|kڲL@Mlؓ=IɝL|6la̮a7>rPD }k .zhmRQv~aͰ.-mX&վe in9*D=R#|uO,t˜=(nQKMI&6 ',-p}1ieNO6N`0V4P'r-Ihԩ#qMoB&9c{f CRI _mIѭBjLʝuN215  d#]Hx5=DeM~b@ekRq$n(5߻aIb6zBXX I!b]SWRB.W&L,O"A/Z&:uD%8 kWï\}h%mCjݚ>܅hڶ/C`XX:]?Tt\wٮU+1b4;48@X#eQ>-Lp_mv2XBtLV5;^T_BeI\A_>P*):AQ $e!fՍt ?ĉLdY+b&,Z-?S)ٹ_ Z)ޞ=@Qc)ȼH(I ⯷7Ѷ}6&{u(֕n>b|f͈*`mL?/ &8tSY,έ +Xɔk5?5n[x,U$Be|w*FT\ILՕ˹J:U6cj }j.Ue0 %4~Ts14竐0P6Ϝ,s7oErX'S,q`VX6GHY`xG&&f1-;6"Pl vU|`P4[3vyƸp%{ )rػ-COR-HyG`q,vu2(p ,fH4P-qBED7}Cs6gQצ X_0=A&nY_aS&Emg#mMKB̋P1f]5cs~x{4C: ަ7zVVg:Ig[^s?Iy#\22R%a>̡+PܛԯΊxD4%+Iflƕ;$]~7a5|4V#]LЍxB *y-HL=3B!{DO]jCkw.74s?"ѵ}%mf>(>\ӖQC4f$-cG+(1q6Ah y#pq'K Wܵpr>JyK/rR;`| \gx(W z9"+euh\+@3CGfP,Q`Z(b%|"<[E7XҦHDR ѺB;*$E.TT%o_: 5޽KlgqYwynmZn 6օm^S7?oН\dN^먎 M$^ڴRw"|/I}+0Rv;,5/Sb4C?h PBg o8IYjJ# ~\ :݅WW ,Sd~`:',Zxm4,@2&34XY|l\<j9|ѩqYtT_[*:`:I8 8Q}8ul 撎z)a'䬵p^%<=㍊(T+ĨLIkvFNPi2I3JƯz:x G.&ѳ"q=QcfSE9كN0+rsj@#LBOO MQ)g"G$ v0׷ۡte<E4ۛϙׂ Dng֯]ĒxC>,C& !^L-|+F5x9\,>a7!s}hॅ,0P#@| 4\ ?0a/%:,iDqlȿF13%_eD Q\;.Ar9[i0#2H4֩3̥99#լctٳ BrJ,[*6\,ݖ떁0>h5s0Xy@7r̓ޖ6^zzXUFfBT]Ձ.Eb*&'$б2]߾un{ p£塦R5Oq)p O^E"%ϦnoHRípz3`yi7{u2΅01yx|jGz h" v]Y2sÁ2K>ޝ nl$fDkklv잀SʓQ[>֥ͫ> }xqNēq8 ++NdLIǗ79bu]yַdc페IK@Uy~GńTРL.O >^5\F2m.(ҹ D2>WC ĢYᚸ΢4m--"h9Ln33xaY#h(JB|cJq봓uThii`KΤl ?Pw >"ڳ!mq0 YPd' \C= $YwZMFi("Ȃj;VRI6;T 4eo*@SgM0n mdqu,#Uib3=>cWUdhY1Xh  X{sļIFp"4ބ"PŘ+{VTJ<,aLbЙZɯ(7weW-09r\xQiH 9Hb&VV\_\zr|"T1+ nI?eU\P$]ۇ7Φr~#ۈr~vz8Ü r=ts/E?EJ5IlC/)Llׅ`A ` Yu _gLCBÇ.~2ґG9D^?R^tƞθZ#`%|WWkmSO[O|W@an_6hpmK.@[Br C"pp)p,dIk䴴LJ.Œ*ݯK. n1[3}2z'P|eJM&K}y/',HpHf D·QmիI2{e>NMW4.ְ $rCʃ{hNwp}I$-5v}N#Fh1Δ2k>uKQ1h4_"ph/vzoރ<;*Y!`\hLsДT(LHRu׺{_qܮ] xƩGj?'yτX+DkOUafQ_VuoicZDʡ'+ab_iA6Մdh!Ph.[2d؂֘ⴆһQsx:)֔TA߉F7(oH$ ޘ}0ڱz䶼eF>4oLC'uek_G72`ꀞtݲc*/ cE;Ms`#eJ1Syw"~tig(xQOm4ϒC'Cr^,:+Yݬ笍 ;~Chso&-weɂ"<"3+!qd_i&o¬o]ͬU 9:C\g=a\|NDamg!DNw McNd ^Tc",X%=A9/~uԏZ48[6^ .F10 oO1_**@'f 9f'ڃU ^a^F5Y$սNDR{Κ#)ȟYa%JCꄁ6 a6$dN灳w:4\ 46>ǃqFTCiH-%q5ڣ]-ܣ8NG_ܲ<:8o dS_ %Kf)|u2'7VZ "F9>!οL_Vtt@LR Tsחɔf)0l@)ayGFLE\y6wF?@ ~7>9Ҵw[/2ƕQk3ҺO9rf K`}P+&p %VZ⨫M&TUc!t,X-ndx-c+-hJ<A ifoiɗZ:x N7tUA÷+T27W9#i5wC8f^) &mt 'P.TzdDIwޑGGxBU{joTw`_C>VۃפY6 _hs@ 5>78~8+ m@.S(*mW<8%+*b]{߁::,䩖՘V}۵+UKkEbd5Swcgg4ʎp մON9c_}YtAfިeInvQ3mD&D+6e^shmZQqDx[{/5= hlCHK7}JĦ˔,Y̿8b~ejΥ`4hx}4ClѬIB~I <D1^~|xW,87+rȐZ0N˕+dEg280Aí;[NݕMTaQ>*C1^Cݰn¢%)Q2ma>WQNb[ev4b5c $e) Y?<=v-c ȥdIOgk3.u50c9a3@2RÎ8S}ainTDg8hTWΩ=+n pν$ 2{ }kd & ,pHj>AdP(^L1ƿ_%+rJ#mLTkw)b$tNo6p28w0$:\zZ!0ʉui@(b9[ỈJ'Sg|&C)=jg6LH7 Wj)ӫYJm ,Zj髭Ë\&yP[kgrW|L~kJ֯D-n>kƘ0qtI$BJ"+.%P3M:ٺ]~xXO#,`Y_l .q)7$%8Kk S2|$Kbt= x'wYڿ"wjDK (Z${4 jq_oY ޼ 6gIڒ&t}9(ꝰϼ\usYv@E~cKrXW؟Řd14,mF d#'tt^=K!m+}L.gEx[oCϘeKU/Go%Vio0%q O3oä?07$lD"0U{suv+G$k;uRit6/Sh")EZtc!|9;IĠ0OO" cb5,Q..]h7F)5ʎXB7jӯ?jEt|2֥Ft,?uh涫0 ;CAԻo26#갱[j)v`ר5Jk*-YrHo^7+;kIdGBLZY,3@_c g(hJr:4y{ϷpѾ-N]r 9%zܲC˜Vod1SB7"Gط%H-UnKk˩ LM50#3_ ˴YvjC1T]nM ǣtP VyD x,:Εy׹zZrE=mI3ņxښcs(2z[QPCHYCcJwI8uh5iպn때1l8?6xx&0לf >jDV rs&YhTv4M|;dŏh r(^%z]NHF.;Z=KQ#}N)y[s'?G\uksIG d64m"HӞܧJ{/7-Lh_?ۓ_/Bh~%ƺ+KutC!>`'ROWsXW7DRjD{';d=Ҏ@+Ac46.p,PX?^C=Xˋ" ,M? B3CuwΫ9П13ȫߩS$_^>3g<=@q\z.cR {CH=1;lk5ep{Z`ЏB[v](S+jh<ӿ7J_K1LSMsb)F3.\@lLr͚ tg897xqa?f]aEX6~ :1_qwv7IX,[ϘJȰT纛SAGV(QǢE8 *8dU R1p A٪bff#^3HEH?&}"cv&5j $!]ό"D "Yh7"`<~C| X^u C~~\-$i ʌ~< ]v?׼"׮JKS(Zv6z^7 Rv), &Ve:{0 R_<_RYr Kr5W5Om?M'\Ca 3Zk,UJ6ɫlr)Bj_݁p)RKhJX‡f~^Lkqh!v=1tv>ěK9¦kʾWM]&TPY0up%;C~\"EĻ ގOJlW}P kٺyY^qA3ir 7l*#vpS{`TS{Q.; x?%iL&Cx_$ a:vi' ^Vz3 +vF#gNm#ܟm*~e`Eߧ ӅS!]]%tB1^&PCCӷ~ !R35dfd$|pxg^FT eu9ղh۳3x~i8I@|zv9JXS7I)W:b~pbiġ0,^[^}s|oX<ݕrSQT\zH*hq&P7ٌ4qZ'A*[r/Ҽdt!&[=hnG |Z%C5ҵ]:IEmLl<կ>Kk3ncvphgx hy׷$JRX*%%u * j:BB9/-G{A%8"Ns돓JÐ)Be -"i $3R^^T8``eN8ZPܷFb’.›Dj \|Z*SUi}?7+?/]Si'mR@5ab-f4QG+&*oij3T=B폖?L+ <<頢X<քg #\%(a ?u'K1 !"NaoD?::+DS̈́߻iҁI|AJ cV,wBe/^;KJ\I)VF^6vr2`'XƒR9 8hB|Wٴ o` B@a0P'hS/GZ8)l%+l#l*yzʓ=i 1 <jCiwQ82Fem@v:`)E0640ʌ0Z8^yqjC_ ,F;=.t̜)r=&P,S׍mDB:&IdɲJ'A:wx1=ꁮ$;79̉^/j^95A|͈kMh#6l3R$j*OXSlC׮0[l0IW<>|Smڮ xX. @5t]pc7@v9v_ͭӀlj>+5e.Q8GnF'w?oe"[Q :~JVOlQfXZ9\_\1lsDyGDCùj, Oa9+ۉUDG^kRFu}2xֱaF[ETqIQ Ӗ? \=E0|POx qւץz $ xwwP_[I ~!dL^W=ʍoF]hM{dJA Й|a>@yzFeH ˉEܔG H8RNNeanp'n')XDBI8r (c2}}6p]d}_^.ʢmCbn3O/y2塗m-1MШȐl=%訴,#n T"@+ ԒE(7ے$(z9\o#fC度5XU6٨N'I-'ӄz<h^er2J&5fO0(_D"4n_zm.U2Z6}4˭9%YEo}쬲Wt³GTB SqJ*1_zA\9cGS`mqoYVD f="俲$> t[bcc<}4QƖG3/$G6mo!Vuuur\;qJ/ª zIl9ҺZS8<]AaD7L8֖WCm 8.Zg͆, {(S,Y(*CNj \mlM(bgng4f_9[߿ Q"ֆ<*6ɸaE,d Yr~p3`H9.lWa vG zl_yp39= I:)|iق LyrdGI(+KGLthWݮgpٱ)I5I>wK$q)YJTn&C\0[}&-T|ѧCj)jV2YpɞzQm2-hDnN_@([m 0gn݇AcЀ=F+0 !] ?@V13$SeQڳ3H![97&/m;L'f'qAxMeZ;Bf2>Fbu~BS>|I"ˈܪW~d֮iZ;ˡ ,_}`ibp!]Mcy!&zsF&6ö^%NO}z^.%|{ENUUXv2+;m9u>vHk/v&u{ =5w*訫knF^kx35m_еMrmJڂxxZ=r88ÄgL% GWװ۱V' M_J=oH6M"!t%~t>eQ{u[XY@EjHaFVxCKZaUl& tg =ktUH:>2ML ]][󊎦p[.E3Vƾkugb \Maщe8[~56$;xPE|pףtcR?OI.Z%hz4/1)@{NjG`x4@5jcfc`+{_?e~Q:E"x[̾5v&6H.KؘWmQ i#r?&J&\У7K$dguad{[ qbmC3)W.GmwH_^0_Ulb.*@}b/LzЧAq ދ8nð-~|A3)á~Hyu*VH0ocݠd줓 }B]o  Bۭme:R;_`2$H&((OSkU!&F$R!ی꾳Uep5C49oMlo<|T~t'PzrlG|U^⒋=nOHƺxvAGlza㹒Jq7菉&c9>3!ػ7="0]*WjIu/=R53Rۇ ,m1#8_f2SkB':? <^4Дaʠ.-7Jd34knxQػx6om#9cF߷;i2SE DRʺADE<'Pb =QR,TK59f[lq6h&:\#D'Ph3&?LE뿥֤@z:opf ^u)+7#6jkt|k6 ECUOϸE=QZV6nNX5#RѪRӶHږ$kvf ŇRT=0#L#߭|N),llj73EGEFVl 6Fc:%a8X*HCTniRj\34Iq:̭oﭔa_Xpw}bm B WݾO!gc{%]wzijT`(Jli y݅jA.`Gu*,1m i%Q;XUC0PJ?k 5f܏\IJ@T::6ZtgfW|vdJ/|,3|29i -VӈqRBx*9= -b2Oiߪړ)i;f@C=^q^|q?#qmvPjȿ+i*|"hkJ_0?;Cg lET\~ [#ȓT$/( ZB i!ī^um?Q&|Tsc}%JKoFwWGpEMWhT;l?kN)~FaacNnNdw,/ ݫ" {QBz}KµagΜ99$0F;p=6Z^w_^#ͯVYo'hhۊ!Z:F&w7E llfЎMmha7>d#1JthM-.:VfVj?8+z,~' L{) _5 s8M\ȉf%JlK,{9`#<&}⃬#m|Kܕ`=0Y>ıcX{nI:3ŹoXh:YW \0 XiᗬȜ!>9(ô4AkIph1z\yOGsX8hG(ȝr s>!6ǣ|50|T+4Y#1hQ-yI+l/RXzRvFyqh zC;13F˜W4v^3˰ pP0F5HhHBp'1^eӱRT.8Q;nF5ij7n Zx?=+#boR> :DV7F [1D' Һt-Oo1c?q63C ޣHo{' ad./$G~nl6аM$c&nHd$WGN84&qsnZ_鬭.5^F+Mm~-u IjRCi\ DF xyca|c%?nzSڡ!~زq{_gch>fs*-zN_mrDd PIфT R$TguBN/Wpo5l+opNM.-nv@Hgϊ(Tff_Upi1Jʆ8̽yfϋZ` mtY&ӝ⃣ߖտȩJ$ )}Fi{,$7ꆆIgO !Vo7` ~< &%XhH^a{" VOzh9~b!oy/M%e}(k.fː*Hw8T2 8qm-7$O/XipEυ,g>oZ,Slo@;~g!Jݎ#$ZO H۱[aGcʇz˓GǞd&0yd]2zOU6^:rna2`%# )eܫ@+[D Gzԕ)Ơ*|YDP#LS(\<:i$ګ2)Ba~N* PQ;2TR3X5cl8}:Z.~y3Ч^B#$y 7p]ISrJ9,$R(V_{qsT&k eL4BK.F>PLA*(U(!LB0bj='ѓ }|'`{_diQ&}ȣI^W )6#_5fG^C  |~$㲖[b$q^Fñ2驓EGݬ}aåTNtޚ `ƌx{u;I`AqBC:L~0tE;%B͗#gqu؝I`%.h+N %dk͘Ь,\qzMtKmKPe)˴hu=|9 S5gԠ=ŒGQ6rBƖ`ۊ[#B?f; 4x xlۉ64,N2M6ECwVHmlDMFTFl[( z( ϊiW YtCY!@7𾋸|{{.G(e 7s8X䤧~/uor3 ߫/NqNCAC¤ç)sA(ICh){uo-etIB܀}KIP|7Qק>9kxatRɳ!^l>nWCIb[|)CNqK'S^PKw=|i0-sNWve/L^[O\EY?M(taB~N|-׿(a> 4?ݗ1u;pZܡ9&"d4SR4kfNt -zU;1򊾮B(JrwEb/NbCE 8iS-in5;qٽLbx [8""mHc2Bav҆tY[P5ѹTkD֊Zkr*._ @`c|D)Nr1 :x5('kx@n4.qe&X\;g$Cf(R['XJ} Mq˻@  EwtƭUj(N,B]&X&|VS1==`<\8}lvJHkybΩ0Y>+)ATvcĞ0yˁ y@Imvk{^gֲ. u%^;`)e~,p'g; Qv]bq"Nܮ0Fu.gE޾2bMO2ƥ3RP sm%ū h7 SVkK絅oDdҡv+2R`* ,@]o"n^t_c})Sa/h,K_9c*Q_LTBrEǕPYw@ TtPZCJ!˭ D CHMPB tT8(̘(&20|@~=y`KYF`JR<( sT}MH ǭ=>t\όwȄUX#>nkEtFXI1zwf`̳vqREq4&5;rKlWICgr!yq_"|7NE5( \ }׻b㩐arT 4GTM( (|sPHLX及;d 'z='򃮚-PF~wDO_S5%JnSm!߿;R4$nIgAO( u0C<yx;Ya~}l~~?]?&it*V1d$ =#Y CW*d 5Q:ϽƊw*}B9syHk 6 W$;?E4KڈŸĀEQ4^BRQ8 MtF em=zyhb/ [m,Ĕ^7}jZ YRKF*4^ D7TDeP gK|&he%$A.`s'|2Q=Mm9()_TtQϯ'L 8v.?~@E"n _ -?!HBDp\2s|!; 6x/vddLGwk]@ugF<-z=Le]X6 򝖯j1`{]M:T0`#F脫#OC%E1s(1Ѕ|VM7Mԍ1Z!98XcBRjYM6ЁgL˝Ds\6^&jyɷ/ _oԐgNцN |eI`CoI]eSV {sUhNryrfێJg@i^>-_.aP@pW` c /)`i1nt3Rqn^"wN y(QZAsh|0`ozLAi(>Oƚ 91KCQ%&F wfm [wGpM0o"YW+Sn eэ{. K+p:Jx,/f+y{Si ![ud'E}2.[eYEhM 6^Aì""RG&CF=v*.)ܨSazȔ&N5:pYhlKjKCQ l(:Gj4˿R;t2n137xU$..BX+yPҤ^F߬ ah3DLeL 7I RƅkNhA4^?ˬWf7[ZV׮(ihF[2G(U w"x5s'\ &,T)'#]t~{BaGcB.eaٶp|C闈Ǧ-*IDd%( YL4j[JپϞ &dR9'y @'`vN0{$HrP3g]wprS:.Yl_69r.&o jpPL UVN_Sjm~<{E§%8r?xy#lz`5"h^qŸBZs2p=ē$u3o-Qv3h<#u~Ϣ,=;7b3dyYxIiS7:ۇtu?e;7zr ‹m$#r2lw_L^ ~;.C(%dfS9",Fqlэ-xLD"U}քj;I_R^KTsDr,t p1^08DegRq@Ψk-ECFZ }rj`|,=iues%!Qo<[A VM*̟#—QJp߼t8wáFHovVmngSiWU4`:QoQfrQI!?w̭H ʟ]A݆2t*$5&|b׋]}g+o*FgN j`ek~a>c&P뫝.+$2'E,Ժ{hfC" 9Kvkr(D$6&ȑU1l7A;]HKBmXgX5- S墔@(=ij^)"~bj+ W]J>l)Vg2 X=?ټnzEWkIEhSэ];T-xBOaE#{lL1 | sKpl@ʸ\:%ڮa tu#&%hpE+RqQXi y&䔡'C,?hL5"1JogM(5`.Ã@xjqi:(ݹhmQ'Gb[/eb(r-Q1v \7uyJ\4Tf_ѦW_,5)#?pP$ӯ]0=aA :ݯjW!jԿ‚sRzօdK'aYqP&avdٍɘgVilv+۲~Uݩ&Q=P tL2xB'fpwgANڕɑݻ݈h!3ژDͱ}׫:D `'ys#|$ն4/ԱϹCg -ʾ&spl~ gr͌:Kn=%&G!#TDLTS1 aYF_A߬|)stl,R2y=Aͳz['0 h= y|Ho:7W AYbZ·4HLmO#t! ^E~c0-y+Ur%BO[2t=XUUD ڢE4D T*aF0izT*pjWu.ZJå`Py8B[@e1ۉNۢ4ۆk?c|T&tfq}(:MXH׻i(]%EdVOfC- 6I#B>vɏEs c*UUv^MG|7_F~2MkyL?ܔ2I {{m>?8F6a )CisIA_ &|"}ti|Ul.,Cue33Hlj0DHUN#&Ew$\_EUi "F]X:a 0 lr}Cgk=:0 dHmlu+y"hZ󶚓aFbDJ1Yf\h$:;_Q 6sY %ѬHX_ã?<"@#4PTqEZ]'БAMY ɬZt#XoNGaqjt> 3Œhj 5Z0C 'RQZWSq+5Ϗ5|.gvI4dvs(: `f+VΒwM)B5tD=nYJr=>4/¡e3-&U@" Gq"c\pʘ6yc:_o_{c/coPy(HΛ)3UX,;}ߣK+V&}1H=o7տ3tIF63[;*a$}arUSL &ؕK^0al2r3uc˻59Xc6mMtw_o;u"p=n }w,ήx*I eXPx ӧ7IK@B3G$VHہ(Q޹뿆\"o)EL3-Ug"Cn7_ @U?PqNخ6U=Bլ+ XyIِ;)JL}L@"[~5̦[ꇰ>H(?Z&eƉE%?բcy 1%E *8m,"ZZ+$v)_ ~j/A-?z{E14s=`(wcNE:k4$D`.SŁe8o+ĿQjY2 DzigCoױ \'Bf k 8~]`=AeOE%nnLyAmIkJ;gx6OJ-ow>2n@o-X9wtUdf,ع`XΒ(Nܸ2 0ᰶk6 .Y)^9]1K`<ؗ\U vf SY%&dq1$9yykhd컪0yXⱲ_+~wlɦCRK_ аXç0{(26 y^v YyG*屘&}Ԛ#I>"UP!wmT`T'O1y[w}<[8jLxIWfb 7Of mBUmu,*b&&dWZg֚7`$Di9م5x4A`mp=`@ny_/T ``,ɦR] ;uNLċ8Y 7%%Z$9m8 } /IgfìFIV\:.+2&/z$A3.P9BO9tSO*4 zj"dgVdC0hǞZEFSt|3G:-վ[껵ti DdmȪ]dvdn< : 3ޔ6s4~m`J-6.y:{v ~Vt fKe^u:K^'GtX\vfb*6zB5o9̸pC)mi6 E3𡏢ِH":dh7Ǹьa ~ FRGɑݒ&qu %R^fUT tlKNyl37r}0JAr32A8Io` $||҆Ӧ%@k-N /d68+@ a RL<З6moU}+#}aIp0:$$a4dwY< (kt6auy>!mM^VNOup,  HF'Ko,[v0T=kguA|fFGSgyfd`J]{+ԙ\ W7?>[S &9&aTp,XR!;FA f nHѦpt# =~n:^"~GR/W" vȆM/e- Hq72 >S h2B>I i[CwuuwSA/桦>L :b/V36O9`sk\`ES7HZBv uf<OE2M! f⊍43UtZB iOdzA( Yrl=yD\((ۥRd8Q+!PppZGޜHxTGj !'_c3q h/n{}ף/_,.Z_I?beː$B|&i'G\vo=CRS6S )>g£H~Ǧum V8FKz$Ùe@@4=#6wM s~ysAF9n?K>(V!BXUק󎟝h7߅uUm+ =Q`)$}뢂xw[ǀaAHn]@l Wá4CJܝohкSĞ#OЬ"^s `xI.J\%MǤoܾ'ַ\>}7/ČUb-C[~҈j+sPw>a]]R svWU>s)+ꄰK]9ҽ6Ae_~k=^ Ŕ8(8i_ﳽa"~r#c+3o|cţdJ9"FL)р+l 1f?5q(U=XTUaz_GcޖLدY-%[K@Q}n]*Irq'l_x*x&(@pm Vn+y,)o129Gh9GQ3UȂL eHT$U1YkXc'9_P`\76?SQOE1خuZ>R6@KɷpΞʕf'''WLƍ2Qm ؗ;3K'9Z !q:x@jE0fU_$j7^Zd.ɒ?7Br#t>)!"bcOT LϊHLiO\'Kѓu/ ̪,;v fR)qblTNO_ E!T^zxCrg9^lvFD. '}uw@- @i$ tT]yw"_Nv,6PcfU# /m0o O 3z.ë B6#K%PU[yW!oŤ rZ(' +AZJ}J rV{|h?Mlf [XMiͷQ*r gt=& S9t<8:uG`a$IIX< XQQ,CL5{-Hz?%_Nkx.E'@7N3q(RӨPK.LZ2FxKCiٱOƾ+EE)=XB:ľ{;? aY4¹e)cY9O/JmӀr2iNdKUqpGfvkDB<jJ.iS ҹ&k[.8| a10ʄ17N,';jNwYaaf=fo䣌\tp\^iW_ݮg͐O&c yue<$5{ƣ+"lh3nF<նq .һiBCsq~ŘFͬ(bhVjBQzHyF41!!->[~)YtU7P0Pz(P]oin9/; O(LoĦtԊ7͌1љ߇6KETT[2D*9پ?2,*t̬N\c`,FVl9,XS֥\˵Kk뗓=f?SY~85{oQAXݰMΜ :EG< ͓O3R@~$m6śkvZZۡmUz0letQӰDZZ !乢5-@"0f%ATQ,yW`y5,K%sfMl[Ê' qWV~qfEKJc:8#fӚ0JoSvh 10o9>lvVk. l)AA6}iU` xJbrGi \oW dg}/WYLhzRKA{Wj8UHѳp((+fqTfQ3 p!RDݠyupy7ŏyQ#PC5gfM|dd$CjtgR%C[! GY+9\҄1xyِpxy$,|?pDz]{i,iݎSo}NdX<m`<3y5CszA0׃tt_u:Ӆ䅠Œ}ɴTo~_%6r-_*V 7IbGN.m}.xvD~+X5@}ieg8Ҭ#le{jgY+l<8J>j@z!Y_Pџerg< ]*~kxf<2H:,eSIָ SF5nL\%I@//Kuae+c}<qʼn2BKY6wJ;\=+rGz"d le:X`}%aX!1:7\!oJ`F4BwP‹}J?/ǒN@'@7sχΈK}hGE*^P~)) v:U@;*j\Ȼ{Ƒ-Y ˌd&0w,+j8L*Db~kFC:a2f(4ʉY..r\) -cq!)"K}XqﰊiZ w5*0bCtp]ed$(SЭ >@ kV\9L%82*æqڇ(_LJh2MjxLO__`Jw,}9>eӼy1:QtnQ?oh(=2 a4c]2\5$ekeK wWspA\y~EQ #;$ʁ\>j7`nڰv =]j)5(SϐϦ81FQ.QsÓڝ1]E|eyh zlQ&3dС;[mV5_΅OрkI[n 1ux).iDX"~wl8bmgc6|jF/<ҭlµzoA?q +]S2u 6+葸肭Y3h/ תL?x闖i͔ PljIDzqQ6ThI0di>Y~3G(&!࠶3X0@\<_HBg.zJv'- 2 z^2.l#cK%)IC\rfˮ$mJFvwϳwv{#}4ϔ)&]yТZO]?v`{#q\(Yj'YUx+od3]$bR;H뒿)U):l+5H|떙\V k9 WV5naE% 3&1T fLF?jǑvdXV:c =z$\ɤ(1ypmh<'wqpiT.)do%u ̖ ȃnHd;RTWtr=%gplv#sd,&~zZ=I]~Z%CH}Ty!қ\wM6D_!ػ&4iM2f7*A 'y 5VRO{hD-0:>n?#jaS"LkL~u j=Љyi@{5g)AQfW7ur-܌|y{m l`Jl۳=}X6AtZ:xC P0?yǺ,ɍ+  {FPq)$< kDy geGY]{V<+%~{5#?TC6tR7Bn}&3JaqP~j)` Y=W*e[&ږ5*8-+Dq|veD7b?'n욀U>3cf#d @{[[zdt{"`+Xӽst}85]s^# z#w)q1=rԷ3Q-?!2+m'؄V]M4dZ?Q[_G> kR?x(J{ª18R`XKCbi,-[}//2 '{r; ភbD$j|.: ]\ "uP }YF[ NV ,߽O:t0JZH'ؙKq`X&Đ2 q>.1 p >_!VqmPON\+M{5t[`cIMVE!}nH0 (GF#*& H;!:7ش^E^N e|.Yc|g@O jӾ{#3 (_.⋝QtB 13jGC(U5>OOBˌL<:+Ѩa۷,djG:RFmG@o,v(cBV{ʏ#Xh q +ک!"-rxpiavEjK<A Ͳ{mcȞئv*]#)>68C]>-bOw5 Mݗxzp/ ۤfӳES_BjO,݇e)JsF%g;`远h;̦+JFfsVYxԿ׿$[z⬗Z!Seyn4LLBQև(PфV WV\tL%UuGizuvKyHJnx\G\Le A~5h’Tp)DpįISeM2tT@ͨEwL=xz˶ He 6Va >at."QjFϡQIPxj!ar [` nx6A (15;1i`8KqFh"0J:  X671(l` Q ;V3X06H{g AثRi7ChU36@ǖsrmQ󠦥,g΋|G A-Wr6x%ŕLCN;t1[/ o:fw{dGfjhRqУcnؿ(=TuN>TS˽^oi[Bwݑ9C<[[RˁGNv[ٚ&Nq9\F 'zdX >@ֈ߻<)fDOi Fd[]D{t0MTiM3$"\Ƙ>6mʏlPP?L~pr=V *r^oL]>#!nX]O\O۠{%T}uVt.GuQ+3`"y*tQ`0֯l,CB{;#kDUz% *S#!aumb욶ƃji7qAOY\-ڣ#s)**d||# ;6!{-7{ZW8 X6ژ?J?Süw0Ȥ( XXߌNt Q_뭓Rǟ,>gq|;n2)" qf菕YBfVrpX3{ /gH2f<Qj j!sM Dؘa{:k%n`=^0_)@|ԥ~"+7Orc'LF>aZK_H! yݒB]جj`*-'"(5Y\r|XUÒud8^#mJ Ivp{N0sm>5ݘd^\*\gdO7d~Anca/0ڮ&;cN(>ga{KW>IF-!! >y߰r>w~VJ,kӄb8QқzX2|KAW{Lê9ܴ+ /l]ȵn.kբhI-b)u_RSQwX; VæCAԮ7;8 Ӕ?Z%KTv0-WpBnR;SGx Ef%xUI}3ޱ 5Gr8ō+Uk5G z3h z=G"RmPmTk4w{SB<0bN \J o=Vak tJ! ^an&BUN'VE;:`]g.j$q]G- ټ )>;hHWQ  /:Q|!=//.)s~h-[e)>S4jMakg> 2,jvtcb9ܿX]\JvN)M/tRfXyq u(eUK4PD?*,u ajCfZ`Ҩݺ t*w2wހktl`򮟘ܷ E)5>1dKeTaHwr3{75n41q4ӻian ]=bX/CT(~"2?#"/M6&!F?+[C *m-1ۄk|]A2@Qnu)RtG( Ǵm $=xG,լM!TD? Su O۵Ne(9 d櫸.Yz%l|և2 /iX"T c8w54-A:KcT.m(R# V*S]~Uo,?ܾoOQ;i1B0o:D;P..vͱL?M 5F@I@Eŗ¢{At#ULa M/je~}uhϘ;o'kTϾuC L(&n!C@ד :F'h(&3?Zzf}U&BS#_xXW3 9̣6\y:|@D@6‰-,t ^@CX@UD1u7[뱋|Eys༹*χvfUi^yN p=1r/ļ1{p|xvV;țq5K̺Q̀ol”EaKyH>7>o_!-Li`>H#c; D.pҒt}]pB>MVTt7W/ mT=tdnP!t[Ys[:ࡔ9Kw7AFZFwlMы ha=.$Uceaꦺ`MaL  V@dr@LӝSې"êANQʗoZ&3%#s$Bu4 , >VMH7RV _vJKW~@0jpUېG+ J/գ|_|]n\ɢKN(mk5I2,4w<aڧf]K No[$2"Z|m)8]WݍY"?6"̈qv"G}ȼF5u'҆shb~ja\B+r3 V9-W-ިM#(5ƅICH/E#D2c[gh%̗L]vSM ןtKJ яu oPYhu8C}P_"kˋ9ܖ4`*;jnxg?E41 BF* $ `T-SyxN8 ȶh\,> 4_7'P']#*9Y{=lH:V!1I+cY;?4v5Q߄q%`Z|jz匊qEAV%!@fbL=iFc_1J#A$TT/vMɕɉe"-Kd h˵ze'GWhn"$$n0{. JƖb{|!knC4, LR3\t LӇӀ,Rf/,>ӤBja\|1gX^{'  b* #zYB}۰* `5Nl-iRjQ]f~Bmhxi!` ETIm$/{v6`9 &-\/KdK%aeJ^WA5w+ Ta,7_u9e>VbNxw͕q { 0Ex?O0+(Unݾsנd%2!Afô#* @iőUfS[/j k |M3YQpAΣ#~ZYз;TiDrِy៞߲zIXcvgW$t0_ _qboM7G'Eifpıy ׍&S,3 X .O4/ve+:ӼG AdnwN W"oDM R FqX9!hl_`ʣT|gFC$#_r^׸B$5<լ9ȿD䕭4Gdjq0 A%Jq%K@c"OzXq k.6 I~y$, rΤݩ{]/ꋵ;IJd?3_zDМ]xyj` lNAfkf9M?1nbv 5W5rvuM)7HZ /@ԥ)٪~/yU~#SwsnVN,`B)}v.h+,p,Pe/WgB5 ׿vLզNŁ=cM7wg;JV@ǠiOnji啙wfe9m>w. }ug(f.۽[`3a5u)~.NxCS5>J{D]f1ۭ9|h8J#)}ʕnבxbwۢnnVIj[a93> AE$jA x<_H8; Gjt{Z!ci_1?? ߌͱ3GrIG5&su&99Ge, 1N$J3,.2pMekb|Pes_X94JLs2iQF@b _rϫ88 4YI^UQXp#C *)m*e& tq[P:䲭4]?FfYj3]V.Z \Ìo˪Vn(LiQT%&J46WMqEZJ(  $\{"ݴ6W4hkm;7i`q7&rׁpQ0\b0,Q~GR*4GR-&Ʒt{c$J`r(cOk4Kh4fX̥2a\ IQT[bڿX2H`wa!w:vdՕ,alb^OZZ{in$u0y{qlrhɴkJ:ny}+ˆR2$:*푀 ׮\kf؀Z{vLFeRmœOOS2ձַ "*([s)URo7-#4`.Ԝ/ L:0Kgix ޲!lE{ kJSQ;%<zY٨([h !}]btMϪ&U< b-K<7d s3e\˜4 x%ղ”g5 %} xE{T yq94~l΍, m%zR5\-\_ٌ_(9(I+14]hE]N/PD_>(M|SZ焸5`Y!UNgx&E?|aL/ljp@ԤFɶE#<20o_aBT:x\foGӽY1 #skv^p> Ts=ML&aSS#>-sa5/Vew2AN8F}AQ_ߴr)n'7LĠhnwݾf붜BAb|=B.īFE'aΚ!?cm#RqR$@-֔Qf.9"΍1&B6i 6P? \:IAN5pEiQgc`ùwƂ@6JQH&z21hzeuri f?{#l,ڥdaW5_D 4m`͜ $,(MXjE&hJ@k4*VȒKF2Dwgg&`TU{(xfA6hw^iO;:?RơPHM( Rk2 On1\k!g^4.mb?ee:-9{Mc8xo 7[19ؿR=6A-.yב'6O5>6._VPhUCJZ|#GDqGbxELIJݗ`DY^b+gQh$ƎlϱY _A:})/=`K{馭t\` !kW=>x:981u䷫>!O?[8TeA} ?rIi[= plቩ7+' 88Fk4ˢmk ) )e%QM Qhp$"8+pkJx*?D-dy{a b՚ҷ84B:Uȑ-'(&mia %i55=Mq쌽lIF˩#mЁBwxcLO XEFjQ}҄%ִu2h$\6b_-ѝbS:Ao8j4TVݰ6r_+y x2Yn V{I^-Y~<؞NeLk𗧇B(J/#}Tlp`Lڍ<%7P9Wsӫ[ߕH?(q;IU9dS@l˒Xfax2]w &4EpV/F>JQRY1u!`ߕ#j/>6,ߖ-~ABmh|pWMz`WM=2*CZu 覵O-Œ$I=#8 /vs;"^B |&ep _.Qyha\qa DTl1A!{^I˧\^R䄺 鞫ľwe5 CH=+f R%BeBk\CfKt/p.F5R0׻l^[.MO.mS̾f’n܈W^y_Q)肓: 6(-+sE0@{i48WK_O%7&ı$V\ikhwJ`Ȳs#!*v!Ldۦ?.gI)uGc韴ճaXwWjf4^'1\ Ȇ;yΑZvtE^s6P ksEuh+^rr_M6}Òd]2HoFcwA 3 /OF -1Zˢ^V ?S-pSfM?YjrHLWD1?oJ*P25$ !Z)9JWqLfv\,`af&4vbWD٬+J)^~ sob?'6Q}xpCGHf(KeTYzKf* Id$tl#-OGdB(ĩ".cKg6Mn@$S7]O 7{zeΉe}44>͖V{8{ɠjf⽫=I(Mr/ t7+`<mv\vhhmC|&G0I5Alry q"_=pѧ{пʸ]6?׋“*/ԩS>Ȓv8i'Z9r[FOg-cfZjʾ)VheiЩM"yuaR9G)޼iTA4dUk5┰;"C)֩,?OS AG똛5DUIrO=ULj.i+j+'m.3q @HF$ƒt(2 ǫa"uYܳb;lIez*(MQz6]I{O70 3F%7XThƩRG inIN Sq PK"fύA elآڪ8!hn ,Vw&iNR3@=ԡ'p#H |\nJX;\Vu{u T];!aM7jI.<-atL",Milp94=Dg==YUFꎅ\:\P}q\60 x;k%mjGATe Us~"ߍ+g@j籡M5{1F5V#e@?nն R!Mq7VpV3:o$g$(|a!?aFYT}Ca sCR))I6| &D)Aqެ@CGz4Avh,LLzD&YXZ8ew / 3Ke6g FmYvy Ax~)ѷuvr(6[k)VX 5-"oUKnHLsi4k}kjK*jI)6 ӕ5kSƅ35=:\gSp:n*唃r>zL8r\N$ɧ+&sgTU/e1,+u"?v -0ɀzA͋Mxx^߲ʠ7"u200vh>&ҢpzӮ)EA"]m&O1KW7iA m>Hh1$^ncO":;RIK`(ʟ@4ܷҮUye==MLq+ZPhB9/_t JxӮ"&B@ى03 2I!r4ù!V1җ:!iMnBU O;Di!-z3d=FY`0Kʉb:lĕʿ-L"tp];h= s0%´˜VVkKK/2LyhBO% ҿp%*΁575A@H}La(>ze!Fv%2Y/if&W~TxmJjƷS^GVagҝ GtWa̭ pw)T% Y. Z9 ߋe:̠Z|ހn?ЌNuo#p*#1PByN,_An9el[K98-0y9΂w" 1%E/aRuU-:3©6\[ޤ2ҶU&i.$p:<ܽ$r{gZPnGM7b&ݜ$7? sJzzPfO<%섑ni?~>Vqx_}l[3=}+f@l|)N|n wP2kޭ=u׏0@Ph#̦:qlZHTeU)6u\ OWR tAad(e(SEZ~ q@[wa)(*:ӛ7qz;=ȿ"ryqP ' Ry43iV'n*e)ѕRԤ<)BWpc@mM%}L̏ͬ$P! w5=JQϝULUsp@)F.۴inX~a-H3b l` j ,oTuO_}ݲfёBzck]L 8cx F ch7̈́7Od,낭A x={e5xSfXuFb6KS*} @dڍ{!- @;u\7,)sR Rlti[EQcG@NBoPxCn=ABZ\QPc;?C'-Pyhq[}Nw8>?M0i;7zz~XM[mۻg,l+R Ta" [MO64pSaaW&1Nh/QSmB4kpq~Zh0NL` ;\[-(| /iBVj VV^Ν}U U'% 5#f9jH4{z0=Cuhh'`&5'K<=۰Xԋ1aUX|7 uF? {V:# `a@tE c穃ZY啑N̜. ({cqzrb|j@s1/ pC}־C/I,o4cS<|) 2^C>"-L 2|YnrؙI؄[Y糖Q8[Co["[5̡>oVm6R4qbS0>@;,6]%i Baߩl}Af9]Tǖv('9CZ #D]Dɸ]smcm2eus<ڃfҹٽ@!Yd }\dw'~d wjU#=c3>z> Svv_ZROK\-#K1CnTgb k ZDRƃhY["p_g|R/b'Z4,+@!` vQ_ywH%Niq|u8Ǵ++.:̿d!ECYA,``w &qc_ ͯCR߳$#Mƕ uŮ8ȶWyϐƷ{8eBZwIULmFŲr_3^L6ֳ2}PŅnE(!J)ObzUu-AM}Ρ7=[y|o9}7"w Ф#+t(-:eq%hq4deL !  Oz۲<$Ww :+B->rQnƖ$tz(Yv/BD<3b#ov҈׼0uP5Gc17bB+>38%}"6p"\ $VErp.C{Ʀ?.~z/wLa^gB;e[/T8ABx3ك^'{l/D8hc@yNq(+ɓ Q^hÓXj[h@r: 7xX.+8㱖!/#sͦvˌ&Uv(OLͪ;Z p15U Q6FPL0ܧ977*(gx}(j]UFNW IJ5YXXu-Y uH6 (ӫz|qvZYy3NcUn/v *ebn[ǚDHzƶ;Q[_]j4GԔ_#w\P= '" \G_QyHj=QR"* B+{ >( Z!cx`~(SvnM5ʙ5&99*0̭Ɛ Yk.\Z_20R߹8+b0r6)GP̞x*D2@Vʶ뾼^굈5c}pie Hz#WbGXWqFb:q HipM[ǗH:u[[yoIY &-4mtSsA9zH>ӛ٘#Cs@B#bfHJк(8ɜ$Yyv-9.xw͢Ke[UCtdB5r^Srz.\0 ÐuepRM3c §#ୡ%+0v5SȢ+-%E/299 'd@WɭoRTO"~7  8>yS#\\>7Et$$بylB{!E{ :92IyaL?Ñ fg\k0ld3qfh7˸BuE&nY^)sNćh[dT~)vVC >ѣAv a H֢QkF/ fe11 I:gl'6uGycQ$䦓 # B?HzEjv -\Pӵ>v-U녓t/`RGO.ڹqKTf] JBe,+hWS1˶\t؛k͌wxy[u|5e5L ]4iV:t#js#ScAsKE5]@B>=>0ŒWgi2 ˠX/>Ik NRŹ6 %-~Or NW_3 ٝ&(;0bcdGܱwe"cЅJрF6L0/?qn.ahKdfP 3hQtؙ!D?y.SY<5mJ.yݡ9^NݒНX`qpLcU?^y6Wl<ߩ4^ 4[[i[F G2ҥ5!u80֢ 5pB<>) 旂6$uEh5LC ? \pqa}yHd8/Z<Hk#+E0 7dֹf:Zx_<ѓ] 3Ϸڵ(cu4]曏?UK`V}Mȧ1 "H |*f@̀=lsG&ufc$%''W 1D>7 Tu\!ZMפJѓe=p\C:洂lYbx4 "؄xPeEMu[aFxa;* 1B(L {'@S+l2@ G^&`}9ad"gegVxnejLҾ[{58+ՂitEA K5:`/Dkp; k8>MTv5 DjW 1!_8&q/--PnA3_9~:|NR5,ѓ@<'̪n'!H{(ݕ;e(_!qgtJ't o]Ta,}/+ktxtbDl5 9 rY-?Wf3<eo~@ȏB꽅IT|$_ 7:r)p{}R(f5xPȢB(q5ݥ@ct*~Wm^M/AUĝQDk 0gI'0XMnzMѫ]ٹ,63fb0XerV@, Hk.$ɥY"-36 !̄DZf\-MeMaPyD N0ܐ}D̗4Z3xM)o/7c/ىdaKܩi0n%;HH]:?s[p`n0+P+\ x}c0*0*U8ڶ>:+,\5u"hǢ+]ϖba(1&öf"h|:IPn!SN_˵ӷGZEUKAO3$$",n0ӫuumjQ6B)/6,$RYaIT¤l_ V}H3?nZ` v*3[-JyFFi_]q0'$̢AVd9I+\Nx>C'ྪ còb\uV(eFe[")٫;p|nBA'/gҚPXBOF,a\O1p#@k,<Ϋ;͛{]p(}ȓFJ6,`!=fՊ* ,e'#X;\> ?'(Sa]d?Mf) )NBxýa3ק1I9TixB\ضucM!$N: M \Aiv+rR3u_p{Z7V) l^S Ę-N8s H(9ouR׷4MJKv":>"T,V[VA^&!D.]kƩ1 Xr,q?BaI2)y1MP} |2 '^C1AMZ\:ejlEt@!pMGQݣ'ۀ Qv+bI3f|F_k] ɎqY+|`IL4> 8;"6X1x Ь.=$3DQ z5dB^}+؁C* .傂3aؚ₉]L6B #rZ׀/•4 m ^SŏNIft,p x nOs84Gh]h$7Qҝ,f_X#1| zP}ΔiM Btyp-}+R(38C<D#̡4BTWɰEXxZKD2ukIU{Xf1^]b%Ľзl !&E,W"sfJ%放(r}LU,GXXpUOZ+lD.cqL$AfPJP򿥙ADFo%~T/IІ{ln2+E)\vj`T :soQ R!C(@&slJ@$_36O*-Zz#5oyxq)8_92QtoD 6Տf|fesV:xt85j$oPԝUd`JMY/~}7E@`u?FYO2g@-C,*`Xv4j'%^--^!e)zo,'"ݪoz2x'xW@Ϡ+Ԭe:)Hvaڿ 2>8R37gZ )Ko]Vvu^ 㻿7]s|3dDRޮ}-8NVVFڕ=&;7q5@AiF^%gmZ4!qsځF{Rh6l7?U6:JvYA^%6elt 38Z~6֥qjԴA\+=Rr YE~RmEy\lIS:u!d vrFm_9YwR/6 lH NrnEy~s0-\ uuw5BfeFŦdMxs0ԧ";dI3 j@wZɇH\~)8HG9-\L ݉ʥ/ǔ-$A)8!̈=P?$o#g(_ɎBv`M}|K/om_Ns >re#em֬:*>mN)l>{b),XD+B"(0"S~T W"xV"}ɭ 9?2Pj/|Ka.a7#;")cMf0vqժD0-w4tkQ"fDH3aQu06 nBw6&hwfEI=8{.+,CaQMB`FNjſA(=nd97Y#ˬzx/ugRi7]:[^fuԽ$qE<'C.4'Kq4I0,Nȕ[ʃQbo^#zB5X9At &\혆Ukaˑe!I0.]3bm{nIpwM|^>ǦCBnĎȨҗ+ TyR>U&al&/y*"6%Y&n_j02eK iF jY#뻩 mmO ^/3>ua-|޹]NK٠"֍Eagnc|Ҿ,~72*_Ny8 rCiɷ\.m\gIY=AV6]LcXT?.tMi=FuT:3`2Y#wn<7?aV?{uܱgv]VZ،$ {`.A_Ja12O\i'בCʘ7ĜR^#Tbq5+5RI0*Ri=RrNHi$IJ2/ @&LEjY郜BZ3:13HZOA;yͲ'KOq!AW>!ԫϒF~-)s'"ƒ(rP^ f鞢bBr *k𼧣M&P_CY(5afaUt_@M$Pa%\I {uXu3uco &J1ׁ{_hp Q2B[3Di 5>f9DX}|at^ sYl.+SWn(3,ٛؕQ7ˋp,Pj >/nƂ;}Ctbu0A̞R*!yԼ0ߍ:7|1h892txT{QbOe=ʼFnLG6V闍#u !r;,SJV՝5Np~Ve"ZIa1ԎΜ! ¿]Ȟt̻s IXGzu-+?01A eĝn٠IYnC1d;7t)MTPmyz5g_ʿH*- v0lIbN!I:ى9ېXzqEIСGSOR y'*ŗתWm7Z2[qc>> r|}w$N/&،CH Ē$e,]brAluc^NkҞZ\L? ZeGNR |*9>g-QK#[0/qLx\K,<>[20 .oe fYdQy0oyPG 9eK2 Hz@bp-3 6FݙSa~*>ю~wZ|+/DX.9f0(cT\t[xskxHzʺp̈IK ɉ sN$4A&|ɢ1TOvPoVP+b*[7unqq3vBo"4'_̩Lu+l=4Ŋ18j3+8p[Y9e2Aם'F˘Lc&E̝&;iZ}I!wD0{?Fm/%Pyř{;jhJ u>'VwQ.tn,;@ |ـӻ> J#oÉ.0wTan)gqAƊv^Y*ukKȊ̓Loڜ6*&6-WX3l7$y&KtK')壋{qRuJPG@ەJ|HNAq |Q0k>] gDbt:qAQJjtmC ep t:CM[]3 .NcvyyPU#]erpURZ &V[0xOM ߸?,=Pf"⬴l&i2taЦPq:^gO2e߸i KRaZD?#agم~/_T= Pb9XAO, ({"w1 ̃0sVU权0*bKE^{:(ָ<%H|VK!H%0=#gLyeP;lۙ`_mUa?4OZ oT(NIgݗ&iZq~½ -x)g8dU>IC)l3Z)cSc3fCj,(΅3WKg5.qksanb1a9Ay ~.͑ӪNBdBbh4]' wim Q&֜ QWs'l@ˣ*:&0ZKfN)<I=A-YyC=sϾ2L#*f2UV[f2[2-hFv:ދ(|6?N)r<| HUOgS:h-=2mHF j0JkLKwpDv{Oى֜(~Ty^ p~}reou0?߿r**Meg}2м~M!0[,KNoSk*Lbr.J/EcħI3 \/m1E^ po߹yao-(jN 1MY@X.u﫴_&Ve.sS]Q^rEo&5%*2_oa0" n-9vx%?ۻ,xwq)e΃^+آ _hwܫf-`1^c}8^ݪ߾M=>5sC XejvscG9ycIT_(/œ|+O*'ɲFZr__ûўUb].r&w=վQfaJ_ާ4\}yX_Ć% L-+-^ lji< VdA*.`d JWG12l4&XwlL'  4*seib3'H1J[IB ` ҆gDrz{&ORAfx u2\7uq_ *r;GjArU2}#o Zjeeg"Y(Cvs 9 }~'I`>u:6r=m|}T> \\()Q'?ҌL}< Yz iBоK+q*sJ::ȽݭŦ@ߑ37Ԥp5J}cC^>UyBѤ4: H{-?Uɝ6swV3e$tgLB]Et}ӲJԚ'x~Y";s&N@ 2FMzl/ן#>!&WHߙ;UBi$5oo ,.Z?_Fx7$>~$\D c"r0V&sױ٥FMO$G8&Se,;qTyZ<z\xgIKk oW¿c{D'z :G<[/^tS"۶ R>c[%:?o@z^` :-7}ZٌݷK,|_Va}lzE߽,C> ?rB*#5}?-)/tAĉ\(lAf6Z6z= Vz3\?OzM=@CtU|2R~-h >;Yc5"`_d^x>cff~!eA-U9/'v?/z.O/z104sO)JtʢEY}틼 )EP.is)OatÓH$nϵg!bbҒ69BRO4n#Cu1mD1OZhN;=:IzUo2}JcQ#urcw$b?&L_3wk-606)RQu2oJ15rE+Ʌ{&|)AOTWt]kWAWtpe恑되 F[e2$E%gd@Lb6igX젳t;.ﰂ 7I"3.g k}83H"A \$SS  ǭlE_nRZQ>JT>gA/@3#$G աjQ/r-hJ- it+.5,8eG(W\c׺ctI f3DsM#.b\Ka$1fĉ\R7efBps.hdPMza!V?Jѣ:T8lBf鑵}9]K%s*nnp>&YvF," &YjeplʳSbu*/}ΖԵdGa.c3vfQ[ St”m}PjPYG|+Ua$PȎ"t['8];jq}ΔO[3VQȳQ8Jk,j+j1uR).6q:Ia6 zAs[q "5z +Ag_u1F-2M@yz:t}C1MToҪb2ʊ׸fcUaR躊Nw7ϟ_=XFgVEw.ZcIɷ&i7)6lq1}z*N7xzh?ŭ`gg[CbwOCˀң8+Kȷq@B"5@)/ Ot/RϒGtA9k{q,JȿqYͭe 1b,!k9- }cN%yMh&'6LhParAJWxAD[`OOdy. \NE_ʔ\;9$PJBˉ\Hݸ1Pzl!wdw0|jK%ts=pOq~~l'u$W!O^kBQ}ҕ#1Ps2$3u󺞆cD~)/f])%zE=6z@VI#]t ka.VJ86@n<(~DzgFH=vmDHr0eWRlZoVY.T8!ko\ X Jwr12zpF5hپ6ޝRL>N9" n ~TyX 4[|Q;PrڥH EH xȞj!u5},8cf D p)Ui d(<7ʥek6.D+@.+z K@oy!i")ie,e~ŗKOn}7ʝsz XKBPA:k"/Ss2+M#\nBfkupXn)HL0i %daaT̲f 8S SE$H C[KÃBLBl)A>Ի'4wk#bxQɄN)RSuS<(RLM_s0Y1hJ]VHKIIq8וځ|} Ǻa$T@nN2xWrXy QTX81i@KXCW3;ZKh?6IcvE8S3M5h(IS/ Ã1ot)sP{G۠}^UɀX_4 g LVN4/"#(%W[ZC򧝸:`Lj`zV O'˿/>׍VKɎ$,f J0< ,1iP}k?OuSq⟡Fkv g[3w]F:.Hecx!^y_DʭQoeQzYۍxhC8Z "{~5./IQ-3`^!eT;4r6s`bnI$P?Ez'0aJ#] rzqtԕ>7U>1 9xKdr^f~FqmNN"-(YAT&Wn2cNjYK bfq-8`IUvAٞdn7* lEQS'I1 G~|vJ'> +j0QmT;FFPb p{T\:Ra!,3VnR%o:vuaiDIc/"aB']B2" |R :, jf u ++[IQrh>Ve/W;aaMFZ)D_0 bm7(ȠߍSzj{if1}(/u iTbB{a0D?h4,(RԴzWsڌ"qݭvߗQGm P@9<[u0plOmLs2=`Uei۪ uLWN3)q (eFM 'AEE\&$Ne= syxba TÏ= ϰˣiֿI/~@tGaUQ-CS|Zp&0{O0M(`^{cv?L ߆ڿK! &ׂkYL8lٔ3h[APt: pe^QU2[zՔ(׉ Oѝ ?9І+HruD!qȆ$o#ށ,/ ZH(ΚDx36w5ՉxCe\VJ>&sʂV)cX wNrmLh@lr~N=ё-e4,\9lUyВEh3:r~Κ% G-9)0hY?܄- "GU"vIYKCNP$oZ樱V~7K<^V }|R*5j7nkS, 񁖏v >+)Ƣd1^qo:ؠS|+.Cy>*ږmߏ)DhqF Y[iUT!kdTP_!fIg`~Bhn<=j3K,~䪱odHYnR'h g>4&-ZD= Ɓ[Y6~gBuKAkR{! t*B TzـB~"*T/ kSWW|a RQ;`1ڃ2+f$2>OCYM' PDMkruWfkwի\=sl%gçuqF[2Ϥ18GSlX n л)7)RD_-&F2HM@jY'v[5[oS05~m\4D[H'z!FEme/I9`Ѳ63 [BtFv>c_$ar,O4fxPhlK3#<[rF JW]\yM'lwZEPr .VtM8=(Wt XG8FJĺr6/OI"lhy~Lo~!\s0Gvle&w "2>:E'v&>VBߓ;AX/'߉N Aؑa'dkiS4,OxM$l`\fL-kDS;dM/I|>ۅc|?*Flu [vz ePUj?NPЂإaf>Gl7?B#j6,~%Ѹ]+ ͖c7w+MfOC.}WW-M5מbM+ZhLhT}p2üKٰc9 B^)%w!8عOhT9nK> )H?xϊXedחO,!"[L1l7dxP;wU 8=oːD忿k7 M+hh&NFSd@6| 㺲ݢvCyZz!ܪ(.wA3Yw@4_q]IEwK [1Y쑾p8,ρs RMfۖ[F>CtSn D4\ tܸގOC dx5!fϲTUe^UJ>i"9 :Vŵ^Kp>MmTJ|*ޠp ZcJ}5o*3ۼ!$Y[R!8Z}ʌ֨>\KNv[g㤋fVҟۜ'uSHk_= 'Tud: BvAY.omPTw0;ҔmmǾ.Ǧ7yQXx-, i7:G_Q&>zX\@f8w<.@uHQeJvKտ8(>Cq}i$+|4] 2y\tF1 ,ưѯBcVmn5 W9L/ |N][Q.0c3Lttꅎ""l(#JFg?3$1)SoC\~6iu[5XQ^_۞Ө&nXK1qQV'? Vյ%l!'Lb]tK &x__rˉAĪN@[G:WҶ0HQgBQDr~lA,Z$ҩ^ao>?F78h763[wٯ dT* v"+'!ltq:tOz"K|U!PiKV dRHDEê˞"*wݑyA(N67yw굁gyK wu~5)=KW7@B\U)g$Bu}V82dc44c|^@\Eǭ˿"|Aݫ?|aQ4:}y\]0:wO"ٯ? W, kY?R_}x{씳_^iAkJ|A%≷fz_.ֹIb:F0wUsG /ſ\fſ,4nhɟ;Ts +WMf;RMdtDCL'(6L}E!v籜HaULXyFxFAte4K@Y`HRyǚxx G G^y!+z-Xg* 3a'M~[à WΧJ&LgA\%m%`N#d:mK?Ƿsc~QB46GfuKI3 @*g{ kg5s:v7Ta #X׏}kzsA n TG=~oc7kmDFHWk_YG&q $іdYLd[f =иqx)iWDp&yW 1J>ʥ!iWdG>aXZ /T?ճ$.NVP2g1d_Ms0-ǿhyN-1x_p wٴ̶bIP,Ϥt%XQyQXmxu6ZQihWƋL˹q.uԐ;,h;*44tUF'\e4Muiݑ(uSO?؃r;g,Z*s~hNTѡ+n{d o4î2]FDE_j7 Zyql<˰]\hvaf{ :9E)g(|W"T?}sBy meO@ں>`h[u55e(:/z,o"9B+ 7h^)ۿf 5qjM_oŠJ_d3} R NP7pӝ@k`zDhc;161˵m^(.z<`JRd-lٯAQ\՚4Mda1Q:7GD$\T+74Xt=R1gA5`!/dkX$2;0 *H{2ĖP 0N“޳$&h=)oE->kA/0=rΑva#\D8(|n47 ,Y"HE&mSA+p\UE i ^Ck7iA>5.bxendق~bȧR)dO| &H/MsH1hUYpI=l4F{6LP8PХro{c׼F60NQ,0fx2W)S$ !`nrNN|Ҵn1cBQh8gLB:x ?B\ձs%n_|X/49ta}]ΧPt;G`?S1{yw-gw3gFʊ U&\!aOVSit{ -DwէS·"Nm·,d V}fBGß5"N K_vGT=ۉahTk~ګ#k\C#|Bu4o;fxz`ayZؐ?zNqeKT \ܷB7!#5j7A {a^Ϩ$h^;r/P'Cf* $mcl>12g4\y?BeР^uXI|yaI}  ?fvsZԽ̔q'p~?gK`ם0|žz9ǐc8=^9)BQƞuYy8zw@[X?;(DAO3q3޾dQ;iG@XbM/clZ,H;lcZ_ݓze|%7HaIU蓩bfeKwwU.}L&'|)d \h#uH~o bu6a ^.qY:+r}Y ;$VrDOd|6Aa&|tx6Yqljz+#iL6YۼBU9k7CU/9ԋY䆈g a^Za<8VGvcx>Il wpF J\~lƝ>xZI ::K,F(YJ' +Ł>89&/8Xp.At;7ס + ]&'ڄ;*5OlXXΉE;A<Į?{m B#_6bjU^^,#7p%,ŵr "a a.woW_aZ.3ϛ^MV9+q#QM\n]ֱjL0&(A7co-]o`Wk"UE`BRQZh@\{ЃeY+'M3cI4Я˦51+Z@fzRxnZ)Mb`mwxDxtYkz %}18πc??U5voMh{ 6Q-ǣzZ;zU+qdio2X{p͋0o`_HRd?k%}SAZtl8S6s,cݕÊ5riՏey i%hiRiE`B8L iQIFtdpjۻ"y(# |R";9Z G]ֲYXVB \ 4yD*wӟ׋( i wyD^6D`4/m1i_T fTFӜT19yTa95;{_"qpP4S8ˍ8/ xjl85$ϨDuur`=5cMbгJXLcE~Z L&kDj>a^opqEPJXsGz+apCI.-x' K>t 6ɐVD8X K ܛ%=%<4;DMtϮ2m4ueL΋Rbt ;%a^Z[gR=盧D>JTco۽Ig!t0Aq[j. ljt JG )z(HA|ZK7x f(SLB/a7o/7XUJTu<K__d\3A7j>ۀᇦ0춨9Dv!w|=tVMq<H f-.i8cp;% CnA`(?ꝍZC@+k^0LbRER_LwO8:J}ُ,!2|c#A@=]%-i$ۿ ,r~XFXd-; V(r;@'W Rާ"ټZ,pmϜ(egI޲!HS(kvFrE,iXGԂ#Upnx4Ƴ6`ݘc;W 7"!܂ś0"Syʄ w+ZvIHPK0+}lJR=&I;w1##el A)ۉ;̶N #@u?1_ͱt#Z(_  ] {(u"uPB$gt'|u<}E&Lq9 Giݩ9,P?s{^+Ɣ <2߂뛉3ձ)"ֆпsȟ*WHش!*B+"f`9͢˥PJ: xKQ#B->2;W̠6i:c(Wa=(v1vkju Hhw<Ҥ?-F܊2^dOǺm$1vmVԐ.1D0ŧwwydr1,aEEQ3G]]0AyQ\`$Y,39{>gO]}ݻR2)0CY8S>e' !.ݐjs 7Gf7Ѫ}< I"eC ZI71h›k$ÓKfO7`B>܌ZR*WS*+M _[JDW _ũ\6K'5ZA $$BW?#R{{62Rf$~?\M9vc褎q-t5:"=/06dؕ" j+}6LBXDhUK4>(Z{1;Zr@fUb%_}nÆDD|eCi$h~ .&XPu3KĀcFzV %=D?o'Rj@Vn@w<ӥc{yºy2_U{LRX7yc f/b#^c~G^קfߏB*aVL+y.)#er&,keDK)v- s!c7բjd蝁z%6Z6/k IqA?L0ޔ,DDJ+H1*m}tl_fu[ഝ7aǹt>!$]]CfxkjFi:XZ̜܊~c ݔ9ځJjzg3Ono{J4]_bU6w #[`>\-Wt )"fs.7Hydg^Igl Ph gG3_ ]nvEH ]!Xڲǁ aDJK|(N`Q߆lw]" *$(dh@Pjfa|I= VmH]9ƈN($,Vέ3c, =NH +w%}@)tpmܦN qrJSPwAdO9'n`oO||48,˱qZPXq%9d."|=4gWx.b@?f[ǎ%>ar喭 r]28h䉾g䑧`mO'!]M/˯p]~ 4!>)ypy4_"֦ i1 nOX=+^̐-(Vj''^H!G3,UŘ|l4VuHp ^2 mx%Ef8GNΎZ~ƫB" ȝ7D(td֯sҘMnHq/N 5k򟷣c3}x[P:*( @f!q/ݕeɍ&PlI*,{"k (̘ _(;?P縖8:$y` HȺ'=Nz_@ +|aچqkoԦGO{rVyP?B$C1 id9,lKc(U`v@Q %MՔD"gL4 Do#^5Ɇ֝4@'nw?QTV{D އ6?Az?s&zDDZ[uŋ ʗrn9#\4%#!Fi֓!Gf^*R) <=l}_VufPݘUzA=2'fo| A ;>.QGU? G?\mJ=Zc{#ͯwJB"yƇO q(n߶x3Q}#<'P4(xBAq8!ltae[!%'R B{lU8]f) J)Ӌ6a߳m"s ^ot u` xš.]_H%_ގ$ saP+}dw1Nϖ469jɟ+̶yҎªM.=%]S6')7Q]FLn4 Fz""D"oK"wsiӞW4اYf[vعآλ5dCؚ62&IymXM[/8l^N=/jB&Lk}uH@Mx?;U|`z5ጿ> #gsMP6 {H},Tu>Vjܽh- MscA NП* =dG&`G l0C 7S針+=3q2<ü Tm0薇em:ۛT}0J8ks7yE8tQDc8<_Mݳ5Exy~M;;;*N 63Ѧ6胎ԛg1<0iA@+C`?g:`7C U(S ` ]E|O9+6<{uT}ɢ-E1"+z/`hn u3䎳䄌 ^w1ogMo\;h8RknZKN1^W(;imyS܊765"|{Ntm2SvDmVSѐy/xb$م(@lW~gI,z`Ln4v"E (Xk3\>gsX/+^#XKӛ2W:  Xr ua:*Q]<ZH{5 rG\?GM}1k.i1FQsueMqHK*X\: g[^MXjKvV3uv.  g#S ދԐ?O N0)fXê^ ĐEdE]kEt Ytm:uXqWTHq@&AxJCRH|퉩e9*f$ rSC:cu>F O ? UnjԉCSe`-!,VrvabQD7LLc; x(ߥz.{X( /@`Qi=B8 YG1FA_WY {|_FΕ AQt 8N:m M&jdE\{62ۆ$T`,Jx[$+猜%.%ѳȩ 'ǭW\ ;L=lk3v\xTrèﱋ [:]AX%/2kDkOO;.o~Q ̛ }<% #EKI9EܩB_ r`ڑA^줎\ąegsJaf׷c SB8?L.HvĭN1edRwQQvz&5 rB(kZ#َy3Q'61<{}M܊~OAj+7k3W3øw;EwK,BwJlU%ON?~k>'O*KX۫"G]>[C ԡahbByrKsc=%&Ϡ61@̢& r\rnHUI)RP6l 6vB\mgFa8Tؘ3?O^p&.g<](;R=Ii;,dVDG@9κL<=`@_Zn4T|fAk۰3xuI#*y\倀]=(1³5'H6S@I7BVl(r3*3Ohok=&́o+goqa Ḅ ^&NH,d1|MzW'y{bčRUpG- :#. u"5tlަ:A2z+r ݵןYjqnjɡJFՃ{!\5X0Ylbq+w}2RF(Ѩ'ǁ!ē5SJ47Գ~\{HŹ09=W0F\e3-̼E#A<#%4%82\> &ѷI1]Rl:v m Ilu D9ho^e\8xlƗ ;,wQӫw/Ƀ+l~{M=a00x/)wqNywh 1zlYJEr^q0ޖ(X禙p Φ=WdaTyۙ!emi6{.?s/qW7UDcp=޺&On4X ]LpwKM2,g\K5- 9Y+rE62F̚,7~Km_^Y.GثKl\e9d-ψ ͺi]b%~pI=RƼi U7d)kobK^EiW3%"<.`59̄P0Kfҿg MسtM:MLkEwNj6ԳGC po="q\%DB~*M,n}c~}^ʜڍ(hclӵF$ŊG=$;E俲W XIl#"t>QJte$؛Svrfm!P7>A՞NC%,UEYS-ܮd79Z bpm"zu$_|=E!Eg@I 5 w*N }svλ(73z])z_5Y.q);dkx 72Y!ʼny~zjI6^89c[UB\Jr錧,8qS{eWs$?@vǁn@,t29r#5meg!?;߿-y ka:/d*Θm|=2?I}/.ɕ^ b1K sTT{1# jn6]*/yp^c\q7Alќ^K?1VSf5H!E˅JȚŴr nȽe'_R'L'}4 t- 2R! :p]DI&:EF83B1.E C)p^e+QlāR~:u8۴RYE0Ɣ*h+:-lo vGHH?49;Q`-H^Z%IJo0IQ#6[5VkU=Mu8WqV,  9I5/]*dK~I}XMn w7`#5Pެ]e+qwxL{]~~Q/'fy?L@{~LTW:=Ŝ9.݋+}`ư3_ ySJ<me>"lK3D;2rqK>7 },?~0$ͩ{{LRKaU4o4Z>|[= * T687TX-@'R6ľ5QG, fJ]y`rZ%Xk[ە" ˰dy|>nȰNpg6:5wO<$ʋsKjyk(g~ϩ5"GJS?\~w+&llKnQLGEo*ݸn >@81 eCE҆Uf߂q# 7.orh;-IZ6MoIy5"gL>dϣB8^;ƶVIǜR!-TC#´]rS$ U9QH.ƷW94+7w0 %9M!κpo^\ %+ `•ahqᠬX'~Ol8^SwMcZc,{*d^_%_dztF$?V({k6zKwĘeuy&9xѰmN19rRMW|IՁW񧘑UT"Cƾ6݈ W(ʆ!(! e˵e41*Po>B" bNP#!>Ui.{`+~A[~-JrcrȬXI؇)rwԨN=:;J:5z>lߗniХ BV6̶AΡ ;b20woeSǢ` t| Two߹n<2/qx e3CL֢nV"@UN5kE oł!|c@r Ԛvnf*Sn>6#-/o>.]WM#ga@7 ibѬzͿ>+0\/C(d1pHؠO <|#cN}@N$oq" eٚzBC/'aߕVxH59*d@:z{)m6qPQz|9'ZjY³3s/Zڵ7<JYlE<%tߖ(eЦIF+\+0o*gk&>wRy\PRsu- dD?S9*R%;5((.\-*瘁*czN_r5LR H5/EQXAū=:'Bw9LQߺ;["uE5ZԖ4H)Lu҇蝚E4/fTjhDI&#|.φOɭ Y%C&U2.aW$\u-󅙢?;`- YSؾY,+: SI0ĹN526ΰk6+g$ sgzsѳYPz T޵qN P;8ۈ;zA-uuΓ>c/xG:}'9.U]>u<%mÌhfU X5A1I^|}9A=eOAhE^Z.藹Gt0UeƖ饇Al ` F؛=B{Ro$6\gf_L6M7pޟ̲L$|N~SNC\,qlFe%{'0&Jt@blaC;5`h]o۽jv|9ګtUp"ϟs% n~f'.ku(CFWꨗ&ݳ3#l>Qa?¢y`c){ͦM:lչ7⼦݊ߩO([-W13Ƞ:z/6Lc6/>28T]"( |@Ƅ^g~qD: !1Xik@<\)3&3fE|qw|) pSZе@e>.hMNBpKL5vgQ_kV H[M1c4*x%6(Z<)^A w-t'֊fU+v/jˈ+oLڡ33GwZNy妛fR{ :S3-UFzH/ӗ;h :f,5d,䗵>όtc z\ѺF?':Vrd6tj_d$>3uKį ::֮Zґ?KU5#ڮv(t5OP*Ya[L\k^t k !}2Cb1JP}I @ &(=§GضIY{ٹg u\"9xL[P EaсCi4rx޿ǾE6lj|mHiwV|¢Gv :]p7ŊCj=I0L6 {TŔYBN"5hH `p$56ST؍bVS"%_o  O0<x!|rt%tPN=ǹxt7%rMr}d˂XD`;$nB h?{Lڐ,VHʃX:_,lv⼾=#1;\oTۢH)HIN┊S8Xp^ۧ9@9$\,ֵ;/`Y_ kw{6cα !y0 6XTD YF02I c"|m( hz`O?2oڄ鳰~gC֏م#H=fkRG W$9i dba hG8zbzUt4~PY(6w.j=ˠf@;K"r%֠y$X"z~nh_eP} ])=$#FÄnd _Dr+9Fp۲2Q~gdD{7'tm2r1ܴKPLJaT+7Tk4hQ3DCaq۾ ٙ&~ wv" 5&@7R`Y=O@dJ T ݐC (LkoI g xh8MeDNa>'u\_(T"Ew$®2ay=EFdg8.@*S$&#!55,LuM%T-! n8_ǹ vPΞ<{ f)U7MBˠT}T9*qy1NTzk/c+k;$BSŖ0lϻUUmB@v;73SBb(&8Sn#OxaBt %؜SG.x_6feѸZ[鴅< 7ɇ(T b8cvaiv4l ۵kNà}T9EĶ2d<:$bFy'\bKȎk( cl &/lZ#F)ɩd6w4e c1Ô-(jȬP!qOK-pRtb&9~T{9V I,E!nibY9bFD=taɀEVEC 'W^;T|ί"s;EV"ה,q+̸k~J+y.~6T3&`p^նh1qwbO0M=F'N fەA<}Scfx|NhX\+qæ(^3ZY;'fX_i}an&VuQv,s qy:ӁAg?2@,Q;j*Hor8 FqP %/tЁ PTM:qe<Ä)Srǩp kh,IwN`l'0CFq]BD qUf$˭3+_>:) Nbն+G?ųn!A@^<&9icyLQ tʗ/gxXMF6@8S^=trrB@OA- f;cum#xfHUy?Ÿ dgYGB(yp4~W8V}[VD V\s 8t yb#h7BXB/K0^J"l L.5e[x:S@7OՂ\ŌBD5.+ 9 妜f2aM}Swb(/hOd_; ij RMdm`bv{ }(b(K!&&;ԭ ;[[͝037\ciȰ]^wli+B*[C%ܔi";4Ce>ӲCDxkɿG$o3 /|K\+4<ߢp70i/xI˳m5:Քlӫ6v@ȥ!3 IH`V!<2{yC\LA< y,lvMdԐi5_vXy!'{\ɱ>C[%*Vs9ۤPsKMSJ#<MCE?[ʼWXa6Em닎9Mxz싟FXCh .KB<$h݋!]X[J$hPnJD |o|2Z|YN©I>)lnr7߻{)Z7qZ YXP )Nt]'֖ +6dGDJǖK/b^c(JkʆӼDDL$^tmǞ`ۨA^PW@)"GԂ?&|InOdzc11.`B`Oѕ3S ;. 2:ɷML XWŗ$(iBp-0OXVf^KtƚK*4 |ic~_ Xе^3!R!|UʵΛr\p3 )lD 7A`2BWֽ{tL6}I$xL, ."u‘mUؓz^b_Ӥt="b+߇Y$z'WQ.J(qf|GU '!RX$>΁ZJN::{Us;NXqC2028 0xpj6煤7J…$7rl%sQJC=ELV#BcCn ,|zVNJn􋝁3aT-iyFu"Jb%t)5?zM"G3q:s\ho%ڥ fC!tp |V#XF9gu1bqbWiMX(Ym)WZH6xM\?` }?)͝UQyzꊋ]t3CAc0G` '}rEHaQO8>aսN='=l,WHDznA dW๾8$*z dDK ́J{err7 v=`Zm!z0y4w}Uu u:-/= ]^Sr"<âh^{\mg"o#`_%VGX}7Sc ijikPR=d rHKy$1|9J J 5ཎJ:`۵U#+3B_ɑxaz||Fi? #g9·v5=hCLެA2mqUmXr?q#!0E`ӂn)IxFܪau{)&ute;{ayUÓBpN>S7zj{pU<[iKẢAsA>gxR<S]՝N*&,0XtKA.'Q/SaC2{wIZ!Щj+2υ]3+Oߛ<.<EbW #f*N p"QY;gXSܳ C>.~qB4q^H8"ݸV۸S4~@a` dc{.~JnhD;+:BL}3m]tݒ!ô|ːz jN ’`M6q|uȡ>U.suiT\ d|+ =3h{r^=0oynuU0rGJZp:rWy=/FUm "p;ni5税4Ok$r]+tKx-BS(*J*S/h;IEa!r"K^ʭ(LCl7o{ f$ v3anq͡](#1=Uy{ųj4CBěŒeD7o2!UJx [gAb%>פ \a_+l1Er0klcAy& ғGc-ueQ3kgBsu`W{a@;;Xj>݉GhR_n;-oCM _f uTOy9&Z G]wj oNYٯ2)vH q+0@!b%9c+U EҟK0kܿK7^//:"ʒ =.~ls|R?/-@ҐȪY.e9͉K iB% on5 2"Mq Ef6}1o:Ps};o˭j 9ic%5?xWeU!9X&P tJ4h >Vuswr?ojb3UPdŊiʼn} ϭ%:L&+VA(ʀOvL\%cz2eY&D҇qc(JX72•ww+e;$Y2Qv'XRq=tjۈ 4I8 yd+YTP~EАj^(X2wh<:,Ab0Rs{v|#:e<>%|jh8>돗 "؆n͜=?!|%&Tu.b7. VyT5.-ci\FgB</`}#=9OF@+69vH;*i.f;sm5{cr Ppj^Omur5Y3]q3LM>-2?q7xӂ_* a4ΐ gx)&%cƆ=85]^g`{`yh t67;u̡<*զ6h1i>tdz[%5D!9~.JRZ8 {)jn&U$&;ιw D3up9#fW9F> N! e΢%2܀BݮP"xZzƺx@jAШahz_sI\c y?oʅ"O]dž-e@4A>L( O <m`JO rئ !Q/\kvLB NH2p΀%zθ}ľ }mKa)?[QR4qoQA ~ݰ9j Ҍ0Z)5 o]|zg8Ҵ:C=O'.::c~`vBn\Q`s[JR~]H5*qַr>*ii/|n[2??T L[e7v.V(knc8p†nH7KE$U ~>K% >fֈ{._)OImE46 !4OF칞|ʡEW4~~V@y ̬Ç'xEGyĕӶX"$fF De[Q gy ?V"WA ί>oPgKTX=-t PczfN3 Bm!؍%MÇ]̾ i cAp}qw60N:p3>d:`/lh/[0 " ['Z!K-'jv7@WW\W\ՇifNFɬ}XI-{Tp-}3#:}V٫-i UW~2jk"akM{OVhՃREQ;QuU-# gΫ]p)f۾Xg}|%/!)X6".S@'FPFΏý tVMI).-6:m m(mbeLvƟ)F;(+8Mr[ /;)(,|k<:}⿌t@Ll kIl Ju`KU\*t'@*K-ݤ LXccd5RI29uCX*ph)L-ۡɵtgc%%66o>x9j,Ϛ/V GE#D,u+:FG/"Z}T>wyjˊfGj~hn3R'[tmamk7eV3թ9c[W[_)d6q;T`ïW-G~VvfP%F|rхHsm <+W&b^1횎'bM3n{Rd+dKF!+9=mɮ:x(/ڙkDVz۰)U&5hOZ|&q'8`9'D9Q#ԛrS=&h̷y fIFƉs_a>fv2B Qol,W)&o2TLZ?r[cK,B[vg l(eE|lBQe?l:[YDJ,[YxyzYѱhC.7("굧(vŽ3bMP2;ka&rSo\F81\@t}V ǡ['I7,,]wG- 1Cr),Ug?{Ni&LG/` Z-v6qGNQo%Y B@'m)yyU G ~50#_$$Y̽/ | ;Qad>*i d/-jwG>ic+44^T7<%Um+"Z5u9c,-N%#e8pԇF{?<=Rq8qUifj?0Ee5Hœ㦏qR7'Z^Z}a?i2"W:П+So)M>JC0)fYGoR7coY3[4`g]ˌʧ%mP) ~&{ ӷzztOLj˲B$wк›7bZcs-wMO8=GDkvq HgL3PS _d vŎy(SZh b%0v @ !5_.)*_Ƽ!][0=_K9*TgTցтKEF_Wh;AT>'Cw|=ֺhq*3F(J7{z*t17AZVhܴvk[ 0TD߬ tYc%\:nk[T! !OBxMRoefCB=T4GCy}|7RIē꽒D!'Wh%nse[.cEx ju;dK>w0:43 ^"@~HhXF-5=pٯ'_;_nf"͋Z{+CcL$-sT1k m&VK?wR/EqubBiQUhy0LfK>xJ 3j'.cZHu89J=^2ԂOpXGOdeCu*p(9/=m'TB/k?oVigTD4@t ۰ى]\8ˮMCGM]HWcFLV;`xEJoSV4qtQ`MbO1lM݋/h9~HlXE\lۇuVV8J3%o3,! !}t櫮Q~eĠŝnʋإR]jhڭ KH*r]Άy0O dǹu_}NJu2^&w,P."TU:T*dYϴփ@ r lmK]M6{ iDs o[}D'ޕGews_5*5\1ZuSQX/&Z:iNyQަfYqX3YWy]%&q~N Tx!x7`)Zbᗖ"ܖcV7-wXQ[+RZ_,a'ˆ'W-Wi U\;<# $j(0Y NH%ZZ[79.5'Q^FW+Kx:&cQ=l35>l+"7MgO\Vm鄄1F<#D`-Lr 1fILdbEgaBuj K7puoK3 ڌQ]fgIdkWeAM=.&Ƭ^쥢\!w%߲}PNąchcpH\FiPM?FN#k#UGN{b^X_~Ӂ2 QM|i7.~zQ\G1F7aD\&4dd)6ڪuih,b jƨk[0{"T8x %5Rӏx9,'7mC ̓7|q@cG$(dhH KzS8^r3߄ |d4lGgBx4\1(N0֪&3`8a .YjF8"#m3z_& D?,ߍD ~ƪC1OWk~T?WP^yfW %IJԫ5F.v9['9Ca|GS@3s#dٲineKq9jV[]޶yy򽎕Ay]Vlh~&JJ*wr-0u*Ziױ`AGu=MV̗\;:8SFfUme?6kgȣlU j-yOP+cPC> ?@FX OAʳPQDUxd9Lr:qBS)>i X^ufW-e{ΞRhOW윇#ERPÒS.FAK,Uszp9f _=gx0JC]:7'AZeEj1 ."')5ZUtՓU#kOVPrF+T _`*V x_|ҙB&z5t;qDqW"{\ӿOqfm^V?WPD WqGb0ktB_@"IѨL:^l2;X^w?B9a=%6FbZ̳|F唿xit u޾I_tFXsk$@,&=FeDh #ﴕ%~Èz5ȣЅǕ)0'>8M)xRoZw;/17xlajI85뜈1rO).K$@W Y*e֮jOa [Qj|Sם),(t–A1JN )iG,NP31"(o n jqua'1^d_uKqk΂Eg&hHY\_$~C7"iW.XG=v|*E$0O}ZFd-TWK6Nv64[';/G-yj'!r)^̠>ȽxL+vGK!,h_qL]$=1 `PAXz\S7lH-JKU++]NHƺv4 ڞ]Hpڐ4 ?HM$ N'W?Pwxa{<6w͔pUz +GLSȞ#Brl5XGrlTkrbg\o!!{n٨{]t>wfL˕%V|uRKTEU/Spށ3a tO&|bNoٙV^DC"?5^yd) >i(7TmE6eP0B2i zVOM,.G@UАcZ*i|jJڣ`z7yǾ%WF|i}FfP.qLܶQC^S; HV}zk(ʈ_E׬X\ _F.`ԩW;2ڕӷsNxi'F WwM@ g xUw.XMB rG#tD0RԃMOy=NN"9[; %>*9Su9xZuxС1Rf%?nGTj'>k|{[ y+P]k!P x Ûo XzX6c bRm7f-!l>A qUs6a>HgTĸW*9v}V>#GѸuz9ٔm# *qޭBZA+4"^v;?-BqaosLeڈ\E@hPbցo 7蘣5v_XlkID#Ks R=?M BGP_!*U5 S!ȓ*`M>9t!23y N;"qsgۍAy%b t%{GgYbp 7X[' +ٷ,=Lc#.WW7'  ;{ڢ%n9Otsp/z\P^o4jaه&3]Ma#=Y^2 (K8o$֙ V;f91[񦊌Pl $s =UMWw|UϹ&D!ꈤO=Yk%|U-ЋXT8GEW1)pezL4Y3L=d8dfA'u/ҶA9eR4Li[ C*CQEie!o ?T]"&Sah?#vsT{x3 6n_1<\Y6$`7R,EA6n˫] gXr:Q=w ̺=^ZgW#L$ 4XBj<<孓_jK|; :)$ uI14ͼhSPam Dt gӔ62z Q ұe8q}5"!=[5$)N_.#٭_Mnht{ׄQ,`dM)Z'hЩ_+j⇽ T5teO;XF C%S<=MnnV~&e"˘^5`p\;+PFw7+O׍ ք!IѲ\l6}N#@to CDKM'vM]7hì*$Z馏\\y -,<BOacߐ2{Kq#ptfrP1+#W59mT@N%=dD!";o7r:1azZ;hwyPs'-@@JN4Z -|rj`>1UUlt3#Z;[ɱ3֥~tO@'?\ &.6+U#I5Gć?Fۂ+#w]6vI9~e^|ytexA:TZ]) %G!_@ٗ%~kLaXP6쒖xi `|.Ta zIW}z6 \ёTb]+^lz?zX`br{V Cx5C2ҥ@g3;/[`2:AZS*5+5ew<4DzpBM9r '{Eq>ˌ] pM}~ uژlؓZMh- |MYifa>|ѫ;, rrSnu(jtD߶$oDn7Jg/ ~]ˠ̶ڟwu`A@p-2]DIH)#7o9O#}l,R'.I&9Kƭ*Jl|DJYA~ԩ9%h(Fan>Go߷4OqCp-8:Sfv]ewo8/Ehstv)ke, t1kkRR,œjv7Xp`*49*3p^5VV[~:6EŴ}&Vrp[Ƨ} D&rG(k&3Y2DV\ =nDNapY k:Hn"q-.PT1*eʚrA,,$oS%bVt*jYIۀYGV'- 4^L?De>@Ąlfi[rbRm[!x@* 8j{㙇 uE׍8 k? ,&뱱>CKiiݵggn֖';'R41jTGb_A%{?:yZe\ pLYaw6 ֜U% [<왪ӆ{1oz*/")x[ ?L&{+WH|7*ѱPd}ʦ)\+#)WlT,w.CI*9BLobBc5okC݊u1ԒKi z?EPe< :'PtʓD'$bmH}yG=N: qLN^VDCvHbt!/* tS۟O#"߫a#FÏ xW 5+0P0 |}|tivI Aybfr~XSPnpDXldҙVtR_D3LX%ln*~.h+ :c6eTU=W&q{QA{^ 5EM-=0ٍϻZ@ޯP\@XE{WCd^yIieÈ0ayă%_-ױk7iP4;Q[ __tV}Ia'يGscÑR jcv 74ebfzzxb//?9d:#H zy}@ĕ| Kl>7]賸e5z`4hcHIɜjvf"eA6dTU79M8 Q%cJH%uK!Ag'n$o ˂bewS~sR}f\ԟl<;Јt_'x68dPT0#EP'=I4(GM'$|fg'}Xh05KHDH@~0x{;sj8&'0}03m2h2*Q6!Tn)3TK[Fate Zl_h3zl7 tI(]^/@`fu2cpbn|-h/rtZm xX2wy;hrd4wTϩ;٢k~6 4Z"H)srj'j"W,‚w-OqWS,`JV<ҩf řoJ~lvT{bװKu1W )wFv$15/ B]Zr3񿕃 Fe@BL.& XY{, q\ ަrx:فSNxBQC~V85V^_l?=Mgձ9G͐񿾩*'t璷:ŧܜQ ~I!>=J3pS23abIW㎮PTݞ}gZ xf ]WT9ptv ÇR拉 !ފ 5~?G wO{Su3'~(f>\ #^Q2.t+ ֥4rjI_pt`<k*Bƨ句3DoȔ<:gDmc v_"lf6$\7_eoKr܆ev:X-߱ptN{>mIqk8;MG|=WNTVei75u>J:l h:4 3=86T?H*bK兜3Rgo8LuX-Z o22ιD v^ͶcJơ&^~3lFp- OR;$v3 $z@0ЈSA!yt;-}Hj(ʕG:TYOO/D"rku,d/VfjkΏ^ܴ]~ iLZ3NyU̞!Tw̱q.U2PHm'y(=!o cj KHl&Y5,kS#׊9_*.қ{ih9a?eHnU'HYc?|`D>#N__>Ԡ>"NΈNgCa`㼬ģ#/`W4yi Fx"e pDW}*-R/&&lۭ4(k -6T@sDFWyVfx@qn(Bd9|bͮpͤ<s0j-ǭ!q59ΨNH%j& F>Le'>FBoR2hƙ@e YzAw BQ6pG-7Õːw5{S.'{@ǵ8?%IJ7YșI;Ig:q ?\_o_wxM"J4JFͧm&܀.٪[̝cD֑{z(*gO&a<&QF8Y=qzV| 9T2*A Grg4¾޺ ݯ  kR MRt"W=2f"cFfolTܕ3=:gא,zo/_Q%W^Ym25Dv K?`W۶<Ä4pۼA#DZ(HnbMߦGrT.p$i0檋5)qnqǔ5 uf)/Qq!mS\˯bh'}JRyw6D,< a[M2"*S|ۨ{ QZE+Rᘮös0d؁ƿc! wT4& {}m#Ҡ9Op8Gywr Np=jhj筎j`IsOL`=]+pFY/FHK.'wқ]`\:^5ٓBG3%Zu|?M(~opW9A $g wt1cRZU 18x]ɲFiޙ$O)O{41h :)zYSy'ZD+޼Ʈ-5!@E+gT qnZ4&\\.gr\ 5ځuVސeQ 6BN|00 feI!ЪK }w3vA*\cSpc15vO<)s<[!mhJ?gpύ4uuIDcpY1/h`cO1I7ld؅G~` S۳cMҒs6FR5@\계+;6/qM}hRr  NED$-ff>j >wܕ8>|hiKaSč0W2yYB?&.RxApmިޙIkIk# 2]OUXd:3rᅎ'@DO?ߚZc~g(Q <#PM^CvnzK>G{|OQ::ڡ6Y&/ZoDFv @nJt3EM kbSN"^)xSvojRv[D7d@| "ԊC~0jHyɣ_L,03oFpK9dxP\;xpN&eZ\7(Ϧ;skߣPf[b/,Tl" -`N*)¬e )ַ$Ki58ac7ҾK_^i3711ϫ ~ψgwvۛg6#`Ê:cզz\ї3];졹do ˬyK͜Ti #UP\Gуֿ.WL!|~'SCo-m:{"GGʎ~KB50XނIqn<ON*=5=6Cڜ:Ηn?t͎ǀD ,#iXe8c*4hg 1Q)eΡ]K:6[юe&Ue,6Q2*c7b3*%هDa>8?GeK6Y`/%zMF\.tWl#ZkvmfFVn9}SAG]ݱvTL'C[gw: x>K<{wUs9HwB&ګ,*~On;Q@YdlY^OmȾOZK1,B@ :fQiѥ(=xq({[E',߶tًΉ1'OGWЙ͊s7{_.bYϬt<=wS]!C8a!)s5n,n{A{M-,ƿP(o=;ٵzl(BԺ EPȒjZC1H蘟`,pT_g"@ERo >5n ܚhQP fG1J>L'c$Xsx2:sP3[Y$=@\24pޅvLqC>g{OnQ5G ]AI_%(}bgj*ES\)̄,X5+R(HXrrqf=՞u5(@xh瑸frŐ;1cs~&XޔH݆]9Imvm8wJQVDᩭ,kt؎ E(`>7OYE餸ƾ(O+>X ::R[on1qq:Z[XRlIW &rp="x#>ʮZ&6bWlzP1>;">3QϢFnϔnZQK+G)%HW8O&m>0O"EۓiE͢Rsc)|Ɉ7# &TiLSvEeQ\aAzsH x";RNsXW>5 R>L$Dm}))zC >`N.B,(s8YK%`׵c~OVbxXe-g t\Y t4}y;r:i~]Fל̿GZLc RCY jW,0HzUO5E}cҗ/ٯ;ցVUmO/Pa޳őxƟ&,,>.KQXq[idS/'SIUtǕA>FpɴamD9TmCjq$3봑=P]tkWZ4s$3`*K<_i >?Wj͈9)ƞ>%'?B3+ZyYF{5BaWNi]VJA5ksv'EVe dٴDU.d6CRxfb!w/03.:j}CVC\X:|^ ~F;kzJ9 gagnoR{o#( K9\$eΝBv_0Cx'2^!nơG`ƻ/׷iJAoOW$Jښ4qPo+J.n/ٗ^&pİoeZ>La _ctv:nHPO&[5#4!-SvVؖ#wyLg+-'|;c֖WтIg<ϣr q ]P'QY# }k}{R};W!RZ 3&Ïh3ܡx!\;F2 2^:0K^(+,1y:Hwq ӬW 2TrLOwGy @HT(z7>/wS tuQlFL4FLZTv\F:`5Mq^54R Nyko,wNăD2/etK RpFWcN^E%\j]owEzgE S˝.:7P"6VȉORsk;?k*0$uspE= $a/sy3q y}$$kSY'*[?]' pdd䜈:L&eQ3Q?;n͊TYẢPɤEӹvJLdvW ޅkVMp^*184qL󀬪wio\i|3o d¢}O[B:c7 F16ߖGgFD2& |!&2B4>O\.,oi:]E3`e<"od_<`SY] ױBٍy%oKNwhp:6kacIDg~ 3k@HÛe)ABU~2 vӾ dbmB߯E!KAג(!$ XdHϲ79Ў,26W{9A'W)9^Dvw@"'͚!o5-V 2nI{BY@zbC P" ܟEh߁c/=.+ͪR^֩49@BZ*3ܧnפhC9:i9 mʕ4ȑi0 >5ãDb'q f"\ZJ!%̐|e'g3u֘zGt0FKI8$p3sl(f}G$sFƨi3ZHXjG/e0ۯژñZdZ5v'3`Z9G!fشz"_$3G۬0`YtXz1I4B2OW{`"Nؤ793ʰP -`K1Gw^B&w:ީLb`{ZD0nF׌xd.':ls7; @Vp{ iI5^x}̨J BS - >,믿X4qc=DEhQo \?'74xYi#6-k5LdE)NSPv_ +6R.HРhE=]37Cg>5$0gy?5= 9̟@OEbnr1`7#OԢP'Z4t+mn._%?-lr`:ABGA̮kv𵞙iPw~Vs,jQmз(s0cRBZ#=A)D[~$OKFZx'}DdT?yP_ŅDeص(\@2RUe?fP)w"t{H:<X]fCrՙ4OtBaw} ,K0ց[yܙ`m%CDp 豻,b©>k"I([:@`8VP8v(8-` F|zyOPλb<9E̮  n0;:w2>)vh9}DPa}ڷ8b/UR>F>= RMUr;^Ameֲ RQw&w-;\j]"jMAo-r3t-faXi.I £ڬ>0&{h-[yA(PE |>&k%_Ox^lm)9,' niP%k|+ r(,>A<# ȂZGh!dw7Jȿc3%~1\y{Dr xdH}q:d,EF5[)do$K=vbF2o( d:q^OB~jSma`Gd$w'N4^)8;@kܔ ǻ|ϟ%5EsY_hkS`&y-r0 _< '%Nn`$ yE1hs`i+9f"%| CX=<Nbg{y=BM4\"BA+GH.l+ljyHi"d'9,d(UR/K B͂)*>@jGZvƬc*tBg$a-Ѡ4>/Q&MAY#,"z@ <3p 68NWrRZ迵$r\!06+徬\phx2yO+-o&OWԂU}NLŭ>BmAl*4xe :aԶȶ^BnNUd_=7kuid_±^il<sR[Z+S}E:̺(;. OW5 9a;|1ݤ{$Jx4[̩1hױ&v H| U-'8$4lX#$Cz!y&~O92P y! =3s7Jc_6qh\Z}P̝w3yv= —< ` zܳlà1]ti͞4.̇ߔ*`m1MA]RA.[*\Շ\雧/x9QmJǡ@a%LDwSCHS\y87; &@aNK(aetC2Q!!j$_bZw#Hs] X 6#H1Pc 4s1p|>}0b7uZ#K'z#0(НBi CAD=)cz-ܑAdjݠZ;Ldw男ts ^@d}W5ּ:ـhN&}Uyk:]:lE?U'A+`,6;d"h9%u8e$,Q'.ZwɌ{pq< _,oBҹqc"G˥nÀ$9e6Bfrrl:3X~Å4h%C7۷YCGbILgZw;S>uƢX`:Q?JH5O ruy}`j{ jFY'PeUc9~R,b"Pdp&$(1};4"J+UT.ԟ^o.Ռ)^3]Pvq}w 7Y5t81Zp[)\&/KY± Zl.魀f(Hz'Lgdc^ s_UzgBB7/kjϼjQ 5%"׍J+AǑYDk|}GUq")XZ('Z*EԡAzJ,[EӵFB&q4@<\\ WY!gcER[%2AZKm( 2U89FAJLR$2r*&}`xKҫ0CS8J="}TA `cT/ra\,Lq٧UpY lE 1e!xоDºKu1)INH SuBoKg"pM|q ܈(]z[dwz4™+̌ۡ7C)m,uNwrвHKkȲl_J5T^6> ]& ͥ?u%O?ZCOCx5QEkWoΞ kaJRyfu~@FR@%0li;oTHSf,kݚ@&ڹ]`y$uWqs|camJsnr k̮t_ާ; nd$QFױxifz/y)b:+DQ/񫳵6֔Z}8_'e=1h$nE˵:(oœPewG[A?&rO5FՇ;<\Yy,: 1AimoQ(qoGjebDOc#g_բmbfU)n>z<)p!ӡz䌗dVXz.^1j&XEmxҶ'_4?ܛh؈=r~+01*1?uu@*POCEpϊ]Lz+ '>_q}ۑ$ ML6}?\-h;__)m3?Iʒǎ.qִ^7@X3Q<Ϟ*GO d&l@Jk U/V9>hDV<3!e\Ks.3Rr&{MRTsbuu_-TSՈ!W(2->SWgPBK]ݙGޛ,~3cVG*!\Vmo4 *Y d=ܺ„y8ccd>Z$\TyI>7Ѹ̈MĬSКGԴ2:zĪ8봚iGDpPC09(q+ΰC0M@VaJ36އwk~d ~r[PO DުW)U nG_bkAp!Gv @+h7vu(hJFO3j(4ʃH悥9YaL#굑OŎ!T>pZ?15 DguD "2W!b}kľT{v O3GcHTf И gQPk Xb8[moh9Es49t;wDnڻnڌY*x5<wn1?'R`i/'v[ MXەݢ .׷t#,2![h~4n М +q"r)?ڀz|+7bgY+vY$LW]U̝Y:^Ŏ"aD0O/te #y*[ . ]XfL@k@踌!?]חc&A@g="[H8We4Mt2l\œ*;C $T$5`kfQ~nt6pp⮈R subӛ($$3j|(J9TBpms:7}Xi\Z:y7#t!6%c5rd6 RF1Pv'rN_7[˕2Zk <ppr+G$[e{oJ#I1DRy+(!*iNYGj=fQw0W#[@Kbu/6_pQBmcA/=r gv"MaLixVx6D˔ȔZLLX 5},mJIiH]x zHc+l00l! \cG[-Oi؋IMX =~Ic\ը@hKvʝu"ҫfZ~N8QQ1?c8'ă0+5*\e_z`]1栿(>>wo[!2렻%e6T\P49O(dC +6qЬX,6+p9ܧ}7aFYIʮ (Dv+8(YJ8ꆣK3v[WsuxN2v~~J&y﴾(yӓ_뛊+?bpڙ^z'zWϋC_԰ZJ`KU zbbcDz?HXcm XA,KmU/{5*}9>Gth쳉_EEwC4 pꇡeٽKFʭY}<04")Bٔ-"k:MQ|1"JTT (!^9P^&U`?JTKnL[A,pw}$~Lr u6\=nG;[2aׯ\ Tw"s*F^Bδ.>2d) c IZ6 {H=4] K8tTۚ`p]zDH&P_>V%LC/^[aJ]*[usTd,;jj(ÌdS'+Au_“OLiϳ NSCF dqF9ǵ&;a}Qx,vX##L<郃jOI0R {ô ׵4ed z@1QZH Afᤗʹ(gȯ- `S!$A=ۏz,i)}Wu8;s)CџH|+hQev#!^ n ^ t2I{(zšK:+eeGŋѺknk'xB'P ?cBdFuG24/AiJ /Cv3O.nf^ȸ> bH?>e_R; L Ƽ%ʙ0#J* >nz?qY\Z F/E:&s7 m2BBv/=!+J?tU;/_n!~:}{>W)Ƣi׿='oWf)w4*%@ &kT zSYBzHUB⍪/*Y* 2V3P %F;;cvT$x`>\Km/T v EE:8y7baN4^ҙG۾!=Gh@\ړD􁝢8~a"T(K7cp,FB09ףڷ`fɺ0w%J8:^QK,@ek?h. 0WsOx̰1cpF|qwrɂ]ͫǭgR6DZ7]L|i 0 KR-JU\vގ*^>CSf.Yqe$6.Wtfٯ (>8|x_sϘBn~pCJx㼇9,vh)D=QH/CpoxAlݹ~ bnF5pjL^1X%(z#giB~0q"ړ|* ArH3/+9lҏ!,}c"w0^Y2 g[}qNOg|eփIY9d5"Jɇ(~ }Hbajj zv*܃jDԢ6P9,~56 */oV˪ cX~bxϐQpcQ+"bԷ=E8'pD3]B p 䱩% [8z!p,?6`zw\²m,$t9W(noAQѮn>) D+c[pp1{;2W%X=bP Q5-tvװ 3~JZgӲ#ۘAvɈ)鐓 V?.+GӮMhF=zs৔i-92BQBH*f/g%C"xH]hĔ~DοA\Ll˻03 !moS5g|cM'wfѬD:h1ndkʢ𷆂M2'#LWq46ð~KLG3 ),Vu*%h3I$ղYVsv;Q4U;|([^cBp'<մn#ga9ShiX!oi+_0ԅ,0FZ,eDb'}c Ϥ?K5wHo!xػ7?i\vtHoagv4 >f1qknؼu.;.4dڙhj~_29ܓ%%YT'QɼbHႝ%Cޗw^+V3_E'L.eOV%ͮNZʩ<h 9R}F/V@1ʤ=RUs^XjTΦ9%uX= cxuJ]ByhEgLĿϦEH k+:auXY]&^ `Ioë_"\yił4u""X7bVg {PMTȢcG\gy_u:LZݞ!(K?x]IRȺ_n\ȷZ|ӤlX3|k#UIE+O`:!:Z*_~ Yc,6S޴cbt+5!H/ޏ%r{LքdIZ18k<&2{%\I\9,qd9D66 8* q"O2c_-b\gh;HM~8FND3tN䩐vʉvXx ps4c`@~Kj&%Kħ/>'Z< fIʙO]t`~ȁ\UGXgʱIUũRQ)PF`Q}X7f.sH7+$z8b`?f$v;DسYԨ42j.Yׅj%φ^]p[1d>c4! uE.=c+[4QpB욙=K{*oQ,|y~qsF)75E*4X&k wsMm7撥}xZh{$'p;)9`W`+ojiLyYj ,/i#MLN)%~" m^{R߈Hؐcs!GE/O޼m~]&C)z97eL=:ΉKKih%c8q#7$лtorU`rd:@9n">oBWod.MUI HLR0xnC]]3oGge5P\ޏ dBԧ,Ϲs ,Q LKP Ź ut1 '<Z˞+h⊥;{rX¿<8Xe~SM&3"^ލ|~ ؖwQoeXG,V}57 XݱifPyZE MEcmrb^M-ZQY NH]3gʎ^ͪw8R2_S "/Nn)fxhY Cb$팱bIZ/Vi8Oz_#oǁ^Ej qBԘ_w،->l9N֤Ar iQh`бU&\7iD_JKCev $ jgCeWN[B[MCxi;BIbQZe'78\/JLtY_&^Yܯ7h 0os:@"@t'1'^"ٮؠXmSVIwB0rJLOk>h=-?u8+{s?yE*lJʗS"MH[S3=QN]CI󴖌! u(ZMޔ'2mV#d |7Ib" z_#*[ ?m&w7z{ʖF:ZX;wGW 2?vh#4J* ͓>$喯D$lg2f)f|S(c(uAjToWRv )c hw&A{n20b0>w#5MOΟZh*;!Cس/uZ4Z#JQCbLP!PBvv%74xm ) $&>U`-Sۿ~}1GCxR(4N=q=)Lka<sYoבȬ-zH/dRp }ը"> uM1G^WXjE 14ҪcEѷ0pXkV$AVޓ'Z=.!?G7 Me"G,J΋ꖆqK rBJPS\l%?:rrq^ %õJ(=B+[aɌ+a2ڟL?q7R)p9kL"^?\j(!ASr DYXH4kyХeoM~qf/ RjG٤'RӓdmPL. 5hy= x5j.HO*ş]36  @]rnLJE8Uż;h`C_xB-62=%bG+Ƭ!yΎiT.{sɵ!PC@nq G]{=:n*Y$mg5I0DC6RoQVvy6:Y=M6=VYRZpF-\ǿwX4w~[?􋈚Oݤu'riñi U P`bPGL͵gOw$$VzaznB;ܣ4GDoBLKla^(fV1.nsGRNtl%Z/ \ngVdG'H &!CL#x h2nbg1խmqz`E1)6J1vYg0T.]w-$Ut9܄v‚h ! 3bo2@NVL$J?-"^wO2 hfîYg 49su05S]^H|֙|WF Z0MݿbFBpcī_$zYg>KQl^is̹@zBJ8ޒNB0phq=7x"xjkqo7Vh( 0zse]9D#kx$XPGX:o- ҵ,$je'~Όޟڣv,ߨ?zV]6E¨_K:J͉TB{*dec\/=2Pxėܦ')6_GJ?O(a@ Et%lI W| 'G S\ /o3@a"Q1R'u+ms_,OVIcIw o5'~(l:l.Veyŵ^˯Sm7sKC?e+xԸ=M _ QK"ek*![jJ%o[pRO:D>UNG`Y0zԠ(| %9FHu!i*jMq_sz;i% %x LiGHV/sDI-_1=4{,V[$뷆eϳ꽩xMZ ,/|GSC[S|f%:sT7AVt@k/ 8mÐc!\FZQlZfc>Q̆`\z<Aa^>xAe|{;NVJy\ޫ n{xvǭf7aE5-}MѵeY=&$8Xm=R>&+_p>ɖn-=xkL UVO=׍Lcpce5vU|>ϤҸ\o+}:/rAMfei`˻l$a"e9|@5QŬQ.1 i "7}si+W 1:VrH*[ .Ij&}UH Gn|jpO? ̼nt!poe(O|tpQժ?s.k$m6tTdao.65?g8n8At l%xiAOLmKIJ+hz9vѰedz'C 5fѿ]JC܋NpMug< G9A!JWJD5E0d}AԜeӘxc)Y_٠}W5x la({^&A;8 wqQ zhW}-y>3魨7<(o'&qEx8CCRN@fnSŮ[K<}j[$[k$zu¨AON[>8t^?# UgsiRUXGҸbv$ J{$8|{UמxѡZs8ɘ(h꾚6e$>MZw!˯s|+i"`y gX;/+-SJ?ҩinhdN- 1[ 7Rv[!|Rnp+YlԒ#w$q+`$-=E<4sPMQAH̐x`% sif Br܁X|NaC݇>N}+t[\6eOQn4&t0jImꦃG([Қmf3jwP 0`ѐXznaD.Vuٛɪi>ATv&{tx)BxʰTPO6{&Y䙳d[}tabnz"23-SX we<[G6m/ u t/n%DO кT%e23Wj˚C)qs3vwMykJ>8kC1*P۟OlZ$1L͘ _H.k@E6,{H^ 2 5v/zb.72{.;ݫ- 3LT~UHz.?Yt$N)jUp'nNoG~s( qC& !%M(joL@8܏]ۤڀl~Dqq3{_gˇϦamuk "[~ @?.EbA+ƚ]C7$$CB$Ϛr3bk"K5us]G^NuQa䉊,o)S;>1MTUɏn&Ӵ%ϣI397UkaK= 3e$G`σxR= ^q8^/:V<>HIT\qc5/qrCcts1.;¸7HPK tr`nƑk>QpcX:ƻd$Z))κy 5$D IƤ8EZ8Sb gSFI=5:ϒo ʺd՟?B4QךqRZ!u9֛Rf^P ,Uh35 濕FtzS6xAT}uCӼࡕPaj V;/ R`4譧J*t=gi &rzo^h5wa`uɓ:HwYO2h\P6a<݈*#ѱ&h]Twivf~)^oś4D o/-7 |^RG̅ v/5噜8&\~8zPu?DB )[Z+CaFrz 7kdFV\9ߑ(`2#fȰSXAsm&:O`9G"cDwH[Jxw~vq[]R2M.+M?CC{6N}Nud؇[AG_L]TW+l u{M*JOdUҫ t^6ڲYRO$5FgA`F!0xsq-7=7Ⱥ`AwVApК>۱cF6x%ʢ '_Y}"8v;˫qWLT%6IGS8H~ &#qdqåA1` z{ YI)ЍC!64#Ą^iH OR)Ki4"f?d,&7"HCfERƵB,)֣Ɍrj=9#ţeFKҗ3oP@V*@d;\yQ-Nu3+Dh+ln?9B6Ņh Yʽr=wM꼀ģXX8iam @KKFtglw,:,#>yB&mytfyy̢Vҟ-eS-*|,MŨR*r_U=fk#y_}ٛ0)A~5AHGnVjsĊRTG7P H =vQ.evg]n%Q}r@ s?};gj'i EW$8"˷Y-$ĻMy"ou+\5cmq3_-z>Xmb귤^w`y=-dqxm+chArcv5pp#w-M?a4c(]@l+~M/$;6+ îou<gyf˶hݜ,~/=:<*.|*hw_%n*T嵬g ˻],td3߄P)1pGWF兹C1AD [DXt> vvt[ pNK-O~Q2Th pT<#Z]vgpcx9T<%ؠŌD;N͖PN xW֨s'3}@{K_?5g69Sbj41|^G1]mtbt˪=e)N%T^Չt't=/jg&XA(#3"7zM E1?T*mGk[(Rȧ=<..zh5d?EbJLJ :Vd@n&i3s?m\wI:CP`:1FMܢUK߸ݔ?kTS=ʳ ɏZDY+_\ߞ*&B-w}8Yl y5*4;&^(%/ɩFVm" 9|>b?h/ug1Y0" 4vX${F:V,4, c Wzoʡm]R~37 ُ5)9!ݺbf}%߀$!W `=Wo@wba&}E"5,[0 9Q2`vqط/oI:+W赞q"ѴP_ *bl7\;xp]X%'~Bs+S謬Hjlz~גQo}1Ϻ=獸:"K.JV+ѷc,b]yP  {i1;C&܎͝{~W)P s3 dN7Yd! k 5Z+rGfSE4?kvu(^5tWƙh& ͤ .! U`/o]/a- tջx9.`O'dϾ*:- Zx$ģc= %L6NɃmkD~ U:2tjΕ{f VZ(5-.3w2n|_uprP}Q'4[1RT:EXH ۰OAY^\o%NɈB][7 gB5 n0::7n!oΠ굮f6!x% ܢK?9^:s-E\(d8&58Sa7r;1XUE\qZC-k~yaRKG/Bt| lS[_Ơ0;43i?TS"{T]${|'KrӐqjb%m RDtʼnQkЌ ?V H;l,CѦ2#>NI^zR p0BCWt'ȏ^vPq;\{@ZBLuon^RAfU|P׋#.U 7FS](BP1X/k8ߞA}I:r*Tg5\>:THu*BbuԤ?"n" *3PqH 4Dk)AE8XwW<7 E He/\1Z5>&E: J V0e YE֧=Q7P!|0BC!CtO\Lm'm}qCH `7-t_!gQǣYMImCQ{131J`pi&ݐy!ﴃQ "4IM:B*aQ="4i~bO'GDeY&r;|@aNgBCvcȱNqu쌃F>)%Mel`En\ CߏˆrѠzQFq% !"CA;yʉ(=9wXd.? ż5 ~;V{:Rpn?&|4acNm~jOn7cn3sJFg,,P^SqVɕmX0tlf!>*?dc|ƧR,R@e{$/{5-f>[ӂ=0^ID׹3271_ч 7FVo;,͚e)!"4v?ck:zQ5 oA\5ܼ*5=.4Py2kHSD:fY z7wVSu JƊѝ|,fۧz BTg¾8[qh-3z2;^>郡9d)S-FoT˷Z|4mNPmkF/El~ tF7}%q:2Jm9fӼ4"Yς/AΕ|ziVWRq.|㿘M) c#8 sFυp4!:8hG@}&B%X4Fb':R\eiRUlݶ3F9Qꑼ`.> *K~ˌ@鸯K7`DfF puDG˄Q#׋nfbFU {n9rZrzb7Ɔ=)> `GĕzBt_ hA|N.CAm}pVƜx?(55혒;ΜHHP RnY ` Ǝ$| T _Щ81p,26P](|dkLaRHG_!Aa S;gVD°F0:V0T|fpi :IՋ=Zۆ Ta 7BZ*LAs$Lޫ/ ?Wz$(u|mrTFbo1u9B f0%!迿2efkHb>?*UETi}YQ8a;T<2!_,aIK17{ ܹ0<2$/^KRk*w)G3X/2V\*ЈJzWP-N?ow GZ{ɷ]2B"%No>lrV+umnq*a@KY%s cerl#c{1Ps+ ؜e]c!vEQ>'B RG!qذ[}vW8a$* O<\WF0q\ Jʰ`״Nc_#&wR86>ϙk#4T @]IHrdqZDEL9 3C9 E4A^cJ!ygLy.-at*}xw-"9ɐ۸>3BfAGr2ā' UUj?%F3OwzQj޻lMQKal3/'"@h׳*Ppth),2SuPg( yk nus/Բ NtkaDmX-mxX.ISce2v Πh3[WꅖZ$F"QCp|O#2qX(`bqsIB)"J<%Em3ՉJlƙ| zгv%hv"bB;;C~)^֬_5C%cϔtfؒTQq(֌.,|/Pt+#)) I`tU\0}dd8ޣN:M;t ڹq!N3uL%?#*3 &r?+\ <~ '7p'1/n:H\22EW#rq4hsq ӅW da!^fu"h$s!_|VN(s{\k<F(x8SZI,C;"7 CJR{⽬g-܋o[ß 4q^\^=`P.pnV I^0S˜^tR耝v! 'Z?-5#Yg%őMV<$FEZHvYCoEkTT=tH7(!C#}78gGy|_^hT܍?U@!8GrynŊ 7͊\,\& MJ$nOG,$J2_ D܆ wAOHVU 4^Z3zB[}X(5#jM٥0+Ij(+:;DHuFؕ=mIn-^ Nxѧj%ʽ,:gQY]xk-*9GR>@mʥG߻ku[%z/)1XNLJliWGgL8*ҲRz @;xB月tKM^]{q܅/TݩjԯRXxGwPO,o}$aCs͡0 ,^eRᴺ!cOu<pT}d* "Ϥ?i[Eyp=xm84;gikؼw`>q c (2h yæ7^!|3O`\JzV3 2 QC'/C焨&]ؿS=(̕Lv7y&<P`Xt͊;;L-;q ]m7{"T *zFk*61=O!U-C1jJ&H?y d[Z&aúzX K~P\- 4Y~>T`p+U1mdwfXV)iځX[][TV}2+_0/NÇ)+-N(G߫u,e?']x!Df<CQ I"b6R'*T@[թ}DC#EF}:\ zrJH"_3ԁ'R;,pg69bITIB}} joP#:EȤq*c cdk+]HuNӆ,;ӆ=c,&)7%)-7!hƷaГƏU=IvQgIf (eamdߍ@75>;4;JÍtC&8zvaK5|`KHʹL1aT< ޖ 9.9TX00F;k{*;,+,_G*%T![4שfA| *^.hB@ p$ͺͮ@2^ ­WY8$0iw6*_U:##kkCо L:'Kd1$ EhQr7jBgS@>eLEG7ě%z}Pn?ɝS(E.Kr Zq${t a6jcKEiѹ8+r8j=SZ7?Y82i̲(n؅,_}S&QLbIKV {o DH|RQAgf@{s:&j""i~X#P ;5:ܫõ-}d-O}yCF&}NdΧL <\V.!|E12)cХW>竔MգFx 0':-̓ kE.?2NzsQ0ځf"TG{Ka>g#4UAqWk {@Ob k&tfRוT| |$Ͷ@2O^Vz=lzؒHls?S ݄%Dz^LuR /ETUdrr طٯ>#O4I3ūTB4^o=FSu5)ۢF} N>v {\ al^Z t@1mPIvKWSr#$z/+Vҁ/DEa1voڟhU&),oH(rWq-􆔧y7G7-31O60ΘU .["W2',Ԯ\\ԚIQ;2=uBG$Ovjbȷ_43૯Fgcta)w`0,6PV X!Fa.sw".hg[U~M~<;uN51 6l}?+݊IHZra=mɋYcV:AL٨l~NU3^(.z ۬ICaJt"k?1 ;H?Ǥ{!Zs1 ]/x.LMUo{z3A_0[ dѝ,!e_\n8a{A;ftW'NnE`#: >Jw bDzOlLp䧧(#?`s+Gw~Y2-^Wώa:s~1}lMT XEJ *;|gG)uAI=@_eWl:(|~ mK;+pWsl-X0}MKuZ71 wwoЂ,ƍ;ό/ 檢TXB%6cFg| `Q8+Z8^g:c8CIĸxB[_w#v ~70  o&U T1p>I @ݩZ΢,ebDg.Yy-^m3}:^}[3G|wy@~1Df@bL3:\XGA Cm(1'kQG*f]|B1`m[ݔn֒;;/  @=r0Ed!]+He29 $%/hU;$ԯSفy9w L*Ή,6`v^2#!oeЕy S %/..`vYyV2ힼ\i1B{!V14z$^J#GG%䈺/6g6=$h&R&[50r[? #1"OgV~@6oDyۛ0Ѧ Wt{pՉ1tN|C .4viy6Impj-G{s+< IEa,E8 AC!kkJ X ~=܏u;jUCiz={%r=)2 P:Fĉ(mIbZEGzv*Ɠ4K 1vԝ\f etju D,"wP!.L?QI O#Z%4w =S%)ּ}};[~CR.eE}p2 Bh.m`{=օAHGAͩ3~k@\#Ԯ{sv!ߙD{d8D2&ǢHQQp*k_ d  Fp?Rf9 zOV'~s6P0.l2mXniXAq S@v:L;Jt-6ȇVF̗+_hJUZ=hu;}\Oz`)iSﮖ:4,ᖛ0LiS?TķQou5i.ڪiN.s.qY WTUOw&녣޼G0|n%*aD}REIi(m,vdS}r׼OީѬ%Ć4UeNHO-lmXjQ+z'dS0rH{oty[  lظMgCbjhp^+3$(|~em~Gk* "Sfb-e U~W6,%5)g4Lg2y4*UOH&_{F|;*@ւ= 0*%XGM}n?1;!]=41>vq/3F1WM<(N=аp]{"ھZC\NH]-LP% s'lU~^Q^ic͍$L9mI;sRdC&&Mb M} I{D əYF݀|,q`t)8RlJ :QJ  eǿ,r]eȚI8!hVLCqJitFܠMPպvŠޡH{Z1C9l(nLi3 .0 0m3To0{)S2+Z=hpfIP8r9'acWFA1K]CvY@tိjKnhuI*3rxƁ?MsHvDJΙ~3fh3a`+#9(3Omp8v@ΟN@Rec?p'0.#WiftgH!:XhĈ,[ٵYNgȄ!H]O\@,M1홇)K LzN~Ջj縫el5XAB諀䛸!-v%aל G,uhx>,֥or'f(#njښb7QjEղ#})y)hg5DQA^@+ $nK쪐c(0uB6Rǐ LWrL;5s<ɩaf$j?3|:`$ǾXdUlH* 'dc5Do%dosy"H<à7r뗮&8%5nw?rWѵ yxd]7,S08tP9 7 g (ʿ:0@ ?f02C-özxRlwՂ,Ϙrm^]} -=CEiBZX^bygon1͐^Yek,#q+øHU@WٱEk˓3R~G] 4 ʱR`,:n ޴Ctfjp$(z?ϭ"Ñ4u.rnhz*i5d9\Ȗ@PGU \yMA)eΈ f{ʱDypӖP/*34`KQ ,BZ O+ooy" qa[d8l |M@.E >Q0S`M]1gLOr+g.JTUE:yw' 8խn%gZLԲK<}tsL>2$ A[ ͪnIX CxZ\m[\mZrX-D-F&%yjh<䍖(j'jVS+Bߥ;!" 0/+>Q#,SGԽSg}OSV6e-eO|3(ay"k& U}C:U!IC*D.jH)Z~!r$Oj!-7VVL(RKǢȪQE*ݣ0ICOMD)cfrDNL)K!I{C3;UPXy1H;4YH*{Q ?rQ8W0.v.\bWM<3S3 NsG#T Ҁѡ}eC~6?4!Vfb/MVcMVa̤k)kE܍+"cӵ_ u7//zT y{,[|+U̦YP@`^4IĞ|CHSwрE^v[҂MR}E ˲-9#63Ja2^ ΅LRG*rCG=k)ұ2E`h֍ %}X8R׈m4IB3 ״^+BRFlmQz j,ai_ʄèޱ@ayf7SD"VtڐAlU~@zwPBE-RS+!8Vz9JlA3 }r=d!No㨋%%W-ܖMgZop}9\rW#]я-y(3+s aIƃ, zuwN ]{LHM]kY4ѮJTk ɚپ[M_-%X_?]w1s#&b{,&{/b6O, 5kTb’QKǔt S2lc=vfVs`R<^8.F4-3ks!5Ǹ w-$\V!WK+j"gh1?3OQ?%EtHJ.s 'Hڕ5zLIyq2ddE˘nݑe++f6HKsJeN ˊhQQcVHI@3(J}8cj,}YUofY ۀV&5\N~<@o)%ڰސ"zJ[|t4+zH$/i[jؠ)s&a[% L[coH㠈T5vЋ<[o޽@oJAŘ5AƞoDn5!,Q,[r8 b@weyv~A(PךgL YW8{朼9Svrh>h{seUJ+ 1MfC8 V3;C_#9õfvq iڙ(Q|ޣVCPs$*;h[>Zm<l8Z) t4֩7x}q3q 612W ܀&s\`Z6`XB7WiP?n@rCG["]rar"&bխ]OYkT>;h%M\C0h|<"Fk|e8/ >aRwq!]v0zSX} ]BO7ɰ,@1ѣCNVI͵{Pgם >\iX5;vrdцZyAB6\W_qPgC(ľ:ZP cXH&Hs*Iv5*`cZNMa6ﶛ_ٵ=F8GIѴ{ %b=Yׯx^n 3)abD"&eGI;CńqQՓ*2Ox*SMG(y[g}(Xppsw_%x4{QX!yr*Nh* ؚv#%I~wVj4˯xjT7VgZbtHapj!AR3;~!X^&_*7O-(!͵jyR zc3PZ棭vAT;x[[$s Kg/Yғ#5e aK5z _=/l^F|k[f{Om:F_i 2b&SJS0}n 0'%_0qa[{!F6Γ 3ySH3'ލܚճwr:qW(o?QyGAHPwJZ \82uDGuC#N͓0i0]RhUݬlzJ8n1J Ʌ"VoZܲ9])jN‡jn y 3{zn2[.=M[9 "|a~Ewt ^D9p8w*hkQRksZu=ψҲzJNJU9P t_JX[Q~KÞE0].Oa!VjHgr 3% J<(r!k<@m~GTe Ab¯^*N ƾ2L{$yӪm?Ne$]7Kj{A,$b4Urϯb*:d?J]HP-Uw`%*ok#GioD‘iKlXw,5)&~RAĜ:,l:=,wJcnGŐ,Kr-`ל 5ysviw@NRRY=C9GT~VW08i;X/Y[u% "_SJV<58~S77bL6 ZӒ^q*N{@|X7!n5rP)a z-bRw1- ˁU ¸ _zJG C i}l`t5kxv R0"t W_C:m?WFH3E8tj"lu[6GW%ǹbu)Iyb-eŲ}/r9l; 2 E͡D:sZerq>Nv/L8,ʮz?'^mHAJE sLG,"0(IJ͠Dȴ],+!}S+NUڻGV 7R Q68|qXNݡ~?vt&:I90@ᢩ|LXzY?Hh/Prl4JJǛ$FQ9GQ0U#>n5k(P֑P1Wt,{!Hb|^9.%א)KWN7?`4C A؎  d;xOzV`\1e tb VqfuGЊmX-*Yb\Ub6+䰆TSեߐ\X^kq2\[Tx[6IRq#t|.7EΑ#* .[jSBo .TꅔWxKx]] 1KTL}qsK*} >}d9OނD ~%]j4aZ_?,R =^tkٗۻB􈭊*mS*(FGDpSO\Tщ[Q'4=K (l,i]F*}̭ziV\๽"77 Q|zlO좡&kvxpo\˲Z;gW7Κ=zz.m+S "lӋ0˄jfNr/MT^)k#sFIvO6 R81.T85P||ibs/<D:*m ]!aa -v*IjS0{ν w(25V+ժj0 mQ8]H!˸Ny3U_]GLQ?v_P$b~eĸYO^$ni.v]fDߖ0̈́UoH9 C2G*HK+.<ˈ:(6tz0ƿzy$$;_|1w5}^Y.`Mq9.$,R,Eb$#bT:2;i 8y<215hptؐG`(ݙn?^5cBuTڃW:'n r6s>our}. :ne,'VlA<'aއlV.l&V,]|(5I .5֭!u-Dg)}]g iy4؜' 3Zvk`)Ma;H̸K6#dWhIiA'r2֝ޚ`?|:C]ǡ=yi'yRSn':yrU!CM@x(6;=iqKn6_lM2"xxu PĖuЌz@> 4L}y0Ң ]vK(̜Z:pX<3V^)D k~B4%TIKb]y|#n"KNW(Ro8idfjq"H5ƶ ,21Aqx Ӳڬfy+#<<_ 2ujNq'|U}P!!+-gjɠar.ࣃtrv':Mq|VLYA}\ekR216O\]4ˍ@G3 |z-KJw?⣽(""uyv'0t.TD QU$2ϵ^S؋^7.h"hdԌw1zbrdoh7NXJI1훤HA'3qtP^ڒ`)NzL CLP21l#A{= ݿ󎆢Y I-0v`Bs$5BrryhGt`FOL]i|y'!gQzo ȁ&I+a&M|\gH{ߜIoގwzcUg4QNjf4pΌXI`J(f[;ў;y[z>JJu֋@҅⿐%7vd۞V鞩U@X/!VR醢LQAk){Zӯ>)mlZ%;|K"7i ,l${rH]ƞDnq q4C]`PSa oL@$}j -~kUkI58QEM[:2|oA~6ʀfrֆ`N I8ؓPk99 j ڵ{5,a-Y~K?O&![pc{vapwZLh^McN<>6~Jl+0lBjdA왽&$NTG%Lpv+-+Xؖ唷+,.wBѾ„u=~̑ H^PA.{Đ 3 Zyۈ 仍%`V'n!Iw}n&|.{5i(tAm*GjX AcMm%NJW]?GlPAP ZRX)U0S,/&9H35YsgD},E<[S%#t8+'B 9N9)@(4$"y|6K0r`5dƊ~Q ώdyț."m{yh@.vrB`|2:voPkg]sU!Tfƕ r`=>60%E($JjF>kf:p7ڡ C159v-ugf`+*ekUƣ6C /Fbk7Ow Q:c@v& k7!SXj9H}0AvJz(^ȮO_ŭmQd˕!JG#XjG9x1FiU62~F2[@>K_G[ <[O*ʻ1_vVH\SSΈCo h-fnf=U9ҭF96*_lRefҏ6$ׯ4~%G=rފkZmPo&C 5?Vr/)\{)%;^Ud >KxHc$%~r*P䊚7TZPKYN4j]R)}k}U/)G?TyN< n)RKњDL_nJ }PԱP܁}XEXf;lTmZɪe޼z}욧%(gl]VTlGhsac/U.-ΫtmɬNټ`-gx>FHo mYq_>xݯDȸ`x %0)3$~@\My H9z9lK6U!JONAWp\TJ`W+ -]\Tx^4Mb<!f|bs7bAmxXQ[3)k2-$p뮡%,u(fUhU cz+- @ (%9z:hKR#^7 r^P)12}}QH`uR0v:2RH0{Nu\{ȘJ[$n; +ԓʓJ;2Q1B` !ܜ>hR[0a#.~7l^(+ZAIB)#3"z?R͂xT:eAٌ7* r5<2퉃߾-uTKvMJjof0mGt!dM<+JDLrzVk')uv_8p+$ 0Q@fcGd $ OsBDvKz@dv"X^kR2̱:<0;CYPuMv.O ğJJ#UP'v.+xE6/L 8 cs }ń E+4kýf.TT7`*w}e7+͕G|8CPRU_{Ft5_k 1CQts>6 3iQE3l`(^?*%9jҨqNnQ@i>#Ym.lt1L->}C_q4qi/'LZqA;Zhz/\T*ֵqGu9ɡ*P1 oÕHgTTA* T25LApqhA?t#(8 4[ 0$weFVl0z5 &D!d '=Q-~9ƛN:㵡)/E,l] ZKʽ*lÜ~*X'%>iA T 8y`wZ(Du 1n<&C>؃X*_j8T 3~JL&Ey:vnxP {鸰2}c&wcH)@ W,عC~zJC+b7x >MȻnVdL5z.,9̇ǀSJ/+k*[5V< kfO\yr"aCfz٦ugA ;PeyLlEKʧ ALYgztPD΍X6-r&iҴ战 I.juq"eS>P I+w Kۏ ؃At%#޴v.zJFZ"A%3l` d+/3pU~*뮷}F}ibbӒt]|YTC9CnsSe],f/jyS}3λup`jA =l95CK e1i_FJC97]}#GG$I4'x = >.F#崂[Ͽ?"U:3mt?!8X%x$еIR\#+6.V.U0jUtV x "KD=;-{ڹ ZN+-ѓK|ҨrsݖUK<Mb9Q5Čf$2켳:o6!]#ɍa25l6tNCVZpj|.i6B/K]>Nk"vރU <n.gi_cPxso1Va;`a{pJԟVRŜh7&'C5WJp(>Q/j)#j44TV:Q(_%X$xcav&k] >QD1XzNEfºlB X~靮2é?2HeG[}+1! 9$i.fY4ض,i%c62V^kۆgu+%>G=]Ɲ…+a~ \'O!`,RkU$ʞ>-)BNOMv%7 6z6&t+ݎb}fxs_䪂LJ/<;nbs.iD < LztNz/[\G(\ ~5eY&bWf4=JܕʸۊjK EW0U+s a&$&1,ȥt"} wX {8s*˖5ˠp ~G lI7ULDȼRx jLqJ1 ,UCE[Mdg򺼖˗W ՘J<|Y,ϿGSwE IOqCk۳g]%JMC(1)Z`FU2qYD~Ihlܬ)?*ot,nj9hu`((*Z׸|A>NYcuMU(~VJ7CxAyUK X2sSAUBwZ`6n `v_V7)ę V Eߐ#C<^ax&VAåJ݋+xJɺ&}%$4aղކFB+6{wwr.dq;_%i؎w@ҁ?y&Iw'trŨ&uDz= P{'ߤ| kw0 H T&97-FW7àʥv9U&{coTl4CBrqÒX?''dHkb !ǂ(Cc|YhR.5{.OI8|H[4ap奄 4TGr`h\ }f# tN74ӌqŘz=)A$WtrjL-LIj1?BY@ݼ;c^y‹{+~!}}?&\UjZNj$ bGtTz4{6(wr஭]L2Wrܘ"Jȟ~MbW/Y7{ 1aC'LGs JY'|nu=`h|E\ 9Ps 4ʹ"iCrO'q[)@b/NSr{l$I7 dd3jǒ/.]ot7MNd˖@φjZM# |GmTN#" 2}VYd_-vI{B-y(+;[n9 ~9{Y0 KȔR.lIt,IǾq|\Kii$z]?QDnT*n`gNI}7\o=M7 Xϕ^H^$p{f=3 [#ŷȖ0+UX{)?*'4}`}[cC,X`~Xv̂]#-`9]KIO &%"Q3 Ԃ%-/l8~Z=} c%&KAבI}\bu" HH:LUPƭ{ݻlhUI8<9H:qA*Z^0|)G-D:Ԅ69.\[{ Yruu%hѕ-9ULUքyKdOkw,vqtm8 H`JaȷJMI<@䥰6t#1:+~>u29-(ݮUm0J*ҁιȔXOq޿ġEVQaJHxW_X( HI_ 9ȃN6ʤOEN>pUFy ~("LJ'B^@*;v^~52\^(zf,>϶![6߳ r<-EVt(Q>Gf¬VY`IvNcLo4κm56y7[WN&xi/Kc1=K x)e C,p.'rkx%B5XAB%AO*u9(G~ ?W`fL]o еD&2Eӿu'(35dTh\z6(k&Nr Y:*>$ݚNp/oY׫7*ysHO/+uhޢ>/n+@9}]-'dwg3GTafcJoTcM>*߈ab'6 B?)#ŗ.bI[5fʆ'f0nL2༄H̟G+pĨkq VvGpKv!lzѻʹy9%|57_q8iwB2zG9\D&5VIbAx>D0WTHHVDGWbAɚ6+`(Kt DZ7Ë.nZ~P<+L55O]w&G  OpN̦ѹF.ՒEgźpOs`"7 lGʖАTTk)D Ě%?f b{3  IT5rT-?mD".\2&[Xa_fS"yc=%xބ,GʬYʅPy}%UqNXN|nÊ 46fPhtqfb%@-!yuE.yaJ8C=x,ĥ"{1h(˹[Ԧc^ځ) >IBsW\kr٪Wl{Ro[ѱ-EG+J^^+ݚJmZvwd*Hbe2chϙ]0Sldlr]Lw3cwG{k0OȽ@1i^B:T@&eg$݅>GZFk!4_T0)5ȠEU0(rJ3ѥ"N7͇HWDf?t"# |;%Ɗ}loQ`qVP#Ψ,zSPkQ+^oq, {cfY[b*A]mxRpy)^h߇¢ #I/Z-(ijH"\mfKʥI;dD;]hWY}-W)eS4´kn8m7e{&5ΟJ/.}<~^r$(]W}{GJTYKg@?&:E<-#6fFi%zF_COvV54 /-q$OǍ f ;T/ eCL"sY8%00D zJ? n)ϖ9aF2c~72˅d'a=IT~ TxR']9zNVԣ,oؗ58KLȈjIvҌI uo(\ўD>^(}ŀ1Ю,L%:-'(v列,Q͇]iߥо^&vB)9zZ+8 m?e.`;+ŷ+`;k G7Ysc}A S;m43mMeAb`*8UL㡎׭ bO)2 _pgndqݠӎ`[EX̙`LZ{fR2#¶/:5Č@q,*hP:7]#OjHGw)ܒyLaB ƁZy`/RWgA\GNG~) [YV|][ᔌH;4hYpE/$۾dOfAnNԄ aHn8*OCKpَYN$x8["bXaf\a ^~;|E edQ勮 hֲ<]&5CQ(]e"wUrr z=oU|or¬|*[Mqi#_{*@HD1ˁw(QbʾI^䦧_!`o݅{3*gXX9BMKMC#]⨤(Wr H *7>)E 隗W)$ \n'yl$TL)do`*=&" >DXlKS e3^Tp# t > }yf")^ D5)#G+^hF[#"O7#-zɥs-y aŸ#uK/osϛ|EUZy= {7,7PleA1o{/khz9"ދ+܈ur71r&p;ZdZ.$qRK#^jZ*&uhյEFW:i d1fLWʼnA˄bxʸ✈xW sZ9#v6ߟ[#|bVlj\|EiT2czlCe2I"fJc?EQLX9-dO'aPP](Bv!+q 537Μ<ﮭiv+U&_e .2FG ' lkt63M#rh3J? u$&Y1m5Akv}vm.K 2lAp;,F]B/T,#N͢!R4p- @d0Iʥlz&IHONǍZ 5eV(((4/Ӫu !- ԷOwb5zaS_;=>'E75Gnߜf=gq@儿(]eB ?,Mtp鐩̪villΜ\LmOcJ,gS/˭ LDzo*b<ү*O`앴#BA1X>@JW9)+mKU0~s#aOK OwoX:1Go(58 Ы~{Q7 ~^x63h%<^ctLiT ESZGlP˛SVk*% odziNpPϣ) +Y#v3gE@1ߧ*XEϫƎ7`޴y|t0(6 \b>,52|ώج=Eo6Ժ=cK*!~{(TSYqҙ`[!4 5k76H:ᢐ O$*=oTŁ+!UF#ueLYpQհO:gPdv{7BǓd|=p4M'oY@xg5DOϦ`+犀TiX嶾FrW"`*=/0ؿ,*--#/WQmH]f-H9I%?)RKZb ܥJef!0!;f|nDS6~6jЋ}p+^üYMޮ/7ei-frP &]w뿟&7̑]R@GS6L5FWKl0re _~5oxi ^mf6'0qɿšGL;$u`l|?jTHaY"];|Hmwr<ѐ;"kהI$yhU_E,)d8~"a(iLv{hQV|+uy<vK&fYa&ݘ^?+;z>}ŚG)>!\W.P0[yС&b~AQ:V9CwY?r )=PWNxunuV{LB ss9“"xFj'J PZ= =_;@ E.&X 61?g=q8\j8D.mra<"C LV$Jz,՚uTϱqT^ȧ(+X23̷~/ߘ Qgtf[+m_ 1)\9tX Ƞ=c{ๆSLN,? $ed^ R~&/_9XzyzI=^Z^ٌ` ׼FBf>&P͹әw3^>T΁k2yK+t)w:j>%:PFIEՠHy^= I΅]WmKa?ф6s)4{a@xoꐼбƛüvd}Z(!̌0VV.o g#qrܿGo*ϖAo4N)*p ,r+h1'@BGSն ”+N]Z5= Kus 1Ic#ԚNrU77آz_yI=5\ ut-Ew"0B(= Mʴ0w#1I'Eb|*q7u ݔBxbsk+HN) u%..xԍZM*NF#F2:*Or#2|-u[W/L)2zAbH >x~,LFHֵ¥#LC~[))aG :ӹ16ZZ*PնLCl"1a15Dۘ!=9z ,XY:+ Vp"6ahE󊘴z#6 \Ō=nIS4T0dTح̅RUYa#a*Y%`ˏx2`s*)qu m) U}.Wmds#sӰ0'r8SJWv>"9̟ꍻbO0QK1A8sM~ZX5LpmwϾs-|H|-@aĄUۂäݵm4t˲dTTJSpT*y.gn!;"d Mcx}"t5;J΢cկbv35%=EyNqSR~Xp2XvJD u~n3?I8ءw5вpzOېTaLHC^Hj<^'Rฃy vR/LإgBg޹sdVa3I14cf X JNg45A5b稉/|$(;5GN6>[:bTFr>sG7W?ٛ WVN@@OG\a\PF#)<6@G84:hHG{dA'+6^y Q@O)VrBH=g8MBkROw Ɠc`&Ɍw/°ײ>jWVnC;;Fz0"ޖzhItS\!7/ZRqHJfA˥=]niC vak3$f $|x;rJ0CJZxف0&*Ù1>LO^8&J̷U֒GWrMJ׮Yb48izSwrt8Is(tD9$[F6FXZlaL C".yMIٍ0f)Vn_iOSiزCZk!\V1:񻩅ױkC|"*=ܘ$4~T`5*U>Z+(osMJNdDv6$:[ 6n)q|'qϨ;DL 9O#}g(X/͎ v޽F=gk91%\W 'LpVrSm^w:e3 m-3!|BW3E&2~NW(Nx!]4+#F[>"Ge{sȶ>F= +kҊ͞ #1"Y >6DRQC+hk yÄ3;fD0(Q(=KpGܘ5 5hO %!1zq{uXqe6b,c+ݮ=4KɩvP?C~3m1vPlևbc>O6>pDz O{Z.C-sY+5D4HXg爏LYҽ19ӏyDL4~@~]WHkn (/}Gؓ` ,xᳯ[_>'ߕCLs!>;TȎ<qŗHx +& *x)ڎtpNwSVY6g/,'m hrZ>N=FѮa{h@SdJDNGǦh<1I}~*$?m¡ >6u^Mp#of_mTNlc%`U>n'n4bm @U_A=X)'8خ!@ܬ6-#Ϥ_ ֯XV{Vs_u796p3Ȉ ݑwm߭*|zɅfPkˆt$c)%ڧTȆuT@d^rQ٩ PL:8fBO^˶R 癿YQ_5I}1ӫL`s QԌ6kC7 Riġڬ5P*ݠЋ@%65.~̺٣Zm[|;(lX;E|^իZOG:$Y_pX ䷥s$aB^o ,)6{ 8.AJ?+y~^.DA'AQGQ[׌* lU5)z͹A٪ҍ8)7PǫF`fX|,≇f8y |:|#Tٻ݌[NXSq* wj{@Z?q4ZO^Nk)X;6D{\Oھk'y5xSlLu`q-55<ͦ 3 F˒U2k~b1?*$(1*"HDt (ZW8&[lQ,)8*![41)ܴą3A c"_aU8gO؎d uhJ?Js4:5~Q_|_=S ׈ Vwdml-yY(_5ޕ A9@ֈe,Jat N]Kg:+VM8ZT1S ^h杒W[Z5^l[^oP,b6 DBvR    WVf0lKDnr?}ݲx9h.m 1^EA|?om' OݮagخBoZ_NP?7 dnV IK%Ɛ(x6|a nߡH8 CR " KӗasBa_g%EOki8[e&uBVQEUүqDf[HY "t EN\/4o…z} A>M*7r'V.%vyB #=^`$UD=xL"[wR 6p gu鉦i}w#:^H6K*7 (YЬY #HjiZwz5Lߴ}'zGadH!9ri:7smk> (z'.K ^h+1oAnu" 6I Q: U!Gex3u#h7j5Õ''$a97c؅;udc`%M{vu6eWn6L:>&47Znmg.^ `cX_/B,*z\Kf ܙ9ov};zݜryR_w?ib^ey)]bSWfj k P̳$U\ic8[郒;wArDOɘfيlpGo(ՊE/I#; ;S3Za%->yE:SQEsf_6hN5-J&uܡݰ5|ߜwlr[m@R'0-`C1sF¥B7-ZZWk{8F? <`_krzӤe燎X"r NQɦyz>lRvY/DO`~ĥ:4@}ǨM"Lr9/etOJ'n|Ϧ!h fP I*`pF~[Γަ#6Ӈ%Te rImGȻBqٹF 2N$⸰ɶKLY/E8lBɑOe8*<3̦i0Ki3H7&gv1k@$e&fB̊8rz%;@M+&ܦ@Fx'j<8T"W3$r$ڍ '"3c@l* 9@?[Ŋb|O ׄV=~-{C}{Q،c?il7rrgW/OZr&v 4ḙ'r=||#j^C&NÓf\!bt ) Nq'$66mּHkMu'4\ 8cb;7$RrK8 #Vv.QVxXZJ `9-:+w>'6݁@u-$&v/@2Aj"/}v҇>,BY[Cix2!cO} 1W?MGsC Ot& EHp֫{_y4Y^t"IB}YQ#K)#4c|%ڣt- +Krsx;C[s4>@+qiWyo߭]Ͻv\oDŽe )/=נqX%nN@{ Ɋ|$ndYy}Ə3e2&I\0?wxsةgbh̨7(}HQ0ؚvC@> ocEXlt.B#[ /ΑYLts W\߿"嶦^"aanWÓ,-\2!H'5 Ĵ8NWh+=#Bv: ]m'BzN3S2? Q*M*BDDcX&Kx`iP&5C*-] &bdvkjYkD+;I6.+bXG;\{+GH[u5Mao>g&쓆wSRʥ{0rNE%WCQ)3tpΰXUKČmlf+߆{Qܨfcav#!j{%;C UԨi^1Di L)Ċ 9[^2t~n6 gyCߤgs&JÓFHZm؈LЍȥJ!izf0?uѣhD Xk@<)qH~NT(/qn&-usS6qw'4LLMnĘoюٶww EntHP4F$/EP/JE0'WFhO"Ic; .oG0pdS=w'2rc&t͍*LVZK,Չ=+h|E*߈xᏪOfQvGu%D䔲ug9,o):5o蹊TybOOkmZA|q#w@ uJ?T-`QmG=/(z/  r~(k4"¡1zxj9d]!2%b[yT'˱gfdœVH]a{׈&(*9ZMl"25c,⇊Vej:{^슻<B?%y(1e󧡈ɤs,Z]JÔH3&Emy܋qQ<>≼<_ ݹ剁@x ɚeG %۞&B@^YlC}<)nm]q=Od{X{{N0y~*J%dC-N=5r׹yDqL6 ka-j/UȢ) Uv|'CjD< Ifb=NտW}=6Ĩp:)y?25&l.]1Z 1Ot7 ?I;lڼ[GvG05ﯰP>҃6E:~5C33)XĤ͸tL ) =4Xɍ/B6r!Mc2|4_^䴲wHy7ϰhB҄?GB}@OBi6sU+f 17y(l y)g wCv̕ԏ!W[U7>81װ曔\99\٫ zGb%` .J4y]ӅѲ]n>j4T<[fְs_:1i9G\an(MO3ٵc$ Bf.q՝8>==yLfIjoa=9"1j[vj@8^u\' )wHl.(L} +\QC90C^"'SJ {mqモuθ(B.DQY)0(#2#秹U.Ɍ\dmgGNd0\ݬQ9bgA|=nYŜt\vt\|aV&T/U"TnۥֵS@ (0?ah0aoچ%?4 ww.ӟ,RzWڂ3j}/'ø⩬Jo路DtЕ 45۳rp^Y NyWtEOo26;b%ϦeK2f )>ǿ}4f}(M: Z~hcKD%tQu$=e͘W^SV4~#qHaê$}~IHK[4x#^o5f#xV]Wݢ/Y e(6M$*(IK{ =_Yq#5( oug(qSbaV7z}_\Oi6w7sfR4ogq3qfE8@ol7VYqCN C-+t悱UIf mpd{v䦸=M6}{Ō<-Ll5"}<5FLd`SU7D\$t8k8t< [l̴Qdګm I f٘ ?q HIU'VjXW/@u=HPwgk5#cx_U><Ǧ9%",RGBlk-;S3#5tʵ`unU9gH1uyPu|T4:KtȖ<S23Z ⼏^z#3A7(-:5XwZVyn,qZ9ffպ7\:P:FU FЮݻM2;bC?%g)WA w2*:džSSgйM,h 1c x_^C "'$҆x`4#2qx\ezGtr@F,lT}*j%DißI* `}55AvS~^.Kޝͬ_" 5~_dy|p>7&RF(n@ClN$UbӞE3 7k;lk/,[_f>nߗ$Pq6 *|8f[5iUHjջ裖_MSKx#?;ig(+@8@v"uAXSD,IW߲Ɩ@J"J{芬.IgSkA o4 !RJ-,Nh";ҳc*1&- b; .VFFf|mK!xqaz꟮{̎hCp@I5b?:NIa9MF;o{ĴxpvË<`w}yFz^0+M9iv60F v91@qb02ȵBRLiKB ü9zY59bJp"}]NmV˲ `Oe~/g=wtuyDeqHS:%Mt&O֩L1_b)xBޭj*17ݬ&CdBfUe~@QF).n-S0x4TT1üe/"[4 vʲ.0uR 41BG12=m!UJO1줶ZQv&~]-jd4:Am9JR:b+ Pc'c,+7|SalD ӠTo ԧM~; _·3J )P9GLK&O"L5ݶ[ї#~lc(BEF 7#[8P}=j{9DGDGL W >;&L[6.u AѐUhdL0/X?dY\p[a'* 4dϊտ3%F+;a;n_ʮLˌ w iz0Ij]SZ-lchׅh2a ICz3Sz/+9?!5lubx 8aI@1`^C_w!]oŐ% b{>#2bL_.YBeڝiLRVܸpYoqb^xۃnX#b"MsU.Da{1lL{T)hSx Ӧ(,[I:nQo 4zST}K tzG29 IHnD!| 3ήҘېt<̱*7 0D]W%Kee/itLX)ֹ+?(J%aW"_ -&mM0,P0zB}nνUֺF*}EH ,k9>S,vBMf|с4ii L$zÕaYZcBcHpa䤣z\v?`4\=t:,0K6v`aba HO="j.-V Yod}?#gqߣ 1ɯˠ;' \im}~[TW cȕk8mD?S=,fIV5Xb'Vh9NDHl3HhQ >5Z[b'~ zOܗ'B4O>W+V%b?=MuD^eTL/m>(L4w7mIVN>Dz1^yY˨ʒ%nIE][v;{ej2 i͗}%ȸ\4@] 2j "\rױ! y6lvWjĕvUIwd{HOO& 5Je3IF/%'_ZDAZaQ;:hdK=7s(Ľ^'Iv-'GTpj} MQM_jY#4 DD[ɅIqQfegd}lӏ=:رq=0M8ą3(9PWK"*T^Ӿ2j qB*x^, :t !Ƒ메79i65VEa*B+Gjxs1i3{'mv OO%s3èjڨ}TЦVf~i<^5|E'̾/ 2?Y MhK#,닗FdI2Վd} E"H dLn,L"Q&YGpumZv-PgP)`XƂtqN}-;%`9<}6kibt;nU:.YS6ٗSʃ s„TK2 (ZsYvlF0 V%5cz`9k䵾ҊAQ ?=!~E%4X;zcɢNagڀch}zhwz+= .QQnNJݫ7I39Pf0%+YˢIyʻO~>LO.Bl-r5]ri-֜03N455~㢂 >@ 'qJ[4gtd;n,]rT@|lWW} X@T*նzPErk>܁6&AEP%Ɂa<6"G\;.į53 OQ煹hG:T*b=%~TF-Y/ ē}Eي*kvp#!,$ft|>R3%b @QdlkI"_( ꭧCsP$ih3Tq+D"!N-9KV*R NQ%җzzr=<0@>KjaꋢU[ܖnL':wo yҷwSe}{N6  I;jHBHep" AÕπ?T}ǻ^ XG:oq0fV ԄV&+̂&}JOxdZi<@]l| +oAΨNR~5AN >jZDfl8+*\=iJz>w H6%aUEIHctT٩gx̎""ik#OǵB67h:.fsvq >X|e|`-Ǻi> F L sd^i,oiQ#q-m*P)U7 x <5P [U ^Pp3]54v /,4U#7 Jhـrf تW]aEL7 QWh(䓻_QĽXLp奒/>fQJ2W9q&v%-'Ԕe`4x#X 3OʯnLQN\`5 wG nsg3 B›mTk{POfb_bdExKxB֣\bKXBޝ+s~:0}6(c(ބ"tVc"<| 3r$5O .J6ꓧO 8Emͱ`OTi7N*~L*Gp&XW\z.y_F4%bl)ί! ]`-ț,6K%.?(%H6+qw$Q)Wf5oz^> V e[~Raի*F FPjklܬkV[Ǽ_MzF]wr a&kQh0?٬N1UeeA6Bq,HVgUQ[KmG++Z4Y]Ka67-`:\"~ s_ϵeA.Ö7N֘U i~{ WF>Irm@7t(Y01Q3v3kD䁗(VM-u]) $nqQՀ& z(HZ>$pC7Mr쓨J"!$i15룘|#M2Z>>S@oc# gf-xrSH')£ n e5H)},7Hn{W8,⣕g |4R(ٔM0)#Z>Jmlڤ>:&ٺ}e9Q:ȇ33l>_7O0 N 6H.d6e!U|й1V#QɅhm0 1I AkNaIJ,tZ7X>ֳG̘-#`thNr)Qji5jG'$ΧItǓh R-J,}˪<6\䳂9{Y^=6 tJ?i9v2E̙h2Ҝ VB(RTc5o$,AYZ6L -̛IW껆A9~}\%/;WGl74Fo*JjNCJ6,֑V0ooƫLgD3GC^{*cO=fHn#72-ϖ=ځFkFkjDnN\;sS粇k:mx\6k5u6YSA}ƮuwSXyc:!1ӯZq( 1 oqj<rg@%nWnE5΃&}'_wjƺoB`Lo*lRQQ&^36*ׯ@nmEMj.yGad0HG20}!/Xu1ӗ@Wޕ=Q c t39$>0mHf,w fȥɜ*؎3JLՒ08G&<{=Ap!v_˒X$y4* Jcw>zvn&r[R NR^.h&5Y [vֿ=әe2YXÕG3.X.Q)ͻ [%,!Y@ĵHon6>A)nv&"E(%Hs!n}ۧh䐓S}2;sI/;~\!{Agq4]ISJ/>ovO$H#BswP]&V PO^+J/&bpPS(Vvi' |!FH\m!-5Ndސ6Yn[ ^o7 S%P]ڍ?]sd]C1T  ?{5Q :#*;Zu+Koń.BSVggns, uaxs@, ?u8-q{mC,FX$MDD>4927rHz82|At-dq{q;JwP)=<%wI]'`} h︋G,v< WDiGsij Ts['sf)BUD)RқW0L8ɕ0K‰Qz~7p=j<ͧ*7JpYfR>d @iQ Ѓ7&D8F /Itjbrm-#U஀ӟ=[=< s$=ki.J阁 rWp`зXS:d a}p=jnܧ&U Йi5 fdSKhD0ɋJ澿UL r+GF=~Ux[ȩl {S b$Be'۱O$Y^iko& &ake-7ƨ]+oVzira2"͗`$/27~c"*pˡE_@ǚ @[ kL0]ow &Is4Ad#stHۆoxTe"q‘i^4y^rJ2+$a3,ҒAc𱧨SI-8 Lj4SH3co}ͻ]ߺN!;#:r]9Q$HUx魪G4Js<θRE0YGZi])WBs]xkea wa  2$W\W#6*)]!_] e.@jϩe0bCE 3p|2!PJ 7LnwkgZ62"^$&%.Lq fV-2ݐ ,Țjoٹ\)a(Mo#úYgyHq6zxa9t$$G'I'4aS\A0+hOAV:/ ћ(om߄ۑ393Y p&‘dD"!q$WIh,ŵIe-r HQ:1\7Ep5!V)Qwˈ!@ fraqMt\?NL X{[l $A,S.J׏rf@Oɠ(}vKOvZd!Xbғo#hД)ykZO^{]eh\+K#YP6]fo%stSoEšyjg>~WOVwy(4B^W i8HQNGM3w.&$P}pc+bX#.-DF ,&pER M U63_~C]\8g{1(`:1hLrzwL K<|D%ch%ՁwVʚhrf#CiKt(VƝXxK/,T' CLC,`"*`50(_j(QzT$0#cj_Ղ5ȩ${etY%,`S#N<{KĎ'O $j\@=T#H]q{,z?$x@4 .ai!YT  |r r@j""#BHz+/B8Oxkl+r_ ugtnUND p+j0U[W0ƣ\b3^RnW| C|0dE4|13OJWl{ <Ƿh%+  ]+,@[%0ʹ=LuPSWAO i˦.>4"[N,2۠GJ~ Ey[߲Ǯ U1JShN=A@ ߂1)6#;,1eAvq mhuJQ) UVjSe RjcZGqm@z:n>v2@a X,VYShh-g G OXƔ*eA5'P ovտ ~C+2GyQ'2 JUh>3}qN~ C (҄w4=1QhRRK3boߝ@Qvw'䊢m[-oƠ>Yܜɘ&V7x@>\l-WD t𞹏 Q)UOiI|U$|jE$NG; -3R𿑗ǽ]>"Y;Ï@϶s"C$̸!ωzM7S)[8h:{6Hp7(z&|,]m(,:ՉBɡYJnYd %ɧ7~8,br>Ӣ_Kbͻbgr;70 sܼy0a?;qP%ܿSͫ&^HC"[FƬfl@u7=A5R1Ja̶h1g\;i〾&b[ePiMpGfY9n8"!Unjzvf{ ,[UM~{>l%{қȲ(* z !&y<:2_)boB /KgQq–s$G(zȁ/Zp4]1Qrjy?"љ$rZ6aqUq/e2lF6϶ds2Ԝdn[*;~,:`>yyJ]c2{/NEfoU7mb\XrWu)#>>Wr1~1;YC1#g71zUcw>TMS(4DAu[3l/*.K)T=AB8Mn.GK/L@+1gz.-+Oӳc1 Ie;z(IQzF#/UW)A|i:)+?p =28GKҼ~i)sc- φN!憤Oa/ŐFG0y4.n<6_;M P7Үjl%!SA/tkܝX^M>'MDqp`+G +]W) !{>ԀZη؉ wHJf?-mm)q+;]P1(G/f,pDĈ"k OD#ֳ%~>,HY[6uQ g+_^?ȔTTR tnE~ N8f&tDOLV|7?$Y\'mu[/zL"(HY WkX=xWoWWd}~J}"~G#ټ5JŬtYp$?V -B`r7ڊ TM[&@r݀sR,q#}O!Vek :^şد,o+4UDo8'Hf0Of^J ^JҼI#5% _k^OǫX݃$+!GٰbK'~x)zlI-Hɠ9fٓɛJDZ6ḟIR{0AD~C@v` 5.a6]nj,ţ'a?<^c 䙮%J8P~叧ha>x3DHy T^f]L'qhvyCq>`bX:p[Odi'H2sS~%&t1]`Q1_q|`\@<:pO[%i*v'6 sHo"8GdI 98gWO}.} yMt: ylrg#Ȟ^`zI6tO}x}a#<- cWtg#vx sS! =ZFL1IK!OR.7]{w)k)´J8ϴdъ0 m`;]5Gg+vo>#8)-\yiǪ:m2Rݓpbu zu=r~ tg7(oL{p Nh; 1S٤!FcQ24 |" Ѭ]¿DCYpyTO`{ucefaR{XM@?8z )q<ے|"SiR5hM "IdhX0STuNN3jF)}*tkK?t,P,gD`wC֡ ZyS6۩?uCS'ŸEh?@r7nL2x`8GUq'K7e<-h_D?6C>ʸfN ,G=ȳkKI&-.aUP$ `ޝ(%ubp Wgg4~']ُzH"'?]gQ}rTs\^9dBuhQ0qll_-70l⽓}ynfStZ5C>%=܍80_ %J4F#0ٷ&L.!w%޵Q1DVh@CfyZVli% i(Smq*5Lj"Uknf"\!t4V'E;sF]&`.hңDH| k25L -σ eE}RHw*mLq 'd˅0i}2C6Rڲԛj+4 )[μ^t"Dw܇mhqo֋&[Q%'&H%M0Ta:z6c%O%9@?X c)*r ݵ)41 K~my3h!+[?X,iφb'1X-A}v1 (׿8qmĿUXÄB܁Yibm>F*A?9u0[!֢Ë=M>#1 upɛu(RIJu0tXoj2w.V2؍f`v'/HApKLq}1Jx+FN\cֆ1.CQP Uן3;FHK|;lEW͆.ł[Ex 06{@ǧm  Js!uHZbXcS="`?' ȕU|i)l1_`XsDP-y(ԛxl}XZ{瘌jH?X;JVs6K:n 8uUS$lJYY:.rZzK%lދa[4ڛTT1CQ=D(:XNKC@(pƽ>ZӣA2IP9|o̖=A,Vʮt#v4^Wne[#`bƐ 5!_Gȏ8nq͞yPLbUVuϸ(6u'+z7D(ռ չ%(ixטڲks*-ʋ'qRklR@ ;, `H7jWIGf1ՋOpI>8D_eNį%+.{ds4cf)k&Jd ' 5U&[W /{yR\aA ZL14e A$b9~Zbɭ_oo3ǜlDoW,>F%JW%hPR:LIAU0MPS,~kDlG׻p!tsIot/1d7cX\)_,p#!m^,ghKK q*Z&i&%Q  ieHLMR yՅO=XAKml=ȋw_24!D=v?ԟPMG,^;=OLibgҵHan qɄYo=}a$6!-z²tiK-_$y|#ywy]蓸`KdQC,+c3J;slGwbz+S”bqId,C.ǚ,ɢN nba@|oU:+!) vR& 5ZONr7HmieI:$B) PHx12B_cS*W];kz3X }v(79~L*J$>i9 5=Ĉ,n~?NzlYL቉#'!pQds{ OP^2pm@9+:9,@EOi RNF7p}.L vTє;*S#dl|}Ԙ߁zߢoC6uN8@[ }%'ɕ&ha %UETk'{MXt [aN:Fd:23qhF(E/p+04gƢ>[cM1Е݀ 9ǟ]cJ(=h7=$0' OӮ鋤t\).5AtE}wQw`т r'p?ξ|JO\Yl9 L;lc~"5vș#׳SKiۭ;-nƹ_:e[]EP@*Ysm-5,*GX R# wXvQṭ_-HXWoM,Xy:PK6ҳ+_{PVP?>gJ۬Cd֡Qi7@h[\ Dh!\_%@S,&ǥD?tV-a1oOAʇ+ܬD(=X4BE)Mvqd5Kmưk̷1优 r~;۶HÇ8|FdollV8Qԁ\DOWINȟM %ܭ)[~Tn$ӄʸ=O n9`C~M:< J)~I"aXmU]502xۙSķ,QՐvw$H-.H/QGֳ^T){ZKUrw^7*V AʹW5;c9nIp[`(6̧Mu\ @A ^7_*Dz#c?6qxh̰R-v*YF{?WR9p.mtC%B[ZjYӢB˫Y">LX# y F/xUqEj熪dBkg!.mr۹+_|ٓ 3֧)SA(zoRFʍ`e.QԳǶYF*EOr&5*R`%kT=ZAUvou}@= "+(g^p66fˢ&vmW37xN? UO8>,cV.erks֭$iҼ( \Tp!ul_#'m-v6b A0R'_]]ݷf_mq3Z{gpHהW &tf``:^Κ*&gD,dT@,unVQAҢiGѠ2Q9^7wF[>t uxU 2F|jQ㊔fLm-.M\g dWR[:rJFVYEwoO06!xӶ,~ɞ)M>1#HۊPᱝ@8l;TO渡,Q]AD*@u@@xLMes]K YHF"aVkqBfC֥ \!2[ 9EЍ["ф ,&3E:6 g&Kndұn\LVݹ9b jt%H"k5ʴR-GOy-=ՔA]X6R <ġN%fPbbYE:hJ'#L?S:DS3>+u"*4 SZ'^,H8E6 1X>,c%.yU<ä8۵8FYO )Fr$oČ a!߮!:O05CB2 Oڶ /?Z %pc%gFM<:&=|G v\W^I8 m]$׀*nhxa CIӼ+*>vYF s1eߤ)R&C,F^k~Sy.$TK]+~fHI2hekjc[Tjkb^#'#Ȕ3JYzZC5yrWsi*1$$Bmx#,D6icMj o^I#㇨PVyTr9z lh\ Ys8+[QA.S&$xYh)w}9piH40F(5|v땩gӡCY8lJϏsE\OVp8vt,"15еeiqGހ߾L8#9[}꾥]/fCᶑ.Ӓ"%^?oc8+d0%ȩ i ph Ă A_!Y2"hS /QݶaHv>!<ԘbYX=\ҢFP t3G)v}QTԠ%FP(b&\W.]8]H` ֶgh!Y A0.ӗuzt &^ M8^]Q kWƦ(=Qݑ!h h?Y?H6aD8'wODSj>PfX1lE\jjawۀ3hg0| ӰcCܜ%]*2X5EJ|_2?<g@bXvqއF{bʬ4Ur*0^@ 2RUl7/q!6=̲0p7ǚ vRXQ (.C~HC&zn!V x=CAaoT6Ԟą іqK&W&!!I^NQJ*ǿ+3NM`&-6p$Cnok&kfx`tI.yYi}3T# ǟp2`" ^r=!9:خ5V#f3}~$ gq-67Ht%6@qfO:#j͍b*+>x -~I$Jt+("2vLxh9YecD Kry@p ]2]u[LRZ)X5}8v 4πjhXc`31NɩK{//gk6sdyJMPZ  UI_Ez2j(wrt}s,:!>MG#p,76lU[{c '#w`7ri } +W )c#KmO*PmhƏe+EiE l:e 4 ^DeoQڱ]>FhUq4J DG- <\׷B"^,#<0I( +VLV`Ǔ4},x$qPˆ܆ݾ 1TW 5i0U}@@! fCO E4NGg4,f%pcI!q"޷ho0n \&]eXIyYztQI8OFrYĦ1[U3(=ȄD6w \14ɓYN uش=Ms#bم' j뽣 0ZLPd@VIٴgXuٺTfaN̍=L~4c3X1"6fƭ>aKCԔ9 4]Dx⡖29w#''DSO"yC4iS$¶FciNLʹKycy(qQ쏧K xaM1KMeK(Noptj?Pad}6#v}zȆ9/\?hw>B=2䎚iR5hGEI :V9_FE [dApM ,fk'TH5??.#҂mQ>;~1_%w:<VRdۑ;a'kՕ>gl[W]8NWTqtnZZvËۍc\OW95ֲBx T'.LJŒmsUO1N40Q5WjP:-*r9tVy^JE愘/lyt͛\*φU8o-sYwgQX[ _sږ֗}9ޱ^s$knQB-61Ć#1,c6:h68Y'n}U~*_s2Gl[VYݎ(d {L,`L8L1|R6ϦVF@ i.D2zNN889\Uv%VS LKe*r̠Ç˼9m1g6: o!`I l%VeoɶQG | MJb8M>ves X|Ls0?-⅙CbzPh}-ҽ7<čc'P7քRulD86zca۩$DQ`O&}1^GT #hڐke۔|6)|wr,;( Di|L[>p0fYz9?h~kl;jh[7l6*A`hVĢoUӸ@- ܆FvDaM _,Q4_}tuˑ @*æ曶xG.Ɵ5gltԯK۷ M'%:_?M"HYH)29lvoͩn xѩ5WA큙bW5A2`]t<)b=MiVӧR2qdww*|}I\̭Iw)qfʠN0QRx02WrKƑ6\L*?+;XQD!J9};yKAFB« HTDkǔ`71#H.ߧ C \8tz0G>*E`?lZ(x`RԹ2Bn"!R~l!Xso_Z *u-ce)# 4׸fc8B2\Vk$.8]>SAn,5{a 7!!Nl0G{8 sJ~* _NW]U'?$6cԱ0tqב˯w\ Y#q~O:93'ՊIςB"|d|ź8cSjR SkB -]i>T)`,_>)=-`@6+uCF4~\-D?m*W/ʃm}qq/ EfJF޺XQgLF>b'*\$)ښ}vƬ#^sqgQn]$ii3kf"ddAN|66JmZ;qԵ$4,f@P5jZw~Y#=%LܜTb"ߓ[!5@k0-b&TAޜ%Ek蕤ڜ 2}D$\9hsd 5vT[B럛 rg˻zWT @x0t gg!mZlqd/0 ޗU++GY9R4l;m1 @~*q Bn YfH4Gcܸ}W1I-DmBD~l/e(l?C!?rhk~ (^;.Ǒkw 0 %$2ϧS‰l gfu-_7q{dwUmeDyeeDgeq. 2>{E"$Ji:w{k'#d < Le"nIE HthwxВ*ΚGbsh~Z;so,3w0YuE(e—sAn{gMNN4S!ȩd0 sbRw ȑU/§LA\əGE~ &w{l(Blr_z+1~ʝhW C}>,F0;EvU>L,,BZ};hH5Ѕҙ&8ӈ֕4'A-Ѭ: ͊)|lD<Ee291̀_Ῐ]|⼍C\R<j zI`Y~}K\&|yH0!%vTPV&^S @"F3yYMzH5|NH̾ S .i($n*enBͤ8GMͳY͓T,)ElMNh6 y%PDrZro {!Tč\G4@ 7IrL,F[&EcB),3 &A֯7-.-U<"PLU*.x_nlzP|~?DA}3td|(a9oFߊlU.f6W 〻bf?r[ń*2[[jG ӫWgcq94=S]1 #%hHD\dfhɮrW3\hYNg0AtnA&_U@8އ6Z^{*06@MdZ"59 lC|t n|?C 9Zbw.eބ␚7JM4p FGΆFD7gy#V6-w>~QeP}hJ|OQcԠkgDy.CpJuI.fLiC!o&Yn\ZA TCUN.5m11q֎fG2Xd5xkNddmF9x?^ _T阂5_ :.Ҩ[~ ˲/-c&Iհ~RZ4sAmRjA>TUSB[W]-pT>7Q2ӆ Op"6-DY0[KTTq. *>iYsPE]㸖v0|eJe#0ҥR#w`9@icAZhn][*KT"Sp;t[#:/rݿ\q-dsM#'_E ChlO>)Tz\1H|\[ZPADLK'sJ21ՙ̮L%+@)v›0cRP$@Ou{Hݹ<,vA 1+m{ZE^yp )q? R|žFEzϊ̌ƅy-ow1E}{D7!Z{h?ANǵLѢmVZE IqxL|jlAI bF5t([[ B@֍9Af4.ZT @GHOyyoӎ襾9aDGi$ӛ&{0w+NQmAT(.~:]S:Cd |>-nhbN\c=H8Qx:smi9$ {YC,DE5?dV?{”¾"Re7Svuٖ)tIqƖ; Ţ&%} պDA 0xeL ``z]Z&~D\)]a^WJiG]Rg7oo[Y߾p}լz#DO8 Mb]5_G"TM:]Q=¥6!!eW,8Ot Xtt}eų wU1<4ݢ]7Ęi8FEcY,}AR[f@.⬑Ʋ],ڹlb2WT'd. _qw0?Lx=ky'/"3ĩ&] ϕy:Q˲ ~_Cb{TQqзVbӻO<] `;~"#vH)|~ nɇw 㰉|c-2P36OaYytɫ\cp TI[3S|bWHnkѠ6Zykva~7PJt^M/J 5˵(#vs It/G)?VBCHVX(O}𢝖L aٯ82TgaKh^ ܅e{gv֌.Z~Q̸k5_F;G؋@Є+cK\(;%FaZFL:ȑd8Q7^@_}?Їoh F t}`=B;>VMZg72u.܆ڗq# blb $w["cX\P]Yfg!uS'w0fuJiG>EB}6MROzD?EI4\X(B瞚V\ɊYISrpbb FP`^ޑynlϑ&rx\WG(;ĩbo|/Χ'S/`ԊnSe*&8$]K䅟 x Ҙ?%rւ;'9@[N % ؓə ߄aOIt>ۤ#}FXn23Z*>]ʐRzI!D}S ժ0:CToF+S!U>&FQCe3 Q]_V*Bdx<Nҥڎpd34XY=\樇 .oL_+/BxF5[J5^7+|?H- ڸ!]3gy#yoOUVNߓ9Kahhe[Er@pzjZCIg?;v{K(v2V7/pG f>}mꢵUkLޥl8OrSf5Bye"أ5nWGg@6% tMmA@R˻ v;@Z;,KIRE*M` UJV[/\ 8y᳴H/1s`m2\;|=_!ݘoPy$-8^˗ 5)+G졜6 濊睄F lQt%/א d Xwn֠G3|%ߖ-歝L$WC=I󪄱V7HMxDQC9 &OշsZv9zxyA沱T5 #۷o!_9dI' 4R_,% $OƦB%ąSˑ|?"X"n*nxa;T8gǼ~ĸbtZ/wX*T4ËRTh^fȞAam;Q"ܗ̄T,,lD-7J%j%T>i1>zίC^5z{8~SyDAȸOapZ_Rjz&iDgBb_˯Mb['A# (m޳ <{ɚ5N) H\$-_烾Lr]S=Ķƞ+~;^t|x {9`I*voS_7PR؄Kh(yU!7jHPR >8cbF?h|ḴYY=EM.,vR/6P7>pwmoܴJ9u)H˩f]F_ ZuDGh[Aao3O1}fjDmk| ?R} `AU= twoZ[OV{J |@b $gT:d:!pCZhb~sv^p2qLu ZDeqJR<5-+f-ZE>wp I,0P놻UA- ZOqL cyiZ<] .[2KaOx6|KqEv*k ʝ* ~dؕλKWMw (NvOx)yNf="n:y*:ɖp3E*WSo/V:TXQ\uQ|Ed#}]Q s΄(g^k Д 5k's*VA0=d(Tn&8LFٚ<tX|JU;Hhis޳sr=E=[:nt3wN Մ8imBdzH~&"I5smGOh[/єVdk@QoTI]qE/0qW;aN隶ɐ,% >Y זɄ[֊V?81i!\ѕv +DMڀA4ҜJ8R4[`ŞDn jB$?> 4KBLxٹ$5wIdmeʭ5)}c(b hEY 4vܭ0 ŀ~Vkǹ},.d^PXqZ+G{LQLyx ,V"eX| [Gq_8isevaְ@f&( 백"O7D_doa;uAPl ~Z׶@X5L7u/P0ȋ􇴼bZ8L"Mm_jo_boAȏujP/44ȣLμH& K/"'`Q%S@s/y?cvAǰk:P|t0n$e JtGP mSeUNߠB=4撹Ćb&5X a6 V 浽IlQKC=LB*idaT:83Pb]R"T!oc'4eAŕyTØV.yEIC RsAr-2xN&daV*hx#a}2T3꼋ܿ0hY[(! 0%>#zr}Xپ%2[ 战:rR`b^ 7\Xf(Z3C}HcPFѯx sfodÿKD,7rPGJ LZZ0>,@- "fd)¸-5O2KPE>$/q WĦ`8j5UiI)kY},su=TwIy&WA%S=2m$l0CZ$*\.l.:J~􇢆Bz!OQ_ZH ["7zޗFq@R=gL"pc:[\pzz#D45N̨t5PvTd;T_#T3^v2^zR%9l[O3ܒ1rGsw`aG$ބBL*}B})VZ^o=Yu%`Tқ.>T qss`3$܋‚  tYB/k| \`:xmpQ?kVmݗ5 شKX%UTNE':w `2*_r{D\^GN 82z_cQƐ=qs"ΤK3hOC~M"3=4_)2pwJ@H'|sl|3H^Z4.67Is9y^u"k f_l.9rsk}4>ыW W4VWw*H4~ramÖqjCBZ"gf. v F3hbW2,*x!`,k/˒kLgLE۝N+LM[bukl-~S+,΄mչS[ Dڬ! 坕g0sm6W-r%ݑgH\^EGDV0V߇lG,<.-:?1ǮoXNoM9b"r++8C@-tݪ$q h?$.MA>՟V6%Pъ Mt#gfZOH¶O-k2!'%.O1D.;n0KVZsdҌ7A8u| };)mL. OXØBl0Ѣ\Tm=l%AÄJwaidĔs ]չWQp]gx9{vx37gzGyb/ߥR ضG03}DZmSѩD{A G-4>A6PeU;[O%~7{s,kqлfXLE!_k*U j"މ{KWlsVGI[y<3 ͸P:a5)5~aR* A_Ƥ9~@vpjdw`QWt>ƒ.1zer5#,}V\|l&y!;֩ٳgM-ơ.jx̏TK !P|14suƮW~(a?JGG}bCܰ/gs!^jhJt%vl>:-lHkrFxۼĦq2675}:O Ya^ VUv.QV:@tey }m2UVup=5D|S\:xf.?~[O@ D{~pUVLOuԎ dߥbC:&K[!:u>At ?tE*8 :kZЕ#<@Ѣ3W(_*x䑶&JcZowom^?jxpn;]V"M@"Pb`5 K8K^D*hI){$mD!UjقwZ 8DYq]Ba.L L{?cuӁQV 갢JXRH~f*US~B js2Q (F: q Pk[,zA̞ѕK  96(y i?|d|Yh+6xv`~TWgRy &sy( A 'dOuIAz&vnnU+ҶGRo+\T(vCn5L 4"j8Mg ߛDt4]sOt$NG +&Ĵ`C H7*E%sf:wE"{24zg7 ظ:qz"v e6P%3նGUUrLJP:;z:-IDEx@Hp:/ҔW}Cz:)GֆF0k4}蛿c'M]9]'-ז-ѧ'S<`wօVw;[^͏7{WH&צoIs1ՌÈE> X- g=@;5Z̙6# 랴h<:#>'5lh&3ܖSHu@ne |{]>oc ʗ=ɷ;ȬC.v[ ^9MqptGhmW# `6`ۋ`fѮR6t_ٛ֜os EzKŒ?4y|9d#)h1UXuzpK@yLۺu$c8Da~1|bT|p[M8O4zsܴkPEq::utXz 9ό-~hxm܆3gyWLlQ* Mx-_E~Ga,? Pūcvoc/ZYG%%"DovfpX;dYûߚcf,CZJ-I+䟰)9ʷsjjtfk4E5X<f };o7m#J+R,PCCrY$$IG%fkω=y$3vQsCOK2%%O.G_5 `@SnOƈJŋ 5A"hɰdǗۿ">qKrKv5Nͧ6T`fiӿ%7uEV?2!l4$--.{9T#q^:VbP/xD L]p  Hunz7{n..?Qѐe~jaß3^hW=Ưd|'s ='`J& R?USr\<G):rh֋ȯOq-|3Q:̯yIQR60ߑ%e,#\%m`$Zp|Gr@OQN?"' c < hڮPO.qP0uH>8dnF~G@ԋÆ]nIT)oQj{1K;s\GCw߈ar5?:cwJX+ fѺNA5Uzm˛p1Ql ƧY/aЄ">p~*y/oU Ara. E{3?,N%\;kRQ Ej!$.OEڹ0,}~Dh×!PWM?&Pi,`Ɠz`Bwf~EÉҶ`>d`W̝њZ.GߤXtai|ɋjM5)|gg~+ab" '6UҰ!կ;dHi̷ʒme #+a|$?`S޼(m%5甸Ydq2Q1K~HF( y7Yu8bt&mr7)"^8’6,Rv* gyݭ3h@%:\ Q&àVsaG_!q<!1!o@Y-su$#oC|dN<{'V|Ǝ35az7ݹ=h@"ӰC#cJ[vlZn:4͕yת؝8R8y/Z@S)W$ R!vC>RqeIWO?b;ez j>F*Wy|Tu5f9:8îH̄~)آBbXQ췡Sdk&J?r)MaA 6[ȑ Ԉ2.EUG3Ӟ8d? (.oXOjW֮cD' & rZ-E)>yKtl{՛aKl1uJXdX>csT$G3 vj{Rԟv(wE J!mS&Ba ܤS ay1Hk@vt 6&KTNn5nzmɂPVcy3Y1^CYI v*Hj gY:5չJ]/Zh]HֺnTVN)ZK~c҉7I\pD~zJ\(ҁc`qFgJD{Ɇf<WfcA׆Js*OnK\?&Ŕ9q:GVszGz`k}JY@%m+AHA2I[G۩!)[QxoXMeX`'.q'-N)$:`U,~e8JfبkZgqKt o` +Y\T$iOtFmL01wE0 xZ2dsɫ(9r""V/f)f0u}Jv3Jy+nL(o-zymXW= MFG3l1 o1wyl.}`UPwORq7v sBCd#vsKƂ.a'X5cװm/A +tEɎ,HE5]6qʇH2{B͍nLAXgxѭ%5T"YfQG)Mf˘!ϊ BU e}GaQO/#QQ狨 ؆Oy,$)~{ h'[VB[u~}__s茄 P|&kEiԽ@<::4ySrqx|/ZH8FeB#Kfa/8x #{LIBY/B|뺓ص`6y~(-7\b<kgTNN#W\MZ #;>& ŭurLp΁.j;rps$+!29=8 ׋RBS'kJqabPV7 ?h6DĿ%uǮ}Q|(hѠaq|j={,Gal̄n%b`Y"kEϯ@p}+(EUb{;o\!5wI@y ; I Q +U9J>DZJ֑h;i6Y 2Uhio+-+Ye~'Ql wQmyaCkJ}wxAC;BGgbR} 7=QPDj1Ѣi{|xV=J/_9Yʮ#dĘc1GZt7_NmBֳCSp {p)h~WvR"*55Q,w!]`%5LKgm҅b@]g2g|ncXܶ0?Hh; C*&|k3r ł5 4{(Wl_yI'"X*F;8K0ڗFZ.Jt_(_v~_54B$A͝9!GR|`t+[sZ'"1//PЬ  x.]ǟTDhFE͌إA80KCR=v<Ƚf#g2yi5T6PV4 G: VɁu&baVRH"mbV8;~$"ͼJU].`-Rbcڻ!y,K.w7)k\Cϒ1x,'F$`Ꞩ =jFSye|,-(8iݒumQl5͎Awq}4CkLN@ݏMiB !>u\dTŤܐG{Gv}+jE>?5Jv!S!Bom*<LCO:Dgl I1? R'&*S캁d,>iX^Ԭ)fj*  *hAPda4{/RpNըPPc'<ij T=MX0:Hs?k_Ͻ}*SXcW;}eՕA hv,ZYQG$铵{Fo5BZ<ϲΊi T:^ #Lf'hy1n6Ad(C6#O]$нB x\@4$km?34&٨F:\rfD_dak!OKPxs5 &Ulf7Y'Ȏy[+D]) +!s5Be4n!jaB"\/h‚ VgC'k6ERgOPmJ.J(XD>(G>a61A:P#I˴@c +2ADb,Lu{?'+`ڡ24/jF %k/LB0^"RpQ+ [G*$vK(QN? >Å_ҊadvtKM; AţcN_8! ~$K D3U'cSQVL%w!E7B,~̒iK':!UG3c(YGWȆo{.;SOHF1 x~a[HZjlfA*~=IXcs ގuI;:IrǪ=E܊Y!8@$jSi2( 7ÝSf8iYʜ/N#! 5#DppY[}RՍZ3;g!bx~҇O97DOX0UcByFwe]|[}P U-lPq6%HLjN,kY^x7uZf6k<?)"rxa\؞p" Vh_?ԗ:R>ڽ euʣV-`Y;12DDvb/p K$,~5h @Kn.3 C7g_D2n5~#A PDٔ!m"ڋ5jۊe(Wʳ 4 /M)λK f gsc'd(2Ҥm;B aߞ -}$$գJn\Nn7FxM)ݞ,cãU;[J-x?%umXv Uܔ]Cnq8כS$`5CUJN]Xk/;SW{^sX0Y+ ׮}ɯ\afn`p 0x[[}FL{ WxmhEkmLi0_B8_&4{=FqI۫@Cw9k*q320A.v)\Jܸ}y6G9a$.)#>$p<[S+Wiv}4 zUhGRx]>i$.PxVI!)lrF*n){JN1j^X4(޼UbXf?23 yrD|Emg=_y`3lxAee|g5Za8omkrzZsnuf,RVs MhM RRqa5!T&=wGxͷ{O0-qeY,u "pJ8Q.1́h< 8y=cʉ}ZEyO'= Ήe8^iֵԖdF>Z'^c͇!(DkEQ7~$_cØ{΅,4GI~#nDԤ2Yt=7R&KJ].OC Η+ >H[qc6عgU@x@1jlQ!WF1\%|}(+m=_wTzpH"Mҷ#^3ce[ND`8ՠZ:Rg|~L 93Nԅ-mP zd{S~1,4(z_krG*T&r> +/ 4A?r4NA)"+h'fu$Vg 2`ZcսK"M@+O(Z2۲WqEX%/DZڛ[z8<̒[*2a`$Px'^BW #_c55j6q]x9R(2P/IH?w6yHB7!kMO6;fE? JZɽӣ LR4<ӮMB!uJ7ZZ`݋ꥮƟs!6]`'>'%.?9gO@qإ8h> MFyAJBM;. 版%w\b9( cz>5UsƣSלM{'i24 Ro l[0"G2\Irsm5\-VstJ`r):oAGS1bq`PQB(ӵ-~H5~X@OH] L`o>Ɖ Y\I^& IsVfs5*ȁET?UcDXDCcև픠M\.{4W/'\R#)|i6W֕;'Vo Ŷ$%bHLJz껬6ϓLi~Lj"9#h]J9 8,!^=[Q'ɓC@CK޼+(kh8~ϲ@h#m gvݙ]iQA`79rL<}t C9h]El܁;Ѩ= v=gM0ձ6"# @6+^IO0Qjz{Bޕg@sg=L,b9p)i!iY^MZ^|k)`^DMJA!Ж;.&I'ܯ`:,;ͺ+# .DNdV}PQ.09w9{{8kܧqx@$@ptRvAһCЁM08Dg qsYХL$E;xX3tZJtӎ m,eæ6WAiy pfssT% οrޢwɼ-r_&_&ks+@ $Ԑ>11f/%hO})o[>qph0]rL(K{ :(㎘#u;~⥻+;vPS+cVDet(.y#IAH:JN ]DL+@Σ mpT}O[΂ʭS:\UBV2_A>h0(H _KDl*M9&_4x*ˏ3G+т'0qR>?i;ФHS3F<u/^J^&|~AvOj(`¶{L:.Y<[8"S,5쿥HbU <4)ը':+Pt O$<_dD~WD5( -]3Z(1w?p;oL7t:FzCXQCEpgEG]T&כR?^EW>4?W8j{?tg/)\ M&$H'np~$/ %G)XqlI^8W1K6`'ȥq/6DfF :C5Ug= H0ǒlӇb!IOiأT̺NsS)fdq3`gWNReDgcfց7k߮|;BD6vgub.zE:vZ>vRdL\tYs^cUl-gJ?d -XC+fb)kc( 7 C⁣AWI<`Ut\ȯ* f)r%m(ͼʍvl.*bQ˸>y67)M ǼqCǨ $h)@dhz.ԙ`K{Ji` (aq#5$f给d7J0hԹgZ"iԶ˜I}yW spXP͎*|'H/zvFjCSUK4| E ;KT9 =(n+G~h7i\|t/$B.O_ҹ}_f~ 03gEIG;2m,YKZږGxP~F!6^y'&X N;az%3%Z:(G_IIչ/A4Tл[Z*}[|1ncG..(=WU_㬢W0+qRs,!V$$=R?S?'%Vߍ%ub#y詎1س1) )sB< c) i`J«|zPS66?a8D;^x7ΙQ*%JPv6GH˴$YYΫ8u`D xGLLm22-fR->tD+$w $ *nG#0k{?%|ϖӖ93p(.f7xK-Q/.{|޽nnbO BH>l|8뵬N{?*unK_r/.QE\I_D<ف76s*%Z6\ ؏qTO-t[Fd€ԊԇKwGvQ6 %,@?C>j1J+[*l sOIhB嘔aW1)(nZAwmG 7*s7pHWZjvMKńh UJr'"dq}eG!9JQvjxꭰG(ɾ6)c15ޓWuROb M|҉^:逎#TFrZ>]75cWC:эL˦Ð'xadQ؉CPU̦DB 6@ /w&mmvÈ;9txλcAHv\+t13,m^ 9ʃNS= {aڃ-՛?Ͼ<:e !0rcPeΗ)bɦoڈMC-x٢Zy.K; FeAa`/qEzNJek"2NtB~i?lOz^ f3Qg gV"xT1.-6Roqi;#S(;=7Z2{c(ҫݡ12+mt=N Ɠ4Tp$bmIWǜB+N1t:ƐGPp/=e{Jw* rG:EB޷ޫe_B1JUe0M)Oبop Os]A! MG+%Hq8ԤԶXf[smɻ| o WŇ/>_[*+ȏ7xgv?.xI֚C.CrNT10ӊW:I $6I>SlDnʭr获nwdn{t[$60NA:K` ιZ,%l }5ĔA =6P ,ivvZSo%%ek4٢D9J>oˎ33XxjCĎo&;Gh J.CMypgQbr!\m+)zO@B2vJK_<9 pw;[Ęiim^U,G?&\ fԢ,4 2ZD᧜Ka%׾wړTgrٙI ȃnl^c_vj~8\;-~Hlg@[a#DGB{CBo3Q1x+ޡMQQ@zku.AmHiU K\j?n Yag͊F߀2uR- ?A &cmv_UOikW'Ó_JRAΐxH=SP`㧣yG^q}y\Gi"/?|˶^᳤'܌!eo~P2DFV$ux/{ޘe=ɺ[080Cox ޙM?v;D|6>Q(+-Ag%=m2QWb̀f|%%98o"ϲÏ+WǞhH A:9 5$\̯+ ]h`D@4_W^GP%_?s(=ߢO>#hn7ǵ$+!0R(8y)a|;V3ӔDU33 iԳVH2tr:/j *y/ v3\ A1EZyyXX:#C%e]`T znj \{4B:&:Щbjc<6'QCF[`ׂ?;!08U yvU+g۪B`k1gܭ3p+W2eC ~ ^7̔(5ffA㚜xMė42?3F2hy8Q  cRQ\*Mou2m]Ƹ*@#GfAqg59Ūjȍ}CBœMaWq|$ud]yauǦZl_*-y$;j]JAbϞN5JԲ rӜ|Z5?YGߣOK Y 4oe<%*'>%Jk>oe$+^媡E=ƛKH_bSCk7;+{@Ue9&9Y1XDЄ] L,5Tt(0ۺZ΁VM1IttVy֯S^Bgi`*u(RwC+ Cܯez/b%2%" I?˟/XwsY}wЯkzgtVw dAg;Mxߩ0$մbz6K3s爳 PK~챉nCelnfťm;I0# '$ͬSJ@hT61ŎlD"*'*k^QKh0s^mB2kāKhbSEZML/@CnGJDla5h}D6N }^)vm )+z/+SXsxʂn:uL X ȅE#0%9͢(&BGvrj,{^QD^?{IԪT_Ҝzy\JCǔ%YCTm?lr=t*ĩӬ,F++U"hLuXWPc4M"7[,;3Q,pgicb $B:L8_5GTT?u.ϵUS0.UTJ-RGrXwbWk,&f>X:=f&d<@r̹Q{sgۻllBa zK ;Sp<&- e#)!Lhc%g4q*g^OST'/Md\%g0aC| dH,U. @`} m3aMv>+Tftt{H8x$_iĞBШF .;wga]=ZcdmS+ȃ}7=wPƬ7WM*~9btϝ2[l>V9z͹ T`)b#n{kZjɵ\-^ћZk"rft5dYThvz e_Fn|W_]9FSI剠FextBi 2$f /Ibeʕ0їMWS8y鯶+% ]\6rḡ(^?@ Db/&XΆef&BY0ǀߴ yy%W^v`Ay,S ο%34Ђ:-rv22{95od6@rv{rN,!(gn3_:FH{] O?ʕA+E!$q9sU¤XvaF8ե~Q?"EWB׎w8ɹK}'-;9^YC؁%`۔Eq:|JZz{lX'vp]<-XkX.lNd@b=Ȳ.o;y!Rl, v9؏dxڗ4]A.4nN[(<5jCU_6-Ĺ)(Jw=bRܪKe_WW rvrFU^[ Tʐg3* /ϡ;{qUPs N7(P0V먚kU0BzaV<`LQgn t˧qyZkd}iut~-FI<^2<.θ ʞ;+"1HUq\x*Յ$:&_Q,"M ּvd>Aj7gCc@ɬyK6 -1)6h" -㢦 OV`))  ;5g\.Ggl@CaP+Bfʸ ]m0?$2jlQW; = LMiDS{ ՠ/Ts drKԧoH"}}2DvAԅCqw3zw%QjlRy:AlI.W)}U +uۚW;yښI`ּW\-@E55VA?]+j Zh4 7*m*gkRT6*ciuV "&cT%"sE|x0HiU[ƍF c0Vv^U̻67En _4%1;~Rlo/V<~{u(GaGxU;YʻY~ςlb ^8%ؿ[=2K61Y1 xWn]5#ooA]NUSu a7͏rm0t>ŪZ!dYqnEf2N݃SuUg.,4˵AE2IҨz[±; ,[sLlWM$Gm#lM挧]Û1D_~6N-fK3T̂2&qȚΰh"ny<6M9a3co5LJf"hgqӆ`m熨W_Dd/&\GD~ E)1? E`WlsEJE]L_Ƒ$p~~Fe MXk/ sjی5\yfB i?i;-7&^ ,7VM n`YZ*x0:("D(㷴ơA&fvzCOyP;+!8a LہMwL-]Ҝu4XtiJ"y%F:H7<g7  }  v"hU76P;uuu&Sһc7 KJLag30 us`ҥ*v ZG:{=o_D'6׸8z<8u;^ܾ9R  =Cj $@0Cu\ז{@M!dfkmx<$d#\$ 4#$&"Iknuu}XԬX \טBM  iO vYWpvO@D^QybO;+_Ӈ%oJ_15[({09 f[MJ8Iz䶰}@@4u~q`H_#Ȳe ۫N3ȸD#U/)gnk#'xk&E,'CCWOs%R]w(ye ]Oa6$ܾ.De9T?;M3xۡd~;=jbpB-0 ,|Ji-_P'j /fӬ2De~<8Cr5F6P+ةNNBC`9c5@5.ZfP QwhJ.aHx'؎!7Z_^;:)'㺝di{*QO9վrdW)δgq 4f7#W%5m?qCBa [ }n$T%%1+MZgիT*#S?ϯҢ tsSU:nJ v;0ʞA[,3C$WRvXmA"wHMҖ}ݦ]LJ_736'[O>{!@[ u@#ύ[a@;:$^ XNd@rvm$~N|gQ`wB.ּb.HEE\w~`$pX8*F(! ϽzaoBlƸlDbp!H¦p sI˨%!RN:65G3Տ_j?Ĝ\uS81Pd&8P]Zi~eqc[ f+`k凄cE71+u'UvϒU5{c2zZ_m&!x3ugX؈'!FKgL_ƌ^XW&̻DZ 3>)& 6ob+Dex"y)oawS\'hcΥPkP$0udY+bx~19N>#Lq-zj],~-xe\ f3 $k 2 U4kXMn/z5WO_US!4$> >Vu&aH[( ǙlaLSe5g@bgVڍ7aA~q IIz߽_מ3tqbk?1$Qnජ<#52r4_<4i~q-`S$f+=]vxA-Kڳ~d5q</Z7/ޥ)3_S[̧XZ<4Lg1ȴJU&\ "aWhf~[yЉ{1b8,.l:BgTs3.7al)%³wJ>"=› k(@828_v)cPwڔj6P8׮ U_\'9*y)K[:t-( D965,G& 5Ox7Yq`=?~I̗d;[ߢ>Y= l[x9-l |fV 6_8R:'c/=r(Oi٠FDXnoqqHGTAQK%P5ͦcn@DBPvG##^K%FgUj%)|o7RHwӰ/V)DLZ' 'im~+D207$7;ZC(vX΂*qC^4]inօ6CmAjѨuM *ɼZI6Dr:PffWG7S3HӬORa+d06<+u 6 '&NX&o|`4~b_:fP-βSa ;#ꔭ򽗑w|27i#`+:3@UWpEZrs4ʏ-y:+:\o<Ү Zڻr$kWx7QV}nfRj@Z W'4iu@rV)`)5]8 ]xăRM'ن0ښV<1f2#>vPB#1 nߨ9n3Ioci$ݹI/26 B&"1 Ar@d KjTϿ Ng(>x>^;P>#igJ э=ի_u%d! ,R>a v]VYk}(PnWz$;Q` d.ovB`DP JT7:^U(Бֽw-|lcr쓅7">`)o 17MmX(V.~5Kv G[4rZǥ179ճm/j#YV]e)% ԁjF4~_`t rhPa)bdL;#>]lWg0 WS)eSP׸9̢Q>7m+4|9"vqmk£ީǴBL87T}M=F:- *ѴH z($AEWHW̍N[Ϛ5`mޅ^_hVY,|$[!} 6VڞmC+=W$JyaʚdueFv3!&MX9'{5.`p~/E9uET r` 5?X93:#m=i9sEe:8Ktn}q߯S+e 4n*qݮh//W i.?[i7i 77ڢ#IK_[,hrX`vZk:(q+Q霃 XܛtaKh dbn=mC iE&zϜVP.pWPT{0+"~!A4isG}x#U~Hu1=I ~&,UO#O .|]L|)Th k0Sox+zp '+^st+/0 ~` }h@wi9G~THIO+*#K<;` T^zCapkQ2lg.p+ǐ2tv$h9jfStHp2|\CcLhkrW܇KzkEfEfL -p4~[yZch&^?&Mns9@6.춒 DFZG7iLhQkW cbݭ6#މ)B3 QXbsP$pʼ)Ak 9()|]{ej櫓gn,U<ǸyX稍O  L p_d+L2t?<')>qlqS+RXB5KGo!=gxv.J3I3{6_9ڭ m79'W"50%M*+pk00` ~ e!h%awL_:^axr!̙(!'ya6∜wox (.jh1QNǷ;fCR&<^0^ڙGG[`9]f W~J=!v3YSKqУdLDMP 䝖Q\Ze$)|XS!#}X2AΜt&z-:@Q<-u0>rYo5#R|-Z Lb_Gئ?=3^ ,G"+HEՏ7_* LgL:q񔸤"΍^)Sk>*D}j*E$) \dEw2.bjl+U֘.ܲcQݗxAŒ2EUNZ>("V/߼{̝o^ITF+{;/5634f x OLVa'}>iZl $eƳ&W=xAϑk .pւK 4b*~TOW!&7Xz )0O,$'b#'\>0`h*1>p_t)bMGE-KWO-`5U`&wy$;٣ ~%&Sa*Kё]4lHgD("03VS5)ż*] dgh8}T c#rF&"3,r ed5n)!%7;n,YA()`u[vmSR|E$a)(fR<%y^ZC.A !]k€Cyxd˭<[:ǚRm Z:(/1q9~AMy{!9)G- +|Ҙ&PcԽg-[Џ 㼚$TΦbP_!}( 'fi? .e GGbRM{{1֔;+ 6M25z^ְ0rs|l,͔w8w+CpGn{a7rjiGt5liyzQ-p0rAk=>=H֪HM^k!KE (t.X]<R|<(/ǾJM0z<Ҙl sRI,*9_X| Zzr=5`'nAZ숎Eze= -VdO%Au3*9>+9s$ wn v/TT3gFvfg>_ |jKOky4E9 &W8na1T]:jx0KDhԑ@N =H?K^uͽb屮ףo!$̱~g=xKwI8 LN;85?K `r}\YwZ*SYAI퀵"^UHOO7Ӵ$!UHK^7{|7A#T4jC@,lL㇚a4 *D} :{:Dcod&NU9 9z 6<$hPCż&λ&m/f6W(k1$;tߨXծ_;iwn0`&DA3 w덿ޤU}^0Dev譗iom|dyG93*={v0ZϞ`yc k̓Q!"„43V&Zh{.z(R-r!Ms^]6[HF"M%@SU-MthY(Ѕ[&ӀoTDH`w87 ;&%DAeƬ(=|~ kV0|-XW׃Z礭1rX$ka$MOFwm$;u3|[ڛ|-d!(7 |iD"!! jJ9ɛsVv8&l!"]# xwjm&H+n4Kq_~cosyUTP fBSa||nH q!GAWߓq~JFXcm:lx>]oqJ>&NO$X "7G9Mѥ? \>3}>,*n&~۩ 0 "픈-)= H ~|&T@]AiPEDkda_ymW6;鼜5yAZ>ڣ-;ZϾ%+7¨?n[&M3' S4]12Rϖl!X ;4)L'Vu]6 vم YG 1 l .r;EA=K6U]xEpY/OYUUNܹ%.e^+V 7\~K-: B^|:Ul<&@D ؤ{fjvfӑ;1CO T/t2SyB+#i;x<?A7nLնij r 6ÅmKa4.} vcQn( hC%Ѫ1g~ 5'*U:$P8cس̶L} FM!'Sԩ;dKʱ+#ߩK@MԋT$DTxZa6bW}C=^`VaysŒ| RG^uv:Zqh9`"YƂ Huy2Ca ~yro}_`J],ZuMVgEJk`')]*9'{ LtZs{*M㩜9Sk|`bezP0Dh.աnfjjd&u 0D`jg7"M{C }nM=C)>̔WX KNj}U|JM0=yLK<0$]X(>yDZyFOEq:=^FN%]'anGBNiTG26=[@J,F$j:Iea/P`& QwIlYL9UޟY]Q4< qotCkVtϓx1/˾բʗ YbD^. K ^''H1' ?T1xwj{ ;z..C38ZlV=GYFdyCC TQLWs)(kǓŶJŰu2"Ɣj.Np΁ސL (ӺKSEr`d#09~c%ڤ"pkǾ3d"EELDPh^95%0[OyCz׀vE'竽_d_#IȡţLvnDL[!z(S"5JesQHXb>+RAo$.%[)f׏EVӡW%%헟"1،&g  wv[c\h-"k4vs'y5mI$* շ`>4 pjkVwpP{g*.B}bkhie#$ bmpn>s l۵Bƽ"sG!+<~=J?;0 E2qJ f>Nj.p_,I] QY5ϰ3}(E,=tY8H~iKG$Z"]\2ĵ!.9M$ΪɾN z cjkf:Aܜ`6r<=a3T)dCeլu|z^PP\gE:fK,I{?[j*tbڄɡ.Ɂg ɬ<`.7NݲNJq6=o{2O'3'Ӳj'f]GZw8KDNzB+I;B,uZpٝ^:'N4F XltTsT`"L퇋{cr/PCKGg̈-ASkHn A뺽&YX!40W: l>UM֊4\8]8ޠ}[qvlNd,_C)d'۴C qOk]]oG3'GR๬~+_姥WLP3"JpUOVzWc̕;T[IVDž,nUɦ}4\hӆ1YXA5Ž;0&@ p'BCs,| |{+֝tgŸB1M!/~]/Gm/$m;}Y/@Pyʜg<U;j3hgq'| D-yW*B]t*L$$ZnEf$s8蕞t GV=[ )<+/~\r;#f" l :N"PSRԦ]Aiµu<~??Kߏr\F\J,!9+$aSsthx4q7w*i:akc6(*: Q%tK޹6Z`_Us%XӅ*&<;F`D18;3MӚ 8jp!q dK!|nPP՞)aAr?f 5a} ζLS$ ۦz;s%oxqLXg9Ra06^X_Y4sK(WU$ιjHz`u&me/d ZsxGѫJ%'/q=銤TZ`ޠd"c`رb<A,ɬ9d68?y脳Dф4u1Wʸy.^J[/B?IX"i FjKU6m!\$F(?Da.g|;¥IYkrs0#Qh55̱=?n٦sx P;mIx/:ץQow]Ok}C +a H^vmWɄ;UlKIPN"MRB9ĵ E(J9VKKEեgJ~*)ԋa%p4jՋؐus[ F#{ΒsLPi#bS 4WnͽqWgIa)#Dx2>q6!?Zalni&),p{F08Vۭ]C568MS],`*ێzW<=Msi]:HYF]ⲝ*:5̗} CD.%Aid jk&mCWaPh\>ŠF >pZ'jemAL'-sYBH w8L$FM !ڌ[A+e< aP#Cc boC3"\ԹzT*{.r‘\*[z6]\_Ҏ(ܨ;X; B䇕m}3>d`p1M$H|G֗W}dRپa֧-0M!jbN&ǓpA'pKZԬ%96DKؚK#v3]nGGk!"%/ēm T WD {;t&:!c/g8TI+ ܑuf}gМ})$]˟j-jB[*wuFZ-M-BؗXj"}Ͽ˖)$0YpLЍQaI YPE\=f3}q@qȹh6iD'3N  6X㿚6C.zW kQn3H7W:GsmA{wlQUq (SR'P*ћ<ܗ;Yb)&ߥQNJ+gM[&1D Cd'f|ex# 3=ۡ & =,:OmF:(Gc3n,@_[gW** Μ b3Q:¤ oܲǟ@2jAW<"4+p Cakz۫y$i e(;b`ip'5 a(2h&cԉ ȧ\ <<8\汳nݴZ'+iH)jڌa6d'>]!|6hqu1LqXw0?(>Y#  obtKМؐ>ŤF)_# Ϝ9^U h=K&am*ǧH$[%fk`S.jGJ"l\ VZ6#K jE?lyfqŜ-ӽ*x7u.9ǟ aq(.}kɕLPG <!:chdG&=_zjDoKvGd+lÌ*|~뫵 ׄos>!'^Kc<9?'==&"`ZCo/fDGZȥnHO ZI3ptF6"v%T1kql[{K-pCψ_ @] v~YeKZq L%B}sE6e#hّv|_ƈV!Hp'.Aa6=T(NU # 0ٓ< <Ӵ͆Y&pPpDqf);A/'wNAba)2Y5܇c!&YK0 X,-P\`ͦ n!(6_x̾bO`JF:@RfdvS7̹Xvm=43jt|M(bu쐽4 "ҬJ8("4ċm9q ZŔڵ1*ŹS|i9B {ȔBm:¿dn8`.&6gUWz3yOZ' t= Ӣ'1D>3׹iܩdTX嗵 J VrX|}1J$OJnl&9_1 EH1It\釠(c)Rcy۹!9wW8h "H,C6SOG"ᗏ:}^lnm2EeXO~ZOR94x\S6oU$ ZW@SIQłe*rC7&֑q UYG5  $ /\;q7`K\2'Rɝo>ӗ h"f8l*vQ~>2OX<]܎ .,\{ޑ ,Ƅ7 NN *^$$pժ%,Y~j%6U19Axԕyoê"WY˰m?<P9`/RF.FN{L_U9k |99R@ËoH^2ʍe”$C@;rxu֛Л;j3DnUtHDN71!7D2EKBhNd8`u!%¡"yߖ L^|;[h/C_k3b՚ƻ m˕>;2ݕV,Ɗi͒yI?XknHZKWp.m W2À!/ܜ'].@ʊYoʳT{Ԙy:g,|^G-,sn\[7r!UI[%,_:UĔC<6h1*+gnq->:S9e sܶyE=iѢ6Zp}IRC8RJGM)a,D7yTudW?iZd33p|;%d(u]+7!W)*b\0~6_:gC=[Z۬p{ LjJ@AyJE7 R#{:~嵷H ,iԁ&1sno&%VD#u5FFX:9@ x $HH`W-YY{ל_Tj5܂ި/D'jzhkj^P1ZpעF'%rѠכc!rMžJ#~ͤq/h!뻓~ Zq"N`d9d[ax* BP1Ӥz bxW|P,2cҝ%ߐLO}Q-ebl``0>hT1Ǫ.oC%\W"2@9-ђLzgaTҵ2g[K>-OHnwyU5@N+NLoRBF]}=(7O:JAdGgj4>-8Vf8'yBiq\ x3 @هA*u<hvsxKB&5A}Ƿ QFö՗i~b/`WtJk/vXyG?3Q+(nv쾌0+E# mhti=|L^b=IF_Y'LJ&ah~K%1Va@JLx'?3Q*3*zc$5<[Q&) Jb=,w~FRơkp$˓iEt9i`3m v:'0ſKg(Ap'/8Dg?~yr=Z+Qsn',BT3풽: knGES(W%*F=Dj+ 20@$}zJ( JȈ-?㱖WPy ǑMƢٮ6 C0AQ )DX<=bIiW? ыQ`2HZLs\"}Z12oJV%+Ӎ'O?-}~6jf1$<^x m4q>N Y<iPu-7lcN8?[5 ;li&Yx4e!Vm/+b&.OQiE&nWU wymY aq+(^aM1<\sU/~r7[^y5}E7'txxqx;iK&5⇄`L{v0=RL\+ݻYDjM7b.#fka45޿/Zg*&)Yg.`2Z_~*[g ^`Cf.2 nƕ"󨥉wc\P DVzסj0A lzq}Ba YW 'rVѸpf$۪4ft/,bMG0L% Oqd1UҊA(y` (,Zi䩫ٖ*c"wh =׿]il>>A:9fTȠK62rPK3IS9mKfiQZ-,}7-xH-N/]6 g@WxʹJ=;V p4.\RGuaNо-|`s@L>%,@E\Q0TJ#a ikHi=TMije (/y-en0Nb_sք,׻b }"m1ُse9% #x$֘`c=ԬV~$9!Xmbj.]ˠrLBtc8uFߍ.A`H}TKR@x1J3vǛ6 BZWAqFW h2G=>}J{}C=c>6% (%>IZVT66=7p=j1TcےMeK7qҷ I$IGܸ`+:]e{`pH+KR 0 ҒO-6a\.]en䘔DN^^BbT?Kx<Ļ6ٲXXW> xhw2FJ:} <-g`wPos $ PÞw)O}(5t|!IXƀ ox0F0I 9&xN#^7ʠ Ojg J]Cxo[-lٺcVq9%v/iC،nd1"ڵqBR.\1ZܞADw.%]p2v( (y3l1#>w2h&ڈ39vs^\WAHIe]kB,@s}JfD'/2&]H+2LfiͦAs&o^H:GRN}-}Io_Y|IOQ-XY vn[c-ZdI?1\;ݠJtqW˟<^/JC̃1dCeE@ֶvlNe W{" f-~Z' Һ'Mٌfl9-ð[8ZnKp EE(J_@1?@ i\ƃH\*rZ_ ;Jœ|w; $(LwJZ~KLR^u29]E @ِvZT9u"úHmヺm]( )G-*SIIךE+At28l2xN2N.lOGfr#)`b00JHR2G1ۜ}KMtYp;rI{LseDHՙp3mRPQZK;*hb\!`hd#}|) (~8!~sO^z\N7hQL1oe+9m;`S,i@U<$1BC(G~cwхF* oۉ `.0CC CMvЦ؞pVHd?Őjj@ }WUSqX1/+T~;[WXF@C#Qe;7kt6ʠmaF l*w uᱤ{uwvPˬKh=]C4J%{U"ڍ붸`nPLkWg MJ\:s0GM|P"0ql;}La>Ret{t{b6]qQT߲U׈}p븎yuRw / R B%5nׯ]G:lR7ǺVhxǬd=aUp全 }PͲKPODr;iik[> z]zz- $ {"H? Eo3B8m•A ] 7Off>*S |:Gױ$Y:JY Ab2Ce'!\Ų' g# Ek1|`D)a!ND40&sYq(  p]H,rbv2JT`Լs1s%R"pKF<*5І!h{C!$,!IBG$If~CȇҀ(lf98JS6,CA_~n!֬?{je 5Ec5O]( I "rV=I@OKhO'7Fb@z M4WfO[ 1l~P:QfjJU7[+nsN/Ĵ{8$t$^h i &3 ^U؉d=f*9"LlzĻ}> QѸLc[|a{mWS7Q #j3~/U%;G|1.]ؿύYjE/X Q+Y=8m'3U:4|/p#`%4c<%,P#o|>Q_:Acm)p{mceAmB|٭}(T)h6]i#IW|Ҫ /M&>N/\ PK33cܚR! after_deflate_remaining_bytes.binAEPK33cܚRZ cfile_PDF_1MB.pdfAEPK3ܚR¢ sample.pdfPKzip4j-2.9.1/src/test/resources/test-archives/zip_with_duplicate_entries.zip000066400000000000000000000136221414265447200273050ustar00rootroot00000000000000PK-fSz5 sample_text1.txt51rC1D{bǵǧH9AaF?(?鄀e?lJ ŪM,uP/a *:t;j6\hf.mv֢%#R⇴ѽ#Otm̒ЅngK&uD=K_I9 4ғ_%)\3ɑU;)ҋ O1򜤝L YKZ? ]ѷ! Yļ2\bcLL91L1i)nRyڹa,۬niX\]ϧPK-fS?}=sample_text_large.txt[n}WY4N&A睖hےh`>;@rۖ(SUUl{ZBe 6o{8!zLgI{ScKHs>OiMqe02ǐ^ҩ 'x1|/ۘxnK DO_VD~=~g:zi#{2;K9mMc^i_d=9g879T{:3{᧏<.ǥNݱ<Қ-M)6$4!Ι?oe3IA~^e1_`֑NQ聼>ez?$5Ӡ/&IIy<ΣZjGo=yTVRח=prBa$D 䪹 siI9I~$b17i1DbFg#mz-([hzN%Gx룫Zq9I^ΝeǨ x >33"8R2[cvyRPi i$tV?@r+U7-)dDwkCiRkYIOsjsYT25Cx%-iiPtfOئϲʚy]D }59Ql[D{72c JԚ^}6řvė|P x+?IL^*XX"-OQ KѤRE8neuYՊ;IZ7QlDz찊B] ! 6RgUM5pdv٦QY NAmEDzsNO q=h#3G2Վmlb@DHpY)0ĘaSݹQV9?nhҍ~,U~cpcXKUۦN5o\AʍN'Ua_18 oujFxg[` J;lHa6,DtwqV5\ װLA \7:?EҨ\pO>JH;{\ԀP@CPw(SpFQ78(xU]`Jbg,d\ 7i0xzf%hc>ЫnP`u&jƶ؛&z󝗩,[$3 KvF UJQ}]5H,.5tpe"XuNJ-Hrւfu&]oŶ~n6g X寧b J5f#DZ+;E$I)E5Ѱ@K VD6DA>G ']ig MCtF`h_MW7DL9cn@+wFh8xrVʘ@ڟrZɏ&C:k|MD k~%SiSF'µ.orXMYYl)ȲGћVQvP/VxcM@뼚ЩH< Z$Wn[\i&V+-;{sl$WR=)m$q`U&d"$C>A8Ѷi復4LRJ&=qk^$&&I%l5:N-蛒*WqʚS\CQ\͊Z &*0[JK pLbNŠi,e7XH.G:PVע;E ,j"ݥd+F$xlA\q *S$sKW,ىQ1)6hΎHhZjVְЏG?6],O*P;=:MUwUG$N+ 6tvO҅Op-0d>ꢏEHA2G \oB 1m͠udz!6ر%O3SieJZ4Eժù=$y*<Ty|͹\Fμ@ t9ʕ3Y Ē<) 瞆Rs,1~`;rӒQp:(~dllnFEѮDl$,ýϫDOj-KG^k.`Ai*zy\szRЉNlsh@4ۮd쿰+S \)U+5_( gpF^jD3q#B=&LXj#JF AZ50Ys)L#]+W,Wa,kRy;aD➝{Sݖ,FWUaAy,+M:rɸoj˞?]Fn]~e)TƌuGKB忆VG]T~`k9kX*2XPVX|{|v j.IWF@U+z+[bH˒Kgڢ7wН+nT;.+bu `wC- +KNBK [Zo.^pNtA( mqA^MGS`EƝZՓ8IFO%"F˜sI+SާjVàyP’CŕPcEM$Nǰú0w_YhUqhL]PқXi! Q-2*BYn7F"ޟ7-OT)A1(NYIL{̸$͒H^4^o`MZ'}ʼvFԲ}+Ʃsq)aCvA휉ȪQJzStvBsaz溲sMM`9V(on*YQS/մ5תZ# ?c<&߫pSkD%2 6lx!j\r<;TpQq+vU`]Ϛ;.a mwEfWtR[g9> PѼu76 0Y)P@^[@gUDl4ntp xte ߆$OЧ>%)O }JSBЧ>%)O }Jѧ>%)OiO$H8p @ $H8p @ wA .`XÂİ`İ  1,خ0,aA bXÂ1,0,>%)O }JSBЧ>%)}ϣO }JSBЧ>%)}>%  $H8p @ W@ ~! $=$\ 1,aA0,aA  bX]aXÂİ 1,8bX0aX}JSBЧ>%)O }JSGЧ>%)O }JS}J $H8p @  $B $H{HaA bXÂVaXÂ,İ`ð 1,aA bXpİ`° Ч>%)O }JSBЧ1>>%)O }JSBЧI0-,X8p` ,\ ,X,X8ppӂĴ ô 1-X0-iviAL bZӂĴiiA)O }JSBЧ>%)Oc|}JSBЧ>%)O)aV88pp88pp_w0+YA bVj0 bVlWpĬ f1+YA LDЧ>%)O }JSB>ѧ>%)O }JSB>if88pp888ppppĬ fì f1+X0+YvYA bVĬYYA)O }JSBЧ>%)Oc|}JSBЧ>%)O)=<PK-fS¢ sample.pdfVn8}1RkQM$F4E,dҐ8OA#Jnb s!.O^d:{>븎yuRw / R B%5nׯ]G:lR7ǺVhxǬd=aUp全 }PͲKPODr;iik[> z]zz- $ {"H? Eo3B8m•A ] 7Off>*S |:Gױ$Y:JY Ab2Ce'!\Ų' g# Ek1|`D)a!ND40&sYq(  p]H,rbv2JT`Լs1s%R"pKF<*5І!h{C!$,!IBG$If~CȇҀ(lf98JS6,CA_~n!֬?{je 5Ec5O]( I "rV=I@OKhO'7Fb@z M4WfO[ 1l~P:QfjJU7[+nsN/Ĵ{8$t$^h i &3 ^U؉d=f*9"LlzĻ}> QѸLc[|a{mWS7Q #j3~/U%;G|1.]ؿύYjE/X Q+Y=8m'3U:4|/p#`%4c<%,P#o|>Q_:Acm)p{mceAmB|٭}(T)h6]i#IW|Ҫ /M&>N/\ PK-fSz5 sample_text1.txt51rC1D{bǵǧH9AaF?(?鄀e?lJ ŪM,uP/a *:t;j6\hf.mv֢%#R⇴ѽ#Otm̒ЅngK&uD=K_I9 4ғ_%)\3ɑU;)ҋ O1򜤝L YKZ? ]ѷ! Yļ2\bcLL91L1i)nRyڹa,۬niX\]ϧPK3-fSz5 sample_text1.txtPK3-fS?}=;sample_text_large.txtPK3-fS¢ sample.pdfPK3-fSz5 Jsample_text1.txtPKzip4j-2.9.1/src/test/resources/test-files/000077500000000000000000000000001414265447200204335ustar00rootroot00000000000000zip4j-2.9.1/src/test/resources/test-files/after_deflate_remaining_bytes.bin000077500000000000000000000077701414265447200271670ustar00rootroot00000000000000|ސT cf_)J%i_ɵNR &Y(gL% grv-B ȿ{d'K'PhTt׬KkLӓ֮K~Q@B8-6 ~̱;þh3I;\A<.lGisC;BR)c~vCUo<(vO᱖<Ƿ(|͜RW,eK>)R709S;;d3qЀITJb[}G32HʩM)ߍ ֎sFb7=~MƸBFuʌAʵuyLKHpZg8:{1!U #nW˚z6ߐs\UL8GIVM;uZ(2zv=|q\d8]T_eq(W1`#V^I=o&[1|*+N02e̮=+L,·gx<?,Ma.xl#.E@O #Z[ јtpЫZCdZ\=>05FCV :t6V$-;DkW~)]QIVtخE3Ɨ?nB2?вD˺~# ,Q:ZΔ2- 6t  vN~CedS~IܕgfJu"q.m4 'K$)af(L.i=ϛ`i~gWd8 Mfek%cxe$NS{fqQ Hj}l(^_c xhKssꑑ"݇IAJ6oͩY.?maBU%a;Iz>4-ԔM:͢k$$ fDzrϝwcU̻_hRfpEΌX"00N t+9LOjO#9,^o zoD.}U,IZ#GDO}j [2v^}4`1+/[AfH~G|=U'R2ߤz |PF=e# PtuhQygI8v6{(6LxDT}S;o+!8!Uh)™pMn5MunsY`ܮWP>nX.o`@)[7^؇{Y;$#b+ $ωZ&"[T=l`z2DcձygZd*x7'd؃GJDAm]ݓxQ m@ƕ(wr }weݫ vBe;qENp{<]?Iev_sY޻Ϭ3^̜=K諤C  2Nt TP7"IR tpVJ$~O6 2cgM>ba 9Rx=vnfFL;:*joeN<|U\,E5g u]tm q%$BDŽHpיKn[+ 0հ:. Lv#nk4SW |_F,+մ#EFI_!}gcoubd?SI0VEeܬ0v33.Ж>,S2#;W(p12lwD;I#Rsotq6w{M 32u]+Jm\ 8baAb6O$A ]rք lv*"ey 6CF!);搹*|^yxAsvm4`hľ.ǎɍW Aiu)%0VGY_II1@ˁԘ&J$Uh I)k1q`Cs3_Rel3Y-ɋKi{ '?71< ΰ*eEgq.7!CPus8$0b&ZXo'jzSޣ 2 *`>Bx|{dcA<5q{_b&A f@fztQќA<øs<4wM8y\'}xR6?BR6 >"A'Ƈ خ<*qZGaG 7Qy] X R&9L!{%panuÛF;uXh`}g@ Cayu)nb?Z $ܳz-=US4>E"ݠ?(>0~T?qީ]FdJW([˥! ;&;co_д}\|A}4{a!knMܷ^V@=uhO>j0"WJ ƞGSֲ z\|0OH.jI6(ۣ+iT{G`Xb&H}8`Fќ`lQ 𱛢(@eq1!z7hHЂ)aģ5G Y` KᴻR_n8E3KAȀv$.L00l"r{4 F JL7٥9kVr~xDܝPy ]VIwrV/Ũl[xD Vw  d:yE$I=忼A5%nH\0gKMڿ4(KI}|=ϛS6= $Y XY}yE|Bvs/LLs`*Qklb[yY(HYgGOLׅ?xb>ܢO`oePdY7b6^V\ ޫw&H9u.lDF2頷49N4'P̌Po 鍪'(hǟ)Ά,\I^mzA V<\oLg;=f̄k‹`Hz$.*._;qֳ  |E$LdoSĴ#Yums6 sS^gr/^3ewT20ҿѳǶke+}` fRsSwA2t5?sY..&Ƽ #A-\%޾<$n R]~C63K^=|5rJY&)<|rVO!4qRlgL "u )GQ=nJ}vFKjZj ;ִ$v1~rr|N.FRh4Hϓd _u-)1h}+PęmqhۜQM|K?_ Xρp"7pq5?=)n3~fM{& jV/jꌖ)Zҿ+<6`264SY(e3^xwBvRn hg1(b9#] AsYtҀƩ=%Ը> stream xM,7޿΁䏲ah虞 ݁=͆撿Ye^w^˲$[2g82OStp9'=p''ᜦ7 Mf7O?Ox  k&\?^Iʏq~pvD5DCUq(lbc^+z6ъѻ ` Њэ^vf!g,bhDZ~^fW>_ >~nUt  GD1U+ 艗`=^ ?@, GFL?xT2ɐ¶6 Z-5 x6\ َve2%4:, ,Y<9D%g>qpHV!a3RI,-C_5 L& cA]?+KLaۍLlM(kܗ3J5H1a5Bca@f9 )R4tؐ2R_ 8g57b >xfLB?W<̥Xv5e+a%[FETBQYaok\f4`}yTLgUG(E #~mb, G%Z!ʂBhKOCx{;[%J-Zd$]Y*_/H9k($.JIS*U2h ]#Bi0*bߪz92èZjvB*ԅ_=ah A"f*"߫hnřV$!I4TM=UgE7o[6f:jvP 6:fQDA%)G䴋+>텭٪"'uFo_d1Rw/raN=;]mO}H~ Saw܎G UdVg8)aE?؊=Y ZTyH;(*\ *G5bHYځ{GrqFzVUcC/,}3L%=o.z76,Vk&-vj#vӼUQRJJ((ZpoA^UrݫGjY*= M㵫mj-t8ĵ1Ȅ~\CfjR;FwV>e Kyf+, *lQL0U;H'wKq7m6VZLUz:'<HaZR@ƓwDR$D"MO0[BXf2C}a;frirDୢbU6YA:9tgm<ۇF]f6+Cyv*5t½'G`њl:b ZZ)5:`]Tn_ ۥEȐaaGaaa *K\r{;B9z$ņU&teLHҠhϩm.ci)DH:X-q_j郉DI{hd҉8;?iIb@e@5D0.2ͷB3%$L-F1r<"f.Mgɲgη`B܀zCw2K!˥#v?m!_'> stream x\Mo$ WyvJ_ c!rL`'@UI{N%IQ*jGwÿOiʿ-=zowi~\Nz{N_SvKa^NK_OOn]߿{riz/ 9۲]zX>%wI;}tt9d=PX>K'O4{C Zw5wHz)>3&ҦKhEv9goI,OUF5ǣK~nSlm1zu_.O*r,,h.yßbv7Iy n ezwGcǦ}ytOgUe,7hq+ȇ!W7Y-RBeI"VY[ajUfE%4;E[lK웎%!$+ԅFlzmJ_? 4/u}kVw\кSʼnY-Zd_ C ezF|*Tm]цd4Tf'hwI  ZJ%Vwp{{ÈU^SΧbRd4KSN[3oh\Q0Dڬ*CK:{t ;?dʪԍ@Qt4WL9iԒoԼMgRnG2g^Kq%)`#9~̿Ic:\DJ/F:"3s$.bH:V6B-&n KQ&n\R޺)<9Cix&4(JL="x<HV<5ݬ}0goQ127LD/M8A= O֡cy4h<"dKw (ԯ|^JSmI#,S &|S! (Y+r\#}qZq.A A;6Z #F5$^u^T_7Z$P(\Qejc|UpBj^zt\fWaCh.(t tBfq-u|*49&4ͺŁ0$P~:"0xSV#8[):Q*rsENMpnqz51^F4!(ς WS󵝮T§CD| +z[tH;5'>ȆiƷo@YK⤛6C_&=O9?O⎡W&}R9I0M4[s~Z/iοyJ49\׽%6/m|y&7mbYX!2`9b9?@̧_:֍5yy9#"C+BLAA1*#H2@͵{P yV1)l$\Ea0]>bgSbDhݨ+s@% ZċImU$w$^^ lIGX AgHeK& d}l4*0 E`!vU+1 S`̀`uB_ks6&~•jPHsg4/4…Db0FÅ+ՀThAާpJ5|ژuz\Xcy^7y zyvKI\\n|X}WXG.ɯsqk/_RZp}|, ʏO}W7gAn?c/[O~3|U}#_Kȷʊ>:Rg&"+j>CEc:bXj+{z q66* k΋Տwi`^zlAz=3't5^ƽ[/FS}o^çG)A?2@TZMXD')[[(t!׸]jieP)UEZ*le(xh'0e` ɻ{ QMRUVJ-d7&lS3t.y=uO;&R`+!Z?za=髢Xb9=AOb| CX>}Jss#O>W1ؼrZ9X7 1( T(,~1mCPoUd$[)A+Nem ; i7o~f6lxGHRQu dP"­eёYֆݞ8+Fɲr(/lz]qL)6bOZ&x}1 nV)@exi^'JH9w٣iC8yϜսLA|9iQIu &~PO+%[XEEwP] JfC~ s /1,x̐ǚRq}V7$^OQ^h.Z}Ga%jn*Y.a-ۑ5!`p낤]>] A `^]yQ}orǫͶra>RXú k,ׅ5nxR$CWc풲:4/Ad6֥Y,Cͫoxt/_& endstream endobj 6 0 obj 3646 endobj 8 0 obj <> stream x[Ko8Wy$vz=,s?2%eFĖ(⛴y?^1~s|u)o/{Y8cɾΗM1-%HҲ1E0/J7c3`F3 h>&߾`q֦7!IOovpF37֙ayHaLDhB::iV"z4.񆶺5|̸\Ûy_ҏ:Mososq#-U=. \Ǚ6iKo\}^v5.Shaֿ3_{gn]A%Ûf^3/zpWeeұn͊Du򚧄+۩·@f?^'GP_n c! 0`4BB=fDKHP$:|~۴ޭ\tiV2q m>dK!hx/]gMth|˅tG0?J{Go!C[8{SŌo{_X#Ң }i% LyaP$&L6 rrVbJۡ@.XF*Pէo5PK8MG"Y4"3: o͕ ^"H@ e.ƺ"2ծ@|zd㛳;ZdPM(vFl}H H 9a>8%7/_H^UڑMαī+y8W[!:Юjޙ͹BEbzE-GȠ\Y6or[V> [I]AWVU*acpGLj"RM(JG=c b#ldiO6)[i~;_P h[Jii5bK\gct3e~6T^01>mx2(֓C{d@_塼~Z+\^^+?E['Q/e'N@&v+cX A೦A7V͖G>ڠb4|:ldšHSk {FnMP{j6͢jM: ]ecd>gayUK6RwX89"v Jn; Hp!:Ff9Xu@6;8ϯ~+O2!w< rl{l7{TOKX(ܱ"h=FZRuEk$ Ni{^|:tލcxL:??ϩTIًr6QD$׍LN[^AZM+,_}dBs_\hYBu[YjPE>`="@r"ap/!r0.7 hʣМ#|`n}PL%OLNdzh^ >$XX@~mcAIF#TM]%Gq\ !_k@8b.=*:8X1Ƣad/h}vzWGBfK7j'6 ^**GLQljj'pkd&ALRF=ʵ+ۉD@Q 9MUJ 0:>ơdy}[*66d\k$?] 6/>ҊY?]W$U}\MK\*5^o[8]8S5 `MyZDޖ5T6"7W6EJ+Rm0G`Oen{\_>؇Ûu0mrt~=^ pߡW5IK5h=uD:d:r(M'Oh<6|!𽇒>^1^)u!<À!9 Iq=,h}(˪-1ۂ5-|l-Bzӳ)47:'\& d,8-% Πb*qhn E(Rá W%ThW7AܑN MZV^qJGWC Phŵ)ǜ`þskg,@kL?|}ur*lb$pRѺ/ݖf1 k8r'>\@`*Ccy$Xf`7Ȁ׏øh<0PJvgop|X9T?Vp$KTP(|y_v/÷: =6|ɲqF/,_Kb6_Ğ Mh6Enٶ_"}ppXMY\fӴ3کZzʬ71錸H_℄L8T8(KݝFweCTmܡPy uFǟO!\iu3Iukzn0xxWritǑ;9frFVvʍq}( 6ZwhHC;ܤ -F>Y >췪.n-̴nJJ 䂷Tb)*E)/:Z4ϽpP%@G딗b24Z_cAsVvW@dFOͅF endstream endobj 9 0 obj 3640 endobj 11 0 obj <> stream xZK6 W\ Ym3 ӶؽW"%eOb4cS?QR拚9}iN\t=-V]:)K2E]dpIlަY*}+Н% /`xߧOoI޿U?ͷ٪93g;| OM#䏸J< ~z6EHIyЬﺞmZ- H y׍7Peʌ`GLt>wASD{q]Ԅw^SS ە) 6$äzRs6 ' hr1le4H׫B <9*?>j125ke 9i+ّ '9E2`_:=Msק6 sp4H;SN6%Byys;niWsre)R9\`aCGȲM>>v"?'zATL9+[5U~Ŋ߂=5Jؤ&BR9-As!Je(jR\-V6ecUHD֔!$)vȪrފk/%(-t*IS1QWˡf-ŝ˩%x*h PC]2U='U0(JJٚJj uP}Ba%X2H1(Fa<ԋ)U.l:/FT,F].@ OZbj ŴCL.b2+8i@L<}Z ɇњ Z.hNls}r=/i\錭ە޲zwcy552հR @*g_),gF~hיpgq-*z] ϥܱ!I2ksn]3pfRPB&2Yl@ƞ^ C"&C4߅ kZ$;v{aoBL_ 3:({C`G($fa|4$@G૶#H-|qshŒ).x("%ɇ ̘*]tvNX(r!u,#!uQܨB5iEoc[d6maE&Mu_%nbDQ@R- }MfS0fM~dL. :L w{*CHY_Oa$Z9@^/klѮIˎfDyLХPS SF$e}[ݕY"z؜LlԵH~Wzb}Q7cn;5hMg{dp[6z}n*3hwc,Cݵ];Sm$D3Vڻ,P2>-l/ $<8i˝ e*\1BK,ӑȎXp $\ӨO`64졣y\6v[M jXFPrD,gI\t[bBhA-D,܊*|k`AB=^-hO`̑w⎠z!UBܦzX)sx5SOՋB|wK5i-d!?k\͍Y׃'5P'%c^1&nS%31:9Dz3P\Z]+G6[+Ah,0x<պ}mZuK%ћ,vBB{]s4`*F4oݣDNH(:ؕZ뇘at^\ 2UM(dFMp<4$M ! Ty$#FldJ _tZl-O"3ouEEȿg|g wHfӏ_OY׿;$ endstream endobj 12 0 obj 1967 endobj 13 0 obj <> stream JFIFC     C   U " 8Mh8K6 *UJ6WU𲬜{~n*snAe>O/9Zd'Jӈ$m#WrhBhEdf2PB'$"(V\OzK'6_^md(MUPB2U]Ѭbً/n YYpoQwΏߪ%'—Soܬ5_G\IzWOڑdzIjћ?IxYoggޞ&J\yYByk!|<^#3o^S\,qs쾆x/OR% yk }}z(}g+qz|~+^˟Yov^;k_i~O<^zyy3)iyw5OOE%O"=)|c֮3i>a:>m=}zǥ$8{(xko#>9M?gy1g>/C#>z>g'"|}qg=59%/4/|}5%vI|>a_%Z|$51ƣ~>oOim~;>ȱ>4콊oSmɯ/',.M}&|8gO6|6ef["fݥL|kUG k)ψ϶՟h}f|{9/'%z5<Ͼ!/v|g%(X|/|Θ=$STrM#VEދǔn"RBؕM'(HicW8J$I#PeU'Vl8` J4%$QkcV L% +njwMn[YK3HLl".HHB8N6Bk|mL\|}LlL4Rɗ.jJjboӞפtinuVh]DRuY%+3L1r)Yqƒ_,`x/6dl. m )ʤҒDJ% 1+,-7%Ec+$ ăP&ַ)%eb q HPH)Fb@ DBũ @`ST\E3"eYqC.)/1\Բ"pQu鸎6ƙ&ҳri4hޚ icͭ#, %u'1W&\Zr :bv/6 BO|]`z g~29AOL<3Sj 8}=hFz2=pدO{;\OC!>c߉Y+*Om^5'YgYOO zP9;=uчv\|j_O>>cO1Bߧ˲gGS-A~6rP02FE $LyXYF}]cavkiBM 7LH *m"Y!ŒB3H%N:sP8Ȩʑ:bUmAĔaV'cQ*k_O=ߗCtyg-I(|MKJmHĆ%TQ~>c~0j21e̢Ҍ<>xrϣ0)p5aF6Lx3c?%x.rz6LMn1|^E7=޾D}sP7?Ӣ94՝1My׵|ٳ|7{t-v&|̹mnԽZE.|: s߭N>Yzrj[i7::zHqW6IҾeMfyϭd_H24{N գK4,߽4KEw8z` ׮iitQƷ:F\:@:-w{n2뷷Y޽%xßusĽ Vy[LSOfz-nˀwm}5MNdQ [95z),Y[aӟhsn%wŊ1&yH Bc%88%T8ͤY8`!(8ijjR4^VKq*cv=q%j*Hjq6k-ݸy)aQIa$^~OQ~?O?ɼW 7MK >o"Is {g>:fUu|}Wl%-97K|In©GٟWE|ۏ]NOMy5FYu3!69hF2u~ۏ)"`z?23ӆ/c|mk ~h_WF\wϰxlh9wok#$XccgEˏ_#]eߞrjkεs.:]CrIVz41g>Ӌmy&5wCHlcx/]oĎa_\n5|ӠSXABJQ9l"DlRf-,tgGm>GXE"4ƚ2"Bb0c션TEIHM\M3ƪ`j[=L{6F,k%T#'yΕvԤ"x]3r_2bj "bw8s 5˨C{Y?tq#sFuwU˵1om~"3:ϲ~6' ~gc<'/7K8+4\'{fqgqNL T㚽=>柩dPo4{>`l:y/2\Z)^=FwOx|鬔ycJ|i_h=OYnjQΡ k4'ӗ Ӈ'9F%95k8sf_U8{~ͮ_?CGzqrLX_W.;;Ip"L}O鏙~ O>S2cv{{N>Ǐ r,lH/_ش-_[F];=wWձK<6} Vޗwsq3kQWeՍm0!5 =К*qw?W[,?,c:*kȎ:sЯQC6s2;-^mcˎ-Si!Fic('8@D,%MLP} :Wt[z(%Ӣ՜K!0vS8j]&YMܴ#]v[:+\<~WW˖kH}o8ÎΙg5K8(ٕ(O:\u,,7 reD)dFJ"(Ae뎸K~=̱x#dl!桄c5eTCSWYWƫR{)kj{䟗`@@őEWex޳|d,-QX !=kVcc|<= WD.f%"UlZoY>J݌'}ͥY%,TIBc:= 9뮫"U#l) 8Ľ|SEy{'(]w<'U+} _ _U5yeoG JjZv=K韙>_~6r"pQr6*,֥yJ|yo?1^UQVE|=?͌,5 oSz-g:}wȮTwdWϦONBWe|cyGy7n_2M0"4O}#=3đ#;l>oǢ5^uTϢ_;4#˭q,z}zy>M*2~M| Src_=317^oLfX >/nu,֕8i_k=SvA6iX%宜ô+SOvݏO7xwnuqk+CO ak<~쟍ǮqSΟzHqLmU}2> :p:|Z3)oy~1~5/Ή]5l3iyvWx|^:t{ņEYtO]L/6υ&#|1<\N_毦7㯱~=Y+sΥ!}>^6n/~8^ߟ~/j#Wn8t]x2+>{\Mtˇ-YT~ڔK1yUc42+ ryҾ㿱>;m1F\.q v|WgcgteY?@x{6u"x׮]y* tg~'h!Kv}c?^|סH㢬v6QWs 4&6f~:s>U'E*?K^~\Jw=Jjī.8eϯ;mFێ|忩>Yz9BAZ%4/b=q^>>qty^Uz~BP bQps8^.eX+TsnKw #냝0vY9cefݔ7f%ïkiQ[|3S5[vngd&lsR `UG/@GFOZMZ_F5[ n'1r3fa 3d)A"B1le#3W\V6N>dK S|1c~|~$HJWjq2;~LlnOnǣ*.1KwR2 \d5OI}P] 2롲m>o:|z/^tꝫǎX̮ ZQƴyei:?WEkL2fl um!17X<{?psi}z>ESQlJ! ,o c=N>?ㆽ*ff0,a2HWdkXk.:?~-/9/޷ƷTqPVNmtΌz6|'|Mqmΐ':T[e[+\X0l1TZYU:{ǜp18;ָK纓c<˱Hg?r:!<.[Tls|` ;]Mٍ6 LBL& M iv:OO6̞=*njG)6(Z}&6ˎ1 f!4" QRWd5(#lLMg#";<Bpk /|I!5KCƏdGO`GdA9TkϞ#׎S(rKվbzlSei|zMۦoϣ?韕q&x ~wǡ2}[2>kqdӊ;Daٸ#Xy}N]VsxItb'6qGhL{z_o.7^8_-}Sug8+e#}N&]8^ Gf/zOBsAK.u󓽓\爛|KkCΡ)<ֿQμoM~Q^Mg/|} 3WRO8/}o~ɲ:~gk>=~gMH}Dr>Z_T8Xg6c&iq>6oOג)WLJ)fϲn]Bi~`>P!>e$|5/oV "߇ W"2ԄR䴞>d#&dci.5Yxԋ<]N侫I[5YV-o9Z̍X2!k3B՘;_tldFQZ,qjBUevSёp``L@0Ldr(\)wi[dl3 fI2RK,YKӲՑ%dPe 2XSD ,YH2eHY9l4Wc1,ÖBJ F39IXZBR#*C*w5:+vfFAUy 1HcDQXZ1PUcr 129 w3E6IP^%ह%̡^%%+[J&ʁ`%%ڊT[]'җ QK&U"ePL^ IkL5J]]ѫ7Hᤉ|\,eJ<$tuOWcǺ |Z^YahpS\yz4| E=(@]1ӓ24D4zz.ǘz s+ezv',lkSOy=݁G#Yi]v9JCNQ>M2 t2窯펳u򳖫ʁf5YExysͦsQilGf=l)d&1ЪDBi8@ !8굞rܾ/;,zuOy )[팫<_2e]Ɔ"vF(! WdkvUv.,]ed&2&!ha}˛]4]q\#.Ȯjm@ID=C6TjnkԣoJC_־D|3).|4/%69!΋>hJowGuށ9r_=DŽG:Ys^\:ɑl9Ug}8v7?bB/; Z߰8؝)8;uij8˱΂ϫ~>MYݚ[%dž\):+~}\f5ڮ ˀkz \ /zA;aY;ۏqO=̗}իۮNx5K;j}?|C<難'Jk88Wѷ~o9IoCkή<%%$-خBVu˒&fw/}sk+aԾH(΢<:NΣywY_|,_?W#}zzw)z Ԝē*]?ڏ _:ukt:Jsڗ4JΛ{3޻r{_:SRm#͉S[Ef4=?g~jY <{q#.8u"LˢeKUE5R䒱Si@6c+՚umoSζ1ƶ$A^Wa9jj6R&x`lpvNHdBn2QIM%14 JL>C cd'ˣ4؉D &ci<=w]5w(>{Q"1DF%͎.dTmXYxrݬ+a3}YzIΪNܾZ^f):eM13pdTŁ% 38J7_|_>rx{1l"5*(y(VDӼu1rp>7l3S7QXP*H[&NZޓ"~>%,T$R /Qˉ-\}XѺ JI@` CF޷y;g׉ U!,K`[&Y^Ξo p *J!t%g IBva^Lo?Ɵd|gfm{Q#]vPU0m?Gt꼧Uk}?ѮZk#d3bȲȅ=Ɨw}/OMwyntbZBCA8w?^u_ͿH|'m5}t골Bq1e!9J ^垩_Lcc?)g+{Qː$zhꥬ 3  N|_zn_oٍMBKsŗH'ϡt: Y>)*]ΘVmQK.YXKOXk_zpό;7uǣ=7,LM_9^u|c]ʢZ*#wZTznnj'n~l5O]: |`Um^~RS_Du̜n}Xw\|NT|yK޵ePFU^7cu6ևyoxw3}5bz|pȯlm)Ex=p K6>, 9tSn5w/|{S˵JaIOb]?6|YHRVUb} yRϤ՞W::|,6 0Ϫ,،"ITT& $V8VDB$2R7%L "eWiT cQ%(r}v([bXulaǻKUǤ8l)z_:^cuf!FQB #e1J13ikw|y|t;]. i@L.stO˺_/+ #((\R"RĐQZN2qzN_@xsZw5z7v_/x0zeuNjK/ o4O{ן>_aϽ^uSRf9S̽>o!R)27'{_VGX|ח'(K*U#?Ji]Dkg{ׂ{G/>Z!]k8<$XVnߟSۼFbcޘW5~vk>0塄LF98'7g}8agwulmƮs}oas9~鏚θ}Ro>讜}_ymr;~e˦'y랇=#՞:>w#a?:`gwN~?.[w?7=5׿!{Ӎ4}1MyCt]XtY\&|{zph=1Ƹ/ s{/>Png 2(ɫ:Ŏus[ uƍgqrz;'ן"&:qkʯ;a\՘W.z7C6qAX98W);밍atEXI~ʘbZj925ڈ1XHFeV_8j*q#% a1(F)KySY&: Ņz>RsqqL,]VEo/q~+~h<~juq:?Y|QȪ:Tg]WaeTS#qx?Cr @ 0hdX}˛]?zuN6W?MEudmrԽ?,5&&8"3 j^xxN~ +늶ڸL~=sGEpgoxy]<ceNe?CyOUd8"4Ag~ރc/tl1ڪ,}C:7m79ۇ+BpS꿔r' Ʈjkln ͻy#<{윯Uuany13uZXA-D64G{?jE/ok{,lkr7zuQx%Ȣ>~|_~V*W7OyՑg=93\B!.o>/T庎c\~,]0jrKzySguNp ctZ.Ϯz͖x@O]~?X K2#яU+@/zqϤm-:gN3~;~b"< L z.N7>('5}>&E$1jh^N6Dq&w~ ~F{=Ɇ=Y m<әN:W|9k;y/\}!ϟɼ]oȜzxݵNWc8 Md 1 L"&岦Vl%$b D&2U :/Q"[L!D*bdUvyػMUyؚZ^Pa,.9|ϕ]ݞ:65ϏKbO597A+֥ uثjW8jc``:^#u;kӚ~~08idSt[ tRμXJ=xsʝֹ!d4fQcS^7.42α1ɏ=v]|Ƹo9'tOى^U}1 ˄eVc.2aG&}1729c.s:o*_`@{?{׉.69DG)7?#FzW(CEi .l'tRU+jdj]5DbΫsKbRHH# tVy&nϺyĽo]Yu猳"-V(f롲;C>k k>w+>76=]=进z0Gy}gU7Vm1:u<ޟ018O9Mȏ~4%6J)e#q`5Lhi!@q+g`2Pl`yՏMi<{1R@&C!0X Bf6Oҝ.ewF|DTcBeU*27 CQ0duBp0s*c_LG]g9`Cid3^} iEpL~s&uNf)2VWWDyaQ_/^/~̟̟o%?ާ\iG۾~vkn1#]wag/{N&U}ߙۓ:[Z^z8C5xr}N]uQat˝C9XdrpGhw3}+玁ϮJt^^=n_:{o0 zvg.9itѷ]AUoog^W1N}eZzzw/-Bk6sn[~3N=3u.3>8S\t;4qpپUZ&EO;}SDN'ٯ _g忕s;:O 3:=y|b4<¯VM/feྡ͘?_'ξHzԫȏ]iH_⧸%{AGDLj|_/=|x<?AKY?C)~z>~u[&Lozu5$SyZϔ>nٓ&Iݚѝ}P|h͑ϴD"qcqj P'Y4Lc`L-?^uy0`74}K)?|˴uٽteVKМtG4*ҜNr.'Q>T:r,}OA5yhaGKxPų|@wv=.룆3˻zNڎv{|= y=^q49= }ink+ķ''~q}-yG~nJ̄wys_}amxo#^o}=lWԫ_Q=LҽSZ{'q}a]ר)y:=fP&/%q/\~w'9Z]̵8^WXylOWzLW/cW?C l8<oҗ=>+KdV\3z^d/z]f=>BoCA= ^pMzw>9=GM1^ԾLκrW,u>RQϐGdy:Ξ|\oۢ9dZ0J6M+"FLW ĮMX7[fHtBRV&=YuVi fm%Ǻp2gvu$4dab!QV6l50{ũUel[\%+$(LC@E +! B+h&<8imy '4R0 \澕=yl/OWh;pV.=JT h$AH,O:۟j޸FK !JQ;~0;\͟HRō6V,D\Fh{ng_76bC"ڔ԰SD[ ֟egٛ맛~r+wKJUͭMKb"9N"z?+OOȿ[\2c:FTă:ͷп;}~â&fßԢR fvegڻ-v~7<:l8Mmx*Q钉ם8S.'_VTFMxc൓ Γ4[\/1&>@n[f YcxE.r4ag{{_5;Kw**V6תy{xn=RxSbe Dz7u*5D-Yr2-+4AOq:9?U>:}* UB8MP1S)_g;)W>zV$ #eB@ c!)TJ@&MiF3I%UuXcFÜ]ey235cC@H(ZjFpԅVe4]F󏍓Eiv߯4 4 τJ<<ǯ/*T$0C J4&  D@ =}2LN_xϦ^5(Y^}bMJ4>o(p?7.]腑E-+uǜFq:ﳾ0?|O;pcV-yK"cyQa)\.U N&ӕ&} ]q[yed%m*QC60'5*`glpv+`  (h4(%84j(\2$V@ 42FP5Nuo4be;:C2kd|X&Mڭ>:Q>]y|8Tfg)FTDad0JHB MP[^m?Xbu}ey}XmǏRޓO=[=_3~@Qu\ i4|__OPWD~rKۇFW?V,m+ʢ?ϛԗS>{ƳiscUVl#%*寫r~ؼ`!Dz.{>}/Қj_K|N^]}39kRSoG{53Zriݞ~.2>o J<= }{z \~6:Z,nYr%W5uTg]06O7|?W{,..!қ杇Q]ꍱe㯱uߨ^|?_*ʧoyon/?fN.g-ƍ#|7G6YF\Ϡ~|xMfV%Y;8vQF\ݵUPB$m8씫ug#18yһ Vg:Mq*}fx_f+xrxk'Hmt%`Ɋbl ifpEj&8i#M" \d& ``M%ddbbd*1illmg/)λ; &0UBc/zuO Ѩ)6VߣYji)Gc,hh 'z>~.V/O7|iN]F5TlRHo;׏>1 %tAg^W\^MXD.yxbs>y{7Ա >r濥~k˲y'7O*oiu&wx\޳ew;+N\,M|m% I}=xBzlq1Cϧ] K Xkc˵dL=;꿕#oM5Vl;N+D=q:p%}-\~k6*YgtYXuM-{M^>v?B|wacv=yUc_F;_-yPLxdU lx_zp~'gs3xuQMwtunlvau|B|L.k~$lyʑjU8kǔ*ȀޑVn+HTɀJZ9`W#23IYUem8X{qjYYfj\HLQL{bcįt=3}8xƥ$M0!*hHBr# *L)XEX'1nkRVF-Y]vթU7SN6N6EjL!eWexGzouϗ}or6fvNלM>ϖ}=Zެ]N<2+(#jr[ThomnYN&f=Uu\lRڜjM Jq!nϯs~CZ6՛PF3BR6+OOo:y~L_NWf=Yq^e;.*ʆu ʰƯ&ߠuftUǥd7D%uU1LHfcVG썞o?|/w]>]Q ʚ/3zs!.,2ccC?~,>X󭦫m YQeFk9K,HfӝPXxyXy]5ʏ5fS-AplC&wŎMx-k۽}sO̽Pq#l58uu;:ŧ.]m}d5suFN- FJ- .3KR>D/sr5v GahkYՓge{.#e5BCRqToc)6NC;=K&uuvܥK !(@h#$F*DFKk!Vd8[lcLR'qjIeU2좫h}J {)'].t'tOKnQYUnuFnל,ڼY\k Fn㥕 8BX96(СtJUYwָ4t|{-cdq˙DreWOYx~W2vQY^grXU.=Yeo;ç/gż .42T%ů2^nw\zyǪ1ɊSpiV-#F||`,q:M>7;ޛ}Bʑ .3Gadv47W7/WQs}15p՝hUzZvܺvgi:g?ڽ}51촬M c3?I9)q+̯bdc_cno篡~x:d/W5%cSiϦrq?̿M|ǝnvEĿ~&*Ξ4m= n;ZjZ{s1w> ⿴.2|IIo^80͑5m1ӳ:Sҟtg=g9Y$&6,a5_ִJ1-]hPQF)E0`0@EIcFk8:Y\X2,*PDy4dfӖM8 &5h"Õvkqk18*`41l'Xo-Y3Ŏe }rO5HA'\I#\f$Րʬkܫ"Lll]J/ܻ6 %e7K᎘QӟT,kΟCGCG?@=~}>;wE"kWo]QzdU7yٞy7Ϸ8X6dsOIͮ/5'_k#^}ſq'\oQդ٦=]*$ҭ܎~=_Mo9~EۇĹj%Ye^ fS^:91fn/Ni@:a*Fsk5kmdʶp~ *>uǝR3e5ϦO>g=Sj%sJCu#ɸ>1y~潾bX:K]9ց駱 o{ɚڼgs=&}{yF3y8K`՚ŷk}9yvZ=q>"o(롞މDӜ}Gq;93h7g/$K|}k^T\։Gl=0CYO9ktsY蒳Σy}.K|'Ÿ~̆c[o_iG+_;/}b{8rMAi1  6W]0.󅗇k=/YoC73fu~5طʹ&BА$ X-vXD"¶LA",'U7f%JFlc88SNfT)2UJYpɺJQD"1 5 Jk(+S/Snɧ8j3(84x f=Le3\&p`0Lכ`.ؤ׭5fmߘ:iE96%kMMqk{5hBn)0]fmCVqچ3.4&lάٕ6lխhXa3c uؓhI [#VГVmCWnpN6E]X`BpZj?4>V.c/Ls.90/e*:+vGӲggg>gr'w>;y$oo&ϩ}/_;.v$z8ګQ+OE#>MrhgI~GQ㧯Ux^~BGPv{/|ڧ';Ng?b=54^r{;^< _:`;0C\3eo/QH۫R+\#/Or|=~+ 9AoGT{Ğr޽+޾11}?7^Z1' .}^|bn;š{>#'B{|!k }֟$\ݵԂLX<_!wz׆=5?q. /:qp!S#{D, gJ^c/pXG}?>AXy|Bp& 0m3s9{v?U?J~J*`J" G{k1}73E0ΩRBN=Kߖ¿kS/}cmyVE,ŎH6^ӗb9|Gt^QFX+Yimy-oٟ7鍑Ag:zחYٝum7;yC-uz5Ԧ!{(o}9ɾ]w7]lZ( 5 Hn,%S""V++'LrJ*8/ɧI0h& 740JA2eAXڌj!f..rs1c[3se b`0"2aE  %$ (L"4F3IΚwl,g %d#5PʬVUsV6F>..VVt0C`+]' t=:6p8h!`&`bL@i [_kX"'ypR kɽ^L>_;}ux#"X- Y]SOO|<䯭~I?3z% Ǖ,|ip[G?OӟXƍ21+J@<޷5[]^fՋ]Zk(ָsBVEG }4}1S~vwH͊TrJuN &zW֟'}c׆/_RsTdc57Vv|hp@mHo N 7ucPbn/6ϋ!ˬdz͒}Ak[|cm+jɷ'ۇ-G/@}mGֻGU=cӋUqͧ<7:#*Y7s >b{]mj%+HBRUEN-QDzrU8ؕבZ8q"LMQ} d  R@4 TXp ҥ") j6Q++K'UN&&h0CT& im2h.Ib%.bB*ԪjԦ1mƾ^1 L[U!8c?z?|.~pD&2,LC@J"` bJ ꯐ-gD,|ngM5t2}WNlN_;}u8TzUݺrwzC\{!4>?7}pߒ~wam\P ^= M˵o~>do^ą8}37>]ׇ|>M\6o =fY`N6E2SzgG˥%=D `E4-mVy> tfz?"}w׆7_Rs9xxVE1WWw˟Fy{~y_/?6qo <+;jL]1}\j)+%ײgy']o굪*ȫ:-jحd֟%c=Wz\|s=[6Ɇ]NQRn B,MFYeF 3rěZʵb!)39\"B! L  TI"$*EBMa `0IƇӀF)! # 61)"*qed!8jSMSbo88x!L@`.:Qyl'Ҡǯ٤:]yqR#(hC&"HC9"HC뿎=׉OuN=}UWdHpSG~ڠXRFWyoC?!eY$8^c_h>Q=#}+^?ϑ5sȣj*筍W ~u. T#㯱p_~d<+^*3Y_}ۏwWˬFRAM}nW`lǢzA?:s}Rxz \S΋/~i jNx'ҟ#S^B6GGmWֽ<.EfTC鏚=ק>+oXnŽ_#F_xIew^XK,Nrjڅl%J+sBubl JRJĂͤ+IkVz\'^\:OLl$2M i B&6m5`4 11@*Qq1  hRL$ГI\2B+Ԫ1110@_ؘ`pJ<<ۯ?'t;v.Na⾃k8 hJh A$m4"A }["@,FWy\}Eއ{]덌T,ƣmg~ȿ]"Džaz$AX%?Ӎ_4-VFF>v=Ufb,KKc-E N[^lu)颍βxdכKE-|eu>9~o'鿙vfSVT1qz\Ej ێ믓>aͳsݱKȢ)tb|%fWF^%5]{ecQߖ4raVFNZK[,64/ޡ徥xr}S]iwW|Wʓ# ā%4$J 9ݔn"2-o>#X/Q|ڦN {Q64&&2T  C @ u"(LȃUJp8M8*2,L&HPBpzm:R1snF7:N Ma8c?z_u򜪳hUJ0Y !bHLX Ђ+VD5nKQ4@+rFߏ>.Žźq3?f*Ϊ1R1cȄ/Z}A}Lf/EJbU7*Mk '_![Hx$X@Ŏ\eYQX%sudcvS?4omlXf+pc0b\%Æjfϼ{ƿ?_xC]1tvnY˃ 29U>9>\b󝆿wuGxïa3[^!jưί:<֮>rqלzB➋{HiڼoWNҬk]/>O(|(W,O<8׬8H[V C1|3o9#f~E8?O9aqz:ct5|cz3˾Pӣ)v2Ȍ(/QAtZU%2Y|G"NJt,mbG1fzUG[KG9~LɦeSM8Ch`i( b  L#T+)Wk̈́# ƁQ9HV[%)[<\@`"4vqITTB3klVe]찵Mwjqd> 0M0[.:crV/q~LBk;8ڳ}/vec[93kɝdS]Hr˪#:uԇ.p9ҳ:_l>x澗ιz=Ma1 53,0kdtG1ʣ|>R߭~>\k'eņlcjj-xz-p-zO gSUd4](Ć\\m3*,ǃϟ|),+V\RULVJNkW!^T|?)|ky|z&AJU*"FJ\z37su]UyLS!VEȢ9V˩]oKwNZMϝv<.r[$/fKgDy(z~T'K*lc;p<UNWDixex{4Y/QxU׵=úW)9'f3kH=+ xct#ݧ=%Şw=~W#=rOi@>ύ=?}>RI|Gа >k?A-=A!|x'U g7_>ξ3ǼgnߢoPO{<?UzWƾzKW|^o>ϑ_qoGc^ҼZLKFg#Ä+6Ϫ{_̾2y.727^'SKiTaVr&_};_=qqDH]s:.Wqm9u?ռÏ돑7l8Q D$Ѐ0 &! l @ځ)" R(@BHi0 ɷrD'`2'>){ۋ9|um{wgLHMXM%hg}{yGy%{VS6E>y>OLYOn|jQ&h{ǁ, b+h~t'FRedn{q R &EBL&MQ'  h `ЩBq֘z߉vϣuI"lz2ޭR,18E:` eB[%f/lU[睏"NwGLb& HiBpJl}-` 1 b ޼sZW:EY!Njn2ƓogcghI4C@cdHPjR*VEËadaqd\6@T40@04(TbJ+_! k"\!LJHLL0L&RJ M2, ( ZhI!$ ?{66V5?szgJ/< v'bWLVВC|?&'sk(q,X ;lvfaf爚&! h}6^y@d”\T@_,rϸ2@@ĉ$ iQa^D*ilrءM6v'ޗnxZ2%(N& i &TG.0̈Į~m/^z$эAqh6{7ϯ평mG.4% I`N37]|o|WڼW2B$&Ȱ[]ԀH{ v7|:y~VQ `& !N1r1) &"P )@ 6Dh$!!V$JP?fb>ż>9.jz/dlqM9g-ǒ8#iȿ\oQ~?+;|w!`(B JOeGO7O1_WϢ}y~<eWV[^Qr^hs'W yc掞 ;{*~~⏆׺/M>>t:C/b}|CH6f›Fqr)`je-]l}_Lk-[3msMXhF hi t*lRUbluYy'&MRC)l4) .(DQ8YVVx@FHI-mg>R\ 0IMC}\}ƻpJK$$&#lp"%2~r}Iw/{^9ZVNS+j@$-'-H"!l p@ Q"`( MR 2*h" $ HCh>F=1r׉ICeL$ő3mԼX_mqaH# meg9Dž?这6CK",rRT[**?\{ӟȶW/I+^_4c;g.LSoMu]Um}<7y;:[ n~g&UmseIu{f:mox[Wc|Ľ&ƌ?#q[o k뷏(_CkSϧ1[/GwЕϵ9Gw^jx~Ǐ_}w|8ߎlY} !]ȁb " 6Dd$$E X$U͐v2R \ŬUO?*!lS)*lTUQ0JHM 8J?XǼS~Ǽܽ/|{F|,_@О +<-w{ܧr~g֟$}jo)mu;z+nO9x19پk߉/nns͓ʻb.j"V߻}:r"x:~23\m~sU'8mZ{ώPQ2o`}xy?J|z]!)o)-׏ 7 a6}Eu!e!T"Ih"#~{>vqkKsǰ(dQ4L&'@@4!Ɣ\iVar1w2 #o*K!qEHI&E u(H{u*+- VfU}+ 0C1@M8c}>{ӗȶg/]Fg;ď>A5XD.Y+ߟ$"gyq<WOxWݲ~>y8Ƨu?@NחCνeǷfRgeѝA{~Q|_!۪.Sβ:s5ϲĿD@ٺߛ2w曟QO/|hv{o"hE}ؤrQ "2#$M "I0ƛHfU&&I܊հ*#4%6FSQPTZDP[XՊ I 2!J 'm,LkK=N}C-8_.vzYYsFo77 = Gﴜ{a>g~oq^Ix.-yν'WG7Gy;}ٸx͟J:9c匿<]1To5Klwxٸ;,w[ #Ec?=[bdqWqvvCW3NJRΫRKZ;.0vRZjVލ=LD0 4 4UEUk:Tˌ+ڪqd"%*[*qc I 8㍗Ҳa\'!z~d\vcQlg΋'(h@ JHB3tٍIY ^ ۬,Lke`25(2%qL~+t#)c)rFdX|Yfeoyo}7ξ1_39ϮAv*Qr5=:y};ʆ^zf!a30 `-#28,K b}:-q:Ѱz6f.LAPʖ(fA)bfarfj `i&yfZ-xjݛ(F:Wf|6wjC4ŒlV f<$luaPxXܪ"TK",vői&혹x_Ki[w ԴE葼z'Vn*]Դn7/Kb~k#ϽKq[FizPܚR]щ4nV>8y?iozl ;MՆԳjZ'IzW?>|o˟xӶZٱzFtpI XMrl[c5xyG˿j|uzJzMvK\&k=UY; Hp&04c#e.FRExLdLDfD! @I" P#(REu2W)NXifweؘ΅ͽ NCYJMuR̂e(!8u,JL-y5Kk(kάlњh@L@+3Z1syaxG^2//fك|2\U]w+Xr_^WOq+?rR3qu{>3^ {_=O^//z llxQZ{w __@>}>A>wB0<_?K'WW>{9[%'~t>g·A19FGѡ=G!t~JH>k>h$ϛJ>l.l_JZT>kAcL>l_JkT|/_I\+}$I5C6H$}"'ͧE|}$/͓A'N>l|}"Go"ϛc ߠ1eP!?'(?6~nH:_H8G*WΧѮO'`|ˢMFb8?7;衯|쾊e@;D>"ݛ̈́m2=3D|+1(ˆ 4#0C1qk9Ȍ`IY`VX-eY` Y``VD eJ+,   +, Y00+s+`VL MSee0 L L $$$$$$$AAAAL!bHHd 2Ł2H*.A2XIII " $$$$$$$$$$$$$$$l!R0C0C H$-[$aAA00 001",T ZYQhTEE)WX2PHN I%QNY!`&45dD7WJBia-K m !Q&V7RULRSJ8CYf8ԄEcY~]ۛυ0anܽUlNSAp;eqԞ:g/N$vxSvxdۍ>b`@011':ҡm+ UAqH\RB\e!s ) q*B!+I'L a `Hq4c@1 AbjLL@F0C PM0H`4  CC``4&4 @10h!)DLSG LNh'@(b`4PӄL14BhXVP4M+q!8 vyҐ bg +VcgbeIdaBRU@Ӊ0P X4 $ T$Ѐ-1I!%I(cCS"6!ZמTu簢\ȧ>\noAT1t=>5L*D@BM! 5$ &@1C `"@$fH CLPM% ICACL&5EOjv:LJLv KZU %8DY:ee"VTr *[pLF&AT#eRg[ES2k1ƕb̻0ʞ.uXL*X,U-0q,YO b)s%02#*Xh˖L׊.l1m:;y~}<!!BmhB hCBAq` J#"v`@ C%R@02*'鞻 +#Z!SuzRbgb`wZgA~\s}Q|z0I  LhCILe@@ bD%n-A@q&Fq`вBI &m+ @*53Q02@) $FS#H- "D($lBm +HFI0C 180ȱIIc"JWǧ4L0 5`Е@ 4Abj!H#$(J4E"NB-* %(2VUy3!s+jflf l$cqp ' @ )II&&pj '\]5(,ALZ9>yr67)>LL^]XY1 Wl+u1tp\vѰ"3Pđ  0J @ @ LCqdP DAThEhh40in+"(lh5C@4@ ('f25 đ,8dSUI aF݉X9FP F$S@& 8I0F3`RQHj Ij#0L` CC"$7uSA Pt `A5@`&!D4 @eb!1 %EQ" dqK|!0`0CDS,YmE:d-+! Ee8Yanq4P*'Sh$@RL"Iaqu]EV@L{qruY 4fY +/S]pKzF\w$0I8 cJ) hd!DAFB5$2a(Qci L`CDJACN[0@ $!mQ`& ɪI[4 ؒF$+LRI%LMQ)I"dM%&*lR'&E+"DRD]i$ b37XI%CH"DA@@M\&p pPȰ44j5@!@MP5 " ATAh" @!(!!(HDL.{m8b@Y A6$@uم[ft,˄YnKɁEYk%-6@b*DXE :M r@#*萞=&'UlL,yJYI1R,vWMf.^.03q|v i!DpƑQD"CBb`0T I EINU @ډ0DT!i0iW$HC T۩yPFN@Bq`8( RcXd&4Đ"2Ra4@(&BF P )ʲ%1@iH`IȍXQWp]3v@ P@*b @!  "M!BCe *IEcČgZjE#mĉ!D7*و#.6dXJȔ2ydrtID!!NUxSd)&$E88QSTetdąI-\-*kM0dSD+붭JhǬLL=0.:h! 6Tm` !*C"2$(RLҩLM"A!8 LDh t 'TJ"ԐJ@Y$DBKN2)F`iX H ) QrPjDD8J4br4Dt,&"@A(ШhA$ HJHlCCLLhdE! T9|yϨ1 @"14B!R!&e"5*"eDX24D`j.*$Dn,l- =ݼ6[͕rkV7YtisvʼL(%XV o2 ,$HA!!8QSq`*DJ8 S7XZHR5]B+iƬ\LMb/QdiFLAjȰN)!0hRB$ L@&  14Q$E@`4,RHAū@ f&Zh68ʡ4 S)J [DJ*&8(6&)6$E8h#!&4!(BD2QX8bH")>=I14X@@@4`CC  - GiBDjd&(J"N!4D Ӎ(4lLIRTYcLJA^y^x˰α~s0fF3D䐞, \/޽^V5 4\S "d)!e(Li&FmaeV4a&@:D 4XE! +]ёpop*N  H` ĪqdVR4 ҶB$DM1J ؉)!J," hdp8& FqE]J*Pĩh`q& %3@I:"܎ PfDn2$VƀjJ THRb& b(RA(AIdZbm I #ڡ! %%^}~}>k@D $40@4 V X A4 T)D@-" 1H E"jBbQr-@Z+^ 2# Ʊ^y}]i[ϓ50cۏqlXEJc,eRˁǶlp,ҩE#1 &9 bʭMUCdI "dBBp&!\Q!ew5pS/Ynj3- 102AE&e ![C" ( ŬJ1MRLbdZ))N[Eȱ  I !d%`!(R`]VOH0Ԣ7*SE Dk(ICMaHDI *LR8̶2jDP"HhVA[ q BTҔ d E @ @)2#`4 0 Hм}HG#0 hh@!FPh4L@#8M[HEJ4DE$RiE1! q^WjQ14 K 4)RP8 U29Zϟޕr:[s4(EL&EL)-V ¥A* uΫG(&QD*d5]nPHNP7eNJ& 0I## ¡\V>F=ؙX zftMj ĖQi;NV0U8QD@h(M2jB`Dd)H1)b 12 +/QE&)KԢ rIDM)(bqDFMLBCjD@XJ!(@FB'cB2J#(3T@LJQ&EνzVhр`   M( %IJ#4$d BČg)"P)Y: UdR\:TR"HI# ]j$h%HBVctM^auFrBEIP2bRBR* Q*41v%nQT%(J$' 3)'5[Dkǐ+a&&(& DQ# FR/q251(<.ZM1 @H1 RE CD Se' qcp4X5$" Ha$%N-@&#dFA$0&.|BADNDeIŃԪ-N+(V#S9F1AgD)J.`ń$h%@SC I)&ʱ8U;O?}EVC@1& h!qQI`\lb(+Ab"E8҅XBJDDVVF3nJd FDE @@DTf9jJQ\%( 0P „»*$@tNq"DA#M3V&M6 RN4Edk,rc6&V.q|:b`C"4@2,$ L$"QD4$$H(8¹TYH3=5ꆐhV@hQ0410#$l"IRaj!DhUc&*J HC$ӆ+@"a DM@$D$"TT: F>(g +#\LM`#I@ HH@(D1&DFQ0i%I5 Cp "4Ԣ6I q  @d!cҕʷdCC$i #L5*$SHqmP4BlI lNQ0)# 3ĦI4Ha 1Ż`RA4(I#iD$M+Q8'<мs՚8hC@"h14GM:#$ abe$D\I¸T!$(%aXFur IAB 5`hCH X *A5MŒHMR 0\IŌN MS @F1J2(jpWu'5[]Tk+U*l͒BP"Uj;F>[84]3ټc[ 'H !@gnFMf.:)̦BY`%(J' #1qr)aA(iTEL"J,D[,RI @,Jd%(LMI14h)HL(8`u(JӁ!e$& Y(@rqu !( V,XJN2fqapd&jJʋJTFC0)!BR i)@+#*RĄkIЩ%HJJ"K= Qi0HV! !@&` XRSBN EJ6HEdiUuvAN%u #Mal+vzBgalj#VpĩX dI!NB(BkEq]-*[(uY7_f/[mV>5:ml1&$*Q#U l8HQHHFqHS|51m2`-2u1hQ)"1(TƢlBR24H(@$BElLM)$RN%bJB$80@ȍHM8B"I ԐL"M RI%iFP0 Ūn0(ĉ)!DjdSr)Dȩ H$4:!H@4*H8J2-\RJ İiqt("DfP]8JC61DT10@ @t!0i0@ 4 HBBEI @FQDF3 BRejp5,P81,q?'a]Li". 4@e M1S aTM!vH2mȶ`VhjblUwBXݍee+JrM@ jLdc8qa# #jYEKf;Mz4>aTI!$ I$4 ՊQ`0QL!!J0jH*4$d'* "L R HrHIIA !1$B\""Hc$N lIH@4 TBJ╄0LpDtf8%hQ!N-A%`S!`88%QS7khD$&ċRqq%ȴ羃tϦ26"ZhqjL2#@ `+B\F%c  3"MX(J4BP%U Jʫ*gj,kPaU%Br& 8h2D!lt2"ReV\UcYVE)Īɂ*|IQVЀ# JI-cSdgU21hm5XeY[\k(b0n(m6AI(JDTJI 6ŃV"Ѥ(9#&"E,N"$D$DeH(J@ر"d4(cRks4d frDDY `ć(:E (+qNJcP`VqS"E(ńlIdDABL84HC`ȍe4Ie]OuQs嶚V`@H4 %4i#C@@F ` F2QJ 'B,!4E gBqH%q! *BWzA=;rYdIVVYd,(hbč$@R$D$4Qm$`Q2MT$%47\HC"+MiE ʫHm U/L 뎷l6VoeKX 2hP\z`|*HH8) 6ҌC FHR@B` +MPԐ!"J-XiL"`4JR#$CN5$'E!2I DChQvNY"CY&DX#qj8S4RMZRI:Bdeg*hTIDR`CJI8qS@4ԊabN(nhR@)F)"'kd$m+fEJqRHTHR{]J D @Ȍ@&P6D (4Bh HhtBbjĚP*YH$ql,Vºw~˯gz|܌RPnUVSflN()ĬUa"&`]LDY p0P#$FPq` F3 qnKTbud h$Ւ#(PiEUSYeVj=g;_-겯UF&>]^Fau,Ҏ,C 4"$& 4`Iؔh@hi&8+ ("*T؍)IE$"ѢG%dJ,'[Y$nPQ6B,RJ(DQm j3cY!Eq&)e]jiY'n; BL&"PLV Z!$B,jDHB%E7j q`jPĒN EŢP؄ӡIE|yϥ]Ev+C!hC @ CM@A0C ƤjBM!*@8 #(ؠ+U`몡b?vxMt[Yˬ :[yN^~nCyjĤRQBuefD"@sKlc -U;Ld[ YivM9SFN>f-(q!)&QtPck} =nn\X`8]a~w+ZnL:g 6*1 sΧcvuI ,@aDV!`QjƑ&V!a VR݃JV$HC%CmF$b'LSƣ&E4"LŌ@( Ek2J+RiÄEs'c")DCI:Q# CC`86M )IőcR$LJDN22B"+DH IDNwF#``M4 $FHj2E IDT !dF" !%*BE8Cԭ#\d!dj(h7qϯKC;9:Yِ\ۗޥf|>z<,8R$UU_-T56 QqcV55۝6610HBU8Sfy:6=\q |οY9>ߞsԑ "S(vcB9͖ Z(iÎgLg|jL<<=K]3\dB&J# $1 #! RT4Fȱ8$ I1I!hVbhT1 h(h G(2I`avW"J,iIHHc Qr k1FD' 1H$5(QFՊP@$D[v0CE"PI%I(RMSJRj$BnPԢ)Q3E dASP ":QcS(*&C1&iCL"4 ))!@CAJJeBN ԊaQ*lB7y>xlvʢIFݧI^yjw[:g],ڥ:{y-RӍ۔,ǞYu=?ǦyYE˞(n,m"RMFcQ +˫y?t~wd"6z xvgq̌isD%0QHU-~#溮2XDiL&矷cuع\Ul#/SQRH-I &@&dU$R'd(M-IA!18RQI8ED؄48!!b$BbDP!(0@22!eS 7 JI8TIH%q#`%iFBS&! PZSD$(9TZc@8إD 89 0D⤄%A(&!$INkm@d0&&`@#@1&&CTZ j  @A5Hqh)¢0 &Ӎes>G>iy-N:*͚>L;1RکNasf(cXТl{s-^Üo:>;p.6.|,jFULf)-' @4(8iyl,%cS 1*e\ XDT$ Ozy]'{uǗ_tޥf-Hu7Όr2ljB\Hjg f^n9Aāʘ M $5KBIQ0QlPu le98Wl/"M*r)ƬV/BيDF!e 8$M)*SDB!:4 8%0qH$:ĚLM 4qV0!Q7 &06F8"N:M$rHRbb5$%.;c8 BFM !$ !Bq :qlCddN!(Ҧ` CQP:bPHIFDd4ЛqA!D$$*dHO3C`@EBc@M1$hhI4&4 AQ$0WI@ED-eJFp)DՑRU!kRTtX<;n2Bv{OC Ykq=5kQDkxY귈Z䶲[!) <+K4Cq!9TdYT-BR'Fa$Ӕ@ 4!b1e+#8<áɾEMf9⚭J궫1qu1궙ziSf,Dbj&$%%PqFв"%vqC4dmH3H8pIq#!"F5rH (HD:(qFJ1 8$4HN2Q h8`}gF2! P*BpQ(8YL"qjRd'Hq& MHR0Q$NQFP`#1Q iqp2I 4r-ɪ Z"HqI$(`2& qb&@!CA@&11)E+"h% !&ZN0BKH`4B2\wB;stWc˽;e[O=2~mNnI4vݪ3}QE]}sk2MV&˞.RA"q %)Fb U !1S+9F@$a"jhT2p59S&Nvx9YQMBO(Weu]V¨+Swa0BZ`14 j@M2.2I Z& [7H&5bb$ ,@9$TQMXj! Cb EB!X(pi5D8%mJDR,hp"B$)D% #&R23"5BNr"R(2I.,N6B ĔdM D% @r!!R%n$ #sNPN2d@A4.{jlz< {Riŀ0! D:@L#$4!1T1L@IX H(H,YdT$t%((f_{,ikK=ygvb׭a-RYpJ2,6 Q12.qu6`(4ks̆ T0@ʜJppF]\`$*BTY8Q Tb좘ʍjXmu]vqq/Lj2)=/+ٸJA$i#$@%41qh""\d$-J,nAI,\JUQ ŲVE+BX%0IƤ) 3+$P\MJɦI8nA `)rJr΋$R#DI 3!4$i_,I&I$Q2*J$$B*NXBI"NYDijMW"iDTY**ҙJFƸ:x(Œd\HDHN)^}zk0ަU[&J0N4E0=_:-% @ǿLSQ)E# «YM鏉5NF>ut:\t5\zOyi6xgW^Xّ*ީIteUvE(n1&K['©RLlk׏YbeFِR%ʑnt2rRkt* eH^T:tk&"ҧmʧR3J$Xj$D, P V:9Ʀm$"[5 EHK%UQc924FjЀ5p섬+&$6@%[$J8ҖW#cgb%bE4@%R" @A$$" @ ! 81 &J((ʂ(rB1"DY('D] " .$ "I% !If;[Qfso>D*lR=o"_]ُRqc&bRVS,;vVvg廜'Q RF]m[4jMυܶHrCISB1LeE&eKE2oU9lpdI F!b1Ѳma QFUҋU d+)ǣ*ѝk4G>Χ`c8|s&S,̖ 4ia30uўaF\&|p⹫ &\qbf ^<!6o MHRFjQZPu-ĴGOM$ft\'Sg?boW;Uu8N\:7*^fzE)·Fuq惧|:ˣ\tb4yr8|zH)#|:Órל:;#ھ47Fޭw,Mthݚ8BhZ%뎆^Kϗաdz|΢|u&\yjrxԝuR l;q;^\l\Hw.Rzm=H=PeBՏ)I+⾸=r#yx~BAEk=¿ ֟Be|={|gxǻO'UJ/ggѓIm4gF?WϬ_?^ϟ i{i|go}|}/>}xg_gt}w_έ~>vIQ}xKA=W?􌽮·5X27DǍjB2 ~Dael5*ȩp̤fzrnSϷ-u|zs4m,яa^CLuwtgS%1Y,L)d^[1j0b0D7rHJ3ʉ,F3F, C(1c(fC"5YmeqQ+&P̝6ڸ岷,K=+/Y9ՠȉfLUe$2Yq0ͭ1mʚ%ke8y!ьeJ{ۧ3>9(30bz#gӵH+Euu%} 9_^Wg]$˝Wn8mi9Xvu8=MW.΄+7UJT/ K B«H0INFݞoR֧a`՞ǟUi&yU`]OF[c6Zھ2VFa)HQ6cJQ+A72*r*m+J$B@(a$ǺUӮR8leS(N5+y0q啬4s6^η k'@ԢF2SʱR!e5B!ppiu-11qӐv|zwu :Hat9FtR9H'6ay4X8h3_S ̝Np҉.G3_W ykή)YpZi.ҫy:99z.S.QpqjNjD}tЗFٌ-먞*f]BU:f;9 .14ƒϾk} 9tNr]4eN盷vhgzΊ[Yeg߬gj\kZjRy;[ty.}v釙mNzɍl]! i*к*:Ӟ7sL1Vz+iΆ3\ݛ#:P掊'>9] S{:,ѵ~>v,i_98֮ܭ9oɭ]*uZ;7W1.9 b4G5}Zz$hN5Um0L,y|ΞZ wMf;s&'G6j% bH-YF;ZZڳR5` lk bFjLh$HcJTAbHqA4VUK_dYUl,s& "1<[cnp*`ur mÿ͕RLhhbE•6S\w5ןޭY8ӅѦ4E$I puV[dx93Yׅg"5BإJqcS]k1j1T餧uKZ#76D{9&'Zsqg#Wk65ۋ[hn!Β;{)mY۳IZl^̍lMSIMMƗzWˮwsc'˅t->IFno1,_(emrM-Ryjͪ5hR[jyB`ݲ^.d6M5fWfVk,0Rkf;(ٯe7*WY̅ap5ivm9F,deY!q7.]ceN\C*ɬb&fsk}ki^.6bAu[Vj su5I:%@mI[h͔[fUcШWy*;%;Yx7/˙'dvjji{tbh+1_ɝ91厒Z=oacm-UwZPn\EnD]! ,whK[ĺCrFCvH-tf.o"h2hͰ6予na5[RMDު;TKሩ@2P( @ 2ƿKe BُdhFd! aXw׏]2'SvO:21g%,Ӕi@@nį.N^?̻M> Yu/N]/[a\N$ܪICX]V56Kw'}6]vi[9EXT#r1˫Sk8Q΍`QƬsN̉q^\3a0iWf) (l`kVlb( 3ƶ%s^fc"RO"Y\C-V%Y3sgnC7?{.>D㝣-KUl %qȺL)f֬$pl毲̋o9X1!9V3`bU̍#i,R# yĖS\Ye82b6`V4Cu&οWaj[|R6.Y(dNlǷ"q~u+E[+Sgbּ%8hk5 Ig30 3R`,ĸK5QF 1 çaRcMpF̉e)q\W%Îdk e_ҔlቌNQ4(N6af뷙l4j16UgC*TfD/ƾY+崙ƴ9nk&uKVDr Ё#djҌaq1n +ܾy Yn.sVS(4Xh75:.sW-gʺ 5t6+łfL؊œfa|lǎDldF)ͅ*&Ocdr]w5lp ~s|],Iȸǖc¯bQ=Q.2 c!Y9uYg1aיٯ6`-6ҥȬVKd$d#e@EᎯu^c!YBeE1cŎLW^9q1*Ψ QJ S <-ȄɪI DHNVQ\l2w2cJYf}U B&$j7;Σm=bgSviU*rXN  #@F2Z$WFJ1v:.No 7\mIci+q2)j69ӭ/?*]c(:MsK(O˪JdeQUQ%ȅaj~k 3Sk-"*-EP5J#xc"0*Ϊݮ*."z).f5yѬ5IފZEUMc45|^Y2vbhJ1y\%1LZj:3.psXSUl[mm c,%Kݍksq-ES+VjЦ7JV@ԄxY~we݃U~6+y徳˦nvZ@Yc)- UKU+TZ#_)SV%^5Ƶ*JFXש3tˊ96ZUm]Q-.֕p$61Wa/.hs!̮u|kqYųJ'U+1ȉR(WƩ. TIBYAj*W*L.VPTXF4oUŪ%"%"(4uu|p "AJ)J_Vf>JqTn0.)kv#ʔVNKT*r*d,Dd h&(&DU"}b0s%d&$WGJl$"F ( 7ˬ',ёU2DERv)D9`N$c8XN.)_;lhFNBS ӿr*ҸFD$ەqAaUcf=yTeUyJQ[EM)TI5d 4ectBq榃'c XƓ*ɫ!)` TenaaY`VX;Yc)VJD @DÄ9 rB$6E0u}wL7:N}(ysWŨrrR>gŴsR6`*B@%d4U e.P$$Ȓd eȁDm5(.kȾr !)`-QTo,/KS%pE7k03u9\YeVan52ZTwءt"jDsXٕdµb+&TUTVF6%4ҪYRUPSu(I%p5UveTSZCMdL\*/&- F"i7f4$Չ% D``i!#( R-%SV iH$`B.#ewRl2EX8zwBrD)«fU~~>V+56BRJHaA F̍˅Bl6ܩDNJp8NҮlŌ-URV,Jad5#:l&  DņL51cM3R& F@'6EH*N"UBX j(uMss;cǞ2\5DxKu66*iF@2cTSRv`i\bK% )T6D[ I!RB 0C6D``)! "B(cco:}՛dr+ IӑdOL-~:+]dsܚC0 І) Ƕ X H"H(vUc!5+CȫUmRu lU4)$*["H݋Su#\7MTdb8%MZA+, bAMSD#jʣljU8oKV[D@C@5bʌ(NP`!1 $& 0M M 201 LtJnR$@l&]8$`U93U4XY6rdNDEfUeJ)"2dA"I`&D*ɊFstgHM<UƮY3Ǘ!nfDʘ (Fh7b[c +ciN   P&0DrqL0Il0JHvBKP[I YMҜra0hpS"]ae!m3nqki HC) hC!WuZ#(4Tcffu:aԘbEHt,Z%4VN Sbij뜝GןpX?u]XۅYPrMRd Id! hlB3mU kt3gs=7|Roݝis%ëi8l0ƭ*59 Gu5ϻιE'ErMIbETDY&1@hI8Ć10##L)]rFD d(&B씫E4ޤ!+Ʃjl"cFuߠrDnu k"X+d2{z'9<'MjwFJJR%! *ePMd]0jBc @1 !BpIJj4Tk 9'"ISU01Q蹞pnD,jbp&R%$EIYZ @@BPXJLJʮ5ʆ|KZĆE.!Bm21'Uiw~9t^iV<)egU])sڰj$+dIdI"$4B6F'' faouΓSט=w=f9#&Q 5{]5dX&&~RkdM?b`+L5A5I@ҶY(8b&18b`в``$-HLB$pp躭2 TUYVbQ`F6FV U Sʨbm1*Il7Qs۽MWEsoeNIPc,Fi"TI)ȅbU^[ f>ӌL6Ehe'+8; 6\\so!\-pfWfrS!J X)) %$@&pSmf&}cOLsyens7$.=`QG85˧xZ2"5٘y-.>w $F@ pRqj#"TJHb&4(ZBpDIBɐK28rNQCH@ 28;Jͫ*O.[)WW2i(`IRC$ eՕnQSk;rK"Wmܞ⾻ϦT˝@R&D!$vcԔ5\K|n /=o>enevXN"JĤ섪@@ Z+J%5(rRԝY.2Q!FW,ۚ*TY\哋 b&NoF$%N ņ?LtQo-Ӕe4VaԦaK-YjVKR*EA I4  {evV2bj0 DUBl,ԂMf'!bW"1e*آNȌ&P,Fh@ # #PQTU^&V.ttU׎Mʚ_w-1U[bKS6Fjd5f}hJcFCǰ9X2FT p00 ku[b+ Yʬ']8% JL# 8i,`!-fE\u܏ai?ا5S^mZa]Ћ ,["@4QbnF6SW,ٲq^ƻ9MOI=P(` ܢLL@4"\jc[qHQUPԮQd<DlU]9V&Dm@l @"H !!=8CԹĚr!hU!! (B`d_*'( (ɤ2r$'IIR)F*/6Dqr$RcЭIʡe ^Fed:' @ۏvv6Dk ⩩2!MDЀ*I$UVg)޽<_gebkqRFiԪ!TrMUn. wZ7M6 ",]I22`& 0$ЇteWa RQ^6]beUUJE[!F0HIFuP+l8.]1ݩ>/Ijt{cmSY2JЄ H5j(9F'I CM iQ$HTjL-VcS5 g)+UDW kʍH}\GQ{,k,ȚTS* Hj:gc^鞟&*cH dKdI ($$@%,gsˬdfe\ZQ DJRJP'HjN(醦|5+4! 1jԜq[25vZ%$-K6 p1s1gUd.sRɧ( $С:\5h @&!&@Fq!"UNMi~|7ʺK;ŷlEdpL|yj2p N;63^6f[Z=,w(r,ppĩAZ D  % f4( 01 B$ln*BI(ͲXFr  L&BV0EZ{%cJ+r![W=p]m6R.!\WVgIta(Γ!J)(BU+T`@0@140h`%$ 2EPYSIDJD @+˅SVjVe+\ڢ3 Ġ*.UeZ;'+aeSHjmMWy\BqPJ +Ȯ"2{2V k7,;2eDaH(y )]f5V8!T $""N)SfdHb"I1Cd`[F^>~.MƬu5`!e69TK^آLNQ!CTWev7U!8J QUA#E֯5ݱˮvBrUkvxo727CiȢNkQu*S2U@PN&J셄y@rb`` h@@0 $,PŬWtF6EF..ʝKlIh'pueRgH0VNpjK(EѤ'a.f6Y!¦Y2(nLYD L\  LhL4%$$ՈhRӄi:X8b*I2M,iE(Sڨ9yVfg-ݧ58.umfm $iʢe Xڏ_E|l!nl1)]=̫lDrhuFR C@EcQ!ΫYm:R:9f b"ƾ*h[Pɣ"V*RD`8RNP &M5@l(!XFQ čWZ-ޛvٕ\.N=-S}j1mg.IYP0QezM굹N\$(J0!E' +h L @FT*Ĵm0bRQ L|MYmZ*y/8'FteASMܫ*Tٛe6R0@@%-Kv*꒲M5bk5t58Y._plz EJuvEY=̝ƯaWESy740@ h\lb*M",ưb qbB6*laU8ZHbj7s>'/׃͖Y}Cqɏ-ko%"BpUVsx\pݏ)i.[qbl#f#>YUcðxŎc!#4r8T&BpJ]/99F{lprQ#4hIC FEv4MhJH,ɀ4ZF.4r$QR"2"4TD*ԏ/q'EɌb6Uv[FX+:oY䞴l2*C=q4e$*)]TW0q h$FPe Ua7 U*JY:LRɧ0nucf»+!<ʫTk[8[v>u)NfK+u[NQ`  HuK]̈́mFYKH8rR2ZV"$FƍMny{CѮ=c垑Z͗-MVd~#a_wD/iĜ)d) b10h C@ IˆY9cY ĘI10UE!f4%^V,ʌ\-qGQ+\Y<<jȍv”LhPμ+VJ#,qdG'=F 1#̊Sd`h"5aV31>3S#A͎esʕRͱ8:W2[ 22BlllC"HHL0#) }zZ.;ϙ}Ȏ5y9!6ӜvRMq2,!qCLh @ІG)$J0#(P獥%%r=3jIܰrbg]`bj[oqudr*&_p^LnQnu a<)W6dءdJ쩖mDj ;*J2m1 0 DhQ$&\] :krW"Dz %1e bJL B` BWe6 Q&\Z=: |6$ +#(aJLMiM7yo>cyKeKt-> )ʲ+N)Kl2)MYn<"-@,嘈dd 0Ј+&"I"iUwj:YS%XŰP%Df>E:Mܜk.u5*ƠVQT&Uٚ08 IbF P&` M"BhBJPQUcUR' I0?RV qN=Su=밝"ʵ:>gY')' dhIEMMf}w2Ԕd010@`0RX{*5B8z{{.KU½C#*q3dd¬*&BRBlIUuVَ[<ݼu7r(AMYbe[b6©j25f-+ii|#vUb b]_쳯ez\mƢ":I]qcq!,m8@TC*"B묜fS|ݝ'{fesә)F @d[HLCB#U٫EY\7)ª$W:M]ʹknys,=5)H]Mp1 ch`&%dTk%W v8-L:vMıLiȪTfvfDJ ,Y"e3R T,c! @*57 C1\hqW P;$- (V=¹H#]TȲ3IEpU," "1-np@ 1jI0PN,@ @ iL ,# F V6uU]N{KF& 0#(!*$8L8Ң(FM Q2Ę A8Qd`@AN%xY9)f104S(cKOV>F5d@pI c U규NSι:.?:"OUܢ7CUVeNU]1c&Kz3-\Kw5fWٕn'(X %@)F m @0Db eed楍!!8q_]jea,QH"0$&0ȥ69jd$*fAXK[WBV 4N2$i#kJU! LL@BN.$k+3*˄eeZ b0vV#67 v&@%n,qL@hZmyIK4` 0L411 "DS,lYVk SIEjqSR]&p'Ԕr#1shE3ԛM0r \Z#5*p4  L@"2 P\XJ,Ȫ%exQu; fHYM4@ @`dHH&a8 +1)20QhL!X4ƀQl$0 &ABh@I& BE"i#4*::XNaHFP땘VM]ȹHӨc+q&i@@5 h4ĘF.(J%{)gnSꬻ oEJh0QN%TSW7}sq~mOBBuİǑ,3Dl&8 {0s3O6 ic4*!:FJ6N-U FxDs/x:@@ b`1 8 r"aM IX(γMjΤԄ&HM S<8Y1L1:g:韣19nhk#ȤW ORjqbSP#ܺA(TLH 1")"] ĺXg9nu"J.T_c!6d0`*X((TTR@%(BBFmVم2P1 (Iĩ$F!9@ &_3zL3˟jѱ* &2EfBf9aSfl!jLUdc,& @ ! 0LClD+ Is޹uP7rC!` z=O\Gf_;4(V JA]1SU[<3:ydJen.")GRȁ$DXcגq|?7Y%,& 1RYbᦄI# &FCp$D-m#cwcҰw8'VO[b[# IH,^5dV3װ+h7%.zR0J B$QʑhT3 y}oq穸m`!$(JN-hQ#%HPWr^}Wes\!,n GEkQ*7Q# +5[]J2vjzmMܬr0!hC@$UMWz;Q_ZT1X^lXSuiMœ\c Li;:'Bʩ$ 18LPLxKs+.8Oq;s}p(JWe%-2D#lj^U#HclkI[-jRĤ4X&V^6VVc_Cyddݮ20C@ N"(h (X[SA!@2.lhf@4P P4. !:guKe9tLvNXUjUqJ CUoSw5ns8B[Y6-TgFK%ϦS3#mBmL/A\yiy^hZ<Mg_" \JP 11-q\j)"R#:)\` ^(ft8֘ 2!. la]IXBD !$b"y[FޚyYyʹɧbh0@ 2VF#XY<%@cp6SdӁ P2  o#lHjH!F42wRɿ#6<`(UHWj+RU [Wd$ܵđf0L")ĩY ĺtVLaQeXؚ: Sv~IZVEj*JrLԪanzr޹o\[-zr=5r|boqG9o 9o p[-|r޹o\ b4 1ඦUr޺w[-[-[[-㊢;3xF) q9m^xr/]˼9w.\xr[-dgU:mm 1o޻xz]=wj.QoލwyAr؜* 8ͮUO]뽽wwPQwT]/][au|R n`}DWaU0-[ǭxr޽o[-[,qvUQm Rzz=o[-nZܵrk ['[Xo-q[Ej*T%a#Wfp`)mvŽ^JҴ V-ۖt:T0[fWf հ;U^zx-[wEyw^\٬IS\M`1`7mN -qUl.(6+ȸ&,!bl&P L$b(vw/xog7ސnE˪ҋc r%x?A}7< n'lhqTSlY) !Bs%AP((ee^TQOlG[sGm;9NޒqM pr剝SVݜڵfaY{9͊=/|8rqQΞk{=+yt/K{vݯK]vqpUg)ҕUųk7ˏgsήë|:_Q!G;:ggYhua% IZmg7!|9_oWÛë|9C|9L~꓁썞 QOlkfv\voU/Ës|ޯvsx/kqvfHvotvg\'`,j be+wӨ+kp/ kp_ kjvk\viPiK:64SGx1M{5rkQ|5zkQ|5zj᫧_ Jl;5a[L")핈+voeQ|3vᝪ=/ᥪZ{4_ ,K5ͬپӆUkVW޸qOÌ=|8ì4/Xjwxby!av}!v 2UFTج.6/#K8R-y3 ^Nד6K lvg aHӤC"%:Sz85^ hj[/ ^n&x]]ƚ4гL7:+ p-[nn[ @(-Z-[[ tkvnn yG-0/| U{Zm7[)wsWg07رQd8܇=rS ZQ2oOCJnqSEY~ףQEiZViZIn-hQ %h @Zд#HA@B @D t-[An t-ZTpBҴ van݅ v-n݄-h @[ v-[-iQåhZnhZ:VhZ-hZ[n-݅[[ZG(ZViZViZViZxB (PiZVG(PB zGŨY?Y eJo1Qɧ]Sx Z}bUD7+ i!Sz=r(84U&ņ0azWa KŬ׍X*Wm!vU˿.lBwe߭~+P]jq>%).Io.Mweo5bޱoAkjթPZaj PZL-akj[V-mZ™-Aj PZխ[V[VxռbޱoX[-zžF;XިިAwu߭}]~]wp'h:pإXGv pr9xw^?/0a qJkTFل7a+͸Jn߄7 Jvʹ{77d*[-[uSjQ?ZX#K vou`֫hZxVww.nxM sf-sP}nW~iq wۣun JW} mX1K iVLhH!x-^$&i'x^$L+|@aۚ AIAT W bHxr88x޼ZjxUC Qw4 Ԗ#x>~#|.FkYwF{UުUw\TkS6s(RXn]^x-j1+QZzT*Jr4pP)͑D~˄M(PG2(( ] rr7x|‰F[sB!B#eF} u^ΫjuTո#BFQ 2G!m|{=8545B!BiP0wyG"եi (B s>⹧e\C QAz9B99j5RS(p8 Pw*Q9(D-P)RkJ$m%z]ReBKQDׯGE9mQZ|ڶS38zC}w[>㉟nEmaߨv6=-յ'4'-[U9vot*2 ^)w\ᎊ?pBݑ ê*~zvh| a[շץwllpcvT<4BPVVU/vdTmΟgb6h1#BFգcO0[*3('}v|]|j#8Z6E0D'*iCk^ 1oKf3ރWfX*}VQ[=mBpo[^G=)FG Td޷llFV}~W UH #[ 巿dgϔJ"x%r.?X5FEW2jS@5wϦ[E5Qdz(-KC-eSOa yhl#C{ejҺVsN]SZ;Dlc<w]6[Y6|T(X-/X2+m Y=vPN@Okb8 kۼn;vjU|sØ_wW{EwG _.kC-M=;}|.m'X ;?Rm'i|屸{0<nZ_> hs>4V(Pe8 l[Fp~W.qiB9BٌW CIaTρ-*~F9"1_f#u ?j\P~*ro#ۖ׏TrNea_L&kpB ;NO-B*&__Yl;[G[5]2!Ziz߱G393 r}NZb+*v L;C5 &@8eJ(kDnoW|Zw0r%\;Q'TE [2 8*LˇiYKP- }ˀND"9\}8)uE9v&BBag#^JSu,fV}m< ~r*1͛#!{xb v[^VF핞!B Z8q9-ۋSöVcWilO؃h~ύ1<6wv eTy?Iƭ;k? __v%e]pogvluBbZWn:7X{Mgkcg~W.qe8@! 0'f|09[] ڟY}'!DKMx!G>oԬC9{ Hx ;#G- "Qkabk1N\vsmi(3ۺ\g)T_XSQG) Rԯpz7|ٗḽ |s?IL-̠n x;^v,.놋T 0*k7?49G%Z@V:TZ*QVչB T\(QEi^TSh?cgU9\ʎaqRk ժ/Tx0zW_awcwKݚ?B! V~+jm6~j1,^ۡ G.Ϫ֨6V۱N+ VHWߵ?68,F3Ba7X|" sieyF[5-c }q]VS0j_i>G9L vvyl1P(P]{-.g'Ky(7r/1蜢dqQ.'U:mO߬y-FE.)x g[nNͱX]YЌDeBm#N<$j؎{6agB!^~nKȌS.+|[_gr߱)WLSGZݵ[K``mĩSJS\7TΆqQ)wqiF c )=:NTU6F9JJ0"I*EҠSs[^cETxX61{ 02)EOԺN9QV|ȧ.~ΥO_3kw{^T~zmgة}Odxgk;g>ha](P1 mZ0CݜEW*̒*b(C6|b߫ _>b \`U.jZ4*uWfUv%QU:m77br9:{;6VsɹBpW 2PB.ce*PJ( l٨.Z*ޖ !mzeVkV[=n'0&SZB!F^%;IUDH "a]oưukC\\\mh)lYVAҀ!GNNGEZ~ץ"A :V?ʓǙǡCfd+k>KLGgZ=vk^9a_W}gVr,,>[c˴ģPȨ=l\lO_['"j(Q"gB(AvtDsE9P T[WpD(QUSoV!W}f|sPxj!-6Vgr-9 dQlܶ.BEF]r->qQ9\QKm|20حKTR:86AՕ.kk N#HAk@*P*l-)[/YTn8\3ጧ BR +<;<ȕȺbHPVQ94Tv$ZINcTAt!z3E99i^TShcg^*7-suV P/x})f2گ[j5{ UChvJ`QmRv5aG{4Y_~U*!'>q+޸C ciMRNDJ eoͱ/i~e{rXow#Ԡ]{OWŽG+·8V}+a1{1S:3wQ֠ϑsr`kej6# (D(O CjEpP,h ԅ #֟SV!co4SPV _o+Wm(ѿ_N[[:R=QFPݘ-U.l'"+ߗtX}?Dr+]л7F=^f?ło>ϟ8W8N;ڻ*OѲ}\7hq 1gb^6? e+Ǽ92SڦnF-%W)^h󡩥!B-ZP T7 3i vz6{!PopxeN',idUgAJZ ;ʔL*⏰8E]oURx[JwUpo0?QNE;+AϯKE9vgx˂:ԪmO=x-}GYiRttr9vyyPlG{=vK_Pmmn0QeqEa_oU!V ?Zu.ε-z(PUO/_9B#,kW;gOlgWӈ| /`5wWX2*$Ei{:6VȌC [L2rbl\LprD"5=7i *{8Qȅ %@~*MC#JBٍmmnQÓٿXQyb-'ZM}̧Oo|mf֩ SëKR<$_Z=umJѫm Tp u\r)Yץ"A >Qq[}|iڴq(**!G mWL.q 8UMĕZNR(p{=vAm>p>|+bo)bވQ^>G 21 gչ[^o%68OKyeB͚YbqWf(N ͳs i!B0MS9}&g_ ӍjPZPX {?wY7"9=vP~#-+7W^ TJ" o#JsE5ᵞ QjUGgZ_,(P*VeRZUӦ,v˖։ԇ"T-*BZS֧5+,9ծPu=k[vj< nKhBҡD-&4+IN ݥ0>xK X?T#.kD8X^'[ s@}|W4ʧuTmzx-68LjU+TtN RZTDok1 JN;xsr_N)6T&[6jcM-lwBEPeV;o}7*xK,W 5ABҬq9{OS(FD(V`6߳:V}hB҈tWAy{bBҴ-*7"ϑ>iJU6 Vb-XEտeTȰ5KVJKwթR+JЋFAoV!jVҴҴ[t(hB{UݪYwZY+\^t6졅^!&`UF z)xکjڂ FZVI.v*еxl\Ө&^-W@ݵB]KG$ m%V)\XY6Ґ6 Wk *pUP;W[޲U}z_2(V5vkvqỠvn=|7z=_ /WÊUs]S֫坳e i]6ᘏg=]/hyv]hv}xW|?G <X[gM>@^@Ayy@/ ǐ  &v}9a< ­dUݳn)❟~b ^Bė%,Iy ^Bא5Jד01 6K ^TW༱-a=7gcB2OOT#^l"|&x]^Ew KR]ʚTrb]իwF.ո )֭ )PQC}Rӕ쿣bϲ.S.+z"G鶔ЃpU1jí+p#>Wti4p.t'XPnJu%S?l(n݅ van-[ t L t-܅ r+r!nP Oiܭ[[-܅ r+pә J#@--+r-[ r-[ B--[kv-[ tFq+Jݭ[+t!nVnVnV (2gVnn-ݭ-[KvpiZnnnnnnj +vkvkBݭд- Bд(h[[[h[h[G -+JҴ+JҴ+Jд-<0+Jд+JҴ+JҴᅥiZViZV JҴ*8B (PB (PB (G38!?kVZuǒS0MTjoHhxQ(~ ˖n+jb\48ȔBU.\8ĮQo/i#J)ȢsG"6ԏ/^)fJx˿ۮn ]tWy%).Mo5mF[BխPZ) BqR)RH<(*TR)<3*G!HR-mZڵkj֭5]4yTW|U+UeT|Vx8ň^3bn/^9`s^=/×0,-[_]֯Nݧi|ф5a+XJv߄/8X:僯9yƬq#cv8b6 p;u)y i^ 5а _p;@;iMv ê|@>|N/:xTҥW?n\ 0zu狙()o-=slT:y+θM d~9>dƍ/3 ^f]^czrԢxJhh9_[5իt.s&ݦ'6VU?IʅMJV\BFW̖Z?]1S(oT=Sri Õf5ҋj E-IeF뜊)ȢuE=-{pzH^k{]4yzK}I !o-%ԗy$/iMe2\S_gVuZE^ j7/0HTU1a./GhmQxE/Gr"I*/VN}\l.(gr57.8CG^8񋐼bxΟ^-s8v7ڷg;Ai+Q,ox{bc5^5Yxuu׏\Ǐ܄q뒭6 s*3-`oʓ뗏 umcrwe='S*՛oK˫Q"W1o B{mAKD(ϧE+U;6 [B[J9;oP"2JV'N+r<1*8]?2ym(D"ե`8Uc7wfߛb[`ىND(]wm=r[aU<vIl~UB*WruD+a =PB!M }V'yQե h [z*2;H5&4'TU\meeg7ȣ.OOT䊌8 匧>ᇶ^=OK:nᜓD"!Bk Rr9G)M(3ƊkD(PlmVxaeWǭȮP['r:y7jTj-h;R<3Te 2Z!QEG'6]Rmn JwOd6=H̠xrv kmhU(>Nr*մh1իB]gsjm{5i*n3riNbй=BEUγRMmB\ʫjb~/`o̎AЎ"܇.~7퓇3[;QRuAo۶[v' pB~Uc†nEcqBOQ߶ipFGҷ?*i;/l`jfp"B!Q9KG,FG?rQȨO] Bc/MCt{y"z6-v\2o؏V[aȶ"([)M~XlNvU[i?F5lRn=u 5Bե5ҥkZԠQ(=(D-+J 3BjRR=nOuKVơ)4h,*TU8֠V®V2ӰU/kީ|,ENpP-CZ WiWW<N[|?3Z[v'Dn[Vk|eD23.%#»V*1ﻳ*2[[Y+5fϳٌ%U<2V~G<~9~{4r6`rl(nof F-|ٰ`w QQ[9>{9X3ȠZ˴ϛ+9 5lwZWlϰ(U:m7!@f?Qp{6[AR{3\20=v?q$2횭Tvlv޵PÇ}',3zr#?iv-l=Z2=S~mʢۮ[Ck!*9 ձӃlWXpw(Vo"2 atnx˘uټFֆUvFUg)ZO/Bnք[7-(BP|ÿiʵ)T#B*+ 뚯{N:ӼR]98'O+)WiDЬ0^̊r7TpFðOvPK8.j8abCx^+78}:Uyݡ὞hmlfڋpSsJۿFPwt9v{Uqmx2x:P]?;x5~mn& <6_ayBim+ߗNg,3|Xn䜊P<܏8N봁.抧H}A;3V;bzh8ki\O]pϨT]~g*c[!luQm$KO$QE8ee^aSΟϱ_Ȋla 8"QLWk}Uzm-HPL姚4Bd*6mB pBңԕ?ՕsOhC(N/{o4B-Z{GNx\Z5.-Xb,\Y`Q9HBxUU5ҲS fËzdS?Qn]KqJ}2VٜHzan?;]j*(cǍB\U)N*}0[[l'Csx^Fe*?WǓ黩^e+횯`{0rb8w /|=8N]} t# ?eqU.1 [5]>mLnENN CJuF\)6ň/8ZR9ȄB3Ǖ^mNPT(DsH9z2\pJԧ*ẩGSiP@0(Oj &1iVw5Mzkn1 qisnqFEQOU*᚛Nquk{3r+㾽. ?s'8p<.}˴Z'*NX] na8mv[TƗ}}T3#cَ:=nq\m ƃTEv{ͻϤ[xz߿Zx*a;K0;3f+w(vs}CXiW.ҾuȀt['Nxm-uWY`!ocZ9>;{5)X3aDe,_nx a7^FM+ˑBj.hF{]juf'G_u|JέDZ<>4#9!x^t!7 vwxV#BԢ!{„+ Uzm3:m_7#8Pd{?Um ~ˡòU Vh0z꒛N餔 Pr!@Ls"%W@'+g0U@ƭ-mkïqJ#]֭O'vG2x;zdSg̡3fҴfɖŽ!3x?>+fsvp$i[O/ea_aDmRh~O٭va͠GcV<4˖}vG=ƛb'5+ G <4>θ;iS}鿮a;kpjٷxpo|8/S1"Wi_N;"G,kiaU:mW߭>94a~*yn9cX_wo6'dB/WqB*ޞ;ShiFvwլ+RvyP;:ngҿgWLm[qpB6˘EQm =#(@,;Ǹ(RVQL3Ѫm?a#(JPB!t^W=vlvѸ}]3 ?QB4B#3ƛ',s>b-*L鵲iQPG"G(P[ {NtړvPaqBWferƾ>f(Z #0ZP8v os"BEJF]"㝛b봱5UpG(Q*""/_*`m BseT,3$ZJ!uMcƝUV":8"R!lTsؿ6Cr([z jbrW7-B*eOϟ+N}Ҥݪl;~ xSl|̎YW7-zɣRe(G 4kU^E!Qtv ˖} pPO=O[}OB*-%hZVٓpB (D((WiB c(Q"SFPQȅj J(}N# >v2T<ڋZ>݃}aǝ 9-+Bҋc"(Eb3ʳ3]abkVhLjB s~[Jt 9'3 Ń1vb'R#L"Mdym" eiQb )pJ{?Uno-+Jc*69(1bomJ ?%PPb ] O橴7Ȟq* s[#B9Q)T*W4We]Cq8KE9m_6BhѸlu,J;Gi,ur  7z(T(Q9FXoS;T?!FPQ+JҡFG'}`oXKa B>MiS}"T(ZViZT(D(D,0Aڋ$"=2BҴ+JҴ-+Jҭ_c)Uzm'BZr!iT[s>@CB J-ZVZ[vih1}iZ%hZkIPD,6Z协㓘ADiPiZQKvkBү4ԵiV͕Hݭ BݢŦm}jmRiǰBhZVnѦjҴrsUAI}hΘ6mJZ%G-!h w v ݐ0 VM#rټ2%ii!Mkvs-Nb*Ұ{9vӾ+ w?6Za@ZVh"E9{Ӳ}O;Bfs m *ZP#KCW@5*ؗ}T[{Lǰ婑[V4-M(mE afhNR4C H_~\-Z'pi[е'utRShåiPJ҇S֜^[]^- +~/ً:7:Zk+QZV9k+YZ+YZQyZV _Ѥ(r88T˂N]˽9 ˼w.Wx+~VM&{7ת6u,Φ]Wz+Wy!w[k+Y**߁aY:7P.z+{+.Ew |J\6#\=T4Ƚp]\}tw.ۗx+9oIT; ohvOmg1wܻ{r]˾9w.Wz+`7C\a!ŎKė/+\ W+oW{1J.=aϫx41*UDx^&n^$N^"E+9w#r&q-NU=,bm+^%UxUuWU+W^#UxU.QwyQªⷴi4,.7Rڬ%^F+\/Zjū'X]T'+U+UJa07Inaejk^']x*U׉W^!]w][7SgJ?ᄉ[sUV]]ﵗ|uk.\YwU+]W 4>; O[u?QoQo-|+[&icV fk[z7 zrrsK֢9~* O*7O8+wv5h =SHp|eNEWggBNXK"ץ"Սն0ݜ|:_nWë|;Whwuû|;_>/ b V. \*=C؊W~->DȘ&&"bkȘ6&#b[<Qe4BŰX,C`.i^(%x^(!x^(GEQ7bG+~ϱ**$mS]Sa6%ɘ;/&bqQy7^MWqXv*&⩛8᝜U~Q%;Ĭ{C+T~)>PW1@JWqUQ7b1B(vjCmiYPNXK}_,Uy^BWŲ/bp4'VakgRp,)y CanMZaC"kW8%nWpak8bSvW i6g^ZÂ~G_TGm+W߼:49RdK7)Ml~ANWR,BmTT}z_2(X[R t!nn[[ tKrnV P(F-ܭ-ܭ4Vn %+pop+pn-[M +pw[[[]wp pˮZdKpw @- wp#- p r .պ[[+r+pB[!Fpnnnn܅ p)@AnnnVnVnVnn[[[[[[ BзkBзkvkvkvkvx!iZhZiZhZ0- BҴ+JҴ+JҡG -+JҴ+JҡBҡBXJwSM=xy\ BzsQ-+`s”_ |QNUU^f@RV؛(]o^̊(UcWy%Ub5okjլ-ak XZ) BJJRJ?tSrǨ-MZxսb1wkMwkMosHg ]w ۯ^!lJ/^)fRx{ f&V,{j7 U,1y 2ak̸RFӄ4+XJNׄ/66ysJ{AؿXql×pvu3L1y ^uByȃ!yT+*lq`Q۫NY 'I _- Ϭ}*馫6aZ07SvQSP rpO*ŕ)s0UrÁ֩>/S-:n+^Ҭw[[Bm&ExJH/^(.Bg/+Ŋg+xrJƞ3lRӻ,,,HK V^3jiC@#tǭݳyEaXq;i˚8i^d^f1ݯ1ݯ1]/1][k{kKv3^3/4^5-^d^g k6yՕ8oOT=Ҁu[C(Sݲ5"C4rӉ*-.+5j}6JzEY= l_lke9L9f)j'oڼC \K>_w;˷\q Bse}Nir}*+rr1".ίSNphM؎%՘^5Pb.e-EjZKRԵb,nvm +LIձJ\B#(ᜥj+RW[_|.D(P8i}'ㆸu_Q(V؞˴AuG8"2 3<2{v|]ߛ Q (P( }.&ݺpB "3+ Υ_`nwUGn5pjbLx:SeB92dx\S}^j-M,MɕN~YES¾brG/lkoѵwE*T(Pgٱ'Μ||GN_~h8t=;H'ĩ N"wòw. pN {UKR J` *PoG׀9`ُ0?\+J!2^ Cw{Q![\_ekʷgcW$gNW5<>8S eY`awUl!mG3uW8Eл( '3wJ! ?2)嚚FVȧ-14XF_`1s# Usi=,8K{6 ?#Rߕq˴y: 3vݘ̫ߡsYDzn23il0Ҵ}]tbzOI- 82/,c@ amr#t~"Q^p\+R6!q{a5URv[ R5U9:O^h .ioz29GEL NUz_2k0uOE9m=;d9…;U[i|"=L9.[L5`}Z,˴ۧqea[wJU >T+i?l29QF-yXQJ2J>qGCGBЦ cik?=9T(QO U:vD"PB+6T鵟0ߥUBBU~UjˌgS?gU ;w5xl~fb+j9pvmN;X#i~͵ěbx[twS6i[t6g0`KjkϡW᲼~_q5╱U9v_Qɬl m+Gh5),j#Rgժmy_A1ȭA?3oɚvh?,_M?ud6Ώ2p{7 .>m9j-lzCpz^p?*?aDfg&袇. T~r<kxt~aʍC+PBS~Ϗ /{e{Z $!sZB"3ONBԃ(D"AvSsȢ)JϯKE9mNf}J?WgFU:mZTFP ;3Xgqr-[QQBU¯mvb kuF#J |] -:=vnpmea[WB!Gc {4 Tvs.]Vm^KB%a/A}z[mQbjE D-A`v%_ʘ ml0S fnXտ(v=rDɟk>?ڭ?uT"Q€p u*ʄV BS#(]G3ʮ6T鵧_Ak9Ucv洢P#r/{e*T"2$AK(]r Z@Bni 7i;'MOgeGQm|-üO:iehU[JxsZ73m?-(Pl^ԫoR:mg1FTH>WdrjԪl7a&g'V&"-EI+Rr|2QG*5 :3V?b𺗸hm}N7. au#H9ky_JؿGu;2r`.TJkV{ xJkOr~/m?phlWڽ]-aG O]%u˳hN4XB>UL7k>}99Β(QˮVˍEiE f/q 76B(UrqY2=9 PQXnpp7k ֭&G(̄d:ėTNs(CrԛQ%BpE9;+_}:2)n-* fZ֕lO\qK`:*mh)|cqL|_[;2S8#;F ,X/ݵ=~}WQ*ގ]}#gM|"⇜Ke{Y_+ݛ~Uѹ#ɧ ɧF\FUwR{3u0#S٬M]m[^^TTN\v]Jlr-)xt1ųSgue\`n5#ЌlԪ6ٱQ2<(w=j>ϝiG8ϑ˴B(8e`?٣*B (8,倹v­\ZE萹)j%jEJ#]s]T[l?uEQߨDea&f+oxKZPSZ}~ˉ}9 ҡa6-.&* %uڜBΈ*mV?qYx &zoxjXT*&:r٬y'\hs_)H(P%Ij()SQE99OE=mu*ަOڛv>m-피F帕:t ꛝڌ*gvk0:; إSzqT[l#g (QdU*j:PB 2Bqs~W.F~u Jg@W_J뎅Phپ~QY- 3lGMp̅ -*DdU:|hdJiN o+b7.BʡGZդ8:'3hhӚiP-(QL-aenn(Fзj'lmî66Fa-*V"zPbݭ 'I)UU^DUehD5@ \:y9"*9uܫwxQr9-9…iD "ZQh[[9z"Pl*6Ҷo|*-̨ZIM9BC(UɆPªԸsM o 2HG"r(OXŘ}[ҷo+xV[[ҷoJޕ+zVkxVeo TJ },C,eBWz]w ~Tv7+-.ir. wނK.z]w-FD809.Ѭ]Vݯ,=wW~]| |].5S{6kfUoݡvӭwڻ].|j;FwF*Ow;-0%w^"#ĂDx^ ~ #r\{=]yQvbib4:BQxbX،56EÍjNn*<]x/^2Wac^.g/r8AϨ9žj;BÝNgQpnj=x@n^7QxETG1PT+WV]ﱰ*Mo曆'XVc^1Yxe^'YxU|n+91*bSaeVXCzEj.P.Q ]5 ]5zEE*.QwT]5xz߽ohVhhMUҩ5JTBaBa5҇B49"m<&Qt#iR6 rTl.=bxE9U|ȧ*Xglw+,Ay ^B'X#CW%[Đ٬H{)UXggw05xXO7&ϖ15My_^Xו5MyO+bknT6'p`4/KmtO1UUy;Ccqb/&ɸ^-Kŗ1eY7bb;?;g6JZٍ/x[c:$l(UBn,O1eYy/%ɘnbS\Uڻ݅a5rm,S皞EgȘ.,"ȸ(/!b|!xneRr;8M(S'2gu5>Đ+&K$bK#?_;9MQ ; N i_Qٯk|4GK.di]|3fu:vgY7JoٛVKO tmkdA|2jbʚeA|3ft: ᝲin!ٕghK5|4_ lW[|7_ ~(D'knk!)7XZP#ӎQ Tȹ5#鸜(NE9oz2('R[[[[[[[[[[[].kx +p].v[ B(&ӄnlNQ ݂w`]. ݂6j 1!nwp].v &ӄep].vj]٫݂w`M hw`].w  `w 2bNQw -[[F6A9[[ tkt--)9[(ѕ p r!nB[[)8E[[ tKtKrBA3!---ݭݭ-ݡMݭݭд-ݭ vkBXkBд- BݭзkJд-ݭ BзkBд- Bд- ڱ;oJ TY,lZUE+V mZi\CaFsSiZVS)*x 2("޽?QEHRHR!HZrB? (=(QpB ЅG (#ЏB(P(P(PH*T{5zžx%i.Ew ]]/^%hZ/^)fVxk% ưxx^9/Wa0/2K̸R6ф4(^'[U7]*U+; --„BK,o?".ep{PxmP*r4)Ȫ[ק"+i6qVaq m hvɘUJS8cט1t{u7⠻h1e,e7h_xw1m6X.7oZessN҆#79R1CƧqms4ō/1c%QDZX~\[9nX[`m7Wm{Ae~kn]w!Q 7ړmk.dqa8GWَ%q,k#e0-TX;icwPw`p`U `3D`*0)Vw8"n98"]]^)/a ;I\$š511x"[!IM% ${+[nm}VcJ.kMtV*J!a؝GYp5qlqSY⋊VEj*J_n;݂;s-ENsVXQkBkZ`5*Rg+ZW1sL+#=*pFqpiNbsy`m[CmJuWթxj\=JOR{.tݵjTfxNNONEP/'-wvlECj_8۟6̭w>ì9(+ټW{Q͆+WQ]QqΜnCzP;6zoD#X}t`QJ(8G%HM}'|~Qb83vA\Efj&-j#Եy[>n&8D(IXF_ivk3ϳ[GuB9Vq,G+AR=B 2Tyl\@\[EE v_K hcsw"isA@*xs^υ hF#t۬*-+m_z*sm+ uEYОh)Ȫ\zl!N?"+,Fk؏V:T{oB=[}FESV_ץ">o{x'\IϝGbv6cc`U:mG |l |۬tbw6 ڶl?&^WڭxVb}}7p7yt'(v՝m[ji7u4lUj?Ǜ3]43/;ewxmho1W77Va 5eg{6U\[HqU]i9.ׂi2Q*uIΨ^OE2m9v}?,B[]Y28ODˢjTSrϧ JBG=(Y@zQNNO(_zdS}oɎ\X}˴S Z\x+oxm+UJ<b+k=xmv+lQG=WWuaT'֝dr_4p';i{FZ|6?f諿st(Kl9S`Xv(lw hdg= 9pOaM:Y0ypohG.Z /l k)ێ-X|L1qOEC"5ŤjFVЉOSaYW+ǜ  (8G<1˴?R"(A ZrSDB.EcŠ)ȫ^w?`o_neσG 9MUh4V}bG>qT\R]*p7'OKu0HKñn?c\8J}as/mvAᱠ+ tE 50\DXP{GU:vDQl;l#vYӱ1&ۆvjH.1+?ys"!SK\5:]X.@~9ʅ[vP[|'g5ΔB ,+Ur(BV`.оD88 +lN Ÿxh06{UlkT?|gQgֶͭ5bp{K٢um8n%AW[v~^GzV"?h1{d(ZjGוʼ7?TQ;e ܴTggw28Y>R(E… "UrèջG(ZS}2RXK5=!sZN~{ -< XVR_YֿƶMK/+Ѧ")Vȧ- \' {v?2hn|~*~G(&f>ةwB! 8z:SG`mz٧T Ge{7? # "eBiDdBe׳0D-2BFPP%L\|<޴JrWb{oiV .?!s #%hZT(\愩6#YX0Űl.vލ=vJبESćS}z6O[iu*=\.FlpNd>}Z2R 灹v?Ѧ"->GE?}gWU 2Mi񲶿9…L4xN[ e (G~K}2!FPPFB;+/SE"(PiͿ6 J1r,Rd-Í8D-<iD(*>.t`&"2F51fPhVko>B`|!BE@Z=rۡ;:ޭB`-nus_JМ#/kWEmJsQ.cB-+L.*An1q_Uܶϴ/Bo](SqEZץd`+|rҝN嗵SƯZvB=8!]ϱ9vgr(PB 6Ɵ=mgߙYBҡiPP2v}[ZrFC&( %XIiۛz5!bvKvRıljM?J*TSOQEUG'sSBuQC7#קVS e g'(pu +?ZVhN д-+JҴm_V*6ԾUtPiT(3 Jl:?[arд- BҋVVZ!m%'N,I͠(nh[[ZjҋU'vp6w"[kv`[F,EBЪ@/[~QдMn+tkt%ZM^?([&[F-ڴS*LwoRR)[{i2GX@ JVIZ |kA[ZQiEi q;<&L0-#Gn9nVF#L"i ܰG-iP5h1+vnZDIѹ[PnPAV:iPBҜܣ hQ%iZW0QJ*s.pj>sEJ!T+QUmSh9Szl^cunZVEj+QZVEk+YZZ-ZֵokZkZ֩Vm&x]wނA:wޗz o4ձ5QmݓV,].B!wx ~-[-<9fcycejaw]wƮ| ނ7kGc˴'85/Dw./~j]6{{jM]#p.ljS*ˏYvi-^ M^"-^"ڍ+5FfUZw1k-; ͦ1M^$L^$L+Ę 5:V폳 OMNAxWq6 ڼH/ QZ;ͬ\ X [C1  pX#`}(Usp2i(6z#ŐbW łp\#x^$5J]-ec Iƈp0/^4d+ XBW|smV·u+ 6'PJEx]wA˿w..]˿9x.^ oW~r]˾w׮|z7o]9w.PFw-%.uK\-Z֤y8M/(zxOjsU^̊z[Ctqu_`;N(%bx;/&bɘ;/&bآ P#^RPX^QqU,QyO^SE | ^ ~p[x%K0,@[;T8'g5moNҁUنf1+Wx-[/ׂ_^ |x-K`WZ+pvgaمNUA*Wx ^~Wx x-Ko/p BlN?0 d--y| ^/W x;wqSv{qrlX[{?Oyؕ^/+$W%JFN^\ė46k)/mG`6Fqcs3QyW^UPSŗd6KT?rLN j"6Fl?~[cZ'*+b,qT6O+x%)b œv;*`1:ݒ)해[O[MX. bG`q`;?WU|=WU|=WTxy/xwα%_%_q%_qm|_/mxޯ\jS_Wm7kbriq=ۑE9VG^͑N N p p---. p뻮w ]wp-p ( -[&n.---뻄)B3!:o+pnw @.w`BMdpR[Z[]. ݂wp]!DљFwUݗw p.#l 5wu62+ r+rn- p R+r nVnVn-[Hd'Smr+rnB܅[PP d'S[ r r+p!n-Bkx Q+r+t!nVnVnnSi Etnnnn-ݡMnnnnnnnnnnnօ[nݭ[nօnݭ DUGusW^͗#yJ@ c"32E߯OEQErF.9Pg (PB/F(Q](PFPBz1G(B(ZT(PBх (@(pc5Og}ocKV:qkF56J(.нJ)ʢzpV?Ȣ bnwޯQ]wq|f!|b(**[9T+vT1 q1G/IqB%O^#1\Yx*W☾X9m/ڴ<[iKq|`Ɨ)7>3֖8棍x:DZ>=h6ݪ%m6W1i Wό!Q&,qU2 8mN,8X^&ы'm>,qu]y F(ˊ#ؤy^f\Qy^eWiF,byCj1uY ţvb+̘y^bQ<]y^f I!XGiq¼Ɏ@\n<Ǎ60cS,nNcy*,qyChu?h1nc@\m+6c`y+X6cx0c?cn=j{"V֧%6כu\Un=1|ёO'[D{DG^-J_iWm/hb{BCBPq T8QnYaYw]iW{F*Jѡu(j`[ECoը4}e\J.}UU}bu\/0 ͬHUnZZW.a32c [2sug 3N_SEQVo}z2(bV0*Xmv]ߖuw<%J*JVek)S8v+gw*HLMةyZԵ-Ej+QZ*TeZµ"sM5x9ZIֵ-EjZV-JTEj*ZF/l&ql _ +;Bi$~TJTR*T9sSRT%jZT%J*r)*JJ{˝')RT%j+QRVE7SkYZVJT%sRT9`\>oukYwW]uzUjUwBUx+gc_TW8n :Yo[Ǖz+#^tr/_[hԣSx>sWi.9GWXUz&ZU5t[TTRJԧ=i}fhi{Oڗ=KA!B#8u^J񫛊aε?ql2`2ݦ&B2a΅7ʭWv57E0T]] `BOE9mRg2Vq˴'È{7 +}EcT]m6miSk_2OG}bi[ {bيcn|ooPGof`+k| r#(Qz =IS>&2?tǡ|ݟT{Z Xul;6ptSα\v6z8F[tz8U}r;Sha]/C/?۔2~=2گx{:ThME~)1L"95Ur*iPa-7޽?'-QGaΧfWt@[mVZ7/V_軝w]*8'4ݲ{E;A3j6lqZ_Zٯ\G(QJFQ|ryT L~uimuX~sŰlL ^TpNo}g"!(j}ЬP-u?zOC0 /ְrWB*S'8'ܻI莾X1[)Rn}3B‹!N[dcGԡPtrmJu.:?S W68ٜJoo^jb-Z+imyyVlO_b-SrǨF*-8]5";7'.ϪxeJiPon][ⷥo j-ֵ[Ŭޕ;mv( Ʉ*s)aȌ!^Rz+2B@Ї@Sa+h: uISwE1Nץ󢜶gxއG.!aS8e^} t~O۽ ?vhᕵ_cQmgߨV}(Ş3Cca' MG&mTj.|-1i`+oߪxr{/ <OJK/*T*B-Aj B8%ldJsNQ.0ڂ<h#Hm`% cA9j JM9UG JXO:xץ"G:?T;/ܛþfѺ]OL9]}u#hG3S<]v*M8dLv[[|p}Wtl?dgܲ)r7[z(!gu} -qxhuwKoV&.Y8M &;?zz7g ;9x^vz||`x%԰e^I n1i*` $+[5`PQQNn榽9xe\]6n5o5*kT;}H?Օ(ZT"B1+ȢUZ{N.HV'J ǯKE9m}TI" pNR}Vlj=v?7pGc:4?+4n~ z:ﱹv' 7< .̏b9G(2"9GB8aGᎻQmw|mz4NJ!;FQpJ%b7`9\!IRPqZ-Es\5NJ.qw gRG-ͺۭ myAo-@4 ۛ6Y~mq<%n26+toB'RZjMw$?UmJ^Mr5 ΅b²tSy2(9_h:9vQxw}oXr>?Tt HպpbN EiDg*S_3׆?2'A̍^c {,?2Ewg}Dx) 4D'JB,1hZT-ZP?Օ ҁ Pzچ*F:a9^ҚhnX L}o^͓}4s8vfO$zEr b5_ IOc?keaJG+w"Bǂ\4姇lGn,|D BҡBaȶT+Jg`Jrp фaBD((PCw dQ (QeԞ{GUE-UBҴ* sBҨujWB6't-(F뫬2֭(B!hĮZ{sKL(Q%`yo ,Ϧbjo\[ҵkr嬕YZV\D;_d*FeG>(pC n$&sSJ 4Z{P+a*Q$*?W ϓVw75ٌ[7l-m>(PGi˴_3TKjf Jhp pM^`]Q7|'lڜi?FXx'fWg&kV8FyIZP°.M62hpk+.`V7TGiݳ;,`v56Ee-(m Mmmg0[ VM+o>~;+,"6 *fx^a5ŗYZ#|[|Xafa~%:St9v㟟TKZR` yFX]SBܻJs~*!GwsO~˴??(̦¾ُko.BDIaSsƥ5iE?9R;K[@9n@DgCzl>k0NUca;U*J\}Egi`C*mlָyH9[u[zck6N_g+]suʻO+:cj6>=LobGeGË۽ǰAV vADB2Ӫg>Wh0ejRƶj^`;Zj,6oci}1n{Lgڠh1FbO*ʲ ̾V}QN`ϡ1…9ҡB: (ZP.E.G>J( 2-iZT(PB 3-Dtdl:gٻrd}̯^iW[[goՊ2Cl1"kNc[wod!YmOٌv/cݼ $׶ij-lЀv2:ua]sV*7-Cnoj(QJ-nO:rEBWtk Wg.HQnH]QyP0%VuB {_m'-KZQw0umRU~Z3)R:'+% ȣ|ȧ-Է$y[qGG.~΁jbwUi[շ}[j5.jcժUP}{$׫RX|٧ҼʡqVk]zjܻw +{/uJϬUDshh`iL.J{dsT5kժ+\T5krV`sUwשRpկRVr٣em$x={V2.0j!jyZ\(PO?QDy^2| ղf~ Ժh>U*TRWwm'"%P\ztSm5;s<r&rl (\-*?Fܕ[1Wp+BҴ*(Vn5- f -x0whP!i HZViQ LgfFV3y&S565hZVA[[ZVZnhZnօD+J ZT$h+APTIz>iiMk@-iZjЋPٍ%hZ ҴbNO[j;AlVzh[- H@B, H[TB- HQȾYr6kz&L-Q JV !n݈s+Njf p.`^4ZQbkT-*PiZV@\FPFPjt-*XVƓUM%VIamӇ9m3SVs%j+QZ-C"2"E^%ЪT)-1 '3PT("V{֕qWuQ}WZVxrPB_P+Zd\^͑NbsNai_p__p{/ry/rgghV;Y=!ҕŞ&g!sclWÛ|8_,ὒqdgKὒՃ]`6xX]Z2ᗛapojZ֫ᵲklW[hklZ٭kl٭Zvwu0T#ٻlLTܻ֊mE|5RGZHviI|5S_ )V/_ Zٳf֍v" 앉1*wRsfgfkfe|2r=̣ٙ_ fᛗ:ED{2C:7u:If΢d;3_ /u*EʢcQ|2'*UʪeU|1V_ UʪU_ j#ٓUʪdƢ=TCEʢeQ|1_ j/5WUʢgU|3ΡG'U'uW:T.I8^9 jsU՛.vwmrٕEʪeQ|2T_ f._ ^9|0r=d዗'!ّLZvooMf kD'2V/jeD</~|1_ W!ِLժϳ:NaaXbfIdɱūW&MG&/MLC6/}қ.Ϭ(kJV 5 _e4)/fln|:vv>ϛbh kjvӕ6=Q_($;<K%S_|ѕFN ET ^uRwQBCO5:jʋٻk3 h2$9J99V3!U`)WD+NW^޳y;(P v-ݭ v-зkBдPiZnnnօ[ZhZT(P-ݭ-ݭݭ݅[ZT(P vKtKtktktKtKtKvKv-*-([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Q-+Bݭݭݭ vkvhn vkv-*2 BݭݭݭݭзkvkB "աnnnnnnhZTfZ)[[[+r!nn) "hnwuw`].t <.UeBҟrLnQ P\@l "%tRs%us''jP-sU[ /(Q(PB (PB (PB (PB (PB (PB (PB (PB (PB (PB (PB (PB (PB (PB(PBG(8#pFqk(PB (PBB -+JҴ+JҴ+OHD :PCyJ PJ*r%<4)PDHUn*TPRJ괣N~*_S5[a2*g09O(Zen(z.t-ZaB>Zy[J[J1]oqN5Bk4696_fSs HtSZa-zפ= Zܷ[-zr޹o\[-zr9o[-|r9o[-|r9o[-|rr9o[[-[o+|V[o+|V[o+|V[o+|V[o+|V[o[o+|V-[ҷoޕ+zzoVoJޭޭޕ+zzzzzzzzzzzzzzzxzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzzz||~~V[ow]J.]˽9w(GԉJk!ƨӌ)SiWxghM6]Kk}*"[mFn[㴯.Zg4JuVRUCļS~NNNP~9eM?ܐ>Q)RjDʅ ?&= uj*UZͦU/.V[\QW#8ULMwUu:,tVZ%pSLQT>Bi@>U*]?eBju V셻YtT5-U:Pb҈Dn֕ ˋSěNkXV5iӨ)\7CQDYTBTG AGCdeE\ی97}7Ŭ{Z[ZuiLeS)FT~'|sUe_ȅ Io5j(R ] 'j}J\ֱƶVW5(kQkױPȧNr*=XsBc>SĊ?(@BP*2rsӛSf5.߳cL:)wN,s tSXwG?$j;od{(^u;O{(Ŋmbbb```,l<<:O,p6(|=m/;arL9×<=y$p,>|/9ay^pzᇯ8ap^qc8j;c<5y Glм醯9y ^nÑ58b;a!i^mã8jǛ;]kg͘h^n05yi^kÀnۇ/5a͘hTVYDx&pa: /)ZքiBj PiU(WE+/3}U{RF iXoN.sß}z̷Z>[7E7gm]˶eebVyv ^[^[CfB;9j[iͬjyj[^[Gfݪ7jk>Z^Y-څET6n|jk\(ݪݪթ^\^ZGfJժͩCfmIմjyfyfynڔ6bV6CfWWW헖헖PPlk\^[^\^[^Z^[(lݤ'˶ݪ^\lyrynCg--c˖˶˶ʶPx]6iAEFCRR)QP:.p[F ^)Tn"ڗ-vugOK4QONEQ~tMlye.t#9^tY{p(yuP!NQ]8J=2\g UѳyL~I[Sn[wb,5B9NQ(HAҫC-o) "e*TX5E[JLUqGR(SqD'1P) s<dr{/n8:S]3.{{(D\>AN}2*3Ξx4Џ㕍Pmk[j9V+#S-d{#G]&m[T)5L)E8'r 85ȗ˕_Lz??>C>}3#G ^2D!O [ʞ *M,&~&9Pʞb D&)pƵ`TR'"̊pOjJUvp<=Ig8ǥtΊ̞h)C.2 {B(9{.ˀ3z=s]O e픡9Y 2q TS [JwXFaA='tYZOJ2D'Q!8fxzgςɀ<IAuWU0)'wӼe5*r+R&M&CrNOO [ :quFVe9OE8AB']qGߪ%ᜂNs~L 9u.ROvPUP(C#M<qHPB G(?̆Q><ϧӋ\~ ꧚{)SWU(Q>r(J:L%t(ppCE]G.a (Jzʟ(1S}5 G)ʏJ㜽gOcs(t˦~Tpr PG(矺딢s'8]2tQ9F}}?t sȉ^OEfTg<%*Q(~ CJOHҧ('B!RxG#D|G /n(xEtP9Cy*&?s9{)ᕫN@;[?|RB#MJ)Ȫc3d}_@.s~U!^ 9)PLd3Odq+euE}}>U,w(WTTg#〧:*&Cz.ATS%F>E999OC3\^c9J?6g>C9]R!8g(Ϟqa{>˯px|_ {Jg#V]_9UJi3H94'U0K8Bɇ4BB\9QNNE3pt9qNQ(CО(}Q9ǥGhFr! PP(QϪ>FQLʞpN^"W^~#tȣye 8`ɿT\?Nr8Jry޸ZD*e2)Mxj#xPeJ"T9 OQNNNES n)^ƦAr^9t=xt+/eӂWE?cx#)(]xTeuׄe9L fy`#<5y >|{˦STEjϨ)T+i \vhmZͦ\8[R{OE9хӜa79*P>.ŽSESžFr뗿G9QoOᜣ>Eψ/u(g(eӀtx%Fau]L.Ϫ]r)WsmS>rƅ{&ar WPoxJ(@f]>)H)Ȧ}A#BGӄ׏fTzLsy.C39{! s˯B9q{zcK>[U{peq@Vf'ky;wNbc$ Y8:TQ햏SSeO+PZ֥}Cd?(gs<^s^ .]_ȟZkEjyeӘ'1J3JPrSe8zӂ8}KN[UG,.JaY%\3S`Y]V( E=9ϩGQsѕӈe(r>(z+9G>iG?~St]sp콲S˧*xeFS[o? r躒껣:gE8,K"FV t&⴨_r<Ӷq-)G-(05iZUj;hdc7!C("L3џ_ NeON(P)C(91u^Qy!Nc耊}7|(Bj=yLB<>METE*Qm &=:i>rXC?Br}Rr(}L)]}/i&=99)>އLxzCנ@+QHu\$~{"<.sx}<3) 9t< (OG rT""y#{N+ q oz;GI4&Bu0)M=Brr)S=i(ۊ8NR#}_nWN!J lAr>{~Џ,.L)A8'W\_He(r>^ɇ*d9N\WP]<w@-[2❖TkaG(z32Տ\rr*ʏJQY9J}|sJG W\s#9>gg>^!L/osO>^/~f#"B#T"ɬ qC2aqe]Sr)Ȧ}HQӃۈf3\QuD')9('5JRT*x\rr%S8zӃ{DSӀ.r=n#Q?EG^NAB 2(2"9Fs(cRENs\5t P]xJ~dr*2]<<(8ZV O2qND\Ts9+ \]x=׾S~*}34u+ۮR\9.29GSsl \9@p!ȿ>Lz?~O9N]A2RN\(NQrd"rxES#)(9)]x#/oR29{(g<339u!J2S: ؜/`c>x%{ h]2xS=T ^\^p9^[#"ȧ(yJ)ȪWq=2pt!OK9qǤ}oeL/oe )/g J2+\Q99t T8.2.x@<8ڎhs8eBe~a{!(͔޼eS> Spz>J\)˩:sLu.yOɪW, sUWLQ溮FE5 WD \䧋sW#!OCr(扅B9SJ)"WСL(P(.R/p{@QO9DxNX?*G(JGeLZSTh=J?ׂQLwiy|SzeGsX(Tzr>(Q<}8f8S.G%9\~K/n{3szk%Ϙ(.hJLB(gH?[r.u  XP;6,MC8D(\%U/<>! WQ:qGф9z8 T+Sgs]TDH^ǒgJ43꽔.g-(.e<%t뗴rꏥr}NqqFS0?? s9)Q9zdg'^RV UËU7eЮzVniH"Z-H5|-/ȅ J.-*x )ȢU3U^ Rk6Zu"N'~F5F BŢj)ԡ:QiPP)5J('"}X }(sQ 9FQP]3eOL^ }>2kS.]ˮ^WdzNX/EErG}VQjpmM̯@񒫺^ѥ4ST~s>g<#Q]Pϟ\uODT c=}F]x:)N9us}#) G9WU r=29QN]r<9]U9XoOT#NQI8#r8 *!J %hA*!M4G +R 2n䃹J(~-הyU/ps^rˮ^ȩ9̣U .xRfO#!_C8mG>(2G.|<{{e9G dx=EuAJrtUFޟ?)K+ȅ׊UG@kP! 8ܘ p"[ %w֪W pUl];m*Rr(_T]s9x uQBQ3Ԥ)]x}prQ(^G^8 {{)x:d jyuE+L..~뢞L(^]QrM9t^)>uˇn(%U(]<{t\@eJ9Q yeptA%J.M]sȓ @ )ጺfG5C?z ϯL~>9 !O*Ҡ`z.3 T(sA9{!uN]2S󜜽Te2z&^Ȯf r>t=zeBK39DP]T%{oo? pd=)%{",!vզ"*3P+R:M_]uY(>rԵ z˪R+I@G(U;+V"Q(>xfVu,_Sq'bvTLLr~辻Zq+\SNaET.)ȧ'rl\<ru9=pN~B9F~ˢNZ%>HdW˃(ȅ(^VLQ#(L>PQ?u2F]2 ^TO{[L[p;qr&Kʻe5ۺml‪ jxhfUYlzS\OC"MGO0Tʭ@| -HUHTsi[KzcJ''-h8QuN*ћ+ 5Q-TSNE[e PS)C9 `<|e(s<׺3\3 {dWe x @L+(S+B]WD^@+]G#Y{E{d>G4r=BW™EYB}m^(({zNAAuG%huE>ե?!])M -˟ɕu%O C.beVjePVSlgg RԞs>r\Vۛ6GTdT":o0<:%jN*4q rrpʀ9Ϯe{*2qJ]3 ߆T*s1TE19O8?uӆsd)̞y%m3յϡ{J3<#>VW֘=wT PjJTFi`nYZQn?CmY=5'ݚU[U:opgG[V n(S&ԴUayZbttꊝx廮E q;oXo0mi`Js1|7־)ND2vWխNEB?ʽeydseW5.{\Bc9A3B闾~ _ԣ]Sp%drR^MUvѶPs)ȩUm OhSAO(E#mSyRSuqyK6 -( Jx]\ t^kg (PP.D'R">2) QT\(ȢQT~1.xsLEN_2R g uDLpT~콗^( ry"dG%9PO$zt23<\P۪ { r.Hm OcOzD# EtȄu{ M5]8矶Cc.Jt{]TyRuSL(ZED Cg6x7q8'ў><NX_okᬡmV"@@-?IDJ4enC)ɣQrԥJw *w*,mo-STFGJ.놵bWNmc?Hk­ۉbE,IAZҢN*)TSN*r(d˦Q*x'y/q|<Ρz헾q9e*Fg.\0e1| Bʞr#.R)ӃܨAχ]Pu*s0De3#'Ӟ.s{xEZQQ%Bڳ'hJ}@e 12OX5Rp*#ggJzuK mUˡ\]kŰ>Z\S5Qr6T% J,965aO%JXSkT-)ÞN̢g9G^e*rerQ+<ʐuajDR1<2ퟲ躡^~p T:uϧ"D!<g ]2Ժkg2>9fRsQUm-ݗko$8IR጗l s5jnv~ԺŖJ7tbpڷogkUq [UUE5=BBPE9>b46r_1`PI߬QȢ90!eBuSF^3 eI#GEF`yt]xH^r\ p~g*s P4{t]x =8&r+۪0 S\] a eC+/hG))Rdz!kmŠC9c4z |ixuzԵ)OtƕVڝjEiRUҚʭL!Z -*l pBn{kyxȥN"׹ 73EQNEfuR3*2!>  Q C9+ߢ!u(2u|Kd%<D:\{dW\FTdsAFg.EB*2T'C,˜ ]P亠)e{)Œ^=WDW\9ʙC3τʈC?ltaO?{9 a J!\Q֫RO}QASugN嗘miQ7XZb C[syYh)2ިK(8֩0ЉU**tCUơVځx Ǥ8PkvUװ2 \?Pr4NNE9bN]TGpBs`/BW(9zf3`s*`uG"95+!J 9Q ӄ/xe/ux}r g/euҡ/|?i@F^*]r9E{D">uPT t[XZqxgHQ'hj1Pt%ҸXvo]®/1N SsJ\(RI!L)A-G\1 BUUZ5Q6(U9U:QUjǪ觌GJԞyS-J}R(M ˞d arPd3 e NY{8^ TeHܮHtȜQ} x: 8#1[>*rs霩]7_L)UzzjR: ^@69*>Ui -AN(s(xצ|EF*}E99QGubۄި"y{s躯dT.9Ƞp*r%r+T^9<4y]9JFrϟK?9S,OpTm07uj{N 8ʭfۚ8] ܮ0^*9 BзAb_xelhxL*r]:6H@e ϤJ$ènZrYe*ڛ*ze999QYU a$)( WEˇdU)TB( B$W j</ _{De+ 23(s]sGT8X%o).I+Q]W|(E EwKQ]Tz%ީi.Iwawh\[kS]][-5b1ozŽb4~o ^tʩX11z.mI`Ct-۬ }#X8]Ųɦ۵庨Tԧ% -Pp]rpX_ilB*+)Z>Opu P9SD''eT*VT*T֕ouFSԥ"TTPEh( k*WTA%ke DiE˪+ߙDRSϪN]-JTWʋs<O"8{_BR*Vj+QZ+ZԵJVE.kRkZ֢-JTs*r*TD+RkT*[߇Ÿ^s pRО(˦Srt{`h=>JSEmd `B'UcR~JZT *rXO,D cSsel"ŻEAQȧ'"U:U OOTIU}AP:oT¡n3eQ .B25ajR)2# PZ.P\R-aH Srpt$DJT|oB5VoB/oDswDVRJԥj\JQrj VJS)jZ+VDs*T@ʕ*rԧ7;Kn. Q(̕<=PPFP(8,2SYS*Tpϥ} sO㞜sʵkU`QvX_䧼.M3\p1*-N7M Xe7rrMuol('Wsyr2,sJn* {OsM(ET U;rZrH[PQwU]+~EjUw]UWzTnQF}W}bxupwpW|}u^#pBx+WKn\Ljܯ^'rNxKK.n'b rx8C^7|7ɸ^=5CGOKG0be7h1㸁CC^;|v^?~~ ^`^?|~yy1_0_7X;E~Lj#M\@1 ̘^c  Ɉ/1ߡx ɈO/יq[[5. WAy4+X~b^3xjx^7znx㗨cw/Wޯcǯט/oo1 E|||||G/kMM^!#joګf _4/4/4^3^3ޯ3ޯ3/4ݡ7kW*Weo<]!+yyyyyuU۪UWǞU۪O^{rۗnއ/>>>/ i_XLe S_)'vH!>!PGZ M&Ž۔6 Com;l D{A_>"&b{A dv&%{[%K;;+凯8yGk=y6ax|y5XzVՇ4=y2y^e^dCh,\<Ç0yy z^=brrx݊%KlٕpqKB'jN]]^ iѡBνĨU  r̪rZdҵITJaMuJ):iPEJl#KYcnc2S֭*S{Vj'9p#r)Ȣ8'BP5T^OT 9J9ʞYJR)*T@R%u}RPEY)(U@0r T”Nn!"(Qd8@`(!pD%n$]ܮWw+2h.V#@ND6-By[M+pVn#H<9n[$-[ZV1UۓHhawT-Dn瑢I q+.@u N]wuݖ yFs4h. q ܭ3An4XN\ [UjzU¢TisФIn!n$-'RƠš-Ib|5=6hnf%wBo tKsS[[kvkG- Zh[iZVhEsз\2jҴšiZaBBҴ+J!BBѲ\S bݭtl\ Pj p)'77Ʉ煽ThrjbCw;룇b~-JV鴚aݑ_Zm$;x U%8eQPP+J-Nbs'SNCvw[=ܭs-+ r p r-4nV s.h-u- s s r ܭ.WwFS"UYIwVUJewQПj׆Z@М} &ҕRC(;1&CAn ([jA u[(r뻮 qp p pqtV yBnVws!@-P%[[1hZVO2U:rKC%n뙤5RF6MM` NRreBnn%i]wPVHѭ e([[[iInaii-----HSZ[XkBVBҪ(8BZb`PZb҉ړi- JзkB ZhEkJзkvkt$iݣI2nB-ԣE rKw t9rwA>wi]&m%aURQbնMWi :<2J-ܡMKrH[2[r TƢ(}%6ըڭ]sN6nVnVnV(R[[[F--ܭ4nnB--#InVhEnnhB#KnV[%iրDJʵl!Q ̔vTi*u E'Jթeubh`sZnօhZvhp.`ZT(- BҴ BҴ w KvhZV-+Jд-+BҴ+JҴZVB-EԥnjS#(E+VAJ~ZBiP+J-ZVhEL BҋViZVhEҕZth-ZhZ9ZV檎m4k0ʲ7pvB媅BݡMiZ9ZV-VZsʵ9΢U;]%ZX$ +Jд Bд-+Jд- Bд-+Jд- JҴ+Bд-*-+JҴ+L+Bд-+vkBд":3 23ʠڠW~\Yh- [[CPU)Т;AZK|B͘G[d8C"#R90sNYFB/^ZS*ּjiƐ*@~Qp#"* ABrM iZViZ$Ҵ+J-EBҴ+J!8nс5J J J҃ViP)c -E~5+ZzC)Mn:o*i4 աhEBСBd MKiҴBҴ+JҴ!Bݭ JҴ+Jд+JҴ+JҴ* jҴPPUfhEWcrMCP5Sv j PB  J "  J J,ZyZVBҴ+Bд+JҋVzV T"25:!l,kN+MfA աhZV Jҡ·)[Hr.)vBhZ!'Pj ZT(ZViZyiZV JҴ BҴ+J҈iZV JҡiȵiZT( JFD-*(PN|Қ΅%JsiWz}F>%V}h]\& PVeWUi[VTa+rOjE, m0Bν յ)\Y k_=8PBBsS#P9 (P*(ZT(ZV J Nݭ BдťiEi@-*(PB!UoN^'nLABд#MKth1iZViD(P`b`B L*iZViZVBҡiZT(PBiPBBҴ-*-K~ZH\N:UmYPjҡB (PB (PB(PiZViZV JҋT(D"Ol&\+qPbд'S[PjҴ*(PMo6R jЍ9AP&@(@(ZViP*(ZT(ZT(ZViZQjiEjҋQ…i eBGOCts% Kt Rҥc(L0E*U Z{V9)tux=ȥaw8~%N҃< L=q[bSVk@^5`2BC[96=Jt((PPU))I5 (PB (PB (UZV JҴ+JҜŧB` (PB(L2֘ѻN)̄aҴ((5iZT(D"9Ig-iҥzE H5iPB (PB (PB 3 "-+JpWT6ڋ6&nPEjx2AB (PBB8PFPPiEJ (PiP+J-D"GSuG k.}4 ZPj ZVhZ (PB hBд+J-ZViNbB J ((PB (PB J!B "ե8AdTpBD~ +NFUKSM'WaiidQZg?HOd U[FVOSѣLmZEk oml(wQ @8#-:P'& ((D*F-*3 (PBB!B (UA-*(PաiEJ (ȧett 5SAMjB JҴ*(PP)/MJЍ%N ݠ -+B PB (PB (PB (Q(Qf^OuF WMƇ_Q ok8aBPBB (P(PB (PBBҡBr}VWxXՈReZ8 WּэZ JҴ*(PB "lBҡiZVZiB<R B -* (EB (P0r҈PEI(#d*u>Mkj;9S2-lٽk@RhP(PB… (P8PP8PpV e*VkVyc5 B 8aKy<E  Bҡ*(QBB*DJ!UbkC8QGEéVIAB (PxPI #&\ ?8=r)"rj8ጏ+tFrN4*s J =(B8) +zy;HԶj 5x^4gw" Cх(PFg8!BB(U\*Qu⡇mA5B+w o SVZvd EDo*IyŒpBGǢx!E8'7*Ua5HyG k(s Z5RfpP@e (BB (8c(P(P((*O*)Þ^;}imnV*{kP)ŌFP2#(ZQ w}e@AJ e -+@ZT(QE>j5Nj ZrЙI4r4(Q qP߀4n@NZN|&:BciS=`$QGiBUm!+R^Na@AR(!„BS!B 2!nT\ ( եBBҴRҘC"1FQTA.cO#LRT-,uHᘥf׶x.OS鑔(PT(Gp;Smݭ B @29u<pFQe8QG"(ZVh[ZZXr($ܣ('3 TuFkSS4zViPCԅ ~w…TeiѴP 2 (N MaMp(|UB^}@1 5v{(Ee{f[TJ983Bh =(PGۨҴPB!B 3*0FPFQ gFP8 ҥKg}P#(S٨ S1❍JX)TT!PHŭ_jle+Xmi SrG 3(~9CԵ!*Kfoкe cr:xj.M%u@p…GC+B=Ebo͛ak\Jҡ6d!9-*`ŊWe TҜm"EQPiʣ<Ϋ`J;k*i]hS Ѓ:}xPPNt#Q2+x-m Ī<[5̶oF=C@hA47U\1wN0SP{ZX 4ma:8؛δ tEJ8o҃x\P9֦,f0Ql~\-+NncsMȢOU˜j6~J`rUka4l2R$2tS*Q]9Gr9W5H~t-(Bi%JԉW5!SDƙҴ>Pt Mz UC#Hc^踨ֿ@n>Nw6 Bu9Lgu{_\U(Q GiRkZ(:&c&POvr?T9;Pȃ(ZeKYCWn6-*$9B9TwkvM\̸4,J}w͔J<QDJdMCemoBOJ.UkF"*6նJg(WS u6e[,JоTJZ-e;H܏P=)SU*6*Z2='[xM d9Tz[UG*Lp4ͧ PH;'G)Λr*B„B2{C(6jНBS輛ySGS&PN ^Oj69G*<-`9B{dUCEGA!JWw+1Z U,~d'Z0,D"$ml훌R]ݤ{7 gҺAޟ_FTy)W VmC' n2!>)ڕ!̵I*8!iC SS:Q2UbiS֭+OC(g Se nĀ\9 EU؍Zu(Xmq4k5P#IT!\/rkSs{HV&GE{yFW4?(2NU c [5B-[5҇Ó ^U;?h j+oRҋcijeBm(z-]hzTpMmr }enca uwjj#jR2%t@JT?Ԫ,5DA$&VpC-J ApBPӤ=M Zo'B-E(U:VB{y'ю)xFZ42 - Pn eZ^o}l;fosa7)&Qs:)P)b 6XǮr:O*ӧYXs)SHGOrZzO/99iִ|4z0O e[7ܳj5.Y(!$J(*[Lr@Ԅ*~aJ]6D.s$ "l#(mT݊osTv-mp]5wts*xg"Ҡg tYAZEU:[ZVbkkö]1 qk(Z(QT8r F0 q9+,k]S˚9Bu579S(~ʩCR{PV8SQ¦S۬MZTX!0JAݾ)'i^wB:\U 5[~aʵ=B:Z.ۇ]Vm9eYPۚl|SQ0GQn"-AkJqKxۛ*LKt!=C(8-(=!?L'U ՃGꪃTd? 2Cjp"V9ĜQ) l=?!W.}{7Z^*ڡ9qַ>4:YThQ_Jjו+R?!j!&(? }wwagҤX Ъq&,nF)ɦN:#"n[\d͌$*Q0[e*< k : *ЕO˫(Nj ͔(t+C- #aB32NPG&ٶpv_SC]+QT*y4 TS'sdU4b3SrVPGxʕ0B7J8\Kj 94W6V-`E8JC/tH!iZW0>Zb0&r(yZs6V2ݕ;@x*~E ET`UT9Eɭ )zzZڳ^9f. tQf(zb -(3?pM@xqN*ӦMC)R $„DQo5iz~F#x)Rlg\~s|rTMNz]'Cr rx $RaC7vB85{ sxێHh 39XC*w'5fxN@pTjE68 z ?5հ}EbUmV[u-AåC*2(`#MÓTu U@6x}๠ H5'P6f~aRKѧrnE:TiM|>BЁZWʵxj RP@~ C\oipkzu-0&6QQN(T "yxrR^1ރ¸cm52%ʕJd3!HSZ5-+JvB_N֍!iR+6+R=F5iPMrܜ-d-hCk1qMӅ?1 anw_M F֎eJ+W*S^ʔ6x[5S~ +P@fH)D [("Xx) Oͧ!%)ʯ!ۻÙMT09B4uB'^@z!UA%ZQrg: ! J Vr}YoRoS a JMWҦ)Z(T-(YhN#gN[IPIZg'T7Ml)R%NQ*VK(s ~ !Էj4\[YaPfN sT PoE hZNUQ{M)ʱZ]Hٗ.υQB'*r?x$%@!e{Q (P+ʸ>⃵4!8'fQt&FP$ YWұ|R X-kWcSn6U(+b7ëᔍJ᪭#4ܵ4B_u_Zo|ޙ9TImh ()7exJ)Pџ9RA^s.[ qe09 }2WlmJJ MqnCS 1>A*eBVoeJk C!(!dI)\9yZ<5~^Q7i SȺV9RWfT)-MT<*4ZQK^[(C1_2)&?5-C)SIM)ߡ䧻jG!ѾUݥ%!{a!dJr?9JVQzEUަ[2Br NSYRHTy^*? ^J`<8-վZ񡶷5tw]AQ~i@&t&2i+G1V~b;Ҹl]Ëơ{X61FOl=A5ml ӽo5&\V5P)Sǭ \UfN= SeJo?6TQr{(ZMrԥkNz}m5w5/kn&؂t\Q2Biܕ>F9!̦rvPg-Bh~lOXdױo`̊a%92QBu/*(NښŽ1C~mOnz"cTb50 * QMtL ?:e9^]}öZƭKw'S)빣vP@{z)A߫V%^(51)1fX 9~D(̪RMH(p@z%J Qr.NzUVZ!U z4B\UxMaM~kS*h@z5m?'?9SPF XR{F4g"ȪԨ7KSΣJSMbZS'۵mʸ+ 턷 7 Cj$ԡmWU0sT9Rk6(ĺhRAZOAA kcB'QoS,iZQ}I@j@"kE%'ϵn9X9ɪF<3ri3«zB(U+nSQ *9 AM7iY)7UiPWl.e;7C~LL"S\8g2Q|+Sm'x4RZaENUB 0*ΆQ*3'76%?-*+b9) YYJ{g* kQn){(XPA+t~=c oд*SO-v.ZXU`*S"U7HN+SnqMzUO[KI}B?吆EVQURń8J9OE\ҨEL=~UGxp]عmX OzV&Һ5:]h5:pT*'NC)b^>6G(k@'R-JQuBu˞s,KvTؚ zO?HokZWS0:]Z?r(sA2 ׼ƸkHRraͶFFǓNRZ}AжP9B(6E; ßY.}0f"skU;[+D*TQ@u(C֘KSIy`xueJ|$`%[qFbX=;Sdjqbc`(E*wAPӻp* M9;z%THҥjZRXK6K6A)U)!B]\?*NW uk.AC2С5i(ԩE-o}ORshLkn@DB4jV5EEe(pJNQB(ZT~r)&NΣgN;oX*xvRU/JզAN(2>U BUFTi>! iE+ W 6um,X*5iRx-<%QDJԵ x̆QJseQ/NW7F{249Wdta4m(O 282wAZ9.icjQ?\u:U+U·a7++6iСNMnpWLPe+d̿իAҡLnD+W$@\fj*ʷnL*T)z֥jԡ{TS}!T:)͐Μr$@?V bT*sVU'rˡo洭>9Fn.ҍ 51mm+pṘUbu ӮPl(sf0wKn\[GyVnڮ)p'&UGʥKH4j+\7 e^]lg.WtQA8(fxjR& kZM%_QmZdØȢн$ꁩC-R@{SxGfӥ:-e`)N0/JvL'm(WM%KIwA9\gO:P.)C~?,B\[a}; Ju5OOdGRkUJSgB9…YRVysE25@ZSݨڐ M9Gpk[Rԭv! @ C LR?=ʭ-eQ-3vsG%s@ƙgX\ҺKBҷZe>M`e }7S+Kgn\u7HBZ{ӽufձc khf CIN|!S9SAވA!ASJ*6E7 mpjeB22BKPeB(~qE#F=29-  ‭Nf+Y]-`ZPoRTJ ʞOJSia"Σ\cΪʁeE8P_ڶ+&?\ ͔QD4Ȕ$z[M\8EJ:/)m-}J2yA8ZT+<=OFӭ -r!TRI~O@(rrLG^b 9Be!-KRE<Z @zd*)vtӷGNEk0*Th~* g/ @Hna#v+b5K\nuHĶjrYkoZtW^)Z{F* Cit!XJoJM]r*̷}lA[Sj*vH8]J<;]2ЄTԅV-p۽m%V-f=r<'3tSF8)e?3OR-YsR݁I#kZMO>> ljqJ%9R՜Ð誄 !S!%uO鴖=ZιE0 hȵ>UhD"حB)r *P?*r5yь%LT螾FVZ#-RNRU[MbOGoQBWU ;3[E9NUjhm \@%ZRTT=Tre`Fn \J5U>[g9+<ԫiOKFgx+Ypʔ[vܬ5 ܁RφW^D(P/ ÓP<'&DdP%Rm&Բ{j]TBTX-6co+ VN9pxTȕ\QWQm>ǬOh+^bRfzs RxeJ([VkZ*SmsXR|&P}mOÕJԋNnˈ*PC"Vjʄ!U],ʵj~C֞~TZ!Ξ(OPkLtr@J9EӮ!ӲCY9I(PR֘2+|Q!4]()w~VtATw[˦6L!uQRM(-H2딩k2jmsp֐@F5~hpF2౜* ? -N.62(R"RhqA2:+]bx{aAjZS& BP^鲳fyL׮R{}c g'"4VtNMғ2*_ SA,iTUA5*B{WL*|&aTjCɃn>JEtC2 NO)Eo;EҺ&E=[02@UjUKE {f|;ì5@5m}p*L\Z6P̧iKfիJqx(zj>QM<. !102A"@PQ`a#Bpq3C?1}[Pg2I̤Rs)9rs)9Ne'2I}%Ujk9e'2I̤9*и9_I}:ׁUccI̤Ne'2GTR&Q̤K9 ׁ5NQ̥Ne'2Ne'2;aEV}%_I̤R^z>b9Nb9#G1s_G1}o.Qs?G3s?G7s?FqIG1sG1U#Q̨/Dԋ.k&k3zžnŋ8nV,sƺEr^]䪸jR~JYc]Ppqc8[a^䨨xƧ(ȱ 'D+O n{5$cuUߠQس[ JG18jD;bpX TpǞAa xS"sUGpQQ c8~pI''O'lZku:A}U|R\X;V5j[np|&aHƩlvŸ(,gLJxŅUxQQ&Kr'I.DBDUK¨DN]//S#On`8@ HcߠQزpʷ8^rJuzU}#Rn+c e~,gLCpǹ$$^*ʎ1%Ģa$CrI%¨lbl?#f!Nŵ} U[W}WЕE)Ƨ䆈f2 [Q ڳ=Hi ;x.^Ne%_I}%WaEv/K/ ˩.K/ Kܺ .JGEP]AuP_AzX&h']Aumr]EGw u#r1q)kO O ].u tepɠ]AuT*ܞ4P]GuB)3O̤~/CU:Y_G1}s_G1}999.Nc9?c93eEьdyתIq/a{D贱"X"Xab,#Gb9hRrEt,,,E KZ9i!DaiE#Z sRX*ab,,CX:Kb9tKj1SIe%YIe%-Ij-E`hѐq:/bJ͞ќWA {^]TQسpBOzTUA z=UV3 hԜ8y+rQgV{xX.>z 꽏>"BsGbERjETJnp2s)QOzBs5lTEW݂)ܜj%?dGq[ ]ԥDaj[e&1 {tQGbʷ8_ۡWyQPv9^ܒIV8 ..$ࣵI$N+ $U J?D.$O {'q$"bc2m[V|a5ld= ge[/턓Oz䗗**....'%IqqvrU JqKX7<2EPBOqtT*3~Hؙ"bo ;*wa"rKe-ŭa>}}y9_I}%_I}%^\J^ԗR]Iu%ԗRUWi(eԗR]Iu%ԗR\MVUu$MR]Ir*r?KUEGh&JZI4A4Au#xŠџzAg rmr]C'dMԍZj*'dB/Qi<3O Ne/r .躂 nK/辟K99g1}^b9~^N999ٿePL fhhhhhhBAAF0AAAAAFH #$AFH B44AagJ%ar$$j#_eU8B B-EX),E(Yj-- %sXb,EcZZZb-CXSN j,G-:c Tj YaaaJKR9g+r 1壖aai%K?e*YaE"5FKj-EZj-^>1`T;g{np} ?= *e >E=3"rѹ:e;cQQzUn헗6X>GjȚ{b+n_NJ޲^j*i ÇKZ;8L )PǑ9f,R䧸{rzdg1a% xFz**?I-ETԟX>GbƷTb+nbt zINF5lxX6(ÇPuXȊJkEXk '!O*2cOsP,VZ7*QQqkQ*tUY0n3v,jNT/b% Rơw4% ̼j*b߾j-S$,!nB#3Gb*naweGt4Gi%ĒxŽK)J=&dৱ%EV 8e1 de]$I)UNw2I.$18N :{,*=/K/K.K*pI4I *II(T j=$zOI%T2C='I4O^0ўEPzIu(z*-xdpង7#)5&zA4 *= G"8drMnG "8g@܌Tdp?u>k^<2xe&FQą Ne'2K9Nb9Ss)9I]!A -#  `11 KKKKKq2AAĖA  #$Aiaӫj#*?]&ZQb,EE"Zb,E yPX,,EaBKKK KKÖZ=0贰ZXXK YlaJÖrKÖrg,r SÖZXrKBr Yaai>圳:cURZ[---AiiAI1ٿi^Ǖc(YV BC<8{t= -\2n5It8~zny*J*x(])*`'?2 (^[WAt*yTS<nܧ{cr$WUbqp^­쇝t*T.=$qcؒ\FėNr./ENI*KE5p$Qqp'LKX<2Ir\I8I$P +b'u?eR]Ou%ȺIEԗR]Iu%ԗS]Ou?eȩ],M$J44C8uI4I(m,(ש4zOI4r]MGHB; " h"M#0ёC-HԘrM,HISRexe2šܚxdpȠܱ-xdp? SUM]AuAuAuR_I}%_O̮AAZZAicAiicAiiiZZAih0AZ[AiaF6ZAZAF0AA    0> H N----EP="Ѭ,,e" -,,,,,,-,,,,,-,9l2Z:YaiaбC-,Z񴵖 Yk j:oBZZZZ4!/l.Žsך_MrU [UIMWg<?+%N5m}(>GoBRY.BaV հű[K|(=G媆܊*]/풪dJ14,<m= uI"ʷ8^~6-Jr$y]%dgH=Tve[=WNan<;I$qN$II7} 8{*LszUGGC䮻G5sj9}Q[GRP>U^Qʷ8{yyqpVǕ0Uk 8^~6S:/G1sb/AN1f/<ЙF/0+ ;Hsk,-,e*UܩH--b TaVǕ9аT* ak 8[aS#Ac9l2q`e4Yc<=:S c%\ Fi1An>D?A8lIv GG4$I$Q$Q(I8mЂF Of=3nH~rz>D!.ЌFs}jH0FX!B!FB!D"MD"B!D"ZQj-EZQj!D"B!D"j!ZQj-EZQj-ERYIe%K),E"Kb,G-rG-"XZ9h壖Z9h壖Z9h壖YG-rZ9h圣rR9Hr#$^u&0^8$O椒q$I$I$I$I'9'_qfe*9 '=)$pr(I$IDKYx.d*qqyy{/9ȸМ$' qpOB}Q7"=¨K˙qyy%ē̹SV\9U]#UKyq%ėI9YrN36$ *s//90]1@. ^^^\^ˋYyyyyxlKo֜fzNNY'IqpIq$N O#$sI8I$II$eI$I.,L{fzӎF#PAO[Ddtg ~e|3 k84O2#=MjB#GN?uQ^0\uՑ${DeJ1 S1F/b) ȂScݸ,{ au bK' So=KFƫ ܲ%d0}IZW)٣ou|Cp-x,v)hp~5"}>{D75|\tOÿ*b}uoЏ~XF Vز:$|3}2:LK_} }ՑҟyQ}k#Xfpа~܏2rGMD/s;lZzPk&":[fbsZ,Ok @2GgO3)ͧ#3/YI>/|5qm-!1 02AQ@P"B`a#pq3?!idN gQf>mPGQzuF JWNO$aQFTaQF,J Zُ鵱FTaQFRΓ *0£ *0dAKUD£ *0£ |CPMTaQFTaQ!эF5TaQF&" M0~L0LRݍȚ0L?[F/&`/&+*!xչcO|ƓHnDxEPEPE$P}N }x>|sv)r7H{hO%Y2 C!C!MMx5555555׃[jjjkǩړxfbYd2ᘳC1f,}Y1f ŘCWŘbY1dEzl=6`CW=&zLLO ϽTU+N¬ԩcI$Idͪxd̙2fLNӂ6fٓ3flU>w3l͙6fٛ-GT8FL͙gٔ7Ffl͞=FzUvZ)=Fz3flnuU=Ffٛ32U(vQ3fl͋ "p3fl͙&7/QQfl͊#ћ"YFugQBjugӗ#j%d?#z$kyW1R"tV+NLƒqt iRN :R}D7W)kuAУQrPRuj4:SWC@+أr+*WdA2`ȋP}թ3+P:_7 vĹ)Ho|S*s*+f.>أ钽WTv[#suFj݊6}hvZ[}ہlQUzJ*h6$wbl@檚 K$pI<Ka~ڑqu>t"#HӁU]Hd;OaYh"qlQ| Y{v (>ω2T+G #ЛA $@; ؓ~ɻGjx)t"zw+WE{+Iw~5u wQԅRVWRP{>l;SHأsmhU;h->@ًsw~ܫ^Ox dY2pBt1En"Lbi \ڕ$%n-JHЊ}HWh.v"ѤvdQԅAFE]J$lЂ-WKb.ƆvcEܨ}%(44TFݑg hHr׋@+ؤ hGq"m&|T-H#*Y 6L|Ţ7H̉(-Y!uZȲ^icW.v Fn&h"h"؍;>"ؘZϣh t+~k*IQb:J(=OCܯd+ʳ4+iP} ̩M&T&i7IUJtQ^U&J%y%O*|ReI&t'f"u+L%qJeQ]#d'ULicI&4cA&4G%LjuWwCzikN(kf2$x%$_I$_I&I$I'I%I<M_ԛC!I bd3RlQ1d2*"UmYF,Őd2l£`*0f 5d1f Ř3ʋRUtsV\S+>U*L%2L2fLə361)3fl͙3&d̙6FLə6f2Ҥ͞33fflUNw3fgzQ23gQ=Fe ٛ~FLQ=Fz L3gQsì͙6fQ"E5fQG9( 3Σ:3U^E]PgW*QFLɉ奶pK%Q&dZ!!)pU…H+A|jE-%4#mO;ѿ!\[nP>$=Ǻ*\uNt]cDWWc)Zj6zD>k$ܨ$( :v;]P Jځp5Y|ŝoF⺦Jtw*CR%%[sCKԪl~,}#r7BxOA!࣐MPmN\jmj9Kam}/ؤ}n(qt"wqVkWF7[jSӅaqTbϥc)EZ}Hd Şc>MZ@իOB]~~lv2d+M-"ƄWmƶ(ܤV}Hc)ZA]t}@Ї>AAlvg  h"+?}>* j45d>k>yH|jEidRًb-zG 8_AE)ċѹA&&&$[bb:nJ6 H;n}iPVA;^D8+?赏Hm}~Ȟ5d>U#F £ *0fTaQF,) lcQcQF5"e䈬j1tdVEdVEf5S5R}}Ef5%T9HϼȬơ(ΜEf/ kc?ϼGKC?B+"7dOE~H}LfE~H"$W䊼iTcWW1~H]܉L?bgn`&+Ɋb٢)ԫ~zhԗ&DfDL%̉I&Lo&Dy22$&M&I$$I$I$d$jjk}I$SSSR I jC1d;*1ƣaQ1d3C1Řf'Cqքdm1GJY,ə3&f̙3flΣ:ٛ&㡛3fLə6Le&lə3#6deԣ#3####+#6z͙,gz33!Tffgz3=0ffffffd=CgP =CgQpe=CYVi3fl͙67p3&d̙2fLə3&K%gث>C6"4"[NUےHӍ{v],[q#R5EC;lQVfSLP1K/BSWWQtRWҸ0|őww!U| NFPCWqoܫtT?-)dܨ}%=# ׂHM&d̟-xؾU<"ХWB+poqtmzztSނ[ڑK*}"e;*qniz e;1Ŕޭ)OXPJzx̤]wbCk_|xGWU鄤UK)+\ŵڔTtSށujC,*߁k-ʊw&V V5~zx*I^ ܨ}%=*feI` RVOM߱{Sj/)Z$"5DqK֎*w;b\>lAdS t~G@՘YGI45jDSh^tEhh[ iunREMv'8K߫>C6Z̙.KB*pWZ/],kAzNfD]з*IGI&&#;A5-R LG@PYH t)c 0T> hR.( jK\ 'lJ4'Tƣj1ƣj1ƣcQF,HETΨED;FT#"*"*!ڟOϼϸU.eqyyΜO&~EVZ>v2_P}B~tO?ϼY"~2_T}ӱ?PO'}HLIB~C܋]MKb~<O$W䊻D"r`?&ɋb0~L_1~yi$G&K%dY,ȖK222$ə^L3|2fDL7&ď3###"o$I$y2$I'I$"II$OY$jjE555555>Q "Y{4R3fLɒ̙2fLə3&d̙2fLUYx222222t2332227Ľ̕22233Z`$ffiU332FHLb2GzLffYVҬ3=Ojdddddddde$ȒdI>Ds1cܪ{:}%>4"'! s;vcR!pb*])tb^V쪘#*~I2r %[a_C\^˃ )xl;vm 5zD.ږ[l6ZIMܩt>ߥU>Ӹ)Tu;WB+^SxE'{ӱVGrõ}W-H֥[]]CE[lJ.CܫoM j9ql+WJYԢE{+v_/AIN{ӱV.]j j*[Z9BOrRPASC*!1]Yo`(l?h[q$w*hgbЅfEܫeh Ă-NDj5t"Uێ92L~ Ċ! /Ŕ Ă,Jw ċʻ[,"11GI=ʶBV LF' GH R-A^Y%{vt>5bY1Ƣ*!C1Řbj1f#>> Et˔EDTEDTEDTCfG܏j|U$MdMg}@r2ʲk>#͚z2}Bk&u&UVe ϼEỊ/g 2CA/e &gh)1i_P}B~?PCmj&HYyYYYYcQF5aWDJ?~Y##"L222222&dď7#&d̙2̌&3#"o&FFD^L|$ț$dI7I$II$I$I$I$n.F-I$ȓ#"l ͶRdddddfedȓ#"fjI232222^ #3?x2^ FFKf#$f׃4d*׃5[E%"Q(I(RTH%DQ&rґ4d)z|5ȈZȯe}E WؤWH ')rߍZB"I+|m"P b5- q}e^g ƭWO! _NW+IOI000f#P.(RbbbbbE{?eJSB+ߍZJ墽!rq=QIE=W^OB'US#z%̘''k>R&<*nbbbbbT!tI11b``````Fȯ|m"P %HQM01F{v%DjWr T9-=4JM.j%FFFFCsdURNLӦFC+"E]E. 2B$d[$75g_kE|zwW-*LZ#HVwW!EZI$Om$MI$IDI$J$IB+љ#$dђ22;/dђ2FFD&YVI$I'h)N DI$SRI$I'.zF3ewR)#$d(I"J%Dl(J%x%N愢WQ(*}M> ^ DM$Q+(|I>C>BQ4^ |OQ(|DWWWWi%x%x2&I3^ DW% TJ2^ WW%{OiM> 4&UT&<Gh5HW5&!",E-^AAZ  AAAAAAAAAAAA   HȜ0Hj`d0kR*6D?뼉 m?*AbbbAB ĂB D"11!D"1D")1F(B"cIv+IUkL|&$ j6IOkdzciMIK&MI$I,Y,K$K%dId&K%2Y,K$K%dY,K%dY,d̙2fLə3&d̙2fLɒ̙2fLə3&dd̙2fLə3####&ddddffffffffdffdfffffffffffzzCfDiD#AGb`(#LJ!rZ#_70f,Ř#gآt:E0l1W*@0111000000001010110010100011 A1111f&zbċAh ăbA&&( Yh"111f&$cx1111111111    d$lL qMAAAA*\ L Ă A^  LLQ鞟Q&&&&&(@ 6k;|ć˞D֜PG*}>sױ_ΜshϾdRènI$:A9ВI&Tɳ\uЇd^4"*_r -)2DѰ[I<mHqjʊ&M8kR4ۑ#J>& XY~tY> g&)1)CoFlߘ2&⟓~!y ]LA+Or{ n=ƜO{E[oĬjI]?JO|q얷q6DT:Yklʈ#{xfɧ} _6'L0FDqEI$k!h>}?HOzHWI$%%J/ -G<12g}q/ `kޮD]#4S;I׳C?phUFCCQt!2);S[䦊MJbܪGO!3%gp#'%:>Ӆւ9@4CZ1*'In R|[r 5ip;/x ;^9hl|"m<{T;j-Ar$U6}f\VIJmD&SypMG[Y FGq>OlZ{Lnx$϶(>]8q'^IVǍs^{hhmqmU>^mIn{5̛GLGv$L{O:DMA򌊜)B1:yC6kΌL'N(a?0k56RuyS=I"z5krpO#ByRBCAJ7=zsR_{X^)6ؘ2C^9Cm?MRhSälThd5PUF1$4BC|idtp=QV'sϥd?B#AUs‡vIW.$QWLz?hO-' >2Zy wc~LKA$`bbb_$GADRO&Kf>I%إ-۫jd |\‰\I "Q rmw!7cQc{U  !1 24AQ"03@Paqrs`#5BRCb$Scp%6t&D?S)ËBd#s,U{]+HIRCX|U)4IB]Q #fұr1XvJ\fى惲IV9V+bX7)nVT17Cǫ# mh#u8c^H(0~s{Q`?QޝcL(ح6{+4ZV9xr/7(qQo66q!Al+V+bX<=!U>OlOz,+8Ⳋ+8Ⳋ+8℁s'#1}]Ӛ$6-8圳+8Vr+9g,*X-BTHOkw=b+8JĬJĬNF8\gRܳљQdxc `YfVa\YWBwh'S)aBڤ0(QN-ڤO*" bJbVʴHEF-/h|C8UZ$O= 6vЃ?qM.)eŷ̳?`2̳~+⯋)jOԞ = \o9XrYEis:iiWR_ഗx+N|)% Iw8@w7oJ;wC  ҿ ҿ  ҿ Ǖi_iCʴZW[gVmGxjUDhx:&S l7= ox.= gx.= gx-%؃EVܛ !`;lԴ~ kkkkkjqWlhVh8r5` q\t5\sdzq\{< qWr?!uݑS@kk q3qZC<omH4 N.E`{NM1i-ZK|IoiM)UʴV*қZS|Jo_JT xϋ(6 B /[WVVVVVVVV|I>U*ҝWҝS#0VhЃ6g"haokI?b"H-"/ܴ ~F\toq7>)-}^r/ XdX,b<lO2'f؞e2\[_TDav^!DF}墏AVu.-.-*iPip|N&nphRL)!!!!!y̸y̤ح=G*\c|W7q\c|W/hw GlE(mc+thF:DMģG V޾o+A+BV Z8_z`}EZ,P(vfkCF}#pߔҾ։n3\l/"!Su6-:gWM 1)}._J{Uw˭}/}-į>%}+IG_Kk}M˶yasnVUBpRMh{mn-Iqaqaf$j9,՚V 5:Jeg{# 7=zkGf]#tTYX,`a0P&)>/7S^6LE̮t@qVZִ1kXbV.YRX> mM&ѩ-qt[7s ؇rD|6'bjbx:':'Ku\|O%O1ZzSc.|^掵<#jA0k=NE*)+H*D_bbbbbbbbD |XQ5o_he'<`Mh)4xTRb1|i1ٗBv2YOMT[i ee$n }7L]@G͏ .u)a͙9!Q\]m bNGm:i@l~S'QC&_^^eJk,\6.L^2Doª/mE3m(LJY֙W@J$7)'!ԋlMShT[$J$OaSBU3M3=#PhlwNUʇjP9_!bsF"8Qνr؝@Qq:ĥ]3.J( o}T^_՗:Y/_e2*; G EV)8wbudÃ&b +)0.1[h6ֆ2ت/XMWeN*d&{ڧ,KpY*+h)9K9#Aqk #`_EFѕPNUeoT.*?c,UR~ɞ : YQ*QQ 2'_pvXeA>$mبԸ?z_4CX޶N^7/dֆT vD֩m.,:oª/m8,{>ħ'Nci/}5n-_?t ͝ ~dJ(T}Sx(\uwƪga7*%.-CND`EvM ߾.؟; ;򨝦!U eH˩{e|v-R _'"unS*PMt޺9-TG &>Fw}Tn_Ժ2kxTH}g-oT^}+ucW<[.ʒb?_ZgՖe-ຨa7" 8Ym cE{ Z0f3jVlt-Y5ok7R&<_$h#bѳR\ZzDtCyPʱۑq띱C]+e͹nQ;U/Kw]Sbqd "RtBd#NF{LiQ(dƒ0n2# lOQ`rBwmUErwR}o8(4`3i<kY{;%UӻhpCga6 Ceϼt<1TOZ|8խ]"H*)с }E;/{{]7(w{Tn_Ԇ]{ai7 !8=ĦܷTZņET>Uؙ^j))ֱQ;T[E, IئLl )pk;tr[!HޭjإdReȦPs[qحX*S^)M0/\ P˴dA+-åEMTQƸ=XO!ЭkQ;ؙk=KңQA~PhG⟿x=3eШ~Q{hnse>4GdRIgZ`8&omNRgx꩝ܠH#XV>Y]ktwIV1_U*xfk.Yx*{T^_Ժ.U"jv8Krba1 bت7XMZn*ǀw :cbKnn '>utU>ȫSE֛qjzʡH ε@Wúj/zjkpQ[~7p^7'dד} 7U δM_u&wLS| /*{S:6|PAalO;UU3 v*:o EQg!*AWBYlذ!nÃkZDNJ b:`\=(2 RξHG* Tp ӥ#cQ{ک@Oro˩vbu*+4b# =;W;M(WSaM2'R7pmeUoª/ibYWGʃp+k-8$M*>S ՗S; t6@irTXVt2؅T?jr;;vŹYݽMNkƼ:uݑI-Zс ݿ!tj(vXS=S'7 ˘dr*/U3CQkfH#Πsbsv#)T^*ou, 8`]V xޟ&{L \Q,<8 FfĂ"p[낹n>aȐ]|W౒_kaI 2750L8K.$`^/*\aQ ZdHiLT }u57QCLޣwS%2c967G!l/7;b9!Q;ExWV1hp) S"Fێ6̉ e;'oTN_ՖIROtV[oª/m N "-Γl8jyʇ֡]7WnӢn.ffnʋ;;UL&))zOd$VH7dT v*5Ϋtxd{-Eur+}mԏi PYgr7NWlTN ݴrX 7)|j1#1ӕ 4齴dڣt9Ui4J:bgmR NڙEF݃ZU ڝ`BĊDqr MM]/ aDq5^QN2ԩQ:"V'&֨ߍTg^\+jC pˍn*%W'v*&u+>Y ݊{]9[r/\$PEZQ M ̹,9Cۥn>l16ukBHVP[H+g$-NiبGuqMQ.!*)X`+3W,a|ku)pΞ/ISoTNNCcD7U궎GO.I7T3WLC*\dS; 﫢!ЛU iz*ѺIkO܋u/99\J <ZVd:jƬr6/U)0XV7V5cV+ ;|t.kK9qT1ur[֣\`YqW{xYgRZmTf"*c)վ+8,pY+kcVSb,x.g*F$?]i&v!zAƢ "+ t-N+]KN91Vp˕F'.i>3d։Cm׫a.{>VTHg (^$ZT[07ƶR > Ѣ 1)Ԏʊ7nN # Ph6Rk  mf.X+­oHl+ >]}*嚰X, `X,1pQ< lH/M`*à Nq|bR%Da#zΪLcf%'ȬV+bXV+Rb ɓd v禢DboLyYgVyYgVyYgLn?b`ONN%VqYgVqXXJbV$VtV]hNi'078p)2q k,1Yn3Q"bA7jRsH+fҳ+0,ืx.) wทW*y yȧhU/.yWJ̿T6LiumUz v HHcL4aQ_՜ŋ!2a6.>.> i rC oƹ#^~aKHgYഖx}% Jദx-% IoҙശV*S.jv5BljA{OV*VV´ZSIZDG Aۯ9ӨX萺ZL_i~FZD_qWqW.616/ϋⅦ:'iMb0<ENr/̳byc1uſθ2\A"TDdoRC"NhpSu5hZ$?Z/BZ/*!yV ʴ8>E-|&3dИ~UCq\S|c|c|<hYf `XpW)]"ANu!5pX!}DtS%&3խ0J\DntG*3 C7bʙ6 #}x p[[P0f `fs,nC[,}"OK   ̸~e.9e3̸yƳ̸x1+oooooobpYbXV+boXB,B,B,B*Zo1+ox5+gq.:_H?/NV n J K K K L L L LZd:`֝G|xq{M \di|OZt/BZl5Zk>9zYV/)RRY4C;'zzWݕ0c;qeݕh{?YvifR=kGQ4_M]B}@}@}Gj:?_FF5}緵GlO8_GEЮtI-}wz Bu7L^+.qt:$ m[F|މ[CT⾋o|0v+ Z(8ڴJ?z2hܝp*SSo৬!oئ8 ~OnSO #E^qAZ*{B%.)f)nk5f,՚VbY+⃬Zw8FvixnDyZ&S q*nb؞bؾb+++++()+}I:Wʠ >/e&HٌDĦ:~3 27+L ).J>.J)>6J)>2>2J‰IG]":FE}E?OH>JIGLB J7F?+(𤘈¾ F7+¾ ݠ>] z!۟ S[jڈ䐶39_H}!H}!IizVIixWxVH],#JD_z=[ֆ[tRKEī rzܸ,{Vc=SG޸ˊqBQ"Q_P3b4DyZ&Jt8q ,awZo;B?6qNhhx-Gwܴsgy|Gc-ɡ}7x2Q}L }vkvSbljoZ2Z0+F֊բhZ31hZ3VZ3O0cX8I6>kiQsz:Ss|ԄWf^֟bgf3f3fC~UʳY64@ODD~CUlQf$\ AoH:]Aqq\{9+w9+Ev(`fo\: 7Y{o\ޢ2ϭq\cW|VqX9 NԄH1"'. 9#9OJ;AF{-\8[qaJCs%ޝS9==APb}Ug;18*e1k-oaG{W[TJCkLV2;*+Fy Ƣ3fּq>D?Uq8 u/GS/cqځP+n 4q E[\a=!epP-d>IE3sI<<'Z@psJ4֙4ףbk&ꮉ2N` aWOq:˽uӗaY1p M1\oA.`A S0,[PAbV)NKsDÙ)r|'X^ˆH$g3\~Q|#Kaך]ܨߍQz<3z+p*~BWvP[8j9jȪ֏ J'tkvᎦ|}Mȗ)5E𩝴WOO WF-\5k}P#/?($Z3NExGeÎֵa<4&CR9l\^=N\z `X, )3Qc ˺#{W T(] #uD-R7rFuC#yY !WJ'X֨'dpwߐݔ dUENᚢw'C&@_vRLA^Ey=ѻ)0T{PL"Ȣ÷<X@M\Z3dDGen8X5죗NIU6UaT6L\p3]* zlXr`ka>rvjR7j ϒE;zzvFRT> ݾ~p#wut joZKA\Ng dyZUI`ˇ dUD)3zWM· }QUJb1Fy=/t^z5e!,-u]'Z7O.-)thv\>7e/'J"%ԛkz}E k(mV\Xߓ 5HEM3c]Wr2p(Z۔Uo$+:MUF'avVGZnahՓ5O&aһ̘wb:DBoY6l9Zq O!> b/T^(pe֋[Q)"؁)e3z8/Ŀ 4m;2o rGQ#Uתh﫨UIܡGql5u)KzGdMլ27&33{.ȪNm6m)mI>!]{e1pDI7O$cz64&`Sm6Wv[mtm[%%Lc1b#. */d+d#_呸<# 3 5]#E>DL8iZ;;'vkƆcޝ{S~UrnRJUπ$RZn @Ps'oT\Fi%oY% &IpWxf_rMUFHjsP_{FJ;h[Tx4#|&zqGWKLFTk@3^© T4\QT^{2 &,6YֺJZTX.y#)k}\^iDAmC|(ϜgqPc8J p}T)@(֞|޳ң] ZvETNvQ|c}b-d 6m7)h'C&?wʇYjwe1 ڍ2/v߅P̦%f :ӜXU-E\ޢ5 %vQ(9aqHn.& 9 #PJR䑺:V]^]~Qr`X*unj̍,0DM#wP4H!v\1LTGXgp;2ORWK2FvX67rn߽Sl]jg)2Tn|j{Yi;рSsLT/+`e2p)hK:_񊦏*=\nTf\-(]UG)j֣齴2l85p.$*'t߅L'blX 7)>(nЁ Xz﫺:}LJyXTnnq NռrRҮ!0qr&Qʅ\Zf! =N\EϽa]Xk VKP2VI mqMM_$ӊT>I|kڍ#qF=%J#D{X~੔46B}%P"6%䴈?WB9\_]/ʣT~jdo[gWO L )pн`UD'pL7]MdcETM@- aVޥ@؝#%Dǂ ѝ຺daC5No; 75Nxr9;jحݔV̨aԢ"@`s,ӪnXNZNʹ*#uߊGL MSap^8U &-T4DABi*tڨݴWO zut3Tn|jεAEg#,:xߕTMCP{/i9c³ kvsGƪG`tc5cVQTN xl$6JMtNɯvGJS9ΫLq~Fʥ)VurweɅ{[Hn6y{;Nל*#uDpqdV=ݵI֩1M7bq1|Y}gW1rh\wMGwd˫~nHԷOgZ|B74*px-vꪑ(dB(=US<+:fqe]3G{5R{7 T:t߅Mk,%]2U Ue[0A:4IZv5aTP/PO_BV@:9)WҮj?5K(KTth(CG!t)p2T6!V+;s=8,A:M˫]#o G;U"Oa:b_\5.f0%V :v 'MaPlvңwR% hHɿ#&Ԩ}تI+mWc]+kU*jU%uޤ2I ˎhD8jUбXWrb7f ΰ\ӕ.2MBaOHlm4V+$YLc\M1UjFIFl:yo"Ղ¬ mɹ2Tj665uiFᑅXU*'?W(TVJ`O 1#dTQ`QÂبfo]V5T"oSjY6,Ղ`X+Q"`+ⷫ5fՂ`X, RĢ;~mOi(qVF'bGeL%Th?ZWu\ZXKRԱ ,BA2(0]+aRYrY9g?dYg͋aR J JJ J (j#:Hll8m N*WVyYgQߕV% GNREtⰱgVqYbV$Jֵ|Wܬ5u|rgdۊH5i ZC<3iK\t5C\t5\l%\d5BYVt/gCw5Bo8bY,X3̰ga̳YY,yc<1eŷ̯ h l]CXÊAFx{v+F>+F>+F>+F+F+G֎KpӷP! ]zljcg0R͉ Fk֏#Z?޴hzG$xa|طD5$M8)n 9q<ˉe}KK$x(x-eSc : 2 Cm 8( sv9f7̸c|1eŷ̳YX3̰X3̰gf̿?oC`B,odoŗp|Vv/:+4vF]\Q`2͉YȞuθ2Oq ѿZ(=e|C?;:V--kD}CZ*РV ʴH^^gtN8!c`;Y3;d1ۜ¬8,20Â/VvPM}Є0͗kL!n[+v P6u7q\c|V{|VpYg!b!b+Xc^?9xVpYgp>p>p>p>p) d{aM8m?;NӠy]]@->iqwk{ҽ^"S+4"i~ERGR5nh͖lRN}C^8Y=+6h(,{y+X\){\I\SW|ˉwqn.)ifg+cy by걉+:/>)qV|_9WWYWU-?:??>J5 tGS -Σƽnn?TcE=MڍA7BWSi!uC0 B,RX6nF~/c1t'CmI[OLI>e#̃`Z+NnP螘`i &4Dk'෾?]He2R[K!3Jr1:S"CunW9nk&F})})LN1?_JeeoWZ?쾔}8ؾ~$W鐾OLU ѡ21߷ZY L;\ؾ>!}/_KwFצ"OT_L_L-by#K_~MQ6ktxCPJ$~LD#ޙ/}bb o~LƗi}1H++H?#?I?%Vt(~ %ͥ uujjFu{w.~?u7zf#i~k鈍{}7}o{~鸲F~>C䞔tg:k4'6>4^tK'q*C}NHR/._H<_H9iJөg-:(yʾHw[J:+~֭x3q2"jY )I1mL !9򈬞nzUE?OtzVto_şXDU1a#H]5,gQ&`ϲkRb\hŧR\7ȪA<dOj̈bˋyktJlPQi{{ut}lF[hC*K!>,Mn&sWQI~Kq>5h,Z  h0G[ю4ZS/t"wPXiRnUm[x`Zdg+8̅M-*uMvy\90U䑫s l( _t("NMTChx9T[5DvxP*tGƶ/`+J?{UH>Eq/GߺVjG_t~(T=bvQnlh<>؝A;؝ASOHʔ[p({66 Xg j%)05 6պǀ3 [E aCm[71r[wLH^75}]AJ?{U#W_>j/y=ugw÷F-dHΊOTU3w *g:q==rbu*Oha]+g|-ȂP 0L˛fkҰc<g&JwGǐT?1( p[94+z1n jy۸ I طa<ΑwNQ^u?;#@9Z#Qj9T)P{*#!bQ~纰keaεBd t MÅQ)lֆM:7ɶeVB]P!YnWnrg\mO*'t߅PrR1֤r,E$ܮvT[1D&Xs , nUgz. YI 쨪wx~(pe5SzNTѪx˾09A5VٗR="Xdz.FsIeĥo פh8'4EOMT2Djl(Qj%lP+o  ]ģt[(1/ZE툴2I^㽻Ƨ'vDž+l15ʍ" w;ǎ :(w|#E"8rgv\>.T巭?u]‰H{+wj*r^Cȳoڬ:\ZHg_$rGtmiO7RGޝN3$*v2 -%ʖ9'+?Rwk.ݍ -;{aheReP;*tFGc[xc^-.vR A0Ț&Z(߂cl< nKI( șiy%R.X'nT> .-k/3Y~9~-prL휶5***(d]5S=J^p9e = 7=:%#z?5:wW՜ԛEV4g$Ȍ a!68kNp#Q{U3D[n-pU Ğ=06vh޷B7c*h(}Xu޾F#Hy>S[KL\|O9S7Ei%PGMU Or!@8=ipᨨ1N |(pgg%T t tQĖmoZ{**?liN /ɔxa ]i|(Sw#GwM} !Vi%]Ab Fnv%r (Mtg7&=hPfVIrVO$dSdPY)5dPT"Ha4TiZM&7KsTn;ljI#QQh7j&pj|OXCepQb{LAfK!?qwZ4b[dSD^"86G:4ODMT=Z~UFY'zQMoHԥ%XeCjr߅LÁoZw~u;!d_S{ʨ ]zf70.7S{QNۑ)|v ޵LXμ+ NRٓ;:U8J[:齳~QoZ**~4=HhpwJ" Z?-TVŤZߪ%%j! 3M4p9-c0%MTNEG=ݫ1 }y,,>K=jdڭŬAح!&䔜ԇž+?kܾYJjm"{q M˰c[b91 rLu+ѷ{vYJVHnot0j#RC0L@{E^C.Sta[U1Uom8U թc#bk[Fk^>*WGHD̉{)gE9&tWM75GPdc]R[X$=Bg_$g-b|"U' "D]U3(WX*/aW[5;Ei fߗm趦wX)ɍjFR!^Wr۵Q%; RYɲ]~pVVO9Emt}RIJf@:wκ]('oT ,WL#[cek [ڊD#VXj+*"fK5*gt'аG.'W.g_$]OY{ e#Lx"\*P8YuXUF X,Jnn׶GȪ,#% Ĝ*aE`#iƸTw¼+¹ҩɌd*!GE)XU`X,iX,0j$Sd(?`mQ/swOXWX, XWu+gI=jjY5fڳVjY5`V| A'uTQ8JNHްY5f՚bY5ftf #`Ɔo. jY1f,՘V B|~O¸tzڰYVb̽f,ŚVjX,(ސ{l71R7޸` 0,5Y5`BSw}"(T\OJLթfXZU3ݨQQFq1+~+x⿇C3`2gf̳YY,2Ǚqm.)e2sd .0 ,M+t(҉=eح#\G޸hzϊϊϊϊϊK sc#DF qWB:ZV墹hZ+墹hZ+9hWQnf=ws&1N8ϲq DzHDG""x-'"x-'"x-'!hxZ7|BCi*HgWUe:-8ӂ-vJъяяZ7 E>!hxZ/ FAhxZ? G!@{Wcv6dk:ncŦERܛiqM.)e7̸2gf̰Y5e?2t1AԸ>ahcF4(,Qgc c ̳y|/2΅ⳡx~+>!6}뎅j ؑ>˄֑i0&ZL?iMZS|Joimm-U1b؍iUQZY-UʴVʴV*_ഘ Iഘi1<"D\tUE\toq~q|V|_ǒ-ԁS }]|Uw&ru8\8-jÃa^V `Á`X,`X,8, #;"}n%pD%-ҞcGmtOsJ 4|ֳ1+gq.:q.:q.>ii0i0i0i0|iP|iP|ip|ip}Zdxi=Zuii|yE6 3 uFA,umN;'kQkRb<|z+s gЭ8y^_Rv/̿XoxT$sۏ?w~{~>?wꯋH#fqzҽZ]+қ:պRZu*[7c/)^:RޟiNݍrBJF zE+(q}'JRg']:T[W˽DJ'D=%8_EhpMNon:ئ}$a~kHk?UwyY"%]a+.A}(tҤi}+®=pdNF7+1\Q_@6ۗNa}$vґ-w!}(}S_K~Ae='?H/ee)~HPIL}d5='\[։m-!ûWK/&Ғ_KgfvA}"<;w4lSoK+q2c&r8]bD*Tm -\i]n?[tMjP쾒e9k~-9#}!}@!6Gj@b|gfn%4vZ[WzJ/zB7zB7z xݪ>(;̊"V\&SQ"#g9ZSb3VZTOE>үĮ2/RNΉVtOg+:'_>¦[꿋2'WWWWWUg;'b- Ar\?r<_?;+߻_F7ьE\?wU}W+;Qi:cb6l?\sͶLξIH9IF~ afTOIB#S4X2|Oѫ}?xTGlkk|!V98kbX #Ҙ:TLQi'9̿D}ll$6V5cb.aP#(4e g}2FXV+cHKqf;?fQ,JĬJb+XV+C6؏ J=;doBhJ#X%4Qc.Kn+QAލI<3ڂER( ;FLKW3xб6Nڇz+|eQΛ:dx[e8H-rlLQfA5LdžK\L9koT6{rr ѓ5LJt݊˦Ҹw3d1.XFξIIvwQMUcG WL8xUHup?{fmΨhRT. !6%yA/*+ULoJ݊uȷ6r_=H-sfDFl@ m 4FNnG0uj=Gre=ڶ)L6uJO3g*ߣ;WM8wop*.îOR0^|EpA=[uD{G:T. dσl9{+ 6ꊥvȧR%A n]̢wƪ_vSrF!#٭r Dܪ?H-JF>^:OT9EQ Wd邁xV9Ŀbہl䔮go ,71UG dM8xT/FRw\>+}oSAP팋@4Hp~hПzGQTʇ 6ٳ2POmO'A3pd\89E7}MXeț/^Mȗ[8e>BUk"/Ymlu(Bo QtWwn>3RzaQ;UG)Xx2|WA4N{]7ܠCtXe:V:Կ66{ Fµߵ-AP텷(S/"x*-vn4X~9^3ۯ GQcstjM-ujSj*9ax#DA(ԣDݷ(:PClј氛9ZRi; tQX]ӉsPb #ŻJD=1v+lTnnFcX;᫣$Kg_$s; ~ت#06!6:/11Dm t~{̦F"pIﮛWc!:x\L {NS*[5RʉM-2JEDa2/n%+P!ө-%,ц/mprYNaLüv!aI]Խ%oS2h]GmĞ&m Pi:XI<H*t*V94Ft /D}*ew+TH Ro0!C{eA ˇB0Hu6}+g9eM몥v j&Z<P;ʢm]9.|D9Dŕܯrk a S|62`*'v*wH^J}.%ӿ R" WM2z:+LHRN΄8{}vC*qߔ=F8wuK&=-5)BGoTz #(ISmBtzAX$$7hQP b%|񐗊Bls  $RˏC(>+ѽG&6W(ο EcKEl"}.?\q`˩Lj+ R5D*ت7XLrwbe[y&|l4JڨssQr_|<+]^tpsdNF;bFGD(x8OP{NK졕iAQZ[n3cl/qHNN Ν)#nNV}Pa10\jThoU"sYhxt*VWlvLhTOJ;5 fX1psN6e;['Pi.9*T?[EtॏZ@$L43u6jk-۷?;bMPF e+!9ۉn*rvQ;A3Z¬V5aȰG>Rz[Gs6șjІM>-FJ7u-m"Jn,uU=7V8vzk($.0}hr"gbwM#% _ut3T>۾5R)0^7+h;zR_CwWЩݠ }^;bZS"U0NN]U+Sz9Q;5R=7O #oܙDaBǯ-ʋ݊ug. 8>&ˀTOxq"EDLMQÎ1Eݩ/} 7aA|JKIz78tzξIJ꭬FS:(!h_ZL^N)݅γoaGZZwB9q8(RL+1PnMႠw+GwRΧu(Pm'&:WOgЩݰǑi:䗆W*}, 靳1s7rbp [SUI:ЬVYX;#Z9_I|d*'fO⚆SO{ſD78לVCFVK mg-OGD2$5AG{͊[WڙJx:Ȥ#]Tfq#޾P؎ly5>KwQwfsSFa9E2yk6 ܅T~T.WM+ಐ,b& }ک}*|Et}Ks/Χu(‡ wٿP;SA {h8<**t+gZ©I[͓:h 6gKn[^H:Яjt nS4KX,՚Vj`X,Ղ`Y +WUZ{yɶ>n7 ym,y2\S|ˊoqM.$yG.$y. y?Z? GAhxZ? FѾo|BяZ) F>!h-!h EwZ#BG-DrGZ!7k ݩoedbp7e_D CZo*yVȴ8E-7hqDZ$o""J<=vLѯme=b3vf֭/hq|CZ$_*VʴHUE/h|DR$OhiqpBF6"Zp(zHVʴHU/h|DZ$_*"VȴHED[ug#:! Ț8FʴXU'h|DGYu-'hVʴ8E-7hq|CZ$_""VʴHUD']C|vbJd- I5 c7kʴ8E/hq|CZ_*"x-'x-'x-)" )VbG۵q Uu'7 Cܴ7 Cz޴7 Erc|qFCREKwKVhQ<hQ<hq<=hZ#ֈ墔-} Ƅw(u7̸y:\[3EPh.T{UX{:)QEu'_ME}5ޕozt?_MEf/ԏ"l?t1 LFD_MDb{Żä|Ů4nqtH{+|h d(vhpu9orcWԏ*ԏkUޖj^7-Ⱦ*_:";G辗?ϟK跞.; O .R!c0Em͆C6y^wX?}$<}%`~3kf }!?exX OQ/V1ijt"G: ,@|6{n1^dЦi`gKl/}% ~~_HC?} u~WS~N=^G/u-6d3i쯥*"A69M,l(yBP7+ts!iTo(RMG}.?7iod5Qhiiݯ(i_"kKyF-6֙GcZe~{M]it_'iivꮦQVE~Lit_w2u}/֝F_hZm~moZmM{!ito -*?~JO%|G?UQ|~K{it_w|?:uP'Ժ'Ԛ/֓F֑EEE>\}ݕ_IZEWE?WE+)tv$f-ZEݕZEݕu&-[M6j4 n nETj/=CVD'JݕQSUBҨEQ}ڟhs@Bz< c0EnH}Y|S f4?d[)nz#-&?`i0촘^C {ip}^BϤ!{`}!ݯ {/t84Ə[e:hgAh(bH[lxPuCi}#?~NW%A} *Me?}(>Z.NnNhiIf|b93e> ]Zni]޷/H|WwG˶"OW73ߺԮ~}F_vwTp39H@@``8C䔈¦L /'\1!]9\ 2kFV+XB5.}eT&)V[8aB>CDc5`DaD~+3,xV5bXjp n%K}ݟ+.E٧qux|V<y̜V5bXj XJbc^+X/J?Ӫt}](tuw9+w_5+wx1+wxx1+=+=+=(9%Ҩ,R!Z`:s!}VyR|V%bVqYg|V%gȄA7zC"\0#=Idc]zȌt'N[S')˚U(-_$xvxߍlÃ< Ψ㍣[`a4'{ ^ۈnP*GnEl?[u[(]5)j҈L&SKo Һl%O&*p!vr+ \+ٗ&I>Ğ#7vrj| [[y%/ ޵AƸ]}DPi~6ŵz/rc6(q^]! ڞ!*t߅T~<,RnORhsՆ"|wfQyPY wkNd h/TQMT}=OA;箋P.4a79ʉ4-vŁD*_95袉կ o§v(e38 ,g ܞ |lsDҺT.LNC|o66=ymL9 9EHdO$M)}jޏp{AeQ:~FGd*4z.erIlֺng+@ 7U:<(sM TX%m7j3b仸l1d`9%8SpSU3UGWwCJ0 K48Q7_wJԷq j?؇л*wh!pfScň1#OeT>P#;FdbRFElIͮtjgWx/6@2)֨}&"u(cmzwMUG7LQKEUMo:K _9uITE 8 `rZ1s7A xkCI3j mD vN:# ըQ_ B>uadP;d|* aE4wRI(bE,u:WrҔz'޹}'I?w辒)Hǟx}>8{4;n87-1(oZEVˋ g_  ju NAO??xw:Z5Ao9.*7}ULo4Ǖ 5z7*t*FЅf\ `UM5YXάV+N+9g P;rY=g,圱X垳r*xP;8Å)ՉNDV&n:ƹuJ_e )_-h ܰY֨Nuw|scni-#2$qmz.r3qP")Lqy<WSMm:iopCap h֬6wQ(U3)n6qQWL-1qPmjtAQznL߶Yaޟ-5 *?`T5 DG{LWdV񖮙jUP;ʱXJbjbXvFnXmlW.15ؕY 䔾ld:˧"M`pT("#ۥ+Ґa.tO޵@=wp;"txdmQ"dFH8G\zNG4xYjP!yk@%G!е: Ekpw*-"-X`kZ/GbDSV)P1 ^xMzC|jQQ;F_HBC E _gzBFhs~DR'v2TH0R῕FdJin.T/JnpPl86 |Z: POBvѪ/X(=RQD e!n&KѾ2^@aѱph(sc:g~ 04P(w2GF.Pئ9 ɔ5&z4=E%+aQ'3ɐaosEʅ7(TjgGZ7:FQʪd)eJzÄV:]m TX^shiPT9ԗe_E7)~PiTL @K,FIt,b(EMQ7L)K+x6K_4וvCz%/~{kр<C}^jtwuRhQ]cwTxlko`HGH{~Q`4tEOU~O^,m.-)LyɠFO³^?E핂e )P%= 4G0 A@sgRI{~Qrh=ʄ柽Pq Jz'tiz Q7C~jܶrhHQN)RlNzӨXfə^H"FlVZT>`@v*'eA(dC4IAH"aBx ȵǠM&CɚwuSéR;ʪgvSx H\UiWut$߾`T*E6 'R28^8k%DgP;QzP̷J9hZl7n[jg`]* +PGZ^ v*vBU7!h0oRĦYc߃fAaS#SHa՚JR XrGJ-zBgE?&*ox Zd@b6[8(}2d,7+ԣE-_2pW)Qm͍~lH!4b9n &Y ԣvVDt7ma4g?$4Kzۜ|SܷGx؝B1 ;F aEqs-%v5{[I"!rlϊBڬ9-p.Cu(iģF8m*Gk":$ Dkb>$Ӧ4ÍM7`{;k":%!hKslhaHntNѝDTqݿ*sPno@ȗ.y xnotG x1%7 Sc;wٽ|u?(I&S:K)4ڶ&,BlM$4?N_Z-ц/|vLH}tZb4HyhmD;[U!7"2_#>,Ll*He)4|wE)̄qN]'r.|Z]ipFuCQ{*_[ۈPO,2u(Qd  sn aMiڷ ,y ӡ!k]r%Q#sW3 SPU6Z!uD(v"!-w6zwB4! }kqWU!IwTp iJkɿcoszr/[ց2v$f&vd5к!u:@Wbƹe D APORiV5ܮ &㹷SDŽw_@*dTb+FMن%#`Yn\TqPXή\ё< Y6<VuȚtW\7-|dp)S6bXV)Xk3[Ƴ|Yx,V+bXrD8L/A2?|JϙAXkbXyL{UQE5bXV5bXV+DďZZ`2(4m`MmڢC-fҮ+cV+bǖbX 9ТzF;ehYLcg+"F5 n,(-ceTHG ("7qWXR*,Ŧor  `+lHp;Vk JТ7mX,8=S[M3sTX''V+N^+3%^U²IVH8t+q.RIVuZҡY:Z5c6'a̳b<eO2'a̿Y<={Nf0ȜhBO{+>/ϋ+Ⱦ+Ⱦ+.} o9mEZh|"~\|Utxr>/ܸr"Hr"DZD_qz Cl6l= w-"'_ഗ-)UʴV*ҝZSJwiN)U;ʴyV*@čb/5k^E p㽣dZQ,V|K>E~*ϑigȴ˻ K L K K K KU*ǕiicʴZX,yVE*ϕiGʁz0B#YCain-UʴyV|Lwin,V|JwiN@/-D 6 C"q%شyV*ϕigʴZI$-) Hw_ഇb<B`cF(ÿ%6{Bx.= த?iZCʴ.= 07!E:j@biM |f\9WrUe5O!lgLrg_!_wJ 32.S[֩L\Jvy&+XV+bXV+bXV5a`` # ¼8,8+'IX,+Ú¬+¬2X,Ե-\ۏ5XӲhBxTWFhlGy7oz .c ،ɨWLUs sݴt1-ԒF?X)g XoNtNuyU׫e' S&o:PB֟pX0juzz,iW4 +,|(AsuPlC)l[˕|:b=Hگ-,'b@:ЫvhA:57_ФL9_@d'%+*:i-Im[?r qT'GqT''r"{.2'r"{.1ˍr"{.2'wȞߢ9qNVGKf?9qtDNv?9q=ӿE<iߢ_ LG_\kۿEƿݻ\kӿEƿ;\kӿEƿ;\kۿE![ۗtqNvqNvƻݹOuww~w{~ww讥4vjeɒL"w6ٝW>wlSMiLjU =>$GYcD(Q_Ut'z \XY0,Yf,w1f,\XY 0,t5`\XYf,R, 1f,Řbb\ZY5qk1f`\ZY1f\ZY0,Řj 1f,b\Z 0,Ů-qk1^Řb 0-zF|(tGSew &EIHT)~„O7|ٕO3Pb7ç()6Y298+Bǁg_SQáS(a w#K^ +vn2'g_uʻ$U;zoVjCVZ1 OLRbu+ gSIU5óxnKNrƄ6qPb c @Z 4Ih(lp5ҷ%9ry=gԂ>_c5G.F\rpVI .3 C4+-ġu&5S:gγ{9qTJSÞCK ϑ3x^AJ~~cm4^y|~\l?SnՆuH9MWy7ww 4=E*7w}Re~?,|(I>xˑߑϨs }g?Xrlrop8}NQuN<YW޿Yv]TݹYEYzރ578ߩZW杼I?!n,9gԼj\, -o](\C"^Yv.\cݻkEMn,ڎsۜÒSajM ڋffm<wwcPǔb4k NR&KF"b*/_(`0ЬR*C.aaV j6bQRՇ0U9i]\1W޾W Ww8=R6zRIǗR:©7r:Ԭr.Ѽ川i=ciWw2PԜjƩz޿Y=cᑏ$b:_=$wkϔgÐ]V7x{?U.f]CsaɾҿU|%аRq\ro_wǞ6 roI{}so_n|J  갪Rͽ|7cҿЮiwԼ*¬WOMXzHo>W>K6P'X=Yz޾Qpp$ȻOԼ26zzVYqSdteM]{rsPzr}5m7DHTg7vrkE#/7̲থnv[%VymޥR;-9I6pxr<8{}84;CRN+!2AJj-\6̑ ,8 Tr%qeʹM~>t} <(8J*Ԛ,,Seov1qMC&ķ f~'ț.}7|ydc*:4,2fVli >no_O# w .enR&7a[wUw4>[ G?wsrG#uoXWDUp]5m?l|}L CXx?G>v7x9\e}J]>V)NSV=|zLaʢMWa{c⇩\xzv24FtΏŭh2#McS"˒m{N_G2'WO. %ە 0꥖bjsXMy5;WV!|.w?oRQ.b.,=Gg:pzh4{PhJY[}L~'"E$ǃÓKgXM+)zH3*#Hiz&<U7j,$|&~%K''e]$l֛~ 80(A؎hءCnw5pk$89X]s[ލ땗xi'^%~O+C:Q!BБخ˿ u,`,xJ yaJH^(f-:JPr&O];+Ö?Ϫ8ޭ¬5u:qVtZ~\#@qؙ.Hf=J,CJ$85Mؠ5LbǁgYqدmfj7:Anb3-l$Ѿ/_5F ۬Vj63ltP/ Zd7v'[TIL!m1y-܏o1OX7r,2Udsx{"Jd'!By}M+"ϖ"e"qX1MOo֞)i1Z݁bXo!̜\qV">+ .&R_6:pF޾I.yz//r8;9ǣmPjWN""-vE*YMcw!ҍ j5kBd7ޚdJv 6UVʉ8ʾW.:J`s Ȁuܷ| x HpfhA0zkGU:ۇG(*ǖ_EǪnkN)a:m#ƫ,l9BRU^Q#!;))vp9ɮci8zcH/4.*$ @rmbpr˖]s>EWr XI.Q{=+up&!tBm$ػ`k7:b-7(S:3B ҭn[ͪV;(QJ,,dXa*(Q#QuţDh(=ޝ ;4Α؀Ok*lNh`qWkSpme.|x{|G&_K=Qo^95&Z%͵pԚuWdl[:n(NsN3.^]A X2^&Rޥ9I%/0 2 oZ+G'\_w.gRʋWmpt wMڮH],^!-j׫b; mJʷZ{D@YoWZ9'_vMܧ['Q>ܦ4azi3[~͊ \dp&-Q.< U۔\$ uK~ihuVy e룓[]vMǜ5GTn Ovba6]JAZ5t0[Ia8?RLn>,HׄԚ/[ _ K6Cd+8 ՗#%x))r*3r-]_KtzfJVIr)IN&ZnEڊY1J5,2Kd/%MkByZ ԇ!-㗷tp «Fܳˆ^jxr +P7\ ͓`Wd[ű[F)jYJua ++ 3X=4ÔB2瓳 \8a~FWG rÚp8Wі%|Fd>^߰# ,UOUW~:6<&|Mw>fX>-XCq-\D/{"ˈeCe3Gg{-\C}츆q ?euZ3}fhч=ǼZ7 \E---#:)jOF>vvvvvFwCoW'"y/bkUE7Z$_3UoX-Vſ;'q<ˎq<ˏ\|O2"y̸+\|O2y̸eD-"'irk{Ѱ)5cs¬/ÃaVa^_%Vr]Ek&8<+"Yx,8 8,8iWݑ+`#rXW%X,8V9w 䙅ё~E¢ܣ\+ɭ%+maMcN6/tԇ"*6 1-W Hrl'9`jM˖r 8l8+Â76Vizԕy]*ZкWa3 ]'zD58| I*n m^WV9Wn©+ X,2 PpV7ocy%|4`"FJAar«Թ$5aa8y2)ս R¼8 58Oxx+sT"nVDs(ʮ*+eaoXd`MbWV兏O8D %~pMW1 \UधRRJ\f1\\`+ZORWsWW jtU o-BxޭJ7i@#KIO+ J39H:7GíLAX:y j+#1 ¹Uq2Η)/zaD6AI=<8U%<~χC$h뷺F.L{q\5+Vb"&v(5 |CeU_$>MKgK}ʿC.zV,}Ϊ|!R!aTLJLI#Pk&J̘_6i{LXZy;S\17hcN}`nݫh9m1&b]}I6fp@KW8RFF5Cd1htމ3A&]QdK{qAaetvsz XVl<^IN$A9C10Pht 鴮(ޟ 88 bU ÔU:ЮE N J P8sd1$:~CGEV'pA %>)jǛGzf@! ^M_h-.rYrmA_WMvMHt>$j)67KLoK+UKQWgXU[znLx3O ĽKkNaX~5ȶktI?553iu]oBRxXWz> %0<|R V_-H6OMQ!GuY%Qc5i| cV7W ZeHxॕ>c#uxf[Z.NDe8ܟLn9ڸ MBt1)!$Ù7 w'ʝ6PMEn?m`??jގs!-HsG~wܮ7$|f8nձ& |C7'g75]ة9]vntИXpRsBsد 8_w7g\?2<6O#So+' 1HLJ6Ewl#D &ˠs H׃:%{ c/z,j] ˮ Qj &ș:2UXЬmr{ԥ4q_&WB{OٱE~DM@E!Μ g053M:>,?;R.FUnj؄**@-N`TЉw-Kb+[Tc"sv}^{oW7fSk)͠`vv&ىp@#YԌWRh Ds@sOEV2vu-ao\luiY78r׽cF9(Zm\:"TvdTeQ˞X557 im鬳/W δzuW SYbRS\kR+0MfDD8[˧IT8$iQ_9ݕH 9u_|ԈN[,8, (!n38#6j4f3FAV;N.Rkl^wR|q-7ZX&)V\9t1)wB] p[7 868ouQuYDILPޢovec4葳;ռn56WwB͗1W"(wܝeNeC}q&|4`oW45]16W}Rԏ9%V]RWW2cɷp&I^;᫓Mk|=R#tSJ/\ Rzi6[em<*"^#=^.C&JG!RDŽ'77|!CBDe&$Va%#{vG!]qXу+0"]۱MH&;~ zyS&Rg<.\ ޮܧPv۔ 9s6>[z˻0Es)VQ5n t}V)?rS&ԬAvb&{ބNnDL}J&9`UׂIDޡ}\W%> ^^TyS*WɑCteXNsbФVX^f! 4Qf u`r+SEWɮ[I2 tR}.y7]V%|ΕF+glrRep2hu+NKF ~F 펔lA͹Ir)k\iJWpFbh>F3ZkTZDewMEیB¿n7co9Ijn &JlkDFm鰠P_8zڇ;N6luk$V;ɩ8RrBA7nmH)jڃtLoFD 5'6LBapd.A.G/Q5ˆ͗ig"pĆDbJ5d\sY&ʜWӂHĎȀH`cc; , PWz<x&J3)0~ЄfHS#:ۆhZfzUU]˘lQ42j¢"3R,qG u'r]X'6TRpV"Ej[x#CbTʟHC֋OCkj [#(ݱVOfN!ݥJ0Mɗm_Ԟ\ 2_7O`He݊ Hf uZnNk+. Ȭd^QC^.F W͗1DfcM`Q 54ţ!IYVn؝ӑ 7Β@j g_d`(Wo,*`M^7j$rRd3P/L}DWWnJ|,!X"E|AIFӾ&!bL[vrP#!ܜyө9'әrmAlS%Mjir0Uo!7q!b qjW (s)0:PoUB5jZNF&@ɳ:-tوsPIRc}b 7[pW)'2z*;D;v=8gEi}SUn:P+!xWcuM1'+rw{bTF6.˝$pE #X [zjm*N ӸHHr"B.pRR < *B %H XUΕRW z%n/ioZ11X,^}g(eonRɓUyC6I[EGk[, }RW;(v׼ r qRnZО+˜Ü0onN ݍ&D |}SXVI:{7s/Rn6gԃ:x#YQ(qqMvqv\Wf%ˎH։]Pe*.S29`Uq `V 65.orcы q+¯q]+MBK}*|z+qVm6^g5k{]z[2 J{iC.1+Na3slb5V_~^{n d^U\r¢9`QtKBo1_z+|fy^Ԏ5λ5`` twӺJF˚.WaERJ72r,9c>z‘w ,8EڑɥrA8cN2[ 1Bb5|  sTG~ͨŎUeZͽ9qإ!Vm`ݷ{y]^y9'd] ϐW~5]VGpXxC b+.>ʩO|u-2/dތ`-N^yaqBwO8g{ Mp%ΟBQ2{Y qM&etňe,ΆMjSR= # 6{ ]GdXZu5L6ByS#*s@0c] tr'^:-pRD!Thޛfց+iOHE0$[B44kOdKgڰ6[Eظe hDrÚgϙs Qcz-\72d=m+2%BlO; uYnqSy.V>^Q/31/w*J;S7NIw-%,3H6]~gsvYbHDujx<$0p˵0[!nMXݪ|D ԑtHx+r[ ɄV=GJqD+V@;-/x!S FY3WW{[}R;dtĺm@ǣOb FmUܑ~[I9)*K9H3liWsBs,߱:Ȑɻ% + `E񽂻y9cktx7)k5Ꚑ˖7*00%ё6[oSiޜlӮGJҢ] ՋoxczPpx $.[ܙz߷|'Z'nOGY0zHM|WZ`ÀkH;~'<9]Jz.S @)G+: |˹!s  X78[d[2K.⯮| `򭈒'R@;ݰ3з%M!oJp~g6 JF㝥͓@0I}Y.Gz#oH7וz2[ܩ ߍuaO )I۰@zwgf?${PJ1s׆?E/a{_9?A Sex6S /h]`{c~V_$~B|F7嬰%h*1$UJ4?chOK"`Xki(PĸX*r%|;p&2K 6ȧj1%Еv6Lx* Ka? qc<RBK%'i"I/ZPfr oJ@="gJ'TZKLyi,/CGF FFLDj :fY16$!}چesν7АBFBoDdFَ]iۃpӡ9N`c htM_3}11Ư].1~ڴJ {ZG ЅEȮρFD$&tn ObF l?jb݇_f?"n-b~&(bqm$O)H,!V0N0 \ȫ fxQďy%M gT(1Wئ COq bB_XbwO S ߓ(?b~?4.a{l%؆s2P@&ُ̫F''ћ}cq>|( OnCK_(/-ZfjU\Ne~VߙB1xH~RHdWOɺL?톤|Cw(+sCB́IDw6iȿ'K亖?|YSv9H {A<&~뺺A=A,_:o ny@G !y.IL[`Cho3 د2@˱eoW {߮_&FO7#Y轙ݿ"sio"jKK,;.Bdw+:a)%1"$QHAD2HDȈ4mA1?JrN[>HP#N%lu XWёHz(cа& BPhj΍8p%[i!#G$x ǩ)Mdyq=S0茨IrUߙ hZ701I$$Bձ}1DAvn[-k)vqi(4|:d' &-] =>7YbR)'>&q#<-oJ߲'DQ,L^U9kn=O&)l>lR?UВ0DIiB=hb!M8Bt6:OEF7G& 5ud7cI峕_|S]9hKВe:662F41q.6~~2@, Ꮔ- {Yc A e B"e( IsR4^^skDjR*nbB%e+ _E%SKr(!(QK|XFKbgٱ# QBKcWѩ~QyH}S?~RÔtH4- Өye;g'`C+ddn?/_w^_#]q~דdފEFVdK*#~~Kܗ~Hcse1H C#cܐ@ię)tfǸ 5{A}ð<`/rXt}o¥_)vSmmb `o_iSs$7Lt/ \S[KCk,B|ؿZpyؓc?,x^s&C)bS]옰7̐)KFΜϕ |v?aE2?j!i`HR$ANp~ƒ=M`&7od.Z%,!7NkEDl6'RF~ږ] ٯo_Y8|B f Xbd{Zs ۄ؉ F/A:T`jn]D1\č~QX 6L ))'CܙBKfoqKr={CƣaPkn XeMAb][C~"d gOǣmYdʇ0X=#yhk.z#>PN1IliNO+"fRIDTM蘑=d>}k9&v!ȝFbNtK 1->PB(_2,'ku)PܒKY,K'Bvb&hHW"CePMFE}pWaSG>fڎLOVvCYͻPĥV>"_| 1GQa18.ƩD8X,^ID Ir Ÿi$6-$6-$&K1H"zPu=p7A8hMN 7% ;E8SБ -X @Cs&fzdƑ6FA6K:߂  *-9-%BDnNň¯%4#Er| |ѐ#ErMOIZ48ӔdV29!b fRCPtdDYDz,`#S\6{1cV$`mw l2gyN4=  Hi" |6qz"`JfƢljPMB7*Pr?,8"';ա#rύ+ i4N W´~J墇Z77C?B7bt!#8R5Dr-}쬎ES!BvidQr7IM D1()G(V#`ȖY/[ipj(txz)-[0~ClEٙ`vTb z"[s߁g?'ۡ ibOXs11S#rQHz<=ƣN $$"Lt#< xC7O%YL}"Lj&Y"Ƚ9wEI1ɪ#N )*F|*=x$~ b0q= ņbsRK'xˑer!8j:U jtB2~450VY3WhFL$oJ12OHB21qH$kC":{F DUnD8LyMR6zBI$YYޤW#hC[T<1#B)Kq II_"&;p0+f0AXǥ4ؑv 팉"mеzI@ӏ*Y< Y7C Neމ*WIx6[+pGzH:.c?t`XLk"Wǒ%ѐ(+H68ݙ?dzT3A ^Vܑ*>o .#O(|~ǔi?5bH׊[Q,xcܳar'aF"fTa4'QBCIo*+!$vcP7 )s{~ۘ1"Y6bYVǸ,FĽcN-b&6;|ܱvcq97Q?X9\l=7^Ȇ6l<0'xO2I}D_c%N:*aptGGV6'0}`w6kqR< HGJ}ĭ1!O@vqt鸁9^ß,k{$H\ޚĐ)Qe/6pb#l+*vNٛMwB-(ZwmbWLF(mŽH$#{ŽH/b>I:% "-L?1"kwШ1hwkjAU%6''$2Ɔݰz1-TS8d8@EhZ %± ItS( FBb$r& "I K#~DǺA!jI$Eв&>4?'G&h $LKfɕFQ)Pe*W.-#7Ix;`L%7"#؛ yr;;0EtNx6`'?M_tNho+M5P,#䍪^Oc,IRnb\ MNu_a͹ka* Tĉ1ߢa'89Ѓ&)ll,p<xP S&[)r@$6 CQ!VFBXW} T! [1&ZR;:L .{[lBUCc B #F4P{"v '"GZ$ͷ>}9x. M 1OI&͈⏵? jDCKw7R/ܱhB_@C҆М Fd7{''< m(sK zA.>4p2aʘ`~49Z,6(iDZ{RP2GfcecnOR]""a%qY?5ը=\RZ(A4^r3KR;"{B@f f-dFVODX TJirFJE6a4=:fǑq&iUA~M)hwȿt̓yvO I6VmCؗoc,#,hS D_<?YSZ\:{^lEPEt5&THNdB5ٶY@P 727[O; dI?6):4a"aRb~F[دUWi 6'(!7R9.Z=n$$ v7<$F+qmt!v85"yy$8[D129vEÝ:@ǒaC -̗*[DN).'ge_h\ce T9蠃I= >Iȇ6!i&t(BynaF n(,EȑVFUq PFf-EЂA󅑐Rv#խjI:61LpN9:(0r즒'lkJ$KNB1CTDCd " ICtGcQg@mbQ*3 <z?14\+e%,>w-I-R)_ <@ρ9F:"˻[1OۄPC%S|.4vPnī_옇xƟ=5B2<`<~r&\ +%43KN MںFG 5 n\$vӂ/)HJ߱fS3WȘrL\{B<W7."ۨ7J4^#Qf$)_D;i?!2Ec5DrfGO+hcOkr<.)WƕФ¤E#ɞF$}M_ҢtJ.b\6(BSJ҄542Qg3\9ьe]qL\x-T3$p5dD(S( Dұ&B7CdJ%ؒNV'+(mhzQѱdPDi$OLd5H9$6D̔ϰz5B[39I0 A"=X@]OB~vz1sy+G$~E820^ I"<#%"8)Ml@dy<12}x$cJkuЇ'OA{)iP&HjOR"J( $qm4Y2Ulj${ d"qL͓H MmA#JR#o <fKb$Y:Q[P~~3w#CcV rڐ̂hg 1XXm43>HArTq"{ʒL"ۉC$r ߺ[Q"UD|J\Xٹ">PsHX(I5cԍp~[&+󢴥5iLKT<En:k%.y;ISnY4Bo U9aH{IK, dKX9lk> oMo#Js#Xd0fbi(-12VJ"tI$`baQ$":(A G'"6[=63\1c PRzHHW y Ai (Z'4,:#(ŹG&1sGNp6wRvGfXmNXZ %c4!M8KllcV^&f?r?-4)XhL& HyZĵjHF)I##9u#4=\rFϔ791] SRJS+[x3(?@$qm,<Cm1R(d.B2eM,Nc[-UΜOKK(Ȅ,1PA3̿apփXAdey?V/fT ΂5G"wjL!<Fv5L-_ɑƱЋš$7ؚ݌B:Oa1ɮw&[=rYDkf$Y3 GJ:Ĝ?켆dVb;"ђEؒA>̬?c%#Nf(CpKmy&HFY4[)G' r=71F{nY\G#k_q!rOR˦#ԠbĘp)!#rE ~E'amԫilUv:2g03mرCGNIԹdbBh%QQ#%gq! {UP_ Q،ĆN\DB bik#TW&/PG7[ 7%TϟIr, 9PROKC6| w./ӯ44c5iH䖢CxYc>aFRN~~ Ҷѿb/= c^MR[z~SI&. 7faSjɥUrV#hlմMIXEjo'@c#EEEoo>#ېhiE}Nۗ*|K i wr}l6$gJ0=CLhsww.> [` YrN HVS}[>Q2 bqgc|~I$JmJ= <F~'FDn~='c\5 s1"=%S9nY/܆35lJRDbB˾$j͎Ay`vt'$F8Fcq[Q4{ qJ6.;2`xZ9$t?CPt;m  ve"/a&6g`P5l)*iȁIpe쿡R?WΈ%Ўdp*Ƶo/Ri*؉jQLJ4e|Q6x"cд91@Zv=E$eo5s) ZųpXHA]Q،D"ȶi$0J $Lr' Lc8 HKԂpEF[1Hf)h$4EEB`A 1Dx\zֱ Db\l5Ot1nNǰ#\U`wGsY?$bF 켦1_rI,`mSZcÍ$$< Zaɸ)iU,O/jf K= X!=܂ 1E#K;F PɖI:`h!n1_Bp2lJ5nI!ɷٖ? CܰJo(b\Jȣmf|\Nfw*n5Od!Q'tɕ7XR೔2G>D>sؤ N"K QiY9 ; L7bIѲ(eS{I+hG$?8>NLk)HaƓiD^m#pI%qvTGEl,n4+R<X{COągE&l܃D3"l'3*NH +d5 XӳL)0/+nd$NN&6CnmA ґ?teNuÜ;R*_!D?Ȃ#Þj7f7[ȔQSCKg!IȥOka5jzUrNYnh,&&68Sn&O" iQ)VBSc$ftI5nVc{:0!'BjΔ Q Sza/$7PS67oFa'c,h> z1 w(}}y}'q &KZ% $C FRҒOi/kKf7>䃉)v2ydb)v-Fn+hE}=1plg 50!/q3YȜOh/h^`F6V|4Lj?Ό)%fz^[ VtX̮ ^A *y0"˰Z*ݡ^hSg.L{*S B T61P#r|."M^FPɣz k!jj Wwu 6Xu@nܕ=c(BRUב,Z j2RȥdK&fgБNqh|nD˲5$[Q<Iw kDr0$od1]4g\ )mGB%bJ%e ~dlB)17i^ '02 yd3ȨWDb7ؕ)$d~I6Ǒ)n fІYBɟ34fRb&Ydaf9$nu&$R¡lU }2s'rKܴU;%/d?8)WM&9p)^ROy i- ,nKK%JOQÔ'AM{CB-I2y!~Hrh[wF=(r;K"^nkh6 ĞFD/ݐl.-=F"Ji4C^+> {al߰5kF)ItV '-`~ef mQ!hJ1J$9 4qjhMN#t DR#;IHQIyC!4X%fJF eilA!4d("NFNH""dA0FHz0_"oE:owhWĝ#YGy9JBvG:(C&r}cOٙAC`ٹl߾y#ƪY؆m|ġ/An "n7)2qsƓ<8:v0tS,Ȕ42q5LPu$sy2Sa8 IKPAt%}qH`$͎k7s0FN2dM׸Y~X(U$ \XߵZF <6TB 9·#jkK%h;x?k_AJ .و}mI ԄT"ԌԬ{x v\#(iT>E2S r>$ ^<6mWXaABvfbd@ԏPیx$t~{4˘mq`sD :ډRo(u,g`N_xywO̸W{4 R/ڕG[<4Bdkqx#Ф䶶I`)B(I !zZdHȗ#4W=c vQYٵJƉ A!>Ivz ANGQ7pfs33 L,ʄ>cX&I9+B lB03%OBYN2풗9[XLq R_4 RFA<"U$,b` EC `'͌#HFN*/e,T=mQ0WDbC1R3̋Tu9c b=[z'($df/~Z%?5!TJ_ߎjBsȠgL\&AlE?/C3s9G3y'_ȃϒ_%"#)I-DFdɴ5xy, F2IΎS?t1;\RUq`ދ$j4 V yˬ+SRldkXU&p#! %$qhx[30,DڟGc/"|D6V {SDݼ"XܯUSdd-&h-! Zt!`;`st\ )1_8lyO ;4.`@8#LР? SI/@mwō{=$T(ZU$F&B2Sh4RI4$ݝo-p x ?oNf/wD_,$`lhe&K"tv/K%c I'jk眥_m%Oi^OK_?8iWCH:@Y6!:و$[$Z% X ,2 MHX"D(D}BsDHHT`Y!KV M ej6?ID#mb!$1)c-z?K(n'-@75Y#1ASЄ 'H' dhZFti xD;DiE0%J#"B b`BJ:@lu"J#HWp$MYաD '1:C<D8#p4c^pclJ"5#C(Qa9! DpG"WBR9H"5"@%#V!$H"@J HC1"E Q$H#D@ Z0-$P$ @׌=!HzEJ0T$hR2K!+y 1[KqEjHb@Ս jc[aFdSFJ<$JQDt4_FoFDYэK,\c<=[Nt&!7RdBRɌ./g)`4&0:2cc$cYe"lTrܯbdn=ϓf?#^ϓ~'PB>NVb! %p rAnW(Ld0Џ;&%rChhC{+I(B'Y%MƒYZJT)ZrJ%rIE̵ƲBr;+cH?2}P'o{Gi_1#Ώ>}.KDžfr-$??c~t٧t",ٲ C>5Դ}PlнR?A~_Ѕ3~B|j 4KўM9!vZB@mࡹ0͏1wwGHuQS`#Efe7ȱ?ohepʜJzcs~WA.??+GtUBDXih Kd$b'$HkD˒MIK66剽^n0w+S$1KeA:!j@`jA8@@y:[ sB D!eh"[4>K$(ka$F<: A*0҄OLimk?ZM])*hzn#`@D"pə3$`CJ[CH=~G^Zƛ==<n}LM^/remA$ۏ𯘹3$_ 8${(țrɨˑ1O$o69M'yVj!T.*gDy$ìT>"|]mdV]0m hGe kir'˳LljIlsZd16t )ˆbBǵ1h'|+ X0a#T O:cܒr ةN%΍5<ۉw$Rz((K3̏|&l,u qMf8շ~KJB1`fQFo4#{ئL^աqoo'} M~a9Aߒ_R'IQI7t!j9;OYBe MiF҅sd(xόpI+gvmxD-\~IFD)DV!DCGQlL?Թo6\Zft$#8M]SF3ᄠBHȣ>Z ~(Q%Ha0'r㰕s}^A?r~~VK\ѿ'}'w5O3װVp,Țމ~PE7]ll,b0+??[ _'o 'c|AeCU${?</SHIs*VڹGKy| LD 8,PJ#cn/mFЩE9=o[["XLny L_Ifʵk 51ſa/jFf%q|{&l0j"KAW_`̒ۖU {%qMBZ`%Q V|9ʉد`HWD%(R>ڰ{.BugY0ּS,Ll_f w7~c@d "l*,SFe"'WOX{E; ƚD{4%z Bu;EK(N38 R= E DaYo!hlB9kBЂ9Cz=$aƂVNkYm,=akX%OhK Ô>Ɏ&#s-%tD`#vHԵPS^qC)КیvNȱ]?CaLg-㑞{hDI%tL儨n&bF)3Δq_n sowtK&Icc}049_Ύ U, $ip6Od6Kd'Y#K_0(fk؍r9KrYB3 D̥HI6DdpԦDz#x&XԐMD/rhR@؁L)#x%ȣmٛ$zXi gw#pV烔`SChBMl$ퟝFFq 8Q΅Zo8(b‘).Qc\2rգpo?&3q".O:$7f R)`%m9AF=pw8|d#s=-,<%.^4%q}5̔0iL% KQ b(D'TiP1;Qd"qfXdCˡodCǘ6؋6A`P2#Wȉ*XjrԎ 2KQFr%ș$ȝ 5HXx|h-[)IS`kLh6VDboJ \,3e,zPHĴX`FFЬxa!^FD55O"[ 1 Dط0?Ι1g~.Ҿ$KyC( 2no1xd$*̓$ejSIA% *#:&&^Qcșl`j):,S[ "#};73;%)h|b$drE(U3ɝfPiL벋xmO"Sa&-Tޔ RNKQHc!5o|N4p"Z@%Lx KH% OI$C r+LdfF,hU#TrƱUL.tQ;1v#:Zǒ,A32[gi}1!M^F#/ҳ'IkJhm.G i WǾdo9(]`7!@24Y6lyhXЗv1Ѹ{ܲPBx7F4o'G/< k(S MDta2WV1#/&Б(v@ тܑOt Hv 2{J;vHI#AD1ؚE!?6~K65r31}ጓI#%!P(sôyRo8KcI gtN^ ldjbh&nŘ60~ gTste5n?5^ 9OCM tOm=PiɺflBi1gf?`qܠTH\Bʼn2Ak:&u4%-5!jGfcKVdD$]P9'WDzH%&Ȳʵ2)$DZ*ϵBYX'DCO!`, $ qi ,WCܚ\E Ȥ-JIi{ fyWgK[{crRwB2'gh D=j C6 5yرB!E!) 6KM@pRVP5"4r@3qk5* mľd[Ds{UJcQ"&JKchj16$[q3ӢaVB[Mc݈G]t=`LblZhYtI (sb#-hjВ2/p jgT<"\ %1sCM6{Cddd+Hċ?®M5#`!,HXm@hKt4Hm i&n]B\|Q9EAMH("Aȕ?ԿEwK1#t7#KU:(xQ3TbM c+>6FHΖM {uc8DCoY=]0S+'v;ޟdڗxnv!&؟[yX KBP"ӖZ"@U‘`lFXKЙKFi°4BBy1YE^ћf') *XM &#^Ihu0R ØWaEҥCCKhXՊRX ĄDH7fCR4)6 j$\ʁtSnXƯq-$;?i.ݢ^X4L+(S0rkb- g=T|0ĭ3lRr.Y[0ut%d{_&ĹYY^ >CG0Sr 8LSOf1, C;e <`Tb [|jfPL] $Yue\44aݢeg-EQwʑ{CHiD,ҦodM[LW[h$f0b>g1x2苉-* o$/#6VCriX#<#+($ DW"#V@jHѲdOK a.֍hf H@bЦ~@#T)" &YEh$(b 6#|Zl^0v A%Z8jcCCCB7A7HN(KDE䦝q=#U6\[' ң3B0[dgcZșʭ^_ *DeНS=(00N K'~ƌJ(i%/=TI%~hK ,t,†) Y~GP֑Аnʚ<8~4@O6Z`sbe5+[[dJy6qwSPxy;cOiGX*[9ĜWa{;crtKfӶ|#߳CO܍{B'mK'?mC92HbS^0L ~H|/+,TJTc 20uΖƅ0n"p'"s)> /L U}#,K'ܵ)rȟ$~="1*ch%7p T'tLUθݘ"_|RəuK?8 71ss ;eᗸçYA'#1qO,tu S I^_d 9lI f"Y$< l1)T!  &D bz Ehhg#,^-( z)rZHF ZRJO QRdԆ!  nBFبэF= rQ^Cx hG+.E>NO V<SPM  aI72ΙHqSDv'QdV_1 o}◑ZSDWMo|BW>N)f|IO0]DwX_5Jv(mؠ71f IMHpy_"wm#KB8 0ŻPFB<1D< ȇ"|*#/ا !$BQxѱhB>,ZHD$tbcBH00A41gb&D``KP`WEr:D$c^z)@cıă|)JFޗMM99Wf卉hNkm<،X:;I/a-:Pt9TYSB9ȎL OI2o6)xo.yM{MBbVdȓ8'1:.mjdw I!LK/_Q//- 6ˢ\ t`{oݾlC{I.sHr7v{ ) [xv6? *qTGI_NNooN^,s߁_}4iYtE=!"<=V_)=ـd:x[Cc;j_c%$/L脉h$F${ K/HJ|@5Κy ^,ɒtFB$Ac΅DD %*l-mi=M+ebE/N(L*YLi>vc1!B$8>8OrbW K#,?#&#'%߳?Sj~ >&D6(fxѺ2ks#aĶ5rnEul0Hg Q1tmG1"FL; +$vX;L2D#. ymE<ȴCT),"Wp-! J6GSy>iO@BUdj +jHeY-$2zCб:[p'rw9d'bv$iIGIx_Ɗ@lܳ m3HStE(dD)~@D45H~Nh>68iyHK:q#I Cċ;Dw~`f bbw<`/ a%ˋ܋`cñ)3Ru{Gm,~E+X L#Z?! (4"d>,̉xğ/T?' o} K3*EM/}'yZS`Almxv0.$'i9PDۂ (Q/o3|=d !k{^ Y_mܦrvتw `l. 5mp4/bmUAe OA k=#\>4^@LF"S,Pd}Ǒ! ÒnӱG1 Bk,N"l&7l4aKBn\Ñ@cqǓDWR\hc}KcAh݋t܀{: hO `,mJaL8 dHΐ=F9'$tMٰѹXQObnMs25Y(l&5j2L=yac/F#~+C HSNvЋGsrZeOGbEQr͓FCvpO ^6 kCPƙ02v[BfGFP5KLHjFHdhDYԹ)ydsؑka;?H}ȎƠc2{UU7kLD,Ng;Gd/an">CWF%J,O9&o#r}((n1$C'T9m ${`.Y>ICH<6a*J uC] ga w'"݉rxCbr}}GLCGBƗͶ[mX٨{|~l1IA6!"v,2,jc?0!$SI&|As=N2Az*z} 7'}O<)/UM' LxCIx S*ȑ$dwz0{.NzcĂ5Lz6ݏD8s",b"_&"0`ZOd]-^,Or9_!$tF#нx BborF$DF:Ӓ()C0AN,CP:Gy̗Y3pUCQ/(,8MC&ԅ$)vmSИ%tSʂ[(7BLKYSۢi+sأ[ҷRLY)rY>C} e1gşGzزV5Dn}pA%?YN 6;X5ItGB Zj%ؙ/& 4.xjh}#Y$OR9yNim$:?aJǴnmƎCV8 (1*47 &)dD'D45>CذHJCRjo49a 4C"~Kr1^eIodҿzykXG熖*L%Jσ4T^.ˬʑ ٮȎ]@/?rPN%r[/bu'(x_ $['\ K# oJJEqiBVG'.9#1>`q[OC[[:+ Nb&dRKD&H(ed]ґ>B$37RFy}bRnIQX<# Q (BpO(K-궜|h66]{4pwJ2d)?V8꺡?7BIMtY]fGDH?L꾒ˑhHh6NX+Lh"!-$x)|:<Qqȥ4#H5- A  cdZc?& je`'+c^6Y&{i nT{FA; #GhjLdCg6LH3/&]us%ZӁDyV7EtPo#RYc=v@va SEc6{FHe$rL&6`H?jv t8:ze-͍LUųGgǢ{E.?!%+LE F/ߣ(Eؑx(qm"E"i$b=Pv`|y5DtQe#s S1Cn~ä~?]&8Ne8`Iű^2"Te+Ѱ%D'͔TD[{Q,ЁS_T(cͮD9K%8VF_q\QY ۯ '~wu6FF> s1䧒،')q!䑺Z 6^ĵk)tȖk'2t$# yc ݱ旂rH>`,ht%J,DHpl?BG1N')vNC(xBL>wM$C!A̒ %>z7P_cc1+sI lK 4 [xヷ5!蘳'B֍0ecz̍d&w5龦R=lh ,XА %֖F cо!b 4m)zpG`DaTʂ Tt?IIKL#F5H '6Ȝc*EOd&[^9j'NjڼLbYؚIl3wG! x7G]<#RA!$Qb n{n2[Y5/+cʁ HLs>F&?iB8ΛK#JۊvcRG5#&tLMoLH$s XtH4%Df$gj}˜Ư3&{.Hb2O"pcUlngL ,DH%|-2n){\OP>//LdZXFW) * \y$"^_"ǂ'AwB%vI"q$pLݔʫ2<( dQMY4؉z7@d'4&]!2Fñ(|{79dZG4ov/$sSHNOrF=y,|Lk)C%0H J 1d2nif0gjP69| mitpCeDb̅虀L4W"N=m&$B Ց"@ю%&F" z1GP߂L6*: ,!PSM9h3'ldc#`aoؑoH\ #2 {7 :lu K^QhSU6l'n,JF-G1q"fV'MrtjKU0/5ɀ$2ސQQ<4]r7S>BbI WoXlx!D}YRaNە\=>6l'aO'|"v/(G, /bAZ^!JʼnR]DЕRgGA%N0W ׼>VfY<?MFCrf.%1EG8Vyd7C8-Q.ۙv7rœ.`r4 X(b'fCq?s!D!g4HW< 3"Itļ|K79lf~R͏0ҕE\8颮^ܐBOrq.nyO$İǫǦ0tDԳ+Bcm޻zcX4iv0 &{E| zA v#1XA!j ls!: Sj ٍdTƸu$l_́h//[̆R6_W &)/g&goa8n!Ti&d+ |L@4MK FsГh~A$6P͵jЛ+spiĥ8Dl/h*BL2GnB&O"~ѮstQOlmjϘ?'   b6cc/K}[k˂kx M.P;)/&ŒE$mz`1$ʼnnKpɸѴ$X vo"1ByW!E UG @k= 0Us#LG2&BP.R¤1 "~&LADȪT$E 8֠@ԉ\8J4vB7 xx:aCq *CtCX2JGjE{lu[le!ov`#IC)8Bh!5j]:GAD @qD["6!<< HM 8#"Gt@^!թ%6[D# 8# /(jHCh{fDF s%pCفUiCqqגjq5 5Ȧ<$'z$*e>#v8n$D"E>6<&tK:oWMn4ǧ(W))9.n&, QŸ:_#cv" ѿ<<}F`9!zOtΙ$%i$1cWt)i!:2Bt5P +};'>ZoI$uPDQ(QG+\4t4:#'ad104/es$9BJi}(kp58T?iӑ S^OnS_#OЗ/M2VF\P?ɍ+؋VD֧?ĝdf3.(Pa Ag|Om'"PHO .4^'$Qg)v!%w?x[s c5hS'W_ fzcnE2&z֏E%} B D AD7:L(z4R-v'1(H\e 5MH+N/(M"}--2Hxx{#?rZGR#;?i|o&lU"!8K4RK%*95 ryG`m~NM+aZ{&9K |)zhUj<dlr7+Ju'LJ/!(Hq|' ߻0&B)ځKJ~~gm-^ GY-0}P-/{;MR?؂"Z̧<{KΟj "Fi7}Z4ΠZG9PSH"RI'(Ɉ1󉒽ͮ NNIkHLO#0Y9Ḝʱ=$Z/w f|)&Fi%ALDlj‰^o/o^~ȀT0v3!q1O/ n6B)l,2Wr$^LP%nG>g&'z=3H2@p/?ؑO ZВO)xӭz I"͵+^-6c -I`a&$P-FcVmʢ\@B%)7/m$^,biyYX*VuzؑO9 ҅)DRwa7 ǚ՞<G y2J_c~-XC!IRC ]B=6j)/O ^+xan_d^|-FE%I\6 !y2P Jfm`,ϸ 3^oKOfwVp؋v4N-L*>$D{$k1nӞD!$~%Fq`!_0ZM,I-H ȦPH\C'B r?$/} H[B2'P_Ѵ(Cb ^_-S&fC[ɸꓢGXTgn_<BfN8l/b$1`N# '(GU/zN!Cd=%"e45ז BͩGb_7b!KJh-Ua^Аh=3t$&NۨR[c,&Oc#;d;pkVp9m]{iDJ%g+Ҁi~㙷e,a 7NÍȶ8 X7ёB;!"i!%bR8i{$J(cG!&Hb:Ʌ A~dAjV7Y49K[ 򆩦'jR3v5x)"YʈJ h|^脊B)oj=I0({f‘Q%a':F.WS8Ađ$,~WIs;4- r7D &TU s ܲS*кbl}Lr1Բ"0&iBlv(&ED=!+լNED8B$`! I>zǣ,VbB1WZ!zj3+Emn5 vdًDNe5PZap71a/u8~PTdu ᬓ>d, ڶ rjqdyCKgâȟ'G Ah$(T8= ?dƈhcGp|ؼ[iDAj~ܒn<0#c#^ub; g"N4fX1y "6OlJbP#"<\7M* ^ّ+8ꆔOJ+HD 䝰%iAG!ͅKB\ DW͟ΩO* Ƕ-8$b2GPo)L T-h/ ,d/v1)4A艛/r?4x6LG$:"r.]i""mI(Oď*FJș $MiOCU Id$@2@ğB D z$Ee0'U7DCb,'4Y^cքrp9%2^=1j΢! 8!3޹vrD$v)G K,$LhFɚ AHEj`hBvgåhzHG"Ks%?Ȓی,0AcĦBt=ar&<2RȡPfW?{$V#nD0Ã)#(bjx ŏs2\pw#-֑BZ3aؓ'sjQ1n3DOzAR,v.v#bVof~K;#kյ Uؑl $[lg qJ; D2?>=5u.:ٙAeS KȧKb!=g ǍIK"tCRߓ@ń=$A8 F_ף_IęٚQB L&AiؙpF.C o>I_s*tC$ @ÄIS+هbcd[]%$~Fz& F X#GN iDc1Wapkoz=2@P-g ؁6/J= oƽƆdPM4!(CaҖVMԇoC~ǢՈss*[UUI8Y"7 2)#dޘ$gƒSD#3Z[ɞ?m An@&`3*F$3m8}cYAb>y{ RFΎӰ_/r"E<0sb^Gzv}NO%L*45DqQ&U%bnF;lbEaICq|#L n-*\t#B2҄^ <@EH܃ "&OJ~ c,0< 1Gx%.Oy(ϚAHyX8qضP":FOR.~|[q"QxI5cBbw#h !aE4uFW(Y%R2xٟ-&ZEy吅{ކ℧2a’LPpgV(*zHXW_G$ң5ǜB4+ ҴHp3N侦2}hձeg$ai,X%*DKXGǡPA4LBǥV~$U~EcqV00fDdc&F/C0*Ƅ QcP{i~+V.IV͡|1c)}PoUPr,6*epw7=$ڋI'!lDtl7wo&ǰ,O)g'|+#_D.Ƌ3 3p5( {gF/Fˆ <.L!Rƶܲr '4Y Xa,B f,E?'72U݊cۤrJGECLx݉6K0p3Ɇ%~Dt+s% U9ېg&]U*a~BGă rTUnL-ӹ̢2G܌3d{ښp2 =\l |hX%1T#L disrZG%Voh+7D/s>1FǔflCsu ' #@x-lGvD"i'!qE_xAG+I>Gb ؎RQ"v}}.GF^ẔrROD<fE79X"}`#$($jrp>Og}+h:zԢTKBdH z*6$ dAhr\ lv$cC/)dhY|hdo~ţ0)2ntPKKϹu#C0*{Q7PmsHj~C|F_Q؄嫊CWMpN"f )M?M߳1V Hwvuى/э4sc[;"\{F-'Xed~~F@1yNx]y_t31#K[1v#\!%5]o_q69-/#zc/PZYJPettp?$nV]\㡭o1p$u;{N` 2iE+˜aVoY E辳ѡNm6(,`p)dcUUY,!lECDQ[%Ie97BPDlM8r?J/Lc;#S3C xɥ a .9 3&2iIa;6hd$(dǰ>LE?q91b{oC) '!MRnJ.ԡ6.H8fV󋱩ui5m.NOہeGI/2;ɞI8 on՞CH7a6ϒ\"R/r&3R)Y7d 'Tm)e;+ JK!:HQ:aHz1&W2uR "tIO"rF"D?'\9:ѨBG^ 3BAzXƔ@cLz: /ABs$Ɖr`խ9ɗDy%S"KlBd+*L `.f4=+>6Oh/cY_) qM (ɟ%DˏM16{np[b~c\4_wm;Ecj>P3K Fѿ3TF> IݍqԽ q}f!@ʇ&03--sП${BFBe Xd4` $ f DRa 9rv\:JB}#$æPEd|NM[%4HQAFTMr."R4AO+q XcȻ. *+;_mJ\ȤQoG[)TM'gF K?b6Ŀ&2gupKd| _DB~RfG)Wɑ}ڔ\7e0d/8`[mXRCVf>D|eッaxOZP% 䅵4E+U+2č1h]>ح?/$Bk%,ܷ@/dڛR8$YC,bk|;D~͐&P6r2:cnyJC1n'dҼSoty2̘|#-vBT+]*lj5xl-j HҷK> FӴ~dY|+^z`e A)>I^Y!&pNAt 9!>'=X˞кw;3i>Dk`Q:W 7hW~QpDlxitLȔ#+"V G%Z|hd삵޷mdC~ƒ/ ŊC䊸tf$6!1It;RբSm ,Nbơ GŔl!iepŠ笆 mE!>#/?w\=sv9oF2VS [ht}cNg q6|jđı!< }i Mob"co4Sqًϑs mA}bS3о ]6Kj[%Y-}җ#=YpM(Re<ڳ+Y{fY8_qȼ< I)p;BF_ʰp99/qCd8a$!pm5Uy6V+3ܙ063"lJh,pLk; w_3 :Q/~R@fFV@!fX3 b*{ #㕹q$.\rTy##Y|OB>T_nS{ٻf'q.rFd 9DS~#8)rMaǁ[K0/'a5 ghͽ&rC+rp17hލN"/ʄH±)KQa! Yz!Ea(!RоV>ć(Q1 $ Ǥ1A, GǫE۟~!Ј9Zgp C\3"(hfIG?mn4HSBhr BRl RvDYun#nĶpA}&à[(T6Hbٳ}$hcGo1j %+O&CE1%#I) qӁ~F-1Sϱ~Ħ?aFel}kwD#08[R,r:F'es+ _(NvSk4nܵ+-e4Ntȍ{ EVr%eM[vFKɌҁLxj:H wf/b{Ј, ؉*.rG&e:] W$yf&ndj&F\ZPHl] Ty#}Q$-7D}aB\UXxY))>H 訽c(S=cXdL[MalRm06'q! 1 hIR2NDn|% FI$ DC<0KDYhlc -@ tE1l(a )-OmUK/& Kɥ~s 5;IZw0 l|j q9PJrfH^ُ:4DHp>%N_Ɔ"6oavP5hCǓӒcY>HrxI;N'@)QrӸ&Bg~GLёl4E |1ͨ^H> 1+5%)f]56@n&;z\!b4k|<sZ:"d&6EpÕ>e#^I)4e{ټct_3asd,\ěټ֢dP!2~BgcCS`P΍hL3C ]/8q~Ca?wc!1WV*aheeZ?7rC"&GS0J.F=Kc `5{l)nw?aNp}+q*R'- q#8e?%ɱ'(4U{ 7S]4R#TnV&0'sQ;gǃ: P%_pĞdz%Jhl49my?S2!tHC09(BR\md p~7-2b"C&w=i > Nآ#݄  1%(n$_|9"?)  .ƾrr_kJ&}£}Rck"Yܐ(Z ƈA+qp`u $Ć, KQ2%Ö,mDH[ 1wnG$/DgƈfD!L<@億Gi:7ҵcd`[OEJ_GՀ)`*3|%Z}m #:θ6lOJlB0~T}4qg4=mG*fpgK4!jbcJ8 B%;; Z(1sa(12:BvGM!㹟J4&N gDl&gC".f4Shj a. '%i2g7*B\ 6CD.S*̰[7Agx䐝p%C' 9i hPmA +q$'Zܺ%baǰAn#aaS e `rY!)l?slvXC4$'" yߒ3"ۑG  Oj x1dH]n16dgFi_͐$rR~G-%FhdyZEbisb#șq@y^∀_$K\y`Ȑ\sFdӁtMn%rO"X\I22y2dQ6(b>aV"]0h 8cCtIMwhlyC!RMp%9҉zV3JpcB,'Xp\: {GpK &?B$ <lbS>-Vz$A+nJ^I R#3Blۭ h akD0hFIK1FLgT7PG @K2k"I:;?C·Ԉz`Ϧ5zbDе,*!$^i%)M ;8 Bwqn ^Gt+& rSASG {7W9:K$I2LW2ܶ>Уƨx| &%8h6!wRAn_4;(:5@RNa9_fI9|'h3>BH| ᴎDp 11? ICW^xM& &"C$B61In)q:)4/e; `#JNBCcPuHj^[5R@ߢԧ[OerF~⿲GȞab}rw8~,AB-YG {40avŭRHlIcben~ ?-CVDКݕ'n> e Cv9x#!>Z? *2;^Dd;N̩~}DQARbf^YŒ4L=qL'E /a 8 K7S <Ҽ2B~X R" "Qu&Nm_УWBy2<+Ȼ~G CGMtXW@ %$Akt}dP*L[}0፯ߐ(s<hnX2)( 2 . qYOrwEr| ??Կ_Qx 7- KBHnE 9>CB['?A&eQ[}.s [{}G0HAYDModfgT!RBՌ% Aȟ xI$WؤLInġ"0bb$j$Pj7$z#bt=>!+e%% Vp"xV5Db #&؊ODѩ&tHLk-Ƣ' vݔ$ XYZkYSHi-58 Hѩ$xCoĪy}?80:V_eKS]4L\}7z1 I[ c^T+`irbPE4LY$L:AAA@ֆl'#v'9F-XBGqeB 8ŠMhяF1Mch\A=74Ωz71&xƦOo2|D?HdXJU=6pZ[VZq H{_oOiHyx'rm_sM|@îOҿٯ+ kЬ n\ `oW'Tפ%cbd#eq\Ի,^視+&UȂ- kbASKB"EQ¹};o LML{@89](=6TK?O2L!n"JmCĂRaOhE>FNDž8}zG BT{|7`sK&Rn<('6N NeW^ e'IN5_?F#/Hs|˖]Cu5`L_hFS'_>esmY&?D|iXՃ? "W=Lh`?!9`6d x"R *,F6_Yl:_ȬOmm$i+I&*VKc2e"0=7Cf6\uDf k$}6LdRiБK#,u(ɮ\Sїof$L[VxLh!/#\>P~F [XcYY~4ĕn$&~Qx%&Y>|# .32n[GISyo(Ean\B6N"AaKo_J/ʉ6I4$wQ{Eb5C5@@;R_$J]I^kkW&eΆ Ivy?<3kzzR@ޅe-ĝG #{<:~ A[<8+5L&[8H1 o$}_IxqW]=2~5Ǫfa{{!.{%6Rlxid&Ԫsi?#2{1 N?c,w){x '{$n.h\{mtW%] 6E+Q] QQP)+4C'EA h"EM#3BHabϑ)zǼ5&G/h/~+DV!fB[2<= <芉0HC1T9m˓&NG#Fe _D 뾯]1E,q)2yĤŸuŕ90m,KD\%.IrO;γˡpޗn],߱gs;]vH?& BW}lu'v%CV"\;w h"ݝ|1Mg}7pWXh\.pewN;Gpa6`h Fai9=R9˲I" 'g$q3| 0<d_ugH-O,m8h̒TY*;[ = m_ѱ='cn{t[qbh!K;PMv@sqrG)ޔBZLқrde]·׻0 O#:rwZP.|s܏2[>C<88.jf@/ K& 1] mle }l쌲gW"vK8%!'ȥ$Lښ#r>J_3$r$PcˣjF#} s#ɒeM"9hxPd9,$DkB4zAAA 1uxelO liSsIVC0ԕ т}fTrSQK}6$oDgId?1uH)DFdD OnIh'(G'F FFC?jRCpGcSǠzwOEGJa~A_haA0Q[䔼Y Dr=?@:0|Nd{؅eޛ1Y&u{.Dc0GB=K+t~Ab i, %mρ(B]R'Ȟ᠍Krc] x({Pԏx-Z&6)b@{^?-=m{~FĖ}P&~a >N"6~ȯyk$Q%`Έ$p*4Zp<]^h#AAȏ@L eQ>v ؍]<ܓ!aJ$ Z/V#Z4F#D@3Z DcǡA5^<Mz1lRFO(<`EBz_M8$L)4ȱ8֯Y$SUeVWdA%Lji9oOhxB$;r\l0گp~GT(6@g8-E&D3m"X=7yx|CIB0/iZT,2%3Z^[vQKâ÷S]hDJTr}GZS W+h([t)edtɞ2Q!"ިɣ T MdSܥ1&4 BiДCw?ح.܅RBBrXiς,#*ȵ$DF嘑%;&]Y' !UffD:'fKD< ƹЅ}ڲ a   KmMiċAKѡd@ W?P0k4zaјet3K1^ƭ} tܶ6s)O>>ǵfF$k  BA#"t؍v4#qrZى?ɟѩ!y`&^Ɍ $c4W2~vlbS#X!N)"H(ΊiM! /1 aLd[)̽ QHt%̍ L 8gWMcf UHDdԽL3 g<&#K0`"a~bV9!U dt*:rf*V6d&5'yS潆KؘLȻ'eV̳ a@m !^Q+uuD;4pX)`8+\6(1#8jpȶjdvT*F.>L'>G%^f0}L<q2⟡AC%d[ F?Ov k@kF1~8끶 kF?CIi "Ib\ymw5iǮ4]b.7BvHhfHljMDw=LIn\j~eUH?S`v7AM<' h𐊁/ jԞ)3Tl# R F)#raὈjg/~JObRƗvu:Cy͉UI0F"2_ NY,΅p!P[6"yF`vE$6pAqy |U-'q៤l`5z, I܂FN)G5d'Ĕ-JL)P} XѨNјl,M1IpE/G Ly G;GB8VA/{F:>sjHx91S\^BSXAR%rҽM r)25cQ)pCcIi+T;0D}ňN2!X$JH Ht>(`iLFЄRBL).$4[승ۂMIAC?5C] [uKdqks_~>F/36;ZQ`CL7fDDl$>tvR]o{A)L9%Ɋ؁[ 3t~X#IC#6EqN3l"R|:uZ%'fDT;9 $Ec~ MpEɅ{p41B|^6 tf١MuD1>  QeSg ѐFcXya~DI?"E L!%Cb+ NW_ x/hFIp= 6kLhk_L?oS-HOΌ5,) ̮a:dfYUuPYA%׈!#5=3."EK 05%o`Y1(LJ\ c Jܐ#2~MYmز ry ЯQ#S|] B|lpWdtl4h"Np"N)ds26s(σѳ>&[; ' DC EHiIbQ&<p1؝y'FYc,ydD46GQݖۛI qg:0AG'=i&Xzcǣ<-=`z/\`5'SX3u ldkLF=v2[#WIMm*܁ {}pr &4W f0Akc X$g.u&e*Jb(lhu;!G/G=ΘBhc RB1M5?ccP+9[>])($p07bF#nOXr?XFELxcCv#$WhYoD~pn~-fEɀ1M=[\:*6t&-dS44n_rxgdtD#"(ſ~DŽ?ȎGقlIdr9 =(! APQ(`-|+ɲIH Jׁ'$wЛЩ,/qrɌ8b&6M~ODĠrt;fv="JBw'B1_~wD  ]yюHDek`{q`/n9]㿔Ȁ(bF] X,Cr`{P ڑ;MvF+aA#aDp4I6J8[} No-P%p=1q+r5D: K+v IOa?Opd"'p4y .kE~x Pt"Fxr>MIDJcvQ]-cUqs"&lٍ*,q7EVZأv"Safj'%ye]cbx|RqcH]3RveQ$v0r'>M ÷į#tBw\ ,oi ;(9pB(c;s'T숓݌7$^?p<)"jG4rhGO97۲_|Y)f; ϑ4% 9lвr)p% FIg)&Rwk&IE A0 &( "JCu#tg B)Th- #؊] r?Ȝ#no#\ح}IՋ#ՏV1ja% b>d1 VA.g'GU.rR97 f+<ϫ6#ȣKxܥ="Ɩ'ܜn6{ q6 GƚE j "oh$5&{!>d|}#؊pT[/:|MB^ jL ؎#m1Ƽ;RNb`De"r$EGƅK!'͆M G"|ñ4a#Fx,ı{RqZ0.toE#roԞGI,dcĈj-FJBRڲg~G,("u*=.r364coc>Frr&D|-C6M(f*팱šx<iMt D7a;d۔H)f#'lmh4mȉ[N{ajbY/ƣ N[OxشV-ԾdT47ryg)JCIwT#!m4;oyHLFQ]E͢܊E2)ØRn"e:[BɉD6x +%ZwkvJ}5$&v._tO#PGC4W2?k'^_8>qΒ1B~Fc/V1̔s1dw<ꙁ%L!G6772-*?pXDy1q'+ܐ܃;ZA i<n<#,JmσAdhbk3lF<ʖ5qFcvnq1Fdw'c48(I~FIŮ1@@KH\$\4,>)//?MK F:m <>qP[d<-oŊlS83+$hI`v",!"爽cQ΍qeӚg")|t'Цߤ5UC^dISH~M.ӆgKU{ 3P!(a m(HFx % `-5p6'm'$}ɤܡ?r^ެI,v`%@^Dh9%ji&VDD]TS*x.IW#o#Ѝ%ObcJS{hjYBl!;~7PA,lKtp:p,n{$~ 92 yaG5J|dnYȡDd Вp| Yy'QฒV4b$̿g$9Xi\x!hii FPșD̄s!ef{(ZS2TiŞHrrBdF9pXĮO 6PWS2셧 B`伔"z MHſџ@a&'L7_ояz"A9%KF.~ Q!&a:!${܎b}$v8PN8ёFb$\ ^ ~LǸdOB$ӑD4=q7g --3mmp6%`iPoaj#j` t3!Ǒ7O؈T;4>v`,/7sX2):%ؓ&$IIcDs#b:I.K:d?e<@&R_%ډr#1x8bQ&|{J^= .˜I ou9'0I) դt: Cv\CS=`YD-DſUwes>T3 \- +Ա74Yq%0b! aj,xs,k-$4ɶB4R1Y1?HKVUw#{BA+@  [/"oP??1(}KCKofvxK4"`,qP69*7*:dbw ].?Zg)O= Ҕ Mܤp7#sJ J_nWQ@L}NjN蒦^IãÑJ; 1.ȡm{o&KMY'K JIcŰЅ'G?S$ MNF2W* Iе>ploxЫ1Xr=/dHcXp>ipk`S I2/:O`+_1[avG  K 'J0xĉOgMzU/<]` L2xM"h(՗B2+b7Tȥl4ƻ'#X ܝY8d|^ƿ3C1Dl.6vؒ5ԅzq(#I9 F"dQD1ǮZJ^>Cܙ'FFi:( +>F cEQ'6Bf$ҟvJa vC~?+ndikȟqşJ3>_:ukl}1ʄ˦Qc"_`&92w5c'HG`a{W ;mlb!{l,b@MPկ,3~̹IOh7>aP7n'0IJ; z![X&[xMg'*v"qHݜ(%F[t$(CDL%H\?7?4'*p?\1rv"aw0M{V,3aBmޟeF5+1 'c >Bkq$-HJZ y5| >Q&֟q*j?c+u?qL.rT| afb,v%SCB|՟$,DMiQEa*8NB \9 +(ApVSV&es!mnNĥ%KW@Fұdط5ʟ_Be2}v&UbX,fB?&`)W[&?gW4I?~OV>AEșIAo/%>"g&W\_S K>`gLYOqBk=o 8c_j +<~~3-2&!DXǠĉH:a# S$$Z}655^4Kك.F v5L_d# *,CEr)g+^ uT4%Iԍ@%lAG/d$bȴ$KGhrSb|DHE5H# i&n#GȈD@+U@-1.^ V-Vu-$k-&BI"Q \98Z؃FN+`*BN &`" uzq$\RE ,q8" شqa"#`иJ0!#+2RA@A:ptBQD31c8#Nd΂<#lG<t"#H DAdHK x $܁ "@pt5Љ XJ8Ѕ__tܖJe@cEKi9Y" , %>Q1(x"(hgtȨ k?.M! ࡲ%%(BBGaC)Q (EhUpQƐ($`EJ !Z`2F8QzTR$F4 B,C)%B"H3N+X B H ̃v#HKYB^GDD @DCRjA hgH  4=PAdD^7z4A A25FzGvЅ辶gF<e6ZbT~/1*ɗ7^R1-RAօ,T`x'LHa$ڷu)$/)p˩bOzO&yq<t6iw;/Nr Fm>X`3lphĤa/Dab'!؏w.hEe!WI|i܉K6P:m2$tGR.FjM<1k4[g\Ȗls@,_aI-pU—ɏqff`S-[ǣoc.D[pdXE.8:@s'eɬس*^ХJN $[ Xke#oDV[/C)seGJ֚ěB}ʁN*Kʃ15)!&I!ŏe>bApbRiVYiб1,r6_OgՋ~Fm/cXW2qMrNv'%%"|2ofPw*bya-*dO1Qq?$^n<ܒ!7'pNI7Oc"dΖњ,XI&F˲IKK%_v2['3|ñ-$;!mwm̎.Y-#'n~c'K&B6۔'| {{YsoqrdDQR^DCX]vr\-= ~Fd9md"<+"ț6My[Ze"iϡ.*M4^=) xahb̥y *cAmhAzZP@1z^-""LFA(eX$VcLZ@<\AކO8'E3b07$%iy!)>) 9&I$J6&2%gh䅶4I,"2!;"Η C;ا8JOm(dI$cGD jһ޿"&4%n1NwfK݌2CvKFMpHgL='ؒD$er`RY=/B#{i&`ؓډl#oMn:$} I&Ed'D>,_$&We!B7JF!w]22B5#[XŽ I>Am*iG$_"VɊ)oKtb9iS=v#':"' 5/lF(؆T|"aFBurŚؗX.J3U<4MFaI$O%F$!*Ș&-,-vF1z$!!*4hnvrAD/DεfZ``#pm6VS-'"t$G3o!@2l5pDg/m?MbLFMdlkw^^dr#L"fļ"c毣y:J - AoFЋ}do!3T`º&)_5K.͡ B f$4HOc2EX:#5!pE ɸ%-D$ޒ"؟x&:&NM2I;oD>.6i2#&-=*r L.\䐂NM 2s%‚_gũIgXRFC̋raKiGYun҇ё&TD hZ+(=>?#AA P`4N qǰ # A%%$i0ɬM8>#(r+H'M5dF; hZ4$4FqA }sI%bZOG$p;{>L5؈R9ET_Nuyٞ}Ƙ1H&]*y' +nZY#9͋I2bQdI)1Ƌ.嘴#{ "GO` ɅXn+$\hAJo_ J{C2q'I7ϡI;I# :1Zdܒ+BpB^4RS&4:%qDHH^NXIՏ>1VF$N+cQUCKl:lI&=00< _%ʉA$Cѹ̔&ԊlQ%龹 ǁ1RQv<|RE|$g$JX< ֍Aik`t1qҪsXl&Ho&灏 Gm~"crjYm[ 9n@41xkX9r2UFI &h"H+Hқ }L1xOmΉVZB$L ̏ !solf+\b؇.x&Ѕw.l0#hB ias/2d\C"ǖ춌M1*`7%ACyjX{#֦ Ԓa`R]"w_iVoǂuc8Y/2^x֐mydn=ȑry LnA>CgI7#d|=2ʎl'6At2LnF#RGHJ뱨/Z,vc'{پ#MJ[YpǞLOҶDV=1 ~z$6I2I$ TgDl^AR&H'"G2)3,$y2 (BhVA7fIX1bf#I CPf `ϧFN?ۑc<N$ݍBpй>CwSg73v)ضcIF+62AI1k(?v< G9+H=`Čl+TJ^[&`PPZ$d/Є-4[=1 2pEhvAE d`#ՇQ>CF4`L*7DdhBDi} }O$Q~ >Ʊ5i%*g1r!"#,IKReӺY$ܖ$KQ'>JYĚ" ~ kp>P_vcɆtlP쟹Ԟ6OzIL{ i.o[3Jټr{z!NGsieAގoJ|B1WX$"-8y~ EAlIп/iQ"b1#v"thq;T"N(WR{v!d7kYfR!T@؈SE׀ԕD]AlވPd csktZEiNAI10KfE~DH)8kC3!'Zΐ@7"/f#fΙchѦ<F'F" C7х(I d=P*$1}?919 66E j${AD [kcȫHT[ƈ`+$CW[42YI'SghR|< ~$i%%&w'aLE/bT)СL`dr\D93X,[[ [,>Z"M2X8I-¨šA qp)dI_ĐroLYN <6U˲$y/j/bd>LGbᓿ؟Igitq2Oх䔛B'b'*#aWCE͋4~hțIswlrpgbpI2 /șrȠ% O"j%3 ]C N'RC6&&̣C( Cw!_x7J~Ӎ\@m$+$I[hx <3%^AoD6"mL*K$J5Bd!] nB-'b'G a )b^2bP1`I %t.|RvY`ӂz$71@Ys"dfEV5] n!2-x=Zq>9-"m gc.lLxFňVY+EѡH0Ɲx0-̲61E3~,nˑ'~%o`Ð  rrm$$ Bv7  ȔdqBB#ql3Ѵd{,jΨ:n;kF/1Il.dNJ%}(J^@ra$[hY8f}Ą(Bs$-`' X 7!9r0L,&$puB}_/r%_rscO [*iK&pIO'A*~D)Pշ I>bH-r*+)1͗˥Չ&v*N @lK~C.$rD3,`V7r-z.(G4aDǻ΁| .k)"Ko=ZM*+F&+j}ldڰފݠʤMhK"  Dȳ5iaјG$+r;*7\7IdRx}ڬLFW|&6gޞ$Lȓ,@ܚf$ &餒̐PN H;QHx'1#,IFSث 3"nğYK5 +I 琮IvlSDİ&{ ͒%2 DjIٻ;ȉp,$4ޒG7wFc9HD#Qa c `Q7:DbA"ȏM-]]@Y</:V V+yԓt^PE;O35 2:.E'j:"͑mC+EIN]:bK 0#Q# l&k_e᭎{%=n&jQ|̬dCn2b/n~$6Lt<ZȩPB7¼;P$f  Ofa؅C'e ByKIChF+6,-]W=pWxOGڪ OBٺHq]Y[YF KaL+8xlWM1D?8jDNs$7U"~Ȕey!D׻6[E]rj>I6;[N:ܢ>d6Su$0E{-un6^G&7L\hӐ׹ʢ$feJ{ֱ<`y@mJ-Jh_/SP/bK $zTODgm ey%kJ2% .0&dcaggpwoTܷ?:IAXe<)/81,KNdzMG,I<(1ϰ=Ab7(2LBBl5 JyCBt@%#sj''?pOk&Gh-a8ICGV"nd#U:Ylg3kª#·ps7 .4#k|a6I*Nǀ>:&t%\^cI͡iY*#Y:q 0;䝴]U٩E{.l-,4I-_t2QpAo3}Z֣QɵieGBk 4Im$o 9OR~'fFu8^  $c"CmȞHNI8*M2D $S# Z\O4y[ȕ*ۑc>d2RĘ7#/&OHmm-щi1N#zI$'Y'ϭ=@8t9LR+"tƙ}lc D$-؁PK}EBΘ#Ѿ]fn<]lW 咡d"DzFё(dn"ˡGݥf%3eWPՈ.'@Wl|%D3| 0?GN${ܑ:te^ $jhP17 ocC#J'DB S^ OH"/Kh]l81ܤ_ ^"#1JΝ cc_ر=+|LAg'/k5?sЧDDKO&:{>y&2(B;ː?JAKT*ilxl(؄Ԑ2"GMPat*"Yɇnmhϓi/yatB|y㱨NIC%ȡFjT qto&PAJka&K0A~〓Y0ԙH}e6?vJpcQ'ƻFN}*cLXwO'RC$Lx܇I4C* kD>틧V"5 q“OًmJVBىȇ aIeZr/ Rr,=W`O4~*b- 5 A_ZK3BةnC3W' Q(j^!C?aY<&in1T,83B!],tR> (#p;="ƄSuL,Wg}%-C$OIǩ@K){)+E*E;:+EY"di$ɨ6ϭgQ<Ýzbk!$n\chR3DdbBXϢ\"48i7l͒I:I7}|me $ǝE*|&N愻f0q5gp+g2P&H"WSz8`a!-#̎&$)/l7yS蹢ےd "A/8\OڑOjш66"hXQ7T6$"M 4#VB_"ع$NNTh4!&{8' ^ BUw&4)B[pE G'OƊ>$'e˶`TIsz1! bu6'D|5 j`ZKxfh\B+iK&`+q%d ?\JOA-W#D#DN`YHMـn<]p!$\,TX:na0El$8C\:Nx+7:!E$}f#/*>] mA?/C6rB|~QNSG`!,ܘ1u2D:ÞeY'h*߱I9k@RQ%ld^IQ'VfVI/NFdBȕm(#[28pLNK*)*Q Fy<#2Zm^Kq7,i%bY4llc7وBfæ.JQ'tԚ)f* 9D]t%䢳Md|r!"NoHHH']e'1LLOEzI$ YF$ "T H 4D$jMp'f$35?KѪECmhhK1$I{Q^f:;uΑd z(zLd=؛BRڄhԱOpgA|(00(Dcd$SI:C]T:y$ۣKS62Ʉ(l&VBKb2 1kQH&=-6`D%u E"86~*|8Ε8:c2zotdAs$Fdma:P:H H= A2 XH7}eezN؛"$RW[c>rz$KnD4F%MXd۝Ó"}b[#NlﲼI6?vٛRIYi/M&aP6D^J'yVMG4'S#\#ׂW!.PMSJ9$4uLZ@ЄDC'I S&H¼̡mu5beDWtq{8.IPHšKm2l#45>B.5g*Cw_;?o.?Ϳ[ 6JBoBkhDy~dCt$"##i-QjU毌9=a<0sHME[0 0HphL~luj',Ŀc??ZtѺ<{PxRQx#ȭ4$u?!h 1)d ?oܕS~$)+q="v`0y\Oy9G~Oҿoy9:l{+H<`*ط fZ0U(HЫ3ՙ|h]'*|Nbco4-&9\Ac=Dd"|#/䏙ew3E"8Iя">F~#)?Ҕ $gzB2y槈GZ҈8De2&JXDxPTR%W/?A:I#+/M{Doߓ{?ee0T}.pB -Oq %&\!?+t~N뒟w_IEmeI Oq t8~/c_W~$ʇ?wE|&D6wbQ CXm VG1`q~I{_ȻEƬaI " Su*rZ lxoD5 z$E2F2lG(ErA`'F"ehifV:=FԌ0Џ!A Dr!,@j@m0 C$8 -F#$$NBE D8# 4 W(P̐8'$x"D`DA @؇]qQ[k(P:4ruHٰ3 ~zi н ϝĩ9ą5llgWy *AHL+HѢ`OH KF(8DƤ7(Sކ# Crt63AlbŒCmDl,,h{dveC^=_=!{kn- J4GAF AFF#DA#D     #H      AAA\H##:S_M1KGDXՑ$ ݨcՌ^"(zrHJƓȈ 0'$$ƹFf$.bNU,JѠDЍ-hUtr1 mLlW1bZ&vћ0$1- tTz#TkAz #H5?AGG}hPFA/ԍ= ՋHO MCY7սuF#F璚 Ж4^bMVb*Id0#=lI}'6'(hgxbQ2i>r@.NSpFX 7B6I B5vMD [;$.]yGZ.@nG.cv}s/Gj;>ZKDv~~~~x~;Q<'3>x ::Q֎u/D$:| ppKb\"\%. pKb\%.\< x pLO|[!%%> `KKK| pHHGJ:Q֎ה:Fè$Y!Pz:5DI$ k(/ ; A 'bK$3$θ 2`9k݊@E{YZk,zxCxM9F@Apadؒ1!"r"FBJ;} ϫtcF` NWϢcM^QꇦH<m^Yő֫:dǢ5#HGa/:?/QNF~ g$ldje,u(Ta A!,,R(.R-#A5: KF@Ќ(5Y JGC,*m'MъL4E5d)bhXUF{@BV앹:JK94!Rݢ\ȏc& J"~{6cU slL"uuۣܒ2Q?MF|n=2Mhܞf411ZX~$poEZFdycL1uGgzϮ}Q/?A׹^Y'&}3Ɂތlot,u>t1?#؈j7},zsDzW'\dw~}77gίL?EP&Ld e[Ѩy KBΌ_F 7DA#םdLK##IRщ/@"XLBkY`z-d6_%+(DoR B $`H6t`?qE:qF8V =6Q}ir,:^ٝV Ťj0N/L=Qҍh΋K\'LzϢdFMȾOFo]4z6dIOevH00$/I\Ep-==  >G= HAGb bDFeRM ƘI'H!gџ>}_E:jbbu]1: D_AboqDunM#ҽ -u_#N$r`f*2B^aW5 CҊZ%\QC R!SխF9W]Ar…DNQDhoIcV/%>{ƒBF46 /Bj r#jDczV Ch܋ Ζ#c}&Hgt$VADo6ʑL 5.EexLz40ɋgܲF~rO'䙇^[Xd4c\-V #s/"&` $#LRF-ʹ DJyP{Z p9︣}sNtncC_#5]L] ,)[l~ׁ$ \Q?On&~JSte{ lh:h%~Rj3Tgݯ YAB\Z#[<"yy 8CD}Ps_ Z*J|1X=73)M'Iѣ'L 'д }~^$$lCg47,4YD^1_R5I'EljcB^ؓƩfމ0<*cab@"'xܩ+܍b}|X?"D /_snM(&э)c]H0G\t$<OGoiVoNGx2"LlaZ=`!TO˟a+[#.&a< I\^*f8JWV[7"RFL$8mt'I@C] ,t)38Yg"vCV9R9!c; J셛RP#!% =mt64Òb@&7`mW u)(I@$_ K %czAIP].TCq$|. ZS"J. Tr!5b#b\!l$ TӁqxM4%&DP})X밴I>Lc6R"$%l?/D&}(#@kH:z@בld^10b4 RE,&KlFlm@2p!$1a$SD1qUŌMi! ĊѶȘ3t47\2`N͉BɍέqSҚ&ɲPܛ I0mђ<:͏C7ђNY;mP&BR9 Ly 2(=x!\ 80ȅD0mRl8("\7L&Z&E< V3v-RKoq7ƾ_"y0C2('ܔȈ[Xp#;X ';#}0o$QafCY-yO${eGV7<䗡@FOя'ZHN:ic\iGēS3c7iɲH! Ԉo@1 Kj2%iu y$7Ւ"(`tfeQ2eZ#DH&9+:-VޗLIBH:iބ-Yp-t)I'dJ5uk(0ʏfEAcJtN+,I+YC& f艳pL8z1pMdɗQɮbI- 6?2R7!Q0"D,Y:{JHb'$sWdJ 0'o%T70$͊~ D!r<Xe*T33BU30,JQy0}`o,xIZKH9DN\G{ <aPE xTGiOKJgIJcq[oaG[ ˗fS7$v]rGp|+mIO:^އLy'L h %38y2LO#D^X2LuM (J,j/bf B=C $z oT!͑-.R;aݤ!6 !շeܴ) @ԍӲ,p%'6OH15dGcT{pB07%䛝f0ȣceqѵFL5/$flDƎ"zdl9H'O#W&hGr_ vcxNFJĸܸjt6Gėqo#\H Vr&҇qIp/+iփ䋬{;蘘ZȂ'eeB)L5=1'1g:0`b{72v.0Imf߂&GY!h=7| f66]oxr&щ2R{ a8cę|2$7F3C} ǩߦ}I֌tdH1tYl#}܈,9< QwvDBO#’b}Sk} 9<#2$I2PRǚȊ!Z?C>4b~F'ya!XؿgCJÔx$ z; Ӝ3-$OI:I"IHЖAQPVmbTl$nF!Gh:ظ )NN$c3"a2.z¬&Gh_<ɞ`sȗD OHYױFǥ}F4"4@K,L"W:/EY:$ u!4J[.8̎z3Єh y+څE Ii* ;0/#fY`tAZVt.Hۊ-h'b2dtɛN bW"7#=3lMx7EKlt(dvD{فdy6"ls&-"y='ɝ% ,lX-MheOZ?/z?C@ӝ06"nSqhrm((nP;Je?aEn/I=r&-[1z7oZ:\KcRAF% v&u@ЂjnXn(z8x.XԢM !cD>rPd=NdI$26OYi'}f;L %D "ߖHv& abv#>}NhK 0s Cɑ>!%#xHr,ZZ.DdIVI/ȃȕ[ 6v#D5h۱`pe 'c GDCXBCECrt[6F~HWA(o'2dFr!T8g|l2HE"W(3%/"U:{-E~NLF` |0L(N\p5QDȩXѵ h1'\3rN}iu% ٔ:3K%A̍p؏'R~I1'#o 7%Fm@xlT bcrLb)bzHŘmzFdzP-I/[аLZ1jLA%~%yƑكq|HēCЃ}"jLdb5>GtrHT5?e sá5 JZ?{"#~'|cs :*z[-AI(Hj4Ym$7I g*5`jRQ<AT[148& N+ Iۢ|8^(v%3㶡K,=(UL(fX(|2b&ƚr:rBmb'8&La܉FJntG"U r&|*P$oA,v:uc$V6)]/1$73fXx$KА%FO?#%x2mo:3mdSv'dj127['DF%&2'}/re}[ j]Ksl9.䥺'N@!22 4^_]&DC QhLh)+-D c!4L(Ɣ%v6|DɒI, 'ױ|hL38+ISV0\߹CGIx'MuؓH:FD'/2dnod7fDX-rђ6d+ы$D y5mH8HJKHC @#QEMRMB#=rgUft]7ttoz<`nܡ(܂.J}#%4 `|BdO؝fF!S3vDy%{3Ycq6$(pYm0dt^ kF@oH O6B$UhЅ}3"'R#T'*G Ș^41QVIsލ ASdBt-'|& Jc}#E 7#"dh Sdi'm2sݍсI!CEpdp6?hȜ1)mjd%:*^8paпcEY#<V]@| ŴJm݊ʬZJY@4Te-Nv%L8vL)gj&=,Sb2I#ن>A,J{sMQdSŋ轌bPa!c"Q"#M`I.adSnP(5+7 ʝ<-8߂.DfǸ lhEL[M}.EB?b[HI!'N~ULuF弊 XIH21In{!aIdT .6N-x(;&4JdIt+n&w"=5_FI e\Iؼi$v>4(n5v(O܂ՌL1I$$άcZpI~=2ʼnr:!$e5ٲ#C5(eg8dס$"A l+4" K1єOXlei$1߂zVdO IBpCn7h΋=# 2neZdչ&4,UG:% h+I\2 L|D ME0,9ȅٗ h!<5%v+}PPxՊ$2@P\]'إcF:GOqɋ J yC}bvFS7*dC6$!RXo8AP(LP݌bǑ M}y&wJ̒a-7t_D#'C+!8Ct\`bcCGbRɀ)le`OeoJarJ( "TS|0M<*#Ǧ&'2=1DD k[W %гK"/aol!5e)#hē.̈"d^| ;)RgOsqW&w|Z-7av5Zm~Kf L/p4D}t1Ғa-!EdاY2왡0IN̗ pl8g;#6Ee%Bf :ڈ}&4zS 1-YV5!+BY ^: w%JnV챤B!yDt! `ġ64(5@!ǥc ei"QC4K/jL&}w"sAy&j [7N`NIv,AF'yI<% aA1d,r}4+pY1?$=ƛ3F$uٱILWfXa$;+:"y(IES})2b 6BYM#cb&GV&H%0gb֍\|i7c4BD"쨈Y12[0gCp+q,p].,m/L-B/'hɱ;D 6 $Km0n 8 Cn)I%snL#Dt`6 D~I7SZΙ8^y3HMc |/cpdkx  #K`@I9<#pir=ĥ欸o= :L?-(܂ArDvnY;0~Gȇ0-`F .b FHTOЂ ^zbcf}y"D8&9|gHٕ##O'B䢳r{3y.:-Y)&EmI(I!aFt.OcE|Q>Ke{E}Ŝhh%xbpR "(NGd $SlZ7!F4"}%QBMg6DˁK'QcP!9SO#ْ]H&ĺ7G)0'KjV$jCn]|sqU1x&^qܼAlo *nȗ; hC2'Xnt!%?dӳ 4D*r[s"8hNfT4%%)=MĨc?7IN{ irٰN nGxQL FFQ JlC۱!F3hZF, "%6G -lI56_&lcH H hg8nE zN?NX'jƵZ_1H翑F`wٵ^7!{T~4&X̓ UU\mjJWqCka1K"I4aZ8-dN `эetEdO&tRiB?#"(#ikt7.c ==dňyh2tlrn/[Y'bMC+ nżX&ı؉E(/X$)E0L&䄞TY k~Ŀ#ͨVEΔً3iڲ=jz$cָgH&=#@vHz@y/=^mdCymHOqّ.A/6q> #`hl}RМ LSք5P$Ɖ(^ /DihAAbI0ՙΏQ"!!/CYz=>bD0'2.+0D9i!F̎Ȝl8"} b(lϓJH| dI-"G zf 2~GLnVn$pF #qB"|t7%rȷK_JdkX9!(.FO.3aQ7O9^~L0[7j3 Q"Ҝq!\n3ec=Ԟ!HDKbd.VIvF`(R& )n@^;Ώ._b] <U&C{C8%%6؉RȎlPd4TbJE\ 0܎2G qTx᜙ cb=oCDE~F&Tlm&m1ǩ~Lod\i&N1IQ3s}2d2Dv% ُY'fG9MCT>#! K&%Q!$!2;dBZFFF Lz%s: 4">zzX- J!znre/D}wc?Dsx򏰰[3Hdcf?}ȁ%4*#$E;B!>K#JRv"r92cc!yؙcH!`xLʬeYF{$i2,Y!M.ʍaȔ"#bѾVnJ'l(Uf IN1КɼVB0蘧Slappݖ7ɔ V܌ Nӽn%;7e)t^K2O d-BwBۂp?#0\K2 I<-*DA9B2CUI+a9lC)4sLG3 X$$b/9a\f"6BĤ'* ܳ(dni`ޗ0L,)c$gҾhI,c.c& 䞋ݘds1K \hD>{:}.uctY67ћXA@ݬM EG&1jh5z$} Kcc%Qߍ!KȜrn;~ n)jfCnķ1&TD&26 y'Dafiqo&)Rˈ0鐓 }O,e1?J6EH;|䉂!X'q)\dr"n}F?:cpxX?2cT ;ؚ(؞엄vpx3>-yX [2%%,GqF.C2#t1.{DqTvSVD:Dd/s" m#Wׁa*%'CCōᑛ6dڣEм3ȂGcP"$'eŔMōFP{ =Nʶ#L3ְFNNNq)$3hhZ2Ⱥf(aI٘G8lHv57wJ"P0-}.f҄ZH'?@jK ~42$KQ- S/J$llc8Y> <7FWdNE%JD@EPBNp'-x I)89af̋,YC~$lĤn< VE.DqDC S(*dDI)Cb}o0S #Hӓ|$Fɋ'Tه" –4Ĭ:d- n%AX(Mc?#{457 ǖ ~ }ېfgnMn&s)F9!BD9[,Jr"%:8wJ,lI[hn19'c+j2Lx0hMC5_c.DB9iF1)SD0 8@bI1c&ڼif4sh܁7.3|Gr">p`v)9}fu;) :[XF27,o(fє<2۲OU[@ DVkDJ*iBI}PWMclz1C?axbh߹XqпdWXE><,r&(pcQ ^dP0Kav+X(c<[Z\F,N q7"M Xn% qFbJ%\N "(S?b`YvNĜ#$H\ :#S&Ra0bR#$ X+>Ѻ:pan*Hhx,wH{\[1K.T_w?c;Y92m.PI}'vpa(VdRIáߒ\$,mOBx ;BA%vre$ӔAsn,8p60CilHI$z7f&í#܉1mH:R+t;:7cs&{HYSY0aNDFL#lG+qOc#bVM5jv)m? ;=oU聡i=Z@ˑ @V8az!ZF1 އ!rFAټZ]2̞ t7De T(j[ #-& ԎRT YS&,r?7o%{%),R+&ɟ'eZlff`W+L8b*3|+"h bɸF9JU7attĜ)BIbtqP5)#Mw,,Hy\تsDc&PKu%,"}\p;ڹaRrj){kca!9HՎd&8BrKQDn!Y 2C̦H^2 sIgBKgwhu39؟U0KT~SqQG'H& 2'8a[,]`;l2~BǦY^$b=;HFnnMl3;š8H!M6F$p%NURȋQ y\!d2pf+F;tC-Bō3yBc/EY'OI=JgW k"/Ɓp-FhkS]>lCgȒ%HN l,掑YcRG#R~ɾp 5\3{I &f3dfOqJ{t{Jlё00W~cB^H7(0oر~L1dn)HJty:hEnTlRV=-CqkBOJSbP̔6M1l3o5CcB!m4s)@ :Hs̋cn)f̺BiBQ4(`0"6INN[:b++a8G$XlDÍ"[ "E!dOE"WBA[T{D `mJVn@2c??HλY'OqiΙVEiNdtO7dFl'C]voh!)(u}퍼#+oxEclĎˑ1tA~9^D(1 ~62zOTyn!}GO#)0/ Jm|, %ܹGXav{q!6Iz*Ne>d+؝cEЧB;| N,OG'm:nLIJ[oyС>LeA^I ,PѴ=7#RPGnb>G2낊䐘y1Wn:3Ksb– acoq!R:#72kvJ e~Tvr)e ;nU%db 2LEIUnbLF3HX(JK {jL1='FI"ΏF:&D_A9qk>:0H1zhxd`ȈFK<Cs`D类̊حNL } w#adFW얈dJfGDꌨgJLEYBv*^ISbM? noh?0n=9;CWe-~,El,I/&Jě73GZj;ع CG!`uyo04iMx3d#An,͸`-\HؓsT:x8D %Lxb{3nHm&3D˲(N Uq4DT1_XE1 1# WAh2=LCQkqʢCbm> hXhPd[CUDF"u7ӝ-dM̽dK6ƞGb= d<Η$zvl-Df jCMB9nmT>7.MD{%)]=^?1RlRIk$J:N?^mHƔ\T5Vdcϣ=cJN^~ ϰ96SIQ߹8'gBw&W$~F%G1F6<`q_Jp'MA$-M} ط6[S;(Bm8j؞P6&Fhؗu:߳{RX_"YfD*V 5{áy%< 7VWSDm/q EF&n(E)6B2[܉]%'jӓ xD̆F*BS7 lXіE[ OHUd\)KMil33.RiOdUB- (rA/aմSŋx!X}hPX XizX6uT<ǢZ1/ LH=ƺXa$w6'=v9E<"$P^G(C6ԿBsUԓQ،Z)ؑJ~t8 PМ83БD/?E,\ qI1.>{D"xВjpL0`7xKm# "ogc 6B(2Yjx!qоDE d~k5ȡ7;C~ুV DCiem|aM< ErH5ٸź?Ed^TȷqFhf$(Ɓ:v)lObQM&'ܙMv:Kv+);dbۭuv<SCcܟ0hjbmhef^슍ɒ7]<`ɺ[+ݏv3d%؉͉,77N][!# 0΅ j_؝ƹ؏:x' L99]Lfڦ1QCW,b-3Ny3mU1rW\(#І< "|=Ӧ0m2Pb wխDMoOs:M $WA$eX4qEC"#=ռ>ˈ6PvvA!"Xb];"fj8bw3oFHGj',t5I$"48؃G*{J{-H7RGEmc^#ILͼ & ՔBr"Bhe (LnFDd?"\vEʱ'n&hn(N+ EOllMX5ɜC&1ɑD#|gQfrlo3*FL`O$J7,u4/N$S&b1Q"9Dl7t1cEKṞ̑."<7%g"n+f0Ɣӆ]16Yi &hˈ%_BW#&Z?dpQ(Nȩ܍lYx;#27tX)Ap%Bv&7+{6cRjZnofDP`!'$$*u=L1r&IZI#v{z5 z,Gݘp= Ɏ_%2f JCy %UFJEbe" G!r/7} < : C"#b%~K<I;ȔD0mK4d8[] %.s+vJJ˛N{{ō>IFY^~I܉2N[%\nn&Wts.ȱ[S%-S, hJ1QEy03xyugɵ2 AcR\k_}+ ” 8Hmh[?gln, i7cJ=gȅDgF'ӱιaƑnĞr"hNx.Gep%$B+j䓽˒^/Y3~ ]2CB1qIy>6+c" F&y,CؐZ'&Oz290BnJJ>IjPĒ-^B@Kq536Whn0'4HS$ĪIX ɱ7 ̗M#buKM(΅IICQD"5e;@~ q#yr;"vW`;7ŒI#(&LeByF(ݕ4%VC3LJ&DM?%4|ŠZT36}8؄VbP.Ipe ˣ8"|k xprlm[7rJU엀G,2 &vF;9±f FG n_#Fp9ypIDCd&E:<+[Y29LK;\'gD,QUI@q'ȸ6Jk t}pr6'8ѧ7jƛ\ &q/d$W4CZH'5zQ=&L=H[Lev. k3bC{$9Daټ<^Do dCbO3W>JuZTKqe;=ɇCk DjbdX4!3"fTLXI"#VI`t%F$OН'1G#J#BR<'T+ygFrlTCBW4$#m䇙2ȣm>c;:]Mip]9Dl{~I)d ܘk'3i& Fȏ|PEK"1AD$ώDć}JnZFVt-> gN/XθtN8Pg,&UR(&&O!Z J9p ufR4CA G1K,j7P| R´="R*);&%D jA}<;lPVDr4|idCA1"2vĂ_$n 6H71j3[E`u=iPBx'7<8N9aэ#9D589YUBM=ͱJH PL̙BH'$bcL?$ODdd, j~z\z㡭 Ř\k,ܴGgܰ:GgBu2604B-e LmCb3hHm*Joz6rϡ?Ch>% ;LZAv^$R*!) 5M`F2D2^I!$vLBƋE_jG AcF1bGt 1}[21#%CTŒD0l>~GVeQ v|ZF˱Vm>&LMm05 {%/= )tvFz"w1QdC%;2cܐϠ\e2vDB9&Ww"vb†D:14o77H5(\ ų#E;-MАD{ y+U 5z&?qnXLhJ^FF:ѳzcOblg56}8V5$G+#G>By!׹2rBE] h4'NEvjCT,zXh]%Bl5 Fl\ߣߠm-ń$ < Heqj d$UP$h~Dэ#IKPc䑍{>q Bi^|l9򄂤47 4XV\?r 6| EIF&COTBCݑW^F<NT+Sx>q̩.K'5&_#h"] L?L"[0cwp`e HȓBup J?+T>Lb6+D2;ޅ/$܍&%?%Y"VpH"mRrYٞ%s"MX`[']W!"̎ X6Q^(:% Õ"XBj cd(qȋS(J^#8;'I~hEEybrE(aa;eY/(0$eM`t- .2[{A/CCMBQ 2b$<2_n,HCnK7g%`p9NzG{.G'HDљȫFYznBF3e ]pg7iAd*|/rQC*s:)Y;ihۿsjȂJ^%|ƴ5!9I$DmzEz'ӐGJFƍcݖRwGhj4Z'.i;Mb cqtABF4=JhN:=z2: !l9hGbMiӢbFX?"0X' Aa9Dsi2B\!^6y~.܄@(6ND].0č~yC{2mƔ':CK>nx 2/q&g0Im%!,y%xgG12QCO,G}ؗ&źx%x(͍9vUHȫye{n*ƝwqEP*gӁБA4HZP2c0,DB_ay1Dm,&SxKšذm 9,Gb%Dr<ȝvU)-l.+r[u< T_",6pK49)\14Jh&[؆ׁ\"ȖpI Is6&_#~ŲLU*a} FlNi|ngOcΓdf#s HxG2˒hXd(6D!8G u oralA3i"&?s /el,\lBǥBdMV#oS@5ԂXCR]! BS_OO J0FB n5=[*F'E8l,};AbH͘%n, J*y7SbD teV3 6$s0bvOP{ ] Sɓȓ܎p'BV 1BKt2ljd"-$N<$ $o Ĵx$y8[g!+dH"V>Jv4ݑndYf&L?y47H)<$y OUHMEe"DaS"BÁ(hc%}Ld-QVGqbpDZn! %ĐcJĘbVAT$ܘM1‚>ksO՛V;$k p'&XL>NnO`=r{1Ddm"'b6*N0%I<#MXɱKؚcSt"#y$rK:1}!i֓,#ؒ nh"JX黑6%XI ڄK?ryly6;@ܫz$z2>#Ml I"&k(Z!;& '(@/`NΌKFgYIޓE#s n@ۋ3JUg&U] p"v+%DJڎJS%BY-8ؤ6La8%';)NԒK†IEɞFӢwd䷅=K_rgl @6P!-`w2ѾPіT\"CR*\ &v (l[HtaRb76{ Pa &3 ~D%2 pY <}3;$Ȧ-'+F1I a-ɩ^D\$ GSՅ "Qb̟>Ĺ)r-*b4y\!oF E9(J.;Dy8YNWHYN~nPM냤_dLtՊDFlĒI$1<FkBYz#b'EhI$xr@%DEM ZG8nQ6c#0"rb4/.-RKH^)!]5.ITܸb%#|fjؓ[X&D:tУ1%bht$w-Egn<f-B:6Q 萚Yzɴ` Ed4%~۲j#S(=|n C.͏f ̓I3v+8~Igr",H7;#yTY+4' v0eڄÔiBI-RVD&]9Ch~JZ Nįw$+8IA {>Ĺ O)dk[A&$_E!_,Pl!`&%2fE$VI}{B [:!MlV DC'KWƏF&EiZ`z~Ɖپ@nLh}- fTj((;q9hpYdIH`D\3Cik6-|Yoa vFӈr%Y1i?Zuz2F&_HV=0bbi?eN}DdP%9*E42DXsѳ8$yfXQ? gfDY3ߑNI&7rz&tdތu}-Dv󒰢Pn.No]J\ YkB݉r2\Kŭ`{oos`ucw/xmFGRN_}E*(9(eev4ePoϱ*MHBBCOb|@6deK7BIBl!Q6m"} r1NWJ*g.3e܋w%ʣqJL]P`9z%y3h㱩BvX,"a+0.BRx%& 8둴ɀXf r 0EHb's'`DTFF"lyC5x+T%,AJIDCv!PcF,R,R,y{'F(F7Ci%>Ky&bLa%rAJCQeF$<{}lϢ9DI21<EzG:*"[΅c}Yp,cy1fW{K; CQ2ƕ+?!?q-5TL$ea65C&'ȓmˑ8I#dDt*EBY,zU"uW =T=(A8γIjL eԴ_X-̊cA309q| /mEdGQ$ˈ2}1OKKq35q6!Mjxp*u}͊\ә~Kd{<^܂!ĖX&Ul]bn7FG0>RQ!MPk&D0)b@#z7 HxV7]Y8ddXH,S+2FnXdq*gd&r7%WХnarĿ$:'PZZMZ h雞Q~u>{=rZ(%,'D6ݓ5WH[vrKKk نy^ÔLR),U$)ŌvHG&brG[ KɊ5JʇG6XBY"2$^+F"E^'(܌ՔSqfl>=#CbaȾ4t?$K#- NRD6<@F` < X`R6RC824^JzGf60e,se@Ʀ^ɄM4Y'Zoisr YFµ(S ief4L^-)!Y#sXTO=e71 jɆ. i5P%Yl@C\3 'i5MGeťc0śc ")"_=QݍO"MqMіLKe 5@< ޼0&ɣe5_rSaU(U-~O%/!J V+$՜HC>6S"i4\  /4B2&%)LpUQYqK{0M.ʈh37 ob~np8<)e_'썏c9"3!b$f0(}"%CB$xmddfMd;F; < )Hv=bQU!yn?(0,LyMdcJFRrcLQ"MeBWTaYDRKyCDļ @wm> *-"m"Kr%"(!9]WB}Y4:hȰxQe߹TB We-1ǵ t",N4$Hg-F "7'䃵v<82 ҡP]ʇgIU{e༩ %;)+l'†~C-0#&Sq%' 7O:IgnqڈD6'qS&:PYx!OvM~An/Lȉ})x2HTTk`ȩ1l#4L,vKW+82z2vQ+ѹFQl V˽2Mȼȑ cёV7+baɝlObEe&RpJN͉v.Y(dKayvBk wY*ŊFfu؂zI$Pa?#e Jh&P'MztQؗDbD BC?%< P"J р C/"Y'pٿoh[ >ƹ 5URrDCE sěd4e| JPb۶y|lr]'I;"Rҩµ$ב{01| L˲ZDblFӊ$<`Qˎu;R-P6^|$DLy3 x[j26VtΚOb882-Wc%'Nx"6TDrc$PP MB tXog(T`ˑEYtXNUϒ'lMR7Vvu}2I$fdw0ĔGbF߁'c8t,M*^p&§ mJ&V} VDmc}y&R,Q I-ফBY@v-ԛ&a'eRCaM%jʁTxOoI,#,z&C%B؋0cb$k6ȯD:)d2:0ɽ&kC{L鑣fѤ :bi Fז4ȱ|=`G6B,UO(BHPtb (KQ}:Y 12I'$1ɝ&Pl*(b#dd}`8 =X@(SzXƄ/m)ID/$C[̈́[ j 4|"SjYܕxC{[|t7|=*$\3| -'%?"I-NxDYga`n8O[H}Nv8$]Ɓ:%,o!D\QP2'쉓DZ}Ԋ(D6w䏹UpQ'.07\'GRw[l(M vfw ̙N<5={Mt^Ct*WB"/RVZ%B6['Re,PQ%3$$jD᳑\2}mM-vEtNènQ=':fx'=b'DNB[lQXt] ɀg{fFCzb$HbRQؘZhsK$X&PLtrc|RL[ѕg"'CM2ʏ!#_.HI"UB1srJM }".6 Z$F E3X FLh2ca6)2.sq䍤kq9JR#<& 2\soCU{ [= FTOm1I#aCsfƳ Qd hMKB)$$H % -eG~;IDALaJb[e(=5pf&6@gfBU(cEK䁘IJXEFy) qF`cڲt7Jܶ*H,|Ȝ҇Eop{߂9i%lEhĎ}Rٜ,!P pǑG9e+ܺ3SOVgT7&9 +g؍ƻ$6M^G-O;hmqyH˂"?қi+.6[G/Qp)g4'$O"Y>GfhٖrTD$ Jt*Hevn`[]E8Yj%^ 309O; ,("QmdMv9mfxu-ȲڒpLC pG4kwlH$,r_q֪&eb3 )lB6YJo!JTLCHMUJ`PrƑNyDx%$h}۱U,fH62M=#~F~ EPhrIe(Oad-gFI{ 87p&{nb '1Y]q/\6xrΔ$%IQ\V#şIKv"P[$yb! Cȑ\>=F1xfq-,Ņ ^E&'~_N䆭 q8vLM*2NSh?'tKC:| t=s0K9p>*ENZJM8o'p-̍D!ggxbNdT*utn(<.W"P^{GTBzD88'!!f5-ʂoln;,[C!C(J{| cci6cFt!0 JL'6o8sx{#k/4b~p#OKqQ]7 l.F}!o8"%Uv"=^F*Yq9*݋k)-Y5;Ƅ LT4;l% 4l4;Miټ"6 vӈ007EVgqcbF _7+b}kOe<6Ŀc@+L&9BE#Da2 7Ģ̲5BT~ٝ҂ƥ%`F$vOܗb~XƸ7j(79"K66!FaW,Tv9mӡdE4ѹ.8f"%0Z3']LoSSdս; cB!m9E+~E; ]-T’) MtIi_wBy =U师l2V1 D,;M9'?";J )nn@uaQGoqϑq "(;$#v0dKP:8(ݷ c']2V%k(lN.G-W؝-ʊNI] ch$'.4`۱)t27ŊFN`tݱD 'QxVOEJɾ.A3Kb07 O%"\oDӱ;+ܙ'۲;Y'&JLz,D-"N3 }؄52d+DR/o##6_^Fybcƻ50azd&y2`HqesR$у.t$ͷ#d?t#ލ`얦eF<I) U:&d  ;|=i/qZc<}iG 5r'(I=&^n ulxGʔ8^Qy/< M&v[ =´W1_Ȅ&I\sIBa L-DI{CZ2II5O 41PĊ4btJƚT nKfY H,Cc$"ب(We`7lRL.;ٵhC'+*onas+<0$VYoE(t8݋QS2QRRź~՘UCj+r A3ХE2A1XcTȔ!Pn*LGyKn<_ȡ[y&w6ݱL] mr;W3p|܎X>tLtJJ)1K < drR' #卑?iǓ*U!O 2l{m+!d5BwBxĴ`kE!9;PB)D'ڠT4ʴeG /00Gb!;d5.J[rXe'&jr+~9&sBٜtbSD%gBcs{S#7Ʌ{WB\;-ѥb ".O9 9Fz,Y&9 (á"[@}+V^O 6uѤɴ ɂƨ؎'}peBAn9O/y"9C&67D"+$GCg  l@Lr8N6J1XD?&hu10 6K:\.`#H.ƍ/zY@!an4{MBђz#S$nƨ~ h)A VaLTe$F^h3Ѣ4cA,ԋʀ#C<$J@Im Ϲ7PL'#[&JM܊rԼɕPNBō5l-ȒPb[p2dgI('`,5u4Įs l~x;.Dte!TƢbmRʘ[;[WܥK#ɓy0\+M灢twqdN q&F4ѷCnnI>GBV];P |Jsؗ4NX }KvH)>8:[i'R2^J m-ob%$PУDH-%Vc*4RDC'$ Ϸdm&w+dx?T>gO/܅ ߁ɗE3?a*=9R"7-wr+>Lʫ:P$RJQi}R<6TNᴰaE\2ZN '[uIxx2ܙ#bRDIz$F 1 ףa-gH+sa#.џaBcF bwX*lv,[a?pv}?aE:clHBf0CpCn8hyV-RhSiK:I28E:H/jlB] DLc 8DqkBd66H1$]8BiAI?CL]71ΖUl@DдE.LD[ZQ>{ 'fa(I9Q,ĝ}{B'*7K`],jܳ";۱>U9-0")!',{bЛDIM;u.}+{pя.)G:Kxc`p+-j6#NS~tĢ d' r=DՕ)ۆmVH d~3GFW&=K21`\! $R'f$r'ہ$M8tGn` NVܱ,Q,M)91i@ӛLLJɄ ɹ%'pK'ɚn/q;.VZԢ9!hSEor n<p{Oߓ pn]#6 1=rTCܞPEDƦxh+m&g2dQ CBTDh}MؔP5;ci'#bBC ފ ,Fd5'1CU[X.S%3vĦؙ#c%ˠ) t )jʄDB1z /Z*(9"A@CP7v@Խdz \VL4/CAzXІ/KD i 0qB $;[kCZN!lIPI8b{iGlhQuvb#L2;؅HPR5j">iC†S8ŸP7&w1vϓ 3ȭcrR'r94'nZY vv'XRP읰+"[ 㒲":$T((d[MB~7H`*^+-BR&O*n;ɇ(46bc6fKBQG(g {o Ld/rj)W#se̞dKIOc6"4E4ؤ" F) '-DPRRM7L^?2o@xB'lٖnۢ{"&_"ؔ ^_D's6%-&_2gh H=nGb%HхA("1N%9WKGzyBMؔ[2&| )c v7P-},(hV)ckdSt%9 7!mRr݋dѱ0rBTLIQ)G(▖j75y܉/̵D&M)eMcHSd+p- gXH9 CK/D}t %e(<,"wEAbٰG"^&ȚRdG GLz2mUVE1GXvXJeHm%.HA:70`"y$j0@0< v2 s_|Ȣ4nGJra%ZxA7-`W K&hKO^\vYӖ+( SZ* "R:hj @DZl5 jBS>ҢXS _"'F6~,bk+͏5Dˏ" *鑇69-1CvD(p< 4I^c$P<{Ф&ci {WSGdۇc\ʁǓ *$y ENNRC`yՋ(0'Z2JgD7w?& $l*6Q{dhݞ$q'ɆGdIFeYECu"XĆf#F6:v=1$vKbqCߡfDJ9Fȁ5vسR$pˤL#?5)Ẍܷ́Nʖ⡹B[D<!YdwN)G$hDɰo#F 90L`di}7,%'"Ch;X,̗&< hƻAM)8i mi`HፈPoF3 yYut+`JR X49LI"" VĥLEMJ(.Յ8pJd9zWd1\(].ĎK`f+o f"\_pX&e4 BCDS.RpKX_CKH"Xz=FⶨCYR8'Xv W#Bn=&R!oB[lPANC ŏ"`YI,*D "q99瞄JhRcJR\H)lW e 8sv%.ʽW>EqVBjVZUHjJ]q$=ۛudD[-;{иU=g>jgȖR*peO vD,瀭&K\v(<䃸MRيȷg-zeL."VcQ7FNvhR>J&J:gUa1Ga=!vQٱUቺDb330L1CJn8H7t)ĘfȬ%nx `K-  VecBC"zcpН)Cd%č"Z&Zr% T`Dƒċv$VfGxb)R2\;8xVr$|-_J&"اT@LDEfǁy݇h\6N^FL2 z7Z&XNM>ރ6э-'ngKؙT8Z#h;y00?;cSNFLl0,RK";)$VK a=D-k1GcnDˑ_0M(Ska<"J(PZ*J1ygj "鈠~HaM6)8IB`н*FKJ7 ccZXǤф^!_(Ȳ!44 Oc4`>%DHn7d-6LBD\jRX&XbF2H$[<XTNQ"ۓ2ijw2HBfLhZip9N Fڢ)q#д$$A,KX z=PG`=h"h{T1_Pd4|4&| ٍ[)ϑ(1H :}˴2P,p&`M DV1jCt{g&S|IWMx\)#ӡo$[sV';nXbMt+u b*0WBvdA6=%lly,mC{i_Ip^G]Dl7PR VƄL1•?$l$ȉ.2ͰE?x-),)FQz|m#bIS;F&'Fe"ݓHLJAhK>Y.aZ{VkIc#f^I03Ȓ YItML!H19Dl'g FL2$rEdTLr~KC)Dg4 N.<Lj_ Ȝ{MIh8hx v16#xliހٻ8Y$Gz3ajbA5V.I΄zBD4%ZUM #Ag1D-B7(`5IaK97EQj=m6%0K,`^B]yh2ئ<=Ǝh%`y:Bɉn6<|{pB#})lkY $~G8J-=|R+SNkɛ8džBʃϱ&8%"E}culjT},GЗ.4'7 Uw>D얭>EȄH2TXqMŎHiКbRga$ qSKM7(p+ei V'-9p4sXd4ș"%>DU )cK{ is$lx!Kw&\wG\A/Gc?qFCyv@ݯ}ͽ/XyQȭ93y*y2dA֌LGQ*R3RP*{t6"͆4E6`X>-$ Ah4K$NoC&Hkk˃]KAR,Y{6 F'8'LErY H| sF1t%ddYF;d},R C{h˃L$+9a'(ߖw`1+y")7ay> ,L1"n&$%E o-\{1 oT6YfCCǃ\Taɕ Kؒ3f1Bp 4/|{K P4B+R>E!7f"obanI:䌄vE/A^Yor3"QHBW#ed1كnV+ؐM#$ʾPx\)7FXpY"0o $S -6^ [2>s{D+ʓɱab0ZQ8}R;Ed<{eg&RBc˂O߃hox>ĠlOu"#tNG5Cnݱq$#wi5c+): $@Ƀ&pgB"EA7#ivcW0I[Ufvlɍ-wnc/a~~ Â72Kȣ+Tk- `x#BSH!=d"cCLTcĨ]7 q %D9Cr4H(-ȗ !pŝB>Űr&lĈ"Ū#X ;Ւ1?:vTCĨ鎁l1rتèBz cC#~F7Hl)i#[Eߦ/~ CE2nhb%,m6I s BdYpJςBSxLi ]%>&-hlLI<ޘ2#-2#z71Y0*&<+ypL :mBe(jO6W7,re@YP>F?ЁQ&h؜)TFHnfD+*QܝW=S!q!c!'/LSw 'D.LHuHd$D@=.֋UՒ= zcԏK}I$LfoF3JCc2Q`Z1hZ^ GN,uER[ALD/L;rdi.#F.D+!-c&r{HIp8(807RS&4yǸ ŗ[t4%6FxJ J"ٚ&OzV"q&:%/JKj:G@,$&_G Dlh6'^]~ S2{?u$H6`(Lj:0'XC/-p\?Ț햀7r~JcBQ$pa_qg;&+_B8]nsCx8&废!&I@uO7)s wo 8}"$F=ߧW6W_Q'=,"}pѼ iwV ^ Q?c6QO'D)tK7 AfA7`F z8JBF.q[]~`GgHH$d{$͓ }P`=0K0s c^uvz5.PD09'n+DY0A2;sˁڡͼcC9!hvʟfy2,A \ {2-gG~ _MPH^шAƆ1\c&HijяX.E~Z G). Y-18YG=R[kap"%*Fر (D Lm\Ԓ.v' 0"0'%OB^Jo)pBٲ%32C"4is9ext19E;1رPDQl4!d(uQ܄J؝ǙkM13˂Z XW4P,sö$JUzHq=i,2R7ʡ̨s\s$5%ied\d(ʶL8DSO0c&{ftt"{ȬtI#MՓqZ8?adhk&G7Ȇ#smAc0'cc$PƟJI:$DhHj8EBqd̄JFX)/3z#Hsh^1 q1T4L[Di4Dq 1t~=U5Z_"o-Q$px+w81y%BQX" tI -2hMG wɊ 'doo',UP&77 !m}o{d"Uz‘CO])t#NW4s BHp"_s*}_fIb5g7Vo!ρP[VJI%;+u&8SwFM| i@//10&KlG[VwI)'`, J*J$Lڐ2.BP ctS뢉l\cpPœYيd:LTl"dn5JF)+$v<`Ru&uc,j $؟C bqG1޸f3e]bc" H O؛%3|.,jWfP1jnF pK7pؙ@7^z6h^\)mLAx\D&Fr*uheGm䥲 %)bdjQiJS9{툄Xy&BBNr^dS#J6hSc S0˜UIT'-#3LTbnl66&'K)c} :<޹67<"<,y"I8,l+uNn5ޓ0RDV'm2#@c?Dssd̔1ߣ$#mIHcRh2T8XZ^Ʌb&SΒ#V{[pnnalD/afL,INyI?OE1XlkV^|{vKFN5 O‰!]%h"<!tNSn)M OUsZGI.,N0TLB'G#hҒ%H$aClQBDTVD1cֶnR;!Bm\(=nS#‚_ j&¥dC[|;3b'&,JU,2J^g\ndՉ%R>\\քX+,lA lхȄCsC#W\=1YGiM囎*H%0_RDP yKD'iO$)rC8T[u؝{v~60NvHsXtODVY>RH^7bW86m;v-\ ݊y tC$j' dNP$L7/HOc'L2LP88fT' q8x&|;TFQc,n |ivb&)u#f'VDt">Z"JB!j֧=5^F" $G}6=ģev)bGrWE M-hhjDLdȨ di=1zk8t,kYj25l7VxS ȁ|I:H~"5_.T#PjlbI#%‰Sv bwH^ň{{. HosD)iy)$iwŢ[C:#{>C#/" !!f F!x.'Ishd.qdFTĉ  )D]&"Q‚#sJÏrg4ױsu?bjZaKDX)<DĊ$דؽ]q. 6 Bh0GpY/ dS'f6!9(Sby3h1˂j'@(n3$#rF1!G$ӑ(0A\QPhL9JH6viS~j0[ 5 )J\`X18xi7,C gdVF9g̪&r>0-#f#IR Hofeȩ%2{,rucPL}'pI01FbrY&xH҉1l[PO&cr)d͘Cr;) $ah;<9'XS2gxo$zɔjHl#{췑/:d!V6%2QBLR" j='d;E-d^6NW@= dsT"4&D/%d 3FZ HƣBbDFD1n-i'əa$MD <I6,8ZiEjᇀ1Wn/Yݏȃ"ZQ̎7 \e},rG'un8Y}0+GF|Z#aľ+g]1y;>cVwC^5&+4B2O\_4}fbq? 3e|sJȕrߑV~a&Jk 5 l+qYVh6^bk@jſIOoƴfs~9?" 8oL߰(/IN 7}{I} ?d[ RR8a$n:MPp[ cP> iI R KBW!H߄G|__Bq`q!QK&a BA7_jd6=[E .tJC E sJgFݓdb,o(ʺ8-ϜW[0pMdN5| U9 Jp)Դ|? "\_4t ,젟9>B`"^Hxs>Py"σb\Q "=n!os MC43hCwX?{nf<~bevq ~Hik4rM$MV6ĶOU! $,pVFv*Ι-((.5D2BRz"ol_0ǁc$ׁw<y n. ;̅ٙby[!M44ׁ&ތ#w٬ *@.T'/KfVg E*)h%YDdF"gȻ4Qf|CwlTɺ=h]7PDw9ܗ#G# } f\ HDr^%rĹ)ȝL`#y7l 75AEM:#<,fCf[#q|і A>J&xqw%6!#ǁrglCI#[Wc2͊T{f+] "DRZ dLٲ2Wsw; ݰJDiꐰ"'KI~G RdHKCiGJ;O/8= {PL?* 55H7(_lܲQʡ Vc<5R- =2Cᑫ[&BDPt~VK5,IB,SSeA.E |Idcmyp-"P6SU.ZNHGzH {bV2gqL16)=dl0Y"~`SG`$BA,ca6ddtxoBކT10Զ:s6xQLϒ ;//Ҷ)TJfZOMIJ0Iб&Pѓw#Y0QDcqy%5)_؎?b+Ȏz%DYDL4mHԒe*ؙx>D IĔY(yiIpnnahN ndjKXT$a!K)ZM;TQȧLjbNFdF:% kdJ$}89y2Oa2dMd87^ TxNQ+ؚ?!(&Lhʎ:6J&mn5Q* #l'MSPJ4H7z=]"t1BQBwL% _[W6B\N?7!N37-RsFV}lÙpK7wR'!x.XN?7"M$ML1/c8E{+ fo+LʑnhU8>A c~ NȐǗ 3|,2XYQbx$.GE%8O2ͮFk@0*8dY aN<Jh[{9 Ȳs)>D7jEmfXד8DPK[- PGѽ dAe.|sG0S؏B714AO#~DPB. mMҎBB).N@P?bDZH5/C`!}1IFđ ;W mS?)H8"нƥpkg YLd ‘8(Q`N}$ X=GȝќE#b-"3(l*/l?"\,ad{&!p9mǸrEa/qN_䔍E!M,ļ+DH.)I葾v2>B '$o. |v>aGvDcXed;+l(YأchVd؂p-%H'ȟ೉%m`촒2&C sďJآsGtCiXS׼Լ&NxkRv8)B&(MⲡH[cFG;p]4+?^c!RE}MajeJKj9%x_%\qlG"qd y.s&$!% n19ˡFrcy7>qǽH+Fї#ʠ[b˲njNX}$&QbIxr '26~\{2P15QH-Yg1؆ςz|;lT`fQ\ `th, B{&Q:! fμn:($[$jG2J T ʑ<1Ф1#")s_'2o) D_jk8' K)F//"^D%76̞r&[BXsG(mn8 h2-enRBZJ4hZW(rn&=^FMĊ Y("G.PPRBB&uZS}3R4pǹ/𥰿"$t?[ą8LXqL)-qɜ)h,WP'ǫcDX;hѧ'[!\ey7g؋SA sa)AM2C":{W;Eƫ d|K/Q77I/Ш "ERR>P~;FUls!| 70#ISX(H,FP7 ,ìBL73oؐo{6E o.Q S+< ݢ6>ȄD_si X  IJɹK#>I([ '-ԇ _m,v[LZV$݊,B5[ b^&-m>+a-bb8 Q؟0%^qУ+V둪| T'Zq^86RHK5#!2#1 OP,jA#|ZvdiKUպJa9?(y2pR*N+a_`A${l[ ЋM$ؐ˂%H18=Cn콍Lt6wܿ BcAzk#uefM@\rWZ7&.rPța+5$iH 6?bRčeqF7D& ȯ=^ãaQEv| Jf̑R2ANPhJEwdN=,p'nx&> TK>6 n(Q-V"AOcI>W#gD:)P>\Ale``Ję*p mєK,-/24Udb$T(iB" X^ /q;ǒxBz vC $m5(I%# | ?qt2aA t:`Q 4: Ş#KlG+C};hK`hjE#D#`v -_1`edh%obn2b!AP!"6Oܶ Ca@ۺ*fx e(\]ފFڈԈ]E?S4 d  Y4iR4$Ym5)"J*.…Gَ(Dz m8)yHmKd2v-ҝ[#Pͻ5dhoqYbIv!t>Dҟ^{"l2+HxO ?[̫} h"BDk5B.B bD KQ|-BUDrٝ0š!} 6#i@E`hLi7QlڃT*J oHQ(AcjXcJв"p&`MD a2|d [P AS.P%%a RӔ'tsyT8 `LIqZn$Pb*;!5 l@IU.Djr#l(PE|j2I,F X `1P+* b'FʢZ $5Ş.\le).Q^`ׂj\46 ь!5JӒ*i s#0zUh< Nb"#  :B2޴%  Ȣ<o,1BЕР-&X"E!$a )*CT!ėY 5k%X!B(ǁo`k'fMٶ1G$GLwZ"2I&W *F(uIGZ,x"AcYĖJA{" i44L%FK|0A?Б PNĤJpa֖r4_cIӂIIQH{ HD z*FYbքA>%) AIJ瑵 ؝HkHJ9L@:JҬN3oHz!% ݅ R(\*F.QdIhN. h!e0=^AVDwk6J)ehCa[GOH2N/Zd=m&l9 #˝*B)8B6= @ABCȘ BlHZ C47E $܄ZPf^ i`UX/\it5R=Z0 :Av9(3V,>4AP:B ej:)k =;Э E ?!aRGoؽ3$sTQ8.6A [)RC/@k B4SUG"FLn] ,"@Q+Ns$RIh#v!\ v'X1APFMSĭ >v 7hp&wZ#KG8cGȒzn.`iNCgodtH<4{uZMjM)ZrIN{ceZRK![~0)NGv> FBo>Ж- /q kPYEpcI@[7ahdC$bĉ619v/Xubжfy:BA"+NF%czC ]"h, Uz=]tKIլ 4] z,+jYÛ7 s-1 Ћ1BG4( B"IzdBP Z"BB|WJX^KG?Hz{3Dg8IJe@ OY6-Ǻpٌ,1iSgYMC tYX2tfQxDHcrҲ {hz:4SV$p Dqbɳϝ,/5}hǸAKk:ϳLtT-!?H { [BDw AXԥ] L~3bP+,)!9d B piGROZ0y'} qdp(DKb_QެA/fr2v!6*G劘$d,HBѡ&#TP[Po*bYp #r2H'jp&AY%xB:ًzOPzn#N:^\REI*|"9%L1htHs$w 28VzAԍ% @,L4(*}Qa)`@,fh _rjl`|H(>zo-5$ v$c5Eb/ARSYo9}SFoZi::ƃ@B!5!$BTT1AV"@eC\Ʒp+V< "0'N45dz^SY.*PJj:flsA##RJ,G&O"9ogT% e͘aʆ%Z@"AzBb!XelB$%-/Ag= ^:D ThҥƚGYֺ^l#)jiP"K!숐īcZ< E-ԔФĊ'A3f7b QǢJЃБh~D 80ðЇAn%`;XA AL ?T+N(P^\~|42BTE%C 6xW!rj-* )GH8jnيK&hvc\m&3nJٖ=;[ H#$s ;JL;PKR4 LJ;s'W1`9h~ mRt/Ґ'FJ!І UQ"4 P2=P zzA@%)) uZ hM r';I'cUY"!pI"@Gm4AC]xٰ_HH  Ѣ1i"AMѰI ,M  =(}7XO;V+2$RNQ a w∂3I؆!,#Z ALzhrH-`FA 44PƪFNDI܃,*! 8cֽ- $ץH2H,AȊaeQpBNX `a8:,">- za0 DhSү(Ѳ܂4QzdHPZ %T-#ԁcVDд @AA* !mi=GcZ'b0XB"BA=`YKz hB  #DhFxHМ  JœXVM *.5+`N h^Ae hr(HDF 5qAFG(8, .nt.dm\1!j@FKn<0? hhWz[4;Dh$pCEhADDDAЁ"449"hrB I1 3fU*$8+(sL= 7bVzFV"("!H#ҽyhHĖC#р⇡M#HS ,BhVni=jKS, 4Ah"%G PSbA Z2:)^ MIQQZ(  %z AQ AAAAAA \qEQWg8ܟnu&6a "mؖ")E!"#R z R#[c3-pqJNlu&}G x?őnߴ$]b'%͘!$nM•,)LF[EPA"V$@ƐAD h, H>4AVFGP/Lu!AD,B+Jc(6AD ~2VR/Ti*$/L4@ӰVFId~ F:/ G=*:e%4+q$hBƏ::'#& :IP4BDA Ǡl%h䡀 4BqMK+ZDTc&HIA0}F    44+ @Rˤe蒤Bv:e)>xOpS%% R!  #H `ΤjA4hB*H!DZKB=|[=040x^O) 'A c= @мDr4BKD $DXѴ/q☑fXvnK  l4Tш]hk6$9#ԟT dG=0F_EhԍYLxF-_= l$CM';4Cj @(QdX(AgbFAi@= ZB QfF"lDAAX(AQzGip@ br*s9 f= B GQj^*!- H-@PQbH :`=ʊ>/Dz|A} ` T}ս@,Q,kC) NoQZ% 40MĂǪ 4h$ B4#CC@&/M05PAh2ta:0aW"$5[#^tA(е (z#DhkC4@ cA܂ VKC2e! CX`p1?KUb>΍J06'GL#ҡAzXTA"*݄*cbME+IiJ[YbϠc R!Bw.t?Ff /P,#r%l6 "zpGHl *R e"a. q9dBE= ODM8ƅG4c+NАF@ԁDf hffW//Lh hcFNzhH@ #FCACZa& ֓HǠ[EOrI~ ƋȑgUz7zS?]ƌlc=Q(yB_FI!kքHYGJJF1t-d ]N m40FpYЖzbr$D$Z2[tr&A=:I;Me 2tdHT4c]G 5GC)5IY0OL{'ui@YH8Lg"?-6iG4+} D=Id0BBdL"C_VF؁#R#D4A{ ILt&D Mr1I\`)f_g[/oHOLOД5(Xю@dhǫbzbIIl/AO: =LnlH> 5AFWh),a?A0ؐH \2CR-(L^F@LLGS-Z׏^DB[[ЧkHSK,r=`HHp.,D4dpK, }B Lk@p1 YN5 Cw: ls$p,hoHb#DjAADhhaEE2'5%*]?m&nP z?W"HDvZI$^0!b#/RJ?Ǩ+ ć24/S$` a 44dFA lAzԏDTejj  yZ#6*)@HQșP$^FH#CWЃDHB5#cXA)b70hF-$f jٺ/1a/TŠ ~֌ lr+AAEW,: I+P`rF\ IEB  #Z5"IEp Q:K] fk,hQK*%Đb qwJRҽS돥(/\Eem r2NkFDi7HrPX" CY #\4#Ĉ(UoqBQDSD)dD\ErG @A֐0#XVlORv KTA44v`$e}K|',-ՏK hXddh.␴ ZFn D^u-cƅ@2nGI+ 8|b)B8)B , xLG&(/DX֐A@ְ4DhǡC(8zV`&-IPXlMAoKBU0ÎGX羐HiJ%WD)pWZ/[N괝$ίő4Dh H]Ak/:bP䕍jC"4`HEhh[- S0-Pa 1זNllr GQ:ci+D%(H"tn|ܷn"9g(f]SB5lxz'1ꏠ,ZJՐ0 [AܐN8о#3%!h vB jؖ"/K[V0B`iQxtcҔRj%Xд Vcz&-71+rL :MU K/a\9%bKH 5=PF@6@=$ԓNE P2U_=ۑ >Dl΄h"D4aaDo~sYԒt2uR½q%8"MM('"b@"ؐT&HZH'e<I Yi`F Bw1(ԁkz A鉒I"J294AͥʈW)CIe@FWq c6anHKt'"!J1M$DC<RBrJIY76'R\e &u''$F遖KCL۔cJ VP]4AZ!Øh$@ƑzFNUhNG5c_TЂ!MD*EzQFXcC48Z, NCY!cyZγ~nA hu, I} РI:DNϒ2_!"AϮ4lFƚ a jCKf{ŐLd(Hٰ8{}Mz ]4*KiQyȔU^ " Рh4'jD'>'b I$"5d"tGzԐL{%%l%ЂNzY%#駒ؙ=Hq2tlPL0mSЎ! UlK뱏EDc,tj-:kH6.FEt[)Ó`͍Ⱥ5$6'DI0/9i'D>/\ICI *$3ʍAK M;R$k" ^Gtc#AL~Ha sܣ],RdYA+X3`-I!zB^r "\nJд|T+7M δD"44oLAzX%z@ :6=j!hc%7c CV)La[lR*>>'ӿYdN!)ֺc֖I$Y@-v EcQв1Kc0*RI[ms .`NJEHTPBa rM2ot5BbU!Wqm߶=/:o 4DINXzšاb 9BD1}$Iddams>bJŹgJamx%pEЎ⯢t܏VH&Ɣ!-Ĕ ycRjS. t+(ж#0`Bb@hւoF1&%"Bѱ+,C:dJ J)3(QP&DW5D4#/C+J6fawbLBp&DI&hO鵠׾6z#H#&7bU3 D,M kEH菠f4+QyrELo,DCؒIr+hKtž_C2Dxw*dZMxb++(sh-# Iѱ='ؾ6053_ q)BmcE  Mi,FhhI;bʈi$`LĐ)p`j I;ތ&Hà) aY=/>ۃcT2%vSJ% #QۄFH"3'X>FDX" dG0ʼn}&{ x HtƂ E2`sq8I,nN$[#Ђ>n&-`SF 3J"QE"WlJBhhhzTtkV AYQVEfMMZ S+.A;H+FIYGR86AD1c ЌK(&!SHA,6CSl1ȶP}dLLoG6=(؄R1dNĐ-C,BC ^OOF/Tz)%: "Sc rspxv΄G-Ɋǥ F #/CBфMH}+E a(L”xB$,mAf#' #F Eꁌh/A_E#z1=[#?h&*RQ/ h-c#0$bbm K$LcYSAb6hDcbdT@VNH hhEqV%pd)2xPVEk1ZY 5C$lRli3w*PCNlZ$$zO`5^s:͸O9"^=z !dי2H1@)lDRM-qZ+I2 ЊTHÔ(#lA6a) j>BPOj؞[]:BэiDay aۊ"$:bu'Gc3¤z= hXD|˯2RдH0_z(m!+AM>݋lr'JQWjXDPqǦ}[//G~ Y"D5BȐn#МQ*撐!&La`rE_,9dʁHA8ۚ:Ɇ3 P_cHX֗"jrf(m Ô'#zH8Z HGECiI[a`wǬ6-,r'qpҖUߢ}LcRCKȷF%dH(~cӌa"oFl( O% dHlqVOȖ]Vm#cn1!>ѱ߼<h!\a,ڌJ0y ԵnGo:'д~F6a"5+hPĒ .t/N=H0?CB6Cmp-lٱ:2C`Ƀ p%V)7%$zY$lCq IG.ɚXC,%jD+%j. X"ܷn#aP*9lZ֍H<JlէO1?K)ܭp 8l-}I'$FIl4Hi12! W菤=)O&6dHkІ$Ȼ}q,OFhpB47:ƯCP~hBC[4m9 # :"T zE$ƵZ "-E|"H Y=[k>zwɟc`J4-&䒳 >Ep '7B„F2TqődwR;^DINIp1y"/nR @#cAiCZhPhAj$I欤j"h܈7$?A&o'[Amo9'S2)rތJ>$)N !i+t_1BN~^5 H= d@z6|Ĕ$8 'B1}jԯǫf-}1a(&$~Y(hFD{B H(4= IJ I)?Sӿz7vcJ$$A/ GfXBR#؁lVB#Z kc4;W{,=vSH/C1D6I{Z15C$в/SBg6$Hq"TBddpEK31HLd$z$q֦I"c 4I CX 1/b,ZБ!l[@+jƉ2AzgITzc O%ÓXXqƮ_D# z5$,误:Fљ'~gF71M2 F[ č v4vPV@$51&I: Y ΅s:~z?EI$`I:Aa"V_V~Y> ]jPh|8 ^oFf۱!blm?0G0AFIѱF4& bzdԊ[)!x&&D&xT"lD-`(Lbq>m"*[QQMƎQZA):hwerjĕ?Jթ$G-(jZ1)e & }1ԉtolL~r2^rbP[W #JpNΏBR/t\22I$Z&?='D%D $B z%!hC{$&OJ5 JPz}qոLbte kBCd=ձK-1dOELaTcQ3 ђda $AzY4͈Xif@ldD/AňĴdD9CQ9:HI:ϭKX-#qGAic/WίGȚz&4cEcyFBLGTК21S'J d jőskӢнOV,?6I:2~} n0)REFB0#UcQ 9 -@EMqV1S܉ ИwzEDmЉ(I H hh >$1@IA0p̴ȱGnܷa:>1Z'Z^1h´0fIfe䑹"3P j&Ѳ#Ee1 = K8&L1r/bэBH"&!X:>LST":aX -݅ t*M"RyL[JOK#H"EKOB%["V0SIN蟤r7/8(a$)DB#cJyi_ڧf !&3hƅD9!BJ9#AuRьHrt"CpȄO1Q(E 0I'r$ hPc51{ lh&EЛs:]Fs_z^2IN2>p!]QI g`OLn8D"MH,C2zE,&z Q󱶗lbF%v"Hd^E ct0@lccW Q:$p̑ɐB!daa .IN}Q!H <lKD/T&7JmW#m_IR>Pu~MPE)cD˜)hP%OpVIQ#_YƴȃՙIf$.a^ 8{nE$"[hL+Mp VO ,B# Y]nUk_ߥ$9H jM PB4JZo!JhR}7CđD9yDkL&߱A!dXԀ,ƴKC,6Fb]v/S4[ƈ36bPyD tHa"g-s}'FLzX:-$?@ZHG%Z J#UENiAxE #jB Rط>8Z̖Q!""z-'ˍ] I$`}1zwFXn@%Cp,%xZ0P+ }g"A hjD5sFi1H ۈc!F|1iMy+9qp][q2I kW 9$1zE F7MژՐ"* L=BԱ`d0fm"^&o``,.O  <1$! D &#D1zc hHh~""2@4!|]/KՖB^12-I3ǠD:035T- mX 9/ $༠S ezu `P-șIO]z61'MRQRt$Bѭz2D/Cމ!)!FHz60 *D`! |M4;Ea$[ h^L66N lQ2Sm cf G PM/*]UPHT%>Kc 4yDHF . hZ-. |r0I .E4l=-ؕ ɕ\j<+2QBa -S:Ą/:1$+$l0l^S'AY8"e2N_7e} yKVcV%(4[ͬ`R$lJ/` #}dD$tb4diM )EkMdGCZsd^%U~>JF*7!%h~ Ӱ$$Azߦ} l@V@Pb]L"D64UD!(Lj)$ >z($BiǶI0${I$0& JefSF!a~=$QjPm03Y=it^R1A1F`H$toCC3r:M% M1M64=DXؚJk1b HY1,5#- d@J)' Mi$^4TĄ5Sn PCR'jiDAj6} ;ř*Ӭ {]Hc|y%kh1bFf/-&ElC#9^ Rd$FǡDAG4,ԁBD- MزEw0:@Bhj^ĢQE"6Ⱦ`I- T÷gtD HKHBz"I$b, KlM2XG"J p%u 0蝩F@o2cq"(KD Lh4c6 ?Cxʼnuڰd1}@(I$ES LcXq(&HД8'L~0gVqK6ѸҖE[i1@*T27e#m1CႶIca m`22I `bʈs B4`#1$TjJ$!#ċ,}CEe+d[B$Џ3 6DmYJ YHK$H$NoDLd$/Lz`A-Qm ,ˉ<X1'8LHTZtzR{!/4=A|RKZH蝂1Di<XdDj2tC3#$?) ( bބ&Z#Dr(3.D$@P<! lmA 99 *#^H/h& ?ލƉ(ѕ hdd<HIp3!:J'49C, Q1HeF1 t UaGc*Oϡzž O{Boы$z 1[= #~,!+iш@p9ҝrUpA5 F3ﱎ|ALXD :$#GEcZG5ˡbyJÉSb&D$%dEI:I:1 F4 %>mDĈZBAfd,Y`HҺawѓYpTĨd1U% U~c=Dihm b3C0_J4zA@I()%7+ ' t!>9[Bm&Sr0.[!pژW)Pz b'C!aH5M$ HhQ`HX>Ȍ+1Q͑aEEF-XcGޯLH_AޥED5f@2*6PGXp?m"X| <B@0G4hь2Fd(V 6e%EhHL.$;bIB E$)cy6i!`N H!i$@p Y+$$$h4FtmĴA?D H9/C'0nLnea,Ośd%JHHszCFA3p>rF,8{C4^"Ă=A!}wcq%*a /x) hZ3CDL J'Ƃy0׵O &5B ƔIz=ZY2#H bQ,&[2*$HȔY88!ԡ C$:PQXBB=^ֱXY[Da|@,-6\AT!}7ս)YD0%#=D"dX&tN 'RE"J#FfjDdq &NLZ1A/q'џR4N =Z shH#OkI"Vp#GHJD:#,^2G&/\c4ɒPll/ $uZobH TDNǓ d cz4F$$d;@ 3%d؆|o䑜 FMVe[1pi!#̈́=[bZ. "؅l!("M2w BƐG}f3r'o"7/Q01oXwȕd,Y hM "= W7u t2bhNYkK i(!Lk"(H_MMRO@]"D@ӦԒD&4NCkF"Z?/DJz5#)p>.bJ&D$oICQC&v"KLꁑ#@d=#t1P* z0$ġc*j_88 *[A)Wb,S.*I]50Ddb}$sFDY&$} DOйJ12kǏ*Jyi!-cD%/A,Z5#F '32_S`$D@E1hHYfy2+,jܓ$,WbD@,4-iW")зbMbv,1"L!Ph&"P?Fdz':D>Et0t@A!B4z4KbF5$K!Gz$b?N>IGoN5 ZZb^H t:o&À!SI'E&@zIB,ukӲMZb^z3ПפjabZsgMs&3I*Hj$dN=dݽ#G$EGEHHAN!ƇʌIҕ &hԍפ!E cVH=Ih{*D-GP4M'O=6"%= 4kK)Ί *f\иi DAF!z#Ҿz/8-h&&NJsܘ\rf Hb x,qT]!@Q#zG19HR ! cǡ3lT4@A B!k:O>41DcS z7& EARo\ō2.'a!upAhFzƈ#V4% cȈHѢ 4h56ȯCDhYZpanl1EiHH_т =6$ Eؓ WBա"3BbCJA9mD[$^ШhBrjX=xH0܍OO"F2hn#3Ix" B/(J3&G0sNARmiɁ}LYg16KDm RwJQ.U"&! ,+dAHXC BLjDǢI'V$!zz2F ?=cJS>ED XΆRJ잌IA::ǥ<H#=AjS6ZFэ#! Dz_#gI KV@^"$@@@tzz=Ȥ (I=^82h"iD 3m[08OAM+OܶĹl65y AFPɘr5{TN}C-IIi٪zB31\.), D4LZ>eXވQjKb$}"bd4# IB"IN½)$^lDH^uz?Di%-e=Ob~f_^~ьd h"=1G1D Dja*"Dk 9Ջ. !D i 2F%5z1 hH QƄ)P< t%)+FK"%RCb0y YA4ehэkG@bK*NDM jm\?#Ѹ-+tNj_Tw} IhZR #KHdV$.^FAG:#$Z 1X"gB fգ9"r2HNbP $u!c4z41C`ǥhL/Z?E DֶP/ZVP}F%h,et!}iކ-[% tJXތr\T*DTdco$ZKI3c$p8C$KH!}FbR>!mv$A'E}S F1 vO[gA jm h BPC"Lwϡ9ZVp6; cތ-#VD06<&b%C 3&hB3hSϭؐKƉ~0IPD} }wOI$OE2=/}6HQzя j d(Cy Dv{F{2)$KDBԛlu,#ᰔ!T+T8i yR$ $[&Ez1#CQ"Ǣ}lW /cF#IΏG'I(XHҝI$I#7ZLI[OdbQcA,s) CcbDH#P^Hld;݌If % ؽLέjzmZmQn< hcc eq%/N?46LpC\$cLXƈmDzQ adFBF\ 6$,J$1"+c 1:%WD,S#βAĊ]ADhǕ`"*ĝN40/ЉI#f'3 (mDޕ-Y_AOl~!HНgWoAh#)$1W%k`p~OEl[=.$/KB(1 ]H4G @$$zl%6`fǫaPMW>1ގ^G>b$loA iBbE+CF$BCI&I$pUcc%C"4[Mp$MZu^Rfcf_$OQ&H,wJ3Q0L7+\h`xtqdgo ">!.$1SI&}%3-p BF+#hǣ?Uzަ| D:mBwe/Ft~AQ67[ 0=A%яLmB4T$(N2I'WI H &ՏF!ǥ4<4Tkq4HI'CRn HdV"\uK#H .5!Fަdz?C='z1\ߪdIՔdǽ GdDZR:@MH'h! /- H)N>FrV-8K$/C^FEGX&h.=P](J$Fa d$\ɉOY7##r qQ}l!k$:'Dz!Om%_c"SDoAJ~ WI; lkѰؘBޖC,BS$HWcѽp}pd^B0PHhKE^C$7CseF% bb &} dd@VFH%%R n$bی &H?]4|<4"E1$ l`5Bl,-|r]%(RZb`"4c W"=ȏpXd L )(baB*@c+-`2D,Dhb؉!hCDA C}DR2nN"pd#fG Om) (ζ'geM&d8\)D_q3"b^d x%^Fdh脙aK-arnDE&P"OIё#Bؙ) S)X+B^k?AFLz̏IFp#|CȿIc"/SatvKaI&gu%>Ba4VX5^ƅ%,*&&'Be "Gҏ[2drd3 p tK"+bm+Lw(A0! $!LRyT%Z1Dhv&P b9)/CЂc=EX%C@I$*!9o$h!h+N~=[@زEI$讠^eBB2w {(A(2Z`Ddc ǁ7BY[~kMiXX':Hޅ #Fd_M#I6m&ɑz+р:I:@=%m-0$" $0q#Q XGhBɰ߱CQ(NcwhaAnPp!}Y RІcOѱ!1($dt$-dwA0J[''+fO:6Hސ5db (]dMH HjYQ1ѷoGL=45)lt40jQ"S&GNG s4E&au) ۔1ьڷ kCNxnVb .Qu2 m y @'Bv0Q'>Փ~_Mb $D%N=+VP7'tOJcsJZ΁AT"Ab$a`LLNCކk:RWВb=&qBjD&hŠ&B 2!u4閶Q 66HcB$#-|㛉JUEYhlZn@^ޟxbƒ6*0I:ϥ+@ dcɶ]h!IJmPX:' 5܌L_}-= XM̋1h}* P!rdX$Ȑ6G BF4U8pD HhZn)%NƌB}DA#M zNf&"+FCRY7HqFdHн/HI:8wя4v t5ĉ`9͘R Є2 DHYHI[7a745 +F f ɤ*D(֭qЮp~(]CyJ(!ȂģnF6U1BoEc M^t41Kz=6F̂D\BṊhcPծ"ȈBbzάr,0Ѕ$Bta1FQ1iC  &"VtCՍh Hb3z&#U j6|P8ěO} LˣVĵb<%Qc։KǢ豌: Z2'І!k}S}#HƇ%lGQQ"BdrBFwdM<[2d>$uNU.j- C %$$ lR&!  P\{QCv0"&/Ma lw`XDz9`O@cr"> i-t-V!"4(,EPdR%CdC/n,te7B &-Hh+?3abjᅑmЙ Z"%EwemkL|{Y!R4YxDt-@A-IzXړ$7;l4cjБQlINH{ bJZܢT#DlGFo5 !jDl@UBbdHm-+V9 hjz2Q"dA_وO[ьhdTeG4LQH$~Mhqm-ЂAN[ ,CLe 괟SmEpE<Hю@ֈ__} DqэK@u 4&}5զ$*iCsaջv' 1:r=HV"*9dWbʸPP8FpP'CGC5T Xw8$rHyJ=&64dJ}O%leh VHHPYǚTz'FϪaңv3/?2^_W4/NnhGits<y{kAON_ʱﲸuZ~0]v3 Q4J[i`A{a[: 08\1E|;0sz~y8O6:DMkĔHpn+3 C7RډG<y&>,?R;#*f6(2;6Z8_1eDjCqq6E'۟?b_UCb MK똧9_Z{48,Fk.s ;H.s+"Ib|>n nQ)QD.gވ':+7Nv#`azl~ь8 %FB,Lp=Ğ#~L&-rmD_LS4{]7bY{CSsu4crNR /Mzo6)T߸J݉(lVBbp=Z $SI=qF7֍x,ٛe9[Q4Y(%t">)5@@e~ovޙ{R⯷>L@)?{ l7k-텲.׽Ύ&YÊD7j\<䝆"6ig.7MGx@nTнWg}:9[k׵Pީ NMkA 8$IR Oud*&|91q-L .T|d@Lj}e:4[T'ku`޻Swt;^w5S%+0֑zΠn9>S qA@QNyr7M+t۔AŅ/& [`Xog/Ah[{,ItpВXIۯʭb5{yq8a6Z$, G%Rrq1%+@ o9О҈?)<@^A~rys<q}n qYRkayn>aiKK Zoʹ`iZlWC~ࢋ]¢^OOm =\o#θՎb Q,[Ёgn|;D~v܁[R܆?=7p)C!fZIbM}itK_ t,zP+"\;&ʨ4yؕ+ og}k|\S:Pj%klI`-.f"v' s- M층u61kP֌5cKq]Z>@_4Ծӗ9ys%Ȋ?g3uz/]DN)e_ J@S7ՍkȅvN>_=HKruEcEźO;DžR`?ps73D,:x2TXɀ9~!*)_ޗƛV$m~c/A0]sl-![۟pBlkL p&YH7TRuľK f:Y׋;Gj:dզY'38qa3ҹ6T` naTqDdF,qDJgI!,L׋❖Uiju :\O;"T]̚1Ef6`$ZKȺ40޿yZ;v IB;ҪUo;)VE6T@W'ݩuU< [N^fa]U}v2mZBy<&uT}՟Z~Ԟ/iudt?Cnav0%'CV6@Wv--PkATQ8swPQ\*k96Mr=׏{Ì]޸}I'yF"U4ly0V y{Qg-8Yck 9Sʼn[,S~ΫyY4$"u_ zc `5 ]i5U]]E' U!y{sN!Y.3kfQTͶsBa˔ϱe}WWqm]&gEX~`3&ZZҒOYlNU}L u:8 A_vTox Yex0GLʝUaZuw}G ]y6oОJ~?^^8;ÒPi%z@~*7lέ s&~-Hu{2r􄳺>8"W?BfV3`fьHUxجQYx>#MlumR.R|RJS }e_u_\*_lm7+,u{^!zGqq|N)]x5Hpe-!NC"~h~䓄`2=pDUfLj BKA 1|x1et׳h}J\U `Ԁ^q뜃t4ߎ0_};{RGQi$&-ۖېiohSl33cR6\]n_ Dy7jJQ{ز\ˎ7)`Jqq.j2am'&l iRd1}7 QJrltO疋<ܶ$/t|_Fm͢\L4 08Jߜ\0/'y]=E! c';BH꫾|_8I]55l`t7xEܓus< RQ?WՏf2NV⢋sy}P$\E鸽]jvCef QA=cHYq.5XiJҫ8Hm:cO!ׯm_?m |Z1 UyyVeT94@<ߜSUPaŗqw]@M^91FAs&QwF$'eZm>im[YƑ:Y&xEڏRO Ie@ݽ}fxaQ}lwwƙO:G ?̽}lNADIYrM^c뙤mTAyUxLvPUN&ykmyZބ,1FDLMO{Pf;:{l h(-P!_Rh4[{'d|_G>ǞK <Dn1 1YD7"i9R2?s9׍RUE&[AG^gZN(Ѳef*6ʃToy԰i=N0Ns1 54A}8ư 2GM(i6˿YpݳQXF{(N҇,Y$4|ggdaҝMIlx+{lw*7>qUOFJ0E.Ȑ0BL "dc w/ ,;%LN4 t?mrͅTg.Ճe~Lsx0rl%3;X"I <,1Ꟛ=ӣ 22g`:.ӣedt/&d ]b~u׻120z~`1NvLIU kLL|5ͤ4%3mc*qd>=5Ă=pqEJQa'{]2q;c}MEE[_֓VcziYQytj(齤Y^|m؋Zm"?)U87mOUw\=F\<]NVqF}=Gjl%;TZf#=0semj*;OSdc5iaO;]'m~aqu5`iokh(C#ǖ4g}Qm7RvWaՆl!ޟG/l0"lUyYl 9~_۽qnb{6Q}ihZ9L I y$9gT2+|5F}$tڐyq3-FV\ta>6iD9Q PXag]0g8OoX ݅q?ˑ9knG iě4p!q*_}<m`}ϻz)㿹yK0N 4,73nyy  ()hˬ/9p;{yzi$AWm}UwU%_rXk<@a|gC2YZ<Կ/{4rqlцp$Ezvm?%xQ0h3N "ǠY,U LtŚ0:I2Y4#-1>I@ǢwePO IQ]:.(WYk3$آ>8}z\?P0bԳeaAg73ᨈSˆ8,1B0ZnO 5\}WO;q u׌v=?%-`(vUW~?woݕ]gvQcOUw1"8{-`NmQ=wq'yNô=0 k#z-IT#40Ћ$3BWDC4>yθ׎Ktš~bsW߲4]yk6pWITAQBZ.F9wUgM[M.6}lSƛL+0E wum- Lu6['Nڔ +^ynF8tOC}܁qfW\06% LqU>qU_f[Ǜ<;_f쪫\M5|C0Ӳ7< X]K ߛw:)Â官 Qw3.4z8XW$=Ӷǎ];sZA o}[X>}ky孻}yk2o+vjj1Ͻ?qmS<>7A,2Q6, 9;-.{ci.?B JJyښ_l3AUtcz%JV .=8G-s.uuK@N)bKYx5`5ߦRk8CW;s ¹ JUhQMr/*`,bu*j%eDr.g9SH\Š79Y(PSUmF!7\˶SӨ6yb-}ߴmK>?JaAtO._>? (f"\~Z wޏYfPIF6xd~Aͅ`8=J]as!TEZbن`脱^m=.},崳ìK$C}ߛ.X"0atM;\0?($tj ٤˘) (o>3a^x;G5aF,"-V( _E6Uŗ5RU{.Y;4v&oΛ VPKOxe͜ϰ|0wy7sV@b2-u ޱѷ@rR>8 qRt=?!<˻]PNƾpu >ʞyMCN_JmS2}eN$G 7ȅo`tG8f16N &?)xn|u{LPy2L8䶼58µ_罷Rd @{NiLt[aX8i)aE`TWGVYS_ܓd((҈0./^>社i%B޿ }ӛN=TqW=]Z6$|q%W;yajZs.fc(g[!x0FC(ض>8݅uM˕~ܿ⧐ucþ,Œ0 $Y}xGpj,DhGmRs(=HxiMw-գn&3=aE7wyo`4^ꇸ9OH1jN0K; yUgX02\2UQG 0MY!1Rc;X4#%T0QQ6طNL.r^0O[3kzp;AyvKU.o 2뻈O+rnK8D~^Eā.'?4Lm],pIU2_igwN﹂.C]nN- vbMPsî7$= ^k_ցeCPM3zf,׫nxʶDFC QÞ?l1DTTKO 5)peğUكHg K&ijGp&wR<_St!5{to1|G6KQJQ5:3-qj3xl,?_>&K6۹t 4AOp)Y&E Y&*  m;I-uIoǻCVK!p" 3WZ -aC|S> 78_{۟ ܨc6| an3U䞹/rdRG=^8 %ÊI3^C+}m4M Mw1Z,/|JHz&r 7'2/ӗ 9 fuIGָ!<o:}twQ!$|\1TB6{01 4DI^ d ) "E p2Vix$t~}?aS|@ *Fsxxܼ]9 m7n4nj?fQv0s|jdிa9?mks=qӪL#g-(:<RMĮWuU_by\-#NyuA/Oߨ*@ 꼋P~2f0i?Aǂ܁ Ǚe_iw}5gIV4OIsÅ. z$9sL]-ިhǟy6Q8qG -[ {b4M:g7/U>rх{et(FGIoަʤKd]$ ƞͲxkRl\tGSmN8 u~ gY m%~:hruT B\d1V>Uc=uo ]r#Na4Zd<݆e]~ӕo9M|}7Po{5,0M0[g5Ӗj:Q*|QV￁l1QWZqvӵSB*D7!۝9?2*Iؔr/e\!KɌFqVcTcp9yý=e=0K}\;kNt Cw/efZ+(NdU}gfmt֡uGKMuOA}RڐdEb xl0gĜ'bYkeDX- kZ@nd b/sQd_7ُZ߮ѪEV|^v`*44nƬo(0]ݍ0* I9%XAslKOI^8$ P] e5[TJ|mk.vvsׯ]y ZZ7S8Sin%~AiN534I#āo̽buNKCT>t1,8 ͮΖ@| NrtuH{k/W1L%V[i`/:`|]To2Tm</HWj~APzsCҐ|y4muX`l0 4ܵ>-uy4 8,zٴvxߏUtW]5&sy 3JJ lxbK<Q8\(MAiw6(Yk/͝`ura5)>ox-vd]!>8I衆y]qg Z =ny鬷ڿ7RB5o$ _DyTF{l)鵱M>Y BuBPgMduTeNѤGE qdjZ=%L$pPب%(v 24i$Eu3 7 >em.v_VׯLێyqM :5uw1UE`ܓ͈Si[N~UNV7 !Z]t1uI7Ja]g-2YqqV,}yۋ\FhF6| 'R\ :^9zM%ۿgm`E|QTJ1]oϷG"낔c%S]?Y|vJuǐB I uT[pKJk/רW iExu9\*%oνΑ&R fTwfQpiΉ]#H3XkרlUT돠w0,w}vD7\u\w(~rWyR }6CD%G.Q-Ŕh p_bGdzO{l̚[q_x)$* %~`1gTjHj\/t7G%Xq ]# _ÜhSe/abw~\,? X{>`9!5T׿De>O8}%L?wMM ǃyQAt*ioestBYPA=#rDUE=[AyDqIiַ7IvzVdIQz#Gc U=TufՅ(ȥ×Q;n<7>{uBe>8XJ~QnI'\V2+ume[a-DAd YQ~:qL!m~ Z{0\.wk[$Q qIn̨Κ( ?2cDMW>6Nvzq7;8$7wudR+n?Q/&} 1ȐLߤpþG3]tt)\5YpBd]DiYOqQP{6m> WW|/֌2NӅ,lZ.ׇiG{dxGXKh' J=E!=ys?YtZvSP%[tYtya yFFTq1&65M*-VWʂUYKS/ P9aޝWXcMy= yS$mVMD 6vZ2~-x?"uv k>r TioE-3C}g A$yq1_,0Q:X!O ő3z+/R#i.tC@#YS;y^ڶG~0| ]`Q+f3%Zhd*qV]{Ƶ6%-8ac9^Z_!ҐrY vtk1b ad6:כDݒzx?Q-1J@hyȪZ4L'}V@&g,qz׼=pZmc\N[ 1W?{I°ۇLj9ZqqxRa_)?-@W-1jR1a~$"eo TB"'v$1#_+yߞX ϒk6=&MU܋ \P=Dr=| $s} YBDôz\D~Kf< f]w : )$iaAIz|=&vʾI됉5l)L>_?]3kEaG=9ƽUExuz]y-QsstlBú/D.f"JQ-FA3maY)"ß|5丸 zԑ/JoBqSm wQQ('315i9_;(lf]p s-ӭǎg.wpYX59E?,ȅA8Zݥ:CvsaKlS8 ᇹM_{ȱS#hvC=RـxiEIpVyˁ> Щ*O:PMde__}z3QgT1&-̙IvZ)5ۏ }r"ȡ[dO\vv(K"3[ J̚t$۴Б 'OCDx.ɂTwXyRRYgQS^iLo9Nud?1Y{ z]S" m_s7!8)Hofau4ٟ qH4;lc?k}\L"n@c@|C)RU' 8<8qGib|t_X7d 2h+]$mN񠜠ޫ+OSWIھ៶g&%m!E"ȬS.U$ubL׬KEZ{VB v n,S]D) I1>_g ZU]euMwAa=fK{HAPn?=<)uB~fb>NعBdVv.5߿ˎwwC=#G7Ԅ HM<Qjh^IygNS7&_EvW/|M׮^p0BQt9oaK+`Dۛ4:8LN/!7\4ϼ4Kړ f-6[T ÌrwyG}ZVB ܝCaV~Q@K ۷P}dm+xU $ E`7'PS? 6g=F|l+_ԭduβ e Ƨ~ܵPMIzX?zt5 2=|]%,u MWE{(f~[կ_~ufewwp~!_ ?a49a㕩Ҹ?cz[/4ư]]~ >cq) VxpJ4_Hvq%x)DO6ᣫ_K."կ}P^!U2/EOhߏoDMu9aHXx[ b_!g% u !P] NK_^? ёLU}V20JAvq?i+R\cQ<`/hv1Q֛哳vQ11k?>*]#7_p!LM>9 0$,} v*6R[[*dDt>im'IMvIle2^ anD/Z0ztXO}L>{#|ۇeoljz=gqvbC`jr 'NGw{[Nkd@|$Ca;Ee}S}^EbGn9}VZlD[UY kG.?iV7|ˮ(ˎ~O2iSv=z!b٘ܿ?t̝Jϐ"}>TÌ9ޭ9xVr5ǧH }R2D~:[M+?=g~;j/\EgpMc_uߌ:?;翽..;x4i37%h{^F '6mm2AOK3_τFQ3$q7W} \ڈc8 :*Rͭ]sA`Tg&GT4r޵vۭ| '|*>8, gt}#=ҳS-YH`_6Yt9^:M+VAĘjӝNAĈ3nuqٗ)6.hcb1z+0a&ov &ncy SB3}|GTH댱|ꆦ狀°m:rl[)eyEwۭj'{wZl]_˟8un81kmR^ =82&FLqI͠yZ{V2C2f 5m[&ۡlvix)'";3!DuY` rMP]u }p@]fv~F`gg|ʨoD߽~G8l-9~"QKK>|OtD?x!v@C C U\TQQ}mjik!7m gc^@3Zl;VZ*V6kN]ebO?~ԐZ涩{KeFs2Ru,{SWpY`m&&; Ӈrq7QU}X`F_B(PQ)~VM,C5/v-\{S  V]&oݷ착^.# u}iO@.B7:/uLo< D)[vөXvcۥ~o3CE%2mv]uAz$:`*g$CGjuHu@L]宒؉Ĝ҆s=O҆㿿5y=; xTso\=y7<6Ԓ߻t7m4UؕtFwOq'_MWqZPAd1K8z&/ͷXAזr3mDA}[FMX>r{|IS993Lf%j+֦͵\m<}#3< ])6U[ȦSeyc7+#"2 o3=y$MmiA}q{]U]ESb~o|-:k,9*p+sTᅱ.-7>҆|!̜N/ߝ3{Qp$-^axwEtm;kt8,]d~YUE~p9Gg~=>ayΙ{~;̢]%{??~W^E󪡛d˕QV70 KZUC`(ekdMW<'92:Qw~K;_/Iӎl:5C0Uyw>˿p^Ͱo=Tb|/OUQQ_.l4_>]QFB#$WDjL{bOjcܝl3AVUSztWy_$]1 7ϟ>u!%#ns} "N}߱SE'ҙW]zYVQ4jCO_mY9=bsE:(=_;7-dCm|렮-Vdq?_=Fpuj<eMmSgQg z 2oeڬl2UImeq]5xJ ϰ8nS^Z=sVakztkh78k,o'yRW̷z;ݳriYQ[]eC]簉hѷow;uZOt%]V^g{A+NTjmuI:h(?O v0~V9.şM3=SJOų,x%Hmvo>mCWxaϩ*}BdEKFi/ A_`r֍ɦ©]p40m5, {a߭=3ys:-{>6G6>1eT\QI)UU85]9Js"Quk݆ic)(` C}#8}_ ]? 0 7~8} 8ߏ}A_8aЃ( /ca'"/A8\8r~(߄8|`*1 !Aa0Qq@P?s؛؎ƄX.c.ZGv\EPTؼBƯ%:Nk]=!j'_q=V"5+ў_=AՎb{a0,4%&{xaSwa_5wֆ=bCR/=E<c!$XKCUr6%{R'*z :'%A:2m`&'Y٤3>4f^6$ `EH!8%X˥O^͇Љt.K-To bɇZ `lBt$f)h{(ڰbuR:!"tA.ua. \tR.thv裤*J91ً ѣi¥H: K3J!24$V%m/X!j"mGt{bt;%ؓ :2z" @CHP~B<ӣӏۢbbPl1*[]Т(ЋГjSs.C 3d!0ąOBBebSd*o QY$e{q=mV}RQ-AG{Oy?(k6Stʭ{a؏iWC4/"rxz=#܏rtI[Q= D4A+X]O/IoDSp_T}0Cd Qcgm~//|~ni!Կ؏ W/]#A,G KG`J.ΝkKAR_|QB?b.L]] DШDž.͌n6ɡB `tQI$ H DI$IkXbI$I-bI$,dH$DDI$LI$B*"d?!EOdA6D &QͲ'=7O}al^GC ^GצFfCW%{m4cw ؗCOؕyeU}OO6y؟)h@bGhHS/~3J" + CX{E1l^d3eXC},E;_5egB\Lz6l/bxh>bb/٬mêFbQ=vl)J:.jz8(/C: W'A/,yI!/=ptbv^FHT:Y%{4v-EǑ^dfU:Gƨ&IG0dl l\hMUJ;D 0G/_߳Sq13^,lb|k}l; +ǖ41!o |Z(M5W')h]嶗C_zg:#?ϟ#F-4ZY }a1+'J1_.I!mE97BjCb恚 T;@SlLN l:0 p a ‰ΆX4/yű*4 (G!qax1 B/k򿑌^&mBgMR; 5b(z>BƮ)'d -+8xhLcZ=,m!PCYI5V64 ;}4CUb)]`C:n#CBU'h]$HHt)s0ToyLc_;?'6#xӳ$NJ~E؎qKZD3b25hRu!QFR#Iv:ɉjT:#C:5Zt/b~jM5~ b;H:`zj#k= V;]hA [㭆L+}cBZQ>pE4HlMhl]bKƉh_7#DdiK> td<}=;Ls=ǸLb?ї{y=hU1uML{~[wxHy&2 z66PF I%@ $KtBHFL Ej  B H%: [vD4 IA!I$%0dI$$YjIHA@M2@H'+MA?%u R;Bm/ vy| xhؾt%l$P>!v%đ v_r~ScQ=烷x%O6n%t-0M?$GI4U_DLmJXъTBube$FE.)_nQ<*Uo~_mitS~߱ 7Ge}m'?b_y`^F{ič?ܛ 3aǾ~rg'LaM03GOECKJ!/b}`Oe< DON🌞2(Qދ=هyq{O~/p~D$|i 'iuxctPlckI$A$I$ J$Bi2Y$Ą DƬ dI" RI# BjΤI H%54dA%Xj #$) $D RI$I KI$AAAD|jn%ؖu<>y-iؕy? =}x>>/OЕ<`?v1}_F} Phut p%CFI댞$Go%yg}q"^bbv4b%W_ٮ7+=RzWwoMwbd"o  6%1'+?AN<6Z>ֿ?~GB0sT.^1/Cv[:BMO|Ŏ| .(~3)a 9l>7=1=@j x&͢l3C`&'ͨ єi('Bv,A824nĕPybt<\ 5x!ѿ -ytxjy>*Q)S9;-l)EspGjit]f虙bk\z6/h5Z'-bΌZ{M3íV:򼱱!)812fz wjvܽc@R47~\_zs[0x| B"k:Xa"q C(OyxPo[e)Ku{z7)KqX˞;x*!#_hkA.#i4kh&c=8-A*4&.7A2Oc$.ГJ_͐"foX7~ 㸿A>dX!Ԅ'L, }'wb"1h t!B7_.g6;ݡREI5=6N] #siYBu;ȅ-Y? }T]Li% =┥pN4 Nm aiCBK)lwlCk l}b%mu- nH*Խ#Hpi!M[?OlO)/lfe WFLhkؐҽ ^3 4ĝؒmvtk& ?_c7E5vz fQu&BzmFCpV”)KʍƦ˧c{[_d^FA GRi'Mhlj HZ,}< ykXm#Ktƾ%4tHaD1;leM aJ!IF)Bb QA]HB ѦMB]v=T<y#+좊########(((=(LQEQ]x!:?+S/W^D/'bPLDb(lwp1EQ#d5G~|B|ŖZ0'tn] W|Ce 4.ƺhI-)iw''={/dR/{Dlt-/{K/|4ݡ/^{Oi={Oi=Ǽ{i=K|G/Rq*^S%j~ǰbi~1'Q"ڡC`Xf&A?<!ha(PN)P Iںb"n"I?" |_d~Iq81D& J>ſ]!B!B&!B!B!B!B!B!B!B!B!B!B&!B!B"!DAB甂|w0ja71ン- *+좄e"(_e+&((LQE}X(((MQEQEQEQEQe&++(QYEQEQEQEQEQEQEQEQEQEQEQE[(|PNƙCQ5vSZpл7||+ŞY#xkF 4>F]1$숽 D3X٣ؑxo7=gv6%'+hS? 07D2=쏦/_S=LS>cOd_"_G%bv#B)&uiBg#BOd3?JXčORо&'n SM B= 7J6Bn!t$"C$Sǿo<> }Or{,EeXY|[L.mGOzbNvB>؅|w.7͗0YdJS_ư_ xn VQ44Qk' 6o}/\3EykZN//2͵cb;l_Ǚdǘ=,_|a>76/׼γ{'(upL2TF.K͔C͂w x: pغx?k7<|(|2qb4Ly5,٬;' O9+Ga&v.Ʉu\&<./4!K_;'Df^6L1a .44OcDžḺb|n' a⍌p|&5|42#og_/\GFuZ諹tL"2Oqux"_VgXy# 0N+Y\ ^< 򉞄LN7>J.ذdžBpYY/Vo|kκaae{6_2]$kr0>:>t_-cb.wyx]p|~=fpe.5t,"qƗYn| cC 缢a=|O) f- 6lb'}_Go(38ϟdacExdrxsCk+=4 *2epEMcXذOPXP|R/b5!$>+ ]lyYr,QetCB1bb+Sx|^>/dLlB!k:f:cƊQwxkC|bšDt f hG 3Ɔ1g&OY|()F/&і2`!,^T|oL/)bgM\xQ'y~gصLCYy}q{bq.hBn VOcG'q*=t4S6rt]lxkk< :!PذϜS.7<&&Wl”ѢYWЊ1xG{QEe<>y XW&tsOă!sŅ y&iNZ.V.5gxC<. kN/ &n" m SbO|.o PX%-BwQߜv-3<1a\5. u'9<;^.[^c4_!8yZ)tyL@Ȱxǡ:~ĝЗ?_'XXƻ "0Ca0o} 8xhY{'Cº/)?LN+y²,Aeƕʆ} оEEo,XеDM6"a/(θv$BpC =S/%#M}UuuuBlsоIHCM=?be~e◼>: +4.(xyYrf#fMY;e)JR +xEʅ[Q $=U aIT_Z,WЗ*. _3B0C_YE*,E*)QQQSEDGJپ4x ^[N.(Z'x|.6k$P_C@əJc#+bB28FRp*akbcW aƍ(N|Ępa[.vhN$.tho?8dpB" 菢!%$=O"A=}DA=DDE5=G+zQ=CQ="Y=bOzI=GzQ=GzOQ='}g}gzOA=E`zOI|וc|~y=Ǹ}Ǹ#쏳{̟>Ίq -EgcLѯo;2ƇN $)QDE9R)qJR)JRX)JTFjV4^DL_ x6PBPZRb \L86JBp} -^>8(EIо1=L;—}%xvt;)qfȿ#s)aJR6CB=ݔ>q?c^ I#<64_g81#<10l&΄͝v;P^cs^ۡī+%~F[_bwɯ%e~ R I&VV Λe! ReY)K$:Io22gg!\kHO퉖%΅=,7,S'ߒBN=d,ILHz6Hod Ӵ8be,lP;:KB5 ENȩFc+o?#hJ>Z}==`mxкv5}$2(1;p L l'R17OC1cy?_elR:%}НС7lv+ T tLftAgCf 1hvv=(h 4VplnH1b 2 Yy:ص HB)= Il]FX!H!l( ذBtdZ&ى!LM(OZa1.\"QGx5na|#j!$> ;&!ِ!%D $H4B<"RffbR2͓wVFrqf b,, + Щv%Z&2bWGL$B!15HA$t2%DB hCDB D3BetWlt$B!B& =(&;B 6tAD'qX-S  vRa L>O,x!8 !2zIB&!#:;!0BD!BR)!B!2:zn {IvOb! BaB>!~@N6C}COeBwZX^<^>GQODDRqJM!|s 1Befzk+ؘGS0X߃U%ƱGذ[^ %”oh,LNS a}{\6<..&A$D%~ Y|1!sHc]KOdN>o'BN hX\!8L\.72;n_8jm[}h}/gf(7Iбs2ar|_#L"WB 'IN+'Gbzvk'LDl'8<}wlw[\| }'keXD'> +xoDNȰ q<" ;j'z:ܯq/62!frk,5T,/0 _H,jMWteYɗ+呲&!2ЛEX\XBca I/&%N/\uVxN{NA!* 򸼾ĝ4D[d׃$v.E"LO\[)p͚dBhg^ą:NurbҌ\bi4Dw\gT> Qys Y׋OuOC>YEڤ,N`i @|^p41zĈBm4CJe,TP 7w!;o}!S,1t.'<467\sKbQ7!{3xDW~J\wͶ,fWؔ0EXbWKsb}bSFE^/xn|1(A1p[?CDxB?Fk IDS]|w_)[KGAF]t$Xu雟JDgx+B!><1ᡓ_>gBqybhb =b~D(S,>+A~Kh|_5Op_\[_6K+4ba®?~}xK.. 3PL^~??'5pϊ_B㼼t% 4]}#jR\ZL/O־+d'&Ee/p9:qҊ~>UeAalbu-Ǐ_8L?Kƍ;+R}v&J^k KD d˕W$S͠w\\zf.ic|^`s87f"_x NdzdN }!2UtO1KϿ">R D脾 <\:?Eʗn GPy%(@eepSH-pb7~|Sc4 PA'؝po:ae*\Da~F.V@ˈ% jvikɄ/jxĵ3]>LnؔWȗȒFRNmJtV! A -$ DT\Д/6./:F!΄(%1zjĽM yhZ 5> _+О ͈K pJ+'_%ɐ**Ŕ7=mشTlM7Q:^~M<4o|P>O zc xBϟȇ<5>Yc/?c=riǬn+? ±O}3g-(;tLL/NT1DL.}[4UkxUlOd$c^},臗=NzA=ˈNKJA< rp(j\ ]=%Ăz}|^a酌yM2#lmM Qt1a Nx Q/ja>:$1拜-EoqmBƌx}G-tLml#ĜQZBB~~&?%%bc-j^Z_8b! fqMTiV+?NOX4V.~w87pD C DhKMa9">/ R? ց ??,"a{&袭1'\"6$>(t]#L]M4cXzÿPLev;?"}amzel}=߁LKl·(T×88j~?85_4hbNO4 P?(~w-((h[6~wFpBqWFm5(Ni;7~ٳAh$!l0zCX\b8ALBN (*lw7+eT\"c:NYBhj18'BB^$‡sBpBXz~ЎL>SnͺǎT?WsN}>$Hš@%Ǩy^ZZ# ­P7$A2 4>gTjx}W1,,,=\ ȉ*ȘhUbd0LlCQ68 &hjK҅,=?CApz(k:"xd! cT?= WAikk Z|x(kA)\18flA#|T 8a)p$q pSLLmC 34 M3gУF5F_785;aDqF +\>\WpG. T`*B >m%hIǡűS)z)FqvsjmX\.E!/)f jXhMEi3>X^Grl8hc& C^MxZx}1=4k sw7|(hiGe;5 }4ةpN_=Ta?ǸАJ@uf?iA'ƆF%\"HCn zR4K#I. MJ6rr4Mx6ɤvѬ-gmЕBy cbvc?qGhXŇ+\ƬD(6{[xyBZ1#]L66(4qflJ> 56쿴sbgP>y dix"$k><wg!*cl&Ʊ5r4!{E"%Q~rrK-^ihPgi 'I5Kl~v5S*;16-odACy~t{BQ57|Z"~qxG3,@yw=XDM'{c|#(f !T5p_AlFǃ*7# aa G$נ|Ug' yѐ|gDzyD:ӻxSYTBʗ,-Mr񏐸yB6'//? ¡q:y>?==#?f4BW~s1?߃:/#cNĜY[VlQ7ܯ?Oǒ[?Ap$QF'_K߸=￱￱￱}>O]; ^DTV \<&V#S,NYnn3CwIɍAB$ "'2%)v-5Zl)Z(D/DMǴ{HQRǁXŤ7vG|?Ba;7K Q Qʼn pyNxO|b66:=p|d}!8HsyѷBspSW ,LM\fÌ/_b0&VDy}[#geai ŋRAelzB;, Kry6Ϳ8'N–Y9 &LQ0͓ҟ%F+rA!Q<44[)Mn:Uq#4iIh8eG-e}Pnb\ s_8ZFAo6XdlNY[Gp&khkᚎzʺ!x~Z!K(cFmqg7\5(ݏo:߳4yЉp0?Z _0b9KsÃ\6&??5'£ Rf 9KXBLe$?|%+'dd9AeD!ڈrZ|oǎk?e#DȦ) b"xIL)cX45cdZQlD-G:lzFߑ8ɻ5bAy&},nͣӊIy9L#=9%e^1o??~pj hXq aVshvcEho+p?N u#cq cRIQ\,a1 7qp^7v&ZɾBkUfeslc_-zwlbjkد8&?*͌_я {ųhVxJ0jbG7 Ūn͟8*1q|%- 1W4w4h7? -Ӄ8I8qH4>Q>N $5oңHk)\1!hE]M5YFCFD#]zDm x;1}̵Išld'GD;a&45CAXB h6!Fǰl>CXOFlE%ϓ# .gWIngZ74~v AF|[AqNX#pr@\Sq??d7+ KեAJ\N"z.D8!zc4kBRRN& !I L.5PW0Q)iahOtf[Q7%h`'{hLc#GD",/!QkcЭn!Mp$#T"?9qSzPiw8' K8' S&" zmK!w:5`{{$2[w#{'4vv==hH8"#h==Gnȕ:-Qq'p?'k/ oj cl ϶8I }˰A(1 _/!Q4cSN,Q1!^(zLc>q!1}FljqO5 ?Bk/)5L 5ѠJ>m4 Sq7!3_6-Б %b կ0cT2SK'xaZD/R剷Cv(F$$5 >Z7ͳk)/B[bWlѬ1i5FgssoKD34Ѩ5؄8l4!#z0.XntDs5J4mB3rAEM1 ni1?,lS}kg N*k7ZahBFQz蘝-'P1%OC6~;٧ű>?(\3y_LƑ cuѨ:DQc>?J|1r'o798|>Q Ctpo2a ]e#X"&YDƯ(}L!2zX~ET7qr67 B G1Hu> )`؅'Bfhg1C6~3!9QhbNv!4a8i&j'"Iթx412㕃Png2$Ayo41 hXbi+n11F 8H2x3y>MǛ[>"~{"}$=I/{Bv]N qQ1!_#m4lxq_) ]cB~CQcOAI؆˃w/4bۚƅ܉ }9wEZ!(c~Vb)EN<{/_B_1~/OEc3؉&]/ Tk(!zpbסU E ͔LX߹X)'E(mp*pYE౻7!EdogqAXQcgL(/NP-&eYES",c QE:+_|O'<{"#/_( Dx~F$="bJ)G Wh4ӌQS> |hO5ع);f!B!ЛF{V!BR 49"`!v7Ƙ QdcP;@\*R ?shsq7_ oqSbܮnɢJS2r;)]gA]N?=fGlb^dgx#(6d)CT;)pQ be BeoCL4~{d{{ D"D''Ȝ81L`^`cV;Lľ'>&{d#=BþBlR;}%(ѨB}_cؿo؟aH,6%Đip~OauMŭ&@i(:4t/ 6L5fq'~u?*{T~Um GN=[fӬg J2WZ ^L.1BbE (,tlYX)bn͚@3xL`MEV ,n6.袆Ţw ((lQEP8&EYe ",hleQeeYEQEQEQEgAP#/BI螰{^Ϲ )?WHhc1r䲻=Bzx# JaDWb|x>E^"|Oȕv>ߟR@[D&/`=Hg?AF'?n`& |H}G n`pIТ=||OG;Ҷ r|߸ >9īƾ&號L-9C$hm{zGsl^Q/@h4q j9ҍZ䂡TO61bҽߝ[= ~{K?U㤔f=/#Ip:(HHrNlcq q= 5Е]ƽRrIq|w+6Q121-/r z9s<4l~G{?B DX^;!(=/dQd{ca|`={={'_{#G=0/ľ'/ atql{c=|P qG{cǴl{b5lP8$ǶG֧b={#cOCPm^&`^!m؊M/]`$z9iC8XrƓ<\N.G aRCCV,?EX)JR)JR)JR)JR)JR)KR)J\\R)sJ\R)JR)JR)JR)JR)JR)JR)JR/7Ҭ}u^|!8rYLȪM VV.E](E "DE/^B" "/DD    A          " DAG#zpj<҉88)q9OȄqr.`+zfE'J 2'I7;-6"J'L+tҗo+ׁpdgu"h)2t<^6Nu?~p}нiQ&$ɛQHO'$?B /]eth/C'x$D>H#䄽ؼOt|>P٧d'>O{>ѦGG]/>?˓t_G\+76"//Bs'=Aբb(eQ) <>E'Щ3WJy' քk9cFS|$ /7%Ӭ^w&&-]:/򞸎^(.=4!QO/bL\l,cQr>7Ұĺ;_J0BMt.:pN-P ?_}0dƱtCO0z ,EtيlO(Lx@,JwYߡBszKCƱ]+zK; >B! R:B-\vN飞;'7DX߫3 t뙂'B䄨xE1$"c 5ֆKN) a _WwLxoM<'L 1b OBt>RHh5"t\,N/[5{^>EuAyI0%r!` \o3::qɲ}*!>bCYZBzQв:ߥ Xb cF(/}ނ}kfz3/NI "[:vl=h~6.2 1z ԅ{A !}Ⱦrma=$JW{B/Uf^^kX1 }SFOA&) TоbL|-Cf! aakF.F2}a嬷$5-ea K!E# Ж=R(0C4^ zs XYJf7z2\\v'OB ^CNv=,ؙkK;cVV4ocFGxSr>"uh=f`9&d҉>k|aጢaK}8~Ld%P ƉB ECWD9<~bq8c! ;ٮUV :51OKt#bI: (#$)e<># w"n$C'E$E^ A9а>tB55z}O;KB⏪lTB(CtB$!*!_1w+}+-r)!$\QNZQ&Ăď/__:Qxa}X}Z>^t,,.RN]&ĈX*F%"IlJH1yD< ';G QB7)QN'ב2etQ1".tboe1(d}(ѲzCRB.ZCP[F\JF A,2m:6bT(Q_  R !zs=V}Oa>kaUrrDc$ . ǰk'x!XXFGȴ\_Ky}q%:7tM+~2f6 x7Dpf1< y"H-EB;ɳiǙЎz!a L`Se'WVw؅W'NѼ#^JTm}528rXE ӰM˲'eNP[JFlF9啇Ϯb+f_oA^עFϦezae eq^d (7.6i\c"-(7pnT~&:NtBѢ>~cώ}k_D3ae + J&jƏqCh`>M1-v344Rb,uCb8]G9ϢcyoV)zlBhp$e=>KK^X<,#⮅LNߥ3L?ƏͣƎ9x4s#\k5H$2?G¡ I6A<``N{d; 7{GS< ρ< =6N"OAt!c 2|Am!ģԉDQNDju1_E}"aap^f&gD&8!LΨ/N ӘX]k)W;rp͗ #,L4,q0#+ϗr1&lk[yD5=/">ex+^G#X\tN҅螺V1#!Z LDeL%fhE(DS(BƎG&[;to4"!=Bjw&!1غЖ:OE 2t/RuζKaDH|2Cc& e6hL^AIC䂅X&%a ЅbA2e)rJ( bbG_('R{N{Wf{{Ǽ{Ǽ_=yxpxx'{Ǽ/1/!Ǽ{Ǽ$w==='^s'ز*KN'Yx(Wx+^|#>'G| `4 t54%;dAi>Cɇ\/JTGXبnD,5FBRS Gq01:a1B &!2219bvQg{G_7[E(e}H3, 2 b\R,]zn𱊟y)Ecd \<޴cDǔ#R+< D<4^6V+^ (LV4YEL(S/aHf7XNfQE&(L' !*8D $^]EF|1K%5?e6X%N7Cl('ex+EQEx+E,', \R qx\ v/BgcVI$IDև'|!֏66# #+R0䒄F@k8YKnqtH't$o";*&&(R , pXRaDĨXRۜSce.Vaph>J S rQ RDhJ~;H<{b#Y!$H/CаX>͖p}H$\$E?R\1W&:iteIFrc\\R=JR(.LcJ!8!L6< c͏cV\)KȞE^F )\)D˒O%(؅ 1r(MO JRLiBtOA * D&}7 L:A!ak|fbJRA |┥)JRh)Yi`ҔT\(%hADE:ńR)JR(FiABRj/"c| RR Q2)D[ OӁ&R| OȐn Ҕ R]k 4y|̉K(-O/d(R(S(M)JRد%)qJ:/`<┥)JR)JR4)JRLQ>E:(WYD%l)JR()aK˼AJSSs {*i:J&R)K8؞'hdE./ hSlRkJRNe(#^r4&!"w)JR)JRR)KQbD5Y~,cGsJRO6. w.(h&>Re(hs',E\1 CcQQ-Q&XV2≊ txUbC)J\\R)JRB]yhoˏs1r>J^ RҔ()Dl7%)JR()Dt+/Њ"loĨRC8$fx)E5OHI- u.DD7Np7J\hƚc)KD rL?.I>QzӅ9(\SNKN;i=tP7}О4m}i- )K `l\ri=265{DMM[m"1>HcN5ԕ'CG?\S1$ƞsFSS(n Rn0JOAtl87}Ue6p(OЪ< [0Hl)2e = xL 3M'RVlDn'#xCe\.8>l$Z1I+ٹ8hc`#JEX׆5%Tj\hЗR8yb1s] 418>yCO>#'E} e `k sEFؕ<>?Fh1"!%GvH$\ m9ƈ"+ !ؗ_Xd5ҊoS htkbTb&[ɻ| aAe\.Z'#1B6N9(c/JTbDJ|5x"CңkFrLmؽjB ~FH7}Nέ  Cl.9f HxЇsG^D .Ba*1.h8Мbip0Q\>LB1(N! z</B1BPד!PשJn TqPELB D.G.{xpƦlPPo+)Y ^'E=l^cB ʅ0בJ>?]8rC& hna>;pBcr:,/BNlQb p>! ptoa2f'|%*4&Z-LOEa \BqeEDAIMؓɪW I%3 C_L<" 9j(қCnƺP4h|Hh#8V'O 'eWPxQv<\1.԰rDi qCo nx>JA(:*/L1bJļ R;V^֖#b(l`>a2cXHH\ J}tCt\Q \L*" . )R>A2th78D?w;>!7%#b}'\ U8*8'Do+kbL9SD&ݍEpRQ|bJ"8[xXqE\\XogTnpֹXn}DtB^NP_ENR#5h4)I:*Zpk=f87WṲ萄T|} qy| A:OE:B'~s ;9@71еiq8 *>̣6D􈹽T/MVI!")At.>++/zc{ 礆E2S/ք D[谸zWXCd%t#RyDVMFAPaA!G%c\I>WM4sE5oi=tL/U!"uE'L hCU1t,o~B{cTǑćطT}Txi\Qp&)pTvgJcf0~{긝3 H%Ȁs98!= FǦ2Z7Խ6(LNO$B}:4VOa0}Hى8XI_NLk(D= c.4b|p>K!и&=i ,k3Lh~} :(_Zh\.X_EPtDi ="A#ziq,|ƧܸfbB` HJ#Y}(S.X&!,,<:EmΏS#upTn"UHCGPcߡ&6.5І91;?׭ (p|apJjFSE9h^C¢pi*.T&BcL.8YHyDlOeJL})>F=z4lbv8 RMa(5%5)zR RFeo (C;s7VFE M=0RDttkca*ED^0#NCg4cpxuyobylҋ!O/zf& JB5 \1!NCmxY剧1B ̦(-t- D~](UE-cZ!C_Z}(c2A]H]y}H}H{V+h$(Bufܯ W9AS3L}]<@k/7Ŋ P@Z9%fJ80k3mU) C-m^j:rR*_rW ~%T-hQк`4U01`-efyx#@:ĬƮ|p5KA3f"IxF-ܲ;Ry2zE MVb #ʖb#1O=J2\+@u[a.Q) D1$e%˕aGgL;]~캻G:ϼs_ʹpƩ0s=ϖ_چUZYNa17Tlf%0~&F.&"Vƙo peᎾU#>z{+@w]j+ˊDfr2)t†ff[) `bY()ZyUHuXk;+\=)JT1n3,i 1*-|YU85 ._w/c". @Z*rޥUyH Db~]M2nbʠR`JY |J qU>B{- HhEB4p?pUZ !=m RSb\U>(}RµEJT|A| ͵''y}\Ժ粘W$ .@3^"[Uy4{~~V.VR)Utmp/(P9~9̮e}*', k)R~B9m1{ԍ~AMeKե ˎqH m +3*@jr1P2xe?owN.m6~ 6/awvP%QحCW2Y[dkm2T0ԣeMT..c:'NE+V? RҔ𩏻yKh3f噽 A1xt/"{`Tq.#(C9<T_Ҏtl^^,pMN7q^8|)P ex=we+Ȕ YY=7Zu-nC<]BӔj`Eef @* %LAE 8x!Z @p+r,xAZzˊio]GqoQc̪5;6C`.4d XgĴ@`D3ZA~Æ ܷt!r 0rTp|(˓_jUڿ:?X7fxCsW}ʖf3LGer!N~&UE}Dj7Fn?u B*,u*m|IJ tnIm_+ķƑ==PJ~W!3Y9R/#䬴Ry%0֯LEǗ:г~ ?Jf ͂Ika+[\+2g`%:\[W!]p?1U>Q\F\(6W[FPP9 j-!0eY^1_07GX /R%5Ng@A!kt|a 'S|G1AQs(2wj Tǁ,N5a^``Pu uiD~0pq wƸX KIqW3l\(e8u(A<p9F&"]N%E:(@ȗTi(A00 TtJՌk4>bCh.Q| y,tbq±.!X0@2 RVP\wؖlǙLj]lXP`ߥ˖`y.Ga}J]= 6^ Y/1qͥU77R\]K=Ve2|"Z~SSo\@\ )NLCQf}@" Bc{q_RDixܵsnh '&{![2-\@(ɬq()X7/ݻwAe.mJ/`w(5b3t=Rr*~"Xc6R̬y5B~ /;A1a'=*a0Kf%ARs}iOK"k?u6-JF궾~)J'j* jd(oU/_EЕ+;ayd+֗'mi p۸#KDtW4H,+^J/*h}+/)f?Q_AB]S{t֥\P֦#SAn87`W#͉\Z\Y?iKuv<`рߋ ϴ` aH9y CxU.mqE6rE?aWP+?lN[`682kYqe&𛲏/u1Z~44D(ho ơd[i-)IW7$5ng@_pCݥ9ߴށYnvBYLAY)Q[%N{.ϸzE@9.^ΞHX*kp Ns8N~B~?tr{b6^ϬA: 5eQU,ˇ_(oPƵ(_K6>؊).P~rt׎4;%0u͇*EfS^⨯(z%<7qAj+TUY*6pQ0 ߩP~r}J4ܳS}L)+[i2 ydDD5C)r[r*a,f7(6fFXmFYAVr & J TAcQn 00=اZg7(HeImZo:hrJ+CY"fӭ@b~'uJs7W԰oF :o"]W2j$(s}DJgϙOYۈ=?JQ dCgwuL| UD(:!_th(|Ej' @t8O$c-H[ˋHhR*')AViW$i#<1ȣmgC#dqPQa\v37xҶFZ؅Ի p S޴ {@x.8 W4#/e.X̳xpA@/>[4$b-Ȱ?0bBBQHw#&3p+HMY Vau9V\HŘfʷ)PC @-'DSvBTo0V2HC?mViȸ¤0&@= nZ#?*Q||L;v{ZiNVhZg j]Iw*bAq.p~ynsHTY'D4c~-QhR<30\aU屴k8vtkDx$Y $«SA2"lկ̱Ӆr`+W_Y8F$x-*_pV%l{؏L<ũqvU _aUCk IH Q/gP *_RPQF/`@`Pc3`cZS;=!4#d ,TnwXX0 ;qhh)ULK(;|lṷK[ rZjf6~oZ/oC V5.`E_,bQD lphF?2h%\ã 7lƯqEZXp;32i"--?kQϏ1R9t.4+4a5&LXpQ}Q`LӯPljmqQ{@ %i ./> *n oSX%nha"5-QB5p8Fw\Uao+Zap`W-P1jN <>Ҋ%Ibct>*!m,f1o)NGrV2VewX7q ͫT |4*0VVVd3=g>93<^H/.G ed,niQ١-5Վj!j?y1+`,n,&K>Z/rbn혩" VoXݡ^>bt9abvm* |J4fKmpWpA*K73!*>$QHK׷ F0>hrQ&⢤gaf ~aPΝ+{||C+2V y ޢl ,EF@AVH:-HPv]E|N!<. (]LwrN x!&/[o-ziTu/a˙D3),|b*&oǴ[W09+ˡe kjcܰpEQ#ͼVX;*VZ%{5#9B e VLG`J/QYX߼vou^Un f:l^cLiZTH7}%u*{@%yR|"jszHJ/y&X?h23R0XTtUv Jݎks`U$Y ͸զe 4p/>%*a xe=23{8Դ nUh͖fq*-h҂p eY~ZKˑ12Zx|’VYYߴW"Bۚ.4]0S Kc soA3UkUfٸ2]&5Kj1 ; ,5XFwFYD\(64X"4FV[_nX7?ym*)N D"Q| >|>ҙ]-_Qh?eў9Bc-}X[%)qPkbFgf7I1'=B:XkkS2 B~.laȕƞ9:ۍ3h3e:Zl%]C(rڹ^di?P8&&%t aC;FEgBxmq 5ʦ| GrۚU @ѭFR5+\[W}:h>%ɥ9l?P/N]K,*CЍLɂaN8,: ZB|ljJ! ,k[mb[Tr+dWjd 5+2b)YRfmq``D Dt:F:oh=5Jl+; ( '>,Ao`.A4b4~Qm^#E  &MƭGQ9l0()Ԥp R1o2|w:TRXSpC&v2lѸ2tPw 2%(HJ TBQsUẢ]:!mLEP&(5'֭CcLp8ԥN߼\W`L]LұM:,!L'Q_2. %`Z(q bMjue@5U1o ECFsL?n9̔ËB ^Xm*.e5Pyݰmc/#1-rVn-^| flV@f>,0&X/6s [Ux8G"gxe?!^j2吂 N_"lmg"9Æ 'VaE*; A6$&Ȫ1-d?0ԥTP Y jhyc zn?L#-v*e5u,[Tqĥ8U) dPO~lQܶ0rlb*q^])r2Ub9QUFPYrVC_5S=Ⴖ@+̥ŏDjfr=1s][Ms4Thm0W8yJn8LlSU׈A(eCJ1@ zZFbOGrMɁ+CHl$0L㟘Չ-4PB Z1d kBYJ(4sc7f0ScjK57銠1lqE r0 u@̷ϼG,*1.|W^5~dj7`Z8e:/-7OZ(?3lbVVC T1o? d%*ː\ <+8K(OEQAcY"Ppot )(-K=@p̢⛫07M4is"2&" Ca/_x-&cu5<TQJi`*vi}5P |FVk9vZ##)7 S a-o[\Jr5Fg0Y # (Za+0 =D%qCޚr؋oCUFв{#`#lM'nd8 /2J=lFIeP &&]c9=pC/ULJ/̰A|hVRX_2V:Yw<@or18#i̻da5<=ך{TL[.I*j1~-GhKjWXk9tfYB`Hk0T_yBNxRW*Bcӟo;81/l^Zե}Y!,}ְWF np@ yek"E.eUe[״%]ׅ &qP7c e,Q.Q?L0[USxSnEn+c@j?-*2(آ'60&e3T/`kb D ׉P"nxYe8Apz"S}\ pJ7 @B0 yB*ҽѢSܫ&{vj.w;*I2Rb,9Pxr`ϼ/*qWw)**+@!"f 82B"lYΊUA*x)Iwy`.)ܠX&0Cg"x5߼ f%\H QhrolMT\,:S4RGDZW(Y˩J5DApW.Kx{w(LH ( ts x B a)'XrsJ 8TE(ZcwȔ-~g.njTXogn/u-j3oƺe[\TqH@%jT´+-qTs@_U501ox"??p&s"Vj2pRUTrbNCwet@ţ7pVGCjZ)]ۚ3 eb4ȆG->!Aҁ@#q~#,{ \d+ yq ,J k%.\\fHȼ% nP YPxl)Vry`<{^ukJ`4bt28k7N![iX#CB=9sh"bW%%.w ,g,6q ϋo PRUhej  _SaXbPVȜT UMƊY(QP)x 0HeRy!4Iq71mtJ9F! )03o2E3s `7p5 5zY8o TZYĮ-uhAK Uӱ.ݸ$.te0{(cQ_)zx)_tZ BVkQkQ^M[8JDJP0X:,&s ,fSj-ctFOxqY3`Pqp>];}9b)Ѩm O!^=JR͛yiw H-2ΕQGVL5>߷ys-"HBqH@MCh%ete[nF>jA7jT697)pS~K1&E;WqVn9`)m#ٷ T1e`f;(S#WlRZEb*Ule%EN!76aPA+%0&X :`b61U0{梵$?> eBY!Mۜ_RT? 6yUa?_9Դpy*ayGKb\t!30G-9M{dYELX`)H,np C˚W*&Z\`` 쬬_$K@GALr6߱#z}0Z|o]KQX a.TO0U7܊*-rf`q/xpG `E2)4kx XBUDzP0cSLHmqR  !8ZQ)5RA10f% X.Pkn;kைƜ-HˁV⫊QcDN.g ^|i`paF!AVG\"<1.j+} l{3< \>I Z7{0,oWu. L\T-wRaXbaEh1%3^bh J9saJ&b  9%rh40.)1bBgLpE滲觭^r1 JqGUyNP1S,` .@M9jKM4i9"cXط2oj؞ߘ 7QULo̪UkJJ7c>ظ,@q2xJ쪫X)+[x{.,+w*鱘Q0 3W!E/k{P G࿩w_hXZnqkRVp7;6`Re3 *2=~C`м*hN@Q*1ig2<iv,Tk&^i{S !H{|DT}.R$@/VL2gQ8 %q7\ 7_eJ,=ƑX2MbMʙPv?Q[K 2{c DE$X$/&\sE2@VݟRM)QyW-ylon@RU Eخ,qK}B/Su~BKu1\ x)fyQqGpp^_- 98{ߴui" >iP>G;a+y4qwv4y|nNNU;% nTE!X7p#4+ &(֞ -G2`ǞO@rwAf-ոh ھOn.IZECRr斩+kgm  !n5ldwiVb"1ãkpi.OM, ]+7v`i.]v%5Վ)ߴ@5p`@ w12j@e1P6Ʊ k,<\B -orIV?*XtaHP嶺9A"bj\U,UkKYa / al/ \S-ݳ7`hk0>cGLYPEMA-6jm odYwF̬}gڮ0j0t7L*uk2p-暯P ]B-ʞfS{48Qa9k5fkj^"Y%vb;ˊ[ۜa(bܠ% 2Y&&TDfU'<L!7(ᩨZ-DTdb'q<]߈)hAaʦ^V{zX xa3qf D`yZ@%^34!ĵ*˫ 0aPq)3ʢ1YX CCMwm7BO< 6Ug5H-;a /ܹ0g34`]eX7 +Wގ2M&^)\/rJ°7"U[.Vѡm4V^~e0*e 5 xfY*ݳ̢0%f+PtP> pjf=L[q)kImDBmKT keDFGH—G JN4+ѵmFdTMtc*xvbҨ+h"*7EԶos_ xܶԟ.iK]@kv4ڡhFE.!I!{?G `7pj6Pe66p"Sc5|K,QU Tg _ 2ȏ)ZeaP+>_Nc05zJuґԄ䱃Pc8#Gi30UB%]!ZiOVǎ"I .&Q[0q=bV*uto GW&tlե{bN h:K0n;3hDUF偊̢c:mL'C 47n 4dzeعw Įsa21RF53И_(6ؚofR4RT_-F hhX^`UC `Sf%X;R=@^ 0YW:_4TvVNZ6Wqɞ9!jVFY͛'<8an25s%ҺWyqXeXg.q80d6ӲUTxDc R/qTn^-ͅqBGL6(2~[e'lI)μ\P V^OLj\ /\?PkЋw^ Qib[[Jx|BM9eE/ӝaH>[ojm) X 3+XDhKuB&:,E8#`~VR P3^+" YUy!2Wkgݨ}qt .k :.MgYc:_3u 1t.yoAVCy|Jhb/}k1nZC)mѿcƫ ryYk o7d*v L4Ȼ"S)Ѐh BSdb04++RV0T$o`A.ZJi}ڍգԵP-ͨ|- ֎YylCgeRbjn+T~lSY *-(_7jJ̳>>#aP:Ʊo*I^UaE\qH JJf80%2fKU n:W\PFҽEVkLq/HA8䍭 /97KumZ<@<8KH@IBa#QaE^rL?ffdġĊ,xZp" <*\Tpߎ"d|*,RXfڜi_EGQ쎖gEc@XZ,LVB-c@ e8Јrj8ijw\WxV N \nBYWrU\ g#vC64[C}2Z-]۞`Q#"*qJ9DZ`FXڇ#S~Эz3  [Q-{RTȀPtry³ e1u_~dP_e,[{Cf=-h0@^]K빙mW4; +fp>08Yoxu{i \8%X#l*|.m5~C>&%9߉D[Jdh E#YW [ @.,x&xy6^Aj!9iTbB yvP^~Uu̾~ck^boCn.b*Q E]3fGUV!U60MbZ MŴ-Ź"U=$<Q.( OqRYdDbH\~݆d&ȥ,bQ 1n*5iƥQXKᢲ~9!QwS=Bߛ;~t";yÉzb5-}>7h [eg?fNRhȼ $ H036͔ _yT7KMp,Ǵn~+BQ#5,ZLZ(ҵ>vnolQf2ՑxgYVW[75.xPS\t^ NAnɏ&R±h2W*cM&^Y|LTxQpsi4i3S{il_׽2, !U3 (Fjv@E*kDِo fƽ wm7Q;.+A)dz@j()] X;aWMDÚو5KaTCq4؟nj֟ZnmP͖wľX "!s=E3PGxv}7J-yHR__PkHJK/ <e z^ ,q,n-.JŠ@v@F34v;uc- XB:5cV){̀w)m,h0pb!m1xHˆ^gq0=:z; .1IHľ$HUhPeDԬx%^, *Fw xƽ10q kZޱPw _*\m{Zj{\)+pmdS{G›`BU=>`#ElKV1x#XS2 +b<ܩP1K,_S *qy-kQ(VCuYQz1cGeM[FqB?;#y|^P9^K._=){?ܵZ?^'H빂w3(Phmdr$n ڕq"Zm/(# ^Őś*q%^zZUVꀗc]M[n~%Ҋ /<yO xwLj:Z)WƻHxi hb[\uQ o{ɻZ^3iE"ܪGŽ/V@x>|\l[?5e@VR}2ɿxRm'RMPre[hƵ`-iZ 0Y{I˶y+ LȣN`6aAlØE- 6 # wLJ-J:[*]3-._\A6 f&kjcϨcWm2YrE^{|+jh0D1FZc0\D.a1:HV9BFa4M=1bB+ψ W5QZs] 6U1el; ĵR me9ye_1kRMVx}A s58U7P.3XѤL0 ].nc5wQV/4eY[KKm0i2]ɘF9sMÇMiX1 9Qӄ-9s*<{@-Z Uı 6?R@ @( Am"~%#⨮Xӆı%)DM ; vc8eLۅu,0pw *"]b--nkThX wn߉UhQcJh@W)y9\0 r[*p c;Ͱ8&PT穎,QP6ɔ`UDzVw |MIdiTP2O&u3!y2^feōk^,S uJ_ [6:/°YFB6mQ "0X\ T^gDIslH-Ͻ(c޻KU Ī-xw 1)f5—gM^vd? ^Ol{/Pm{ 3-{ZCqNCΠZ>S,=j{mnfh \=ʨWPdY֣kJS$Um {W& WEG VW-W7K-s2"8. *7ܪm_^X;O*`q~#<^WO^i-gs]mLuZ);H+t `ЁES_+(GYZ J{E.KYK." p(d5̶㊌X9&*6}-2ed}Řעg?d7[(1])zT [1}"4}Kkf`JNbT{= Ph3Ǐf6{s}q& # so@,͕ 4i$Y,"4inn(JhAX::oŊRPbtF ꯗrޑg"FbR Z yF% W >b@<@Lp.VH{Kg\KG[6 VTkSu=bDX(\Ou]F-F *9EOX\vL6Z7X2^"ceℷ]\̱0<8dFb6h̠cP6evş*Ɠ#+D3V-$b3L\ 0\LQz5WzyO{ISDG"5gNNQ,W9`R㝯 Ye{jW2ḊZj9e$2^T8}t5S9$sy]Ƅ7m97QT.9ۈJӦ .k5xJi> [&UPP3<1XSm5`/`dn.BPM*Nwׯ+E˥\޵,Q(KLԪ/ wȹψO*l5+o-mԱK82j(kZ.UB󯚇.tW2r%nj(v5R!yb6Z?T'CF</< 5R<*َ Y`- \@Uzb@ οhєvXn깏Ѯ|:|+&^pt9i2{}Ԣ8tj.Mx.|U)VS6Y)uVu~"|Eҵ=a Ye˱Ÿ!UaI,|qIO#셕V#qӭUTX^Y-N֟p.//J_[p|ӵ?4HCx;bjs XElex: Qe(6҈%m*ΠWJްFws  tڀl!q\m+ik_L2_SA-d4ޞbݡKTУohW&$A0?)2 m7h\b."Sį%L}'PiOb]6v_JϽC4 Ki?1n%x93iT~+e*)0ȳe~Cz 8Ya&3&͓p`Ӄb99Cmr=;jPM"y_~aIC9 B!yAy?rSBN \[.,LQ<+c5T/҂%yw J}2C슸a/_Yף-EqE<ĸ1o%6c\fpevMhdU }KzØ@7%W+9XҩS.6xMwpZ˪YpKߟgaLEUfjR[ ֝ۢZ/;"^bĄca06̭[2Bnj8jZ'q'XP!ŕ3dTx>IMV#E"woj\m%FC¿06=3!W"a TBFp[b-`a|hajp.$Ye]K 2 k('YB*${ 28>j 'oo ;!P-/_K~A6~a;PjF'Y!d0j%a<]2oĵ(Yy8K/mh$:U|zB !E-x:I,+<Ũ MdN,˶U&۽wET_6&"$X\AHWԥrLfC؜% ES? ,APd\_kBj ,?KTBWg16 5`.?8 `&~&mKtÆNdž/ W~GJrR"Ae[棪ՠd+wO&g%ݜD Et_E@< -68H7(jC}/!I0~#Zơf[卂DcU4nL=~33lurXŶ7- ! \QP*,Xc* <\MW?dEZF`- @<R* b T)0Tq(Ryq; 4DAl1w*)]"ۨQ] z6w.UFU*Sߡ:Xl+4%fU: _TJVU~%I{7e͘T@jCu"j 00t R* /|j_ n+2}mRhb QX/HL&X T0b^.YEGŢO)nģ@ ܣCq)f Sf= :Bۢ{32ާLkBQ Mg&8̫l1kao A[F`$(NP&+IQM ĥǃnnyt*%KsQCBFk!MM@}DԴ"/&"v /is\PbJ@2.8W1LKJd>v 35Q r0,JD9JbI(&b+J()!XrD2A|ę"jxQ.Gs<2 QaVnqٌWue +0#:'84.;DUQZC)rPꡋ\NдT5iDaD5zBh !aU@ ˶]T`)BT73tγ ;2t GZUz.bn"S2B'0Aԉ:rXXP^A-25@aLdEWi+ڧ({G6\B30AHr[偹væ%c_Y#PS+r\",SDDՐ0Vߣ(7׹pTE7MV=/y[Vc_~.|_\WX )ىK>F+(u0J-߈Ծ|J;$<" [E[5Ո #8ERa?4[½27 YޠZ w0~(`q}VorV4 G̠}Ü(]nZ-EUKq<2By}-Ws^[3ƅfʜ$ar0ʦʀt 5.ȷEͫU }~w, nY`޾ӳY3h35(7{w\(vK%+ wJ4 Y\K|wgG\w>eTh׈P†;"ģ f We@..o3PJ<ǡ-Qw)߷#`F<$d`;?x";/q^]7?ň6b~='YYza;PG_*@?1]?խ-= M ,j5GuZ{嗮]`?& #8Y^772WLdA̩h{lGkHmO`%ŒhQ3Y~7bҾX~%&Q0iH9~ V~Y)b>Zy8v4 X&'-NOWl?3'1pglC tMK֠X+{㯥hJ.]ߖ ̽.{+T%c(ﴢ?.=.oM%q[0|\l=ac+?j%g )E9d c@X* e?nIA BVZBu xXܼgg 7#{ⱸb^(8nGo@W6L=i"[&qw3]u&8U,*+y].U[nFN, ͋JL Aωg"A~ҶM!SG ь1Z&e§-AL$ 2`1n5he,! Ko0SW"+B*.?> ܶa/2n zRЊUH9xG34Sµp-27. +)&X(׼8b(!t/e9rP%0ʸ0u ZG~TW 1{@)exN<ν&h vXFoxϘQΣERCuܻkD)Χ3W`7I(mnxkm(KG^/!mѷL^l50QJmJdrX+I~cBUjdSTeX;9 o\CK]?yHlJ5혟{v>EcE*:Co G,)83.N^HQ]!¦J9LB ̊`Lh%51!`eC%_ Wf_|ն+s#.g mnk+ xX~"1N,pW8X,anb}7'%VjU@/0pp{eh= 7qJ`f?$T5*,t苸\h3c_SRc($,4\rkhi: —U J4ԭ+(9J:xn!rf*. dgi)ŷ/M 41K@-e.~b3yEr̢81O"Nix&.:o& [M[E%K MgFh*_h۩Wi,*13u.'irīuck͇m3 \XOWxeS=5W o@9&[E+ǹgJSjݏn4ؔhjFGڋic(z6+#dk@ؒN9SHh|񃙁lJmoEw-v)zQ ݑ\LGĻFɶbJ (¦=1Zĥ ji;hҪ@GFg) _i=# BTKS+ch _2Pz[xíY_.9ěELJ[JoY4ۗ7p.R58јZ¹iogu{H~6Ln*8jImM\p/?0W?E@tU+^pr$]fr<(G(=-< YUʶFJ0BhQ?A*e [Ĵn~1"t=z4$~qpϏt7MhS\dHp󈿯^Ư1c><8SX} E׷:7`rj![RyR< rB?p:}BǜwVq`,Z\f9S$l cPݽn0EqUZo_BYAfhVӘV7Rڅ9_N&F瑩Hm%EfL~2fVXU/~`jT,U,Sݩ%K*u(Za'8\JU>⮛!;]⸗*nT1Wh)*iA3k(-fPDF S0wap7)3uYTf.1 X_, 62S 3sxXٟ0B+`љ ޠA͹hc;q^YC爦hj(E+s__RQQW t_03J1ىTʬR,@T6~&WZO,e)^"ݲiUz L=`^E@m3|o5Aq-L.X^X.i2KvAcXԱ_+_l@&(|l`-haGQl ʦ+U?Aybf8]>RU,,-gZަњ9&Tr=Ƴ"(@c .TS%tZ &Ew^b.wn+ḻcelW2~% MszhV܀ojU N7B[L} ^\n5w~`6}+}T)WUb,Vi2TJijJg#y%S/hs i q` {\DS5Zѭ8JacqbrscfVxU0J3*eZ`wl[&qz@4l * ՀS3P e s !ʬg kl)LFWyVs:j)%;*%G^ٸP.TtaO$w 0ҺAEqƠkЕsZf-4KPJ~„5)aSpYP-̹;l)^2) PQ=>Ģe1ט.QR|)o0~eCOK,޹-8Uӿy.cCE^M=FĬi}slKD$Cq`(h ȸ9[پe.GrD3@,i/U,N3V [,4**^QwpOl%Bie b.<9Y!=W3qNL+s0I8 Y~auԹ%ڝ\{؉ʾe5ϼƥ&bb<#90-Lq*QU)Ol5.h\0tHj={̻201'!.d>!EV"CEF3(=;S/TbV0=AQs1,*.Ow1kұ~`1 zU}j 'X*4.Hh΋rq<#DwWx6X &^'" Df!ZҪT0R޹>F^WBul "f8\`+W y6u8J^.Wlƹ|>97kP=C+PSaɺirU>a=#GTOߗ_Jڻ%umIf-3a.^ gQQڎ#x8@[78HwsҸb]L<43m [xвT#q.]idsucj ȿ2-Ek($ T5eҗBee\+JGT,;*L p4^u, [͍fGaͼcWWXF\<\D?.QںCaej `R[3=i@Wf`"7 +Y@ԦJ:6f`E :fiX.<VWM R8buS ,\ع_P8JqEhni[XrfQ/e >Ҟy`WɟXS p[A2~CU@ Qju*A/55nw^N.T͚T~KaQi7n h3`Zjf\`ȋ_L#kܬ zn2BJyVZCSwRx U )FCHԵ1)uOG8K"`=@puհQbRN FpF)@n0$V+"v׃nX-s!(唪4c3),sr6JЫ(+%BeeP_AF!UPp]_hNЦ:C%KOh`eT/]{MJ<0 8 tbxe(Q+UepWu,-̹ӈWYC69`&œ2g:14HvYN%Nඏ[)l[.<4\~T;F#~E */quuF)VaX}3#a*ȮFغI:c9rM.vB6 +ȍ9*oHV\FZq7r,ohߘ5 hAiF xpVn]ܦQQ\G(890o- \6[,s`K`7 B0wG%XBn >1f^u.sDиu`oQ"r~fËR M&(؈(hESlͥfz.g:a/SIdZ^` S#Kıe nirn+x>%.!ʵQ.ǫb{lGR q4f\Ƥ ~7AFBh+Zoc+Ч "OoV/y͜oۈGּ>J_:@^J3UI@.M(͹(:o};=b5F 0Pk++$6,:P ܬhc r.:A\qjM5`{U7Q<`(KWLK6FԤWdtty +y. ~EG0e᪯)y<О9&f]zNfzpw+/f0(-<-t*L_}ۙa. VTSDD4 $A/*.ˈ(++LlK ZP.TwVI_6-m(7?b'.w~hR_[eK { yilGG PUXԩ&aj"aܖݎkrw XXkoV6G 7 `H}CЦD]3 C$ls/LM!éJ:]bCTAS"#8uXLnQt' h$WuX7&33"2Z`ov4g(nc[E^XVh1Fn. }JF ^W-ڰVle̽%hXп@]VU"aw{ u(9mZ`yXx%Q.,7U"Vc=^ j]j`,9PÅo31JL$0Kʁ{HÄgSp#jvja0i25Vb(Z^Ei}\ߴ n#q!KjBߺ*Je1)iD<ʁt5h4nMfc`` Ob G1Cm\pUE Z2t7)Vo0qæ‘SPS0qr3am%c$ 8VrG<`t,LlnloG3PoE*"ѬK01@Mx‰U)6PizUEP8 ^‰vsrtu00Z&)\a*$#n6ƚMn F3Da\Y-ʪUW/N&kYE ~%2)mdkS{opW!lQ3Ơ +^ZzTT, Ai57ޭ|Ԇ%ڰk<{P*:=͚Jy Q0|Ds&,`O emeoJ+R%To 0m2pKe,lU߈Kx侇 F)wW.Z*<,Z֏ޛNG1h(uI2õ+҉ P˔pYOeL.Ġ-mt-LOg[`qً Yb4gI"ӣغkS1+[_b&'e#h6#Xp(mSU͘)d!*~90֥)v?7Z%tde~2!MX7]Soi.6"9oGT)|Ǽ ѭ҅~WF(01p 7qi6қE8s2A\qĢǍŷn*8 ցPP7 HM9;N%xZ *9@TxQoLkOwrHT;=%`1 Åṧ TA}+0KW2DE\2Tm?+ gs]9>O(q ,>׏Ġj/2(kΤB];pEQ$ !OYjPwkPqZuX%>N2-]%Ctؗk&*;;L0`f\r潢*e%74 TX% M`Zt^F\X`v~q 0aU[XYty(/=DQUE.g) je,@ _#xR(Jj c/b= UN)kĦAz 714ikߔ*(EeļqRsl*#x`0cT5.PAN{GX1{,bS@ >6V^*g\G0KPe81q*Yȳ9rL`?Z|AVa+ cҝd+zQjiq]M\˳aª(P6#V9m]N0B0!K}]J%_6׹ʧEfk u)3^飻bwPAQ9&B[Fz̢ E.ѤL M^ lZ4<̧ށ4Ļw8]ÀJJƥPaKJD*5ot{b"#z/,q0 sWQ!֐Wc3(hin^St W1fG5y̮F\mr{ vA*Jr*DN#"$,TYkʭ^cwRb²Ta'YTSJܗQAwHKa 4UUQ~縒>#{* "s˯%fXiM,Z/95 sJPF ͪR29c[`U@Cu`7OCu=B5ĥ@L9oL"o|F©][1}8\x9fA,[v{T98 -N-DWf!e̢1*0(@YCqPBSܰ1 ^GRV 9"#5j1('\q,FR&n׼l^_P^VRJ9{vD>X8^ c{4][Y +h䃋xe6rg).jTgybˢ0KN9#԰xWet y'"+>xTF֦l 1k7A1E. -q6͒jtԯo?Z2G0LT>PnqkQ4)x7E?l- -|iLZ^KgKpb?7Ḁ4Rň* j@(f"֘JUt{o!5غXb6;oʗ-,pv=-e!W%-8Jm2IμA!2av̤QH&@v 8d 'yEJ--QW1Ŗ1ywU+ 9yyAE%) m^pέ@! d8 `! ~%13DFyR.%x!+;|="_. 7-Ƀ~-FD_2RY+8559/\ŒsKLnyN2Pʁ0f%BڥI0h tl P ){(t WRٶPEFY,j BTi;1]0@y䤔XCMbahiR ?v[ZV85Qto%_3!״R%]x*bj0t=8y1 x9(Y& Vyj=G`(`,r5߈"^w,q\GZ1 Y:>VwJ P~b[?n3WԿž͖yl>`^m-·vJ>aUOxÖzCUCƥ k9b9"M\fw1 `ؕ4ߴrڣݮn!DAKsL,H]Ƨź 0-a00Fi|(\Q4%(_HTpVϑ15g뗱,aK$ 5V/D]6Èi2xaJTW7`Ī]W,w]~lpA X}>Ɉ5, V!Cj+.?t@py & ~aT'{BMÃ,.4Hj5grڈjF PB3dr#X}@(s(!F5,b_w{DME# 542C}4q© v-ҎɣiAW_5Ə6oqg -%m1o!zE|DVbbah1QQATņ_̺ =g4GfG7fXt/ݩf[*as4$E - ({JPT$ pS;'?PN|1MgkXauU$RE7W((Eil:5~"KX^B m`.Iz)-e_Lg6-ݛ Y1aQ)UDGOTٕLʸ%ٸ!"Jr#J$t/c BzJhEX.?üeȔ@|鮦|DU.q. *Z q4B6YZyωXӨRT:5zu(v1YFX1^K!;,#ilc1*m5ˢ^BaƷa8 Љk$1AH$B3Vr/M[*s[\UUo|(~k%Ca-@7;Y5Zںj\!5*3m(o %~eZ8ex4Lf;XM /n5mb[%V媂PٍrWn!CO(uuɗRJ3t[Zu8oZ}YkΥqD- 橥b&8"Rpo7&g1kygi#3q cŚ8Sb2dW 3 EwI,qv*9fF€BD㟧ջF7UWŋt \n0 8~op~_` 12yTSY0D$[9faݨVfZ y+ɉ|*5.=Ө 琔A|'rUγ!Qh{_p)19Q|H<^w*THَC=ȈW7 z C Q^zo):×,E돹J=G-\*hr*X_~#0 VeRWd,2/N"Hݘ! B-u(C.)u vDPf7@&`CgPhP?6j֎}l%ԥ-b"k9A#% ̕qb7BePb21μr<wWrFg-HX%_,f\)nCߴbhUs0.j |FVL٠a wS%j︵k|EV7Xҫ3 8ppfߗ8w sK Pq_T:ۑ6&⚶O)84t%~&*+8\9s,8ޮPQk[ ֓+ټF+̶%U?vWw-&0*īmql հL2WXsN5Rۜ ?:pdwmkevF}6cR/J_bYFow4ux.%\``#Ng#$cu 1EX2HEvP&q—O&w r(l%9S5;օ*#P q[ />]W&)iSP#Anl qI:"+Iܾn됄ӃqP.H9N,Z0os- }T:]nʹq K `cFe٤ ~BQG;ŵJXrZ)5_n {s.˾_fddn+ =LɱToQ/?'pn:#Y|f1Qc  mulDz:[BCP!AΟ:Z"lJH]+Ĺ{doR#z`by\J EQeaP+Wh{ʊU>KC*P5U8Ƣ3GxkCQ24ЬQp,9K Ըz8;Z}l*W*oFq|eJSb(JN<ʖjD@JFh}@Px@X6Q#ɯ(mPᫀa+ᝮ(^B`ZP4hCFn! Ijtte`d9J-$*y ~x6Pc(ʏד! +j.i$oĠˮ}0+MbMG\F,ū<0qm=@NwK[hK )(=KC99JK7=CXYT5Qu7ZE8zߢrT A8bĕ^"!#dCM lUž孌sr1(Y5(Չмʍ/5ABT81v0q2X7qX}Gy]f?MvY)[eX 7Qb YOèa.-m/k˖F%L-,;^-,[$."1VH+}O ձm aeL++`!*fA!`4s50\4RWj`Mu&<5* <0ͷ2-bs*ռ~cl/>%!~q)ݷ*bC.1f85KoqİQM=kBJmKHLq)P}%zAG fhCu2pZ-CX\ޢ.mSgeXXm!TڃIe+Vխ1:"eL&0L2LǸ?jNC[l\e빭YGʄ SFAI%T} ؜amVU.{;1qJ_Eݻ#!lUb];l阔#6WsS#)6'ޡ!(\ |ew3RĥqZf KV襚 +a]8EɌWRœ?D\~ҵNp&>}㠢eQi΁I Q/&qFU y LPPM3XMo)kRS& s}sgq;^)`;e4{ n\PPL w\OS1.8bU-#ek%̩>V`˹V{-ʩSFօ/\L b*!fo]b\SNo˚1O2E-W e(@<'S Mʎ_Te]^-ı`k z3SJ7VK#v$0+9xsln/c#*{K U-rWClL\2cuoʋm:u4 bH`'&MuJQV. #o)|["#Fϖ.֌Q -D:-}-*.1GBnKXŲSv!L̸*谪!b@E2Gbqaʋ+ahxb2+\ػ̸Xve5` bZ1oR9* ц )&-*,sx5 RҿyC!qmyq tN<ʷ?r)$4+jNsFh*L3hLX!x2]\CML8&-w|"+L">+Bvr^ d/n1kqQ2WRVm/ pqFe3"X>ys*mk3`60WFb( ~%!NqujĢ(9VL?KMe`@3K!V6Y! J/ ^=,/ꤔYAd:b#C Y ~Rvg_\,eSOjV >f +UXeT/ 5Ǣ@;![,;qp 5x+5©)Gm–&1P19/nGJAFx~&%zK&*^ uV)x5jؐ8DF BiYM@39فu@;HY` 6@uR[sT(͙[9؞%yh?P0x:̨n>Kg.HPm{KC\3+?U\Q@i88oauT Q 41Z|NT bDhíph50TEKIUu^s:* ׏h-V Zdڬh%;B\.1f`/!3ºi6(/e[OJW4p`DO]ChF,}PA*-jDX`{$>=*H1S4-1Ns1jm=^S iDqq)s"JRFX( D56('oע=.UC.\njy\ף 㩣0MnK#hћ;-&P,ԵT kPSYB*bU|P#V.Tj7L̫-e~D#"RTx8m߼mw 2 5Ci6Vjhbh Jxi/J3/p\KU@;j{ )W(`=!lr6&& 3Lm­Z[ZrAJ!a_pۖq.!N 6iQ^%g ŗ7݀_VDXt@80/5#TUXL6iE>Yl(4J ڨQ6̟'9nmE X7U ,p83faP`/8ƥ0GS&U[לsHJWT9~ ,G"6;(FkJT\V5 ( K8CܦP ExP kp"L)!9 oW9-pRHΈ{ʖ1^`6y/bń%俙[ıѕߋy?=D)nK(yTFʈc}ihDe*G$,aJ iHX.jx w^m%k/Qet;4}7.#(kۊbD44 EM5^"*+ő~!"e Y8,l9nT Vk9lj]^JMY&{%U˴ ־b:2V//n`5Pl﨏"u +mwM Jƫz.EecPKcete9#PPmX4Iͥ]æWB&1l5^%\Ƹw 7YJThsbקD 늪4wg1'4wh},92oG|\*xJW78(zk0 8{T]QeF< 4mW 1 `ReO0֪aHddH,0!dZ#aPJ`"%@{ ڙpmTUyGHox.ܲqU+<0ŴdFRߒCfVeUg Ā΁l!P4 ]NUw9LUDky3W^RE^|Ʋy{Pf&3튨+@\~% Yk|"#Ǜtd[))7!rJܥ_%!ޱ%" phƚ G&0kRY2erpZɗrlx؂E1(+@A7j5+nE[ \l֟Ml.LhM bTQGrE0\fJ: ;иVN|rVrkGYfC^ւb;@@ 58٫*u49ϣj`[tzbY z5B$1~ _j#؜D[bd8:b3pn ̲C~r}6_2JJTJZ~cO6B\=: ljH+73<13Q=@Je@p*^勣&%&"Qy,fi<"4)r"(Nۃ.cQu*FJOj{Fv]KyYҟnh8\5,8>⭋ń MJ`hzr_mq rH֮P e9U:pPT^Me7}0+1,i6,3y-3Yoh\u/U+Tm&)JRМJQeF\Y|&0@l"xA߹p#.)UL{tzVΥ}GK U kYİ* Ʊe/pfњ_Rܼig.vlt|V3oxu_vUZe r +/ w7t `]^Va2Ow ^b(gQ u _hUN>_[}?s hEP͆)8P8bΘ`"S #xaR%+u+,(Vb v]Lj fHg ]Ȃ;F/RlVfs5|ӈB]@^;ZRa-\BMX tP` S> 4[ISdPnҀ)s,V%)`5Ŷr>IS)WvKWŧroAGq6dr2A䮮(T4v=] [KĬKÚLibFcU?ډ7l Ɲ{sĭ˙Y@Q'MV@P(ևĄ+Ĭ .[[JPt\[iCTEKl aw>bZ=s8:yv ULR]Acp, ++5%>`J[_hgj;Qdҫ:/[+F ltfL՟2-Ô7.;*_ctˎm)d)imrsxp0A{JR %eqCublJ~#`1## ,".W /WdP"Ĩi4[`@seGв_3 xꧦj=~aSsDQP2*PDb wqV!T ba)W:SHX@LK z5+r rB}q ]):FmJW^JϡC>VDeo`gVr=)uڄgpL(#W"0< s(eTkī16 j]Y_0~{!b\]7džg+Fܾq']_T ƔP8/ׇBg`NUe&hZq ^"m8qƦ]腱K,]ճd=?w "wZ&`d{YĻk*f=+Yr>~f`Po(EP:1wj< J'.@.бGB (4Y%%Lro)MUIǒtHj`X"c??+TO`)/t[bgbOa +J=jfhP4K:| jܴCBQ+.e7㯶c]5C#vǿBm~a-\̈\SRGbۘ1 ~1E=`^aEG$wAm-D14HtD/IsCV B㪫D5JdJv%S<'$^نJ.?2f//2_r/\kfҖjU61U3U<%+jƉB!,F\i. EɣuxCn P6P7\P+`$YzJq* Ĵon/G;]̈́kii+@%5(* LpN)m=㗔MJ&ya2_ .`ipy8eىPl&e0uWwP?kj>O[, C-FҀ`@P=*AnVw M:#u! q4ļMTʶ%E6̬ĿQY`5bTqPUs-W-,ꇮQ8Y\m5B+W%C(*SM", ž&(/!1qQsˎ!uR3 ¦04{JYܻp#R5CN) 6FU.WADW*7:f 0 T| YA9t=j@ tFOP,0ԭ3ppg̼)_qyeʿ$*!x%.=ʚly#+8N/P[xV- S(Byf ı(Q&6esH0VUqR[AbxR$"FCpm.(r(7LSѸiLr=ݒS(冇U&9\1!lu'>&|BBC.icP\!Lm}U`="+ Q8H#tTAd# ]B՝C~%/Zy0+?=^Ҝ(`BKy[a~ D@>"RDftD֥`Si n@ K/ ŵ*%|D^P *4+Ils6u.zHWl2~&Uj  L6Mflx:\ҫ6dʍ PBM3QjBp5 ѐ>H6q6z 2kLD_poGHKJi TSX3Vm(5zz^nD&nCa{A>&68%m,?PUŸb("?$P!@oSe8so73n'owyb,+2VyYk8*jst8ux?xqL( a-A V1;䬸p{cwk?Xc|7?$E,ܤoFs,[djQj >bE}ՋOf\.l#^+q5WyD%S^`2E;K*5UYP׼G6ilkF%YrkQ>|K befBR1 ΥXYX Ī8SEP`Qfr`1GQUk}K @TzK* `U?chPK)̳V+ʾ*aKQR0̫Yٸd } S ûe^e0S.Ygdq2bettϓѧ%諀xc'ML&/3OkRY~}ƜAS;gW^NY"8\s:e%te`T3uia1\WX! ']?`2G%*~bvoV/?N*XXRhlHJ[dAجĩ,Ղ5q ,8a'G3&>yS'=!tuar {Z?0p77[S\< bB:*5 P;ؗ0Gx8 dqVij#`J:)a+w7:U&&h*T6ա2h{ep92@bG6ӎaЖĢ%ha81UAb{`Pe6xP]H0ځǠkcj]2/.`P`zTToAaX٘2Yf#ߪ8XZV@ASDK#G Kb"iuQs-9c6FGqd*=^etmҧ=ʁ7늛z%=1XFZ=+L w=8kmf i ط0z}1b6d|'8ၟ51ŏ0ZiVkiWJQZbĪYsV%: cqzh(DW=|A520PIS2(!mfaƩ~ YLX`jN,["]h b~r@Ո;F/Ds!x\*3*V=cU*0iglt n%: J,m3uTmT/[CmۗŲ@֕P1Hoh[~5.!)yxj,_z ?w+JuZ_VB S卑6kĕ1+%p6 FU^& wK<dH561| ba3)b @P~~@8T(>!n,ڲ@5Ķ G:8ᐽΗz[Ec:0@ݹRs|a F%ᅒYGY?TˁɮJb@a!A ~"k9kF/@<u4Q]Uc'kGH;EbqelnOnElSFfۢǽBZ!FH5ؠbWoKoS`n#)KOLO,O ;v^fd~Ti9z}7XKx@9*q l*UZ$4<(rrXx6Q^?5 S樞1Ϡ BL%A2zcj *(- Jؕ1@ܷjf"fvo1l-yZϢ gY{H(~=+WC*J-1 2ŸN"_DC-D(`Xu2fPPרq3W`Ad2c"{&eXW^MRP306|C@cI8PІa>nY1h4 s * 9s\L-(5Pm[-7|̱_6\[EӈDʷY3;{E,n-.5Υ+ܺ7g3-LUJ|GE^^\:/m*Zl_fSs ,Y* +{2k|,rfw-㨸EɏnYZ״ÛP1 {TtWah^X4x*<k*hZ1EG+- }Z!8qsԳgoP<-"Y4 k mnFiTehD07LK"G.e)rNcu[)L4[ć &#U[" 'X= nb K k@8v[kAU|DXM-Q{ݬJCb,&Iv?B+0؏_eiɍ<Ƣpg0'K1oqoͷ(""vȅ<5ma+=3)0ZUݜ3C-9,ݍZ:cz*q(w}8t-XD-b Q\Z)ꡖ& ¥\._? sPUܷn)UWZ̹ss)r|q;|lIv,L :ʋtsiU jйEW% ~2ZPxFw:j1Itɮ@V9&i+OU8\XJ(&mim5jw nVn օpYFFhYψvcYU>faq=.FE9H(Sə)Puv6G9i7V?b5}exEf,ÇŐ\ aEl9g 6?8#*XrٌGD0"l(;a¹ ,2 SijWFP 9a &Ӆ0>!J5ǘXfZĢ X ,/Xle:F%ܬ\7+>#(j؀#S1F]M.' R6MPj6( ԥQ=ߢT>P35%@(8PTc;VEԶ !Lq.Q(%L\T[n[we([xĠsZ`jZ-Aq, ܶkmfsVLHus\ (()|ˊ !’d5L3 mJ]{D5w!5kKU2uxK_eN\u\ݾ*3f(=x)>o7 1j:#u]F$3ˮ`ң,Tl('"p$ l/p* JqCήo刽w)ޯanJj_SLQgLɘTR%bTx牓{A,۸9>X۵r+pSnM?ibrť㨔1ܲx{ߥ1Ur/m\kn]jC#JWl+8+&* _ હcְ=\ ~asKɾ!@6J,\2d)2l+߼ү1k ^F+Q>M= n.TOK|~K|Bb8@8[Ef](@EĦFy0dפs4ʼǪ adHIm+1af*U W`:`(ee%BԿu E+-yR[nbdbF1&K2SsS2ruq$վ"{#_1Lq}_2fiՅw{. 9,۸?fMf7Mo#w ;=%d&y,yZ *cZ*.dk̢B-0gw*X; ;"#u^Ұ.+ {jpt<ˤYM_k(8fr)[x@Es](ϼ ]Fi5N؁4aQ#z,QL^lX>jZ ^wRkXѫf%mXhn j}3>j9C{w P48TY:]l)ʔՑ@' Z~%>70f R1OCZ|nݰ0P*7kL}?W}(㋉WUиnQ.Xg<h987Gڥ 0U֥je:`4i d5m-3UYF9 T;u&,-NH9>"Ue] 9ݷp쳪uUcb5K*" |e["`.po;gL:M&-wL69qog,f/dU5V(-cHL1oy|^|*)0xĻPT YPEp%esS;iBa\ W`uqH_mx=ٙ'킇~ij1TcjYEI=Kܺ9FTN%7Z3.`1MuD_ mB2w K]ڜ.MTi~"W2N ؋ V״N/w p qA3[l>neԎ.o(L:KL 2] Dqȶ]er@T#aлk̡Z5 mbh*t%pM8%T3:92dCDaNUٕ$4俘JEl" |0듭p~fVH*N#7V GqZ5ܫOĭ=^k)Lb_s_,@3d3uCbUL9et{`!1 Vـ]qNfgglJ @8Ko%nzIbY׈جn4\Ze*D)wgUZyv¦@|UxHmhf`b>OmD=%dV9s,Y'q a9:z]Ta* CFv$ԋ̠ϠaWs#UeA c1J{%41Xz= ]p?~}GXDf_陌S"[oRA;1䏨̠͓~bLPx28[ᙽ!+G,D⣳-SH9P^u*_yvKR{ܱL *,t3E ᷄h&kTu[\`7FG+4фM+k')oraL]ܸ2[5-V.UewPj]C+&-Ys`.<rܡ`g. @сsV3MDElsG"9cq-Ϩ%9,+~Bn:DJ*m50~NXl8#Wb߼;}-`M>*S3-*bR7_CR`=JW½`F q`d.^ ˂=!Hn&%/G1Dɲ$ (倗9j& Vyj;W, , 4dJ9"C1UCD!*nQ3 +=9t~`Bۉ~t6U1!(L"\\1 'z-zQ1z}Tb\I`)pRń*@ @ ϠC:L_QD5p~c(v4.rn}prНwtu%@br'M1U6x7Rx}YʉS%f- }@uRfE#HTQe+9x#cna}勍ƨ l 6hS4Czm%nPۣǟioCOӹZXD[sMs-6z>heY JWn!MW2U%C-/PR7cociGKjMf`?xS C9CH& B;iV kBQuXap&p8a{sChdsh2,JvhŶÌZ>៉mbp5}W%<1kd{uÙ`#Zr똸 ;9,St}Άg+~# g4rFZLgoch@ٙQ1+|L w鄫KCӋ哏rh liGsB>#,c(^#)9e, h \ˊUW2|P@CnBԭBe `7+{_m<` BvY4ϼE^tkJ?&9XF.`PZDzQkJs@ez\sٓE6]J}ʨ f΢d4<e5*)f9߄%t_88L/ct-,fOy nEB0x*^PoQ#r n DhqB¬l}Z@E}".RJ/(W卜m /a+8jeWv^'E iќcpXXע V1DSj.n,UXoC$A+1Ցz6@4,4.Ux!ʹzwTj Le L=6Ƣ3T`hbB ]_8&iax V,UKQ1/[4~!Jܰ7Ω50ߍS1f03s'KW q -i+K#z HϹWulD <1 %b:0S\n . Q6[m2[w4u64R2ĭr״[>f@(Wy@M/1(r++T2ڷ5Zjܟ<x25cMрv1p ;2rد0 AřtP LbzշE8ήbQ~xV@+j EEzg:ß[Z"q A9 :srx}=pϘb%ʽIEU 8Y1 @.ma Pn%DQ;w %-! z RRV&)`n-|V0]§YLdȕ*W jW|Mep fݩ`ZXMc ᖊPs䂫?\h-[, [aYzQhv K4EQ½ -/5iDQ͏`.M ˛7x9S8R"Z#U^[*Z 3(\ہ F`j{bc0! w+lWy:B&#ij$1lXqWD3k|EqO"?2֮5 q('e[zPJK%Y@KKwGWI S,041;_hb0 2o!7T\r Դhn71_،`DJ-HWwfm<88.xv;֘=Ah!u ;xACE"UW7pvSEآwby:m!(rBO]+@k!W*7PԨ*p\MIfʆZ bO>VFgPeŤVNM)-۸b㣋b/njݽm]p78@ iӫ@İ8n kPch @ɒ ]f%jg UYQAϟNm LwDl&w^ՒjPU|g_dIGUt9%5|bR]/HZ?>Vt l iP\W娚d$ԁV{V.up.ÞiTQ$:fᭅK3 Cjzh= Ĺn*RӭK*+J^<#._S?1" #^yD0JG8hD+`ȷ̲Z[ L$p ,AS746è b`H8, f-V"&V9S05"Z#ĴkcH , Pwݣ[RŠ`~Ѵ_5غkYܵՏ$e{PԬףs sSV=+$^a"ƣJ2Zy%S0^ƹܰp2+-0 E*xY^nX; a3U}[+= E >&Ki V7i@JK6w{˹Sn+v l+KQbuT׬j%ջvLe\(Xba,BS_ Z~ ixH,%2u1Յ*„j3nh'FA-P1) RX)Mcl`17i |%S(hX:6J8K{ 療״@nPAiv,8 oI  ^S,:cP$V_DO=|ǒYcN`5੥m{}w?Ku%ud],=Fj_s[[WFZԲ>-52Sjqdgёq6_sx ԅ&\֨W wQ`ݻB~HB۲.)qP0X>ÊÁZNj pG -(%pXJE KPW'nT}lb-D334YYKVQUx#D9#|JVT1lRC]̤JaN7s-O3#>*P H:fn4USKjȝ6p8VZ6ms{@ XHJX kqFSl`{!F)VV`2Y̼#[s)"YLQ: pFC-٣ګݵUg+ lĦ\ PxAh;7t`*E.bn}1Tyw N,PMōc bۑevp@*Qp6u4. EAvL=1N#T M7AG.o @ ezXVQ\IJc=5qУ+lITNK̂0f!-PTR2Y(8y+7ݝ1ҳ2AqEV'oЂcգ/w ">D%VbA5:a7gƣGŖçpW=C|n]x3㙔TS5S-~,8=PJEeQx:0)mA0gGW.Xeڸ.YD|D*|1| حE 8/w_Jg8ZzZ7Q[ fUR񈲜̸Xҕ}E&es"S\@2.S]lrp#7Uo^}~iLQaT7^v  Zn幠9,R82T*'QZĉV`ntÈ_q=lzf^UB+˵ݾeT^Yk*Q84׆#+vyE;AE*53~FĥUrY.vnP-blomp/m^"@82F9m.PwqWYo|=G܃Y*R}4 F%7n,pr^>Ɩ7p{{q Q\ҤR.JQafUјsOHQJ//7\]ܵfh?BqV~"ecQ ypnY~*+fxnw.x*"ܪ67rn+,rT`n{E},_ZkE/?-UTlb P fYC*ۦF=ƪ kkVc|L,߱=B:طܨ fL6L iK3y 8f+\Ye4j%maڥLeh\cj3p_9eqeb;5qR UZbj2A쀉zJUUTQ(y@\^pQƬNcJ²CwRR.1"ʠjт[pˬ+E7``\<\%X%Y)T垎e)G88vz7~E(-\Xj>a,^28VW(wgH <7}j jWeJvFZW`a,G *W\A!l}rd̷J >缺l 5ATL6f,LQz sib{FM'WF'GFgbUJZ#z8`w)ij8 s4-Xo2[nIWjjШ-yj9]5q,WWw"4Zy?!7bQ:%Dk2IBxCu6X ʷO^rCX8(|~%ZGJ|'a>a/ ,TPK*)dZbf2JXԹ'UnR[8&%ט bW@)L,IAs㨖ѻ;MYrie/P1RةZא4L.nT#WSV`X4IJWmzQ* `f=EGA/_ Q;u*](F9J((n% l[P*-`"+2ub:> iX5c+C_f ^(s\h9*&5&Ëy" >4m||0C쪂._5Ī9=6$_BҢiw]əܾaijdTH0AЩ@Y}n.baJq*+~%][%P201.9jV]PU~(O)udQ4YR5Oe\`d #`R Q[wψRj әFʰlWP"#lXQ܎eH,M*d'<U(X ps FEnZmMaI(o1^#Rd;}pnwo9*FTlEYUXōAF/ ۹p4"t17 &]9rs8na$Qcn:2,# e^S`:UJ\%M[_q.BrE8TpSW_`&I!#Fa[MAnbP)pL<ƀ^o8U~To {j5TS i]D .jm ȬZ&6E3%NK4Zv02ɞTR^?iB8@aJyJ4Q\281g cj3_0# ߙCP|H(|LJT,k@t)2" đU>ng_/ǟ.@}bvF !Kr*T]ec=$]mW1ŌGZo9 JTkVO_AUXʪ%7~@^k6FoK(!~|@l*4E4.#cv?rZs,p\/rHR^ <;({KT.!m ['9V -EJ}%zJ@, +*q [nzřv3-@/qWMhj0)E#R-vӅy9'<@n5Sݮ\25w`C밶Z!dPn S4"mn&kuZ⫠q84U1`/{Ff"B]NI%4'˗ĀށWeކU.% ~]J(# Y rNJ3Ē]h|LxG>4,l]QD墿Cl{} )YO^or*өB[ ѻ),CU9KW ͵ VF9!ӀYn3g%MG=DiT\vX:~L f.-J/8*PZ^\h\b$J-oWM8WQ"r 4M\8u*ʺЎ=L=̡B4`lQUCL7 lR\|T̰^kqvٷKmx%"nL@ yE"4qEsڱXJt*\R1eׇĹ0ǂՙ_P\?QZV 2Œ]sFV5;Uiİ~8;K 3!˘9*AeJEj"23Y.1A0`1Ia?YB< {rRM7֐Yfe(<uR@ٌi}]VBh%C|%q&yHUFk4{x*x5 !E. S peY0xi.؈]^k![H٥R6Hcj-i,ʮʣq1ٲQfh {GC"x,{E]l/9bI4EGZZ&rȂiK+9eӞkr5_RļBS!ȄGԵp%Q/1­B uw t?ؘBM9jD!g;F$?[^8%הJdh3 A\$<9Q#X" ՟Ԩ*h Ɛ?Y,_gUhX ^rX .loo6t= J%Dx%1} ~W4ZS\PP$8D+V٤ , MT "ы]mD Spo÷е*1Ŀ .yA Giu.BAGǥקXq^EK ~}n  \xyiB %,54A5 [a}088,k¶JiP980lŋ0bu+N0xAOy% V/rı7X 32!ƝYo_;톊GQ]xD  AWSƼKCJFOAs8J/ -k b@B~bYe t01P=1yrXKױ`^ J,/1 ξ ^!QR; )ueCZ]ȭUĪVʨds47E0;T+3w60f!km^:f; ELjf&Iyz ADc=y|R6=uY@ٴT51bm~o,0TuE9H; č%Mֳ.71 W/ ̴NFB7a[U߱F44.9N=ȶWUn"nh0E՛7Z?#:kQn<\R= -`X69LBc,T.)0X"!YSlWS\iP[xD!ƅ&娼ou~ct(>e8DŽvLg t2QǾvQNWMckWfK'6W ._p٩R!NB\jpkS#O P+kv6?LTsv)kS#j3,uPЖ.bnR9/ .UDO ',;P9d*+Է6-x41BLs&(9̹ןgi"d P"~eyE˭ D `k{[F"_yH8Jj2|K0匤 _Ĺ/˛4UW>AEǒ7G^ ^o٨HUEk8G4/O2 v+ ]an_%g Q'B? 0֝/f|EC 6#3 + Z0D@g\{Aé%*,ABtbI8a᥿ˠhM[>_ .\gʹ^[xSTZ#*veA6euC3V5_+-E07.h>7dp~[rq_!4A INSfżR~Z?0M{QoXe2yruV-M?[twIv;ec O]Ҵ~9%W׈7by-EU e` pZܔ?6kqr;R`.;tAX,AR 61 ;ђd + Vu/ =C#{P&~R0JѽS ?f} 2pGXx;W g`y)-lBU2E.yUcw . 2ͱo75tKP]WXilot)M殃\.ZrۖoyW0G`\3Xt 9c;C5F̵D.Q3]Xð`@S:Gߴ) iݮғEؙ7{~׋rAL.Hu@_bIb#=S'nx ܙ*-sʬNJ pyYHT*F-_ 7(Tvo3hr|•2◊dg3;PŒָW%vŌ/^^C yja- jg1)/|EDb-Z`~oul;e/ ڏ 0HQ E!M_L7XGI&0tR{RT<,]WM.HsJ9|Aۅ!#ٟ 9җŘ%s5*fK@u',ڈє A0A@LdE V臀# y `A#Gf:H:jQHkWʯL ʖa8X-1aazn+hi*^kF u1L@9 ..Xb duDjtUryp {&m>!sf:]T(@P( 5͜`eusĸnr}n󋚀 f`GFUL9Z` @.OR̀eǬlj!A?xU vs>ҜKU{*u*XAȔ[UAEC̳R^HET ܾs]@lQe%yl{,~`Y3 *@[MAW% qV@ 0dE9@;FQJ(SK쇴3(w0bJ;nVO- ʕQ^D1*yER7(RDQ(/5G-c)ϴlq̢SU Hd+(2˲\p:e^0Uʄ Kpn 9<$^k>5y֠Z n; ^Q=WesShbd.ԨZOyLY5*@Mʃ$&^1(&Pj f̦ 7+=óA\u4{C-fXo1.%0tGq+<0̴BaMQt$KxLTCzrDe{̥i٩CD̤2L[pbyE>^ 8\Wfadh=إRny J!2I0M. 3+*7,s `֖\`ZdmV!a~%u˗m& &=$)T3 Y#&^uh a\"o 6` vH)`tZ~ kexNos="lc89Ke$67jKp$tP?ӕ4KBC_ a/PF\}!ĝ9MV!M <  qbΒl+Uy?(vdYTc"t*x,\&yҪ>7fˊvd <3yF9ĊaQ ֡+oCP‡VFæ;~XM@|7-8ݭx]*,1r($ `@(Z0LQA?g% `!!$^fWOW[үX`5vZ4CuŇ'H0U+eKX P~QeYG5LJs%$+mWq^bq|"TH4(ieΞbHfۻLoaLjÐaŃ1Q/oW|0UJ'kfSĹ54:yjn-FqV8jwlzܼovj9/S!|[\Rr(ɞ:!ᣖy͐ %Zr/ Yݟ5.!U_p09R7PhB)c l)笂y u_+W[Xk1Ukܤ^ksjz )⬊ L`-x&D##;J@crH9+\ҙ_F`.( ezc[ q̫"N>cSEp q*?zV[)S* A;|PÏܺHmĂ!7E']n!Ac2P&&dF(c{.ap. 6Q|(Ɠ+yC 77%ыcwkbCi L*>20< )fJ,>Z{Σ ~_`=l;|TH _*KO+*MDVA]4 /UG>sUR#)s~y9BdK|A v_X_$ sn//F\6_c~do qHsżK;bX,%CP>"ʶS-}ۊA\@2CW([L&N>fzb ͡/@ &cm7{G+1, q qB!6.DϨ8kW͐;{Ldf-<G6̺ee(THǼ|łGPV1ä 5inYVާ;ei|0Q2:\oYg3n .ekvV#LؼW\LTg6ʶSĨ4 \9U> Il0q(G^6@/ԢgV3®E~%Z&^aV%ԤP'UԵ_5K@K7[Ű ɈFk( φ?̼>b&*1Z\R{2-`Ni;(½JN7-{ ոKPA8IL<\*:\8wWW jb%]X;ާyJ{m :eE (XO qZZf$[3ƿ*Uv/ؙ2+{"r=o~,_dL̹쭻Vn.8bo\9]%x:sQQVO?2h0ql+Ƒ{9}= FƳ-2zIu^4-/l*^)ͱWtt*&e`UmڗY hA3yQ}nh)IX 9!l uf88/УtWTmXLlbsp*v\ҿM,|uJ\%v`X4@~BBZbYo2A35gG.%WvTkJ6UqX$nH_5p_Z#?LBQY3$%g#$%;j\Žيwӕ%0G-]Z^s9LqhOKM^K2n+=R/_~*f-=XVrƼ JrE6&tnꍇL2%:F#Јvb m769{2 ch ahC " TUR,ۼ !X-0片zP뜮Q}k˽ ħ/E֫4,K#UnyÄr[IǼTg@R==_.7}3Iϭgҳ+|%xJn8Y&#jLcD>m-\@j[Ԅ}>"EÈ).jIt,YBޕSЕ6l%N%]1q^~WǧdA#Ef$6\ƷҮ9To $BbIa?1(ԳyM%J P@bs* 5bq1BCXWL]ΠL Uw58'+R1 HZ, Xl[V;٬-zaG-sQ@bXcW8Ә]W(wMB]q@3v(Aee(_/_y&߉YJR vX_CLB Eb[W2Ա^U<.LՈÛ->Q{&w\T6peXRQEZ:"VMOvU*!IWSF/pkdz(!e3!t0]#јK)kLis1-hK9zI[l8OUܸln`w-H+Ǽ_UJ+4O+e-)/[q\U߈)jqV x,FK}p‹n)0J-Tj5bg=G؇^VஹXaJ%^S״ sq#TUow>SGs,(@V&N20_ 3]3[ws\`%uyU=|]1M ;j{3ub D kaN_ܠ3v˃E>wlw(FynpM(*1uw45MBչK{;v.*|Db%`ڢ 7Sԣνj]z%f%K&ZoN#OCQYM<_;p +!4AM3W.1Bˉ"E5$iaZU- 1S,m} 5EJk]118&FUh;"-75es ]z QQV#Z[*ǿ%ZNE*7gS=q7"p๟`weަGԫXbK>Qj{K7U J4F3\fh3]ԪsUs,ZZ,TJ?h!xΠ[eq %‚81:Ϋ.vTu9G1 ?knQlV/5vYeFZQea0qU_M[VZ"]>%&`pWk%6aGi `7+!9Fa-QKF~)|E a=n0}.3h8-br]FvXte@bql"x5cK9eR،DlR}|=9x=P|DKqJng”I"JJsjb4)8g(uPyȇkCP(/ XMP`yQbG_YA8 3jp:SLh&/:ՙYbҀm c@̠UƑoQ% y8#m6$F(0h{CڎyQ>ҟyYBi슥@HDxf1yYu'?x& [mcJi1.[-a ˠ5c?L,f'4EЪw h]Fl@ RxMU)m*n b̞Ҵ>u2ʭ.((5uMl \VV`d=SmT#]jd*^c"0xkl^LQG7um }UʗcjKp[^,^N7p6u&Cw_%Q|%3È2˂7 X&hosS@يua$ `Pḳ+QSD 1,% QXVpBnb+~%%{yb`y1Pᔺ"ȷ˰sϤ/3ktqO9LҌkScv ^EQYefPe: TF'"2SM㵪kQFo1Um[]Dm6Wu*/z;VkA@`;! HK ~ 7 [7o[vcS.jX3069Al㹷6^@gPE рaG1hBi\^2VРʃVn]i@V yyu39/+"n {Vy.!ilF}Q|KDYF!ew/U]kR`w1\ws %5w|qoUlGnnSZa>%צYM7"5Z"M۝ZH!mvWq)viKxy԰K ϻP3wI*mfh=HIy6 h8mRwֿl+l}U"ݐxb&&J(8n^e>+{+Wl2 W9tޥ.Ӹ-f9f )mc&87@khFJ-r;1Q,JKf8-xL:-Xqrʖ; 1) (Yzu)f>^H( qkXo:w=l Mh&'F+` ZN8}6c%J0qhG>]zĉs$VE1ڠ ^&OG jV\씄\kI~%6M%찄 ĠnUxSwf ]~N{\m;bx)G'#3f49PF.4qyow]ƞNȘǠ`Bxp ׈ѭ0SMyi fC6C ΟJpr K(qYhtn bLL^ 35BcRf!l#\Cx A:Xс |0 TۍKʉKlhx?0Tv!rUG9#-+R =1 1S ~`%" ۿxE yQTvᨿqi=Pǹ>`&\!4J+ىXD"RXs[1aUb+ɐfd|b3K;ݻ:EN<:o@ɗCIry^#7(KvRMS/uE59cE?7>Pw+=iYgO6x@tqGYOg*u0sKxb ̪Ue/@+lC2WԦ  `l e/_:nm[}y:܃EW.([ŻW,"ʥ3T18EL@:M~hdUƯ3i 8:P2+x\y {lO}*PXF _c6j&V/XGe 9'1SeTZJO ty(q#T,<(qOsP:i4+bҳyIm]EH.t/f1vT8kWuJ[O9)i,Vk˾ n X3?7P5)J$੅ AirC 03Y`U Ovz/n-M&uW*UlFp+ac0f5.`vVKMC^ߠTODTJ/\z %b|R-T\gXH)S8u.I誉pA06Ϭ~a# ܥsܢ+ZHRpCV]#a,5Q.P˞K:oؖ`y-yM\4e9PxH6**2S fArw(@+Wཱ G}{ E/~S2ӏxOhP>'V(]TÕ/.= b&%TP+|s٩; uy>`I-d3h/F% T>!)UTz$RK#e~}*}31!ٸK(8F֣B0rrҬJ!Ym.gM2x595 PZse%9n!Z0QĿPWxY18APH?͌? )Rm\1Kn!iܥSDKP'V%j 9ס\WL6 *,k892千`9<*<  YMFn=Q! (NeJ _`*"ޣwe2K8D0mY .5c^3.Ͱ-8q*94"9L`"A(#w0c*UWZ}y/vJA`lLcuKcyDJ}j=X 2|M8@pnlشjY DSn#r?E7xm5,s!2+1P6]HQGCeD-@ Q!% a|_pIK\7\98?Z W5qY+c}A. J0aΥ+%%kf=G~7lNg10"TF j ǫ--W3KfҜOtJskbrf3hɘzRs Ű,3z^fiM\mmV0F,tu)+m3^b+B4 ` "u,b7.g>mVNMA5\j9+(T5#{^cBJeEWQ"+b5TfJ M:iLلiPޖ9|Dc3iΪqxs+qxd6'̷N8 *V{iE;Ua{ۀ OG`~*9POMM3d^H+GѨҫGXL%.by<\|uݍ.׏t[mb3C3^DM1 DžNYGp5*<`4 / g%{M2,kqم$hwkTck%PKXr]5EN^rݬg4mvfZhk]>|K(0#Fůf L>s,r]yf 8?g&E|nM rTDp$ܕA, .J}C+I+ S#幅`lc@1wXBT\yh0_1W>%jaA͢Qt恧g x(K% -RXlH4$Uh; B剠}5iN+E"(v=JڶJ%2u -Зj;m[c1|RԼn 9"YU/ДFJOJ%ߢe |_Iު fE[nsQ̳9t\C|2Rg͐ǿx̲rv9$PzRq:WLUE)RՌ{0vDA[9t <>; lRxs(΢1mܫ>eƗxŮyH"\EaU5hPCSD<9%5R(ӝmmpn8 -&5JqUXLJ٘5@}cgծXa|9**/̵鉣T H_,pW6Z^JJp% xifCM\D7B`> 4yP6"0X4=qti_,Jtf>%̊#3y)l1q27A. P jFe*U;0AA*)&,Nڡ `1`661k#T_6wnw )xoT\=ɩW~LrO)gIXPJbD Y6z ^Dn+#7W~}+uֻu`]g.%5OF^q+L6Ll4r{m䋅a&1j2Du fy KQQKp-5])W.p` -<aIܘAM\-o&кP4 9X!-,8s|Ep dU5 >+W$ZvuwuT e{S2g+v)*Rc, %-kb [ke󪙋(߈1Eb8} i aκA!Wgb1 Y޷1Ƙ؇PWKXsL$(/?y nj b5 pԮ12e%i T-J~JAcY0-*ĵna2֡s͸R%yk" %kKǙ([Z!LZ<4xx+N.6<†Qe O'!ҫe/cퟸ/nD,rFw`:(PEKj'}Ri1j5 RxH}Ɉ8 jJ )HpWVٟ"oMNFjU(90 '喪Ù>X0D5VGnn1dcSaOA@ݐ-YH[c.D,f­lޭȩIP{ULj7ng`Phpn:pgUJlJ%[iv%`$]A? t 2H.|3, RklԠ|]l6+$l{  ٻ)-Po78 R]+"ɸӫF$]^nh fglnEq؏`bZiSuepF]ڲZm /iϘUqݎ hXm} 6i»^C-k Lfl &GYqZS6Ơ`+8lU"4GE+S`F1MD STkfE_u)qWZ6K95,`ز|\},53K%cUikr[*K@iJ 3lv{2n\7b]`ZaM=/* PYy)Y\WB+K,2UDcX(Zǘ>pm=-VNV pGZ^6NpP|9n,ShBfe5/dc_pm% -V*ainŶ[Ӫ9#FF8fJ-[QMɂCS crA미fA6&ᛠT.e_oizw\XfO-CĤj ]2[D. Uq߅GHot_/hYű j(s +Xp$!R`+IJ@_avcƥEIc-cO̴-빨m8~zL4Q]W iFU J+*WuX~-(>xaAqS Xq4nJ[,32W+$kef͚S&RyGa9PaKn6#f󘅰Wܼ~e_14N}ʷuVy9(hќVGP@yU:5wg|X+!FϏxU<?yUBA}ۈfs{Jd%W+lfVܜx1amnX*# |' s<-~eģlZ%@ SK] j)O e:-翨j_m@1*C I`H´:uJ_TI @WRҿpE_03ؖ 8RBE`. m--܁. }?U7WKPU2qAH{hDGlDVk'08[N. DR{m?IU̽%2/w?0+eUh9z%An 8JLm,wŹez/Ѵ 0~= 84oER|fkC6!=..ڔu,n;<]<ZeAi{+icWω%m36Gpq9Lj7c+3uT-P*P1]|^AP>4EY`DER:N',gFV_. x㟉Jw(iyBsR ,o̰X K)cU`8` U%$eʹJ~6N8K+I^f!cv 3KkSZ8J yFyK`Xu`9[gyQGr/6Y߼ |!*XqX/J 5van._a|@Ulb^}Cm]1hd21 o_*5z=S!GɤK#ŒZElAq9V4+(^ùC MT!c^aQw`,qqܫn^MX` Yx:— s5p ً>c=ba 4H Ҳ* Ӹb&QJ[l]yd0ThN?2k݆VXZ5]"x;#[⠯,n @j `/* yTs 1 L &ƟTW|]CTYy#XF2ݘL-[O$Bp򂉫:iPZT[,^Td͈dܴCJ\r8el9'@G:6.n E#MC+o2pLl%`x6("Ew3UɂyV;Urт];}[6_ a+冑Dxh UP0jE9Vk@GB&,PUSGmn,= W6.ulIXtgR6ѫ,zˆUGui~Ȇӌ,EFVU҄JxdDոEkJ*Qqxg4֖u zs )—6`{CQ -(9pY)) *"?iq]e>aeAD*1~wGC+'ԠNX Rb*ɰ΢ؾ=݁"s.:VT@[Wg uA[-9ECWrCfV>5./$Ro&;D@`Qz1%[^ v2d%_2E1+^݅ҕy2xb#1äM |̍s0.r&M ŌS@[- ((Mo, "Z޾cA8b d 6Q`A+9QTxaykz#AH:5K9 8S`~׈DD%DQނ&`d%魟U c`Wk+bĩz5Ȫz sҜ* 6ıq Wc#* Rê)sGK9TVd f,7nX=DTML x9 1Kl'Ɨ } X,劗FmR_-),hzloޓA> K)A[)R&& <߄Gx(U{Rd,P8]=&.D-Q͋N%6ϑ8 * ͫ>f,+P[‹6@ůrCNޗD1~ӧS9CZA74M3Dէ J[`G ֪yN=`9OB* Z}C`/8>zm&XL,\טT`fJz1;q[7_Jܯľ߾a*?C٬TslQFJ`<[=B<,9d[5y:T̐Ɉjj"M,ִG ZX^aY^5fNLu<ٻfnu6Z[UA3'Q̠7QUiH8snUR`l@(wpO\"`_s&e\}*b ^&!kN~0yYUOقGRxbNuXc;˿1{ 5%Gv@V< BiԶK `h2r 2gK~!-0GA0H]TPeu}ׁFSq,KSzTV:؎È=Al%DmcyqRŎ6ܻq7Kgd ]EDzk~fZLG*hW۔:Ro R7+4r6 @|wT`#Rm[pU`c QA^yeؿ6AW&j:qw0Pn1.W] eR؊L*8[1,BlD)pVɜ#.i{ EChElJ4hnmer <ၙvQ_\N*V˥')YX_Pq * ׈96.7~Ȏw۔hbKi;rYkȸ|JX2hDOU2J/r#XZu)Cf\7I9x&dn( )%_@z_`8G4JltWZw+z?r}ģmK?Ptz [0W<a]M&fdM Ġa^SK%Tj#'cjx1PKnPU]!&v<,Vch̿KΨ*tQGoHP&??2.M#eD'î ~#ocN;%0olcN#rQ}'2|A8;Y:͚` ??舆eC. cl1lr׮Gcn >دf X)) "uy(;+2l0޵-.YZ=o3#wH%Y$.U_ĻDM_0#W̱yĦ n3nRDKÈrJ6yg*}|Jܨ~Hb?%[lڴ2n-,zBİOK-@!ʫnx7$p96F-@:"gtJs:W\Au0[a`爕#\Jn&t }BX8)fȪ\UQ,;MT/ZD/77^dTpyPn䅰fG?/9'rRAox:D ;0 C_^ڶ_ +'@Hʄ 9-b~/ N<b=p 03/-6oL1> qK|eK8Kl r%OU<7w QL)F{-pnӌe CA+RnJme <$jĵ/X&1s`0UOΎ.(UGkc%|ABJpWJ̪A~&4-Éx?RReɎ 6_ԢY%h L˶@aQHƦUze+ۣ/oY}V P]j%/0Y,j0ĸp~%\VXATnHD9Fb8q򆸨?ii`xRԩҽΧp}EZ"px[`b݈E7>*%6XRPghf{rRuj6U|V*j-L4P|a2 QSJ6J?B~MD[)ܢ$K삅mQ%eQimش@ h![yYd;b$U ^j:j*U'Sh Jƥ桿Gq0FW%EpjK@X#[|/3Q1Fney+f!K  T׼R۪Hcac~SHc;]:3$ጭt'RR<@x9"ދW;G0[C9{bUV:ߍJ;d4qaQ7V|FɣxSy's sԤV5~%&̭ {KIX1GN^x+@-]yd562@q&E-WcFPSg 0۹X@++ܠVXǴ(K X]BYOj/im."L0*4RR5RAV-q3QHC(UDUV>R~&"~%:*^94yEnP.K`f5+zT=%8_)jNqLbqG5 ̧5)]0U@xWxRUU1׉c17 ee]TM{2'ic1 ~=EY("|ƯVoeB1n[.Y1s<*WY1Q50#z1 {0h8~%%L ᏹ)xT } JY5+u1Ja3 suR20[jiĉ\@ae TBW5S4D&&*!SB{D!e@Ƈ{)n}JtbGBQz H(V&q6_+V70Ǡ%=@A?KLwɲ%z{&Gק: S FHUWWky,\CoJ*<rf'V4nR^fLbWt~b\ 'bS)_>SUo1DdĊ?Pn:avCCy.RhD? !;j^cC`ռ1T0/-ʁCiRgK(ؓ yrCA ,Xq╢}H6Pc,xWiDZν>8o1ZÞੲc'1?vH .*Њ&J ؈J\[R Q;M))_PA3:bƄ q,n0TyƴtSU, ~E%>J`xqwm*/f~%e+_ X RT>ksd ]%^u2!omI[ޖ) 0zR'ONL\cT+@KtXR TQ`0E0DS%2(_*ZdXPdmPF2ƢߌG+frrSϼQ. ov, UUJxqS,&AV?jI$w! prtWhhv~4⍓WG`G)]TpTȔLɑ}b,yWQV͋R ݶ}cj[x(fu<orc#]s"a]tGѰ!,ψ&Hh.k~irG䅒ᒪ|5`ΰ_DkY@ "l5 rM,3z}%>g"~-턨^0h7G9$fYdR g%jtf*Kj!K,5L@iBQ#+0)h/5YykكŬ>zyۃql+g.-|Y4ʽ~##YQ]`"HG6X#I:+_O-u0`l#]?*]XH. ~q+2xyԶiņ㋊jЏWwuOl8]f .Tg r*Ż8Pc4D5wEXreH;"8{Fokj4-G"3F8bbdCm7R>si4ۨ -sdT{A`:?Q@ߦ>jkouAMUU.Y#oM0'(P'Jq4.DbzhKϭ1o-L(Y!s(SAÜi%p쭴t1npG‚.83m ]e*Y}|w*b^U+nlmc>*$m`Չܳw*n ,PW {ʟ3[LYFS#Zq | /iӒWlB4|E(靇yٝ˹}|JT0@LLX1?xf؊$1WJpP1^X^mKd{RcZL)v:lZ6 ݁6R\ynXƵ|-Ue!g2,d g0SR)w؆e|)`4.q{kGmWbuq&SG V7PݧI/R߶a+5|x;u3؜C#(q״Dz0B%jb3L*앨y(D +w=\b7qY6S%70By+S.9.sq`ң;{ɇg1 7Ϙ[n[O7(K_̣͕,Ͳ~e Y͝0Uqp !\"7/-Ǯ#2֪`>b8|1Vr'L۩"Z7c x(VWʝy3Nk P, Ff7RMԱ5;3g2=:؁݉F;j`A˘a]I𲡡d聮,us)e7\#{mհ-_f 9xs8ck,B.y4SS/zJV0 94-79גF^bs+}M kcp`/*])b7)m45B_>􎐗 U^.IYZoDGk>ZY`s~f~ڮH37,q#^JS9B j1jE-yبyT6X"Wvye"e^ۊ(WebrǴ9L?r6- 3 ӻB!VpU5< /62N{[vA 1s,u J?C~"Lb~GpM WސKTߥVSö-"TS+ WaJ+{{-z;#}y- ;r8P${ Lŵ7 Zf6Ll:9\/^"4; G`^*C%+1ǘ+@m–.^ɢY#O$1kcbT1ۙ+5GVZK3l^bS:!oyG-6V"0Գh"m5w՜f.'K,S 'i WN)(ip5y>/ɉ'Λ&N'#cu0uU>f +ᐭwD "WԲ ֬c70,q,,"W4ZPǵ X]um_QiOګ G0S[^z $`ܢ(."cĪi\rT.+ 2kK2'q [/(>%z,EgxģjYwl6{Ա10a7Ήc UW*uC[B-Tff YI(x"Re !TADq<,qps}La8(d,h,d:۶[YDPA0*ɜTO0+14:9"ܹ@/g`JN1<"7EV)ZL XKgg$' =A@\+na[co_@˙f1.RM־e[,*^U:r)u48}˨4M# ňE5`9OKaThc9>%)1M:)+CH*gN7 w e$8RVvAZpix" lۉ.nD{2=䕖u3ܴ2 Qj9orcMRt0/Eq?5){z̖\IJb$6-:k|yn=;! 2tK3Rg>"^R 8bf x yk«E+<Q-)|6dL޳P+SV{Q\.<61fT[<D{H.\2F*rU2G.]䨦 Ye[JD͒逕p(m02ҖטaPs=F6 $ ,1Uw\D=)Cb掲DP q[ͪzHa#^;%N6{߈02%j^nrgl^ cLj8 ´Il"#̩5/&L _-|1g L%P0g#K"Uk:a!l|Û TJ)F^G '26S ́i+x9+ 09$ ^{f5+.kQ^\i5C엎.%K}9Y75%j ]er|M[|J@hBTl @71i씰%u7`x!QeT^ P8lZt/U72uc\UNL/0 VM& w`z\QİHdX,DKXZ3 jRY4A<ߨ%KG_ר/bYy=戟r=Doe8!,1 O:ԥKB%B>bG]bV%g[Wd$\(Zw35V|ŹNV pqO`u(505oAgM0H(VKbÙ\30hߙ|h`V ų)qG ;#L ĜlS p43Ө aN NlBޢzVEFU稐935,e/&QIQu0K%+Ml%/: Ԡ'x? o5#Uf%*{D.e>AbJJ\^21vnGzYNs7oQ*菂k=BuZ$]u3`x@kkG+lV!)sRm[< v[JJ|(#GW^ceGz\#hh J[eTw 256*i+RRWzA{,7uVFvqNˬVag5,53>"+:<Ʊ1<a[SO(%Z?iH;wAGxex yij*bZ)׉ShdRL\^~mw(.K " X(> |@uP4aGy*s-FNY f?(4Pg5]- ^"[ -afV-,Iww@ۢ;VQ6s k\@>+& ?_u  R-s!C\|A,XKDiqFM\$)M Kr0 "oi,[i܃ƒ NB/ ¹;*Df5 YH`tuUUE/*_2BŎȷy9`IM8İh&e:5T|]/lan*~b~p\y]2Req"F`<2cJߺ1~fc.\Q :+{qX?ssO{Wnm*1~EdTc5 Ǧ<ΐՍJr%Z1erJe|(m1x/]6RpoӷYf,\*B¾e[%5U32ngSZ<*=K 8Q3-Tr]ƅjf=(n4K&$210"47 R?:DMq%A԰eK%A/2l楙6 AXt`s~e-~8k'17R ewS "1˫ שX w-̠:@. zӊ.Fmp4u |VSagu%J&Rߘ;ψ_0KqiOD*U\7&pZy꿄Q|S2,Vk]ޑ,˰ [f&*Y12"&DҹszA\8 \b` @K 0lX3,Jm^"TRi4t]`嘓geU4 a!<al1\y LE|w0k Jh0 5RWSN ?ޥY{ AH CK( tӃWT.UVa'P3;5655,@O(wt|1Prex1tj9 . N/lS Tɖ.Χ=7Ϟ#E9lױ_oN,W erp;koKyDx /GW+5\*Ø;ŝ!NZ]5/(p P ˟0ZsVW:q ˭exuGaA 0c9*P0Z xJ 47qo-k_?QqWj_jO*ݗͭ,npو`۱{#ZnW̼Tmܵ!clq̝^B8QAb [D*+Png MzH)9Tb%o5aP~}CPߠ+:g0e/Е; uq<1,S`)}GYk-Ps~<`NVepECahCP/A;WyOicz ˉJ%EW\WUb-/v6T|>n;R`K C o3# 5;q8hfG MVtVyNs(ݽG7(wbVybZi+9 y#Kk@i6qԸS&l'O.R MwVS;wԬ\V$ u:%:g&[LD9*7DB^ԬBse1).GYn%n/gj; ,R#QHB2gÒS ^*!C5)mdj6p|Üŧz ],W. ܡ̛1lƢ@Ø;Mw%x3eVW>eqrJYEwGUKƿ13iA8qYf@[7DNaSDaYnV{\ fNXpx p0d﨏S{ ru.$rAI0˻ o67fN]Q^м]խW+.3 OEZ}\ @Vx8mc"g@VVFL!-J}WVT3m76{1*.XÌ&W -$Eg N̬*G7D 6@ c'm+\Ѻ4I^`֜ŲVNspd^W^GcD`,}F7JSpj!"hC{3hB 1p9Ux_l̼D̙@Acu&@̽Ȩu2kYB^㙡0IQ]jR;H]S)3/&VuFe!nc7(knJSf%Yk2Kmw[.[xl%c(\{1G%)3MD%4/)n *zvyeGyIK)yTH1Z%1H+*{r*-Lp௙Or܍ӯ&㵕o#h" :ëW}Dx n)u"/[߉E-‫h9?x hGcQPm:|.pW&lxYJ6`W"JJrTDQ5 Ry8&kqPØےlo}JÜVR0+5+WQ Īٙ/RѵB[ϻ-N> b0-  L2X\=jzN%ϰ,u9 ʮ)@9;l^a\-Ele8:FeYT p>`~cF>ׂb^n#°U7䗳eҚQ!ZElчT ^&D^9{ȱeLP1!e EO| ~zZF~"\ͧ2kz|įJ : ~!ݑirC0$5JüTAXpeXa#D;-iJH2 G$0j BQGq^lt\Jgx;7DSRhnu*Wrn)`Ws5(BP͉BF>ɛW*Ῠ;uk6fj*(5ij"Kj"gyIR3.*\iktu&Z#el7HF@rrE&wD`` 4GEbY%ZlG^Y n}W]zbHF6C\1R9D/-,Y~#ɿN7*Zy}{bsEG 9aM%җRn6p/1mz #ʦK6֪/yo@vQ$m[+8zֳ !1~!AE^( ZN&+xMNRXi* J8p^Nm` m<ŒS\n歸1JT\Uѧ9WbB@Y7O& `K{:j|JN;}D4c%5v" kb옥!}:_A;:oODL8''!;)+;$lwpqHs ZRK/0u֤[ʰJclp,,|#6!\J4MɳL[Ÿw>x\c䘘{|LN%B $E%-@*Q 0\.<)K=6JK3bSB,b;E2hFm_fKFʛ}a "VyN尥aEu?# ۈbr^<4ڇs AB @RķJn 1`}(f=LO w+q\ k(rn B6h0Bڿyi{J,P՞N2!@DQЪr+ocJBF|G)3 9 1+W`e hxPؗ>cc!T2jfJoJ([PՃs &+kJŹ%jQ0k5 3눉52d .+9R[2YW0Q˗57 J_#ՙOh] M ߘR[0-XZav:`q6(v hLj|'1`Sn-{柹/E:-c&E!fq(w|;=_֧|Ǝu2f(cfRb龜穎-Qx6LW4Y*v |79gW)QrWA94Zڿ@e0e͞ =-B0ߋ9uxj ψexS̪̥ӹwyp|s.}+q*U8Oö]siQ([ULf"qB,)#QuMMaf]M"rѹġw7nX@ct YX-}ү\x Z u,̰M{e|LCƴ Ij0ɗ)q_ ^>O{ؗHuL(]sXf]Vk8("AM ]AF"Z,e\bRLu.|awc-:VR4VrݹL655-$Z-Q.Y]-˂Φ̓ľ0 %o8?*@8O7˜ 4I C1m$m(:E>G(UvR!-p˙@:SqJ j6Ѩt’`U.lPf v0 huJQi!"o Hi8LwAHt..TYVu1- V6+],/iK'G,nnfCi о9De\,^ʢT%/W.mك,liUs([|uWlun!N20Z%zbJF7)\X,D چahe M;jn'CX qyة 7.#ŜAzRnPq1wQ/۩tR`FwD2TiW^ۜ[.b3vaX 2b/nS=)0/xUbf AW^ PƣUȺ*8TSn:+y̤ުj1X\laF"{(U`wQZUw nD-Khk^7Nƻ' gn%\oh, ,\ZpYmQJufyx_AEzZX깖h}dcT"8sd49̻]6K 얡B&qIѨ,OU{G9" s*f $) iqfgRh2įJo+peԠ>؅(Wp\} KD+u kǡcE7f \J3tۀwuӛWyM@*eE@:ĭ qظdL&AO KҼbu8]ˠJR 5Tˤ8GD\Gz7.5.̒[n[U߮_Ss1cS8^ԩܲ]eMqFQCaTǔ-;AF^,47\S$kl6"μfQlq ԬTsq)QlG"=ͥGU]3X%63,,DfZl<ۘUW ^+GS}c^>mvPĢru/x{kegm#\L]=R9O|]_={N}ՍXs ŀC3Dr@4QPn-tT}^]SA`Ew21 [KW`s_Z1Kp dij 7DpF/+9*:F#-8ho\C469+CnڻoUG6ܶZ-RRh EW>}ljm٘` TوB|4E ԫO3O&k,ÍG\.|&Kb,_AUPV(8dQ%@MDD jb6Ah^ZZ%^WJ1Nh}@M hŧlږ a ı2UPoO}1"6N(\oAĠ"i(Qܰ*|=˨"){BU}7xdu/"R%Cqǘ94raf[ٗ^"J[;mnn0OY[eՍTpT 0&8 g2dd)[8 @3R]T4B#X“"05cR˷z”Am OVEcv0uA,]xj5dfΖ%ɑ 1Tzx(ppLA@:mZ B V!V!*?T(! 7}FSE} e[.l +OWSoRZ(Rʫ(0VeA@煋j%hqpihP%72.iNPz6سqga`r@QM}&5Lpq%gn%0:mQYHRw3Q6UeB,QiBPʚ!Qi,XSl˲U+)C jRdb l_scJh r |.0~kT9 E\~ $׏%խ7a-oCr|@KKѡ]D 7dҾ*i( bn(:SCmr "ی}gw%LnS`K4áQXdfA\TID"esxEw[ZԻU;jꢧnXCZi88YKDT 5s˽DR6Uy Vj_ r\B&gpP#$3WA OcsI՛5~f~p0遵IE2C\O^ [To3cOˤM.gDr֔T)9Qin<%cnυ.dsp\sC"([c<Lz J^8NIЂ[,8f|r|'E^Sh; ]Ir*v!X /$/ 3zQJ{#)|EX ,+5qT0bI(/AAEuã4e"WcpZ9j+nR[k?5KYX&eJk.7WU, @ҥA:"tBfĺ.^r嬦 A#GU_l^dR.938n"2J8{ed.!,F7ac"bH%5sS,kVs.' ܝ,W( Z7;VM4>%(UE4|QaWeuQFBՁFx&L.QNw`6b\q; G3OEji3̨hV gK=(M0" ń| ~\@c#lRmSsu&52aaˁM0 s)UmGn l,Z\a /.z]ͱ3{k*{0qoj3m{7eX};gqL ecnHmo5WAeʴ/ĽY ANXwi:Ռ0b.ځ~["ĻL s1❑PU45]JB4׊Kk0F[b5_1 ht:3*XTu%ⶀ Eev~&T[\o:ߘ$Qs2(YE4=R19"+({/j0{ĆjVL3_m_TOBB(1 LrԾGP ~hVxfxRKoxq5^b$=ZPI!vyy~R6!:Qڷ1F- 4X6Q@:H+o{s!]:(*Y؆n&ԲVor*;؉j0`MAA)qܨ2 h2f4@RK[N%E`톄u/ej̀fqw櫈ͧ^FU`K6Z YkU}*َ0(t, mm}ƫћ )_$Uu EY mier%.oRplZ'\JYZ~f%m-\ٲ\G+ ,RU Y&Ŋ7[/%/[^ZP7HC5P4erR3+o*lQ L/Pc5^ XhiEWLb1˷lLXM|&9ޠWBXnW-.8Rn.0XG.f+w3xb۞Q(%sj(r b)_K$M %XĽuf"Ŷ#zԹ: Tٺ2(*]L! 1 eCuɻE ۈp᫗dTRXN%\96wk%/ 9_]SF0\P3 [_b2B @Aj6l")|whPr^*;hm0`ҪUR;P*…70A x_"n 0n;B`lnPj,.]QPw0re70 `5"Ub!}j4&P0) !į /ZvTpe_# ku|BM~ڙb~,_IPWO̬aJ{fQ>sj>d3.Sl󨫓?T(r,"^%W 7P,/w%R#K r˸R-r`WT,♺XgήX8Q&"^D\5>Ѡ]ڔ(n%GZqSR6cN C aVWq !Z]1Mƥt2=RsY<0M<@6oeFWQ1VC]57ia,RB_̬Ƈt J@ ~~ -=͜es4ZAb05f`+UA\q )Mc2]TF]B )+)!<~+ )\ y(rFWZJ}"cdh_g 6n d&>"ĩjf MLQ *Qԫ ҁԷ~VQ@G5-c@ %RE_F̎1[a{"9ń84Td[c3-ÉWM(*GU2f7}*j  s|cR,s3*~x K6J%//#dbĥ φ 1E0Ja‡cb݀(G`BchfUZɋ([>!fw(J[GZ] F-^!`w)2 h"phΦ2*?' qmQ"/Yc$w*d{Wm R8㒾\!FRpk LcKv^XVF"9 SbCv4 [_3<59*![{_t }am Yן 1 dۨd[  VA+d>%E?qdBTEIV12C@wob`.j86NP ꊶ+&A&1^G$+o7^Ziw,d`)`uǙҩHR+v IXw|b_m\ѲQ|͆:'еy4TfYH ʃtNd> ]PǼk5pq;eū0 ߘT8eN4S)ӳZ&1hޥ^Aϴ`nf*X⚾w2)KJP=1EU.gWSw4|963|@ 4D-_8ERJE"x ʰ"ۅ=DbeqFb)f3&L;9 '5Cd(0j(BmӔ4eyq27 e1.Rv_9!Hhef_0M)̡=d^ [O;9kptƝJ|qp\-^؎ YJ>3bRdq\7Y?!Zj!y֣PE5]ŪK^K[hSyUTW(r"@Xh N<ȼGZ b6z*),R!f]HXi*j3qFp"~(ME9g8Z0.m߂ T%Ou(Y)$")nuJlj$PzQLO51X N>&2իf2+:*WWRh_iI1!Q ] Wwh , ق?8HAߪ>zΣBk XU*ػ< 3ىDՎ L222gwrRz:z1.bnnBuMmXUJɉY.0(覾ao]-"\@+Qs)Q]KA-˽KBn 3H%4,%~IaD-)nAGk/ >Ž P Ùܱ)uZ4* +[ `v|D V1UC9Y0269e[1x Z`IQHė ]&ߚao.]L f(0]ZyhX]qF%:7g&uH"q)KpC y.3TspnX5̯(o R. 0Fd:8'γXN{CU@^!pw}6lo,Ve p7ii5fGb`Y:+"B(#5(/!Ly%]1*h1n⸳̠uUFU @﨧q̹ %)ZAM/C\[8uNF6U.] ZDjVu- 3 k+"upz U])bp˭y4;$Vv:K,K%sw[ w2c|@eMr2 t=͎y &8f`< )+<\Y^BMCjse^y5Ds.e9u*ᨺ r%לr6,zrqd1ƃ_eKFL9Dt;n041,,+JfYDP0Kzk;Me)KNe bfeTj5Mr8o mU;$Ц- ؋x̥0N+ /#0==.3g/I W\KWw11[YsX :p^ @|%Ɓ= B@V8 Ep EU5I\{kܻ1Ivd+5˜ENY w( _sgu(.G o1t w8`%IUas! 75h*lk[mW aӊMx,^ `TZ9:ߘkh>`(fUh`U^twxRpbÜ,1lUnțYګ06cXk[bԁs\O+RU.PW܏2"Uέ`-1PQĴ}h*K$ZguK{Z}4 !0gPJp)Ü.ó8rjk:aB9_Cpv z5eҘe,avΥ"op'cpPr43r~skg-w<SrpBm6dr MhWRk-1Bu!QUN Tq-,8^׫*91nc-{+SekTH!Y,(wUsi +a 0f@@uE &桘ʸ(sEs;M*1UK Ra3ejYK!p1B\J;0)j01 $sMˊDZb#R%VnjPr}9+/$)4TJz)2@%5 2yNz16gԺbjSѻ), /+r[` FV P:rP(Q ]?\{/3?SC;slU{@'V1[P*Ų %9ls-/+E.Te^kHfw+PÅيoQqF$Sٍ=OH|?yJ wg-T "< YC8ЮpΏ ),1Ym0@(pf]AdX, |=wux2Wܮ>Μ%7# vf|Rk=[>s _A; CM7@gj@Va{$؏H N%xf){\1}l(|0M{\}%_šKxeMR)Ysb@c[?1AL%>en(]@_cL"ү]$ *t(3 \$cx dk<3؜KVpA"QqE3~5vqO9?xk{/\u\wyEA1p8Hq+j`AXW R#oTlv[PM9<:4`pD ^>hvX6-z< l0.V3W bh.6mDs7 ^'evY!9\—)sEx"^r,MBAXlh(*n#+k~Ym~-!,BWA}{O2vj_!L9Y/J hTH[em!D5NVAR+5+%clCPN,zS!u6.TdKSApEV#qk@EGR5 !."0kx^%FuLZQXhQ+|Ef%łdxioO D` |ŀ y*nh⏈&8DaRn *> EᯨU)Hcī}֮!=3BjU%%:>P9=!) WC'@SmJ8Xmx ^ʜʦj' Tr vLqs3TRD>Lb64T/(B\uUshbYīaz6HP4ez-_B8(z_4fh" A,RJ8quQRB `ߣRkS#:~*Gu)3`fWu**/Uj!dpcV @}^3kH}T hn0qlɪх.eWHHv]/Q9꽡䍿&<1Z/!LjWP7.*|8SdsL#'Z*Y (Klj2l;#M1i+5KAAԏ2F..c[LTԢaJ 0pIva Qbmx%V׈*{1j4ībn弽G.LԺ iq Ul5^;*JnĔĦΙFlRфL.Sija ĴXYݸ΢D xb*I LU+AZxdƱ*6K%.2VtL'"ʌ VLjܵPdhis/G(zT8Q&> Jl,jaciEnd3f^'#fLF Lgi)4ߨ{j'Pj#jVʫ=LxKg{%bQr ͺ&+)R + Y^+RJJV{IĎ`F95e=M'o+_M%z%z'zk)>2FSyRa= ܢ!SFġfY0'5s쇌͕%+R~%z퉔hKGP~%3WRn%:̣ĬĬT38J2zJDJLkQ7+(@_Bl*"^8ss(R((Kf@ef L*S5AUŘ@1*ں̷CaGz7pe\5yhKͶWS wzĦ%b*$3G/A+KK>C߅5}f٧q J6?)jQ/=`ܟe{J_ o"1ȿ4x|GI]he0=Xr1.B%uԄ[6(+= t~O0܆51d}^$Yqpt*>g{-WE&Hֽ~ˍ~FpoOs5Qx߼]>7-[5Z ~r~.:ˮr8־<ݏEÐ<~x`!0i-o xqg_!S_+x(e}2O4i4ql]rpo,/d-(W~/ߙ>bxOί4N 1!fc0I_@ߦ|zlH\F%džRq32]DQl¨p-qb/DV{>=f&0Z{%@A LPSWG0+ YMH6G$9-FŸ=&1Ԃ&f$776uI/kْb@xWgQ McYܫd~acleaYU3p9~ӎ6 P43q4İhAuW.vuQ\@Ut6gP4aQ̰ RŠG¿xS7 ^kj5*A6 k`35(6+dYBP5hSiU]T4cE]\'pGmEr<014ra[䉜feE]Dl\ ~#R匦AJtu]joP+&@G'2ڢ}Eb8e1 m2#0N!KXH;Яr`9ly] U@C[e\47^q`a@fk_{bE^%.di<ǃ'#;.q~`M״KYDgQ,i+,Yw =fM }֕6sq~ F}X S&^eQgl6Sdϱ4SLj6R*BY&5)_ gp#2,QLɚOyVJ43b /B '}3ߊİs*]K󉋩ke߉7u_08Zᒪ ?W}UPnaq:'WQZ)u#ȷWDoTjc9xeu.bg5,(Ƣϼp^"g4@VxPS<% WN{=@hSАZ\%Dis攩jG?_hAfQ+>z7_>D=(qߡ‘Q b}&}y'q ͨ=Kbc !c"v̶wƼ*Ez/xsՠ;pdL14 Xqc0U+K {>Hu,@k!_ NDrs. m%uFZY<^`3%h[`X40r/INb*Sl']0qC~5 Φ  X{)}7AsKXj"GPǣQb,jo)WP5/0urQq[-PKKq>uh΢vۆO>bL0>!R7OPj̳#+2 ŧ|Fɖ9g211y #X TA4l,j` .9f)(cT`JYS)Xw(BPߣBަ ؁Mgǧœ\AfLA$ S`.@iUb'^JǙVAO+>G.&11d1o\@(*'Ҩc耭µ B4\,WQXo2Į9M ㈔,jd7ƾ=y8aWK ӄ 5^\mb/{U̸ګZ95v]X`k,uNyFEIF; Sj)YV;Q R.`'tmWFS ajDVYVp9`2,e%Z{C"G#\^VdBqByJ s*ÉEV0\Qwz4tA clw\W%iZuu2<&7P0.p}ʾ*d^7ߘIxx5b5jB`q&sp -S0;|\P.(i"s9:kwܫ}c^uio˛doUpp\߈1hun/%4!YU6㸸(MZA 3*WYۙj:udsYvg "ע+)0FKyiRPqbb.3:ljE{"P Wƽ.JWsB1(Fe6b2cdzp] *9LAϊ@9>i!kꢣǥ1u|q\3ts)4s S>&afx {M׼zd^eQL Q/dJ C n!g Y-15ıESn.Io^&{Ka~b*yxjsU\7rxng,'<*ssQ YSiɹk |\4-pnۙu2ŮQ}/8,94h#,]b:abao%]oE_rʽQ򏴥@i=pqA &>+~%L7ȂQ` Q ^ıZ?Ceu*KJCDT "k*.-_0{aJ!S+Ue25lLc "VZӀqANey"Ha\ʘ)= ӸpMX/`ϙ}By]#ҵ'AQ`1W%@ N[ >je5ZiUέ6|()yn8GC ? Um<3xfqIsTcۼJS̱^-s&}^l΢R9=Z0m-{h_U3ȵuOJY;کXQ*Ә gbl-ph }ܠa3]M ω%>ˬoT @R9Yd\}3 j.1㑳-BwC?a0nx+9rX}+vxPRLViUUCu+6}\ \S6枧\#biImH1,`,>!*]9Q\,<Ļ9c 5d1\˷:!]EjXPA@fu-Syz'K {;ѿxo=K.]ߩ>!\}Y~aMfp90T\:8y`9zYr^%A Lezz|29mMFqcp3c/p1+)%re츘smt2 n MŽ^%/3bNhϴ7/K,9#IG^ucڜy?%iN{7k719OUZbspxu2Ly:+<K󘻮*e[v2ƢR]6׼Z\JYE8Zh._08-X9oiiM_?sbIJ̼c-uR|T\ν4&b{m@@=TF쇓6kC+:AO ,/.%MTꉨPjf.0rEl@Wq. JvC^C_^[( [d zQ<@YX1м\L:1|(kb3OicxJqEϘp2u)cw|ԯz/6ˍ1ük$7eUn]>1rYefq˯22ǀ,2pAUrW_ؙőE9.P)=ImVxP/'hѝ>X*ٹ9d`!XI}1W5H[gE䤦!ZȠCaT}%/ȴ]x)}(MߵNoG*LF$ :M4EӒMajo'P[PhiPf/!z&CP$.-²7vk94?KZ~!5yM͛Wg;*@ʗ2V6 /'8S™$NQiQuq%[ͪ|1 "YU2Xӧ2M895ˮp "s*@oW0%]dK/a_*&Cl"/=ϧLÆ b[5|Ź\-q-~Y]oۖUܾb3n)fUXhΣxړpH },|Ã^ jů(*7:A:bp{Z(@usW/ҰzjpoPW"Wе-rE6ͿUƑ"_AqU =&^}x$Q AeQ&[jPk$@]mA CeJ-[܃k l+[^JHt0Ch*vJ#qqĶ*:ZM\Ƅe ~%8@bTզsЌLDXq bT0K8  .v UJ`K{Dcdsܡc,0̹.uBAŽ4K:!r32vz;_xHC+! -i{ t;7,b*K%m| ":mԪ4{$@Yn967dJbUnYU?J!dbQj <\b3'i- LK]ę?<@\4FE-PG*!.:KEy{1dIZ+VZ`B0RYJէTAx1\iQt\Ĥ2RUQD%KFy]O*_5wp"2P_8M=^2zהK zqpah~eKSaZ=+>W Q*G_ x)2b8(o _\ˡފ!ɤLܫx!pB)yՄ ;]M!6A"K [G ϙ$$Aj f qW<;bZeRƎ)vVh/b|@,Fi4az[W[:.׆=E-|AVHQKql噑X_EQej:+bRO+fuF2uXkqY*yi1YN#󉱆zk]œXx-;k^*.C1]}u3\_;[[\uV _,6UQW<ÚԨTMySt+Q)B|Ky.92y*khv 򒅈wU-5eghtωCIgw Tk;]P} ,7C=,qB8"[4Aˈj]92EA*%@"#A &CMD8@kZZDWpJx\Ŝ߈ȭX-w, B,wU:-7Y@EAvXuFO1([W (538^ژp̛ZuN*Sd0QXP^'0 ʣi|QDw9ǭB`Rqpl`;^+utQ_uP+kTeCv0sn[[0tPZ;(4)w*֞s3kꊋc>Ӥg":<@o\>l ;kT6Yaa["ai<_ʪ~ek OD !-RKaDXr3ɖVll'  _Ìf ^'2g0 Ynجƃgpr9(\:z/je\rnlLNVj]˯h4nߙNsyO+6}3+.Q ʭzi.Kǣ>gY)K/c3U:`M@h&,K ]c;ayFa=U`U:3 ^=Kq_Sec{9ixLJTS-aɍr-KX`y`eE1RJ-ܣKQ{V]]J5 ^9µeXJ;AK;9-BnE$].a` V| eYq$0X(ieey\*i5*WRō0ΡBs\>˦b ڱ9w*EFi*%-N!CRX%Jk[|E›CܡK=fpʾGJ\l䊋jb(Z) #F[QR۾.%L"_* ژ8Ee+(k1T#B~O߉`ץf-M?UYŢcCUW "T!58M&ަ&DAZDm0\bO2OiYUmp OuGqTUJeT6X`*3Qlj.$]U3k;84N1fF\b @~&[TzU?/umrJ;& ?WV[ڙ# AMo5?hm iވ_]e_)AstįR7A.\3(ø .9,eiUbm-_ 3yL(P a@M3ZT{L-1ZU2l‹X(_%#jcUU`YjbT[2”iJK%4敷* WX Qr < jPlb*4WW㤵fn `ƁU,1'LpV3Sv-]1ecQKWh7\(5nS-AV:fe08Vqs{E"Dk0R/@Je:Wzq)lsS`u3J`tVcUcPT (sac7yUb6XJU%l8r­!LFlx#c: #\d S` |KAUSi>L;Z >560AK:"Z9 Bw-dp­; HpX hEE@F7r 0<~_0cg*{H7̼~gw1e]8bk:|͏LK85c;LvNpͮ6a\j>B4RV59[Lj3R^`ix!HH>eHS3A[8&3N%'T/kLvc@|3-L _~jS~&Q:f!ШGKnǥzz1Q&}LY̭-`\5b^̱2[8z,H1 e8U dspg G`!_刅{ EqZ5u}X4_0*[pID&\̛_Nw왋85(0u^ngqv^L2'R{KSG|(d񹲅C%{biXrGKƛp =s&35sfW' @1Ms6Wo +,AGKq+hDEٓ g2>5,{ikʁȣUsNW`C?01 27571O1[w)"y'M0Kz1Vw A:Xm2L"o~`42UYz24}C%Y1H -,+S,W q UAm&e֙iyMeij&F%YMnQ&737(;S21 g{,BV0!I#Ԩ@--TL[k)fPy/`]ALbAx.lə_LTUoͥ׉AVmD7V^v(-Gx* L7cw-22bP$A(0oeKO&+"Z &k)h*b78cH[Jh sifJ2"SeM@\% @f#HCJ2ϊUyAY7[U& y5h4傾Rɧp U|aT&]@ uXuLMG,gT"jX8|GPRYR ya]KS2ŖL%{.d?[rv: fʈ."P,嘶Q)J'w*,p~j<|@qweY÷P]ێX^n- |cWFc V`6ろq:?Naiu80Y,;MBJÓC -Ǡץ׭b/[~~.E, J S5aj&t&j56|M<\xpɈE`{[?G6NK4CpHpFZeH5s}23.* 2B!t$+>9ljL1n.aS=EQ͞Im鯨n^ʂns`9qwa]0~cJx؞nEpoPoJ \n<#eJ[P70 [8|mo fQ]Mt&J׼[ucFqQ .&,ݟ\e7\V flu=Ȫ)Q |CQW) "PevT(mb9UWij%pL9A)K1k(2wL JYo\;Pˇ޿ sy:,\_TtE1PR3`,y=rNp 7r]o+C6?8[\Ā0Íf8W*7pls7^Hk{EA?2ɺL-Ʊ ;hRA20X6 NA2AN8"T`:rA#3M=0V T{mJ ũӘ13Iu_]7LyJ[10nSV9`wPjjɊrDQʨ5p۲7XR\%E ),`gd{΂-K/0h F&eDKȜ(sr3.b |q, ܥhq% cB+Q7ܶU49-N3rġyy֌}K4,^"PVs}CLA,ҌAJUOʗߛS@, E,kO2̵ WbP @dg&ݐx-2~e+1m9{*+WOV.}L-Jl7sle!P`&ķ\Gᅮf ]%V9/9KԴ]m#WMAqοYV5ic~ 혲r0Aq+lTU-XC+!2!kUߺ6䫫n]9JxI]u(0KXԸbF˻īT?@]{Ub8Fl[%lk e1 >n..Ⱦ?@"G/3OA"B+2# B.\EF{#7^f7ǡk4xErMs_C_ȵ^eՔZ pjetkM| V8%ДERbQ] S ˃֜"NY&QEkHȤ(LSqPKxԸYe\Tb|-_a]WFn"x\m+y 04HZ|ܡ /;7TM5(/R&krc^mgg]3JbKӮY4B"m:mEUn! +=tT问{ᨉK3EdY_f ٿ0rLc04/?E¯n/KQf:uX|6aQ*+x!f.V<4¼Dx>Y%}1*[ TrBVP̜kvDBRWA4.Y)+ &WTZm26)ʠUSPpV[vQK4y GP0!GeF*mT( M7 *W Mxc%2[,Ԫ74 pr 1K&Kڈx?{D B1 &o1 sAڜkf-fdQyw6CuԾ]̕a٘/KD#D2eO` 7n- % ;/% DϊJ@ \Z4V-W$nSqqLKFd+ͦagf:8\(kt#`ĢdSnZ`GG%{ JoRMY}}kWq,7vbe!b,fx0>R7`ۘ+[c1,81ΞauF]3 dyDs+-baLtr_SلR栠Su6o@/A`WPt1X&;{W]ܫ=MK3̥VNnشA4٘"-\b_v͢f LjQѴ1䉁~Y)#k-0-ECqx ŝh3-zouT])*2EH^Ezb118\e6_3*#u.kqNhX(‡$"N0isf&^3-[rq3w׆aok;[ơMKaA^%UL z*Dxm@s"-1k9z0oP} 8-mˏlUn{DEu`* K%uM%i̪(0=l)FFXЬU\D@RSĩ*=ZkEXwLF%h0oQ/p=: ɣİH(XD>ۉa+`gs rtJR굨"NxjXJ PJ!tNIkCЭxV"/eBT\㥈Π0<@@ X @Kh)xHo1/ +oHeMPvmp阪5MEC'@h5EsF! ޠJed6ܢ̩͞XZad° Edv4 p%*o"ױr<2= &\84 zi=Ko+ U~e`Q{8)oKmU`so׸Z%T^^҇'Yb[^b8ĪJX83 ȻswܭXhsܰv`f4(Sl 7{e1[~ab,#w U0S%V =rTowl|1%HRsB%-gE tѥ7nP^lʼnF3pJ#Gc`GZ>Q6G..RkBgA{IKD}P "&Dactk!oQ)kP 7nQ" \l  6!rIHbj`Z0h؎e4dcuĦ/0ڞd5T91ہ%.Mr7QS;H^Dб5Jº`Zaj^SUXU*qȳ+ h`ce(ƒ[2杵qx9eNuJ  pnU.yub!j/G+Yn +D&g9\j h)9a-Jjdr-+F L>e ͼG5Y"X_bQCt0Grr[7hq -r)j!JN '[ +gW6+EAú6ǿ3 S Fj\FՁ 4YyjB2{lPvn XboPo~sǮJ}CE)/1`׈hd"m ^ʂzLO͢`ɧ%#ԸqKSBPPսYkhK3pV3،f ҰwWW.`X1,f jpSuaĸY~T扂y?x?3-`g^W2%`hp%̜fzTlW ^ QH ~ u0D_Vba7,l 9c2¢onr!12[g* t[͌+M4UhcgwT CUF%Eˠ+E^ךQQVDkwp?;2.Ӹ\. -V XoR)-my9KoR!{)jo2sAsP lRmǼ=ŔkO1BTR. XpAy](JBTF 040 *^j|o,0Pݢ)ZmX 89$,JErmʙam3AIEXYH9a2.1!BaoQ%]++iCeZеb Vq.D(e]Q?1 #N/=ph]^oeFTj6,;TcWrɌpO%Tr\GABts5)naz9V5RÑF;YrjR &J*MXe E!ыTeHX-+>Ѫ!,_mL.jo d-OhVߙ u0!c#(RV¥ .Cq@-x4(l4[pvn0`ɃXZ72uRSi.>f_ĨWģ|A.9G3.po[rWq6_!x%&@zWQԿ?SS 03, ?x{DqPTiIKwqM\9&,4S?0` XVԡ\m)oQA9*vbTNIC_rlJTE`=J"I[1do׃m;7 zmpfNR\(0]GF>`.98gJיMy#ܹzЃn[Q34q41̻}7"Qy|bPQ+0)o芆GU)R Z;HpԪ%}crŭқ>% d(ViIU,-Tkc)o%^PI|lZcqCL G/fr0k].}=H8V$Ŝ8@"ߴ `)a*&bיXP>*\Bxwk~!@H?_WJNa)w}EJsS;nPx1*mPi;b7Q KK-l J[z˙m8W4 ۫h]\Pqk\̻D栊: &2n  i(DRIkB1l6Apx}Ц vHEUrn&j'NU3ZdG/ _{2pi/..h  W"1P)ꢩ,7PV ?EO5-}b}%A/3&$ȕ)DIl9 =ޚeHt71^T ̻QAyUʴ6栂劐J]GK(UX|J3+ey 2V+ l2跗75K#v %h삲kBF rȨ7[\hwFwt @g0ʋC "uVo/.&D˨)4(-]s `Whm~w \AlEF8a`VI-4J8"yphf%" ae ԰'QuJGM`f@UMdP[.r ] Qtcm;^%R;6b@h.OQF7C  R 6g/.3f4͒6^l.-U ;u5ԴwqT&w)uLSځNӂ5L Mc1W{]ϋ/D-"9n:4&}h`-i)a|P|KgW6 fA|y!^e }0͋tN,R-g +oS!wF/Ճh h9p S"_!O  8!Yf.*|<玠lBX^ FȶZ,viJ㻃qV5%2Khpy\2Eǡcp M4qnX9r"\ AD] qܪ'=GL;B+>18 -!pn`A04 x{s0sQ337PG[([,>]E} ڗBy@r,V)|Aujtu\)Z>GRYyQ^3}iF-G\3/^7m깙qdF(gSd=q(1^1ZbXkiQ5[x*^ =NwV<]>kxؠ7bSeWENZ;UK((V*K}-UE`0@nh n khE{cRǽ(Qi XMqWQV8ZI/rh_3!U<@9{UYc2hN0@^N[,$o2Z6:f8R[x+Mn:Bʑ¥YKιUƳ. O,ak\KӃیKpB8G2?)t՘f8˨ܡ\q218;EYyKmc&wO0wxKba>&A i~~9W/Fd{Hph:>%U.*1x>&ھ#o3j4wYM˾*,ac8[5_Y^cAV/nRy2{wf7*L1K"9KX#wJO5/kR'L:2A!Ve1jX -p j2uuPA-H5ߥ7<; \QTA&9DW/*A⚃J9I[hΦߣcYx+QP=1sLjH(z:8ҳShQAљ+Sl2\$^ij=($.Xf*%eZyWPb`[0%"rU5 HUlD)gK˺xHZVex1U87+vj6_q8;d+gyV|]dž]YQig(+9q3{G/d"SX4`RLV5mf)A0%{jz>"`ieX>%Ċ K~ȴESbb({cmv%*٧)e9y/qJf*~&@J]Ze:?KVK AxP^bC'q.W;@,qOqaaeD]BZ- ˹p";xhU{XSXCUhMUATZ~.Sn\pfD/YAB(c/vIAU\.R9X%$8YjJ(Zigpz 7U0QP\rV9 U{EFx\B[4* .dBPn.LeWDаY~qn -i=C1-eU ʣ&CU:<2\C\A3  # 6T2{9ʮXRs!]РI_pxVnuIb^Opb¦Bf!6DU48B KMɊ%$l,gMVXk*kc%Z}EyhR:= y u`XP`{QKR<|ų!c1Qn+ےn\hkI-`8eT8^Prtq|"vXlܞ`$h\F*|(,9?.RaK(ax򚔁غ3/d 'jyTaĦxk#,0L-> n%& qS)NZ0)$W0V"߄@g 1 <0ljƎ 1-X ͝ YbPU^K Nx9&ޢ'0eNV-@urdnj /[Cݏd]/8PeK+TD6^`FE @eچ*cm<S<ɚ7EMi]0YgS{ǩ[bsH7*ɦ` Ids}'[{J\dvD S6qnJZxTmpR,>u7ĺ{;Bm2& 90f*"` Kz 3!Y5r)Jifi;p!a]®Ă^k q5* PZY@R%6n"Z R-/*Y yj6*{Կ+L Ts7]r AX)~&W4l1(4QV4a̠Q!̇87 "6 @ޕ`Z\piZc`][wq- ˺vA-9︗Aqnck2<¦i{b j62i?)Nbb ʦ~#Kjϒ!iNsx)URUĿhK3,`/# g= ,wĤE4e_Q(LX \ 8-"*w Ö+J*WˈM21ԧ) aY0vUTQW^y-w 1caIdD4aS*hCGq6ۖ\4RS`ʞ݄▕FX8AEd*퀥_/lȧ8& rWob 74rJJhJ/GQe.R0Fb ۴wtv:%&b)sQT`\|Ee Gdh"r2rR&_̠^ͳ8*5)aC.+zTs¯~ӐJv]HFYS H9(s%+`P}\cl@"r 5CTK5|KTeJcj&ΥnbC.V61D|ElX|y1+fh+iv$H'w)8mh"ܫDp=;VA4)lwXMe@eeV&n)Ns&YAb+ªo_S,Cg>AiƼdX s6 6 {FNx PɟbXsbZ{^j5n$..ש[Dų3Ay=F׼XfĹMVF|)F(q6pi\1RV ^簾kG`n2'+p;?b,3k*؍ -4]+TDAA`p1R"b X rzeuEf Ej\ A+P7kGG!eq1З*o.ə gSh` r[eDu80;2]~թw0+ҳp.xSb\IuW)Բ``^pn5) q\ Js%Ϭ70u6 c`n<Ҝl\4h^"5ڠȽfHurmՑ4bZK[LG8Z drGȺ-{;; ށb}b78',@T@)^%((]0u5:-j.FX\QeNjSJ@ß S'z^Oy@Kb‰"ah!|S>qxW2PWQJbt0&d46'L^僛 Q}7('"[l j<6bݭ""ٗxl}: TFrϘX.C P;VR4 Wfexs)N{ԭt/7.0-od_`Ej[21E*0Qm"rvKS ,QٶXl[TC\PٵvKJoraqĬTb42Eê%1 b 'h cLeS yn;bҶʯ~Z!c] (e hQg!쥫k#<*'mYJcA#*{ :lsJ 1a{ͷICiA +=IgazeSò!X"Y)/s)VqBޕZR`/213+7nY::%<̠c𓈆 h90 Ru!~b;ܹdL:YMb3OX~!y8M fleG 2! s5+ek Kn$_K4QWwV7tA5e RŒM^6q3OeQ*hR= &M`/ly3|w)ZR9S.[3ZU^a?-n*VCDS B,C52(V2~bT, L0<=@*s4 N .񸢲(!|*(Ƙe1P5u NR6rJA9CȑnCSV);9"n^Lf#//>צ&MGFb!ϙ⁷8#p*6qP 5p*Ӆ8K6\7d.ndn/B.e >Shz2Uɜc$ġSRɄ*6#HT1TVe>B[ DU1Y u4ޡ<'haTe.~8 *iqK`Ъh-xH $!R[R˅Y?GFN ^"4W+U[_WN,4!td4hR@ )14{1.M.#C*Fb!pJlS7n,K(aB{man1Q(*'ZU CEg` ^R+DeKGp^ (Q.x {wٍsBJܠ 0ɮKqYp?0R {;6?%5Ѷ^n xH!bdT;.kk|ݓ0\/XڪܬWi|s*ws|]vQ+b^)U`P<%Q19o!8WluufUK${sZ(v1ẨĪ Pjh|.Ө%i4:ċh '0JR#F1QFob-ͭT8NMAI|&+,:'A,kNEv:#/^QTQ9[e!Td9+bdHn-3U#*l{`D8&BShLL%r*`يE98 R^28>G)Xy#whWWEtu/swl5q }6K,Lj#0[7AUtw`Cw74rj4殇2z=1pP@fcQǴѫj>5V<cedx!lZL:QMhdՆ'`cxĥ*w2sd-F\Cp<&]H yf7OH-tyF.pTphjd0ѡL_SkZYc_ܣ%dS)i^uc"e߭Wpo<HlXҫ1hE)Sy!E(%Y./^,2è71. qpt%.` F AT\oYX` 2 21J :Bҝ&(b-/ONhq/ryWu0fʌU1 4P U^8fYk22Mhˤ\qv/dp۞"s=Ux %^-Vv":( -gӇ/z5YK=hPg<1{%W_L\2Bs-X) 6̲;\,9̢!CpZ/ kU{tj62ױPjayAqƥ0;Qrslk'q/NjmS0#PE)tIJ-N|.:iqk0QYJk0ؤU(Eq/,%_12Ņd]e4ׄPPԷ^ddE)Ƈk|Ae47ر 5EnPAm T^em,|eB"-7pq4ⳣ،鶴ՖbPpWΐ].hs/|dnpK@m"@q YPwd"Ϋemni핓 ]0Ej0fٗ:[ǼqK4-E+Px2yx]w,w9\PJ' 4uZ2{0eEKqb)Wh7E];kwqh]e2]9)c'+F Ø36Og|Fj!4%k 4PwL mj=Qv7ut ^F醨nj,+H?g 薆K(չjEts)]*p?kN,gm_GFXc(D% ]yu'F*\BqRT97wJr)e@0u(-C艷з-Rⅼħ*mR5 F"L_Zӭ{&iڮUZƐ;BljaL W.#p zɣMm([&o6 8uZ*ʷyp`ž}K)*<+f6vhcIC9n*6G 2ƿx_.vێ+7Ѻy/oҾE[0ט_C,?QJiwRL fO "!_39L!iaWub6mW - K*PiRoP8lH K,0 afdXf b`!8㥟Rp נ8pܴ%,H%ߡ,C6`TeP ]}-PFŌIb b@3MB捯?Pn@6Ep.ou ݼ:N"6pL| Y-geiY ˡ2>aL&LQVu+ej=jbJ7-"N=Ī*oqG8JZ W.GR@S<39p)LZai&njn&FΙqJ-s3]T%B[0ƴ⁂XWuL@=?7>`s&Jӈb9>;66j+ CZqq>1.)WQE昣|1Uy]<0\+t&-e#\BL 6.dK:hABy6O18t^Z6@ 0 b8넡^=Kź]!6Tr1ECa`V8_҇a7kp0lbGm!@Z/{8k:d9N mTX !Xlv#a/I-e?8^Xi hu &(~[@ -^(fDMq_ q6\<jӪe=cqLjCF*p 3 ⥈;j*D;cPxZA԰X⥴wD`P[S*8*2ԴJw6mX*"U7h0ɒPLgk0kTw,/(90f4@n!ʬQ|->K CLF+ Z}Wr{r !X+!o&:,B#Y*p-N8!ŲKs0ܨ-w(HxΕb/@F: '%Ǣ͓Y9|'L*4ݐ@7 ?H{"Ze$e\E]^tK$VfaW@UG,TXiP*xB%t nd(|-ηԿ^.8k 1|E!͙`ȮuʣbHJF 81E u/2)uKkP'W/Y%UǿMf_McqSD=K `X1~e?`)e-TOCclw` B,23QG^k5I׈}(nҫ -Oen"@ݺtccj%҇S\yV<;w TKaJc LU]cQFTZj Zg|Jv9h7 \%v&)14EEx3 "̥YVEl|&7O'TDcH,gh%Bxo<*g6ՠ M^n?GOde31 3%[Ofu_n$PDndG@06T1+v榲4`jX?+Em-];)ME^hsqNq SnbLO,HġK︜Ri*RJeOm drJqQ@AIF}G+]__#Dso09dx&wYudRSc-f]vXI ( ص2hy&E `*Ռ઄oq00r!?pKE}DU1Pʶ؁'2jFhyNfYAݺHҗK@\sM/Z/MA@ 1ӸZxe[Ex@ݟ(,F,VRűM4t3a !]|ůBgܵ ѪB~QܥA5Xg=l` rToy.c)\,r ~}CS{ *8jafob da:ijÈIHأ%AJ)7Cr.3z.#W$H 6Ŀp'#pY螋^9ʄNsz& ϼ%Ɔi|/}L5sĸaQ~"Х\F含W.tlEӞ+ 80oc,#KmA DA@lu Y]1]j)),ɽ% k 9\oW&B ੸z(r="67kʴt,)Z,wT0m0a7/8(szw04q5ׇKºh0gB]Rgu,8y9PioNO):ֽ{Tu# D._j.YhyshY(kbqp4wIn96԰+JCb8U[(xUv䅈+ueIE1d=Jb1\ZseJ[Îɋgs-q~V+a|8f±2S˷80Я.<[AGeקMqj<YE/}*rfkVtn% u5Ka- 9f  euqxTŷQPu/B&PAȸ3XYc(#F <`˨8`iVmSs"=彽IL (0PCXޢRy%8>P4jp Э!4nKLEXRan_`iv'".Ze:NgfI栟XIJ&y6 UIy"ڪ%_J`E1 EJ\l`ɿ2cLTah%ox %2̄dyjgA|B9jfΞ#fq3nZ%]̺V*iTs96\F47{ )Gwa4 hlC(&/a2[|.S5ZJڠZ2{aCB`$h:wņ ];\|Gw9Gu)^(TZeXVX7-YJAbzlq/ J([RNWuv˶lWRdYDjm FPE QfQշP'P ǥ\ r.aI8W*pJMDPW:,TGRn5cs+{Rù\) ;u !m0)\ YR4" S5h8say[p4a(w 5{K b*:V4]] N86#pb\kYH R6Ub& ռԴ^]̲'& q4pՅ~M.t:[Im1r -5Q7 xQJ*l-s2-h[|bf8@mĠZ4D) W-;Z߈t+lAwbtpsq bCI]K\00\TO_cp.YvN 65A"#|K4JWk G~cx-S\lm7VDU>+VRpl % K\CG&:F"\RH+hh^.hhSW&ɮ rDm:+* ȷ/V>b /EUs0wpum :ᰢWdwqa_dQ "Ho 5⣂aAEW"e-lHVR'لfu AJ{j)] ucC<@_cu%81 t=ȶr*fڴufsA1uScwኵNkU9wkv!jU7~M'^:`K,E5 JMLuS˸b>./r"=ُZ/8c#EnCC]8bX+8#jU_55kLhV(7tDfi"֯-2*ǢؔEs} HJ>( i}@KTuZ<&V 0_@(! D 0LM?{`yR?87)p 1sM-mQ]e -AnV} A9A0&ap\}53ؘbT*n"&7;Eg5SѶc,NCCWR9)/ *cdG1!1b* %a骖[1[]*Ŧ*!x/D(Q5 ӽ@])+mb. vgPfڻ;.*8:f,EUcpg2 @hR^IYfw8wn49'&teмť UpXh.5>"{_nY [#Cbsv)&PafCmsy,A[:hl›l{F( Kš&|0d3v3Qa[OQr[$A|p@6BY eْUUOa1\x4t3'ƯY.l/z q=%V`!&f+Z̡e2b [:ʳ\f[QuP7w1Btx@)=-q"Q8.fNXJ&!b*-p4sf El{\xB3,n E~=B*Pqc ^k߼Ř_7ܢ& z )FƎ.4?;B,KT*L^b V",KRcdA,̫5rİ$7p(6 `IL@f],roq#T xpDOfCea"uZkKu*l81  j͖kĺ^xhpmPo @+G#;q)t(jݒӠ}+AֵhD ev65(jjf$cGb eA8msUxY R=w-xD꾑dp:v-ސ\0҇}Bb@LӘJ(o/&jn7b!U2`hvL|L |LŁZĤ2Ciq>X('*_v" a_22?as-gW Q{K3m*P92ũ\-a[K`hZ0gpYn5D n!p#j`qC$[eazPR r^fœhv†@k5Uex6~K@T*TZp&z8,Y{/թCwb"pJ&-%AtFqFeGb `>1 6R-dcWsH w *˧7[-Ǽ|W{ AdSoqPѤ]QŪߊ6YJmQ(_~zlKFZ\:B@W^ M pĮrs+F%Oԗ+Ǫ\KZ%fT:!og!*b]Eҙė ʷ͖ ~1+Ѩ迢QעyǤ帋y7皁GiiG\7!EVLBC93(9tܶUԩ l Lei ȼ !C`neb+0̡gIKJjrMgk@U@0p x8DXp*PU.RP#2\U1"{DԭڑM!ZKMmYP.nFfղJM' U ]"`g!qZ)lb_6pZlZ*3q5t9 J`@1ؑĺMy yG4PPFabi䖧)WU [H"ZP*\b!e-^rmj2ځw^``?Ԯ]9eMwkvyCi{5&(5s-xudu.-u6n+m fG[ ^#n$u8Z -7Zk2G 8a7m R1s@4S̥ەo0o 01Yf CU5`utޮ : mTQ @5GqĻڢ8L1K {qSv]cP]fKd0 Z[̩(X@H>z2D)Ljhj,ryj3*jTXlXsC!|OżD8u m2y7ĴU98*I黟F.`5UmJ Ĥ(ohm {bbNxb/£2#)YXW] qK2uJÄ[ +Qij-p CT9dY72ŃYQxl#1}18/82vu0:CRQ UqomW5uc55xF~&}ѦR8~l,C%cPW[#MjN%){&cU'2f܍{k(VheCU3ɘ(9V5q7ͶqkY.}*$ ƥaO!OiagrHy+@zH5 p1N%^\+F f8mqh{8rղؚ*)C '!XSo D pa_1-h)ץ*]DQ9 )K3P 5k3tf6`+~%Q5X>qeo& Զ[1%:5pX‰]+fޛ%WbԺ3)ߥ5#%#u^b6wqqEܤ8c7N&fs0(xb*tqU ԰[|*\D[C\qIRxi/J<}D`{F @=P@b&mf!Jxl -D#Qr> qygWt]K(Qs205-ye)a%^RxJYñ—P?)b)ZRMu/ r$ g<u2Vd1@wQj  v:P`V&lZ+,e\8.,̶~nf?U(x=P]V'AQZ( Xms S^8qXvg0e:F^j ` #nWc.<}ŧGvţ9?yrZq)ܻéXר-2|T4ʨ5H)ĘoxxcImA8]g-wL2J~%V4ɽ)PW!(`v(gȔE %PUq,TOqad5^.Ȟq]8qABfJ4_&o1|u S\ Юݑ2rU<1T@6rZZϒhElP8NQqrLW(YyZ[7{%"ȟpLUC`1([,qQs +; M_e*U:BgL*6%jt`1)ib%_̯c*%4o.J4qP / .l]RZ,Dc8V1b9KPq֪np?N@V X}*Y g^bmT,?q0@F%f%0 9.C Zsd0(WT5P,[ bVgqnP(BxH[2wb@-o Bt UxiP*h ғ~.mQ"8vF ܫu\JU YlrbSFBT[>ci^L|C0{͢TuEfu F 3V̥^9C*SIpr>z(ei4j̿7_.Kq/,4305nꚉhL2xa<4R%./C梦/ fkYw@a:f(ޢR5W.pmov\#$,THS`C0Û6kY ^1.Zr"Y_)h@$ЮǼF^bPG,۲. Tee"AIw+FalL\iL+ְbZ7w,A#Y\ ) pp wˎ`okBʡݹY!ʶ1&_}fQV7[mTuCxX~VxWˊ/QP釒-Ug:O0dA"Cc .kP<)#P2YfK *HXLBcMgdJl*¦EkAϔoX5<”#G|FY*NW)A2U7-bZھ +Yդh/V59bq % [26m͋5r:"" )BaG(+/R o`2ZܦDP癏䈥h˨~KN/ U[c4vaYyo&f,djNJUH4qj;2׶Yͽ@(M0:0Lc]b4daUPhU7,+6V#QiVA֣xR=` nZp%-dߴʶ*CWl9zhĪ㹍eonQ(yp39YbUgEbj &iHn{:Ԕ=[ADǡ8`P*1bG(1sW3O/1]v)!(eWcHqQLAܶ\c5sQemfaM<-[Ά%nF;<1]D1`!A|U{Ŏ o?0gFƘ}-& u eBSUeRAЪ \\v +Ī jC&rA*$XR NRui^vwd Ɵ), ԼJ~b8%uXȑseb2eIJs|ܽpPj`h)JmtI@r `U.h6+AJfw1V 7 Ud:ZrsykOAU qj]-C:Î}-g9HXWu,ڔV^~a#яDj:z% FR+уUu[bיq O82nD+a XQǘ- #sG ]Ǹu+N(v{j8/A*2["Rs1h(ɰ` ;&'k+;ဢ+dN"y2`B6] *;7M•K)SMx/[vZsQ e<;Ry(`1\A& N؊!wn*4Ҕan߃%k([rHxĭwwِ{2֢Bk9OQ5z%Ήu:Yn)Z 'y %=Aߓ(LK(ЖYӪ nFwxaI-PԢ`cCU6nJ ,b^9\`Ax`X P8Ű&(6LZ,*i 3őGEFn \ƹ\CHj @4 w bTBICVZ|״ëdR6F% r,Y%`i~ۊe D<0l4kQjm?W)+zZC]ǴPneF^8q,sDnkyAfX32g=jg!:^eQ疢'8K_ru 7 VҳcRRn8 =(%^*r|A.Y"]Z3OK.luJ V?3K=mz"Pآ3XK kDbbQKtӨ\iSM泈/bSN@1ZMwPrZؕ huDbbP٬[.`u-Q%=ق%kcG⛊ڬVPBwPץ0*VegElCS qLA`J, [-T N枎 :@C~9z SJ "}%Du=̱ľD W !j!0ddS᪂5s4ppAv(Z\5KeQs6*Sd[q).cOxs@k3;ir".UJۋTRƇQS:ĢN`X " 2kA uV(nV ܇Ζg8 MtV- mEy 81K-5Dv=\%w n5M͕-kT￉BHy4QJf22[• g Q_Her^ A+@ F!729 !Uw,&MKfTc7WM-|j"L vtߦ. 1e 37ac`%N$g)5# 2`_BNQD0AXAM?J2lun_մ0K=WRB3#xy#?6jL3,@B`p=n ڪ8JDB5z偧jV!X1l0WL̤% E*Y;k8^6P!J蒇6AP'3U{DD׍5&FKn'ctp]Eo\rd9` js9,8>>n!o0ks1y-*-b0r +f>'2QZfjba-r9ikoe ߎ)]!kCQi.Xd3Ĵ?J.a8xr_d]U BV2ʹzuPh# 4Zh,lK}~j< BEwF.ܬXcKxM@D^JB(f9Qխo1imCi`F_'R;] 8uT8Lĩrs#({cQQI"o;[#xO)ɝۨJ&c>aT3!VMb]LzLo quE>%0`Yt1I u2Y"1Q Z(f3o}j9ey b×2_Xl^+oL9 ;8Xt{-SRP|B67lFk(Ɠ^GQ+-`{Pfψ ҽ AĀKs:06fC(m$JypY -˥~f˨[èQ:;7h01@p]G!*KE-PhFI)vJ.%~}*QLA_>r`f!1pX1 ] Ѩe,/FQ_xW*C K qǧ})]+ǥ_2)BZAaӓ0jႽ*7m9ʝk ̵Eܭ1T8o?QB#2l{e$ڨZ#7(7iEO|̩6p.]Ⱥ?%{8˦u \%K"),(B![qNSV@(6\KbFE[p.=TE,X?dBSW-Y`bރ!1X@"R9AG(&'XrEjg" [V2UC@㑩B%x,"Wnb̛^b&O6ĠF`q*CP<"=Ouq|%ٸEoBR\X@Zq7^r `13Ik&d=J{.X~`ȇ>`Mhc,Z,+X׼V:GS 49.PBk ^l0*[Œ iyJ6l!|FZ`M4hm.QtHm88ܩmSP T5Qd ,@Ea͑QBLZԵ2y̴).FNK牐*7)JkP6cCV3p ß@R[Ylin ch3"BX.)Qe]3hV_vq lɄ-SASDJ`xmP`FO< ǘ(:QBx^bݪ& q)bDoJ|v,_ W%l&MKqqh;C wCZ&JW[ZFLVs$j(B pC`.t ]p؇yPY [4(hE"6İ1y#t6, b.fC[(KNq(Mׯ xxq S:x JV @*5DB]7W3T (A0Ur`at|Dh3C$%k )| I9)C(AB-4CDK8t sA+/. US#ю"]kRhG@ZewZ-G TAp]'fZ& Q_ElhbY) Fsxd gLh.,N86LL caG;Π`KfxEɷjR73j4n1cGf茮G%$W*+'Q"G✰] kij_tD3x Ȼ¥\1Ak'n̜\Zvlh㘚O2λ K,9 qb60&E 4f!vʩPղ#_pDtpUH 4y 2~zi)sįJw9%]@:#PWW?Y1y4⻕w.XΠ^!s-aUPjn-*QԷ _YTsVp[{I+SG#?"J2u1i<nlʗ*]䙘γlh+خ^KQXaBqB:b+ܪ jڗThU`=̖=W3[UU0,5p[qUX6ÀEZz һ$/xdtzWpP%J+*(h6hMfCRF-KN&IB!HD\'"(.`&xyvNk7(CQUnhkWG=@sx(߽Klz([Δ$w "Ӫ3t435MCp-M;a҆-rlqYc[y)-ͼD)߸VnmH>d+ ])X't<(X7{Um(*i[E,n 7vV ke.uu[6²fίa myqQ56YP TlF֣XQk#Y.xg5-wђ"P f 68jZ|L4 YPp(˜ċ: J,4Y @A2n2! b!&Yi*x@ Z"ͧK KCZECK b[Q/p0R!.-x퀹 f ቚ;/X{<!Y =W/aL_#G9&PG,*q P;,Sh;AZFTs,-W b*H!^2[g4wA1cVi|dxMj6,Q[W[ iGgFT?Wf(JrsmjA40ū É"( e稆 ELS. faY*xֺ칑Yz|͓!}~fIR[0,&2ef͞3#JU}Ekc@]P4dR*c(&RψF@^ Ug)p \o50r<T8@yCv_&m'|.Tr 3Z0r ahFKZV.* (q!n3\Z n"(/ Qc٨'[4X1%ntXWZII_H- u4#`8!fP5d9BO5]*屍UN͓A\L 2)vIwO\p#uĭ !ݣ@ :W9ZZ3@ɋ>@Y> YpWpԴ(bm$` ޙUya}:Y-+c lFWĶ`|LcYF׺CO).fTM#up -m-ӥcL:i[}CqILӨ7fZ0CXSL[Te,x\C;eU{m@s%v@%trF+4zơo$0R0B"(۵R7V UHd ~HM#*m- j%W y6unZ@<}rO 5"Ddg֩RVZDj@ tp..؀H؊X1jw," PfqU:G$"ʆ/+5 똅(׹7A9VSj}7rޒ+Vg U WS b׭Lz ՐxSg8fTu#Y*ddJ`PX!?BFQTiksSsc `bH lE1@ ^:َNUڥaӏh8e{`&7Եq;TWdU,@0))㨬_KhGRg)x^nax^C%[/1(]"~~xf(Z lΐ2=h'B\.  4WlJNc0 b/8d$EN Kzi|C:j%iE9[̢qԸ rMZeq*gY/n ܴ9F:&\F( ˿C~% ת_>},=6ALnaX[)@{DǙ`B@5c2q^Wmp\Y}ȪN m"Cr0 S'y pT]A8@ˇudKpcn_a-dZىSM iӘ7USy{*Vb˳ "ڜ^(J[*кـ4"Tv w7M3Z`*Un8RqS]Kv:V3)1rxJŲARjϕ.iS8rGZnkA Ѯ _ JPۤ*Qs q 8Ӽ =\+&^+"5iʵuR r>ˈx49&@<,ZjcY/="iCtኂ5MCDb듨m(`4XL6#F_(o` iAUf@8P⳴h`BD';lpa[J-O8W/0h-SXKTIjbXqĕ N[,e6a0nb4l˛',1)Lbp,xf \F&kx-XQ~]V{[$&R ׈0;F(b`-b{dq"nx{LU1t;qD>ɢX-D)fN%#[ppwЦ F¢o ͦYPTz2 廈}[<˴ۄ]y*1)CQj].`K"JfYUv2 4U^I!fP̭+&'V X1S M}u7hɖ^' Ze[~W]DR@U* +AQDU0"&>QSh,i2j,(bD*%-Wۢ|"Z?`4n[[ V,)t[̩tѴ2( ཅG"QW+-eO!4K `'.L"ݰFVZє% ^dNǟf1w4Ӹ؁lxB/U孈iC&n FrԠuf%+vW1ZPjÿEktFBZH*v{ҲP9q+!d5]b FfV ͉o'?mu$Ord6՘Gi/]nhnrҐ8Swf$z@#cT-_0.Sw]LP{ PUP/\ B+/cN 2lP'.Mjv0Pa7nKq}~ab*sr%h Qw VP"|a0@J€Y~BhH#u(WS{,6H`0arB{ZX 홡#9@ND ̭]qM5HXp-EPh`^Eß20a٬KN !WDo\Pg#[U*5T%LKpk-Z3"U 7+q/Rf0ZʾI(SLor<]ViFoYV{uI*Z3wQwW9@Yn1 9y j t mOem=kJ +^U4YɦR߽qJf*'.*Yms6ysQZ3p9%M*׸bLe 6d)iC{pԢUf Nw`(|U+:b4N*# j]Z1abϰ^Bk+GMR;XjP+2PT %Yx/g؊jJD,j^e,*%UҗUr~b 4=߼E Sk܋f+DW{g%;Vܠ0ˬؐNL4]VBYEsV^jQ@ӺLcשzd|&wd[ =ELp<16 7.`(qu4 x&a˴|4؇ **Ŷ4n1M%v0]8ug̵cbV{ݭ%emk HDkuWc8nܲ q0ͶJU瑄{(,0CV/!+gd_&?Fנ%5{&WwLb+}Em;#枢胩JgK:y>Uҹ*UJ54'كRˋ Gtj+OhEE M˪.MֽDuI3 =D/Vbe_2,&nÜS4W*mx7@qRs*Bˬ%[`Ff ޥ"ZƚBҍ[x`O7Qɹ`Ղlؾ!Gw m (ʃN@(\mp#Q!B0. D M8K zkئD 8MSyN8ȃט!]@O.sR4Q5 [*uģHC&BwxCkj& %8zjުaHޥ8(K8FڜA v|{A冃~1E}\U)obm R`jsSF${/1 M$5ƀ K 9*'E%xOFadN̟bR\-HAդi6UTv @Ã1قd~$sWQ d[7IJ^W2urS>aF+7|ja][C&9R 8b^BMG b99CV!A%Ŋ9"qFQJ]\Mlmvas«R9`8 rיj QaZ\!h6%Y`%++zLð*WprX+F \hXKC! c9iqQ%zAZmtG@3" qM/;fy^RڇFF$jH!>xt%=C+@ܵ vD#5Ye\Ew :{ (U^&0#h4jf`\,fjâ<,QAZ瘩|FG385 {TVmL þgh8 5h.ҡùtԥ3PdԥP_8%tQ@OvLJa(1T8{%½ϲW9<|Equ$^&)傪e1gQ5Jq;8qs)Լ`cI K")癱G//Rp=EUF}Fj;ys@.؂#kv/t+5(KWX;x=@"]IFy/\28 穃(9#h7V9bJBT*r~a+xhtiQ ]IXk5YG &|0CUKpFh @8F%(͐3`XSN:Uqph%\T0?",sHGXѸ52xMEyPdۉ`9],]UǏ^aZÆoM.^ OR-./Q4hPe8q ؖH\-z07&Y(nH- ]ы VHj2q.ҡFv!bP4nyE?t:GE"^[=JZ x[ fx1-[?8,3qlPces8>q@@IBU;U* B"vd5MGzV(0cFKFu7/V4/Y`M̹ee. ep$Jۑ37(Ui(K\DAF{ VeA`U` @߿ "(LÒZ]"Ĵ8H^$rJo,eĥ nR u(cE9&ࢺ69 0C-< 6q,  m BQHqFG&̍l/dъm8^뗹)Y)AU(8-Eܼҷť#\mM(jFŽs+)LU£Ln#\"DXѺ)o|&`jS!Us[\q+"mMT (K'@:Q6jk+{x60 ?ܧc,*m [pCdz+;Xp2 8Vh$,&lf , o pF QJ2V7JTF.xB徢 p#i,N+U W0hpa ,0j"4ՙeW}E ; $ݻUWa.+`dx`x G rٱ#EtdVx>Yģ],i\G&F@">]7Pf0ш/F5TKxyXETn~PT1'q2RҙsW+jYV}/R [ E`֝KK&xdLA@d .{f-V Wؠ[ZYx,:ކlXX=0s6@K!&q"DX̺w/,*-ُ3X~ 5OBg1Tqa!S+;0giĴ㩝,P6jL.2y0\*F=q-ip2j\-- mC%İ<(Sd C!t.*+fcQ3W%̦r{"]b̋|֊  v5s)58L]*@ )wF@v` &O`3Ե VpaۨիnJPbM6E1]E eT 9WZpNaJjc.Y@7-Uc2 7G\ecD(oɯjIZ4ƍ8Y*ileWBIDŽ@ E@eYkw*& iLNR$x0q2+wFZAvBt-Dwxn1-@BP"ֺ8m;ls2)2kfb ,cQ4U+Zw)]Q"N2FP,po w-bbpؙQWXsE]Tnj(RVRQsqХ Li%A0Ve*X<=Y%bi)=Rxcx2!3à2K. Ԁͷ3l#:Hc84uU1s]hD4T<*Z\8\'gLcYA#EqB["%u_?Ev x%A]IJ@1D:pM%,^=Qc_0Q{)owUڒÁ:c<40>bYҲ(<̆8 QyVDa( OR9rBZ 7e$BvqܾeJW7my[X"9iC5kB_SAɩUl pJ3 zYCM=i[iQnPs\DD4C3>'~!sآ;!v )V=#%X/I=ԸiAKs]!GV,YyTc>mubXHJV?hm>ZX~ CLJ(̫pqڵI,g2;/T|DrۏhDka鎵a~UuP 89DtAa+t֠9C[XƕcrlA,5Z:`eN+ e&ܲYK*e*e*65~%J,Nt,2Qfh–?+l ..s2 cN9ftanȉ^Tix ݲ0NG4(8_9!l\c2Ĭ RoXqnnHJ瘦VejU[Z [y^b6v&ZvedA=CrJ38dF*(h.PwVV‘3BQtv@d:cE5lfAx+Bn[oQ #od4n7)#UYf Z)nJM5(x:r ٹY&O (&T_h+ZG%` bh"^&i < ˥xj3eSĴ+=`]GR'Ï[8r uz%>h#K"1yTһEzVZeH2hG˴{Qn 9e?֖eSB몍ų075/\ p52KSm1@>,v1*R+wj  [Y 9plqRޡ36;``lv,f\KAAd &Vr1P0^ V),Wx"SM)Qq!.ɧ7|"_bf(X(KA*La0>w3cqC4L4r-{tLM$̂<2uљQTb+DT6oD9x7Hf*ͱg=l(NrX)jUqpU) .N4Rn_n J-d\*R^G5L7UE izɜŪe"𲊵nSwUY\ʱMuN8,&4kA9n) ,N*BVVӣ^n r[Q+&{@X|( \=pP]\-(`Vi!da^Dn*yTXu%Xv͚<@uD~LB D#vi`.s6RprvExJq:]gf3!9FN6Y]WɜO{ZvFh 5[DU:퇞l,w6~LQi1x@r*n^pi(ıƑ4! EaFU1 5zeg9yhUqR7an\VM ST#a%*Hq^.H "\q*Kݲk/z/=z>"[PCL}Nke+BZ2A-WK.2npҊDx8kG6l5!ac~#w]z;SIMK6P2g Ի Y9Y g2 !Zf%8*vK=3H Tg =Ŕk|% ݘ nD"R.nVꑦ)vmRg%V*`[A՜Bt(,b\JDrj-2% 54.Qp]L8fBe)v[Rn[4/+9f)ϝNS[sW6_K6mK5G QUaqT4AVgXxxFSM̹^ٕe^ixoLɘMUP$KIVJ)"t\u(b?`dR|-r a 5tVe\._a( E60)tf:@<#Pߖţw'K\FKV DC-V2 C(4E%!&nG<9W7B Vۋd\8d(s(jiPw^I`AȶsϐUl2 _]*p [3'FXhXŹ"bm!iT8Į7%62.Цv4Cl!,ܱC%˥A7"yDڪFoL'bzs 7P( ycܨ/ uXd5o"QlUBK `*yLk2e\pw67L`&|E`VJ1)QnA9p‰KV*t ^ixC]buD".xbzPmv`]R&N{G *XlmeqW/p0**IG~*dZ/S%JtaCly p,(4k'Py_7r5!t^x_ģbʓه*ey0j)J2,y*8QKtop%{b;+ {l q 8(Se% E]K0&Mӎ0IiIa\'4 *dD( "1Tcf,8LDd9>vIFVӂ(:x.4!JiJ7Uwnu(?`Ç֝ld(jq.٧P-PmƇ7'/u!}2Ljrg*(< 8(n#t35\,õԣq˜FY]JAg9/LQ+juE$mz!QE*-{ igs1}F[ /4qS駸wwм˹x?~?,YAlEYD"z\zy娕Z-sk  s>~qz`e]7r 2jIF$mDHDyE6~_pś1sg2׈8q,C gQa RUd.AB* ic =RͰi_DJ_ -sf:#AJŏ/QO!T6Sk5]ġjxslߙ\o)%n3(K]R_#is)Tx`Q7 0(#_;M\tiK{]TǻxS[j( y)eg3,&@ʨ8i2 @oP\XVLś "М!ihnL};Z6cQEq^ 3-P,l˰246AIrUveZdWX bl%] tbXC05YOA{dj5Q4Շp"\0{AU˦Zm)!. .1p.M۵S(1NXQgkpJE( rƣm b1F(af\Qʃc2hXJ++&DWW/fۓ1`ZeԲq2W%,˻W!٠H Ƶ9E@4 W<2 6p@tM_RJwP$icZ]Ĭ"YAxW6qWl C #H51j(Bf8dBV[co.ܻW "XDe!R -ȼ>H|2f#Tت1ye 9CF8CS#ej4Q2c,B5foq'41?/ wOL`f0j 6ZU-0%KZuK[?+Qs=MCC^ Zq_̻F,7gP * Tb5a^ ~b@9&%Ot8s1|V{D nQa70VHrS[zZTK.:;"4i.{\8r e^uRB)eW07I*jTK7#7Mq{x^EVVqڣs*ݐ[*k2# d,L 7 \6GDTH_EPWqPAM\U7fcXxK r,X JfPVh*C?a`cf9])P +EZ'(2=UW--l)Y*Ŝ1 UuU)a0)PpyNv,Ҽ%y@qBd-wIxRXo QבUQ`Fo*nQlW 07Z7nDtM `qIrsfJȹ@af; ܹ6 hkσpT[nc!BASD/qJanwEФ5z/d\ZҾN.X%6`BefANK^%yjЭU\Φ0*1E8Yd3P1,fDY("pKlv264e*9U ubD84k n1إ953Y$;ž. Bo$YEwcQ4COjj/a-S0DUsH]|TzYWlT/q R@'<)8-"Fi5K]+A‚)Y2R1F`Ra#@Q.:A<˱ vHLTC]DY֦$5|CvP2lhvA@eX9+p)v@*m -nGzbK?QLġBqjuB cewg$^~7:N 00SG YaɖZqh,&.-IJjPp"K(c̲խPm_1 1E|2hF]DkEonEn-$; Q9>C,MQ-騡2^bQ{eջ g~i"ۉc9N8ÖV6\F9pM<3 LX5I@sw "v."Ox8U- ӿyUo2P4 Z-N=Qh@!RVB(d;繸t8Yw n$p3hEK2VQj WPoXD= sH$GQÌL}>YA+qܩ5I#h$-2S.֝iψ%5)j 3 D3zXhQ"P`9: P-A Q0,LrR-3o{7/@9= ud-Sˌ(O %TN3.rBԼN TZ£, 屖rFʄ bwv#vGYpJ2vP9q3P#f=eCF1akUp6&GP; F0YU]X~WZǨxS4؃  IkQ o&x{BZsVCUbV9L+.`P2*8L f.d 5C $E+E@5tAqzuT4KPEVG>`5f`Q b0TKl`œq*Rr.ipIT]p*Q ݌p*3=d-`.K+`DD-`5E8J*JdtE[ẖ[XpxZf?B[xYʔ@du;wmf$ZLRk%;Bopv x`gވU b# W+T$T3,\;_3&5Gd4]" %&F`Rc i^[ `Vy"qgj0,[/0obb̲4Pɛѧ,]1/2ȩP`B4^f[&U&n ػh"Aޮ]aHU \ Nj6&q:1(Vԣ7|mlAZpb, 2ja%/;U4 ڃ Lse^qvLbF4IW k9Uɶ->mQ-gaQ林dUSx5esZ =3$jEH7L=~j%Rs0תa.уUxSrŗkifyqjUR嚜U~34R1/֮sLw *90*Bb0d aKuQ R=QpġZ2r;:H\+pXcB1֩g 5P 4Tj]Ebݿ'GȎXC bhM5*lG Q~[)6j1b8#d_*š,M@(:>2Afp-Zw1e|U0k(8d5t԰cD^*XAcI`+jRag*u{AcU \u +TP(% ]/n{ MDN r/?VơXi%\W8ud !NF Y:# u.- L_Qpܡl+uZ 8G)7͈))W Bla[,TQs-k Ĥټ6%&40L\+2 t[je\jafiXp^hPEѸC+]P了 ZpĒm 32,+B/8ܺl~. @:pɢu,!CFkr60u3972ݮVz(ؼ 3yb-PJP:J-`[((PzfLAf9۲^PgϴNМPηU 3w 6gY}B"o#%[BE 5Pmd^kIDZLv-cNv<#'7ˌLMW0/:W5żDI71ZXAJ©s[yxs)0Jp6wG#mdZ]bDg0w߈+WNmx&S ebW(r`&\r^|3m 3;GSܬLbp aH]LYNGzybɠ[\i%΢N0QfC1r{/x`5uLTR*+ %F9 5Q'%- apYJP2p8T둙TDh9l"ˬƨv91@Yԫ12;XxOPE[iXZ2a/%, A Y97*TSz]s#TKe3w6F˩dL+}TEQT.ϴEdN0Q.@YUA#bb;cZ!L n `7K{ y  *`MKi?L'r+\Ui(22<.P^2a*R.u.8XbQPZN`|snE7"XLQe:V!sZ clo BWe71T Y n3`5N`mVuĤ@^HE ~ +JY8egkʷ԰AnՈ^2ǰQ @Zq,]Wԫ=B^# e7Ob }4*}穓7INXR&&s|LeEpC-EQ: D!vDyiorP jĖ"2` Nn$qhwXyt":8Ʊ*ıW!i2Ά%fɆ`ts--ن%xk< TC`%B9zds q|D0o,5DF`7j`!Q^Xd>|ɜrZ^#b(Zifv4.U`"e˕p GCg )f/|\40^%סw0gmSӂ-!ĵIz5&UT"QUДFwMyw* nxQ(%5K'`-q6&w#c >*Ũc5;%)\6}avO$-:l 8ý3JH`# 3.!PkRk(76)zm2o8 '=Ʀ ؠeW%|(q (6ݗTUYueYU E-[)UD : E-  Nάs2MGAyS`-hlS?" }xc*P7)G'qaŮwP  ܠk,-տ0/5F+Gĝ 8{3 UahX%1L0ќ̐N4PW{V87\QP5u`ij9T8YTlĪpq,Pc0es S@bL\P{E61-:3!m[[y_5S CqG>P,囦,-PmܠMAx YX m0D 0f,TN6 SaMb uY_!VAvspT-/%wy~`؉ Xmr0EKA\D,%U[FK:88Gqjtf%Aj=#% DVu;ėv04gB,Fj+]1PeZdKzh ̬d[¶Uf#⺈j2@XYp6GeL: Ag',`Ԭ*``qj0IB0@6rз[Dr4L!Ȩy] >qs9 ^z% 1 7*q_H J T@N}&^|#ApDU: x=T>('`nRR,T-`9'h/Z5eDjM}͙fM3LNRw)q_hkJ{ Ke+Ax&th)x[fP}v.1_t #-Yۂ(|Š0b*6%UVF+p09|}n rbU-)N84aaCUQ@j`Y:lkfBɁbqGQ3~Iz D'CORťLDjr.+&EaiD:-Յo(,ZW]VmudAeJ pYLZܦ ePYvtbqKM˫C3Zd-4dBh\7W-#v]B+fP)CORA@^$X8kb]nG7-\^;QҰ {"eV%W"G}qFjpUbRo,)&e6 b2Ue#'<0Z75 tūEh eP;hX ˂z3,ZM kdq +nq<_1(U0E$Fk0/AA$ @["֘R V70E@]m_&j ܴb< ] dy3<~"AFl@S`Ԣq--LOcs"9f۹ܔ;d425EŦP^꺸fы;|BQh@STABl]ѶQZUdȯ~efn8@ ŝs  ӞLV rBy:; e7lVJ a"h, Dġ 81x4@oo n`VKQs2׺-+);uʒ< - Dq,hKW+G!L뻽@K[~ U{W`w,TqGtqۇ%c̦&O3f j@Z E2b͜L1 br&AQq9gvh_l/S_A-{ p)Hap/w|TVX 7>s?"Pq9G;t%1bYwe7;]07EwUZ+˥_-3!Jk9`DQQU4P8keb0-4uJ']mpy&动M`;yns%-,)wfET1uĨ*l"%`!H.aP)؉A}P19U^+P9Hp(WXZ0BH[7KAw?hE6y~6xź%J$./#/TP/>W\֏ǟM'.^ !H@T !FPX&WYqvmHa"WX85Nj@,W ̰b>PG#e9G9W~G#frALbkPxQAGkRhJcTe,]b*>% + /] ľ*%2L bfӞA f*K.H @M w9e3 BrU „0Qms-Գ -J:4ȂxK<jUY3\pfBR}z.\ÄPo,q(3.eqܪ !A0Kj 7, mh).*, K!fonPZPԶӪآ\*s*r0UU`Cb6-;rJKr*W:uK/ZT^29]@0Uf1Xb+fX& 1AY= Yk0^|MP#TC()ṩoE= AcI)X`1 cmTCFnPrE}Wk 3ı_q|EP4r: 0#\>ޠ̋@j!M0r1a-5HLZ[>к,uRh!KģNָ)aGlN=380uqγKy#)T^P6 - S^"YX5T:YQnlf#܎VpU22[#C&gP&|ODNiU+tnYV%f൥KF[Rau>5ԻbLLyIY} ˜H(myU\U4H9w{FQ!k$pwx?uƛ/=+Spi{ؾMK5q(VI0(9+9ܼWDpa{x{`*3! JKRꫂ5nx]( 4]­U̅lVTjmeg8@-70_ʭ7b[3hcj7qU 2KZ` ".C@.f%xIQābZ ) U00;eͭy,"Mf13kpB2<˷9fF  EJ {X/J\Rh]4Q[*P;ל{kD€ n1D}!..+z`_ӁnJ0:UKDkjv`,fcv4f#5Zø Fy3p`Xr$T+QD KUĨvw̬7Eh5,P_DXGћ ; eI iA /p_LrZV}/X R!ڳ#G|´9xZ1.Ɠ1l;q)k,r*PS lg̰S84:MсPE.LHW&W¥F\\&1cEԻi&ȑpC2yUi[+֬[)/> #=6rĚJ $ŹR,5QhEۗ,±nEh(2eBμNQqYUUڭp<@re2Z]AJq-(ԨQ:4 4ŐY)^QXe{A wPM}DEXf+*`M;/Yf̲_Z4TS3*sg%vF n`B2/8!A[8eY5l#c=;a.X+%Ϻ`A vck~];Q\&%UQf4X[PA@=w,@!A^CǶ(*q2`+(]Tu⛗G4-_%+{ERvw)/DD1  9/[ LLDJso3輕`ZKj4SyyBYBq o@ Ad1(V̱ 8n! bi 1 3!<Cx2XCgh*1SpI/|,TF'.|P"C d#L=^U&wDʻM3rdi}BMϧauM S/Dw<6 䊳wP m#t S7 ^bۙEgB|%ACwcc3Lh[*pjb,ͷl*RPNݰOf{j**aJP-k9 2}ELj,-+Sv 7,:,FmP×F?:tW ]y+Lť5Pv"+Y^zEђjD{Qväf̓jp?X0l.##%š+U{3:.8m#xPpѭXNSoɘ8^4\@exejBE„.,QGLTvôd2L ;3U=搵2 PQUx e=r$>,j,9"r?+W ej]2tMKP,0r 7s!f* (j `Ey\9/8XsYƕk!j06q@US :\PRZ UZor|M S VXʿ-Sj#DeVJyj0,IpUT-`ѐZ,|\J+D VRs,e U1AKj A; ӪXѥ{Kp;;@<ŽJ 9  iI41ʻ7N+VygȔqc=K,6|.S&j>""'| o'pp9a6&PHrfou^/bg8ֲ U9 WX"[V93Mѩu9,ܲ[L98r"Kdj+`JNێk3Y@Г\ǔ7CZYV( 8 #]V%bɤQDsy.~Ԫ]:3>G+t 4TG1TM א&-3Eq⛉VbX:j$M JómPҩG. x#kyF":K5HZUf,Y6f@O5Pj&S)EaLUwyڡ\=AN޽3|\(K& XtyP`/phS~s( Dh ,]ט^h@1G!^pǬ:fڅ7K{t7HQE]bt}*|WVE=(!Fmwɛk/mjBbbYE@qX)l͜i,-Z F6ct2 \& ,pC7h1 V-S.0CkO ԡEt!J%F.-^A1.UP&.:B#!SfUuc3F4b6Ģ\1`꺭◛H0Qe^ch '-\ӽ~ -S0leTB_GKKS%+(#q ]P,%9XK[2䘆An^EnfݠJocp#Ŷ/ :|0tZrP--R y(V1c|\a._f[*}`.MEg,BfQn,P:n|eۨi=ΈW[j=!k c%PH^s!U 4;b uY3P ]wFԡ}͵Tj#R,p c:-1gn"D97&c)Mv`ybup׈֊+PԨ,J8k8GԵ1ҡ⻔B#9k%P52jo  ^I@CU52&@5#r!6^;ˏ'ghWR4fP,‹;t^i^gW_{a|\WP@*eeb2PKZTW. a]Fl2^:PU.TjՍtxdy6X(iF‚D+Pi*&!5,3^,ς^ b*C`Ljrz+;ֻCaW^.q1qmin42يBWux5+'x 5EP9PPNGA`yu/hs-pu 0P )x8E6@5= 4]vT-پ sn@Mv.`)xf q ViMw# b1Dv^ޚLfdK j2bnY= nE4:H1M)lP(Q*,t:.W,Ճr%1![Ptpİyaje+CU , n+5T ld`zifF̬:'37̕b#||j՜L&{̱ZQf-+?1݁)C-%>di" P@n0p]k8\ a?at[ŢPY]&*}.qm:A҂ 'm iEJWp%.0kK go蕰+^eTCQpo#P%T jyqFD3ؤψ*eJl Υ4weEaez\!0;W-S aKYSUp1$E5ZwiesUQZs:?%63@(K;l'}1vaъt(b(;^mj\3z7F\wAX{*S qYaCn5yGV*vbR̻1A,81 F+hOGkj9b[QZy\%sFe,z:5v,Ф[kȐ)[,!RUĽQGS;vE*&UYҚYo*0aR5DvlZ(*4P2qڪˀ@b!`ql Y~uF?XeqvLҐ\2-smeTkF^ C%B9ep1#lPRgPVSLg)TL><\o,rMn)ST(kMeRVqsÈ^!_hּ04@[vZ8͂(]Q㡉7gKIoy3X=9F; ZoP+\0u!^Q@Y\|@bt!}QKZa\E[y& WTE/ 8):j,;@ʶl8^Nkd&^ŚO1h3p#qú{p)DlUnjb+ ob Px̱puD8g1Zv|GYz)G&Se3w 5U Smn+KejQ!M ~u9=bnDN(0: AmTcƦ%n f8!|.73,j|%&!3blyT+ \U"{th٣ a(9"gLƃhbPg`OjՑxE [6asܡs:4K[aT7dYZyԄ]i^V-bP22eu)6ef,pM(PѨC o \ig%\5@T+.빁Gx`0hǴ#Zacs0:y2`brrߋbXn]ձ;c _rmq(Fpr7s=&MXL=; ̘B zc"MZ Y@*QJ{S LJj57%.wӊTWJcD:mPdz#j.%}Y P1d3]äfE1L&U+V G&܅zp3y0%0#@ "#}6h_.Y@^0ưa@ ΥgހB16{BhD1 gpaW^e'Kp> DQws4@Y( 7#>`]bk܄uU!CE5W'.jG{@&>Fɲ I4,tV J㸜\*/!- ,U{&* JZF `Y@m1P9pPʱ7\jݵ8ӂTQ 9#e9;&L ? 322 lnc ax&UqMjqX [fn-^D̡Z˱{`NܱTʉBa=?0I<, `ڧ hy!^;9Gg,h0b3v%!ur92:T WZeGc|J7f؀Xy :-F~D'L+3(7o3h)<\v өr0K-` RvY@ Qwp`(nɇd$U(׬@*KgлCa-X2JQ=`9 _5ā B>a%C_pL*^j:C⻂df%b. xraZKsȗl8SF= g@_"%H!\z)RzJϢ\ut=̠TJrDpӇDfYnSE*Ne]LT6˝BH< Зm*kti)U_̠g5!OGPX)%6FUU5jɐUuvYl@Jڑ bA9݇oqf.ౠՍApEP jȋ=(9uU84:GYxZ%ȱZPUD T\r7\nJdR%[J;W1h##6hnW@owL-`0Š/]q 8΢g\2)ZoSI@wKVHuJ@. g}6U`ܵWq+Jn ;;Ki&" ^jdUhjnhd{*V˱ݙkw ab,-'AC]:3 HY,l8`2HX&Bi:-#|c*4-c,:"\`_J0~ T̠wVK'/9*f ,TvP-G{J+e.fd"]k[h [?+cX"+:lTl"朰x/kE*B(/{"ScÈj / |"W1吘Po8f BZaő0m`gXEBk /z@ή8MTK5YyG'rD7Ѩm)9yR*K_1KJ`GRWlnzZVZJUՎZz7a֮"d}WnW+ˈ֥iMٹbVWQL̫ ,,@`ej!PEܯ2eth*V%z1 _2[%)Svchbvۘ56Hb 1"+\%s)*bsPh 1 d@PcQFmeÅY(n,Vq(RU@glgP]J),`CĤO3:u*vil HҐm2rHpCfHQW̭0@@$qa+"/ı-ژ3!3vH2F`Pj搄a.=Fb\muxUa-첳hQcJ̬_Vb\F fg*%f*Π)48ҪTo$p|BbJT!* <48b!S:g1TC-o{g WMnW!ILVꎁrbl)ˌp,VKՂPY{T!edvԠt<PJn\E>eיl5tXĨ$7f Pe1p,d ƶr`@(X*S 7Ef.5aYzsJ2"@\Q `TsĂD0[paZ-8Tq.(.z>` oP)`qcBPح֡Ggg3'#.XeNh4@ NA.G˼f[^apP,NR;@&uŹZh2ؤ?18ϖ,Ö|ŹEN_H]\]sX]\H/_V%LdGC1+kyn,+TK2eh SYV8Ak1HUkxh"3hj RsQEg&btn1`TPr˛Rb3!# bօ4+ݸdPZg X9;Cq[ƣUndQ@Y{A_CA.zZ}#`[kl V(湘GJ,瘛/`3qBBpUMaut[/"Fr&`qzX"VN`K"! \3D0^lܩQwbRVGoPM[5(h+j (kq%%ule- ʢ(43ԡ# !x%VZTj%qL^r֔}fLJA"E3DPP˪k@1to'1Fznh0|nXG!gNp ,IV.aś& }7,fi^ˍf]u:-ElbQ0Le(vfhpaNΰIJgGqbʹASqb1\Km(QPT[%኶R= `Kፌ9J1tj]HhB7lB֛AaIa;=r[; bI5p1u$LAӔ B;`3U "s(̥3*(ոIp 0'P,gPAav*\Jb;a-L0q0j E 9# ADA}j fa k%M}8n[7\^z4XC @ǡ+oф:u Ut0.jPW/+ %LY3+ % G1(3KB`[P:h!2k[<4T{b9+Q\LTq.j1l@ kc,Wsy-]7HJ jZe3$x!47vhEA9f6,xsu!h)ה&z" SR(v y(pb a1Cf0S4\2ٙ~G@KjVXQ7zJވPfQ|؋ !ѪXM\TFy3~4XTm^""voݍbXЄʔḼtZdp3+e`JrSxHo,蜃f$h 8.W4cSV1We^BQW*ɯJ*-v,eeQqvH%|s :DZ"Caݕ/"VPĠY}ʹen ,,#\En(WV*,Nj]A%ګfIG⤶0m/4!vAY;< bQ&![lc@+y7((YbREݛI)nVܪYhcV]K mVP.Z[ !xWK6 v-o$$[2p mLz:sǴ.̈ɷ:KelƦͦ&Rn2S;Ic6)؏d c_k \JaNqANHvV,_1Ze^3Cc+,K*#\-|3Ap3|_$bۏd5w,q<8;b+xR΄+)\vνrYX3w o:yLl͇Pz@[b`&!,aƦKX4{npsFpiljrV*5F-*VN`f6@ }uPP"+pVpQ,\KL]J 6@}Cx lp<\;P4~fd>` B4H`0,+HS6JMq%mFʊDv!AjSxڡlciG/ނﺀaءkT \FTm3 xmh}@ĶK(eb*WK| PHfM״|G$k|mQe4AR-PnEx/:Am Af%r誉U^l;Yc.jhR8v1JU̠,FjfKgE?qpJX{93hOמTrmw$4ag{DLVkr36@"TpLآ^ncV>Z>jjfu%Ķ8l@7jƢX HȻ]vXE^+=2Ktg ̢A*EgWgqlXA@deU U]a( C6̬,3VUU*LQ!h(w,.)WJ) eBP ZYħxmZ1wO&E)rJPӜn- :%3*C+Ԭ-}`NpW8PnQql]ciinVPT n1!++N_Q)ldF.69PnXnPzZ Pn`5E)f"^B m*e8VTt|"@%%qKѵ jn\N2MQ~` >+LFA^<ʔhiPXbP&V"g8b,Sx\p~RgKUo0_Wy嗆htMhc ߘ&(*(:nqE\$b^C8Y3-Uei\;bEʇC@rs4VeLHMX(ܺnW.(sFb$AvKfڔ+*|5*ٙ.6Dߊ›۟!f58MhyT_2[;jZl'8IeAc 0߂ {Y) " w"$RA԰WjB" 8eD QߘPcPHJP~b6);qq ],S"3a{;6,~/? `(,+namgY.xsqxp?8`RGa(8DG .BKk!5L"%~ kb"~*`9n1錌q.#4 S:'oW_) 1 %3/ 蕭Ƈhq؂|.퇓9Qe[Xh n@XH2Sbi)v̼TϬQ%ߊwR%ʞfzT"C^{_-ŘOzb}$3oј*.b 63Alc3ؙ`𣅫RmJ๗BeeSR\~`e1 #w3mܯY &)2>qRƃ3MT{y pUm+ϼBo^.#5Pm(2@tK5xu4qy*=0][$*ǜivU'p) / .XAf4!RX`]THZ`EJx,]X*)$PȰGj4J{а8a)Sfڏ)n7ԧ@;ˠ & Mf`vlLahU[ vvn '"ثu*J-05*l9Y` W;1ݮxlޠ( J@]3GQVn0V"|EE `\4(X fߺ8Pƥd U@sz_xʃgRbfbBXZj̎R&_'B_F,hrbixA>Yfmp0(stAMU,pRe`!D#apPscCTȟᘃZ`w,=㐺2¿#E?(*( iɸa@_kLQql4R`x`*lv -yly@P/ŵ3LM')rGscӷjeigG=De!@;8]mjx9Q2w0ѵ1.(W<^_u.qeLSGB nl\[*ߘQf.T9VVu/1ʇ3BY2hS1+š4`e`u6ޙ6q\QPr]\T6J֢ͳs(V":s @(QPޫVoG0eƥ'+8hd;)Mu r _(S#iS*nGG>jvf 9%WljĺCH'ultMհ4Sw QEwFnAҕ-7 ¢`MB/n5;:oC+ߴ gp2M IEfYE![׼?cw[yU-7R Ulh*{"A/]XCj*5qa,{K/5qJgi c=i( Nf3 |aehsDRK}Wv c$ZPF&RYW^'@b_ 0@-Fb,K# )=E(iJ36*Ht/mG[1*#_w ֥m)Dp*Ï~ bF(ȚaKVUDˀɖz:` FK K D*-!]\Fpp jYӿCDW54+un*T(pؿc^ؘXFQFʕKx*TD A`f_jcBn?Q,\!_@$Bx# 8 \%FeND$HVch 20+p`SddԿ0kma|aH'}Mͣ(xrDk,-rRb+o! R 8&rc?O`[h)t׎_Wu~0Akh/0Oy Zr, . ,_ꊧ\"L X]YPͺ=1 Yl_of0%o,a+WK ]~K@{}VH+]"(EAw{\|Wvapk3.M*cat Z.+cky$pޣF7e!bֶLeL4,⸆F`znjp1 qGLE֋qcb{5Ci~,p3\ 4|@Ts!8Y(#|{b)ojUhGK 2EܱjP %K;\ћͯ %[g Th-& oy |s."jЙ1T^z0L0܋syBQ(f=2:@ج-HJkUW+ru 3Aed\,˰$ pF^emb`7̪#UT$63^ V E+i6!qH 4(0,(&ANPP]wPqf!s`ej^Zb(UFoOfZf.r]2VA6u)[]U\rAqňwu dfq@Uw0(LЇ!(!kP./X4e{̰@ "4Kn!V+]EPѨY Tm6=Jwa_bQNR*i}A,;!U,ty[edA]dZ5fĿ<[u0 `1a+YeMZ)T ] kSPBY-0,w\PEZE,ӸicfdgC`- 䥕k*uNZ7պ$ϑإa|L]b<y*mJS!W].ȹou.巃w% AW=wDBc K61&/F9"*-YlTVx,hA|%\ֻ7, [,滏`:e"WXy% [(4bS:^c }E}b7h9MʤjJt @+1a)wu~P\dJ |Gon*<b%es<ˀ48JxD_]\̸ 0.xv~&Pd7,k(T.m0ߖ(SEߒ kVa'@#%,qN1u -@oi"Vh8&(6+h%K]q~a:˯3i8r0|J8~kP^,*c fbWfݫ0(9[3"K vu11 AG,fPpc a6ҥ\+p+f"">`SnxT_cR ״ʵ%S K0F#l2{t G”lam2틪 -gP 8GuQA=.-j[a0K_+P 쯨(/v< <`uRl0;:x9mvhQh=8u*U5_L3j*[1mo8![=jZJ Q O7Jz~ ѫi45C .dj⡑ANUDGu Mŷw˹K #ȗaO@,}-1$*,R*RbVi<(WDU},h ]ji~"eQ-rx1^e*8umudq )Hb,j_(-n/CgD A[ Q%)+]PKK_oj-t%.!\'DB픙RnFY bW5G>_ auDn(^FDn ,Q2gM j{xx%Jr]ƹsq4L TdmY @xk`QqcGFZ"r.`O; _ TEؕxԸHؾ #Itm8:r;6ɪݸ[ULj\cN"+F((\(JJ UU>#& $Ty9\h\R²f@_8oϴ1uDAvXƙR b +_4 w Z䍍;3[VFʿQg!XD1MN"o`eSf[fGEn*՛ ,F9WGI*ˋLL yrZ#0j2G.1 SNYF#/ln#@b(]_)yq:uԷ%J-(LmuZ%o:Iŗ<] >n`}Vus0~&H(XPyxl.?0N<:q^l|n VΥ %eZ7|B~` k7)E@mG^sk1PظFtdZ\ڹ̻CRA`#Ar\r[--ECST A8%S@BTld/Ʊ[%<3g'C+e~פ:xΒ0SM<"cX9uL%nYPE Z{DeQGBihs 2hkηlq.՝J]m2)Qq 7 3ܲfi-')Mk ښ &w2r6)n1hj$b'?;*.x0;O{x8VⳐb^dR]k2 JGTy9E \ϴ 5^_hrZ؜X<r< T*UKH fi຀V:߼i@6|gCA@.wd1n-WeE-(?ؗ\8.eL<,@S30Qb0ƂY&2%*ŨS`VDi⠛=K" (Wj6j8p7hQpPF6ck݌R]o46߼igX8 ٧zYHJ#`rx` HY0xbZ2Um9+WHu4UbU>%JWen6njRSVeaS&X8ܥr?%b.*-\Wv3\ٞ\ \f9 qE1b 2P#j]x㤢 4/ȥ-\]xT-YB;s2afU>yCIlATX qԡ @Wۃχ*%5]J`ym1; Qr.~$I3%7\MTk\ l_}ÒERɳ>e2-S$7, $)XO`kjNfKQR2iixH]od91Qں&M w p S 4&*逅|n fUQp[.P|)S ) p[(S.sfX.|w1rSVE?ypp(0mOK# "98]j_ o)L6|B!^b@q]މDNb4e^%nr7̈́N"c2Dd)Jc5`!Cp;Ne oGg!\P] AhwdK0YQa(.L\H+cXH)gp"SsW652r0iTĴۭf990+ebu *к8x\R3h A7 9'=JĽ?0WG^ ܪ^֏CE`䮐BJC0b`30-,q.uyHjpJFTVVd\"p˜R[prS ;aUVde?kҙ& Q ^b[K%S/VAJ8,#* )S&" Wa(f+_Oe'!_E'.i"ř@ӻ,*wU(͖]-͒V㘶+V>suĵbkYV{nS(5+ۈ]}z&{ ӹSBJT!  (Xڿ @G: ~ j( idB.Jkc;7s1TZL@\^7(5bX " iP\sUSLc CHL쨀"(r*p4ڕS$%\jg@!g肇MĂ}Vϙ -~b.8XEg뫚@8>` W,x;|A5gE=4ȅl*0Ӊf 8X)Wh. Z[b!ju //9 osXkLl1`wf;(SVYOipvGc\/X,.5- bP[l*>2V( 731SۇIƠKUDv o l˦K(qQc&Kuo H-kf`s2̢ciр@S1,xᙋ Gh>J )tsQ`rPp2V^; /,$P<[5%ҳyʢ#ByG7JWBVQL[T9AjY{[D-FF<Ŭn- [vJIVf{ YR4F'`󈥣b,)Ҙ( Y]<@Dt(h]\S#bxn|ElԳK5v"ZU#ķٍ5} d>eqF-cup2P->#Y-4uPVV*@\ߩT0(eK*;nrd킝vWDA'1 ExʽKTob6*f*f6BɆ`V#+AD*cC2+ gA!gFY"{,ZTs67 reP˘CEU]lxFmyU-f@TU35@S7-OxSx/DW4yJ9#B)lhU9}n4⳨ZE3vEL+),Yt\DRصa@i+7AW4 ^G1ZX؀M*ZVqDLBP,`(xn`bP'&΀j}Yse!ykGO5 J!Lpx" q%K*``P@[a-̾EoķiY+HfB Kuؔ%z?D\ۨ&fR[Y5ᙺ33bM-?iS [&z@a Wl+y UA(# p1&Ki ݣlϴ`:QܳgM留ЎµՐ+UpfW};na\rP81d:Rb/A, ~"<wπY>Ajr@b.rrqYe)g BG7Xؔ` i(%iF{ BPm8?\ӉV%Tfb:7B69^o9[aTU[$01N؜`.ɔ-eVO(T VJ5eFXc*¸̰fcn?QZ}r3wKn*bs(2}/ |U6q|j (8eaSn@W~ƖŬߘ F׿dS@0a\ٵ-<8SQМqR]8""KK V̹<-M9:Uw)zs @W']0"WhJ2ٚhڷ ]E2H }],ja9K91D^+6_7f ڄNSl( 7BV+xgLQ\ (|Day2$xP-`VqgJjCt!YF܋b)"oLWᇆ[a%kDYJujTEZqlZugK܌Me-Hg71&ۢdҴĆ`4'36O ȼb0&wV]K.[.]Ri GFI1G%ix@=c}J#@o!3sȱŊۏ "B, D2Ze4@MIc( :vO!8Kh* 9&Ro9% n5~Uw[BʼeK٩08Adr,;P@ vb#RBM "P|Y+ X{Y@]0#MyřF[?hc%Z,3-W7H:nrBhATiIJ]y]ŢpC!Ze#ZUTLM .\F&qdm7,l*U8̽D6~`[ Udj54.͹ XkeM`\9,8\/ :aklcĻ^q/¢iq`, }Jz@Q/ 25wJk%-!-=PjsVbT"f4]͠jxE 1&T"2Yv7P`ܻs(\B87/UpzảhM@%3yAqDrn/0e|J+!JAB̶֝Aİ7 ! R;0*Qsh1|ElLTq{FamjE|M\dpܶv8Z׼Ru i{c.>Cɸ\yvFXXWo-DKd(4+P7E 䫚m{Ɇ90L5ho' 6_<ҵ 3B|A0aDl>eV?0>m0ʵn" ّ*Bd_a8cҞW5|,7T#2ee[ ;/e3k4  VcSZ_&`saubo\ScQҮ#.o%@x- n}iLX%k /];M .'fjpP2eRjWi(Z'T7L[ VY9'8 ARUk-V0k2l<䯘ʭဪll(ǞF-۟izSA*ʲi2יWAueS*3.WRP[c6A.P wQ1%Wzn "95Bɻ6L(O`_^`VFuRk^9N.dxZLZ[M2_cn0_rcq U2uRG*-Q w|I/4KH%}M=(=-bQ/.|Dv;Wo/ kʮ7P ,|TZbwe$ǒWǃQ_*% S{(6.h8P2%м^7)j_4h {d"A(n!yR) j=F,Y+cZpGQ_+BVP Z59UCX]RTPEdzAScdT0\mxef)EL}"9W7/JeNF`+jD3RKh+g1rFo]ʬh*oI jysr2a|9 ^|Nsh/ի5o@}KE5qwm|EL0ĩk̻W`x%[Q%|3'VrQrHM\@[\_ٱ lʹsJ'5Wk !eM\L@ o i˸ R1[8"3!ef m0Zf]nPe*cCP i TЇ1}q*FH!F47-YbʆQ7*q;P!Ũ-Km ?BŨpVRiPfb;3-9.RUĴ 4W?0xiF$yA(@'[+̎+0 &+w&PjeHfVᣚ`Ks[5 2]{K ug1F]) [OodR)VS{6^c]ܭY(=@4Vn%QQ;6Bpu|y hEnTg@05Pc2.*ǦCT i7Eh.za%ʙDuVKWDpJJ,J`1|Fؔ0bjtr`ҡdvpV>Z ܨE/Y50ڗ,Skc*3P `\VQG#%uaZJe2ְ<f0r919 )epBxbgG(Z8 gcȻp،7MeQbfEd5fmVcΈ]˩-1B጖N!;Ҡ{xm&wjcu A>UZ}h_̡ U0DN2%[hƄlm䨓j8?OB=C4xN҆m,0 y9V2ʬ;4u%,);+b]aK*`4Q‘PcW+X$ݚAs@`qyԢ,V\@)B3 X;hPd9RNe7UyK,~#_K B"̥nL "Oe&]*`uv?ylI@ec K:*C(Fq "`AFb{?]H[+ԇ=Gxq~Ik1h@Ǥeχ !aCxIr8_%Al0mi,Y8n#8%v*KQ- &_(픭WWʪi(Ӄ MƈEݾXFi"x ;bƦv[f2PҏFUܱFb \X_aɂIj8h=֑=d5S@$",Wlh|3N= 1S.h.1;x85z#A|Űʀ!(r6@`^8[`"f8ғ9g1Mx]@00nF0l1LB19VKPfݫq*6SqK>;8} UpÆdr&VqqED*{Ծ',"mQV^ޠ8w(Rc9Hf;^&\ʨ#.N/p9kR..7pqq0ca0dݽ/`5W9InvG-5p=<)/w Q*#xqw4rEJk`*vh$& m fC|,J %xuw+. ]b+vϼĺ[k~2:\U*ptҼP@Qc ̼.gt/טVy9мk@<[1_$lj/@ tp_N. $T r*؝x,=JSu(in.l'*W-gO|ߘ*U3k,Wb&X*cVmeWW,\7Lh> \&"]0]K3QV~ Hf]bevvf ڱXәb. 䉘]_GisJZMgՃn5HUq$Q֣EbЀլq '̭eʚbRb [e@X@AvJLqQ7iwĠ)ͳ- 8%_@ԱE @nJ.ڥ^" ihR%jAE\q]\Pd!}^3g dyZ({wz\Y7<fy+b-ܵCպNŮks*Z1iU_PE\F\x8kVF:bߚT~(K6.#6 TX_p@Bt*qYs߻#o} KtZ2H>. e @D? 8jX h-. :pAPxe3gŪb)JѶ}u.^QbwUV]f&^bC%8JdA)L.$ TRexo1LP(p>{%p0oqglcA{e^Or_pr;&zʰS[ <0-pX?-_4#qafb+q1gA@o,/~^.QM̵!i![9 T%[iϳQZgܡV2nZ>eHS B n__YL7^Rb*4_bdYi ^yUWdLFAtu)UzT( ݸmÕTq̢EQ3ׄ]DQy h e1+kL+,%𑫺&d ndUx 7V<ܠ\3 E T9##Ƙ 2JkPUCZ N7-DRթUK՜KΠqڋ7-D2 CЪ)2p̝ѵ&gADÂ)Xؖ=]Q]spG>`&2#,dKj.)$R Nx 622zұelpA|ԧY.=",85{ (ŚZĬ m?PY!wR/8iQ7,GD $)aN TDϪw?0l=(93,ɚvXdF4`V70V]:AQ  +P/Y*1k;AΙo@x"PnSW?c+no`Z'nK/!Jc'Av1JwuO & sG(f_m8xHW1SyO^ aI״Lkpu`WncDb$.pY ^1fw9WoxU~PRZDXLzgSesr'sDR"mY[4c6[4 xM_p.?(RϹ4cO @y࠯+\#m]52гZCAvJrUV0̾\;jωV (q5hCUZf&&(C""c/3rZPlPR65>eJ6= H9cVVADPܡD (g*mHvbWVX !J. Hò\u7.ZS2-KigTb#<7)[-ž9%%s;Y0_(fY*3kWMg{@2ck3b\\Cr2iDLjnREfJ2("|ʊ K*4j1{(68 ʏCLvAEe}KU2w'qѓpQpE5I@E3^اJyB`Q mP82@{ e@+@1cS7ĥr1D(g0m7 Zŧ+7ٺS]L W&N@KAe v)K=dbsRt@% pwh9gohE%ts:B9ZUqQ}î.ZJgRCGg-qƋ#h8?lf.yUgr"2k$LB[%WƐ sdˈ -7C;tsXl%%%"ԱBA/6L"[傛qXhr(&u557ųYMT(<2-YīuEqMꪦ,K|{:6䂪+ԣ!NsFyQUx&>1( r8"+c&b)`Z]ʁ)K牚yQ̻*U7Ҽf2h rAfQ{ f-q̲i0fK, ur.wV,_{ KV:QM*+VT&%n ѼKgiG|Jn)aM2'RxZ@9]q) R*:4;^}ج-h'c"OB6M`FY#aTi¨JRBn bn^@[`ZZ!R q`c%@z*\j08H¥Jo( JklZ,v4zҦkb]ӋLQx$*`1KHR#ĩh1VǢeVeEJm`fVe&eZ楬I[%\T1|j:ŨY2"'rIXu6"梲q,TDS1o#k("31 Aǘ7PY6P\B7 ԵV@]湆(u5eol u2LUc/fUX˻jꛁm̢J0g=^aUuOiR~yMnJr[ @ %}˼>7-ۡ77o_SX_T>!c&"g^7g08]̷f_M~mmy斝w{F 隳#s5A|bBs}i 3n @p~`İB>V2jʩre.u`qeEUR^9Q莎q:oa Y[>ṕg<ş]G1;0h|ˇaJt:o Uƒ 1Inc0GJ>.T"dlw )VU^{5fZn~#0~f|9Ql.q._1*G`rǠݣ Ygu|To`@-9b.^0 }E(ſ ߶">je bƄsQyU*OޠUR1uO*9W:XV xN 橎u msQR*-6JqGp"kL\Y08/]j#Gg`#sKK`X_a ٯUyMz8^f"ũb' Ep]~iL|%5q u BˡG.SR P.=Oi*h,ܬM5wunQMV%Nj}j^BiW|Lݏ;ծRRk`] ɣȦṠH֫ ]CXFFgyOERj j`(}iN1vv("Ƌf_S%FL`A F4\r\4B+oY]Byy PAQ} aҭ3([gn8 <7,PшI h~Il ,-U,ZF$e_*qjWB\ڍ)l[41( yy$U i?Hؕk0aX]⽥9:,1Ơj-ډPs31,K5 //^`  GSuƒ+ |h,n5Q^Bʤ߼| ߶b.Mm~e yTg%>X?[api İnX򅄢 Sb(Lj*ky3!)em> #m5˻e^|!tx\~ *qehȴ< ){I#$l w !1Z.nم(g-" !Pe2mrDp'Wv80϶!^XEX%;XhRa "]f/ĕ* X4o2%5.JAi!C_/@#0%G2 _PMڋ) 0x/|ptZ OjPaj"S9gZ@rj(IJ1̗ܒ^G "`M>tc;kَ]B=K ,½2yK:jUK5P[Vf'u0 |,fޜKEy8.odY34ǫz 4w.9|PS[p:NR)\&J_Ph4yc9cL Mux[b)W_k\Ǣ|urԦy ⭔eb~"| )mS [ g4 8r D.AΦ R4r)#cÐ:vۉ4&Rjs(e.uqqUIYjamG!H2pō :sU{p9 |kpZ`]>pia] SEұr4QW+tj KQ|b:ȷA@6grJ1tm6= [b=6חCxǷ)bۅ8 Ik(mom㍸u4͘,_6 ƛL73sA6&{P|Ϙ 8qTҼ~ %Xmޥn~auy*o7oQs6{6㉳g&/-UZǶ Mަ{|È0dR"6✙Su\J*dLQ'\P\WBdPlbh z79=/ ׼X,kOmжWS#a4 e*ilۛ]D(BUJNp?,m]ӏ>&D ~2/eKLpGkz;p 4 \PH>5*"8%!OjUu\kbP*a-^ܹta\D( (:W47w Y?,w~ %Po&`fXHyR܌{&H΢{Y,ɵd/ewQ-&eil]0l#) ʁsWN~"7kL[gQGp*8+B~8S.s|&+ub]}bXWy8P؊SS?3ORLm%W4(UQϖ\][84ŕUkLޛp:(!wBp#w 7JTlGXۚbl1w \ɠ~ߴ] f{GĬ}ƅx: {TS9{Vوo!̊xH=|[d Ҵpdao5~#ayiKE8j"lF'Q䖘E`(T.f~hl?ߴgDKOkyE| f'J#)C4.ڢK\v![^XV* X+Q6E( +Aqt/˅迼n0HK fѾ>bX.կ`q_a=@mj#M{ ]1\|@g],^Q.0V hn`L.K bg|5ٛu6. e׿B.e0t²ʆlVAnK` ퟘui_ XbĢQk ?xdbߊrAV˧,7H/g 8e(ؽCIUM8JUJʾ{dN|C`hRCE  'qeؐ%B0LC[w wIJ^I2U┏?ZFXj[R: fq%0 5$ 1f*0z` |@y rX]D5vs)6hfJl |@Eʳܥ+/-`KBdo1g (:k FrD0g01lYL`(L Gk(M b.*\u .k@i*`c{DEk36 w8ni2X^"QrIZz#λaiJrksZv/! ,T~ f׶<ߦ@_D2%.C 2@D#!iR*>c~fWm -50.}hhwPtSƢsT eKE{b1GZ~"QBRYKqѠn^]Pf "YTy*Sy^S_B@s@1L 0/ kDYZ*s7"²b/!] 8D!f"rq J]/JGAD($ԪkIW~c (XnX˫|K%@?w,`DU>0VU:h){axyPJoArhߴ-,i#'oo$^?BqYPRcYq4ϝ@etR)~@Lx3#ҷ4qkVjXVpD=Mb$R1e3/%ۈoܢ,u S0(4ĭ5MrZG%-mĨ\[f2&W 5(X/n )1Jz>bơ6 I)")qv903l@:J9x$5\ gea3!ehab_Q-9/<50}̘4dwzȠ/!. rF5w٩S_\ K cjr2-IXT0` 5XiGdqlm4?~% T\n>MkA5,(x|c-X/ˤAĤ<@°Ũ2T_f oZ4zh3 5؂WF3^з?hFטVZMTrR#+@ȳf/U_[TKk)mr^7F/pm;!Tf3l8a U5"d|ߘZ/I(]8p.hx JbZ .J4Sj%[֢Z8+zVU,2^' ?G&ãTJ*͛) n ",@i9 ?4-)r0)g/.펡H5kȰe2̨(Țr摦Ie`KA[R0IU]3Uw+,t}:;u8W_l',7x.X+fmO`QPNXl`K7 RVC?QFJٔ*p V$1q,%6o_juZn mi`"F@f\3(. $ZJ|J[ SBךc^AFD>f1BywGfּ` $ [?$8CYK@Z)3|WPĥC*!Ze ffP-Z6˫E* Tq C4Ξ"LtLl)K%;_1%  7G3q #"Ҩݺz57+9&J]`7FV#u|t/ W J>O4 7 N՚ܮGBXwMX(āj9J h, bi: rk.XhRtد(10_N:T'Iy"*+$ٚ9c#SPx{W&A@Zu,`)Ħۯ l4n=t@ V9Vaɤ9z&r=և&T֍l{ɢVub;tQVVZh冭IX DX~R-u_UO,k3,&W'δiI8|`*ouS 4MW_̽ݻο9#yC+v0 S^+̤ Ǐ.L@}-qcDau]YlDБ]F(vjVU0srHJ{E`)b텂EdZUy7G0HA~!gǼ6}Ge^l1mQ\ M8AipKj^!YW22{EZ\9'9U.AOjTH.GgIv)X ub0g,Z/b a`B.[*ҬDNLjj-զ5uİX?İK}pz|EgV&9pқ  Bx`R5DrkPڥd1au2.(w]٨)PQ P5U=Za} DAt6(;y AuxZr6sP-\_Q*BQD@o!]* ]A7x*.e]Sp!aW4)wZjR=\aAkc5E`/@-j\ņ7VtIZSdvq NS`%B{ m,7tFXMI_Mt j^?؊XXO]mj^dUg0 /!QBT89.u+^ָcC5P&1ܪ$j(B.ak%ƭv9ۥԴZ\[^-P`Nou,wq'  P@j o:kR3gam> >~`Uu^E o>EӶͱut= hh&ic.sVW2WMTvCG+چH[7Kxe-Za[b,Pi/\8(i0fxWVb5*Hmv2tEK@x:>&hmò0@^0- C`!@ bTzd4&3hPKPRfD%٪lu{-P`ȝ#8;ʊfv+QdePVРB:;/e7dYa%PLAK;qw)J`bihl2kR%-cшH.$2e1Vn\%nbu I++, -k:) YgȀV4,VWr]F6E$aZ ztq,W,' =D/4xuDP ^~wRȪϴkfO}@g Լen < cUO3QMx.{L2Ș1J1J*L;R:C: 7lb`rQDHaG{/JocQ++rak^*0-!e_|?W8 )rhڷ1`ܣY[(^+4*D xbwLU8 iUJb1-{sPI_bApO08)徫kķnel60EhلV&~exچqjNKX TBmԦh՟19VfwgPr[xR*{51* :h722^j].JWK(r?de5zi0K Vr_]h(כ#bXl{l#UkG¯#KfUS7=Cs%PPPQ LtX=ka DZa1l(AdÞmk#jh@*ۊ at2IJVAeecZJ*\1'} _Ew, *8Ů*t㵐g#-Csx PY51VD2s)n2PٝNdrm7+(k|+[r5kS 0W%>Q:KZgS 'Ľ02 6ɊepP(@Vm-oj(Ak`FYu C h17QJ1̼/lO]KZh=JqJ*t{~bP@|oq}Fr6n3 U5YؗP*dg4R+ѷNnyT޵.ShS e*N(MQ$ Jtqyq gu}}DYĦcB%_3ZX~8ƥcC 9 (ε*U_kX```5Jj!ff2({f-,enE֢S:&Ya}B#Ab|m3b̩-ҫÏеDBihh@UcIe+"u`@+K/}#lʭj 5z $W m2f@VxqC½L!`vn͙Arx̳y {wqҵ#!06C~bJqA@9A1e QپXaq(T_>.$IFqɈM? QĨ[6+WRf(TKsNyF^.G5Ǵ),ʕHRP(#2^?ZQi]|?# Pbf1GLPfbkP“W*1KQǖ$%C3Z! L8l mұ+LɒX? *9l^güƒf*( xk*ߧ=Y%zF.Dat1oYl;8nj+`7TUW[$z}n5rMR^ ̠4)fSwlv,䈩B= p& S \hNcjGenोb-UޱJTi2%K7JKVষ*ܦP-ԾTbaV ΁*%jXx`1EơziOAJ3ɂ5"aRiQ1k8Dc@^1g(ɏ1y(&fс-N: yH ; A@W_ܢ]04,x]y#^akb Ƈe6.!QMDdX3-7u ȦyB1mYoګLxiOX=f[7*C&4Z4w1#GĴ+u3/OKq ;ɧRp U)%Tu%+S4Vg5\hsQGsZs0Iut c"c6\VYů{[&U,ĸ2Hܧ2$y g>aLOt,˅[^(dul=W#EP>~pʻdxb >N1 p[ j7vI:~sh>_U,±PEߴPbX2mD^5@*"HsXP _T%9sdgH4]56C~y}TG1S7QQxQ[ pjr1ڼQE,#4ʚle٘ḗj: 2f8)b^[]\BKe&l%%6e-7f¥^c[4Tڳ5:,' a2K+sĸ3e-U9Ԧՙ3!Ik V W!ga1-|]0->cަ `ɂ5kE]эG1Z. kFV1p:f}L żڼj[ ;hK 6臘gUZs0ȶ6jŒVcMb,U *sR\ܶdn<1H5xRYz.U1|*R87]LՀqlJk,1zNpPv\EUdLL% R DTJPH^ VóY}qrK\UF5T` Vp 5%!- 2zڛ?U?+1*_P摗CR{T>8.85*-~a݈,}QE^ 85N')R:Q*wx(4Ɠ˘t^ie\0fDR9x 1* :NJ$͋Z(BXV*!a9dcܥ,4rF֙Nq8x.S|A&96^5)*8'knXC 稭ӉUT(7yS;.QX׈Ҷ@ s9}m_@1(Hj28%mnK1j x&.PpF'05f_0VCodc*,9NxJ̧JGk+ɘ%Q5⸍[5e|惣 ]Z^V*[Rb8hMQuEJxIx𐇂4UQzɅ -E},T_ߖae2u /XESxbsxE!m9W*ӏ>Kߩ* ~u,YV^7y`XNt @W홛E̳LP aʪ{kE^@<ycAe׏iE./eCVgY`0Y5 z4\q#!ΧIU5w3$=\To Zt̰/B4#nH,;QqTp;J8Csu6qN TA._e0Yfj'ҫea.%+&{f-}ʃ-G9e}Q22݃Z8)uF8˨Up@^%-;!yY(W =C 8^a4 &m+v,g;rJ hņ.(J*Rb]C;:>%vqpmLclW?v ~ET1PY>sҜ 1';\ymb v*Tlq3VycXiKS&xe?˨t: Z(aG/1}* ŰxUsa^->#:W.&8 ^U#D]Eˡ!J+1d Yjc}CAO'Su3=M@v9KΆqUb5,-[5ap?3+ Lj=D7ĢgQcL\/t~ !G=EWC"'Sne*%pf]e^ 8%9605D ۄ& ̦셼61dGJ1 [ƥ"Wp+/%}MYgTaOJkG3xnѢڀP\ DKԢ[hB9R[=GT5&ކ`Ժic] 5~.&қ"Mv~*pq.xB|@w0bȦ1F-QZ *8E<y_:A/,%YGr K6~=9nki}*boLxexPէO[)sɁXcEŇ|9 qG * X_2d]EQQm 0='HTOIchB)E<px^!] ܗpP#!I!jWv%+ |ŵh*"zKyq^ '+WrqBlĩ%Sbx_/ED&Ð%4C&}Ko_Z+7@J=JPg8آ SG E#!İm04]& UJN.!ǖRk+݀{pk {UqTrCWC56vd-ļT . uU51on"F]pę/w1,4fRyfͨGqWN (W ~`a%(9“@KT,K䉈"TZ5[ܴx6yG Q[jl)'AòJrp}@s&YI앞Z9Y(&‹}*Y5b3n?Oo1,dp\{H׊EK|B ??BZ&W%QguJ]f0M ɞe4/5-7b-l qiCL Rz~,NSTYbeV&=}n#'pC2g &mw0ኡAi DqRb#Ub16Ԯ'WP:.5S(QB݌S8? xi}xfYSo^AECW(W7b$#V-ۊ/]uj_ SRnjOf%?A[QMKLj4}+%CJ8O <=Jq2Q]¾&3XP֏̺S.9=T ,;.gØvYwrhux"S|Cw*Lx3®|f%]%o6dVbꙓ:+vjV.[%V8,w1qd:`]B!@y0"IX. ߺSa x&yNp+6|c &s<+U+% yqDcՌyfgƢS9{ek7q|3pw1;ߎޱBpUNs|J#Mt.iuZYud8}Gr}T7 HRiFS9>`p۞&قZ !b̲]mHƋ X44SV`taLxYYX> ߢ1.& ydAD / !B 2%b,}dD}߈1t);~}UQMFbw(Aӏ qz|\\n/d@}'%% M 0lVR\-YK7,D6jeJ5 vKKFd́oqE(w.M6WD27EYh-;,#|@u8>!n86̉ac( {06⯙P|}cR`v|JWPug=JqRkJgǤC7g1q+&~UZyYw/R0unl1p;tpl I9eMFeטjJIDϼ) o/G.,L0Qt"LTk0r9n_3J -NJXp>&c(*:iC|k>%VkmgamCQex[o2-` SG 5S2 qlej5U^\dǴT[3C1Cbٚ$}m0 .ZF`b}uUwaП`Ril06g/َ[52.x7FX\}fZk=%8.%.X/Ixx3qF/$Kp&p4M nBJ,)7A thކ-,QF 7^+S)Ez_1qG4jז %K){b^QeVbLAdJ!87+[̢Q)3u sEk0P+x#q%E+8@nyncU+KIfhUHFiye3̈<{Jt\~sį\ʿoK Ka{7:!7@.rԺ"}VF$>WL&`B.[ nj#,_DVsJE̔yUA(SXuiGX-0O(W00nEBӔk.aFgdr!2?s g+'ql Y{Z,ʀ)-qsVLN/1UA!^rJ F2*|&^5ј;qP~&:# 2G x7]|̊!:=z~2536ginư)㙐̬՚"JKeP^!CSB&Xs+QZ5ޥ07] 4Dl"Q=a .iOV1C׉yGYZ#bz{)2e>_.RjG9|l*]S6u(,ܫ/_ȁ;Jhؠi^bp_*BF?jaṮ ,je{G0^]wEuءUZquCqҭ?)];BȈ68L({[1'U!cX*Yfa W,5ܡ0j W-1^%=\Kj"p\s1K15hCafQDJ^, eAUwrYfSⳲJ0TxPN(_Tľ{f7 PcSQiL%If4pf@5]@D 7W3iۉ3lw&gj5Q8x}FhAQVDK!/J?NckLYHxMG3}oN!L~..12=Hټ<;f\Wm)0jg 6cU=w.#3u-<9՘tq*Q?5iX#8%j%/2̛]cBw)Jd 2k\y,1F>߈֢Pr.}C/3x&OeFO2RQ q#eFNGeT!{fs|Jj@)R00) VWg*b7c ЙWG6!m`C?-3a0MqL̦Ytax3l]{cxa10+؍)5f b!q|+ ZqqiC+:g[qZSoXgh10 yfgxY8ꊹڠqD P|vLEjQO5.qK*^<[?*tCjqx!/^e*LC@Eq0db-u]U5GeԿ %_H9@ -k PGaN 2M.XSZ*%CR2޽b'9=Й&5,zi9|˻K"JM1~#TT髹XZXEY9gY@@5*1+qTݝD]镊V֡+%0y,.%eQ: Q>c.^ZNP Pa aX_g2=c#)LZ&/+mץ[U618p"ѣO9-42%*2Q$BERK$?4`f e1LKDp=7eᖪ{"˸R71G<&3wm_u21Iii~jz7e'g^;(ui^"W#n9> p(n,jz_31`M{,^kk.eŖ=Ĵ{D|+ ud6 Z@]J )LS>^")gǥ"\;JFϦ7Uwu+m|7*ٸ#T?(50^d?*{ <!@A+&N>oPn/`aL<flnK!"' D.8b?X"ZB7*s7s+f))+Ųdz %%rʟ׼N(e h.j a纜e#&uX%_i %ĺ):}DˊͼJ賙ic_,j^cj/.W K^҆snpL1G.]26P%3y#=VfX~Q+"j_mvdKIjK09!m"W 0uӆb0<2Plkx+r0Jc`(:/PQ0:J=JϢu24.8kь\Kʖ!raF&S6ɾQ4]ˇNQ11 3 Oل z&ET8F{/TA4jTH/*dKxMXr=U0`%K+UeXoKR]]#de|1?ʠX2x7A][%`  k$M@] QW<[ZgLO2 +~`ؖsẹWa\E޸Anw CN`jɅaȱesGF2+Ģ:q-%LGMJ5)9LC^?V ~oTF z%J`Tԯ\+uy!`\7 E8:Q$XZ)AlԻJpEYPsmA}A";|ӹXRbAŬ*&+5Q,0Msƺ̽>Ѷ-akS2pJn#b+S!1ƼŒ~j1q+#K`7Jxn6*QYEG92R[z"/Lqob-NxeuNr1mkVEOVrB.@-*Ĭs,f&(ǼKw)Ae@=Fm,bJ)? eTøۋ87__MעWpmD3/XiAj-K_N'7JǏMfcϭ/XקBYODH+:*%C (!-Q= q'2 yܢ)5gXԼZQ\E,䚕!kҁŒZuBd^ ,;5(b>̢-0'UzUX._dr@EHԾؔreV@ə*%w|D+U*&ÆY 500bhqqSP,qA`7<@HHxq%]_>ĸ%EwJ%fwEh_kKQ>%!IcO2ѴQp@ܰPU3`x*hV+9PJPV@+ 1aO.0T c(:iS9]AV*Q(BWW.V/"xP\gQԭGh`sVĩ9X3QcdLju)%1Kn撳/LD2\̺PXɍ~A`5#D \-1sjvnqpsZp6JLݔs rf 1M?rNdDi_S"4Ki"8 O=CUK^̱Yyɕ ?ܱ5 kW2J-j̮@Yd.1"U^bin w\^@JB `,eeX|ns~^昻)P穴|H5νF^=,!U@\סLsLw.5ߙUSqCp @pE/ؗ~JiW0wL,r\@) En`g`K"]NصoG P* Czw7 zdG3:J0JnzX73Pn D܁5Q990:#ٸN&9Ec7RJ s~C%nm+'A-e+Y//S]oh%WoD6eYDϢV`\qDa+.~bEK^W(e\=jMS%MيYΠUFjls-{!RQ|"\Q}-5I)Vi]M7qҡlCP3"_(_$ףd jUAl+^K>.UBS! Z1v8Y& W**F%y&2CqLZ,(W38טsl5qvKMQR*X=0;r׬MUBq zJ uZG$ TKc{W4ůD%^Q=XLTXmB\SBvQ,$Yh!)B4S(AD F?@Dd8AchД̯Mby!Jv-T&9.y{TdvWHufEbHh6M#o*"v@Y5- Fs,kS$ɁP,%cұ}+7Q"_[*>- P *J}U~Q? D*LRI5,1@BG8F%PBZc0$Ń*a/23& 9_Fۧ9uw, 3ʸjt%q3Ng&vZB)&-,e/@KZRs xQ}^(@XخVV?wf %ORB K̲5An-zjqZbſAi ~81~Ĭ#J\%M*e&_0:w*FZ-/rfGL6XjQՕe3_CD-h]ZTK*Y+C&h-J2\RlnR5+U R%S0$ע[+Rܭ*/V*wVQcO(@8!.76nD]0n@(b^1 j=.>bd39S Yסa%\i0u;wqoC~L +5+:[oе6F{>}W%JЬTHGކnƲÁQ+p*%D Q(E0j7 D,O2DB /8 _Y1s>eT z#2/1 KD@Ž ER$ 1HXfX 9S .0bP]ͼ9&"Tul蔯 aE1lbf70bc?p9s=Tiǒl5J;[hv$`V5..{80ܲ=1)D/@.e*+Qw321%l)Rk?0cs!\a(eЇ%_I8 vhsg&h d- ]\L}D\ ==/pŃ5*-4m91^ XSdK{e2r-p+Tkҍ&)vLvi\~X S4ҕ 4KET  T̩.비Ρ0u{xUiS~롫ػVhXX&**\~g LP:EW W[KILϴLش)GeX u[8 DjrfA-qhUe`Ʀ[m2Vl}LHωFxb bDb\W4{ag7Evf^kn-Ya3߮+o֏Tqj4fA+bb2Gi*W3q(E\)#gH/=KȮ#Ġ0]۸_c5(d.F}Te ڶE u5# k,Lv a`q{sWR`qjPj(%rw*VڙIYb\~`bێ)p]D*J5v(qd?2TixI%8[ĪVrע.zZ[E^"RS*0_]3,iQn]BA74oD}:pVm>\T3q01@6³(5k%Q#b!ޡXq J,pAG]1[Cn^&dL2ʿ XJJYA R˗gȇ^'PҢ%JK@HlGj)SFƥ[{:":8BdmndCTlV~-{o Dӆ#X Q5̏6T;>^P.-C Qj+ Y%nLļ]h5|Mej.IsYLdj9VJ#N#b Tw(0WyQ,*qЁAE \ [gW_+(pM :~:ceb1LeUu 8"U jWET =Ap}9lUq*șq 8ΠA\3j.`ľ#P˦;  QRiy`Amc1' @ 9TPLWDdǦ&Osh솼KJI\%WL 4ĹVD4is9|3[Xʄ/Zs*Qơj!n&Ml[“\򘃘~cD eS*Q/7Q,S1uz\@Զܼ'ߢp;} 6C^6Pfm951nY&;E$ = +Qs+ᰲX)gd f:uFmL`7Duԕ_GU/UUzbGQAXFϠxC\K)Sφ $t-J&eeK󹤻qXf& 饌624 ./Ĩ4eDOPC Pmƌí XEnm+DFF%F=GI2MjUHra*pɐnS1G#R=̃ˈz2L)&^qLx ʚf$vnM6;uuNP().Еܮ]hm$"ߠc~4BNp*V!uFL1+ JdILW=mAħח,zYnUsIJ<̉.SGx{F=?(E7LYXP@3Z𕀁W7 @M`.UbT{o.%D 1*y.qVid'qԣ:vR˨N&EI b f`Q69D"4 5]fY؆1+ s.w*R-C Ff!Dtr>Q'LBe<)N%FLrİN\PD Vp`z<@sƁP `*[1lcوèl\fEk AO2f`$b+p=B@>:_o^x^A(Lk'~g9?jtL/:0yܼV~j--D80bψ_ pE\`,}ܰ j*!U&=GP j%s/i\B1lׂJ$l zbDLK8iDK4e#)e=ك̫Чrqy>f г Tpm^ԫϢ?_3I`WEGJ=!0xdǠү>^YwE>edSjጨ3.o@8L_l55^KDefX*&C\ J ĩpܡaҗGLnPE)@̣5Bz ߠתʋ s?]b^cK@QEUnk$O;B=,#xd @CF"Ґ%qS8+! Rئ%߫#0%1"TZheKq/,53#He-ɨ`aV#KM|ؑ"<5RơV⹭K7 3b4A% efH8!XfbһK%ho4sq>dz f#0 L 6ԨܱW.>`"H|B[=Ph1$pzq70C60U{na_0ϡ7+i3c3i(zs(Jڔ*KĿr䃄j m6~GRٙxl^~匿 6(%\0\wTR l- EEV AqP;r[s\KP.vļ6C w) "N;J?>e5@DVE&f"jgZ#Hf`e ߫Ǚs.%c_32)H 3 z.(BTpY U@w"..8q늸OS2;_}8.Oq3)%ͱ-Q*f.T-4)ж:)Mb;`@>ewB`0% 4e%B&%c\J5긔b 3)rͰ3-Kn nXVu2cQ(BZpx#o̬=7'~0xw ĤGk <+ZԳBz}Q>q/JoQ,ؖc@;'qk˛Cr4ܼ}^, ĥ)8>a;Y}]o;EWq-ghC(DYgSfS0x@AA9=iIϢ>sDpT ;0RT]U _Q=8F>TLsDKq.e씃?2YѬ| %ޅ+{y LQ^tz˻re.pVz,U5w.Tgѷwͱp"@jsnUtmj ~H%|^܈)!7ؔ/; 09j ƒ .&7P0YG0Q& qs8 Q+((sA@0Bup49\K?LqXP 0BR KX h*i蹗zi4ոd\&%PQс&ۍLMQT/(72A1e&#7&[,0Y3Da3 |AZZDљWUh|D0$`jS0!+d&:/0bq~p W\JbHR >ߠ0)]_L"0ņqAwiq9y6bV I9p[r5;=НJckѷio7Q3 @=0AUy -y+XC{r+.w0g{1U9]jnd-x\0G heŘk'XCR+h4Db*X|-YWĻ-!UѾ+6F:VaCquzߓyË G­UL/xa( Èo,]F#Yݿ3BP,*(1l)p F .*_ ; j[`TϠ. w븕 P-1*m3  Z*YqxTӔH٨52E+DXs1]0 /gqU `S +Eb Ai\3IBѸ+ נסu[d)n\B(rZBI3.ujK8}1 zZKaq#UK %쁺]f"qxP%õ]X@̧8,ԞR c)fdc!A!f&&Y&CD'aanmG^oˈ;qJ&,'Wԩ\mSg֑ܦ7$Luh̩cVþB~Er> PBY@xF,Z&:g &ƶrʜ"|~k]T[QR!J%`_7FHJ_( p rץVe_"$9caĚ+OXcJsq$2PO7,\_VI2t*Qn{̽Kng]V  ѓgQ RRżB}j%^‚nk½W'hN#exrI{jZ./ ro%"WBc+Uc֯Ǣ_(bBŞe@TB% HdD ĸ..k{f31h#^Y䀾qy=}{1RN%umj> l'wgI8$0];ji9^rYX3,ټKPFpix{ܲ'kz N#cѧT|Ĵzxҷ5j Pp5+S ".XKqG?s3GA&M,7=s7*]\kWkҚUfP Fsf̺OCK<"=Ǡ+aqRs]AE1.OT9Xxj Lj1H ҧ LY(~x^o|@Uf&-FBKP |CKT!+5M^+0Q_S~KX@ߪǙV`ǼPAu,ǡG^V&|QSղ|KAϮiP+Ҏ1ѳ?ԕn')DJ(!tEqnAK1D1X8ͽWGq|rsWLZGM^(y ަfܚf\zBf*r6,FjlU%M# Nn=u63rz*R)YHfY+e )Ju":TϮѻHh0_$Krj:4C<(̿HdqS U竅Z3*AGM0T`/bԲ,^bx5az09̲ט=o-i%Fap3Mg_o]>Ϣ\H%>e L<"3k[ĩ@U%id(0pDP05!:`}RD mdLղ<ǸT(S @FU Vx8?Bn1 >ޝV1ߡqWifVm ;r,]7iZPF #Ui,fԢrf9UQ-p 2M$״wzeHPT7a@XŨn.R{z-ǘeU2~YfC5^Ňz8?P73~\ Efk>s^wߢ\(A~fIJ:Fkw/|4Ԣj\D zv@U0fسĤEP"Yeat;mxP{kڠ PL $%#cpKPǡrep=h Q%(9sZ%AC~Z`Rs ըWOT :"J2vDA-{7]G1{D?W˃eWv Rw=ܝʿu+ܨX皰6OzN{ QnA Ԭ&j|ҪD#0;TC)@%,GX-=[-s.^}fj%}>nUf/2"PsJ$İ@7UQC Tͽ8bT^F:qQu#Z%lJJ%q*lGǼc> i*n M %Ju-&32QeW D̥C^73kE:QQ+w:ApꦽĩSBbKa1꘴1+Ԣa(a|#k˘cTJ0b׈v7N:]6fT&zEb01`ZuDʍi@]z-ETElm# "C}P0'!pRQC(oҼJǫ~Dj-?[~ޣlҷL!15 @"@ωhXw?UD h@ǫU)@e)7Q/J_rÅQ-b F g$HmLvb` ڝE[M9Tl\oyTA,lĔn+w]B 5lazfKJҙqQע!]_a;XV߈*EhaCQ  ATqI]S7g۫Cl}.bѨB ԠA^%\zЉ ګRpʑq ^AP*Vk1;[U,ԼW6K `̼Eys/JdƟRsܗQu1X< \ȝQQ׆g*a! }&tnY*餶%ALEVi`|**k#SUaxfZ /R2Vf5<* y+X߄;)j7gǢ\jd[X; V%Ay\K^ B |=v&yCM~1ߥwqB`Ṣ RY {FyWAݽ0@OL~x"T_Ao İZcgP~#9(ħH6_k+k ,[P+2;EIJ`D+Q*s9:pKq Ήf`0סouIoE> B\dJƚh,Z2쮳0,Q}0.9k3" A!3Y FByPDdAYMCl9DzՏ7s=EDzJ$՘"8b30Sj%.(a 7_*sܷڳ.'lz*nPluiH ):12b !ȏ]"gW1<7mj%aA51oQ.bS+1Ԫ1i}ICaN1-cPlux/nnV,^ѹd8!su*.#0f;U%ow/%ʧXs֎ p*F@TGzC^-5.hq,gҼ<RO gz%M/1ɋdEE1eY` ʐ9LèYQM]@8@jC^Fԙ AR #:=^ qgMLJXcj Q(|Dn駢i#A*XJ8lԮ$K;mQf7)f18}Cg tVeTw6p.<ķү?.yDE.-ʶCRD65<\GRÜfV%/JDb7;Q %pF+nv"DAQ7nʙbit]4 % ѓ87)-Jպ= 0ni-.#}%טe1yPn&LbXXQpI )q71LߦH2.py"84įV3z Y pj#rLxK^~1U:Q#3 +6㉒D0gh,s=GL?zKb`>1]OJZ [Eqo>+2US_^&] ]#f`"TS5C-Eq 'T5;[J˩w q1:TQ~VPKS^+ ܢ x`ĨܣK>5uHU0Bq/U/* ߰p3I{äŰЖI%+ڝARШjhB~eKR[OEszKxa"Q(9N~%"Tg1º sPA HaM9S@5ksfV -twqP+IY Je -K*P3JP5Pz]>&D5p bMGGyOv5$U-)p@nn\u+P̯Qq TbA : A0/0S)GP+!Q6Dyp E\*)mq{A9Yc5)WP%2*rwH!zRѥ3=#kHy r^"J^55qZzn;T5b }JYq7JevAD1\kM-F[WYi0WV_]\G*SR+9N ?@iPVs[%ꦕl?@!@.%woXWTf  aX*(xBB8|ĥ7W=jSM0(T HIX=0g@+U(#6P]3RVD.kt {D1W*s~!uW\Dy^+S i1"]&$XSD㨩a Or *~рt\ (L]jXeb]IJ?1Cu)jK2T.{fP:%dR@_>v)Z[<~L52h{p V>b¿j&X=,sP̡eiVMKA\ER*`jmgn^;pڊ׉ %"G0XLL$5ƠLJ{[CMJa, Yv8W۶H؛X C^pC=oS̷h Z2-d\4A;4T&)b880KV qa”fٜJͳW-. *K>U0 b=)h'Tˑ "YP|~tpWyGRn, WP85?(7xO3q#*= Yai(f`  d(+GdBW Na&ܪ5)C|w?#.٘؜9Y >#m9s d45[ܩeB#W>qWC,1ĪUp-fP( &QQ e*у ̺ir7?0\ ETR$J}-GK8h}e Qrބ7BRCsБ/ n[~zȵ//r6צp2AŨb%E>=skqje̱)p˲=͟v=?xkp 1d f5Mx`@dD^|Vf/E1l>i(o— A*U{BV1GRPsS EE'En*CGq FPQ.LfL1-<ÈQĹ!K+ץ?w؇ 1m!+ne꛸ژ^*:TD7pg0vCoP+"*F0TѽD)J[P|K=Fq-QnV`4SGp͠VBP ̠#Z_P/C } 誙Gm%]GF!@2şpY%X )@L&$g[gK{RcF6q(;>\1j&+HkUn}+5;ZǣHX rK d*.@@[K~VK3y9{[RQ0/Gjh "5G/кxa~%k*.N~et;uR%Eϯ.%$-2YE}$X8& 9u­b(p@GQT6 w=;bcDG0N7=V "TK Qᆷ+l!wc9%%ҶzV1z PoϢ_y`Ƣ bx&6D1/& s L EA+,eb1+qs5aSA\01h 5*ecZBxi.nIrڡ@l::G̿Rv,* vu)Uܢ~`#(bX f2h-lK[E*-NchNH1xEuDT` Dqi(7D0+8$Q)aEZ %ˈ!cFS %=j=ǘ˸7Uai \/D~IDs A&0RaM0ΪPA8z-K ASqen-1F>FV`%Ax}P3.O1*%C/u*Me/\*w yOhOڙ Nc̈P`%xw )P F8W S:{qަQ@g 5US AEwm^8QJEgkvʹw.ȗ*,!R]r\ %,9 8UFۄ ORYM "E*{267qE‡f=Y"`_k]D!Ռ/$-&ESpJAC)T /I>zv(&RH hk8b "^^(X@VcįM"TKQ -ewIJTu DjCkSfw)S/D2@JťEt*Ruvz[D/R w.fLzDn+(3)yb(z ܥj:UVNSD>9 2)~ +5n b^!s0eQX`aSqÈ^N=DLD^"\J$}GLj8-ፌϣkŸ'.*i*+/dLc1&sH<*_3]G^"m`AqH,R.fS 7Ǽinf7eW`n([R&)X[P Z޴6 ~~%6[ N0d d¸mm4N@I6@,[H:i"9ޠ˖2q&ς(R7LY0x T ,BdJD*žCVz #t7^0F 7+Xnc.!G>&USoAl-, F6ޮVUfRuJ-A5WW۝cy%e[F OQp T1 תzhGG~& 4̄UtFYRm"&Lm<̵|TNZ9f-Enr{-+Hyarz2D!K9QfW1~RC}=@7@TK#]ġM^e4R ͼQ)t(Tb/ Шؐ)<¦%_}DK[נ5 P3O^_ -zU9`;OJ-A~mJ2s vFK9`pDXܠA|TǞy"-*fdij+yGl_W+G; O|0] I[Ih9Jgp(5.K՝JDS]%Ws.Ұcv% :mfJDiY^̦lHQ [ LBT6 ~z1ߡrKDC'y(%HDD\o -2Ɍhrע5 e.1Bojd̩)) D 5:X ։A[Jܪ#bjQ4F-*ylE$ 7r/j*jA4qE0u frZ-F3PRc5*!B ĿZF1.Q1QԬD>0eZ0|`R-qJT%BJ`Z5|Mx05[-Eǡfaj 0AK}B)abqn^=.Bjآ{RC;=K.(dvL&v;Uh#)X(y2!;#ƦPE8-ܿɵ7t0_pXP^b.4Rj5DW R ̫6Ԙ+ڵf XASk^h \H,Id̥faD?lt=Ef9D0GJ}GX@`Y:p@Xy^fOhQAU2CL?0ֵZ(pTbVú q1R~m2ea'ԏ& M6L~g2X=Z*2-X5 ;>&ƞw˘H gHg2M,V[͎+R ВO"R+O\ɰ;Pw3Xf4n Yq ¦WW];BF*oqxqql @)!#U4( ZJB @! ĹhYJe0SQH(;PS+QP[sroǥgOԜQIQ7, d"al-B[QU kZ[Ns 1Ǩ[(g<~c!6s\gl+8[`|_qøc}DS+0=׸?T-֥˻g>"NAKe,oKa^ɦ%h)^гbCzM1 F9JE\p̥80,h ڱ.Ҭì)h ;us/2Ub",1a+b҄gQS5(orZ9ȵ.EʪT8"|0JGFҫ f*Q458Jii|DeHU"&oʵ/' q h$ @GTL `AzAdqEqأ#8,X, 9;:Kt@pKy0ɉd[P Ya oU n~WVsrS LŠeWHj|zy_( ~^rO[| 0N;:$8¿q>(s,\;M!M=̲ -GlOy-jpQ+I٩Ubf)QC0y`)+zE~:~4IcKF]APZJ2! $VkACr s*S->`jAm׼O@قgܪ,P s%m 䙨QV.Ik71M['P1+(&E+P.w2 핢~ɴ}T ;= G(ٹb`RSjLf/n2 7 5ߥ.\10D|L@pܪ%J]J+2u \IJZbm)1N e(M(jp̂wAgKoUf`u 2t:j*Xn/ACn\G{,*q\?B!Špz\]Q%L B;ڛ00T]Ve[v6^9ei/S)rY,eqPq@z,hJTz^$ZXF.fNx`\ى` !(xBԷȵ|A&BMK$<&Boe-RV*Փ00pА2zr~y6spQ'8״#톌Z3 H.@蠍qy^$)B p25JG~鸕1. %a]'-WE-G'dEqzIJ0a@ e`ԻsxYHJe1A1[{ _u6Cy13bRh-%\J lbCEThTh:qR9ee;> \8l#C\J|VaWYIs@\VaPVĖ߈4~oWJ_nuS.Y @p}*,>abX@Q) ILܥe/xۈ\-`bOGqfS#qOl5)K֣!7;\CO~uZvN0(iu3*.P[bXfZL#p$Nn^'*Y,z&gD_.JajQ5j-,2+Bܹcv '!1zi/0%.l[ MidC N":2qT̳0LpXCM!Nza7;fe Yo* ˦]@^@TC}%ЭAZzi LK%˘:%ʒLV87 DЀvܰ1}Yz-S"s:MH0b0R\R_Rۥ+6KuEE+Ae*tfPPCY."]8\; G/PIu[&I1Nr \0Ŏ!xk$m"J0@1{cRׄ&2>pЂW-zkݩ"먆rYXԪ"\ Ɔ %=1S1$Om/0bܻQq+N`;,e$\e 5VǴ7ʟ`55 U^5=SIRm`tp*Q&Rbb;N_+2$#u.10fuUndS`~˦&JT1肖^"9X,\Od~^`_=+/CiyAl-4(M`_}ـKk!Ք²L 7S9XB_3`I}9e 鸩gZQ@ ,hc2L GCBPXc%xm24F}/5n;rLWP1 @zWoRSs٤W z ElyTj9a8@;09l% \Ԭ-ح^`50)L#$I( B*RZ,Y3kǦTK pǠ3r zW߼D\TVF.J#,ϸ2X=/`:WtD0ENG~= V [s з栓OɄ u+Ki,jba\12D Qks QMVi665r O[^^u3j8**dߴ ]F״ĺ-/O2?Hg]1 HKPf,NfX&I5ULU8(д+6**V_rXjpVY h~!%JϘ;Z00Ft rJ kL.F Yx&`meoC,ĿŨpn lrٕoC~^ DQT/[ ~$P.qj h/Eb03ҳzl&!dpt xdXjdIi|@lS=CP/CkcqJCIw;qq(` I[%P2B[ d,/ 9,u-~eU=6@ק19e3mf ĸIµ%ˎ-;¸c"kxyExG\NUJZZbDC2HGDf&bp6,SRfHBp3K 'Q!N9%@ߣL"o?Vf,,qJwd]./0Yi7Zeɸ,y%EUmT 2R0S sU67H-խiVX=aU+\hWGDCԠԫ**?F%WPR4EyPS ZjR`ǣL9y(4t;Eu2qtʜ@"i~"M_R6zp5dZL_LXH!ΡjEh9/$HZU-1u+ B\Xcr[w G#G_P/SxMmK"ߢߡD׈M%U,0hWSK%(xx/P討T gVCM1%<ÃS$(ϳm0\G&Gp5\GjPqS%'V zp:}VXꪁ*΢S W9P1)F^Q5Ly9 o^7w ;a `XU9=FK.ܼ;Jc;z6z-z4v@ WUl-e6)jfc3d&M׏OUGpz4cVw/CLQU  A f%> Xj՞X@#6\+PF [EB.J{IDH-6/5ٹ@m4Gg j0u ^aט -UqGRԚd?b7_S2*!^#3eVa pͷ]4w3](Q. 6ܫQ~ akpjx#RzDzP0K7*Tz "%@?JbB]zUSh*'~:D*gL$MC#3R N\׏W[w,=X/2وEpV๴2'-aZc''7q*93.tl+)Ř9at=*#10МMz!lƠ id~q;R%=LK D]z%ߟoFuYu7}GSYQ=]5/HlMx@|Bh[fR(J̢h[Pf psQ`&b=: eBV6S*/sDBBArļLS(˱)Ep!UǠkӌ.b;c*EnM(fWrV+Ѳ@k 7̼Kl3Kp C 㨪eU~^dkLq@ ǘ 昼˨Y -bkz$1'RSJPT*lf-MRbAdTeQŏ Xfbu[ŷ=gġ7!aVrd fP !V%RXv1#FJ:g2~cԠA ziAw*KfN w?Ի1Q^9`qn'fܒb 2P:L0 !n9C8D V* La+W+5}1>$0#(eV ,JDCRą-,Q}QK[zAvzlEG*ݬt@p3<C<"jnj3&_Rm\! Wtbk-D&^AK7b.)^DJS\ 3˙0'1K 6<C^yS^Y1o:%/0>ґO]J;Qb"4r*=T Y*G *[ٖژBUeh!|`T;CƓES(Q/"dD%E #DQ r_<e1)Rzb8a @ y b,fda/Ч;W+>SG[m)SID:\oe]CKL} h~ A(K x"2ƠabF%z|z%z`z;Def zN7/,s/s>#GKb3ī"~e[8;0jgi6/aD=)DU1G:œǓ5@8κ;iG"<Pנ2GK%bV`c֘vuX@7D)Z50@66{̱^5,)  cĬ17fQ/ģx@.!wYѶe,0HnV)gϣnSXֳb1*m㙏u(x>+ NŨ)80*Ww1Q.t`CKo70y, {\~ ?)U>0y`>9ZJFH6i]Q̡ļE!MU.ieREDJ`WeucCŊ>2FdEFԨ4)Xs]J37s%bswx!]RxZ㨴FӤ/vXjy}~?C7=5.}55^ &gxŋ!RTu^Yāy:rX+]CSH.l") ☳Pxvyu*%bs8-y2UCt+'0*i!* )k AXbP5lʗX`p 9@rV/.-\J"̀rN&ܺT`tVeP15Ĉ. +%^0%@ܢ@@7Sp,X7TO1)5/АDw&j GrطB\Lj5i9ᇠWh$~~ZQ`E_6[S/|EUQ\-'1"RS [ȮfrP)pb`LC OnBLA%ޓxy^fqke*]n(NEp xRW*4Oe.k*c{YT jJ2c|EQ, ![h˹Jce"wSqY R.+U;iTf jslOoV@+jU7̩l0rpbօ~=SD!˻PalTT[KMtKE .vMXM=z1*Ķ Ahh-T}.Rڸ@Rba,J.2SbV4Iމȸ]X kAD+}k3hp0AZ;%r -E1#m {"58>&.S˳.㨗RRhzne;L8QӎV;bDcmeKj^a.*p&X<Ø0DEJC0W :c8j$G+Xx :vƠAU!X\VKCP1 Y}H/-EkYC8Kưjh:4s Zuk0V@dNHz.?/xSd̢%z6KQ q(Aj6Cz.):ls>1ȩwSph5k+m^kQu`>XEwe kYj]QS]_R!ML &l5D a[İ^c ED*V7-ix:E9~;Qa:KݬD%dM|F jq|QMF|Ex1#gqHUWZk2{xS"W߰ƍ븵;J̪L}88ԫ=4E@?psX4\&tD!kH2ʳUH{@x>z&KeRkPUk#͏iN.ZnZĸ;Ѐل![ľiLuLY`TG~S(hbVl=6QTU{~M He U_F TéTP+ivLJ'd \Ys/7rc}LJ&0cEN`\K@zzb[Dc 7z8%-0Q#Pbg֠:%MZ/* ĉRUω0qVXo 9A0n&a(2k>4z%%rTUEfS8 K.,mB2%qy+hcF)e85 EV1J%oz4vo8Xo 6"h CQ;n'ܥn8%7O?D×#W\t0.ג^1[TVP~sx"ʼs@+v=zV.#DJ=XE}ZWf q ߩF~EVb_`Xq*Xq^̼%WZm0UjɢPA\K7 za8/.Uҳ~dv9vU*mtr@s\ܭ >W3gAQ LD.RBj%"*0'Yl9vqOYP L`0ٓ\]\(Rc! l&7ܩANVFB[oS>Dw ]A5 ə0oZE{-be0€Ak} Z1e |c Β^ck z3\𥰑 ~[b2KϢZ&O0E L}h9f8:%c멄k5枉~įV型=\aVq (,W\6kڮ%L1j*/v@aؑV愄C}1-= mS}=j[mט˨؈؍^sF GϘܶdn's·Rfa~j լCOȅo 䄔n4R25)Y 0fD+4#o n6Jp3ջb#,9傑j3FN 1s 9Y_Ka5gz 7 ce1U L=: s~&ODz&CQL =;G f1v\Uwڷǥo2 Gx UCq@CW4Sڛ} 뤾sJJ^c7*,NBy(qi0~/y%徻} ϭ]#tunY8# YbQY{ m*p6M1ڍQZ@T 9E3q1Fج8s 3*ɟ-nJ3G~/Fԟ4 8G.i^)fC{oevFe5 Y¹UJjGS62e34 ʉ!cօ(seA[ƐwcST' w%8sQ0b]\X*$[X 0`>EB7p.'棓ۨXH<̭Tq+9efCeje"u:3x6\K> ^-l<{AKh:m<<״JѦ: Q%ÚpAY?R̻^A~7J2QVs*Ji?)IOgMkPaxs!땏U\b87Q m+ЕY,[ m D270hBqd쒩/q{ 2Mw,#N',f=*q {%?સ{|\Dx_ޡ|fU4`WJ @(xҷ/19)>r*KE6Oh4R/e*&HQԺ"* zMn{E"SQuUQW #̺+= m7}M1ni17oTpN(7+P chBq39HZP D59UJT8K1)wRp 0dnb7y%_@_A`;MP*9etq(MLj'xx[zp$8x`\H4AqaZIPQ2uk.Jq;%2e+ b'( 31 3[n59]MzFiHaя]`HCGrzi0hJǥXfWiY rA>3149e3wxM|Z!e~W(|,88ՄP>])A*gn3(IFz'xi$mEҥ9 S,ψHr)3pM8,.R۟h(lYkJ5?c-Pr{ JbLۉ f,;{D +A8bŚ V{e((*ܸ&A̫m54IsjD}JD9ԠuPQ&1A].QTN}WPoW_q]b^s(W>Xk1( в\JA0T CM/lXy $Z)]J3E,dޡc08Fu#-A&_1*jT7b^e'EJn7^P`"PXCS%QL#Vb@xS$y+hd0&yZWrP8(s@u*?9(g=0QsLU7w2E٫'~`uz-ZXr;n "dtVӸm+1(s;71w_RV' WJ6]G֛cKT3OEZ1R3` aFC;YBAC{q L`Źu6ehXVxף.M^}]bowq\kSq*: 4i&P:":7 RHD/P$d p-9#1+5 Oi=u4DE9&,W k. L'Y9 @IrJ 0 `PZCu{qLH<~@ Uz Odd (cN"u1X$ Fp.Y  `[1M26 I *e%L/0n z]E(VCRnV C$@RA1A;]L#DߣM׭k-M1[z E@ZwlZ= 053(`*Ĭ0gQ}b|!5Wd1cBtaXoyH{%(1dVs dL3q߼7AǡDO1n`cѤo< >?,ק8Jρws3D-a cq]]+W>fR^!`5wW7DMV> stream xXK7ϯ0cnvg|9%qNY_#UIZ^[w}P NJ+1jvpկN_?'P׿'?]?r3\tH};7ȝXPvn[>W3]+\^)_ᾞ]&{Yϑ#|AtGtnzb3"j iIߐ"th̶H34ʋbM 2LbK$&xO2 dI'tE%ѡs(LI% F=V8|[(\z¸IA 㟏ϧe)D<0[D+9ܙT|$3#}lk9]lk\nKNt GӝfEӔX"`)3la1`WPDDf"aMFyBfFtfR(Odu,L,bDU6KJ{n 2NBlH՘=4 2 / l-A L^*"6jBURdJ6e<&K9C!l=ȚHfNDNxcDnвL^QRnI>|Jlqhlx+TW`v=8Ch Dr&˶NLX&<=Od.=gz^)(b -TH?qCVuS^)'0dEuSSYΉ B,DGm ۱ᰚ er[z]%n8~Rr#,ettJ.}@9x!ս16 %86=bc&Aq^D8n[ 'So\}ZQo&]W^1NN*1|-]'@ʖ->MM/6F9g<,˜C(=Tf]g(L&*Sx&,5y>Ԑ\r*hq6yxW٨WA$ UƈCKػ8̒@7 [7Q-:Uasu7FO1ňWdycA5٩/;R}y$qy:;(o9d ķ -+.cr;~K[s[n15WCEMDTk*Fz| "^;h_ԫ߼zկfx6ck}9wj݉( endstream endobj 16 0 obj 1275 endobj 18 0 obj <> stream xZO+ S9F#`a`hniMx"Ex`5H?"q'~?|[Ltw0})M3)O o?M?'os!,Ì 4e'_RsYVHnRH?ߟ8t|>“K9'3?Ï+HG[<X.fz+}Lof}{LF+ 2$#8LPJM"Bp?D̬g9H,7A1Hy OGp'τ| q(~>ϰPt~M.y-lt>jDb]z]q2͔6Y;_-&}ןU<T`* z=Vxxk֯bq> p)Adϵ@TQ&O6@"Aެ<kZSFCV%m^2)K;u-\rnV yܕ,Dl4i>ڱUߋ ``uG,(6ciQ(ɒY$ yY4kZF>Wو h²!a kYaO55"1nDLV?&8=oűخ}b3)ub̗zݰ2Ը!e`^l1GHzͲougܗ{ۚ+u*bT`և׼nض71(9 wCK>*-vsfwE4}DckŬf]Wrgmv =I5Y3Wzi;]᳝Z S%|Ay *j! _/ZLo ۄ379.an:Q+-^w "x{6>wtd:n`]o˚U<kH+1e/}Gm_]HkK͹0 &k'j)7Yͧ[4D߰Yv\ձT`oV3Yc9lO{?\ UNDRq7m AtI;%~]NӥJk[iE]IŎeR [#;PܤCzYkWכ#TK.ּR`ntl>ٱe[KeMNSzgz-nKH5m]z_I`RmZ h::Z.q lfC_B _tp/B~c9 {څʘ#rVnSEVqb(zy: c|gWKrfv] ew{F:tQٷ?JLS,E+ l ]ݘz6ZO)*ԻqpД6hQ?L'ؗ|k5)M>iy6n?E4-OuV֛^?9 1onBK:[]xW#X?֗Wwiשׯ:ǩ՘Jnba@ٛO'v;%y֟ҋ BB y<<ٗ>O #!,>O2u29MִQHF7Fͣ)S<[jݠ5MVl`X-zr ?VҪw|;uGVZJkvwFcFôwôwFôwôwFwGh?nM..1\!KuVE} 8JO 4㨒r({>-Ѝ#!<9$Ӎ#GCKŅn | `qY>N)Hg[ @)7> stream JFIFC     C   X" p˭.8FWO:geMJkdu2YpʲYuׄfv+~RxdKr->yBԾ/ӶHY5Os4|rZZ]wz]JܟN'kk;jή{YK򸚞sҐ7]λFVQŹ+SXo%N#6t<|Jk֠͌VP')0,Tޖz42_yH_:6\"'BgsC=͢ȶsT/:B}q]?F +"|;S'{'^3BQqiNK(B,F)lgG:&ؓa圶^;S!ä{ =Yt:aqt0;{) H)H^=-=>"š;s,gsV{^#w|:sEnOk7%[&6?}]oC윣'ѷL#A-m榈yy,*mQO(f gqƘ~~,cc æ}XD+"3rTc2˚$tM,زw`Gs8'|zuEq >om|=m6caz.3мS]C.zM5F_Zϭ0;&d_>z-о_A%O_h>z?ȍk4{*+*pFF8)CCibLƗYU?;!s|?!omS:gӡF}il~5{tkwȫo^Ľ5vYo[7ϝ>HC-#3ӣ@r$ʿZ7r8zok6v=w- zHāxҠ%aAY=ydIMt9'#Lq2k¸.t'%pc/vyfb3uJy2suέ3}pBg`vIUwzq2 :Srrw@mr&'"TVb,ira3=tptKpW˹*trBrˌ ^ 6WV&Wzy%5-1 sf1'3 [0h/=FogzFKV+ԳR.l QdDjɢG)d+ mP*coQ"zRM~C*Ժ9A XB Q 4(СA&40ӭj200Qd;.] @ȉh62q4[qR:䓭p6CLjKjR0@Q@H 1F NVq d`25FL\!` @ 6S:#=2 m8f7I~|*TԍBFv6Sjo,B5A!i53I&)I1Fh1a' 6 Np*@@0A¶)4fDA6 BB3DM%\6`PJ q4 $֬T99p/@BIf33HiP`5!RH1f Rch40@3! `2L0@0+,lФ' l2"@Sv!FYUfxҡNЗ:(vH560FiP@4(RT8K6tPfp3% ΐV&,InA@HMBh!HD0zl3n=ik%l79v;fVV3Y?%Q^[l3%Fd8wgzlwcY<,P QrC,zm{e 㶍dw69CyK & Dſn- L3D OfrJ5ϙ I֮m܌\kTgzb7 sJ1]ZmIp:ZN2lJ̢7 04XaY ɍ('}  (F!b@ SnVlDD)˱&UrŮhn*V`Ѻc-e)unS*dR,[+xIrN:ȱ-Z+_.Ml4 kXs_Њh!Q%HHwQi%Izd8m~&s^Qrٶ$qBatIQ2jɶǤEzWm0&Xj>C\IBbKv0\m ;u[F[V5 7σұ[cOL0SM>Hӹ4Q#/Rj3k\gt da,MBNX+DmLvx뮙ќI2{5)YDi,a "Uo6Ćs_(X~m6lu5ݽ̣Q H&~^ ˪1M*`[Om_g`Qҁ9&T[jEg"CuhViF)Qe.,֛hR D۔p@ DʙM *hfʚ"H H`k:2 VS< %x+%D}?cF`b "0CStvet `F{ERRPsslHV[,(6IWIHJ"Q4i4RkfGi$R,=j-qc!y|olM@C!Jf` "0 ЁG 2a`S#q 0*al@X h@J@ jTUz7zX u *86! 1"02346@5A%7#$&B'殡iT4I#|put })m?NH,6bܬ"e,[T}NWkN٬>yյH3vP@je)tZD0{)TjUZtoZUڵ5)Vf jܡh/T-fU ܨŘ)vYj^*S=*t jKMVHUN.eBjv>niz 9s.%A]n[223c_!HVb Q%5<$o{95)mNoYd'}%PCh?_!_q1@ZvuaԸ`~'n%RYB3Y(z2(?NeF:cMؒ2ÅZD;D?f>]ڞh_]N숋t~c S-k46QnP84%eihNVeSz H!LnH&uhRݻ9P/ӋJM>Tw2q D(o%\h'EhݢUAQ+,1_6QqڴFNBƎh~SY9ȗÄ*Z5-Um ;B&2dlޑ C{oնHժjKrn=Q3pBJ-y((I}$:g7d7ںur*Bj˶%EWLWvذ ~U+.][pv] ?zP%Ս6}q ][p fU"/k-kYroveYҳjkJ& l*亪[dVYԚEbcV, ]VԚ> .ֶ%Q~ê7+T(cH{<g e 2$Ak4w<T 54Nd-D )9>N=P PxJ^HŒ*ΟN{DLA)83xLtL]4DRˉ ̣Cx#Qn*m&t),in" %zvȨ*|Ҿ(2TEN]K;֊B?i]OԮ=>i_q.#>LK !0(74ENS.&T¢+Lvpͬ^0uhGqߐ=9%q) ћHd{Ck%#.EusPpTQ *DMq8pkQiV?JwvJfR⋯*tJL içBtcZߒ>/{4cX~Ms7 J ~*%Ƀ%e9Qz$u$]_we]:/lсs~+nC8Uu quȒf8tתhTiųL [mdT bM]FmX2hЁ{# bR LKD>vddgk#H#,H!N~HuK 1Qm(3j|ZE<5/g o×BOMA|5R ڴP%TVjٺu-:*xnjͨŽ&b&Tf(k[T+jbߑQ=bUq55!UUUUfѦFti@;R%2T8xi#]<Ѧ)DFbؤKf:K6 ;3\m7_|⼸e {Mͺe!H?Jkzy@ZSKzuxY i^ꏜfj1 uR .Q΢ i(4(aF$[rieܛguĆU߽K6P-.[w_.ٞa"[;Y&o0004 #H4`iFc'N%[Ecøi: g,Gf)[BC5*?PJkmv+cv\Kpʄ"?GCFO"VA>FaNSCg%]22Ve/Bi*_Je٪.ʯ8Zu[RPNعsmyߵ5d,^6Ժ+×!m×)mḼ Z VkCաhxF<#ZVǃCհvelx.)M\7>7.PT; 7*ʛmKnfׯR3R-j[ۨT^VnKC;:F*򞿨3*͝Y+QsQk$f=L(hrY{ZRMޔ]}I{ye'%47|o7xo Ѻ7FtnѸ7pn 77pn 7;AA)# cɀd6a(BӢ1ĥouԲ!d;ȇy"Cw!)))) Ҝf 3(/na#>xopY: &M7~(F 3~EePϟ ĸ !5&--:#~7J?Q>e,]ʵddg3 A}A ^~9~3 0Rl*lŮ$3`VJ]L# \P~oқQ?(!-6HFGȌϞ9,II7T>~ ((\tȋȳ sKJJ& ((/>D~U?U >~5ߥR& ((,g-ld9)[ ;Ht3e"O_KJ 0G//q85BK,򲈟K~G>"Tc<Ykj3d}A!s^P3tә D9U 0B8ӆhyI pdRX"漒!5ʖnSfr}ڤ6M՚|%߳OPQ %Q${KxOdtm X4FyMgyD#ƌol|}mi(gsO0,އ-ݵK7"ȗR[076wq<:Sa,5!{ONz? Cm& (VF7%h,y1W9l71]"/~r2, suqC ΧR$Yf٬e.NH3µIY% /iY(IFh.f :;'͍culn n$n$n$n$k!jdd82@tHRCw :x113 RJXge.t}"ByrR T#Ar=AS`cT$ E؞؞ ^ O\gPn+DAxv'{Ra< 4 $ T]IDdJ&^˭#O3,%ce<`3ЂT[Ej KBF3Ƚ~ R(N -]mQ7HJI|P&I GeqVHK-Ց 7rI ?#g\$g*.ai4ChT6P j0Ж Մ^Y-ĠjPqhӑƳ$ӚGh]X{(F21Lڀ܈hԘdDI2"\@jAEg=OunY6Ԋ1h9lvc5k H{yFlPN%`)eFAć؃vom".B.F ̂MTKS[eE0ߔޕn%MVI.`̃Q"j #%dx Np@,F(1!ԔAI)fY< ֬Z&eL3._<4N%!ʘq0ӥsmHy2yH%J(x#!F,/P?A$}}R+c%sw?FBA2~W_Az'^(! 01AQa"@BP`pq? bR[H&H؎D#ؔk%Df$, txGcYcR!8.E- I$Ē"le-=p|yBUKE7-sXct4QQF QQTb$14U4Hq=^2v%}/>̒F| G,R4)-!1jغIv*"`TNDɂSEцLbkZ&|"-~HeEj Yih-R:{A.!?$PYt*HIDMA8D$DZRҠtEj Qj-EZȐ#TtD17H DQ$Ir/Ig`"j \ŤI$I$I$I$I$I$ʃY?H(3kٷm6~Ϳf߳oٷy-^KWٷm6ͳl6ͳmOΙDY,&j&&H Xb_Q}E̺nlpGkAAcӔ.C $! 10A@Qa"q?N/քUl2&~$[R5Rȁ$hlm7[N WW6@4{?ȴNj)U)j68eLʂLuPЪFHd7zDT'vl]=ض9Vܐ),JFb1~BB5m^SP:U?6:]YhJFR:t2*YJ#w%}I#&ID I&LfL%̟I$*}dj]$A5(C'Eʑycbd,Y,I$C<&yE+x"A?ɣG!*AAbA&&&&&$Z-cw >tMsGuW#H sVv!+.3[pgthzh~~~ _*7oїᑑI"dd+4#$ddf*uA(Plj4cItO '#դIB22BfCI;M+uttM I&tO%D #\_^ϋ"HĈŊ#-%G?R  !1A "2Qaq#035@rs4BRb$Cct6PSD?]SN4Rik׹q0R_x}Iפl6ۑpkZ>T\9?^6OWulg|=n.}9G\c_H6eS F).YaCW_=bLv-=SZ~+Cn#8 2؛-/vUtes7\$Z$yVо'L݋Ke;}ƾvw3wǑs< PKޤ{/skdLH/5 eRAfk!u}8W }jm8bmW C2^.Ov>B N}n T5'I-){/ w 'LdFIAgZH`5>'w=]w{uʊj 칂m}.]o +kiA֋"y">^H݄bx-9zY[i!ͽ(]qĭey]l)c(I? ayp&*"!H ?x'Eluaq f"4Oİ,ߚi]uMK8y,a¥9S0pփR?Wڂu[gƪ/H-?mV,j+Jc26e金44?uQ3lh%x^RRiw%<E%nͻv$?!s]ysJUZ}_)H'>r;ۃ<[ ܕα*+$xӽS"4xb Ĝ ږHZpޞ3U|Al/0^+Tr9OjSZ)DPkQAl?w(,s<T[Њ4e%h#(uE״$ )-;S9muG%iU;Կq\2_7CATSuN8R|9|Li8M6y}ߚikRF)`$DdD+UE!Rه8ͭ m1g._ G `u.=7kQL9(EՒFm8(Ox;"s˚\~HW@J f E`$zU<sqaFdW4q:l/2<#&Jܗ^8--yFgLu"NḓN\c rZ6E nJU,sdᅧ%hu* ;sl5"' 'YZ] a24d-*XTR<67Eq'V;d*U, 'iZGqhpO| 1*j^Q{v(ڽKlhh[#˔{=K["15/19?EE"*@7{AǮ [#n؏w9Vo+U;&+q\Š-% fhe]F]wSa+d9BMm(|_ G_\QA{CMƶFƶ?օh14KeB^S=Wַ~!yӜ^MO_4P.nZXu mfNA qn-FHH9PV׊+nԭ7aׂᷥpҧޝn_ ޕjq+]vH +ޔCK׽^1*teV_7jZEu\6`xWUYҼk:U὞\d %3xt V5^9*ţ:JwPUJ^׽^>>fjwZҼ{:UE)%MAHf7t6]+]MX& dZ8 pmTP2ZkNflv5cnmki5S"kM<B)t.w$t}0V"wbg;:W¼޸X'FV@?uw< iV7OlEzƒ?G3/&왱FhT%6Wy؝?u:'؀HԶa,n ȍOb3/IaKlMކ.fB;z;l6K4cЪ6obÄ;VXbSFښ"?»h6F+Iv k;v-hX]@FzFòPcV):JQ{QЦc6 5=y&1)%͒9.m T}o5wCEZk{䦲tX9cмN)/0ܦ5)Ҽ[ 9汱W~k } -!6 nGgx-cI#<-/AlVsځxҮho0녿>Sdӵ=8Ӿ ҏ9fpq7w|Bz?ҵxq;qu3a QYnCJ];S d8̇vlCgkL ԄOp2~*^Nzml_i51w(9J?[O080P;qcXRT'FY ,7qpOke{]x_9n4O{D\wXn2R~g nuE.EwdK`J/[G˗-[yUGyc"m1 VVxh`|@[ GL qNkIꩽC![}{)kFIn_I*_a#I?ޥEJh]%^6?TSxU0B拷?_RCc]'kb(n$5ױ߄बMKEʲNCn7mOlZ?/<8eZ2n ۑ+_JMkH#źΜ=Lҍq~n^\YڼK;WOj1-kT{+:SW68KI6XrGjci*]}MUw4cU(9bӭDFMOhdǥTl#kliTHAwF*y"}XGjm+pdxMW-^Tzڻ6&Z: \y"}s;Tu4== ^^Yt:V)QGj츦h?g2!{7ݙgwelk o&W7+)k:FU;rp`oJ|ܭ/jVBך;ah`sI|߉<[+?b-5`= ұ+dud3E9Ytr.uC~z2AAracAG?xc%m3ZpqS]J}Ps;{UMMMw{V^ϊn[1n荨=0>S4Wn]TR^$,u YGw7"&\` EuxAUh7,V$B32h/'}^OiEy>&O Ӵ~#ڮcUPlVjXm-AWIh4Y2âm Wp1 F׊W] +Vb,6<#-Ch,nwޡ}dlB襜H085mWܬ԰%FZxObe'[˹a[! :)%Nʌ0ww+#ƶVH@V{LVimhtgB&nbBu@]8&8퍶^nBHB? Q]Kw# Ihs"#؛${nkۑsc-t;5`Ni;huqc*+ɶvjkɶel}уZ3dcτ!`Jm\N+qhd#,9Ugobmh²ZKM^[UW vZZiu涜]fX1@YA4̮=V94iE?5?5{^XnWDxI|/Bc=u?5>ʾȟ @IY`@ ˧J'(q*э`E/]m+Й4|8 +.k_qKFF(qȪ=ܖZP4bEwo:?F?{vR~-V VC!u~-- f2ߎuΟ%^cbAX+H?xţ]-pU][׷P=.V}OU( k0X`ѣT73R3ۋ\QiE{쓣xo:14\"Eq?)zazBzj{;]./tG`sl V*U@Ƽ5eW'?\Ĭ@bL$F^eƜ_Ks%J W;.O`9D5O*d1AzZ)!}PX?X[-uAFlEG5ߠ,ikΟ{# rV+7M8P5+)̧%B \]5#G;Q$:_2,Kߐc%b?w, #% ^5y"egjo stXlP%w Ey}{SͿwT#՗:!ss˃ $A8'f^BnX#M%ҸS,Ӂ3xą,ӊSZ?tїJChh[@YZJ='Iojtf'Iojtf'Kojlf&ojlf&ojdf&ojlf'Iojtf'Ioj,6@= - K\ƫ薌넍_DeO$>מjCcFַxcJRdW͖{ܒ|ՒKT(k%t7GpǕy5v&nWG׶?pˡ/rsˍ5`i|+C,b㫣x9'|n*G6|zmN~*<5׍5S^>f9~>iȪ8xcc󏏚ij1{ Iu5ƁkjxO?ϏH5fZ(oWmfdօ2;cyy՟>nZ;U 8*4ܚf3|<) {30A8n(kD9{5~5s%2 UM [1nm滺kڮ#p"+;8ѭEHu8f/sݭ9h@pv>5JȜZ ?0!xE n#1-IqM@]֘C[_IƩ,bAʈeM7*Tf;rM0Uou)3yeMmL %Szp<$0 Kxo]LtxTv~J^t.ƚpjN~|7TrˊnGR-xV\oEQNtqN;m]NeǹYX>Mݔngt: 0d oj"Z{_;WS8f>=Xӥ^ `Hj#Qjbt.u2F<ꚶ8ޡқYuUU4ho"t0ԛM7-$YWRaOXyĹܻf:״jr֫]R66P.C < 7/@H)CE'y| i3':㈥sni=i#B0N{c)IAǖs"sq̢QP,sYźTI̝̅ΏXnU%-N~*k¸Xb'xRNFZvZ(n\ WzjBhN$D?QR.թ̎"qM<['/@B<̃Mک^>r0^cXS] t$dwP]MEE+n3s#CMa]8vh+_?q5k!^ܑ u0KK\CxQC7IJqa):!EO/ F*kL;ЯC34 ⮬wu4 k*!J$|;b  #trDix[$Bq. }Z` dv%04_n߷r< =|o3w9*Oo7mX=4ݣ)!1AQaq 0@?!XE^`@~eS,ђaBqm[ˠtaF?]PT Xn^?H#05s۲kL(z]V3à/r ~/ Qe#:Z:enMh*= ogHnoQn94**p#"qn$tƭt})CF4Rk}& +H$ `Q[zK|VRތiTyU/EV3ɽK >W׊×^@yS&sJV ʭ1-fc Ylhv gZf<5s{ѻ6Yݗ%^6y| 0a ~M= ≬GαX~ TuÙ1,Ex [lh/W(2㋟J_+p뢕Em@6F&mw 0[mN79o#Cީ#Hv|ϒTU: a};[_p=Ydh_Y!7V%7=&t=ك닥Q[Ʈ #l#鹪zl=vGlSkmk1$S&GxD 8WH] 5&ktyH0ugH2T W9Nw$J\%wb,%,;|=ɲUj/n?2:J@hzFәKjm邳Pk}ę-ٵHs1|V_݆͂.EܩY]4#Uz,9j15+0\YZ٪įH@i2Pf|h\?vzg+ sU|6KL-l߮YZfp6ReNjT;rI?%%^k娳\TӴy.ӟpಥ^oV*6-wFZ"mP- ŵ7`.ҩט>pl6GhoNnV /  7 mM.i ϾMQZ4-v*c0%J,y!pec3/6(`K0|&6Cy86ͯyr5-Qɾ߼s\5x.\G]&xw~Q)doƭϕ.RmPxO=R`Gx3%mt6Z? K}W rezcB)bw=!2[.ɹN/c+T/fRT+L2 HzJ )eFT5702V욾KJRYӄ- 7e@#@ӮpZǡe''?/Em~ҫcX除Ej1',V/]UIHLR$MHkfo174<kuĩ*8hI@g;~*'6zJU TF' IF1-+OGc @4vb-ƣUc%rkvֻ/aL< + x"7vpDf &0>:%ˋ*NCZfBTA@tݦoRRbC,ݖ{n?Toj4rs[+,bSt!PeA2|rRLor+Ah< S#~7~:}O5EZj\S"*Q((i ~9( YC vb5FuA5E? ^h֚X{T9媙CMFTxI3x'+xE_Ҍ P PhU4TPi4S|loPج¤UYA\Iýdr G{bo 5z/ c t6Ch(hb01zu1@I|1R㘾6w%5ZA2aR%([=rb|;ˬc⛪JXC 2v驈-jZb,}f^.!h"ˬ_1[ .'Y8n4O%5p+snU֗QY9\852s%# nTe1Ev2iGSRe9xZiD>iL.{bz7"IoMK Lκ^cYӗ oE|7’ܪߦ4S7v~}a E~w2*Թ!V9%n ,LfcDVx="!+i1{UGD~rr9u[tUCCģB6i_nr'O0GVALT FVxpYimKĠST=a_1< Dsm{jn;;b3a+(Gői b` &̘'0%jf0a(g5[† Y2&6ky,7^,5ҕD3E7uy5N~Ȇ4[F9+o6V' @V}ZH LckVR ee^&EŹK!@G ~H7okan.#ZMESqXa> |r>@!t„ìxWeC֕tX~9( nh:\5icQzaN>+t;@]=%%JPqUZv?(TN<.Gyy$o#_wk6_5\ zʏU4/D|_r;"/YOc]/Pn0.vSKNkre]9 iX] mp _RQEóX|Z?9Zxhgu\Xp@B#)g'3heK'mFk/G P"tJͥEA^s =R!6Cߣj4e,~ucJ+X*]ͭU}L=>eZ5h:$]ֶϾ-類H_y.9C4ztѭix C#F@5{Kp@]8A_smU' [/ w'F`F, s`a~S0+nSLkJ s=0T61l6#u꼢Pv8 ~lzS#9݆PYg V6!WO(ڊtRp93vv'I:[>@#J i|.`YfN>7iH-U|FtS<όi ^yG*W"@m|ٮE6Κ iDkpƳ+,YnEG-Y>OhɭZyp%-hʾQ`\Nkp E= ʳabCM"̻Vu2pErLңY%"ܻJ{tDW>֋yg! 5[\n缸 (gEkTs$zoˆ zzO:Յ]B#Ng 9K>Ad!l8a"X H~ҜJ8Rב~^~iW:]zXC / 5y-Pئ;-\ͅ#0!%}4bD]Ux_07t+ߌ֋o%?0I,5 gu4%J*TďE]-P֛p ~?,Vh\ԭ;=Hyޟؚ$EN7Vft*EVF㴠  g3  *\m\.O̢QVy*ܳĈVRVB4ȞWD#}*0'C,=:Hmvlױqѵ[8;!k &^OOl÷Ye/S|S)(u߱0BZ~!R~RnVW^k2ج0fh%Yz1K(4z1, /1.7]N#X*BZ ykֱ-a;C%͜0OQ~&^jQQU _L5v:ϋ &jW $V牮Zs &*R`0o,嶦ci~YitF!qs΀Q#za 1FC9l=r͠ g=R9PmA ))9XS+@ B+_=nÓ .cx1xU(%5d2r^1[ Ek 7ih+1f]((7eS.(ݓ=kZ|ä 8zu {MOSaOS?_W_W?OW_W&ԧ)RԤR)E"ԯ~g&2˨#iNIp:Ԏ=uY`l]'rښ\Az#X)}%o&sV~_?O:1n(\n,Xt!5`ٮaҸ QVX3CToaf# rrg*T讇]jqo}AMɖ9x^  4X_}%0֥kHh JOԗ.\r˗o*k #Ŋ/٘OY3Èm$8I a\e :Ŋ/zTiR摕V` VߙfҜ\#YU(k\vC Ӧ>trˇCE?r,QIUZ3U3p"™U)tcѴJ՟q%\I0&ŗ(]*D: 2}ls%AԾ'_}=qcCRN](eN%S5fr=}}t:T:_K|\,c \M!Y-{r",yk̲S%LYe\>З_]K0社~ҊCH_BaȗiV!((ê?%A /rQB??5.^.\=\ ^G@4%Ō'3͠GH*XMknbsx#U΢se_KF.\:?.?ܹ.]πK}.1zդa*iahp]dM: e3g)} "Ryz?|v-c0A}e%f Չ^oSS;\Fqiy._K餾Aw/깟;/WǠvw0(jkMG6EWk rZe+PcYկP Ʀ$|à8*\|(4t97. t'E}s9E~c=y6W.;M*"c;&90.j:O5Q{Xi U+X RZV)鼹M1.\y/6eçqʣ@yv!?y h8_8+B4%$#qʡ]5.cMhC4(-A:kB.\BK[ٍ{}}e<0\>>>ܽ{K[S#ǹ<_t(.AF1cbva"DzE z}GFDe]" YI+91̡)HN)T&2T&U\ONU~'0BKO9 O:Xy??L0S dt=r{Jx}<2&z\,XK3L˽il&6W."xߠK@-A z1V#C9~ ̦t] R+<hWi;sA.cy H9r1qYQ(:zS^%nTk.؛qli,j%@>F\œ{lHS8Zxc?x~ÖntAy؎x]=7>7> ωcdTAIq=.fܑ&j1\J/}gn˶~TR8he6Z"гUxf_1`NqQ 蜵sA_hpŖ/yi#`Fլ-)wtr= `*6*0+vxFn ǁ2ՃDp ?*h*PF4#gx)[p4d5bH9&>1^¿&AK#>(UʂyVbH;7\|S0%xi Hn .WPE1MCHJ+BHN :h015bY.YlL1)GiIWv,`T=_pI9bxV\4Q%K)Ncy8k YBxU ƐcnP`FpDr+0dlO2R=&'hlMUVC( FBfsL7a`S w#.gq=/e"g7TAi[P_' ~17 trR6hte0xi*$c-:D"P1q.VU ۲WCT3 홂᳡cQG R }l--9ܠG74x)^_۶]DM'Vl˚.N`7x3),у #t7{Ja҉labl\N%kF¾ĦɬLĕ :=yIhv?0-rޠ+&*1l^A8D_%8?ӣhs 󋁙.Ix,Q* 0?.`ɀJDi1JZrJٗEl<RJ\[6b&>a%K摅3,pT87mcADJ,Le^\7̠'*fGF-COwƣD PfЭ`HӵarBfԹBc Ia0i4~(݁/h:G+H3.PR7יK<Õ+0ttqaW(R iifNq4 hs3X*2JК@q0Ʒ(HGQ0B^>ҡݾRs83C`%.M }XeT T07*BT~=fn丌èZ 3Jxe򇃖nRXXx:F *_Jj̽*n!m47)נqMY|6t,* !/GvkiaۙVB*6)w%[I8U5&q *cc 웲fi8SJ踆mMⵂ%w,س\WPub\ es@GMfaWzѩ`V66i]EqT,Hw2f.B20Ăa % :xn:kNRa4FlRRglQ͊񚮫-Ĩ.Qjzbu.P5f LL3}Q2Uuc:X|K7L`#g9b?ˎ0 } DsMY۫4}, ])-;pKJn&fX*֭s2[XTFi$j'`n KFWEG1OZ%Htc +mRa@^wT֨XJC}eM|Qh2M]_Y@y D3hJ*N揪zFLEST&kX^tWJR ԗYKeQw7Az*"`0CIg(w%Ν7fss*ZSi/qe Wv/(t<^O52a4sث%v .hI9MσhOD>iSgt:'y3_Lh\MiWFu1i:>'ٓG >n~jy: @/s{RT7klSeX7!Am~&:ylOv0ϸ}^Ћ./<  G>q_k lsMd~B>^p5\ |Od5FÀNM/*,(r3ᇈ]tߒXݸ qr9NJ557d# ^ܶ#D^׾C,1 |.Oݎvyg_7;BCqd#S UW^bsm֓<qYa3lcRW;uNwe=v<@d1ook5ֈsqh~_q&<\C2ʒ/Oل3Pw)aG2B)r pbOЎXLeh#Dz~IZ kUUa Ac}f;xDOQC,^ Sb!A'mMmK$YvB".AB,4FPFPeQ4QT’$|Hvv`Q-fCJ_挮=}eW5+e;\s_)D؉W&V~K_wy,1-7"Xh0$$ot8mRTdz]KSB q!#D='zOA$BSJ X<;MlнЪR͚{rOrIG|bD4h!Z0kC_*uм8\QER(%/}((y{ =/CЃRFŒlcQ\zW o\ފ^Ӯ_SJ"( m[ecc `\#dи\i0.HJ% X!NuQ"pNn c$%d $@\&u+^K_'lB#5TF1.7ld=3{1#9cػ KY\ch4I -$!mY# 1cIZQo "1 Bro6$I燖6Н'n/,Ĉ+fD _q{-;G6NCEq.XJ1)$-r]$nloD+}%+;w;tw Kvh&!1A Qqa0?Q\PB,ØW}dkn[ރӿ߫}/nG<emۓe2.F!ďY 0=۶5|>)ů0sGF24`lrٌ2+Tbģıhޢ8݃?psmY`k:ml[̕2vT4N0L-vlCy9# `^3sqk0soA2}{`+?t7~F9-93@s~8~/\8D/'㾾HAd4$6xGqpc&d/,Γ-oKG Z\Rz~<t7KL垲@F\ۗ3HR2#ơ#ti.CieŰw'Iv/>Y:c>%m< "ɄjBd >^39>GZsqu]uK9n7NϑHq n˲ǝ՟?V>@=_o^YG߄:䌌IŇ!NOQ/ψ\lmٙGX@iW^:~]ّo;9;Z.Vo -[?CI#p%  |cr rKl |,C+ 3\#3rs g&9+8dwԙmeߎ̳- uw/ap@]LW.V#E@KevyfZ;.|aG,c>Ml leÄ!Yvlq`L-;ryzo>K13^zuOoG'!1AQaq ?>Y9.8;I)qnP@#uP)]@RgmJ9EC 2DVʻb\*)+PE ~&* ,]H-ؠZa7!ˋVwt1ڻettlZE(%VvAeT.CDPw4u2=CeFk4t8֩Yh*q2x@fu\/4YIr.`o@[y- j{XJ 6ŷSv{JTqBc#Srk+ag,iD32% t@x%2!(<P̱qsQ( B{qA8jƨ)H7ÎhdZQ@4d+MOC3tY5H$(MkĽ* *#mTVQɈiҵ 6FCi\VكO v5\  zi +^s<7 9pk]4AZȨ(ڂpb&Kx j *JU]=1rCYE[vE2D+Iq`ݵ 2Z8QbQ?3jEQL6XTEϸR,q7vfn ?ͶU-UV -0ܣLU];eX' D* EE^wqpE $,5c%4_a~f-WF,~֪  :~R)JAYl7S%C^0APq̮S2$%j(Rα h?h5,Ֆ*y"IRH r}\@A R4eeP7+a@kk{XMfŒpAw͞; Y" ,ng٪ȠM(襰/ >"Z"9PO%9ymZ mA?:tjXpeo2JptjkGQ LMȰŔW r9?qZA^8% ­3CIUܧuO, S(PE~eD0rj#؈̩0DXN+Y 5{ΰ@Ҹ(/. qWTfބ] B5͋5cP `Z S9KHZJIt*[AP+9 )L 52/ ??HBrAŗV`M 6A5f(HJ[3YBKcĠUQ?5(KZOr1 iOB1c"ЇX+j{z)Ѱle|  Vyհ"bIDZNgktYn3n[H~2f9"L&(TkVψn/NiTPL&%]Ki@/h@ ݅~ {,*Ŗbf*ypluL )Q۶εR>#~+q]& Y%vm@C' D̴H k_QSkD `?x^r|l1j' 7@yEMff2%kl#H"WZ)`4{H+ABM آQ-W* &i ]KטX!쪬5t*[)TɅ, %Î$EjMu z`u-yW1-e:1{FVŦjcBXA),p 5@ƃr"1L 5bLBꋫ>+m+V{ѐ&ARv$mlv1Qуw]0$O+Pnp6ד.…F؈hyJYMU(hv SWW^5,3~`&<# &/k%\&qbC n} (FBնUnj3L\AQfUt K\L%gWy[9V&} BuqVs:yeyv:7ߢ dn7 a 9q.imP &78kq#Xs[t9rd{+@ZƜoVvH\.6wD$mYWTmWE_&ļ>y(EI`q`y/Xvq)Jo@W7rP&{7MdR^PXdI= ͫEd2äMP>|2A  h f{lB W))rƳf * 7eǩ[v_wz?mt=KB<:Mb]X$V 0i_ FLfGb!AXZUb TFQjg sP+E do5`B)my[Z@.alujsXTY$`6Y8)9ae[nX+ha0;$)^.%v p֍jЁxMũ ߹Cp!0B[A㏈̥:9bJFR<'4Ÿ^1CPt*ψY؁4jaj^"쪦mpXcXP TGh ,Zkt?^ Aq5IJS?7eK+w6@AajA rXv&KLm4SDb1PQ5rx_ԥ[nr9{g X;u M8*Fl`ZywşF6yӍiS-6[ϳ=WskRUT=UɋYd@mêqwC`S\o* Ju +*`Τk3E8Z3pa$lY@;>cC3K2Qq5XC(1VQ\8ݴZrrsZ #fXCU(#2U0Q8pla0aLUK?EʀF4 t1m{+!nR(@U@s*%hdSmceJ.ôH*㠄lUuZS^Bg~bW!!m0WrH/[#"] [h4RzfU%q4XtcY0Ab|s 1V`P f9ab CCB7_o F\'C A:fXYf`V4H) 3Q_sX@!DYH 43ti$D|JoۢlA3@$f4n1YbG56wtrҡyvЦ*ZKKQ6EH\4‡=ӝt)U)M  ͤRJ0*k:M#_h0+Es 7D7W_T22;Pϋ?p?c,ţy l-l: h!07SK@kcʴ/sIaS<+4sbU΢0s,H~ aX^B%D`j4A1\Ƚ08V*1Xm_QWô2/U\\Q6 C3 Jچkq&`sx,!PRJT2lmF:LK8Y_׹3%IՋjU`&`eKh BcU?Fl6-Ea&gxG:[*k,;RT 2U-֖Uűiv(>icL}29?0DޱKV7 z$Tiʥ[+:W*ܶ`ʫZ։@̩nRBF)U{"a,Kf.Vy5?8eUs {jp.u91 Rwd `%X83DJgP*](ʦ;q7MCx[b# 9_rJJYCt"P Q103AQQb9Fnn3ע @ B1!SE{z"S v X)%mVs,60\9Rd0D%Q @+eM=C8ݼSY[E.)AAw(-5& Cee|w m\g.%خ\b"O\PQ]^x%a[԰K7@/L֩!uEt98aW*ւR&T5 TE{;-H-^A~.+S`.P07ruuMF0d\tKxusy16s cw2a\ /zslˡH"䅫żW'%߉X. T' @ 1P3hlJ1- cPI:TodvGA١cuC˖L FxJ23 ]ХF7ձlQ ezrڮcI {}l uwn̫l )˲谺.;"PZm9JEû)dtPq>EWM SF`lp}Iq"C`hsx2ϼ27?O;lAi9yԿQEn]gc"a=h ,t}݌ &&R,E`[:XD=XBe,6ZQN <d?,`kXRo :% g)B`R Ebw*%nʯ(Q*0.,? >w&ªS]Q m V7Ԫ(,"j~kgZdLT_L1y33/qC;T?!-Z rz#n?N+n,8/Qfb22\F1*(adҹ\Q)~uhxGR|DOS&ۨ2֫ć`Mt`S(6"PXXVy= {@)5* ЛY /8F6,UnNX a.cIM7%tk$o|A{|^* uNBjƑ"DY CWo vB3! $Wm`}BmyĻ&A)H)Du84i3@1uX"oY>e3g vr⛻`(vXC|4 ˆ¡qF@jPfTu(Sv)J_nkIeRfq|R>#N_T2%(YPF\,㏣F%MgrnA6L35p娷*Fž(̓Ta@gfP]P"V ĵ% O x-?v!*, [X1!cz,.'%c2n1{,{@tVNqQ0}!@?Afm+T6i㧈 }FUo5mk`k_lڻJN8 EQp> -h ܡn@Q)"H$`¥P_:e@ șQ;]KKu,E PR V BSaT; jV o wjf fgR4 XƸAXh/ a/zjq/rKF*T)b/8/5]cp*~*P; Ȏ-Q\u2$dzUP3. Qk(ZpDބ4I 26lpа589@#(guZ ܴ(F%,Yȫz"(0- 獑B>%t8>4bb'N73Ye }A ct\]Eq)hepဆ Q.JFSʨ*.55(7\Da GE4ceD):e_gxPZ$ۦl4xY*h ǘ3NDlky9 8nT \G.YA~gL{ 鉶9d5OR? l>=yDざ%Q.o%޿@g}ؑai)ж2v֡0>$elH#u $dWJ/ TK77Tg'pD#PdHڴC\ʬ⥅*YXgO!ωrvV6+*)]f_A[X9 (cݟurQ!(PĢLDoҥx@r~`_S WJJkn\kX li >YM O_dPŨP_13O"Pd3 `g;4g0];-Ip.BVL=BP FBڍs0L&RRwWF%ߙG&\kĬu pk#tZ-rcW1 /̤*È u-TVVmZ# \Jx1pT ^z c.LEʀg̪r + =4♦JAklTo dʪ =f._fgQu;+Uu?@V3uk2s,=4_U"ů|>qsqze}:x-ˁ@+0{B4Bl*N.oU}mLRl-b |@0CPJ&o0?/ =..e0MVIu9%uqdOPZ?˼s-u{f/`ۿR'W7Z9̾s3ܩu\~-3s0}Ϩ­sX|$92ًO^F:H!ds,e?JMYS /*MrUccdw~%;aNf`U bEqj3WPoR r5w0.o7/\z5yI̱)hkos3|׽~ị((|F-nM2jXsN"-)V-r5_Qhȿ[r?<tܽDc,_2̼f ՃGGq/ 83\W.ZquĶ3^0͒ÞqP?b%[Quy(w,=JKZTvDws."wiM#)r؀ VQ<h0E^ ]K6/y?"A.Ye{Tn%- t=>f% +gs̼ }.i5/9kKGf;}gW mNMᚦQpd[ [VSrn1IJϹ[ȋ@Z&Wpձ:Je!!<'yM<0l'Vl̼2  ju Wu[5%MmCPti¾w`iT/D>~G_޲\Q(yyg59;Q[ObfNQ[7W}ũlSQlq~""Kx\I>#5c A_@d`pܱ_LyЪ](z"ÀǺy4{i?&&s,nh063%ubGY_  ԾiZýS V\B%ƪ-n NuRe#%ì30j%j6{,wCMr,/,RyVO%u _wP*uf1RWKyLn~!V@W#jL? o=nU_K=m۹e`\;-K<"(bsWҒYtܻ6)(-M&>݀q20sWkhy",qL"16t4ULD LPhs%R=W(j[[cE]F ]Q0!ex`R=T`m\\ۈb`3ϔqv*N2]>i^s/It|B)+\M߸y,-;Կ8^>qe|@%btVFABdarjX7 8tJIb"w\m5 f9b.Ũy8R~!qTчi:U>Oe-B/՞|$V}V5%Tuak@QX @ƅ9Q3S cEu/N?iv}r/9+ϛ8oP,-q̽sΜ/Q#aDY>ȎpCūt 5/6S^P6 W,|[qxe}D(ײѾE=l[DV`悏x"Ц__f, gbg:h0 H2]4ewN[&f)NYcb g``F7dSERQq[:Nv4AvʒZ Z{i$GT.&ݬLlĮG7$[ᎂ12<3!"/zxʯ7sХT?/f3}]Ц< 7wH&o iB_ Oπ<~/}??DO;6}_ܟ [)WRD^/Ly>iF+y #?Y stYFEݥT&@0pZ9{N C[!$.‘T92`nՠ^00jX|K=1 +ӾD;*./;AW\+.@,#EA$Fl IxrFت u9}Fg#.* n:B,zR P"gb5k {/ K]Sr#<(~E1`:iJqxB:+a q^ 2!31x#©Di-j`WOEN*U59UM+8,M&? 5t ^v-w鯏RJ^ "";QkQ+ġC!pBE<f^Yʌ>"hy#48_ARV&!3*Eh!A3*CRX*[?5S2}N^ >gE2}L.D  j۱]% ~#K. Ĺ& -} RGz 87 !Kr9Gh7"QA`8 p T2D[iS8CIA%EzheH8 19Fk|NX2XzXodSjW>/įQOX=[-zhohhU TYb5r~"x)SM+ĩG8=@(3iD Uͣ.JrRfX\XGHɌLy 3b0BbPv)[XIXJIcѢL+}n_M b"V(ϊ|D# G@C똙!x^%$lvTɨD]%Cu&r&i@S]Z *C~#m"67bV~߈ ųS 15ZBjk6FH)Գ+qگ0֨PxLrSd/19K,bv׸Zbn0Ѧ1)o IW (ELDc  *GT\ƺ-6 r; ((SN6f'u* TĉDw _J}DEJY@,EgdNKƀ2pbc[}IT f\C B9aeX6u*+gU*[BÅЭ{@) ˜ao킣w@Aיl Բ,4!|&!cEo7 5{_kjJJYaxZ|)n\Z§2O)K60RXeI:x8ZՔgN*tŭa/͗lPَH(0N]of/F1Fm#i A`ex7P/c!U|y[TxCS&n J*Py~9=a|{]^pRdFW SJн4r!*X-4¡6^ႆqRR D"%F0E҄(Aq|z\" j櫼٫kEE%Z1zZ\)qY2 =mE8*²*_fAQS%.e{lxiSXC2uaX6$Ȭ< i `m%~#؂G.i&*&zA0 /.`K/.ވz!]uR bT QdFG8NrJB eV*/ jU mKMֱ!.krȅR0(C>"`3OV}Kj5x;C*_B VvobMLգʹ 5ØyX @aʲdfқ4&*;+h#`R~dlU"9+; DT vCm3jAXc@(.Ta0;aX(W/:g팝pL.j`C2"!pvTA3Mqh)и6Ts@lQ"Wb}ap3Am 0ƂUr\qD4 QNZjUsdO}OEB}`rĨl!0+m {%ZX q>Qj\0WVf/1PCcmTʌ4`v3%E % % 9HPӢ1FKʛM5ļkzh2!Q;|ԨQ㿢G@֙bqgfQi}%P7g3lİJfojRYJuүV x7hMs -;{ )K}N%Z7XXwr†|K,|,f F0<.Df jaL}]Dp%8jvfnZ)})S1^ \xG)>QSr P\q{(yCmXj+oڽck%~w7~6՟_M36? }$? ~5MM!i?gsOwΟG_ɤ?57M endstream endobj 22 0 obj <> stream x\Koc W0 $ϢtNNM~N<%I!QO4oavڼyަ_=)Oay^M~39n_2/v{}::=/_?|cr99ct~qX>%v 3_OG<8&bl\F{Z|mBaA[b '4q5vm}׃|q1L8/aB>rD?_N+wOk)bG~S,}U|5_.Oikr,3/h/yOCMnZ<]+8u?5e&'Ecʿ44 E'Ί37e,5iBqH ȇ 7u6?YE-+BcBےElm׌.+ϊAy!r`Zv{k}4wj&$2ԸFEW{^`<0Uʎ? -;[]-]Be-ٰ=$ÚX1C\ HCyVv«5m.yFTK5ע.kϺ'lkr!&HCvL38&j1OFU[ M!ش8+̘nOɫzP6Yqinv1rӈ%UNJh F/Z֬8k\eˏ ;.ndT>k|li8x,ՠceeۺy’qȓNy?-!̱R+[H{SY lalo L̓aڊʛc&Ub1| :elYI6XؑamRyŬ$L5vَ-cb|]֘LKbk4%3}ooj Ͼ2 '[z9uاc^L{:#8ڛrKw"ڰ!ۉ/lWaYҀc>yT: e< ZVl2zKf۸:HlEVû歄B#bxKdX_6 5F=H";BI[p*Cce)rFkWrU6͹#Qa #:!x%Cq55M~T"L:Aid%;lV#h"~Qr&"4G p7Jsټ\kUTK?Q\0j6 >Pݚ׊/@:B8Ypb S.&Ɍ{fNU a3PG_S`$9,C&eM#z&hmDCoLjMGdϋ j:me{Zml?ϛk;\y[rv#`@U:/On]m#h$ika' %2i0B&ZKw' Ȥq 8 y?,M"j7j2ؤD @K m-[mHhD`mE" 8D @ $Bm+q1* ݨvH%(TemH(43h[D*)$R a0&Jq DY@@F-{dH!0HD @ a0vHaR" 0m;$R0N!yJvڍZ*c)a'U1B)B0mZ )d> U0N]WX4E@F-M ؄D*@jVcB" X-0mZ dj1hժdO DMtSN0I# budLeՃOJƙ*T88w:px"SA >#Nq">r:zcUu33/yOɣH,Ձ YXȖT&]Py"a? gB@-3O.PDR,fu28tpj`$2=~'T5>HmT:H=| *,cyx]a|i6SxVӽkWGIHIK $-s{rn:q+%*Cx.ܾݣeƅ%OMu< 2mi,kw/zϠ׷qePawSFo+^Hӊ]Iּ|tf;59Yge8mT&9q kN{Tl_F׶\h SrT Tмyy5Mz>QKz&ޣBLP;kLJﲢ2*by({!_xivP*[[MX\*uf("JBă,v+#blvĖGs t fln%^8E(I`xKG(PpFaTO:c5{7`aUi2? uf:YIL+2~ 5gI3HU |øњO:9-h$~xZjk`l"2Ua3[vvvhnIm`ԏ?%W%@a`Uʛ #8[XE.3 {=pjO}BFy>j> stream x[Ko Wyv- 0! 䖝9^o=ɏZW=a_uZ%n0^֫- &倲FuL^dOBI+?i-,Y8'? dexkPxY8riFTJk]!ែd#QOlו1*# [`tBXS|tF¹J`Ö幎MuȗV`.#Wl h'/%yE{uЙO\YGi%"˷*l!V51[W҈1= h_aZcS_(Ɏ zqt\v(P6ҍta]Uj Vúi&Fba!(討[seKaHYѦLk,yvk:?U|>>B0ml7]K dAJnX$7/_IEHUU)cwW6՗s׷J6] ͛sU~=FezcsؒY@&tBh&mwG7 W &'Oh;}_>kLXGYa])z C#䧰HmZX/K ,Hw$Ӟmef^ ,۲SR)AWOq3c_wKLa)f$^H^,˴(ܦu }1 ϒU 9^4M>8&t*}$Ka m2^GMh$ZqڡwS 2ޟ^AւCS +i7}ѡosrE%% G-?)[YTM,_}BK_]hYC𴭮v->J`- ʀҚzb^{Bd(|aV6^gAR?sm+nGRl'R&eyhC^ >8hآgH@~-Y©砤Q#=D-'G֌'q\ !_o@("&= 8h6Ƣaܤ/H}zWBI<NְcߎRQŦIz';QEftkh/ԣ^+HJ9<ՐTB~ ܎CΣH]f(7@"c NK;s (ck麼 <z :p!w,Rx:.1fd5P\T(5i{_[EnVm\\R Va4. ܲ4slFqۺf69amYV1+7jD2pmY;~AkkR[oE*!KF)a[x",S\2>Pf;* 1]K"<%ݹq9,8g7Ea< |J,v alHl%L" @ΆۇA+j[; Ivvx^%f]K7~݊V, .ɡgC5FJ bp0(!XXjm>ZLŠqhgBU qm> Mw(=1+$niZlP=[ H"(CiT;M[A?FvXѹI4!rRAHmAd8 4 pMEl4F.",xPS,ڑIMNNk&8 nw S[ YlnƉIFC6>/duȸQil׭?,j by>}#_.Ҙ.X OĦ$Rth(}YeLgjLP<̡죒Hu:k{(eju >8f't&Jh!m{ORpo6d|n4:tބဓ{K$tWyKBoQe[^[0hh +(neL3p`X0M^š^oźOD<㖁y3~ +?r iٯxrZr㐡eXOiƇrn̕AGQ8K!8 z vu1JudT6Z}Y[i]o(B`Q_x|/0>(C46lkE uAl7'xl`ģT^wT1)MeF/FUO2)CAܕvf 3#`g̳㇇URZYYD8_,pVL##gc/- ϵ؟_?h*829.2ʏzďz29,Qn#IK'2zZ$ <-tfh%-i68 &kAjCh&o$Go˗]Υܞ~)1*,# #1 n8}ft(/3:s4PpbM@5xS X0lX;hpI8,elJ ËOQ]c-K;U^,lhGw (~d5 P ^\r̉?=v=pFB;2:*{CY~ɉxKG ĻK0#u_-3l@k9z'<@`34SEA}Ag0{ ތd0nKFw <F .e}6v[ࢡGDW}" 2_OGg:2P^QYǷ N6F[f^g"LhB8?1߶ζ54; s!UỲ"̮iSGRYobq= 9MCeq0K=㏊wulܑP-9Ʒ{>0ӕ6 GZWPjRr&(u^:w+2 ;%d2-|ƷH0jܡn3_o_t}_S^XQ8QVqkew; Hh6EJpfT':MYou{0 WۇQύ_lj auGi[BC/3cAq^vFW@BOjE endstream endobj 26 0 obj 3646 endobj 28 0 obj <> stream xZKo#7 W̹Hbho -v/H4bQב(>?RNߦy7EOUeNjyrLvQ8i/?LXʄIVY$Y*}HMSiY-_Բ6[5zùg5?zOH?k8z6HIy ﺞmZ- P EBu e"4^3*Os25_g5ݱ0jQ]ݎT1Iz+B/flDh`"^ 60sU>dj1⢲5se9q+鑙':E4_:&u&@k\G N3řdU(')Q5זNC_MʒousrP)Êieڿ|}v"c/á_1٪RB+f< ¦&(a|& &qM7#0EfVL{)PF4,hS֦N>a-e!1?4E3f,eUr.B/Rdt3Z ;T,Km.<_<3Doj\da%n@$*G_KXڍЮSᮚQȵ$B;$ίu5,Kwc=D re&t2V0va^Aqf)¨4^.dXX{"Cec#!+^MYYҗ8ȈRfXn33{%ظ-ybSms+iHmOm,YЊ S.h("#RY 7|犙UzlNj`oQ4d(oBfh+ pBeM[0:3iofьJjoDth3H7a)+.,/l&[6Y|$kyb]XQbn5hgs%q|(A=}UT K5*qav^ˑYLEv|Es`yGo*=vDh#Mm,/^ U' $<صrd˝ TTwɶHDGlKx$NȀ a6졋yX6v[U j*FxP䗉Xty (wx .͵>\?-ʯesY +~b`A>=>+h~K`ԑ}ZBzX)s,3saN!wG@ڻ)&6FqgrD-Pc|d B?@,;C(Q[P0}\޴q|-W [\c@}YGAQw1|8 uRт=gVWv}GO율PNuV)513dh5|ʥ2Cyȷ2,or{u!q^PA')Q-G)\qZ!- ]P{CR[0%\aGF/td䞧ŏ.!EmGܭ65;ɵz Yy6*!~ p}=}2)? endstream endobj 29 0 obj 1967 endobj 31 0 obj <> stream xXK7ϯ0cnvg|9%qNY_#UIZ^[w}P NJ+1jvpկN_?'P׿'?]?r3\tH};7ȝXPvn[>W3]+\^)_ᾞ]&{Yϑ#|AtGtnzb3"j iIߐ"th̶H34ʋbM 2LbK$&xO2 dI'tE%ѡs(LI% F=V8|[(\z¸IA 㟏ϧe)D<0[D+9ܙT|$3#}lk9]lk\nKNt GӝfEӔX"`)3la1`WPDDf"aMFyBfFtfR(Odu,L,bDU6KJ{n 2NBlH՘=4 2 / l-A L^*"6jBURdJ6e<&K9C!l=ȚHfNDNxcDnвL^QRnI>|Jlqhlx+TW`v=8Ch Dr&˶NLX&<=Od.=gz^)(b -TH?qCVuS^)'0dEuSSYΉ B,DGm ۱ᰚ er[z]%n8~Rr#,ettJ.}@9x!ս16 %86=bc&Aq^D8n[ 'So\}ZQo&]W^1NN*1|-]'@ʖ->MM/6F9g<,˜C(=Tf]g(L&*Sx&,5y>Ԑ\r*hq6yxW٨WA$ UƈCKػ8̒@7 [7Q-:Uasu7FO1ňWdycA5٩/;R}y$qy:;(o9d ķ -+.cr;~K[s[n15WCEMDTk*Fz| "^;h_ԫ߼zկfx6ck}9wj݉( endstream endobj 32 0 obj 1275 endobj 34 0 obj <> stream xM,7޿΁䏲ah虞 ݁=͆撿Ye^w^˲$[2g82OStp9'=p''ᜦ7 Mf7O?Ox  k&\?^Iʏq~pvD5DCUq(lbc^+z6ъѻ ` Њэ^vf!g,bhDZ~^fW>_ >~nUt  GD1U+ 艗`=^ ?@, GFL?xT2ɐ¶6 Z-5 x6\ َve2%4:, ,Y<9D%g>qpHV!a3RI,-C_5 L& cA]?+KLaۍLlM(kܗ3J5H1a5Bca@f9 )R4tؐ2R_ 8g57b >xfLB?W<̥Xv5e+a%[FETBQYaok\f4`}yTLgUG(E #~mb, G%Z!ʂBhKOCx{;[%J-Zd$]Y*_/H9k($.JIS*U2h ]#Bi0*bߪz92èZjvB*ԅ_=ah A"f*"߫hnřV$!I4TM=UgE7o[6f:jvP 6:fQDA%)G䴋+>텭٪"'uFo_d1Rw/raN=;]mO}H~ Saw܎G UdVg8)aE?؊=Y ZTyH;(*\ *G5bHYځ{GrqFzVUcC/,}3L%=o.z76,Vk&-vj#vӼUQRJJ((ZpoA^UrݫGjY*= M㵫mj-t8ĵ1Ȅ~\CfjR;FwV>e Kyf+, *lQL0U;H'wKq7m6VZLUz:'<HaZR@ƓwDR$D"MO0[BXf2C}a;frirDୢbU6YA:9tgm<ۇF]f6+Cyv*5t½'G`њl:b ZZ)5:`]Tn_ ۥEȐaaGaaa *K\r{;B9z$ņU&teLHҠhϩm.ci)DH:X-q_j郉DI{hd҉8;?iIb@e@5D0.2ͷB3%$L-F1r<"f.Mgɲgη`B܀zCw2K!˥#v?m!_'> stream x\Mo$ WyvJ_ c!rL`'@UI{N%IQ*jGwÿOiʿ-=zowi~\Nz{N_SvKa^NK_OOn]߿{riz/ 9۲]zX>%wI;}tt9d=PX>K'O4{C Zw5wHz)>3&ҦKhEv9goI,OUF5ǣK~nSlm1zu_.O*r,,h.yßbv7Iy n ezwGcǦ}ytOgUe,7hq+ȇ!W7Y-RBeI"VY[ajUfE%4;E[lK웎%!$+ԅFlzmJ_? 4/u}kVw\кSʼnY-Zd_ C ezF|*Tm]цd4Tf'hwI  ZJ%Vwp{{ÈU^SΧbRd4KSN[3oh\Q0Dڬ*CK:{t ;?dʪԍ@Qt4WL9iԒoԼMgRnG2g^Kq%)`#9~̿Ic:\DJ/F:"3s$.bH:V6B-&n KQ&n\R޺)<9Cix&4(JL="x<HV<5ݬ}0goQ127LD/M8A= O֡cy4h<"dKw (ԯ|^JSmI#,S &|S! (Y+r\#}qZq.A A;6Z #F5$^u^T_7Z$P(\Qejc|UpBj^zt\fWaCh.(t tBfq-u|*49&4ͺŁ0$P~:"0xSV#8[):Q*rsENMpnqz51^F4!(ς WS󵝮T§CD| +z[tH;5'>ȆiƷo@YK⤛6C_&=O9?O⎡W&}R9I0M4[s~Z/iοyJ49\׽%6/m|y&7mbYX!2`9b9?@̧_:֍5yy9#"C+BLAA1*#H2@͵{P yV1)l$\Ea0]>bgSbDhݨ+s@% ZċImU$w$^^ lIGX AgHeK& d}l4*0 E`!vU+1 S`̀`uB_ks6&~•jPHsg4/4…Db0FÅ+ՀThAާpJ5|ژuz\Xcy^7y zyvKI\\n|X}WXG.ɯsqk/_RZp}|, ʏO}W7gAn?c/[O~3|U}#_Kȷʊ>:Rg&"+j>CEc:bXj+{z q66* k΋Տwi`^zlAz=3't5^ƽ[/FS}o^çG)A?2@TZMXD')[[(t!׸]jieP)UEZ*le(xh'0e` ɻ{ QMRUVJ-d7&lS3t.y=uO;&R`+!Z?za=髢Xb9=AOb| CX>}Jss#O>W1ؼrZ9X7 1( T(,~1mCPoUd$[)A+Nem ; i7o~f6lxGHRQu dP"­eёYֆݞ8+Fɲr(/lz]qL)6bOZ&x}1 nV)@exi^'JH9w٣iC8yϜսLA|9iQIu &~PO+%[XEEwP] JfC~ s /1,x̐ǚRq}V7$^OQ^h.Z}Ga%jn*Y.a-ۑ5!`p낤]>] A `^]yQ}orǫͶra>RXú k,ׅ5nxR$CWc풲:4/Ad6֥Y,Cͫoxt/_& endstream endobj 38 0 obj 3646 endobj 40 0 obj <> stream x[Ko8Wy$vz=,s?2%eFĖ(⛴y?^1~s|u)o/{Y8cɾΗM1-%HҲ1E0/J7c3`F3 h>&߾`q֦7!IOovpF37֙ayHaLDhB::iV"z4.񆶺5|̸\Ûy_ҏ:Mososq#-U=. \Ǚ6iKo\}^v5.Shaֿ3_{gn]A%Ûf^3/zpWeeұn͊Du򚧄+۩·@f?^'GP_n c! 0`4BB=fDKHP$:|~۴ޭ\tiV2q m>dK!hx/]gMth|˅tG0?J{Go!C[8{SŌo{_X#Ң }i% LyaP$&L6 rrVbJۡ@.XF*Pէo5PK8MG"Y4"3: o͕ ^"H@ e.ƺ"2ծ@|zd㛳;ZdPM(vFl}H H 9a>8%7/_H^UڑMαī+y8W[!:Юjޙ͹BEbzE-GȠ\Y6or[V> [I]AWVU*acpGLj"RM(JG=c b#ldiO6)[i~;_P h[Jii5bK\gct3e~6T^01>mx2(֓C{d@_塼~Z+\^^+?E['Q/e'N@&v+cX A೦A7V͖G>ڠb4|:ldšHSk {FnMP{j6͢jM: ]ecd>gayUK6RwX89"v Jn; Hp!:Ff9Xu@6;8ϯ~+O2!w< rl{l7{TOKX(ܱ"h=FZRuEk$ Ni{^|:tލcxL:??ϩTIًr6QD$׍LN[^AZM+,_}dBs_\hYBu[YjPE>`="@r"ap/!r0.7 hʣМ#|`n}PL%OLNdzh^ >$XX@~mcAIF#TM]%Gq\ !_k@8b.=*:8X1Ƣad/h}vzWGBfK7j'6 ^**GLQljj'pkd&ALRF=ʵ+ۉD@Q 9MUJ 0:>ơdy}[*66d\k$?] 6/>ҊY?]W$U}\MK\*5^o[8]8S5 `MyZDޖ5T6"7W6EJ+Rm0G`Oen{\_>؇Ûu0mrt~=^ pߡW5IK5h=uD:d:r(M'Oh<6|!𽇒>^1^)u!<À!9 Iq=,h}(˪-1ۂ5-|l-Bzӳ)47:'\& d,8-% Πb*qhn E(Rá W%ThW7AܑN MZV^qJGWC Phŵ)ǜ`þskg,@kL?|}ur*lb$pRѺ/ݖf1 k8r'>\@`*Ccy$Xf`7Ȁ׏øh<0PJvgop|X9T?Vp$KTP(|y_v/÷: =6|ɲqF/,_Kb6_Ğ Mh6Enٶ_"}ppXMY\fӴ3کZzʬ71錸H_℄L8T8(KݝFweCTmܡPy uFǟO!\iu3Iukzn0xxWritǑ;9frFVvʍq}( 6ZwhHC;ܤ -F>Y >췪.n-̴nJJ 䂷Tb)*E)/:Z4ϽpP%@G딗b24Z_cAsVvW@dFOͅF endstream endobj 41 0 obj 3640 endobj 43 0 obj <> stream xZK6 W\ Ym3 ӶؽW"%eOb4cS?QR拚9}iN\t=-V]:)K2E]dpIlަY*}+Н% /`xߧOoI޿U?ͷ٪93g;| OM#䏸J< ~z6EHIyЬﺞmZ- H y׍7Peʌ`GLt>wASD{q]Ԅw^SS ە) 6$äzRs6 ' hr1le4H׫B <9*?>j125ke 9i+ّ '9E2`_:=Msק6 sp4H;SN6%Byys;niWsre)R9\`aCGȲM>>v"?'zATL9+[5U~Ŋ߂=5Jؤ&BR9-As!Je(jR\-V6ecUHD֔!$)vȪrފk/%(-t*IS1QWˡf-ŝ˩%x*h PC]2U='U0(JJٚJj uP}Ba%X2H1(Fa<ԋ)U.l:/FT,F].@ OZbj ŴCL.b2+8i@L<}Z ɇњ Z.hNls}r=/i\錭ە޲zwcy552հR @*g_),gF~hיpgq-*z] ϥܱ!I2ksn]3pfRPB&2Yl@ƞ^ C"&C4߅ kZ$;v{aoBL_ 3:({C`G($fa|4$@G૶#H-|qshŒ).x("%ɇ ̘*]tvNX(r!u,#!uQܨB5iEoc[d6maE&Mu_%nbDQ@R- }MfS0fM~dL. :L w{*CHY_Oa$Z9@^/klѮIˎfDyLХPS SF$e}[ݕY"z؜LlԵH~Wzb}Q7cn;5hMg{dp[6z}n*3hwc,Cݵ];Sm$D3Vڻ,P2>-l/ $<8i˝ e*\1BK,ӑȎXp $\ӨO`64졣y\6v[M jXFPrD,gI\t[bBhA-D,܊*|k`AB=^-hO`̑w⎠z!UBܦzX)sx5SOՋB|wK5i-d!?k\͍Y׃'5P'%c^1&nS%31:9Dz3P\Z]+G6[+Ah,0x<պ}mZuK%ћ,vBB{]s4`*F4oݣDNH(:ؕZ뇘at^\ 2UM(dFMp<4$M ! Ty$#FldJ _tZl-O"3ouEEȿg|g wHfӏ_OY׿;$ endstream endobj 44 0 obj 1967 endobj 46 0 obj <> stream xXK7ϯ0cnvg|9%qNY_#UIZ^[w}P NJ+1jvpկN_?'P׿'?]?r3\tH};7ȝXPvn[>W3]+\^)_ᾞ]&{Yϑ#|AtGtnzb3"j iIߐ"th̶H34ʋbM 2LbK$&xO2 dI'tE%ѡs(LI% F=V8|[(\z¸IA 㟏ϧe)D<0[D+9ܙT|$3#}lk9]lk\nKNt GӝfEӔX"`)3la1`WPDDf"aMFyBfFtfR(Odu,L,bDU6KJ{n 2NBlH՘=4 2 / l-A L^*"6jBURdJ6e<&K9C!l=ȚHfNDNxcDnвL^QRnI>|Jlqhlx+TW`v=8Ch Dr&˶NLX&<=Od.=gz^)(b -TH?qCVuS^)'0dEuSSYΉ B,DGm ۱ᰚ er[z]%n8~Rr#,ettJ.}@9x!ս16 %86=bc&Aq^D8n[ 'So\}ZQo&]W^1NN*1|-]'@ʖ->MM/6F9g<,˜C(=Tf]g(L&*Sx&,5y>Ԑ\r*hq6yxW٨WA$ UƈCKػ8̒@7 [7Q-:Uasu7FO1ňWdycA5٩/;R}y$qy:;(o9d ķ -+.cr;~K[s[n15WCEMDTk*Fz| "^;h_ԫ߼zկfx6ck}9wj݉( endstream endobj 47 0 obj 1275 endobj 49 0 obj <> stream xZO+ S9F#`a`hniMx"Ex`5H?"q'~?|[Ltw0})M3)O o?M?'os!,Ì 4e'_RsYVHnRH?ߟ8t|>“K9'3?Ï+HG[<X.fz+}Lof}{LF+ 2$#8LPJM"Bp?D̬g9H,7A1Hy OGp'τ| q(~>ϰPt~M.y-lt>jDb]z]q2͔6Y;_-&}ןU<T`* z=Vxxk֯bq> p)Adϵ@TQ&O6@"Aެ<kZSFCV%m^2)K;u-\rnV yܕ,Dl4i>ڱUߋ ``uG,(6ciQ(ɒY$ yY4kZF>Wو h²!a kYaO55"1nDLV?&8=oűخ}b3)ub̗zݰ2Ը!e`^l1GHzͲougܗ{ۚ+u*bT`և׼nض71(9 wCK>*-vsfwE4}DckŬf]Wrgmv =I5Y3Wzi;]᳝Z S%|Ay *j! _/ZLo ۄ379.an:Q+-^w "x{6>wtd:n`]o˚U<kH+1e/}Gm_]HkK͹0 &k'j)7Yͧ[4D߰Yv\ձT`oV3Yc9lO{?\ UNDRq7m AtI;%~]NӥJk[iE]IŎeR [#;PܤCzYkWכ#TK.ּR`ntl>ٱe[KeMNSzgz-nKH5m]z_I`RmZ h::Z.q lfC_B _tp/B~c9 {څʘ#rVnSEVqb(zy: c|gWKrfv] ew{F:tQٷ?JLS,E+ l ]ݘz6ZO)*ԻqpД6hQ?L'ؗ|k5)M>iy6n?E4-OuV֛^?9 1onBK:[]xW#X?֗Wwiשׯ:ǩ՘Jnba@ٛO'v;%y֟ҋ BB y<<ٗ>O #!,>O2u29MִQHF7Fͣ)S<[jݠ5MVl`X-zr ?VҪw|;uGVZJkvwFcFôwôwFôwôwFwGh?nM..1\!KuVE} 8JO 4㨒r({>-Ѝ#!<9$Ӎ#GCKŅn | `qY>N)Hg[ @)7> stream x\Koc W0 $ϢtNNM~N<%I!QO4oavڼyަ_=)Oay^M~39n_2/v{}::=/_?|cr99ct~qX>%v 3_OG<8&bl\F{Z|mBaA[b '4q5vm}׃|q1L8/aB>rD?_N+wOk)bG~S,}U|5_.Oikr,3/h/yOCMnZ<]+8u?5e&'Ecʿ44 E'Ί37e,5iBqH ȇ 7u6?YE-+BcBےElm׌.+ϊAy!r`Zv{k}4wj&$2ԸFEW{^`<0Uʎ? -;[]-]Be-ٰ=$ÚX1C\ HCyVv«5m.yFTK5ע.kϺ'lkr!&HCvL38&j1OFU[ M!ش8+̘nOɫzP6Yqinv1rӈ%UNJh F/Z֬8k\eˏ ;.ndT>k|li8x,ՠceeۺy’qȓNy?-!̱R+[H{SY lalo L̓aڊʛc&Ub1| :elYI6XؑamRyŬ$L5vَ-cb|]֘LKbk4%3}ooj Ͼ2 '[z9uاc^L{:#8ڛrKw"ڰ!ۉ/lWaYҀc>yT: e< ZVl2zKf۸:HlEVû歄B#bxKdX_6 5F=H";BI[p*Cce)rFkWrU6͹#Qa #:!x%Cq55M~T"L:Aid%;lV#h"~Qr&"4G p7Jsټ\kUTK?Q\0j6 >Pݚ׊/@:B8Ypb S.&Ɍ{fNU a3PG_S`$9,C&eM#z&hmDCoLjMGdϋ j:me{Zml?ϛk;\y[rv#`@U:/On]m#h$ika' %2i0B&ZKw' Ȥq 8 y?,M"j7j2ؤD @K m-[mHhD`mE" 8D @ $Bm+q1* ݨvH%(TemH(43h[D*)$R a0&Jq DY@@F-{dH!0HD @ a0vHaR" 0m;$R0N!yJvڍZ*c)a'U1B)B0mZ )d> U0N]WX4E@F-M ؄D*@jVcB" X-0mZ dj1hժdO DMtSN0I# budLeՃOJƙ*T88w:px"SA >#Nq">r:zcUu33/yOɣH,Ձ YXȖT&]Py"a? gB@-3O.PDR,fu28tpj`$2=~'T5>HmT:H=| *,cyx]a|i6SxVӽkWGIHIK $-s{rn:q+%*Cx.ܾݣeƅ%OMu< 2mi,kw/zϠ׷qePawSFo+^Hӊ]Iּ|tf;59Yge8mT&9q kN{Tl_F׶\h SrT Tмyy5Mz>QKz&ޣBLP;kLJﲢ2*by({!_xivP*[[MX\*uf("JBă,v+#blvĖGs t fln%^8E(I`xKG(PpFaTO:c5{7`aUi2? uf:YIL+2~ 5gI3HU |øњO:9-h$~xZjk`l"2Ua3[vvvhnIm`ԏ?%W%@a`Uʛ #8[XE.3 {=pjO}BFy>j> stream x[Ko Wyv- 0! 䖝9^o=ɏZW=a_uZ%n0^֫- &倲FuL^dOBI+?i-,Y8'? dexkPxY8riFTJk]!ែd#QOlו1*# [`tBXS|tF¹J`Ö幎MuȗV`.#Wl h'/%yE{uЙO\YGi%"˷*l!V51[W҈1= h_aZcS_(Ɏ zqt\v(P6ҍta]Uj Vúi&Fba!(討[seKaHYѦLk,yvk:?U|>>B0ml7]K dAJnX$7/_IEHUU)cwW6՗s׷J6] ͛sU~=FezcsؒY@&tBh&mwG7 W &'Oh;}_>kLXGYa])z C#䧰HmZX/K ,Hw$Ӟmef^ ,۲SR)AWOq3c_wKLa)f$^H^,˴(ܦu }1 ϒU 9^4M>8&t*}$Ka m2^GMh$ZqڡwS 2ޟ^AւCS +i7}ѡosrE%% G-?)[YTM,_}BK_]hYC𴭮v->J`- ʀҚzb^{Bd(|aV6^gAR?sm+nGRl'R&eyhC^ >8hآgH@~-Y©砤Q#=D-'G֌'q\ !_o@("&= 8h6Ƣaܤ/H}zWBI<NְcߎRQŦIz';QEftkh/ԣ^+HJ9<ՐTB~ ܎CΣH]f(7@"c NK;s (ck麼 <z :p!w,Rx:.1fd5P\T(5i{_[EnVm\\R Va4. ܲ4slFqۺf69amYV1+7jD2pmY;~AkkR[oE*!KF)a[x",S\2>Pf;* 1]K"<%ݹq9,8g7Ea< |J,v alHl%L" @ΆۇA+j[; Ivvx^%f]K7~݊V, .ɡgC5FJ bp0(!XXjm>ZLŠqhgBU qm> Mw(=1+$niZlP=[ H"(CiT;M[A?FvXѹI4!rRAHmAd8 4 pMEl4F.",xPS,ڑIMNNk&8 nw S[ YlnƉIFC6>/duȸQil׭?,j by>}#_.Ҙ.X OĦ$Rth(}YeLgjLP<̡죒Hu:k{(eju >8f't&Jh!m{ORpo6d|n4:tބဓ{K$tWyKBoQe[^[0hh +(neL3p`X0M^š^oźOD<㖁y3~ +?r iٯxrZr㐡eXOiƇrn̕AGQ8K!8 z vu1JudT6Z}Y[i]o(B`Q_x|/0>(C46lkE uAl7'xl`ģT^wT1)MeF/FUO2)CAܕvf 3#`g̳㇇URZYYD8_,pVL##gc/- ϵ؟_?h*829.2ʏzďz29,Qn#IK'2zZ$ <-tfh%-i68 &kAjCh&o$Go˗]Υܞ~)1*,# #1 n8}ft(/3:s4PpbM@5xS X0lX;hpI8,elJ ËOQ]c-K;U^,lhGw (~d5 P ^\r̉?=v=pFB;2:*{CY~ɉxKG ĻK0#u_-3l@k9z'<@`34SEA}Ag0{ ތd0nKFw <F .e}6v[ࢡGDW}" 2_OGg:2P^QYǷ N6F[f^g"LhB8?1߶ζ54; s!UỲ"̮iSGRYobq= 9MCeq0K=㏊wulܑP-9Ʒ{>0ӕ6 GZWPjRr&(u^:w+2 ;%d2-|ƷH0jܡn3_o_t}_S^XQ8QVqkew; Hh6EJpfT':MYou{0 WۇQύ_lj auGi[BC/3cAq^vFW@BOjE endstream endobj 56 0 obj 3646 endobj 58 0 obj <> stream xZKo#7 W̹Hbho -v/H4bQב(>?RNߦy7EOUeNjyrLvQ8i/?LXʄIVY$Y*}HMSiY-_Բ6[5zùg5?zOH?k8z6HIy ﺞmZ- P EBu e"4^3*Os25_g5ݱ0jQ]ݎT1Iz+B/flDh`"^ 60sU>dj1⢲5se9q+鑙':E4_:&u&@k\G N3řdU(')Q5זNC_MʒousrP)Êieڿ|}v"c/á_1٪RB+f< ¦&(a|& &qM7#0EfVL{)PF4,hS֦N>a-e!1?4E3f,eUr.B/Rdt3Z ;T,Km.<_<3Doj\da%n@$*G_KXڍЮSᮚQȵ$B;$ίu5,Kwc=D re&t2V0va^Aqf)¨4^.dXX{"Cec#!+^MYYҗ8ȈRfXn33{%ظ-ybSms+iHmOm,YЊ S.h("#RY 7|犙UzlNj`oQ4d(oBfh+ pBeM[0:3iofьJjoDth3H7a)+.,/l&[6Y|$kyb]XQbn5hgs%q|(A=}UT K5*qav^ˑYLEv|Es`yGo*=vDh#Mm,/^ U' $<صrd˝ TTwɶHDGlKx$NȀ a6졋yX6v[U j*FxP䗉Xty (wx .͵>\?-ʯesY +~b`A>=>+h~K`ԑ}ZBzX)s,3saN!wG@ڻ)&6FqgrD-Pc|d B?@,;C(Q[P0}\޴q|-W [\c@}YGAQw1|8 uRт=gVWv}GO율PNuV)513dh5|ʥ2Cyȷ2,or{u!q^PA')Q-G)\qZ!- ]P{CR[0%\aGF/td䞧ŏ.!EmGܭ65;ɵz Yy6*!~ p}=}2)? endstream endobj 59 0 obj 1967 endobj 61 0 obj <> stream xXK7ϯ0cnvg|9%qNY_#UIZ^[w}P NJ+1jvpկN_?'P׿'?]?r3\tH};7ȝXPvn[>W3]+\^)_ᾞ]&{Yϑ#|AtGtnzb3"j iIߐ"th̶H34ʋbM 2LbK$&xO2 dI'tE%ѡs(LI% F=V8|[(\z¸IA 㟏ϧe)D<0[D+9ܙT|$3#}lk9]lk\nKNt GӝfEӔX"`)3la1`WPDDf"aMFyBfFtfR(Odu,L,bDU6KJ{n 2NBlH՘=4 2 / l-A L^*"6jBURdJ6e<&K9C!l=ȚHfNDNxcDnвL^QRnI>|Jlqhlx+TW`v=8Ch Dr&˶NLX&<=Od.=gz^)(b -TH?qCVuS^)'0dEuSSYΉ B,DGm ۱ᰚ er[z]%n8~Rr#,ettJ.}@9x!ս16 %86=bc&Aq^D8n[ 'So\}ZQo&]W^1NN*1|-]'@ʖ->MM/6F9g<,˜C(=Tf]g(L&*Sx&,5y>Ԑ\r*hq6yxW٨WA$ UƈCKػ8̒@7 [7Q-:Uasu7FO1ňWdycA5٩/;R}y$qy:;(o9d ķ -+.cr;~K[s[n15WCEMDTk*Fz| "^;h_ԫ߼zկfx6ck}9wj݉( endstream endobj 62 0 obj 1275 endobj 64 0 obj <> stream xM,7޿΁䏲ah虞 ݁=͆撿Ye^w^˲$[2g82OStp9'=p''ᜦ7 Mf7O?Ox  k&\?^Iʏq~pvD5DCUq(lbc^+z6ъѻ ` Њэ^vf!g,bhDZ~^fW>_ >~nUt  GD1U+ 艗`=^ ?@, GFL?xT2ɐ¶6 Z-5 x6\ َve2%4:, ,Y<9D%g>qpHV!a3RI,-C_5 L& cA]?+KLaۍLlM(kܗ3J5H1a5Bca@f9 )R4tؐ2R_ 8g57b >xfLB?W<̥Xv5e+a%[FETBQYaok\f4`}yTLgUG(E #~mb, G%Z!ʂBhKOCx{;[%J-Zd$]Y*_/H9k($.JIS*U2h ]#Bi0*bߪz92èZjvB*ԅ_=ah A"f*"߫hnřV$!I4TM=UgE7o[6f:jvP 6:fQDA%)G䴋+>텭٪"'uFo_d1Rw/raN=;]mO}H~ Saw܎G UdVg8)aE?؊=Y ZTyH;(*\ *G5bHYځ{GrqFzVUcC/,}3L%=o.z76,Vk&-vj#vӼUQRJJ((ZpoA^UrݫGjY*= M㵫mj-t8ĵ1Ȅ~\CfjR;FwV>e Kyf+, *lQL0U;H'wKq7m6VZLUz:'<HaZR@ƓwDR$D"MO0[BXf2C}a;frirDୢbU6YA:9tgm<ۇF]f6+Cyv*5t½'G`њl:b ZZ)5:`]Tn_ ۥEȐaaGaaa *K\r{;B9z$ņU&teLHҠhϩm.ci)DH:X-q_j郉DI{hd҉8;?iIb@e@5D0.2ͷB3%$L-F1r<"f.Mgɲgη`B܀zCw2K!˥#v?m!_'> stream x\Mo$ WyvJ_ c!rL`'@UI{N%IQ*jGwÿOiʿ-=zowi~\Nz{N_SvKa^NK_OOn]߿{riz/ 9۲]zX>%wI;}tt9d=PX>K'O4{C Zw5wHz)>3&ҦKhEv9goI,OUF5ǣK~nSlm1zu_.O*r,,h.yßbv7Iy n ezwGcǦ}ytOgUe,7hq+ȇ!W7Y-RBeI"VY[ajUfE%4;E[lK웎%!$+ԅFlzmJ_? 4/u}kVw\кSʼnY-Zd_ C ezF|*Tm]цd4Tf'hwI  ZJ%Vwp{{ÈU^SΧbRd4KSN[3oh\Q0Dڬ*CK:{t ;?dʪԍ@Qt4WL9iԒoԼMgRnG2g^Kq%)`#9~̿Ic:\DJ/F:"3s$.bH:V6B-&n KQ&n\R޺)<9Cix&4(JL="x<HV<5ݬ}0goQ127LD/M8A= O֡cy4h<"dKw (ԯ|^JSmI#,S &|S! (Y+r\#}qZq.A A;6Z #F5$^u^T_7Z$P(\Qejc|UpBj^zt\fWaCh.(t tBfq-u|*49&4ͺŁ0$P~:"0xSV#8[):Q*rsENMpnqz51^F4!(ς WS󵝮T§CD| +z[tH;5'>ȆiƷo@YK⤛6C_&=O9?O⎡W&}R9I0M4[s~Z/iοyJ49\׽%6/m|y&7mbYX!2`9b9?@̧_:֍5yy9#"C+BLAA1*#H2@͵{P yV1)l$\Ea0]>bgSbDhݨ+s@% ZċImU$w$^^ lIGX AgHeK& d}l4*0 E`!vU+1 S`̀`uB_ks6&~•jPHsg4/4…Db0FÅ+ՀThAާpJ5|ژuz\Xcy^7y zyvKI\\n|X}WXG.ɯsqk/_RZp}|, ʏO}W7gAn?c/[O~3|U}#_Kȷʊ>:Rg&"+j>CEc:bXj+{z q66* k΋Տwi`^zlAz=3't5^ƽ[/FS}o^çG)A?2@TZMXD')[[(t!׸]jieP)UEZ*le(xh'0e` ɻ{ QMRUVJ-d7&lS3t.y=uO;&R`+!Z?za=髢Xb9=AOb| CX>}Jss#O>W1ؼrZ9X7 1( T(,~1mCPoUd$[)A+Nem ; i7o~f6lxGHRQu dP"­eёYֆݞ8+Fɲr(/lz]qL)6bOZ&x}1 nV)@exi^'JH9w٣iC8yϜսLA|9iQIu &~PO+%[XEEwP] JfC~ s /1,x̐ǚRq}V7$^OQ^h.Z}Ga%jn*Y.a-ۑ5!`p낤]>] A `^]yQ}orǫͶra>RXú k,ׅ5nxR$CWc풲:4/Ad6֥Y,Cͫoxt/_& endstream endobj 68 0 obj 3646 endobj 70 0 obj <> stream x[Ko8Wy$vz=,s?2%eFĖ(⛴y?^1~s|u)o/{Y8cɾΗM1-%HҲ1E0/J7c3`F3 h>&߾`q֦7!IOovpF37֙ayHaLDhB::iV"z4.񆶺5|̸\Ûy_ҏ:Mososq#-U=. \Ǚ6iKo\}^v5.Shaֿ3_{gn]A%Ûf^3/zpWeeұn͊Du򚧄+۩·@f?^'GP_n c! 0`4BB=fDKHP$:|~۴ޭ\tiV2q m>dK!hx/]gMth|˅tG0?J{Go!C[8{SŌo{_X#Ң }i% LyaP$&L6 rrVbJۡ@.XF*Pէo5PK8MG"Y4"3: o͕ ^"H@ e.ƺ"2ծ@|zd㛳;ZdPM(vFl}H H 9a>8%7/_H^UڑMαī+y8W[!:Юjޙ͹BEbzE-GȠ\Y6or[V> [I]AWVU*acpGLj"RM(JG=c b#ldiO6)[i~;_P h[Jii5bK\gct3e~6T^01>mx2(֓C{d@_塼~Z+\^^+?E['Q/e'N@&v+cX A೦A7V͖G>ڠb4|:ldšHSk {FnMP{j6͢jM: ]ecd>gayUK6RwX89"v Jn; Hp!:Ff9Xu@6;8ϯ~+O2!w< rl{l7{TOKX(ܱ"h=FZRuEk$ Ni{^|:tލcxL:??ϩTIًr6QD$׍LN[^AZM+,_}dBs_\hYBu[YjPE>`="@r"ap/!r0.7 hʣМ#|`n}PL%OLNdzh^ >$XX@~mcAIF#TM]%Gq\ !_k@8b.=*:8X1Ƣad/h}vzWGBfK7j'6 ^**GLQljj'pkd&ALRF=ʵ+ۉD@Q 9MUJ 0:>ơdy}[*66d\k$?] 6/>ҊY?]W$U}\MK\*5^o[8]8S5 `MyZDޖ5T6"7W6EJ+Rm0G`Oen{\_>؇Ûu0mrt~=^ pߡW5IK5h=uD:d:r(M'Oh<6|!𽇒>^1^)u!<À!9 Iq=,h}(˪-1ۂ5-|l-Bzӳ)47:'\& d,8-% Πb*qhn E(Rá W%ThW7AܑN MZV^qJGWC Phŵ)ǜ`þskg,@kL?|}ur*lb$pRѺ/ݖf1 k8r'>\@`*Ccy$Xf`7Ȁ׏øh<0PJvgop|X9T?Vp$KTP(|y_v/÷: =6|ɲqF/,_Kb6_Ğ Mh6Enٶ_"}ppXMY\fӴ3کZzʬ71錸H_℄L8T8(KݝFweCTmܡPy uFǟO!\iu3Iukzn0xxWritǑ;9frFVvʍq}( 6ZwhHC;ܤ -F>Y >췪.n-̴nJJ 䂷Tb)*E)/:Z4ϽpP%@G딗b24Z_cAsVvW@dFOͅF endstream endobj 71 0 obj 3640 endobj 73 0 obj <> stream xZK6 W\ Ym3 ӶؽW"%eOb4cS?QR拚9}iN\t=-V]:)K2E]dpIlަY*}+Н% /`xߧOoI޿U?ͷ٪93g;| OM#䏸J< ~z6EHIyЬﺞmZ- H y׍7Peʌ`GLt>wASD{q]Ԅw^SS ە) 6$äzRs6 ' hr1le4H׫B <9*?>j125ke 9i+ّ '9E2`_:=Msק6 sp4H;SN6%Byys;niWsre)R9\`aCGȲM>>v"?'zATL9+[5U~Ŋ߂=5Jؤ&BR9-As!Je(jR\-V6ecUHD֔!$)vȪrފk/%(-t*IS1QWˡf-ŝ˩%x*h PC]2U='U0(JJٚJj uP}Ba%X2H1(Fa<ԋ)U.l:/FT,F].@ OZbj ŴCL.b2+8i@L<}Z ɇњ Z.hNls}r=/i\錭ە޲zwcy552հR @*g_),gF~hיpgq-*z] ϥܱ!I2ksn]3pfRPB&2Yl@ƞ^ C"&C4߅ kZ$;v{aoBL_ 3:({C`G($fa|4$@G૶#H-|qshŒ).x("%ɇ ̘*]tvNX(r!u,#!uQܨB5iEoc[d6maE&Mu_%nbDQ@R- }MfS0fM~dL. :L w{*CHY_Oa$Z9@^/klѮIˎfDyLХPS SF$e}[ݕY"z؜LlԵH~Wzb}Q7cn;5hMg{dp[6z}n*3hwc,Cݵ];Sm$D3Vڻ,P2>-l/ $<8i˝ e*\1BK,ӑȎXp $\ӨO`64졣y\6v[M jXFPrD,gI\t[bBhA-D,܊*|k`AB=^-hO`̑w⎠z!UBܦzX)sx5SOՋB|wK5i-d!?k\͍Y׃'5P'%c^1&nS%31:9Dz3P\Z]+G6[+Ah,0x<պ}mZuK%ћ,vBB{]s4`*F4oݣDNH(:ؕZ뇘at^\ 2UM(dFMp<4$M ! Ty$#FldJ _tZl-O"3ouEEȿg|g wHfӏ_OY׿;$ endstream endobj 74 0 obj 1967 endobj 76 0 obj <> stream xXK7ϯ0cnvg|9%qNY_#UIZ^[w}P NJ+1jvpկN_?'P׿'?]?r3\tH};7ȝXPvn[>W3]+\^)_ᾞ]&{Yϑ#|AtGtnzb3"j iIߐ"th̶H34ʋbM 2LbK$&xO2 dI'tE%ѡs(LI% F=V8|[(\z¸IA 㟏ϧe)D<0[D+9ܙT|$3#}lk9]lk\nKNt GӝfEӔX"`)3la1`WPDDf"aMFyBfFtfR(Odu,L,bDU6KJ{n 2NBlH՘=4 2 / l-A L^*"6jBURdJ6e<&K9C!l=ȚHfNDNxcDnвL^QRnI>|Jlqhlx+TW`v=8Ch Dr&˶NLX&<=Od.=gz^)(b -TH?qCVuS^)'0dEuSSYΉ B,DGm ۱ᰚ er[z]%n8~Rr#,ettJ.}@9x!ս16 %86=bc&Aq^D8n[ 'So\}ZQo&]W^1NN*1|-]'@ʖ->MM/6F9g<,˜C(=Tf]g(L&*Sx&,5y>Ԑ\r*hq6yxW٨WA$ UƈCKػ8̒@7 [7Q-:Uasu7FO1ňWdycA5٩/;R}y$qy:;(o9d ķ -+.cr;~K[s[n15WCEMDTk*Fz| "^;h_ԫ߼zկfx6ck}9wj݉( endstream endobj 77 0 obj 1275 endobj 79 0 obj <> stream xM,7޿΁䏲ah虞 ݁=͆撿Ye^w^˲$[2g82OStp9'=p''ᜦ7 Mf7O?Ox  k&\?^Iʏq~pvD5DCUq(lbc^+z6ъѻ ` Њэ^vf!g,bhDZ~^fW>_ >~nUt  GD1U+ 艗`=^ ?@, GFL?xT2ɐ¶6 Z-5 x6\ َve2%4:, ,Y<9D%g>qpHV!a3RI,-C_5 L& cA]?+KLaۍLlM(kܗ3J5H1a5Bca@f9 )R4tؐ2R_ 8g57b >xfLB?W<̥Xv5e+a%[FETBQYaok\f4`}yTLgUG(E #~mb, G%Z!ʂBhKOCx{;[%J-Zd$]Y*_/H9k($.JIS*U2h ]#Bi0*bߪz92èZjvB*ԅ_=ah A"f*"߫hnřV$!I4TM=UgE7o[6f:jvP 6:fQDA%)G䴋+>텭٪"'uFo_d1Rw/raN=;]mO}H~ Saw܎G UdVg8)aE?؊=Y ZTyH;(*\ *G5bHYځ{GrqFzVUcC/,}3L%=o.z76,Vk&-vj#vӼUQRJJ((ZpoA^UrݫGjY*= M㵫mj-t8ĵ1Ȅ~\CfjR;FwV>e Kyf+, *lQL0U;H'wKq7m6VZLUz:'<HaZR@ƓwDR$D"MO0[BXf2C}a;frirDୢbU6YA:9tgm<ۇF]f6+Cyv*5t½'G`њl:b ZZ)5:`]Tn_ ۥEȐaaGaaa *K\r{;B9z$ņU&teLHҠhϩm.ci)DH:X-q_j郉DI{hd҉8;?iIb@e@5D0.2ͷB3%$L-F1r<"f.Mgɲgη`B܀zCw2K!˥#v?m!_'> stream x\Mo$ WyvJ_ c!rL`'@UI{N%IQ*jGwÿOiʿ-=zowi~\Nz{N_SvKa^NK_OOn]߿{riz/ 9۲]zX>%wI;}tt9d=PX>K'O4{C Zw5wHz)>3&ҦKhEv9goI,OUF5ǣK~nSlm1zu_.O*r,,h.yßbv7Iy n ezwGcǦ}ytOgUe,7hq+ȇ!W7Y-RBeI"VY[ajUfE%4;E[lK웎%!$+ԅFlzmJ_? 4/u}kVw\кSʼnY-Zd_ C ezF|*Tm]цd4Tf'hwI  ZJ%Vwp{{ÈU^SΧbRd4KSN[3oh\Q0Dڬ*CK:{t ;?dʪԍ@Qt4WL9iԒoԼMgRnG2g^Kq%)`#9~̿Ic:\DJ/F:"3s$.bH:V6B-&n KQ&n\R޺)<9Cix&4(JL="x<HV<5ݬ}0goQ127LD/M8A= O֡cy4h<"dKw (ԯ|^JSmI#,S &|S! (Y+r\#}qZq.A A;6Z #F5$^u^T_7Z$P(\Qejc|UpBj^zt\fWaCh.(t tBfq-u|*49&4ͺŁ0$P~:"0xSV#8[):Q*rsENMpnqz51^F4!(ς WS󵝮T§CD| +z[tH;5'>ȆiƷo@YK⤛6C_&=O9?O⎡W&}R9I0M4[s~Z/iοyJ49\׽%6/m|y&7mbYX!2`9b9?@̧_:֍5yy9#"C+BLAA1*#H2@͵{P yV1)l$\Ea0]>bgSbDhݨ+s@% ZċImU$w$^^ lIGX AgHeK& d}l4*0 E`!vU+1 S`̀`uB_ks6&~•jPHsg4/4…Db0FÅ+ՀThAާpJ5|ژuz\Xcy^7y zyvKI\\n|X}WXG.ɯsqk/_RZp}|, ʏO}W7gAn?c/[O~3|U}#_Kȷʊ>:Rg&"+j>CEc:bXj+{z q66* k΋Տwi`^zlAz=3't5^ƽ[/FS}o^çG)A?2@TZMXD')[[(t!׸]jieP)UEZ*le(xh'0e` ɻ{ QMRUVJ-d7&lS3t.y=uO;&R`+!Z?za=髢Xb9=AOb| CX>}Jss#O>W1ؼrZ9X7 1( T(,~1mCPoUd$[)A+Nem ; i7o~f6lxGHRQu dP"­eёYֆݞ8+Fɲr(/lz]qL)6bOZ&x}1 nV)@exi^'JH9w٣iC8yϜսLA|9iQIu &~PO+%[XEEwP] JfC~ s /1,x̐ǚRq}V7$^OQ^h.Z}Ga%jn*Y.a-ۑ5!`p낤]>] A `^]yQ}orǫͶra>RXú k,ׅ5nxR$CWc풲:4/Ad6֥Y,Cͫoxt/_& endstream endobj 83 0 obj 3646 endobj 85 0 obj <> stream x[Ko8Wy$vz=,s?2%eFĖ(⛴y?^1~s|u)o/{Y8cɾΗM1-%HҲ1E0/J7c3`F3 h>&߾`q֦7!IOovpF37֙ayHaLDhB::iV"z4.񆶺5|̸\Ûy_ҏ:Mososq#-U=. \Ǚ6iKo\}^v5.Shaֿ3_{gn]A%Ûf^3/zpWeeұn͊Du򚧄+۩·@f?^'GP_n c! 0`4BB=fDKHP$:|~۴ޭ\tiV2q m>dK!hx/]gMth|˅tG0?J{Go!C[8{SŌo{_X#Ң }i% LyaP$&L6 rrVbJۡ@.XF*Pէo5PK8MG"Y4"3: o͕ ^"H@ e.ƺ"2ծ@|zd㛳;ZdPM(vFl}H H 9a>8%7/_H^UڑMαī+y8W[!:Юjޙ͹BEbzE-GȠ\Y6or[V> [I]AWVU*acpGLj"RM(JG=c b#ldiO6)[i~;_P h[Jii5bK\gct3e~6T^01>mx2(֓C{d@_塼~Z+\^^+?E['Q/e'N@&v+cX A೦A7V͖G>ڠb4|:ldšHSk {FnMP{j6͢jM: ]ecd>gayUK6RwX89"v Jn; Hp!:Ff9Xu@6;8ϯ~+O2!w< rl{l7{TOKX(ܱ"h=FZRuEk$ Ni{^|:tލcxL:??ϩTIًr6QD$׍LN[^AZM+,_}dBs_\hYBu[YjPE>`="@r"ap/!r0.7 hʣМ#|`n}PL%OLNdzh^ >$XX@~mcAIF#TM]%Gq\ !_k@8b.=*:8X1Ƣad/h}vzWGBfK7j'6 ^**GLQljj'pkd&ALRF=ʵ+ۉD@Q 9MUJ 0:>ơdy}[*66d\k$?] 6/>ҊY?]W$U}\MK\*5^o[8]8S5 `MyZDޖ5T6"7W6EJ+Rm0G`Oen{\_>؇Ûu0mrt~=^ pߡW5IK5h=uD:d:r(M'Oh<6|!𽇒>^1^)u!<À!9 Iq=,h}(˪-1ۂ5-|l-Bzӳ)47:'\& d,8-% Πb*qhn E(Rá W%ThW7AܑN MZV^qJGWC Phŵ)ǜ`þskg,@kL?|}ur*lb$pRѺ/ݖf1 k8r'>\@`*Ccy$Xf`7Ȁ׏øh<0PJvgop|X9T?Vp$KTP(|y_v/÷: =6|ɲqF/,_Kb6_Ğ Mh6Enٶ_"}ppXMY\fӴ3کZzʬ71錸H_℄L8T8(KݝFweCTmܡPy uFǟO!\iu3Iukzn0xxWritǑ;9frFVvʍq}( 6ZwhHC;ܤ -F>Y >췪.n-̴nJJ 䂷Tb)*E)/:Z4ϽpP%@G딗b24Z_cAsVvW@dFOͅF endstream endobj 86 0 obj 3640 endobj 88 0 obj <> stream xZK6 W\ Ym3 ӶؽW"%eOb4cS?QR拚9}iN\t=-V]:)K2E]dpIlަY*}+Н% /`xߧOoI޿U?ͷ٪93g;| OM#䏸J< ~z6EHIyЬﺞmZ- H y׍7Peʌ`GLt>wASD{q]Ԅw^SS ە) 6$äzRs6 ' hr1le4H׫B <9*?>j125ke 9i+ّ '9E2`_:=Msק6 sp4H;SN6%Byys;niWsre)R9\`aCGȲM>>v"?'zATL9+[5U~Ŋ߂=5Jؤ&BR9-As!Je(jR\-V6ecUHD֔!$)vȪrފk/%(-t*IS1QWˡf-ŝ˩%x*h PC]2U='U0(JJٚJj uP}Ba%X2H1(Fa<ԋ)U.l:/FT,F].@ OZbj ŴCL.b2+8i@L<}Z ɇњ Z.hNls}r=/i\錭ە޲zwcy552հR @*g_),gF~hיpgq-*z] ϥܱ!I2ksn]3pfRPB&2Yl@ƞ^ C"&C4߅ kZ$;v{aoBL_ 3:({C`G($fa|4$@G૶#H-|qshŒ).x("%ɇ ̘*]tvNX(r!u,#!uQܨB5iEoc[d6maE&Mu_%nbDQ@R- }MfS0fM~dL. :L w{*CHY_Oa$Z9@^/klѮIˎfDyLХPS SF$e}[ݕY"z؜LlԵH~Wzb}Q7cn;5hMg{dp[6z}n*3hwc,Cݵ];Sm$D3Vڻ,P2>-l/ $<8i˝ e*\1BK,ӑȎXp $\ӨO`64졣y\6v[M jXFPrD,gI\t[bBhA-D,܊*|k`AB=^-hO`̑w⎠z!UBܦzX)sx5SOՋB|wK5i-d!?k\͍Y׃'5P'%c^1&nS%31:9Dz3P\Z]+G6[+Ah,0x<պ}mZuK%ћ,vBB{]s4`*F4oݣDNH(:ؕZ뇘at^\ 2UM(dFMp<4$M ! Ty$#FldJ _tZl-O"3ouEEȿg|g wHfӏ_OY׿;$ endstream endobj 89 0 obj 1967 endobj 91 0 obj <> stream xXK7ϯ0cnvg|9%qNY_#UIZ^[w}P NJ+1jvpկN_?'P׿'?]?r3\tH};7ȝXPvn[>W3]+\^)_ᾞ]&{Yϑ#|AtGtnzb3"j iIߐ"th̶H34ʋbM 2LbK$&xO2 dI'tE%ѡs(LI% F=V8|[(\z¸IA 㟏ϧe)D<0[D+9ܙT|$3#}lk9]lk\nKNt GӝfEӔX"`)3la1`WPDDf"aMFyBfFtfR(Odu,L,bDU6KJ{n 2NBlH՘=4 2 / l-A L^*"6jBURdJ6e<&K9C!l=ȚHfNDNxcDnвL^QRnI>|Jlqhlx+TW`v=8Ch Dr&˶NLX&<=Od.=gz^)(b -TH?qCVuS^)'0dEuSSYΉ B,DGm ۱ᰚ er[z]%n8~Rr#,ettJ.}@9x!ս16 %86=bc&Aq^D8n[ 'So\}ZQo&]W^1NN*1|-]'@ʖ->MM/6F9g<,˜C(=Tf]g(L&*Sx&,5y>Ԑ\r*hq6yxW٨WA$ UƈCKػ8̒@7 [7Q-:Uasu7FO1ňWdycA5٩/;R}y$qy:;(o9d ķ -+.cr;~K[s[n15WCEMDTk*Fz| "^;h_ԫ߼zկfx6ck}9wj݉( endstream endobj 92 0 obj 1275 endobj 100 0 obj <> stream xzkT[跿OIt@lȀdalv m 1Ic+NMRשm4qZ8fRNWzۦn{ډNf$i;~%]]#s{{!c.MGl{z-9~@CyOCnrH ];x2 3;dGK"1}=?vN7MY8=L{`vrCJcd-(*!6{G{[kKsScÖ͛79785mUҺkV,y9Bѐicc"#4jRQ ]pt"Wp: . 6BwGN -wJP.I[HvSt:PEv: oaE b4oOۃFE5BFF!P0_JoDÚ r9`cS6h(낱B"5ɠ&Mn:yGtdg9O빷=n`P,|;#wE437۩$9:|D0a;)=a*Ga8-Mx 1ä斾Hzq#p`| q=Ho`\nw,4-6D`:0F# 9ىHp=dgb;q9m3̹-`oַ>9~'8iu ~nqz!U]*s1-uV S d$k!av삽;LA|tC]"` }؂=EZa8 TO.Ղ 5A Z쵬e l M허u*>E+YE:jpR U=4tHӍA[vp`*Eo־&H)rwCf䂚 Nӹ!w TgP[ TNэ`owՆ~Q%+5CN3a ]"E6n54,e3(I,)v%t|bc鑳Np_ށݖ,L1"{a :'7Aoλul>[̸6H a%l[OG?ς1hy<fm66ٰ u}},3W'Y[q[ E̪g84k-/?~F^% J3YjFD#˧_2%s2A{42 H t44Efi^JmX tw'IBJ̎P9 T\(ѫ*DW1+P G)l}6I,˺ jfdV Erd jUg.[F}QolƍAe_UB,⃸ғ׶b dx&eNg;QB7m <Xr8Ұ}ݰnJ7Zu}:Z*: :]jܶ(܄6}~FZ4ϥrۈB)8BG,]cTҥ$TT-ĕ[:JNkIzήN3{0H~0Q/%+hbB,U J8zu]:0M7/ۜC/*X=xbG̓ɽgQeXKsgO.Tl!$mk'#& Zf-˞XK"<#Aƙ}"f$T!D^cy\EM6f8 0Պ"-[n1 YہpL$IqH1@-㖉fϠzDc7⇢bJNk~*S/>K}9y?g:(_U"P"DQ-]jX,53 8Vȏ; w@&dk^89FkGxZIe5r5zMn;>Omղ5ָrbwekt/rTXPsXW@rRrJX'8s&2""RpƯ.\TǪMF_ShZ ~zch)s >'/7`Kc15:3K@&^exZ\_"GLEЈ(@ac8A.TMl@钜Veӛ1RiORp2,Z-$[-J,+F4ħaƏ`3pIź=OSNC11"Zyo6)`,m:N:ʁ9P;5s !@j"OSU:ezl[i1MSqx\#< +rD87nw8.2.-RԐjUX\9X̝Vke#洅\B+JeixFWUrR_֩ڮ\DۻgFYۆ'ٚB{o]Ұb]ZC3;6Lw'?-bN֒n$tbYt2mc11t2'CwiZ$j`PUA]zRW%F+fğf!^\H,Kͅ{sw"sri:Q@QTRrֹ;s$:̜eAWǞN|-,gȩd\2ze l,]+dnK/U'U/z_}yLXwZ=N?k/G5񳻭YN `wӯ:-]qO'Q7Ф73p[+ul`z\-d2fk|R 'UpXlQ:HI8%)mщN]"H xU lFJ>MRDTWetYCQ+Bk2[;GXɩaRi$b95A:7f.!Qs e|B >?+m*W&-=M4b XG$ ;r9aj7r[iG;*`\HO'bШhs8kf&tM(ZaӪ+> 4{43!s!aK?Ґkঋ[F  uF?77ބgjjoo>{uz[][`xd5伭h"L&hڭ۸!nZiB֬,W¾N@ #c '4͞6HJDoBo9Cgr bʒE4M/)8Dfx~U/5d"MԪWScd[cfr?c!40BVh2a9Q!syK];77)|uy25mp_^bsȱɚ_?T~ =a,t479]co)\?i}mO54iHl;8?OnjF*C23Xt L$@Qh5JzU A弒R°rJIJ+Y2ҳr JX Wה(h7U,:w܎$|㯫XM/ǽg2a h2VXu,^cQ)p\;MI.8l&;7w% 潟G`8c1TU!)>1hّd`Fwd7n >Rt dGG*WU_J,PriCmβah}zaWsY5jX64SwEQjb>oW%8)# nNVHvKP@*h]S#ISIͷ$BFXSfC_[K$Ak].K;Q<ؖh<3D0gvIAdˢMc퓠^*fA!}#ҫ+뇚zUbpr hC)]gq }q"s>d K8T%*YI+AHTNKg*ظPs-aŒOR+niF:-K lX/&1_*VİS",+K>`yNw쮻O_p2IItl//C0ϺKiR5I qBBѰ‹Pʚ۾c\ʺ>[M\˝Cjzo3߲hhq1C\"Y8Q))"y̓|"1$FSs-}6y e8{v/x`yʿlPCA?xݬkҮBKKtVBԕ7[?kGj?!*|d'Kw>4xoۂw#ރxw V%y'"Tp[ QFaMMhde rzҌ+N诒:踫TWmo^Zװw?3ߩɽ5w{=|K3FB.ЭQW.b%p=pQ$=|[QKwy|ou^רAshls|E7ݯ{].~sy=~pŲwޢp/zXv|^4߳{:cr)sx=1C2"sxfއ]}w/Xw-!{nπf%L/&d$~“|ҋ!ֱFH%DZOvㇿ͂O\v{\ePzҊpقT,߃{PE{BiPQރQ>]9bލmn~oPƆI4W̝{vdhJqd ytɽ</mΐGwb oUC~F;찞eo/N(kb]rdЍfٗ;6 @A~0,Bdç 5>pdxa6t]?pj7\~ʨ?tI?\s~y85k#/ն$*pm 7 oRaYJ?~ؘk.A6Ksq%Ū \wO?mh| ' 84|xcǗsŏSctr6:=r,NMV*#z؇S2gHu3 B>aOC6>DcgÁGv 1Po9d-hi}KفuĒ endstream endobj 101 0 obj 7317 endobj 102 0 obj <> endobj 103 0 obj <> stream x]Kn0Oe0$!R$}{H-cg3yI՜}&ق6<ݜUf\i+z˱, v=`{-|uTS,yu 6Wڰno~sʒ+;ҍPjݨP~Y߆bgNQ`י+Bu]20_-cg4lb9~ޒ3ޑ7):>z>Doяє=F"o){gxO>SNUrys..~NS|쐮 endstream endobj 104 0 obj <> endobj 105 0 obj <> stream x{ \Te眹a`fDE h9(^7d ifVͲm̌5(sks33տlvu}[< 3 ݶ3s<{mu0do{!FG/K[n,nnks D=iYC/^ FY%r\)*2f\&w=w!fMO8'µbov΄M5x3p!0O 5#!a2GFYâ'$&I)#3Ff_P:N0~`Fuf^GFn =Πcr:Bv@0лZhL{As-ڮXZI:܋:1r-~:ڬXԡ@AGӀR:}iS^4j@ݦ1N:$wQ >͠5Bn2- AcH; aGf|'wtLC? FzQxa%:2Gyқd LZUuI].TB|'Iui]GcfV͓:T\<+ie)oY]T(n=v` 5|HsUrɍ2'Ӓ g?4`$Xk:~0z('ob.H5 kM:-|>?eOㅶE"|Ln%Z r:^b  P:N2L!M#D8O&hb\̕eBf>i\KX2~ЪYmd.D qcnFwN?;7ltOUg<Ȋu ֧_)>:4(79hM'40k˜IHU™a pSS,m.G%9_x#^ɉ8?ok8Nل6h=aG_\rhQnʇpfX=qۃu ;v,|%q*pphv_2)dcnIJ9XX$x+Z7֍û|wZyDѐEqpΒR<{$h?&Ӧ/NGF =Q>(9^7ćeYII$ä0$<)4ʱXG 82)SL^\oXI,iD# 'DbH,#|>#'sJ2Wgޕّy&s8FleFZ%DlhRS31ێ;*v,ظq}S>?]zS؞hO=rdm,9|ޗz`ܸ̬Je] \(t-&\Em `eL%S7{'y 6dk2l̩͸ ʉ6l?ױG6)o*44ӣmh?'`Jt'ɵLzJ_0*ߜjη?|3J%@π6;,B=ܺ)+nk ,Ŗ$@<{}u; h36]>_ VP |==sgƕKZnۣ޷C?}o_{J`08Qc~YIASFEN_hM /ɫmqJ t26OALLϱ";,-@T _ypd]]ٷaӰ^쎝;c@>$C>=7K^Nrpj$oaͬ {X~S?P5_||X%"a_!FS;vLAPLX`H/Qg9g)І&YX>giVKSZro\{;|NJy 巄_޳a=O~9*0y[p pf4EA?pku+N\xcۏsKAr[mtIZq,gL^ҍCp)su%2D9x>WPvXhZ +VafZ7Fa܃~~afSCOu|us|]o-u|$䃏h-Q Yi,akx~6" Ī2 0mbܕ\5hWsZSb5f.qbff]b1b3|&|oAxH?:7|_!/LJFnA B'# р(uʢ¯U}qW0َqgV{\D;6LǙ HID+q<*7T^&"HjO x_Rf("~$wv? *(m=srGPGڱpIm [ N)) ڏT c]]Aw( >5`c$Mm,1kuZ:E8fQr:tA(jE<y,ԋ'E9YQb:$Վ]Jnv[]+ 㱁D8Hn~,L띺%e5N?D,,R8`oƫ˫ȫ b{us^ģs| >Bm hkfEiV/r Vx J gc)`$KP)M"YجU+YH4 >)'$ M/;gݝ_XjܛC~g@.kppx[3~DMaCZL4fCOKT )!pj$&֞jXgx=Yɇʇ7GJ BP9烉CMl3G {8[‰s19؁|И')ϝOҷBr]xOÞ (M8- ? =oҙMP=GzX7gH6s1+hjo3ݗvw2%.&|6ƒ2Ah'Yq7ax^i XF %edVf䋏GЊ9OK@>/WxݿpN W/w&Ō~w߻UqmL>g8>aL[f mAkgu?DP E!눇ɂ>W a<}g߄;zR?+ XȆ)d]p10ξXPDޫ)} 1~ P- I&rBG9>pgsҸ 1Z1|,'RMk/Y6nm# ) 7M!}7rYOMˏ# F>s6|wAֲo_ǟ]'A3a/?yl%':Ի5gB.%IɤfVYLpVC4$H!H$S~\-}'v۲kx}%냿~E^ny[1"}$zghs3`Dkl H  &x 7?baT= Ȁ? =L:ʀFh>r6t;ãw4+peXqnx9YJ'=hd']'~B;pH9'w :[*57%vh-F1nnO"h$zqgLT5gL4gI2b(I^/, "HmtQt?#mB>OQ ,C&ȏFn&pk$Dt=^. sXw m|P>E7{1tߏzaF=לB_k&^xޏ&iM&۳ÁN+|GC=kGCmC_܃z.'. ^ג]|X(v =[4hSm.[\OtC`1~e86*y=:hլ9fc9ꘇq:pԱY>uC) ؀ OccZu'%c6i:6#ݤ=˼ō~id}/-Z&>ioΒZ곥¦&INӻ/:n/m^nY,/qs}NThoYIvSrHEMznZkj-"ːrHyc %~OAN时fܭzgۻؙeTEH)-r62 qTڴ\tH ^wTu.UE `jU,FA3ofqeċ}) v;v a0Qrz]>f~Ojtzkgl$[,<0^vaS}#P+;[|`fL >e~]lTW8i$6H5?%IuznGkq@1עV ؐnojuPI\Fwiv(bJ T,IYBxdQ9ns` DUĚ d=~Q1cuꆆVo 0tsgIEK~:Ckp7AQ-W @ξȽ4P -n?Rxܓ|&qSYb+5!Ֆ<;0Vxپ ;\ .h&? `+ j\MvH9>&b%WaP{=y|9Q"0`7 M@#H kiZ&B\x_'tࣆ~ be^OJ;pCLiL)We2RmP,us䇌}QPtt hKvPt `t;*pPT hx9M4ۨR+{ Ša[j+(X 5X*j*KjVKe5RUu圲iӤNɒN]+ŠReTX1_YV1-K*WU]\S#VVKeˊabjieR쫨fJU%UV\C*:. jg%e@ ڲ U5@c((.ųA 4j~uY,T YbmuY3$ V *WKlI6H 49tsrp]KSZQ9X,]1B**U ʋ@ei K:&tN"PZ\Q\]X%TO-cYuZl(gN)f6L,qb(ߩL2~KVV28K*.)q?+KX{RURѹVݪӊ ˁ` &k!owz4VJ#+JbQH\e -AfT`æ8K)|@tC'RJc*WtbLVz73EZiom~1$h y]~(&fjmi 5\AyK:eZ/eLW `fUufzA*ŌeK׷N_~78HTpMpA7A8H-/3A"~$D2$* b%1o`%RXIXI J;.A?"]%QKҷKqsw !B&QL7L`$}$ 9fTR #t$56H #۠#1IC#۠#>>偏Ȁ@?@ _ٗ=isqA)Qؠ34-C^BQ## D(P.aVH^DvԌ` l&xI]9 {§V_~i)EVS9q%ojΨ9;H*-5 I `:5$rKzvt݌kșX=4Cկz P>ֹ 8^/;h8aOI Vr6XKؘR*;`M#{&ZvT`=1: .tW|fQ.f/+ewC; lg34ʚo97xB5b`LSk1Ңz=K-cJ&W=챫, !B?OL/c+T~?įc&tò4"gwe8d\2*MX 4W-B5 ̆Y!ޡfObHKկg BۥZu/ur3QԨ٣+qdC-Iydoj%SGIl3&Keg*(Ye -pq%h~5|r%hOb:ۙ"cMKu9I}3֏ ?DsUXr{MENmdt?HJmyh:uDMJ$j }Uv=Jx RT5FK0`{ %[&uj.{꬝Օ ?"2{8:dZ81l0_;D)!QL;DV5qܢf^JwE8d4 /o*Eҥ$P놪 ZC5U˅檏U@f[ (rh^u@7bcJ?Q%WeVRQ1S*򩄫Z4pd5Wsj34BvOa8Ɣb%h)4Ҟ3ĮLX_b4(j5 Y%)Y0[:c*̆k:.E**`W-ʢHZ A*c͂j?][=*Gt\ʩXQ6)ͩ Q9 0{2i+%p_ѥIxBh*|WoeVjՕY̏Til?:R$TLA*٪-9saKbL-M! N)@5f3 *"Zڳ?C2ًJ>q*dRP b?R_1T9[]v,e3J<1]Vh*qDyu2gjL2 Ԃi.?Bsj͂ޯPq*sY.U59Rw* րj|VK6о< *C=ЃX<[CY!^RճعCQcάZ*\6ZU| nC=a,@An(:>W0t#6v7=ى{slg?Wi)šPEO.mlW կU]Kz\iHt 9Q\Oft(\ r< Sj!;EQ"W3w}.t$8uAA|$~H>DYG`W;AE+I+\)\)x\Ia}JOk JJAs%2ϹRNR0+]^tIy>W针. }.bS&h?eOALgILv$~S&_v$23 wv$ّxّo;;/yv<ן_rtgGzr N|BOi[\N|Đ˝;|'4PAd|U7W9.7;`)W Dc7g,+ ŭ]8/s4evpL_ə4 t;#>G$ )!|zF'k'#琏d{|G|Nޗ{w7w_&o`on&' 'n&Kɱwc2y'Z&/e m'oIޖɑDV9,7֙7χ2y]&?k2yU&?"2yY&/I4[&]/,t} _&/$Mطv?I#{eB;#e)dA 'Iv93;#gH49C&OI<I…cQ%lqM&?#?#< =h!"_&[ۍVشwopHro8er]/V&l^H6;elaL&rl ,>3ֵfV552Y-U2]曅[drd +r,M-,IL#7#e"drL%5%ƛbhS&dL.,d@&sdH92 gZ+&f8kfD Ȥ@*eR1$Tdd&ܙ)e&aF)K0 e&2HJeRN4LSϑILb\}Up\59B*Ld&.DIFR 2rE0$L xg cI]adr\#11z!DIV=*M 2#Qi$3HF4f#HILR"H2I$I:GADI0x`LΑ"12 `h MbU&D$D f 21 2 aÈA&ee:h-D > endobj 108 0 obj <> stream x]n0z C 08v $%S-0-|anQ][:3m0Kɷtsޟ*Ļa=LG-<*U;:߻\CcL>;ed)wޅΟ]*Vv6s~ZO.PCFpS-ق+Їś(}x3CԡRGY aƿFSXʏ Iӌ,Y Ӯ endstream endobj 109 0 obj <> endobj 110 0 obj <> stream xzkX[ו!/爃C #ƀ9<$p pmd#d'v$v|6vg2i<ؙGi;m:4g鴓PΗt:-f#a4ctY{^{ڈN?JA3F_pߵ!6B8mxW?pU_AkkptG Ĕ#dG'vo2u*2N}#lf;B{f ۢ)S]4#|ߴz m'&> ߄J6Ovm]?E(a$ʖ*?xZoо!׀!̇M P&$&%mZz.3+;'طٷHv;.f5@" i~F+E9؈>Cx}EŕԸ4U\d2zz+(]|-??5 ʆ#B#b&\;{oy{Ja rOQ";;xwַ4E5|JlF@DëuvF{6y"ɏ&Jo,tU7E:@Y mFdkh4%={tgfpt{f#qEf?m#4oa6MYdZZ;2GXFBj귱ע&0i:>weY K,AOS/4dzY r{x#hx48 pL '8r@ǐށYq /`a hGX3)EJ$IDo"^AJ +jgdפPZ\ :5ٳPPJgJLo f4=Pb.jީN!\L}>x}#^yYґvdF*=)˥p.6X)͇6B U][e hׇߙ}5k|-Twp>~N=qaϛ/El47!9z2.9Kz%1 uKy):;Q8l冸9Nw^a@rQIyK@rS4J5ԯMMMvl\v҆vm*6:.ff,,D{ S(]Y]w}Ne4nַץ;f!Q"qsXz,@Z37iRkt4Pz-ҶޢL7Iك498'E4Vg%5VP9B UtR,k [g^ ܼ+fC]dĴo̝~6a2qǞ~.Hh_Ԓeoq>pLg@u蹳d隬naO ΉPjO˩T_аcǨG/_OcoL=9)NʧR/2DE`T;`5Tb6Qljʲ/`:r`)5.jAM"1@,)*tZ bbTٶ=HSMf=/+l]'s=C_'DM<j,p7@wwVTKRPl)fOl9'1p4Eb%`IS_V`E؝HJ$R7sj"K ft S&L+OMdU9ŋif`ѻcL*B5h,*%u4cE8PhUp:/x𐷔ґV5j^t%/ "ԢdP,ʉMO `pr뷶ۆ6U`P{Yk)靣'|@*҉5lIu}N"eI*}_se؎mGoGOE~%%%u ]ja\#u\)WszqFlk4RR#6dgc=E?.2̕Y˨"$Tr"9x9ﴺ:`l0ҴZ͚E (ͼBi4K5Y YJ ϨY45}%4tR]ms7VI Y62R9Ȕ7{1cXU4UrYjuYG Cb{AXSk̝dmS6KN[F $p ʯ񚑽jyp*$TA-QtgfRi. ?s65dP΢OeXV 8U4~YfWx`Y}HX(\R)5GWQTƱFe6Ej~^uIE`a*sek*]lb_]syWV l){$ 3 /'! YE,T ~?Q-(/Jw]e}- U5M}'.'2-b&λ/G݆GNj6<"QaEnqH6>ej()0c~J(\uZ:·el%RA*RD'[ d%v-X2RX5:$l(Alhi\/{{K%P-؇GRƩV띮@%$j9dLdMaLlŀD,{`Y-l,/n10lsCLcySrM8}REp`OУϢ$"L.C Z|;qc&JIpjDr޻3gNŶm˦L*8uz時=lƴb{~O7{ߘZ3a[$FۻNH_<{ar|RwR-ss ͌l 'n tzYK=^apXAr01f#ɏBa 4(=zt~:=<={ :]J_ףAǎ)' '_=~lC{[*v̼,}";"m^E|U/uRě""DEÏE|YO }Lĝ@C5>Hņ.Oω~oUj*b1ODܷ<#'cS+d"|,ƜLŘE2u1!6_1H K K]4 5'ɬlYĜL2/D(Ř>ʘx??hayeE2 =2 9n M"uE&RDOȋ E)dKW 8'qg0^L޾bkqS딱0x(iXmgMmM&%-T|+a̬5tmAit iZ"(i44!R*RRRCDEj/oNKj ]Wٶx}'Ʋ*̤s Gi4.eCMUb\i+IR,^ɕU'YXƌz#B(6ΣK b!L+Dv Y4z^۰bA"Ȑ{3 M)8Fͳ6-lFSH\ oh8~{G3~}g|z3ɜ)Dף?w~B= jc~MLu+M6P:>G9k0ib}C/}]C =>9^0ϱ]}[rł=<0/IIݲz䌯X؇٣6`[kZ'#7SA8L#02Уq:;qX5+qXp"R8 2 o SQUh G܇Iyjcƨ΍JWa8̠kqEyw?J)8JD2q8b868>d_*Whk {z|t,̗ VG__;9l'&x OC] ߵֵܷ>><Mo[5? &yo2i 'G|^tn:D[~T|a"bt<Or|ﷸ-|/ @֭~98B[i Lq]~~/cppzZ|qa vXP_xw?N-c] d)ҬԠ30 Fє!'CD NÖQm6K|hGD4Gh !іax$BZzh,5 +8~x.^ SL; >F@[]0~<IuCk@{F6< T2iCc[O64[ џΜ_cC2MC1[\2̻(2U<(,6)S}Ɍ.q+'M9,C;9X\N?B@I--3mONW-".yu2>,v#+WXNq1AY~ޣ@EФDC;W1AE|eɛ]>#jw㚇Q@p] /X1v8J LvpN9~Wu|0;$rCgcYmxYɥi,XM7ԐKr.(GzqqpJ]ԀkE-4i:skE J_QOaԏH%=z>g8uzHOͨVKPS_V/1U53 |l\P.vFݛ"`&OgcDq07nc=Z;#tFF0&> ¡Pp BˈPh'yDFBpņ!d;@r- ̊„LdHF63!~ڍ endstream endobj 111 0 obj 7524 endobj 112 0 obj <> endobj 113 0 obj <> stream x]n0 _۫(77`; 0Ѕ>O{njS&%/DBb+z40Vo\BUUD`Ϳ$K?[RUH2- qV!o ry|BΈgGf)rLNCu\^$S쌼#t3dO'Ox.b+73:oއCyz oɍ) endstream endobj 114 0 obj <> endobj 115 0 obj <> stream x| `sf67n!$$$WyɆ$@Hb h6 YL "V'~VD"V*Ҫ(+GկEC;M?2̝{=sm(!qd%ltͫEyк4Z&'$Djl/<#s !ښ~;o㺽rtk'+;uʖ*|oƍ\'}\:*2 .W'&|G` riB?_߯#$ax8b1[Xlow$$&%WhK^wO#Id 6ϭz B$B)o"(DKZ7q/o{n6@\!C=e44ɝ4y|!6& !y9ij|t6#kr yZ?SQr!V#1 }&w}H>6^Oӿ"kȋФ0Im/9|M'A;(5y,3(^-d j-*)GMI19r7KhJ٨ͫ,?#WQ;rc!f*kLmtk9~-B$\H]JZ.%ӟ1!П1-rYkZ+7\7E NvrRl"A5mp|i ٦Ύ%!0,'I%PfS&Y-wIZ]FJ/.r7EQ'bL %}_漼I}va%^U{m.Sw>]$g( )÷Ayߺ`N](7V4dCN|EXT)OU6]~[ɗpOVm&p1${/T95+ߗdRH~Hoq#Ǒi d|[[ci&pH92eE2AH&Ě*Rdc?NAhKIQoɤb#Ʈc7?坅Y@$J$9!AdUs%`\6-Mpٱ,J̱z;x'嚾1zLn[)I>i3NvI n[9:[Y-~JLC\[iO֛ׄ QfKut;?\3]XrJ6iJZZѯ}xMqW9 LN&t8 G-O $$g fu[V{}=Z9\i6&TBkZ|Lut/o0'8/Hzv,}!:aBp#yfXce5i'zKJ&q%;qDx|R$G¤bgui괜#ssrԮr#Py@} 1_I.*.rf7def5gߒ2Ugoږm_D\SrRؒ h#g?Ǎ58.cUY敗{n^Y;oh<}BTs}멛6-z~ov W[XH3><wN9:#9"z8dCVӬ$k¬ k2g[|c/H&q~cɩ'{OrMrN=vb^^3>{dȺ+GȘE/IIFGqI=hk(Y擴5~|mvy/KÇ\eݩWY}S7]~(&t2řƽt8uH0I$1ꨔ> ME8VrX/u挕2$IR 9UvH,vtySR{֞[F~cˢ㜟%-5'b'degJGل|="'|$mC^n9*fgĐz[RL]Q/Ccڏ[jp F(y‰$Е7nD-DOFN ᚶ94I#Ίk yTuNw߉ӴǎSk[莝yy>nIEVsoߚc* 'pfn m a$*9͈[Zchg;k̴߮a'vuA`3m}HC˖˖^ލW* xU-:ܖ˵hsgf5ϰ#r 휻X;vl0{CK dRJCi޹)|yYxjmjY=E0u!oQoLǓ kd&&c:&j&.ot9>hXE&i;i7N=M[:ץIftg^d} Eן#yZ|x+v/֝{,9&Ęc T2HX YY ~,V 3]*K X[gC.iHxKmζ$1tiT+UT˜]=**#ҶmlL1Rh:m|LC-uByyNǼl|^sZ3uHP{?h#ߵj[Nh['߂1rW!vf*6yX&r$}]B&ǖy^!aDڜ Ӕo@JK?^ |qXqIÝ;RA˚ w{lң^֫w^mS*Z -uI5Nv6^n=7 Y YbZǨ'wd9~M&XWDUbZ'>*2.Gˮ15N/*?}}{\?m-}?yfēsکeF䃤t)aғd2d+m"ؐe7'QA+%9O@lA5?s9a+T6Ńıv Ny aĨ. 숙X( "FOpx[r GXe9]sY5Zɥv쁱Zu-F0|s0a!6Ԭ ufmMP;qAi}Zՠί*(WsK=@]P8v^5 ڙjiBuNUMyZTW_jժuU8WUSV=RjjꪹUVl5PUU4pds+fk錪ƅlfUc DRl^uiZ7q#ښHbn jWUj,M8YK+)PY-\ BqYꌪƆҹkvnY;FQΨyCQʪKsK+8a"L'7TVTԗV ueU|z(k{D`y8pal A(gBiogeAUCEZZ_-2)<`ۈϝwWV#N]׵z!FpQQ=wՓpe>'x,adSGnzO"=z0y*'oPD:>S$x (̕gs@@axqKOdq6q cJHF$T"A? .t,+D?'.: хZCåBH],}!]ʘ>stS1R/b:H:YIU` ό! H>Kk%n/Vbz~Z}JJl@]p;[ĢjP.yI*Q.\bߍwĺ|g.Z21dR/dbK&BJ&6dɤ~5Ο;]:낪#TG,\:bՑzA:R?Kuĝu@>쬅) vG=‡g` P)VsvzzA+46Fʈ2 ^Q(JF㳄5G-"AH')*҅8*%xWPy=KFHvT'SmDJKӅМtq'ъ.#vD*b»aZTC.6OD|>˪zA cɸ».9 6WDȰLLrK| 7 R8*qe´^\ C\ǺtVv6i^Cɮ[υh mw;vh{Gd ^)t}-.Y)E+xjkCłJatj\ w~#t >2|kxK5 !`jpua Z]e\r$WXugPՊ{\|LDA+zh+aÈQ6D8F@ؑS.ssYae>`)4t?r/U߈36?7; m = 3"guGYLۍs^.( 4 )I[uORW!4U-P_?cеS{'[&d䖽V>U*t7P nJ{Y"֯1QPnB+ D,VRa)w~ys6P8 ÝOqi`jÆ~mxUZ 'wtF΂\] YRv_K։݆|Tzֿ^0_DLzjL߀ώL3.â:>;|$i`+ U˵+ET(W? _};} Wi%A448~Az÷<\c.W1PUg=xBJ@3p ab&]=US=&bMo| 4Q= \o| J8gsV4bP P!*X+w',1$N{ Djr). (Ib;q^/M('54JQ%> Nh?{} in^A/^`?vW7 o/oioh>x4u7R^u+W^?_W/!Iy9pԮ! K^#Eb>ar8.I94~w0A]LpLx>  ֠wBXWg9O=~ws܅z+V|7 ~ܮm|_ݚ|O[ܢwJm n`e: Vhp[}L nP A`|S@@WtAG\ )%X[[- \Ɋk54SҜ 0ZE\Wipʕ\oWdB `yz4ĥ$<]qtMWơԦCfA$:v(s`vM*ʙIJe2L>(/)Pfʌ>(E85~M`T2-Za&k0) D0~2!ƏKRq̪Kq+%q$Kʥ#PpId>(HW &7\JedP!? .C( KJnCSV AVdOW2ax|2<œqaasa+ ρ4 RR ! H nٕD'`[)[qq%Ŧ@JY9ef b40)L1i0P wIf/B@@wQ-?c#_5__&¹ endstream endobj 116 0 obj 9503 endobj 117 0 obj <> endobj 118 0 obj <> stream x]n0 yCEB)Bh841Q~q6ig닝ϵՍw+zdu5 5EYtc͟M[+##g;CX I H򏔏K L\"_Cj?rǁw?͐&I(q?+_Oxa/Ū}ͣa endstream endobj 119 0 obj <> endobj 120 0 obj <> stream xTJwH7  t#tCwwII#)) RҢt J߽z˵ϮPU]"coyښ'#:bԄ89ChH:AL\oE |0''?NqgW+=@AENJ Q ji"O -zc1d!v'濡ߑ;YBڔ`rqq-""g ; - RP'KORacgnjgautKOa,!.n07/xYoK ؙz;;,L`_ pqrz_a@s b cC,^+8A=zbv0?&?JH{Av N}O&9Ǧ=@o_ `_m*ۻ@ _mȸ`wW Tт &NGA5:uz@U.fV ;s jQw>O\+TAgbg~[9 ;x;W?v..] .0c87Ll @W;Z<@;W[?:2dG@@[61 ]ͬ\L(rs൶A,k/ v:ؚX0W?knL<@[] Ct818Y GX9ApruZsg t<@gOy<z~x0;_ y9 8)/h!\_m/;vpSc^8Oyy;k>ϒ(ݕ w5[J>0P>.57p@^gTtE~<խ\@5&6j'ހ'~>;Fw|:Y puz$:@\2\9ATѽ8CA\a&EpBs6gdW5A4^M9*4S|''^l8@{_q- g6mu 6 SHNw :zSz:iV]LntoF@r'  Nw`8u wg@ 4 0Z!|WMҮw'; 7w@@\}")=) jA]<@  jzCMlL/ &Nw‚| NX1mnjg@z?wp O,lAy,?@pNs Nl#No0N,d`;'ۀ9 r'8Cݠw'?QP78wؙUӇ !09w"S_ _k\P΍V{fp W;i%;7K=u]c gPSw]M_K  '?05Wn 翢wZܑK"̃[ؚ8W;&sW{p3`<@s{{P0a݁ނpzlt_ǚw(  g0_="Yft8U'&vw|w~_'%I}u\9`.\\w=,qߕܳsWrwzп{n  }௝~=, u=3|w 3%pxtWtA9;{#{i3W'. x% fX.!D'fbݜKպǜOt4VN )6ajȎߪE@NfDjP?>d 1`N#ƶ#S^=S0J!B.'&v5)qАȴ>}Mf:KF2j8CxJ+OzlQ4 @1evȗ3ׯlBo*?4B) 6s<;EiI5g쇸n2E@ͷkP/ .&粸,!5z5ք)>ȡ̜5eiM iN̳P8Eͭy"@,6Kۇ$ ژO"NBa'RͥYϴBxL<W B 3ʤWUٌ8}VaaKlY#zjh~Nfk|LJ:"S^xx1hn`0fF x7:B_~M7)) $H >QV\(&~AI}aSɊ/) Zސ\B4 0U[bjѴim N&vًQg5rm5o{Nsj[\H?^7z:Wz6-X&BbyN<UΉuI ꪳ/]t-<j󶴰׃oU,&{0 Cnmb,&q'G:H =zG[jHM lHB^n/-,BSӖx f{Cx;iT_L?)!@u !{"*M}#Ss 䴢(^,ԭXTsZhLǤ@|&wzBwh/Rțty$xYzMYھEKd s|gCg+{6I]+k?=9f^mKsy;^R:9o;_3a\hi7!e 84סD"K%Jzɣ/,U](Hoƨ<*2£/ _Ê oHlO,mIc9x@DYأWgH1lb\5kY̥DX0L/0lG|d- %hXhHAŦ͐P0a a;ZD55jF[Yh+ X.FTH|hꊩN誊q[ 5ErA^X7O{kkP%Sb[=s 2J. ;ȿ {@Vĵv̫҂ ⥖qdB.jy0Iޣq>2,f̟F}:kCì09ku@hQȹǣm_ždlSÖB2X]x%V4X䏙R-/r}%u.=|TCLϤ[AEYC.ɔG g iZ=\+9o"`USk՛"L73eX?Ec.RrmRh'[-/Z0s~qNNlQY<`ȡ2̜~"= JQW}caxqm/96@NH4H,V*kS黍aq}qu/gio6O{JU/D3{ϒhY;mŢL[1|ybp!! `T5qIdc&%3ѱ nW.xͩSz3F\WNȮ:A.OzE ٌ}p~ UwwU&p׼]ƣ+ӯ}>BOl]v_ɕ[BUӸ@]΍F8g#OWuI550+i6;=WZ %of1Z]r5-C/襠tVf PN.ǧ.TכQzcX(<=i ̧zcWu0aRr"HW}=Gl43J y5Z=thA9)lA_yQ ~* `ٓn5Mm.~͈P|RX*ԓ#Sq)@Q&1Zi!GFFꂽ9~{7͝5V{UEG"q6<<ن.|J,QO7=';S^;`vr6MKe.r-i.xqB3ݖkC'g>g=!XPaW `YXp "(dFEЊ MaTҙp]8¯ 9zvt!Sωiu; 34t-@lm6\z*FNbzkΛc ᧶] ,Wv*~&h9}j1h8Q!d7PLh#a;8,%>'iJiW{ڇ/b:4[I[CC}ݬ4x5b^^K:.'c3?F7y32x=Bp^6 $R;$pROG:n|sHSA(^?*%.' ^<9оAX[J2X,{?HOXyYVs%}#*5eV앋S[D!wAE~N8j[TYA2j3raڽuV@L(@F!=^p(.;z(ijYՉ2rUS4+P6`֟I8+Cpۼ({ݭms%s&uS" V^Ny̮t0ay"RJsxۃQhӴ ZqccRZ:"ov",M"s'TŔi27eب`YV!~ΈU5tfMDRUxu7T0p2C-/]Q2OUև#V >Q=Hl.?iL 58:ԠAIH¢3!e١ڄ2-8ΚF&n$g%d&[_zs5h4\+? 9Zrg\ 8̻!֛/hI,~ f}!}xXnTWly+Z.Rt'1,yPuN±5+\aED# ȮzMMD*FXIr6-:$? qP_c@et(h`!9uuaa56$MjEvX&ʢ )mTF:mWCPąp͌u)M4!@D uS# QH/w*xbܢYqb=]!ܒw-îZQAҔ㗭hT&r\Ic*0ufs y6Cua㕨 O4>n(f7fgUKH) uu0CzaTyK M5kX"n`v&YYKWH^= eH,?񏮼C~@GZm.}. o԰SRڶ}4hvY˙5\^ p[ pǟ*7wl"?/`Bi sYJX%\9'+J\G#ܨxKu*i; oTIY "kܢsoi;XWAjGn?:>Zn9#?P!3P<G^>(di=1hs?QӀE1Š~0ǂoB3,@Ak{AjkWڊW-lM(hOz8"_{s<CVpE"ic:0mHR6.yJ<$@ -'cy{_]"66yH9)8d~i[' u-mx땮5kOlJ>u)StOsZ{X&&uVsԞbe%{u\G o^xҎZ}n.R+ft"˘|ehhDQ NSJ($Iq7A `3%<8!\JCVaڡcl5ۧ)bZ$gS7ÈIf} f#u `5s[g|Y"dji'ud!",15ѻكr6IƗj%!˷7zţ":,ϮhJ( }/ 䛥F*ioұNzefSdtdk%}"--j;;@׹Qi)vYCoVc/vq3;yʬdsKq2,ek?CCW*ș,}2{^FM`q_>.' CQկڑdNv 2o0\DR孷.D[.&$u ܓcePqWuY 3l:\U:z/imkdΠ6.ctY'wgII85I AT[bay*T㊍ZGf륯0g|7}]//! +qY9#UQLU'D_[!/#n.I2FW_[t-(uªm-.&/-}L$Ey-kZULI[\'WU N+kH^t~k01D]*'`k} )(gWQ(KX;adaOCW)b:XY7Ml0,ChU8g]/Z sɘ_v,Ӏ>+Rg1]>Ɔ2eQQ^,72FϤjQNܫ!H^fzڷlִHqA8콨PG9PtkV:hb!w@24=wm2\feb+AsH@emŐ:jJL"qJޒmQRw3UGB Ux/;w872)7~@ [WYkZ]9EDTdz2sF>աQM{}7HSa=DIyQmz꿼3ʱ/Wq6JUCUf̞\ꓐxR\ctJMՆ>-ۍ4 in,᮲>i>1vR_Xџv0T7K8Om=֪<jwB/0lj~ʕ XG0ľ6=|oQ7Ha䭥y,rJ٥7ivuEH^'$씌B\ .MB#-FTŤu7˱ K=[] J=>69Lo=JqB7a.^"[ Z2ej i\xStq)4"AC:ɑy^M¡=f $0P#u[SκǦ'ƂX3_LpObO2ݭŨu:'5eUM>Y#lL~9g{q>m?H*dI|ItzZ潖4̚uҝ:'(<I_Xq"|3cYppߐA -ׅs9)]vlĵO7_};uiGM;I+BtHDdn1l+wվјP9ڲ!+aw덅aMUfYO~AM PC0O'Yk "%/=#Fu%{I<ܾCukQ+{Ek6"06TIYӂ[i$QF+XTݳ (CHumuC&=_C"[2烎P4ģO0ݩ/ J7Uj|8ê Df6YT$  O:U?'lw*nT*E/EE׈!F>25hG2"NB#4iџ,`֣̓&Ƈ' o "sCp;||#}ĦH.5ɬAiDRۖ52=ڎhս]Y2E^[F2O'W~v$mG@?~qi2~\B#i+T$SL.&GT;e?-4 ϫP/kdo~f+͸h=WA4"+zM|uRB^􃦆̈j3zgo统bk".p==I>];yn%ۈ jo npux*x(գ9c a!om$#%FqD/1,`o?_Tƚ=}VdK]>l(ֆ'%2,F]#5u Aq829*\ʔw쯁IY|VE ^"Ncin71ol)7WlƖLqH,o{gEdy`g ]< a$_dV;+1u0_B%Sl_ڌ:q}5QXSܴo9SaZGg:80}UժoIM$F -W( G4[i9EKeXH}+x]>Mn!)U$tXP15rPLo(wiYɓyr-1ު-!au=LP\AvDM=c;$كa5\ލ8E*gإIU[M"Ci5LwiJiM:  i3XS]ɨ1'mydger-1;$B%~Y6+ԡOt>BaE${Ԓn[~-H/g(nt\0N[njo|"UQOV^RHL%٧WY|+qo:[ '"IvA7ƉSu |yn˗#xfiin:?ًpA܍ss$R)|iqD)Q$ŮV to]vz7xDfLcJRin$;DW=>:p`-LKsg0[֩ q u{=OU1WWh^]k (|:Q%XicL1Ća(W#qx R,? R`uw?.[-p6D,lJLYO UIPz'o"ARj|GLͩV4|Ϊ'a]܉ŮM]=7I52܃ X螮&ÍFj*9/"O:pݧ\2'$#,rꝧ>-KCy\>-F*,+_\,d6urz2:>,ay2" L Vfn D՗#QD<Ѩg]퍩ć~ꡁ BՠьQ=8+9*D7\ (%g+k7Dij Xi1~T~lmD;}|dMi;>0Už(A@;s]{FD Z)۸_y< R#~*ǯh~Pꕥ.8(\fs-+JCè"0o^ݨMk<!?z_8M|W3xU/0=¡O}J}`D-A&Me/C)tV}N y+ڍ(tTiHOz[Z)I q Lk?ͮcTCwJ&&uafe\5_,P4@*YDmR?}k+{0j7+e%YW~ h7V jio*H/]AL& Q\tdJN+WUBnRmpyք,9Gnˀ] KǠӃ8q͛GaC +H[($r-ۈ $Z0Xn&6V1̓'nڪUyPsL&x3KWTBGFՏMy<绍 ]ƈ7O>6ʕ%[, "'\=5OK*yv \%uecA%D&N0._?۟ %`&տKu|Vlݿr1u쓲ceǫ;9;oН:Tkrd~b)Q[=U}8M++E|#6H*ChT }hy| k rGm/=_[d}Ԥ՗skFGc}Tؐ٤ra7!`g4Ĵ~H(IlzF2kU zUr3k@O(#@U ED_u:Iٜ\YBUD`^dO8gJ 3^Anu sBB+6 RtSaX~5X\\C&b Mю$F .z~:HO.8 t,(b ̙%4Zۣ矹jPM;aYWM@d|eQYM aNG|B@rxz*՚+INhk g@KL9Csnԙkln̔3M #{QOɛ̌rxrRLOZ17FQSYcf视Gl6~Ebed 1!6-0YvժKla ~gΫ xf!ѯQw6M@ҹN=t@VJ]B`m} .=ԌS٬e(uz lj}E;DN0k(/I߉D䙘Y4~_ z:h2*Q'0E^/;F 7}.ftr{`$!~~R º򁋁U}th ltϭvq+I:1)#YDݹɍ<p ̘לْ56(c/2\Zߎ)I7j9Ts89vDRmvʡN:Q_Fhl*p<܉Nd-U|L$Q3Yx$6l_Կ-tJE~& KygYo7/ol[Dh95.>[ †YѬ g*@s=YJO|`5tPq?UN$9ڵ5hb! ̮Azj%O_aHd"[:*Kt4⇆Pb.>xG;>`N3WTL:BWg8aT*v|r= )>c9G! 'V њT0Rc/6ҟR(Ao e2wP_sf>g F盽:C!ЋǔP}̝%.2ҥq6ee35a&_ }ڼ']gpmM{VGyC7Nzl2bƴ4 䯩{ TIk)Bjϟœ\^E:أObpe&- #YT~uuWǣ=,1qmFYA@7߄XqŷvTtޢ\[$7y/ʼo0R +"%s~:2 awEcU>W/IO7gdFk!l>l&~>̎܁ ?ϱQhR敕;=o{t?#5 ڛ!%jٹAR-0[ @ZS>Ĉ#Ujq w&E!£a,JcU?"';%SS W7v`_b)+T)3W|))D@&ơ)Tl OӘtgxOL4uuR>m,-R6ЍYHJgڠ}ȡ!^u$NU ö!iZ&w^=AGi)|௢D4RaH5uuaމÈCR)'r;*VXaփEy!ElQ -U.>*2+a*2{ >gh=IT 4H? D0j~e3VaȶUx4ɕXn&S8/ѼdND(0-yw|]3q9$=Tg3_m4,_94蟃nTJ/0J"FwV&<;aP'ߋdLx>=iAL5𚁻l!nc GDs$F"^|z3U?@&[;nX\Vj)(D8I7gn6gv] 1k7-1qr 2Kq -9VHX|ھOj\R*K ݻ[Ӑ<=q5Uj 9:1LP+!Km#+)4)IàiJ^&0kOݜf~g6g "|Y䈸}w4%5unO4V31R2_)zO:9X^:dVZ"`;H.$ag{0m*-r#^ΌP<Tc8+e?@zO/y,t oOjkPXyHn:5L^}= :}VL*X?Dr]ԈshDkk|\W!5/5K5܊2 jkpAAUSUsA PeO>ꖕ]t0BA%Piha'fAJeHiFaΤ^{IԴu(Pb&QYqDٚ{6r&P9n>EjѮBca㙙 Ўs%0tY$Q"$Lt1Ԓck;,>dGT'N_gs!R8y:%1 ѳ~7y.9k2רw OU@0.BN#p[~9{ׯ`]]CY##u³ZԉhW)zLЋC't p17C>\HJ%8=J'cfs^ȶ%J)]їQuG6dIydI}a%o#˻d.KodnqܝJؼ"qif9FRķloxlEF"A_ᴜckSMh!L0qf&"SY1YG9Grmu5y⸈l[B%r'%؊` u2H`(Ux4(AoI݁z>drrlL 6Bw<3o>İW>'TfE_bcrHcR18<Xx4{lk}i^$N_U!S~@E35<2i9?L 1OFr t1՞O4Ee8/ku!ݼT;4ekDp\k9ՐC! ߒͤ`[:U4ҁ?B<-'ץTLbdV z{ς$c?U]$2s,a;wMrE1K :{ k qtH%k,0-t:p)tOrZ9S M+YKTe;A(gZx/ =[>$ zNo]q">uz\2wqAF*ԍN蠓d!ae9C{ֲR/uq#ɞ7VgNqiQz7Lf$URa2 A<>fΊIRKwMj4cl0m3WS=K% L ELJ0N]S1#QȲzNF y=zmgVLWܒ~RTrgpG؋f3QZKSI }c|-F/jD^a*jI|Zvp& [#հů[ NS$j! S r7ҵ)7P4C4nF3t&C+QrD>لxպ?'GAJhy6:U-bl9Lehx4 :of!ݸDm~Y~a6йgP(5ƆM:AdJDv M 4s $! [/XIiP>u<`jɯՅDSfTk9ȋH#6O 3r@Jx!ɡ"0v~_!r>ᓺ6Fu}ʊoWbrdUuFAXq]|ԍzDkDzg`Wj2]ýIvV&~?y?cF|si>jo5Ft] 5 3S5XI?] p0C`ͫ=vd+ˌAIO.zϷSck2#',DD,c,ɕA28A6BE@|a- Ёx 'gH3eP+ufX0K[`2 kLcke/Wy|XΆ>HF+w<5  BOZ n5H@Ĩo lݜ_j釗.N?'c8 ?!~'v@J9}[P*j.$#촨uc < 'rۗ;ϻG- I>-7FzrlkY/K%@R{wn-ᫎnG&6A,mUYf0&KM"mlCR(~Tvt!. ԋKR7P._t1gG$m$/L&cAP!j(';_'"=wZ 4;"3y7U;#pv \e2t@V !-N)wO=$VAx3g]4;+~o ͤxT@Rc,LF͉ioq#OhX{(Z+#Լ~eW Ib,F*Cَ.lpjBVh0h 08n߀u ^ &_|]3o]8f g|gCt1;:V.+v8;F4mn 1\2^#n@MK2 ^vt4Bo"NPwkrn%\]3L|6N= Y?VW%]L*Wr)׻in~fbEYIW{ n ?~@]L"ʡ7j$&S7mPm)0`|.PMzZHy,A. v Aeo}(3\V.h.&8'99e#B&D,JŖĀ| ̧l]2l9AƊ஗/-Zw[Ttrq- 2H') LRHUczϰBF #3 3JDеqYlrK1ޥ 3 A-؎Ix\r/k0^YR)t.D,{኎)wҼ2fJvSqIIkt"+BR1D yҷfd}N"rx,w棺A)gͻk Oɟl{5k:be„B ? N6u NG1̛ZG?O\5s)5@T~F!&S;I&d$Őp6G"^RbϦpO*NJH;aPPopBq0n.";r.9qAp]* ^1~i!"Z ԁDYֳfCaFjJPY] 3"RyAlEC`AB.aq1}4 2JP&VIPPh/ELJ3hjS59PF;DhtEU C0:K\_%e#j(uZG(*"Ղ M̽"^qK?pP8֨caAVٱbu#W"r':HG(EetG(ł:$*}R/D;i}( k͜Ō"[N_nB'"sp~ji4^%znL0{^4 ~8Q',~۹Jo]$E)Ey|WTvJ# =eb;׉}ގ6}r+C2? -di ĝ,y8AKrs&zhjI%FVB>yJ9Jm'ɽUoZG=L-& d&t}Q_o"s.(gǫ$1 g"7;L{{nW)n($㉶,N:8\ӸPL 2 8гcy1mOOmp=!/gG~+ OLH10w j]-R9.<5 t?`B8ieBkꞈD:;^Պ{`VHoq5XcHU pz)i3P-X4&(&QSNِTl ."i~ n_$'کq}l(Nɖt 3/V}i/.im-9a~pR4 p VhS\P ɊkKR&PjkY`Sch#&Ш]Xmd]RD|9đO +y lIc JC* Si2RREL@('rbTyQ#2{s|Bɹ}Tb]Lq:n4S{, Z<=&C01Rl Z"7Jf>JF_hBvC\߶8HᑃKBgj--97cyιoakE )@KV$nr 2|БZb{;r[s咗M w0L mO,Ү~-ƙEL"aa8 /J:ɰ~O(%N=еY [`4Ftnoגv<[&G} r%21H`!v)lL} #pT$ Lc{}"eMZl{Wn + 4%rVN绥oΒ_ ng/~*&_YPPqc`FH\Q,Qt$eT^kGgq*Rc"{9*%:Eɍ%b) Fom?{6$@ ;PZMm1]Da+v#D*ԲdO-3 *u. ͥ k1. d5RDAIAV- Mo/ᤏÿ9tSX~ Z\jdqbe~b8QQ飼%2L:O9lJ+ PbQ;hHT«`r}h~7Yf!0OK.J$ڔ{>>lęK#\E֢+<EkpM5,5yvT˗!WzA"Jʙ30̅2=Iٿ {OơNV~//tdt;"Gx59Tx#䭉."it_+2v`. BHQ0\' 3-)~hJws%l/6_GԘq1xb)[t]ަ0:yKǖ ^G{R>\oAm6YDL `?&s G*]ѐO̸ E~}v1],ٶFEcBa':MXWp0Ԯ~N w b|VSaנY$dq|%0nL`'a(vcYtIm.-8mbV,sGz?"ډhVS~PPHHm u>%o|;a/hysCʆ ](o5]nGL\ЇQY#9 nʕWg==1LoJI ay=5QXƪJi׸0Yܽl_Ӝ(e[լD-D/1}?Nj!nS! 9_E6/# &=[\Yp1!Rp{i>F>3Ag [e6ѺWX=b\R|Q  ~?"BZ,bEx|Cz8&pL\aHkq|ԧf7n W&"痁obV]!5E>EWJߙ{ OJjAE-Ogtr\6?pS7mH]4 BTYWO`X_VBьXeJ5 W? [)|bbβhHSqf Nm`!/RO 0wj.Y/>n2&s?oys :CKIhX(PfƌWXNBn?ho#5|m^z`CܽʕeE\bysG }QAxvf,@'? auW4zWGW(b,Q 8ߦ 0eRPppP 빨)% ǃK .]BD kbh!@j ^,~Cl#Նr )]E{7,nwlݍ,Lmiv,%8}xu/U%BR#^|wʻ4Cz5d? bV#sveQx RP,̕=( <=ҁϵwfq?-ݹ0uX+h̞= s~vꤗGq~[#jTɀI7Xo?UO5d]"iWbqXV)'ϐD=T6v\h!z.JG YlkJ~ ?NS)u+[Elΐ#eSe5̿ .ZYϣEɭJ-FOճ9\?yy yz%]U_31y<F 9 c2|F,t.B' &,P]MoΝh` RQg;d '0L9>8HS쨜>}ʳtCܙXՖFy" =N/+lxgwi \@!*6 XN˒E1$AqgnAi6$faz=:;jR Tت1pYpų)¼D^PgSO\ Nst mp|yXQ…`Ә50L` s/AS1Ԥ3bjF/MGjI"V tü˝X:D*TfusϑU׿a]z@F%R`h725qHi W>rfkFeLiZ:P^E^`{Cmr gXrT3WN1qOLx⏁vj8Xh!8!<Ǜid >kN`~Lf",#^YKl=M$vemj)HSo0UAx_7“z.&fe|8>$a!̖'b-8LTnhճW2 %a'0f8d?M2J/hťh"bOuéogCe̡.NV;ǔXג\g\Sd֋[N{~˦gIH GYs)L=vi#Y,!R/sSmt𻂅"FQ(v{kh%crQ0}K+r׮TE پ՞E@aIuSX,GL瀁u' .5N@3tw)u(i ’vjKf-8rȔ>zTy5O Dpk },5c3aפ!3j<3Pi{Y% nVʋ% 7M+Q9pĄ7ΟXGwVJL(3WH)~rAL+ vdeT1Sj醨C6 ز,dZTTg2[l#Me-f*6FUg!b C.Aօǎ џ}uVˤ%CR[p`WM,ϙlބ}/ϬvF($VoŴ ̕{d6]t|:@@Q1`6+CN}{U᠐^Ol^)U N> '=3h_j爿v&?bZ4AG[ mlxJ2q"Gn9ŝ7jmcRS0 KF S6ƏNEEp$$gTG9bboL5(X`kE&`*/1~p\%P&28 K bÍ-JA7-Ew[j0z2$b]*GFyt(܊^k~DD)WZ21O&њc,6+~f+C . IT2Ā⪽jփ@q8u~Q)nؐC$}VԢ5u0z:ܧYwcM!w7PkPk^ϲMRP;6(.D*ތyxVagJMwQ"w[<@=/i'~K.^0){U4 H"BR1شPgmdo8e[#:A_ӾҷnCk.-LCcuEC'zԜEGAA9ʢkoDjj‹`soYOU4'H^S鹂9UPa$ܙ#= @2g +m˔q4KmŜHق{֟MG-d& \(;S:̈' -kwW 7=I,_1・e~fϼ- t~#Y>q¶w+፺.>N֑N0~uӗ +F?̷%Lkܞ?o8>F ނ;kpWoPmj U 82A}u!Ssjc@3>/ȆC*VijFϑAX+&67v]v6$Ή|r`X\]Z-6( pD73kc4, l|r=K[ 2 *]L4涡? VbҜ }pj\^=MrOLجȖC ]tj^i Vla~Bmm˂a=$N|_ agy]~%k vѻ11Z;Yy.\I={̜-U@ =+ۥ} U8hU\q+]-K}ihRWu~YyW( ε'bީPÊv#JuBIpQnc/{8U*-47MZ6q{/u}G~ dM壇:gݫu/PzȢ>3X( H~8go'qtR#FaB(;|kg(]4-u[b99n13RҧȚHymxj TRzy9>gJ mpO%`4yveiNj) '䵤c-۽`Ou4  B9%h;No(KKJ<+%X=7C&Ţ&#{,΁Um.eaeu'%mY4?V*t[7>+е׃/ q_5blBHSX[U۝ F=oknUfl%O`YE !lWdٱ("ONur)jVvH3rک_8 grvPuY%/:9U /,w?iLe?,fS.,=r:Gq8 ?8WsꭀEG_7Z͛sэ YtdXO l6tŒ-I+[, ?\iPqQِj hbLs5غt=s`ܡ:in 9-6w SnSD-k`JLzj5=Ntӭ m]YniRq9YɶLRٗ6|av__63o89-܍keG}u4{Vv4`‘$ }*Vë;N* ^RS'|\X`k$ ][c"gG* U ~|̥~_//WU_> endobj 125 0 obj <> endobj 126 0 obj <> /ProcSet[/PDF/Text/ImageC/ImageI/ImageB] >> endobj 1 0 obj <>/Contents 2 0 R>> endobj 4 0 obj <>/Contents 5 0 R>> endobj 7 0 obj <>/Contents 8 0 R>> endobj 10 0 obj <>/Contents 11 0 R>> endobj 14 0 obj <>/Contents 15 0 R>> endobj 17 0 obj <>/Contents 18 0 R>> endobj 21 0 obj <>/Contents 22 0 R>> endobj 24 0 obj <>/Contents 25 0 R>> endobj 27 0 obj <>/Contents 28 0 R>> endobj 30 0 obj <>/Contents 31 0 R>> endobj 33 0 obj <>/Contents 34 0 R>> endobj 36 0 obj <>/Contents 37 0 R>> endobj 39 0 obj <>/Contents 40 0 R>> endobj 42 0 obj <>/Contents 43 0 R>> endobj 45 0 obj <>/Contents 46 0 R>> endobj 48 0 obj <>/Contents 49 0 R>> endobj 51 0 obj <>/Contents 52 0 R>> endobj 54 0 obj <>/Contents 55 0 R>> endobj 57 0 obj <>/Contents 58 0 R>> endobj 60 0 obj <>/Contents 61 0 R>> endobj 63 0 obj <>/Contents 64 0 R>> endobj 66 0 obj <>/Contents 67 0 R>> endobj 69 0 obj <>/Contents 70 0 R>> endobj 72 0 obj <>/Contents 73 0 R>> endobj 75 0 obj <>/Contents 76 0 R>> endobj 78 0 obj <>/Contents 79 0 R>> endobj 81 0 obj <>/Contents 82 0 R>> endobj 84 0 obj <>/Contents 85 0 R>> endobj 87 0 obj <>/Contents 88 0 R>> endobj 90 0 obj <>/Contents 91 0 R>> endobj 127 0 obj <> endobj 128 0 obj < /Dest[1 0 R/XYZ 74.7 697.1 0]/Parent 127 0 R/Next 129 0 R>> endobj 129 0 obj < /Dest[4 0 R/XYZ 74.7 537.2 0]/Parent 127 0 R/Prev 128 0 R/Next 130 0 R>> endobj 130 0 obj < /Dest[7 0 R/XYZ 74.7 785.3 0]/Parent 127 0 R/Prev 129 0 R/Next 135 0 R>> endobj 131 0 obj < /Dest[7 0 R/XYZ 74.7 558.4 0]/Parent 130 0 R/Next 132 0 R>> endobj 132 0 obj < /Dest[7 0 R/XYZ 74.7 321.4 0]/Parent 130 0 R/Prev 131 0 R/Next 133 0 R>> endobj 133 0 obj < /Dest[10 0 R/XYZ 74.7 427.9 0]/Parent 130 0 R/Prev 132 0 R/Next 134 0 R>> endobj 134 0 obj < /Dest[10 0 R/XYZ 74.7 190.9 0]/Parent 130 0 R/Prev 133 0 R>> endobj 135 0 obj < /Dest[17 0 R/XYZ 74.7 697.1 0]/Parent 127 0 R/Prev 130 0 R/Next 136 0 R>> endobj 136 0 obj < /Dest[21 0 R/XYZ 74.7 511.2 0]/Parent 127 0 R/Prev 135 0 R/Next 137 0 R>> endobj 137 0 obj < /Dest[24 0 R/XYZ 74.7 747.3 0]/Parent 127 0 R/Prev 136 0 R/Next 142 0 R>> endobj 138 0 obj < /Dest[24 0 R/XYZ 74.7 520.4 0]/Parent 137 0 R/Next 139 0 R>> endobj 139 0 obj < /Dest[24 0 R/XYZ 74.7 283.4 0]/Parent 137 0 R/Prev 138 0 R/Next 140 0 R>> endobj 140 0 obj < /Dest[27 0 R/XYZ 74.7 402 0]/Parent 137 0 R/Prev 139 0 R/Next 141 0 R>> endobj 141 0 obj < /Dest[27 0 R/XYZ 74.7 165 0]/Parent 137 0 R/Prev 140 0 R>> endobj 142 0 obj < /Dest[33 0 R/XYZ 74.7 697.1 0]/Parent 127 0 R/Prev 137 0 R/Next 143 0 R>> endobj 143 0 obj < /Dest[36 0 R/XYZ 74.7 537.2 0]/Parent 127 0 R/Prev 142 0 R/Next 144 0 R>> endobj 144 0 obj < /Dest[39 0 R/XYZ 74.7 785.3 0]/Parent 127 0 R/Prev 143 0 R/Next 149 0 R>> endobj 145 0 obj < /Dest[39 0 R/XYZ 74.7 558.4 0]/Parent 144 0 R/Next 146 0 R>> endobj 146 0 obj < /Dest[39 0 R/XYZ 74.7 321.4 0]/Parent 144 0 R/Prev 145 0 R/Next 147 0 R>> endobj 147 0 obj < /Dest[42 0 R/XYZ 74.7 427.9 0]/Parent 144 0 R/Prev 146 0 R/Next 148 0 R>> endobj 148 0 obj < /Dest[42 0 R/XYZ 74.7 190.9 0]/Parent 144 0 R/Prev 147 0 R>> endobj 149 0 obj < /Dest[48 0 R/XYZ 74.7 697.1 0]/Parent 127 0 R/Prev 144 0 R/Next 150 0 R>> endobj 150 0 obj < /Dest[51 0 R/XYZ 74.7 511.2 0]/Parent 127 0 R/Prev 149 0 R/Next 151 0 R>> endobj 151 0 obj < /Dest[54 0 R/XYZ 74.7 747.3 0]/Parent 127 0 R/Prev 150 0 R/Next 156 0 R>> endobj 152 0 obj < /Dest[54 0 R/XYZ 74.7 520.4 0]/Parent 151 0 R/Next 153 0 R>> endobj 153 0 obj < /Dest[54 0 R/XYZ 74.7 283.4 0]/Parent 151 0 R/Prev 152 0 R/Next 154 0 R>> endobj 154 0 obj < /Dest[57 0 R/XYZ 74.7 402 0]/Parent 151 0 R/Prev 153 0 R/Next 155 0 R>> endobj 155 0 obj < /Dest[57 0 R/XYZ 74.7 165 0]/Parent 151 0 R/Prev 154 0 R>> endobj 156 0 obj < /Dest[63 0 R/XYZ 74.7 697.1 0]/Parent 127 0 R/Prev 151 0 R/Next 157 0 R>> endobj 157 0 obj < /Dest[66 0 R/XYZ 74.7 537.2 0]/Parent 127 0 R/Prev 156 0 R/Next 158 0 R>> endobj 158 0 obj < /Dest[69 0 R/XYZ 74.7 785.3 0]/Parent 127 0 R/Prev 157 0 R/Next 163 0 R>> endobj 159 0 obj < /Dest[69 0 R/XYZ 74.7 558.4 0]/Parent 158 0 R/Next 160 0 R>> endobj 160 0 obj < /Dest[69 0 R/XYZ 74.7 321.4 0]/Parent 158 0 R/Prev 159 0 R/Next 161 0 R>> endobj 161 0 obj < /Dest[72 0 R/XYZ 74.7 427.9 0]/Parent 158 0 R/Prev 160 0 R/Next 162 0 R>> endobj 162 0 obj < /Dest[72 0 R/XYZ 74.7 190.9 0]/Parent 158 0 R/Prev 161 0 R>> endobj 163 0 obj < /Dest[78 0 R/XYZ 74.7 697.1 0]/Parent 127 0 R/Prev 158 0 R/Next 164 0 R>> endobj 164 0 obj < /Dest[81 0 R/XYZ 74.7 537.2 0]/Parent 127 0 R/Prev 163 0 R/Next 165 0 R>> endobj 165 0 obj < /Dest[84 0 R/XYZ 74.7 785.3 0]/Parent 127 0 R/Prev 164 0 R>> endobj 166 0 obj < /Dest[84 0 R/XYZ 74.7 558.4 0]/Parent 165 0 R/Next 167 0 R>> endobj 167 0 obj < /Dest[84 0 R/XYZ 74.7 321.4 0]/Parent 165 0 R/Prev 166 0 R/Next 168 0 R>> endobj 168 0 obj < /Dest[87 0 R/XYZ 74.7 427.9 0]/Parent 165 0 R/Prev 167 0 R/Next 169 0 R>> endobj 169 0 obj < /Dest[87 0 R/XYZ 74.7 190.9 0]/Parent 165 0 R/Prev 168 0 R>> endobj 99 0 obj <> endobj 93 0 obj <> >> endobj 94 0 obj <> >> endobj 95 0 obj <> >> endobj 96 0 obj <> >> endobj 97 0 obj <> >> endobj 98 0 obj <> >> endobj 170 0 obj <> endobj 171 0 obj < /Producer /CreationDate(D:20170811232209+02'00')>> endobj xref 0 172 0000000000 65535 f 0001017088 00000 n 0000000019 00000 n 0000002806 00000 n 0001017251 00000 n 0000002827 00000 n 0000006544 00000 n 0001017396 00000 n 0000006565 00000 n 0000010276 00000 n 0001017541 00000 n 0000010297 00000 n 0000012337 00000 n 0000012359 00000 n 0001017688 00000 n 0000818759 00000 n 0000820107 00000 n 0001017835 00000 n 0000820129 00000 n 0000823041 00000 n 0000823063 00000 n 0001018000 00000 n 0000873985 00000 n 0000877706 00000 n 0001018147 00000 n 0000877728 00000 n 0000881447 00000 n 0001018294 00000 n 0000881469 00000 n 0000883509 00000 n 0001018441 00000 n 0000883531 00000 n 0000884879 00000 n 0001018588 00000 n 0000884901 00000 n 0000887690 00000 n 0001018753 00000 n 0000887712 00000 n 0000891431 00000 n 0001018900 00000 n 0000891453 00000 n 0000895166 00000 n 0001019047 00000 n 0000895188 00000 n 0000897228 00000 n 0001019194 00000 n 0000897250 00000 n 0000898598 00000 n 0001019341 00000 n 0000898620 00000 n 0000901532 00000 n 0001019506 00000 n 0000901554 00000 n 0000905275 00000 n 0001019653 00000 n 0000905297 00000 n 0000909016 00000 n 0001019800 00000 n 0000909038 00000 n 0000911078 00000 n 0001019947 00000 n 0000911100 00000 n 0000912448 00000 n 0001020094 00000 n 0000912470 00000 n 0000915259 00000 n 0001020259 00000 n 0000915281 00000 n 0000919000 00000 n 0001020406 00000 n 0000919022 00000 n 0000922735 00000 n 0001020553 00000 n 0000922757 00000 n 0000924797 00000 n 0001020700 00000 n 0000924819 00000 n 0000926167 00000 n 0001020847 00000 n 0000926189 00000 n 0000928978 00000 n 0001021012 00000 n 0000929000 00000 n 0000932719 00000 n 0001021159 00000 n 0000932741 00000 n 0000936454 00000 n 0001021306 00000 n 0000936476 00000 n 0000938516 00000 n 0001021453 00000 n 0000938538 00000 n 0000939886 00000 n 0001037278 00000 n 0001037434 00000 n 0001037590 00000 n 0001037746 00000 n 0001037902 00000 n 0001038058 00000 n 0001036975 00000 n 0000939908 00000 n 0000947314 00000 n 0000947337 00000 n 0000947535 00000 n 0000947902 00000 n 0000948131 00000 n 0000959742 00000 n 0000959766 00000 n 0000959963 00000 n 0000960461 00000 n 0000960798 00000 n 0000968411 00000 n 0000968434 00000 n 0000968639 00000 n 0000969050 00000 n 0000969324 00000 n 0000978916 00000 n 0000978939 00000 n 0000979141 00000 n 0000979544 00000 n 0000979807 00000 n 0001014641 00000 n 0001014665 00000 n 0001014850 00000 n 0001015916 00000 n 0001016894 00000 n 0001016973 00000 n 0001021600 00000 n 0001021660 00000 n 0001022077 00000 n 0001022411 00000 n 0001022777 00000 n 0001023166 00000 n 0001023488 00000 n 0001023891 00000 n 0001024201 00000 n 0001024632 00000 n 0001024967 00000 n 0001025334 00000 n 0001025724 00000 n 0001026047 00000 n 0001026448 00000 n 0001026756 00000 n 0001027187 00000 n 0001027522 00000 n 0001027889 00000 n 0001028279 00000 n 0001028602 00000 n 0001029005 00000 n 0001029315 00000 n 0001029746 00000 n 0001030081 00000 n 0001030448 00000 n 0001030838 00000 n 0001031161 00000 n 0001031562 00000 n 0001031870 00000 n 0001032301 00000 n 0001032636 00000 n 0001033003 00000 n 0001033393 00000 n 0001033716 00000 n 0001034119 00000 n 0001034429 00000 n 0001034860 00000 n 0001035195 00000 n 0001035549 00000 n 0001035939 00000 n 0001036262 00000 n 0001036665 00000 n 0001038214 00000 n 0001038331 00000 n trailer < <79A92E1D34F84EE145CEEC510418B227> ] /DocChecksum /BE7087345AA5039AF5A4689409BE444B >> startxref 1038507 %%EOF zip4j-2.9.1/src/test/resources/test-files/sample.pdf000066400000000000000000000054161414265447200224150ustar00rootroot00000000000000%PDF-1.3 % 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Count 2 /Kids [ 4 0 R 6 0 R ] >> endobj 4 0 obj << /Type /Page /Parent 3 0 R /Resources << /Font << /F1 9 0 R >> /ProcSet 8 0 R >> /MediaBox [0 0 612.0000 792.0000] /Contents 5 0 R >> endobj 5 0 obj << /Length 1074 >> stream 2 J BT 0 0 0 rg /F1 0027 Tf 57.3750 722.2800 Td ( A Simple PDF File ) Tj ET BT /F1 0010 Tf 69.2500 688.6080 Td ( This is a small demonstration .pdf file - ) Tj ET BT /F1 0010 Tf 69.2500 664.7040 Td ( just for use in the Virtual Mechanics tutorials. More text. And more ) Tj ET BT /F1 0010 Tf 69.2500 652.7520 Td ( text. And more text. And more text. And more text. ) Tj ET BT /F1 0010 Tf 69.2500 628.8480 Td ( And more text. And more text. And more text. And more text. And more ) Tj ET BT /F1 0010 Tf 69.2500 616.8960 Td ( text. And more text. Boring, zzzzz. And more text. And more text. And ) Tj ET BT /F1 0010 Tf 69.2500 604.9440 Td ( more text. And more text. And more text. And more text. And more text. ) Tj ET BT /F1 0010 Tf 69.2500 592.9920 Td ( And more text. And more text. ) Tj ET BT /F1 0010 Tf 69.2500 569.0880 Td ( And more text. And more text. And more text. And more text. And more ) Tj ET BT /F1 0010 Tf 69.2500 557.1360 Td ( text. And more text. And more text. Even more. Continued on page 2 ...) Tj ET endstream endobj 6 0 obj << /Type /Page /Parent 3 0 R /Resources << /Font << /F1 9 0 R >> /ProcSet 8 0 R >> /MediaBox [0 0 612.0000 792.0000] /Contents 7 0 R >> endobj 7 0 obj << /Length 676 >> stream 2 J BT 0 0 0 rg /F1 0027 Tf 57.3750 722.2800 Td ( Simple PDF File 2 ) Tj ET BT /F1 0010 Tf 69.2500 688.6080 Td ( ...continued from page 1. Yet more text. And more text. And more text. ) Tj ET BT /F1 0010 Tf 69.2500 676.6560 Td ( And more text. And more text. And more text. And more text. And more ) Tj ET BT /F1 0010 Tf 69.2500 664.7040 Td ( text. Oh, how boring typing this stuff. But not as boring as watching ) Tj ET BT /F1 0010 Tf 69.2500 652.7520 Td ( paint dry. And more text. And more text. And more text. And more text. ) Tj ET BT /F1 0010 Tf 69.2500 640.8000 Td ( Boring. More, a little more text. The end, and just as well. ) Tj ET endstream endobj 8 0 obj [/PDF /Text] endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 10 0 obj << /Creator (Rave \(http://www.nevrona.com/rave\)) /Producer (Nevrona Designs) /CreationDate (D:20060301072826) >> endobj xref 0 11 0000000000 65535 f 0000000019 00000 n 0000000093 00000 n 0000000147 00000 n 0000000222 00000 n 0000000390 00000 n 0000001522 00000 n 0000001690 00000 n 0000002423 00000 n 0000002456 00000 n 0000002574 00000 n trailer << /Size 11 /Root 1 0 R /Info 10 0 R >> startxref 2714 %%EOF zip4j-2.9.1/src/test/resources/test-files/sample_directory/000077500000000000000000000000001414265447200240005ustar00rootroot00000000000000zip4j-2.9.1/src/test/resources/test-files/sample_directory/favicon.ico000066400000000000000000000021761414265447200261270ustar00rootroot00000000000000 h(  H""" """絵L### ###  NNN===OOOPPPPPPQQQPPPQQQ###SSScccTTTVVVVVV777777------纺JIIIIIIBzip4j-2.9.1/src/test/resources/test-files/sample_text1.txt000066400000000000000000000007011414265447200236000ustar00rootroot00000000000000"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." zip4j-2.9.1/src/test/resources/test-files/sample_text_large.txt000066400000000000000000003044751414265447200247100ustar00rootroot00000000000000Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at ligula. Fusce fermentum. Nullam cursus lacinia erat. Praesent blandit laoreet nibh. Fusce convallis metus id felis luctus adipiscing. Pellentesque egestas, neque sit amet convallis pulvinar, justo nulla eleifend augue, ac auctor orci leo non est. Quisque id mi. Ut tincidunt tincidunt erat. Etiam feugiat lorem non metus. Vestibulum dapibus nunc ac augue. Curabitur vestibulum aliquam leo. Praesent egestas neque eu enim. In hac habitasse platea dictumst. Fusce a quam. Etiam ut purus mattis mauris sodales aliquam. Curabitur nisi. Quisque malesuada placerat nisl. Nam ipsum risus, rutrum vitae, vestibulum eu, molestie vel, lacus. Sed augue ipsum, egestas nec, vestibulum et, malesuada adipiscing, dui. Vestibulum facilisis, purus nec pulvinar iaculis, ligula mi congue nunc, vitae euismod ligula urna in dolor. Mauris sollicitudin fermentum libero. Praesent nonummy mi in odio. Nunc interdum lacus sit amet orci. Vestibulum rutrum, mi nec elementum vehicula, eros quam gravida nisl, id fringilla neque ante vel mi. Morbi mollis tellus ac sapien. Phasellus volutpat, metus eget egestas mollis, lacus lacus blandit dui, id egestas quam mauris ut lacus. Fusce vel dui. Sed in libero ut nibh placerat accumsan. Proin faucibus arcu quis ante. In consectetuer turpis ut velit. Nulla sit amet est. Praesent metus tellus, elementum eu, semper a, adipiscing nec, purus. Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo. Suspendisse feugiat. Suspendisse enim turpis, dictum sed, iaculis a, condimentum nec, nisi. Praesent nec nisl a purus blandit viverra. Praesent ac massa at ligula laoreet iaculis. Nulla neque dolor, sagittis eget, iaculis quis, molestie non, velit. Mauris turpis nunc, blandit et, volutpat molestie, porta ut, ligula. Fusce pharetra convallis urna. Quisque ut nisi. Donec mi odio, faucibus at, scelerisque quis, convallis in, nisi. Suspendisse non nisl sit amet velit hendrerit rutrum. Ut leo. Ut a nisl id ante tempus hendrerit. Proin pretium, leo ac pellentesque mollis, felis nunc ultrices eros, sed gravida augue augue mollis justo. Suspendisse eu ligula. Nulla facilisi. Donec id justo. Praesent porttitor, nulla vitae posuere iaculis, arcu nisl dignissim dolor, a pretium mi sem ut ipsum. Curabitur suscipit suscipit tellus. Praesent vestibulum dapibus nibh. Etiam iaculis nunc ac metus. Ut id nisl quis enim dignissim sagittis. Etiam sollicitudin, ipsum eu pulvinar rutrum, tellus ipsum laoreet sapien, quis venenatis ante odio sit amet eros. Proin magna. Duis vel nibh at velit scelerisque suscipit. Curabitur turpis. Vestibulum suscipit nulla quis orci. Fusce ac felis sit amet ligula pharetra condimentum. Maecenas egestas arcu quis ligula mattis placerat. Duis lobortis massa imperdiet quam. Suspendisse potenti. Pellentesque commodo eros a enim. Vestibulum turpis sem, aliquet eget, lobortis pellentesque, rutrum eu, nisl. Sed libero. Aliquam erat volutpat. Etiam vitae tortor. Morbi vestibulum volutpat enim. Aliquam eu nunc. Nunc sed turpis. Sed mollis, eros et ultrices tempus, mauris ipsum aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Pellentesque dapibus hendrerit tortor. Praesent egestas tristique nibh. Sed a libero. Cras varius. Donec vitae orci sed dolor rutrum auctor. Fusce egestas elit eget lorem. Suspendisse nisl elit, rhoncus eget, elementum ac, condimentum eget, diam. Nam at tortor in tellus interdum sagittis. Aliquam lobortis. Donec orci lectus, aliquam ut, faucibus non, euismod id, nulla. Curabitur blandit mollis lacus. Nam adipiscing. Vestibulum eu odio. Vivamus laoreet. Nullam tincidunt adipiscing enim. Phasellus tempus. Proin viverra, ligula sit amet ultrices semper, ligula arcu tristique sapien, a accumsan nisi mauris ac eros. Fusce neque. Suspendisse faucibus, nunc et pellentesque egestas, lacus ante convallis tellus, vitae iaculis lacus elit id tortor. Vivamus aliquet elit ac nisl. Fusce fermentum odio nec arcu. Vivamus euismod mauris. In ut quam vitae odio lacinia tincidunt. Praesent ut ligula non mi varius sagittis. Cras sagittis. Praesent ac sem eget est egestas volutpat. Vivamus consectetuer hendrerit lacus. Cras non dolor. Vivamus in erat ut urna cursus vestibulum. Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio. Praesent venenatis metus at tortor pulvinar varius.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In dui magna, posuere eget, vestibulum et, tempor auctor, justo. In ac felis quis tortor malesuada pretium. Pellentesque auctor neque nec urna. Proin sapien ipsum, porta a, auctor quis, euismod ut, mi. Aenean viverra rhoncus pede. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut non enim eleifend felis pretium feugiat. Vivamus quis mi. Phasellus a est. Phasellus magna. In hac habitasse platea dictumst. Curabitur at lacus ac velit ornare lobortis. Curabitur a felis in nunc fringilla tristique. Morbi mattis ullamcorper velit. Phasellus gravida semper nisi. Nullam vel sem. Pellentesque libero tortor, tincidunt et, tincidunt eget, semper nec, quam. Sed hendrerit. Morbi ac felis. Nunc egestas, augue at pellentesque laoreet, felis eros vehicula leo, at malesuada velit leo quis pede. Donec interdum, metus et hendrerit aliquet, dolor diam sagittis ligula, eget egestas libero turpis vel mi. Nunc nulla. Fusce risus nisl, viverra et, tempor et, pretium in, sapien. Donec venenatis vulputate lorem. Morbi nec metus. Phasellus blandit leo ut odio. Maecenas ullamcorper, dui et placerat feugiat, eros pede varius nisi, condimentum viverra felis nunc et lorem. Sed magna purus, fermentum eu, tincidunt eu, varius ut, felis. In auctor lobortis lacus. Quisque libero metus, condimentum nec, tempor a, commodo mollis, magna. Vestibulum ullamcorper mauris at 1234zip4j-2.9.1/src/test/resources/test-files/zero_byte_file.txt000066400000000000000000000000001414265447200241630ustar00rootroot00000000000000zip4j-2.9.1/src/test/resources/test-files/öüäöäö/000077500000000000000000000000001414265447200250025ustar00rootroot00000000000000zip4j-2.9.1/src/test/resources/test-files/öüäöäö/asöäööl000066400000000000000000000052671414265447200304400ustar00rootroot00000000000000Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,zip4j-2.9.1/src/test/resources/test-files/бореиская.txt000066400000000000000000000222551414265447200277320ustar00rootroot00000000000000Лорем ипсум долор сит амет, аетерно нострум цотидиеяуе яуо ат, еиус интегре еррорибус еу цум, еи хас ребум нонумес. Иусто цетерос нец цу. Ан постулант цонвенире елаборарет вис, меи тота иллуд апериам ан. Ат пер атяуи ностро темпорибус, солута тритани луцилиус меи но. Но мел солум ессент. Яуи цу феугаит доценди перципит. Но ест лаореет цонцептам. Партем сплендиде цонцептам меи ин. Ех алиа постеа мел. Ат при дицо абхорреант хонестатис. Не дуо пауло игнота легимус, веро яуодси инвенире ан яуо, яуи нулла харум диссентиунт ад. Нец диам меис омниум еи, усу фабулас легендос ан. Дицтас пондерум сцрипторем ан еам, ут мел чоро платонем ассуеверит. Сапиентем хендрерит яуи ин, еум ет сонет лабитур интерессет. Яуи ан алиа ессе интеллегебат. Еос ин ребум перицула. Но меис ностро луцилиус еам, ех яуалисяуе импердиет усу. Но пер салутатус десеруиссе, усу муциус легендос цонсеяуунтур но, но сеа цибо виси. Дуо еа дицо апериам инвенире. Нолуиссе адолесценс вим ан, те сонет нолуиссе хас, пер видиссе алияуип нецесситатибус но. Еос фацер хендрерит но. Неморе инсоленс сцрибентур хас ид, ессе яуодси вих ид, ет демоцритум либерависсе вел. При алии видерер ат, цум не ерат нихил волутпат. Яуи омнис интегре иудицабит еи, ех диам убияуе абхорреант сит. Ид маиорум минимум инвидунт нец, цум цу ферри маиестатис, еу лаборе аццумсан елаборарет иус. Вих алиенум цопиосае десеруиссе еу, ет нулла репудиаре еос, ех хас унум аргументум. Хис антиопам ассентиор сентентиае ан, усу еу нобис лаборес волутпат. Тота яуаестио адверсариум но дуо, еи меа ессент орнатус вивендум. Еу про еним дицам, вел ид санцтус симилияуе цонцлудатуряуе. Тритани аперири ирацундиа сит но, цасе идяуе ет про. Ан нец менандри волутпат, вис еи ностер партиендо. Вери путант но вих. Омнес алияуид номинави сед не, латине сплендиде ех пер. Юсто молестие усу ет. Лорем трацтатос ех цум, про тимеам ерипуит ад, еу хис оптион феугаит. Вереар феугиат вел те. Яуис децоре молестие сит ех, дуо ут модус зрил, хас оратио долорем алиенум ид. Ан яуо облияуе алияуандо, сит ад сенсерит салутанди сцрипторем. Меа еу натум фугит, детрацто луптатум персеяуерис ут дуо, пер еи омнес иудицо дебитис. Сед яуидам цоммодо ассентиор ех, еос еи легере импердиет ассентиор. Ад тимеам аппетере вел. Нец ех яуас мелиус. Еу пер натум репудиаре. Либрис цетерос делицата меи ан, ат алии долоре тамяуам сит. Либер сигниферумяуе ин вис, натум дигниссим те ест. Еа фугит дицам лаборес про. Ин яуис интеллегат персеяуерис дуо. Ех еам вениам детрацто, ат мел поссе нусяуам. Пхаедрум сенсерит ин сед. Аппареат праесент ин усу, юсто хендрерит но нец, солум утамур нам не. Яуо но луптатум еффициантур, еу ест мовет путент, меа но харум минимум цомплецтитур. Но еум стет цлита, те хис нулла облияуе волумус. Дицта фацете платонем при те, еним салутанди не сит. Порро пондерум репримияуе ад пер. Яуо омнис дицит те, иус еа сцрипта оцурререт. Ат хас аппетере инвенире оцурререт. Но хис алияуип десерунт, дицта лаборе неглегентур ад хис, еи сонет яуаеяуе перицула про. Мовет ехпетендис интерпретарис цу сед, еос но мазим ассентиор дефиниебас. Цибо фацилисис сед не. Меи лаборамус инцидеринт интерпретарис не. Яуи амет лаборес пертинах еу. Цум ех доминг персецути. Меи ат новум импетус луцилиус. Еи яуо форенсибус улламцорпер, фалли постеа нусяуам вел ан, ад меи аетерно нумяуам хонестатис. Ест дицунт фацилиси постулант еи, алии тибияуе реформиданс ат вих. Не вел доцтус сусципит адолесценс, про ан легере веритус партиендо. Еирмод аперири деленит сит ат, те апеириан детрахит репудиаре при. Ностер видиссе омиттам ех цум, вим еи ерудити аппетере форенсибус. Но еррор вирис анимал хас, яуаеяуе патриояуе те вим, хис те солет нуллам моллис. Ад веро постеа легендос еос, легере фабеллас вих ех, цум ин цоррумпит импердиет. Партем диспутатиони но при, еам цу ассум омиттам, ан модус вертерем нец. Ин риденс нецесситатибус хас. Ад еум видиссе яуаерендум, вис алтера цонвенире персецути цу. Уллум аппеллантур еум еа, сеа тритани сентентиае яуаерендум ан, сед ан мунди партиендо. Еос еу солеат епицури, партем еуисмод меа ад. Вим ан яуалисяуе диспутандо, ут вих яуас дебитис фацилис. Тхеопхрастус репрехендунт ест ад, ин тритани хонестатис про. Синт яуас фабеллас еу при. Еум ессент сцрипторем еа, легендос рецтеяуе торяуатос не сит. Вел малис децоре ириуре еа, иллуд темпор оптион дуо еу. Еа виси хабео нострум еам, мутат евертитур ин меа. Тамяуам инцоррупте вим но, хинц дефинитионем мел ут. Еум цу модус пондерум мнесарчум, иус ут дебет чоро плацерат. Интегре репудиаре дигниссим ин сеа, ад регионе оффициис глориатур меа. Ет меа еррем салутатус, нец рецтеяуе либерависсе ут. Иллуд ностро утрояуе ин хис, саперет симилияуе репудиандае не яуи, цорпора маиестатис диссентиет ат вел. Про одио фиерент репудиаре еи, вис ут тимеам фиерент пондерум. Натум еирмод персецути но еум, цум ид алии утинам тибияуе. Вим санцтус ехпетенда еу. Ет праесент еурипидис дуо, ат унум волуптатум хас, елеифенд делицата праесент вис не. Бонорум волуптатибус ин сед. Ин саперет продессет сцрибентур хас. Иус еа елитр яуалисяуе, хас ет прима ехплицари ирацундиа. Еос дицант дебитис ан. Яуо сале анимал ет. Дицам воцибус при ид, сеа дицит постеа инцидеринт ад. Фуиссет витуператорибус мел ет.zip4j-2.9.1/src/test/resources/test-files/가나다.abc000066400000000000000000000007261414265447200242570ustar00rootroot00000000000000세계를 향한 대화, 유니코드로 하십시오. 제10회 유니코드 국제 회의가 1997년 3월 10일부터 12일까지 독일의 마인즈에서 열립니다. 지금 등록하십시오. 이 회의에서는 업계 전반의 전문가들이 함께 모여 다음과 같은 분야를 다룹니다. - 인터넷과 유니코드, 국제화와 지역화, 운영 체제와 응용 프로그램에서 유니코드의 구현, 글꼴, 문자 배열, 다국어 컴퓨팅. zip4j-2.9.1/trigger-android-build.sh000077500000000000000000000006061414265447200173130ustar00rootroot00000000000000#!/bin/sh -f if [ "$#" -ne 1 ]; then echo "Circle CI token missing" exit 1 fi TOKEN="$1" curl -X POST https://circleci.com/api/v1.1/project/github/srikanth-lingala/zip4j-android-test/build?circle-token=${TOKEN} | tee /tmp/travis-request-output.$$.txt if ! grep -q 'Build created' /tmp/travis-request-output.$$.txt; then echo "CircleCI Android build trigger failed" exit 1 fi