ripgrep-all-0.10.10/000077500000000000000000000000001510417424300140705ustar00rootroot00000000000000ripgrep-all-0.10.10/.envrc000066400000000000000000000000121510417424300151770ustar00rootroot00000000000000use flake ripgrep-all-0.10.10/.github/000077500000000000000000000000001510417424300154305ustar00rootroot00000000000000ripgrep-all-0.10.10/.github/ISSUE_TEMPLATE/000077500000000000000000000000001510417424300176135ustar00rootroot00000000000000ripgrep-all-0.10.10/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000005211510417424300223030ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** **To Reproduce** Attach example file: Run command: **Output** **Screenshots** If applicable, add screenshots to help explain your problem. **Operating System and Version** **Output of `rga --version`** ripgrep-all-0.10.10/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011231510417424300233350ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ripgrep-all-0.10.10/.github/workflows/000077500000000000000000000000001510417424300174655ustar00rootroot00000000000000ripgrep-all-0.10.10/.github/workflows/ci.yml000066400000000000000000000012561510417424300206070ustar00rootroot00000000000000# Based on https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md # # While our "example" application has platform-specific code, # for simplicity we are compiling and testing everything in a nix-on-Linux environment only. on: [push, pull_request] name: ci jobs: nix-flake-check: name: nix flake check runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v4 - name: Install nix uses: cachix/install-nix-action@v21 - name: Ensure the build succeeds run: nix build - name: Run `nix flake check` to run formatters, linters, and tests run: nix flake check --print-build-logs ripgrep-all-0.10.10/.github/workflows/release.yml000066400000000000000000000172261510417424300216400ustar00rootroot00000000000000# adapted from https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/release.yml # The way this works is a little weird. But basically, the create-release job # runs purely to initialize the GitHub release itself. Once done, the upload # URL of the release is saved as an artifact. # # The build-release job runs only once create-release is finished. It gets # the release upload URL by downloading the corresponding artifact (which was # uploaded by create-release). It then builds the release executables for each # supported platform and attaches them as release assets to the previously # created release. # # The key here is that we create the release only once. name: release on: push: # Enable when testing release infrastructure on a branch. # branches: # - ag/release tags: - "v[0-9]+.[0-9]+.[0-9]+*" jobs: create-release: permissions: write-all name: create-release runs-on: ubuntu-latest # env: # Set to force version number, e.g., when no tag exists. # RG_VERSION: TEST-0.0.0 steps: - name: Create artifacts directory run: mkdir artifacts - name: Get the release version from the tag if: env.RG_VERSION == '' run: | # Apparently, this is the right way to get a tag name. Really? # # See: https://github.community/t5/GitHub-Actions/How-to-get-just-the-tag-name/m-p/32167/highlight/true#M1027 echo "RG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV echo "version is: ${{ env.RG_VERSION }}" - name: Create GitHub release id: release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ env.RG_VERSION }} release_name: ${{ env.RG_VERSION }} - name: Save release upload URL to artifact run: echo "${{ steps.release.outputs.upload_url }}" > artifacts/release-upload-url - name: Save version number to artifact run: echo "${{ env.RG_VERSION }}" > artifacts/release-version - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: artifacts path: artifacts build-release: name: build-release needs: ["create-release"] runs-on: ${{ matrix.os }} env: # For some builds, we use cross to test on 32-bit and big-endian # systems. CARGO: cargo # When CARGO is set to CROSS, this is set to `--target matrix.target`. TARGET_FLAGS: "" # When CARGO is set to CROSS, TARGET_DIR includes matrix.target. TARGET_DIR: ./target # Emit backtraces on panics. RUST_BACKTRACE: 1 strategy: matrix: include: - build: linux os: ubuntu-22.04 rust: nightly target: x86_64-unknown-linux-musl strip: x86_64-linux-musl-strip - build: linux os: ubuntu-22.04 rust: nightly target: arm-unknown-linux-gnueabihf strip: arm-linux-gnueabihf-strip - build: linux os: ubuntu-22.04 rust: nightly target: aarch64-unknown-linux-gnu strip: aarch64-linux-gnu-strip - build: macos os: macos-latest rust: nightly target: x86_64-apple-darwin - build: macos os: macos-latest rust: nightly target: aarch64-apple-darwin - build: win os: windows-2019 rust: nightly target: x86_64-pc-windows-msvc #- build: win # os: windows-2019 # rust: nightly-x86_64-gnu # target: x86_64-pc-windows-gnu steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 1 - name: Install packages (Ubuntu) if: matrix.build == 'linux' run: | ci/ubuntu-install-packages - name: Install packages (macOS) if: matrix.build == 'macos' run: | ci/macos-install-packages - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} profile: minimal override: true target: ${{ matrix.target }} - name: Use Cross shell: bash run: | cargo install cross echo "CARGO=cross" >> $GITHUB_ENV echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV - name: Show command used for Cargo run: | echo "cargo command is: ${{ env.CARGO }}" echo "target flag is: ${{ env.TARGET_FLAGS }}" echo "target dir is: ${{ env.TARGET_DIR }}" - name: Get release download URL uses: actions/download-artifact@v4 with: name: artifacts path: artifacts - name: Set release upload URL and release version shell: bash run: | echo "RELEASE_UPLOAD_URL=$(cat artifacts/release-upload-url)" >> $GITHUB_ENV echo "release upload url: $RELEASE_UPLOAD_URL" echo "RELEASE_VERSION=$(cat artifacts/release-version)" >> $GITHUB_ENV echo "release version: $RELEASE_VERSION" - name: Build release binary run: ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }} - name: Strip release binary (macos) if: matrix.build == 'macos' run: | strip "target/${{ matrix.target }}/release/rga" \ "target/${{ matrix.target }}/release/rga-preproc" \ "target/${{ matrix.target }}/release/rga-fzf" \ "target/${{ matrix.target }}/release/rga-fzf-open" - name: Strip release binary (linux) if: matrix.build == 'linux' run: | docker run --rm -v \ "$PWD/target:/target:Z" \ "rustembedded/cross:${{ matrix.target }}" \ "${{ matrix.strip }}" \ "/target/${{ matrix.target }}/release/rga" \ "/target/${{ matrix.target }}/release/rga-preproc" \ "/target/${{ matrix.target }}/release/rga-fzf" \ "/target/${{ matrix.target }}/release/rga-fzf-open" - name: Build archive shell: bash run: | staging="ripgrep_all-${{ env.RELEASE_VERSION }}-${{ matrix.target }}" mkdir -p "$staging"/doc cp {README.md,LICENSE.md} "$staging/" cp CHANGELOG.md "$staging/doc/" if [ "${{ matrix.build }}" = "win" ]; then cp "target/${{ matrix.target }}/release/rga.exe" "$staging/" cp "target/${{ matrix.target }}/release/rga-preproc.exe" "$staging/" cp "target/${{ matrix.target }}/release/rga-fzf.exe" "$staging/" cp "target/${{ matrix.target }}/release/rga-fzf-open.exe" "$staging/" 7z a "$staging.zip" "$staging" echo "ASSET=$staging.zip" >> $GITHUB_ENV else cp "target/${{ matrix.target }}/release/rga" "$staging/" cp "target/${{ matrix.target }}/release/rga-preproc" "$staging/" cp "target/${{ matrix.target }}/release/rga-fzf" "$staging/" cp "target/${{ matrix.target }}/release/rga-fzf-open" "$staging/" tar czf "$staging.tar.gz" "$staging" echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV fi - name: Upload release archive uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ env.RELEASE_UPLOAD_URL }} asset_path: ${{ env.ASSET }} asset_name: ${{ env.ASSET }} asset_content_type: application/octet-stream ripgrep-all-0.10.10/.gitignore000066400000000000000000000001401510417424300160530ustar00rootroot00000000000000/result /target /exampledir.2 /.idea /.pre-commit-config.yaml /.vscode/settings.json **/*.rs.bk ripgrep-all-0.10.10/.typos.toml000066400000000000000000000001161510417424300162170ustar00rootroot00000000000000[default.extend-words] als = "als" [files] extend-exclude = ["exampledir/*"] ripgrep-all-0.10.10/.vscode/000077500000000000000000000000001510417424300154315ustar00rootroot00000000000000ripgrep-all-0.10.10/.vscode/launch.json000066400000000000000000000040601510417424300175760ustar00rootroot00000000000000{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "attach", "name": "Attach", "program": "${workspaceFolder}/target/release/rga-preproc" }, { "type": "lldb", "request": "launch", "name": "Debug unit tests in library 'rga'", "cargo": { "args": ["test", "--no-run", "--lib", "--package=rga"], "filter": { "name": "rga", "kind": "lib" } }, "args": [], "cwd": "${workspaceFolder}" }, { "type": "lldb", "request": "launch", "name": "Debug executable 'rga'", "cargo": { "args": ["build", "--bin=rga"], "filter": { "name": "rga", "kind": "bin" } }, "args": [], "cwd": "${workspaceFolder}" }, { "type": "lldb", "request": "launch", "name": "Debug unit tests in executable 'rga'", "cargo": { "args": ["test", "--no-run", "--bin=rga", "--package=ripgrep-all"], "filter": { "name": "rga", "kind": "bin" } }, "args": [], "cwd": "${workspaceFolder}" }, { "type": "lldb", "request": "launch", "name": "Debug executable 'rga-preproc'", "cargo": { "args": ["build", "--bin=rga-preproc"], "filter": { "name": "rga-preproc", "kind": "bin" } }, "args": ["exampledir/tar/test.tar.bz2"], "cwd": "${workspaceFolder}" }, { "type": "lldb", "request": "launch", "name": "Debug unit tests in executable 'rga-preproc'", "cargo": { "args": ["test", "--no-run", "--bin=rga-preproc", "--package=rga"], "filter": { "name": "rga-preproc", "kind": "bin" } }, "args": [], "cwd": "${workspaceFolder}" } ] } ripgrep-all-0.10.10/CHANGELOG.md000066400000000000000000000054101510417424300157010ustar00rootroot00000000000000# 0.10.5 (2024-01-16) - return the same exit status as rg # 0.10.4 (2024-01-16) - add `--rga-no-prefix-filenames` flag (https://github.com/phiresky/ripgrep-all/issues/154) # 0.10.3 (2024-01-15) This was originally supposed to be version 1.0.0, but I don't feel confident enough in the stability to call it that. Highlights: - rga is now configurable via a config file (~/.config/ripgrep-all/config.jsonc) that is generated on first use, including schema. - Custom subprocess-spawning adapters can be defined via config file. See https://github.com/phiresky/ripgrep-all/wiki - External adapters can be shared with the community at https://github.com/phiresky/ripgrep-all/discussions Others: - mbox adapter (@FliegendeWurst https://github.com/phiresky/ripgrep-all/pull/104) - auto generate parts of the readme - add loads of debug logs and performance timings when `--debug` is used - better error messages via `anyhow` - add cross-platform rga-fzf binary - change whole code base to be async - change adapter interface from `(&Read, &Write) -> ()` to `AsyncRead -> AsyncRead` to allow chaining of adapters # 0.9.6 (2020-05-19) - Fix windows builds - Case insensitive file extension matching - Move to Github Actions instead of Travis - Fix searching for words that are hyphenated in PDFs (#44) - Always load rga-preproc binary from location where rga is # 0.9.5 (2020-04-08) - Allow search in pdf files without extension (https://github.com/phiresky/ripgrep-all/issues/39) - Prefer shipped binaries to system-installed ones (https://github.com/phiresky/ripgrep-all/issues/32) - Upgrade dependencies # 0.9.3 (2019-09-19) - Fix compilation on new Rust by updating rusqlite ([#25](https://github.com/phiresky/ripgrep-all/pull/25)) # 0.9.2 (2019-06-17) - Fix file ending regex ([#13](https://github.com/phiresky/ripgrep-all/issues/13)) - Fix decoding of UTF16 with BOM ([#5](https://github.com/phiresky/ripgrep-all/issues/5)) - Shorten the output on failure to two lines (https://github.com/phiresky/ripgrep-all/issues/7), you can use `--no-messages` to completely suppress errors. - Better installations instructions in readme for each OS - Add windows binaries! Including all dependencies! # 0.9.1 (2019-06-16) - Add enabled adapters to cache key if caching for archive - Prevent empty trailing page output in pdf reader # 0.9.0 (2019-06-16) - Split decompress and tar adapter so we can also read pure .bz2 files etc - Add mime type detection to decompress so we can read e.g. /boot/initramfs.img which is a bz2 file without ending # 0.8.9 (2019-06-15) - Finally fix linux binary package - add readme to crates.io # 0.8.7 (2019-06-15) Minor fixes - Correctly wrap help text - Show own help when no arguments given - Hopefully package the rga binary correctly # 0.8.5 previous changes not documented ripgrep-all-0.10.10/Cargo.lock000066400000000000000000001604011510417424300157770ustar00rootroot00000000000000# This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "addr2line" version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] name = "adler2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "once_cell", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "alloc-no-stdlib" version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "ansi_term" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] [[package]] name = "anstream" version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", "once_cell", "windows-sys 0.59.0", ] [[package]] name = "anyhow" version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" dependencies = [ "backtrace", ] [[package]] name = "astral-tokio-tar" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec179a06c1769b1e42e1e2cbe74c7dcdb3d6383c838454d063eaac5bbb7ebbe5" dependencies = [ "filetime", "futures-core", "libc", "portable-atomic", "rustc-hash", "tokio", "tokio-stream", "xattr", ] [[package]] name = "async-compression" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" dependencies = [ "bzip2 0.4.4", "flate2", "futures-core", "memchr", "pin-project-lite", "tokio", "xz2", "zstd 0.11.2+zstd.1.5.2", "zstd-safe 5.0.2+zstd.1.5.2", ] [[package]] name = "async-compression" version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06575e6a9673580f52661c92107baabffbf41e2141373441cbcdc47cb733003c" dependencies = [ "brotli", "bzip2 0.5.2", "deflate64", "flate2", "futures-core", "futures-io", "memchr", "pin-project-lite", "tokio", "xz2", "zstd 0.13.3", "zstd-safe 7.2.3", ] [[package]] name = "async-recursion" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "async-stream" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", "pin-project-lite", ] [[package]] name = "async-stream-impl" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "async-trait" version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "async_zip" version = "0.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2105142db9c6203b9dadc83b0553394589a6cb31b1449a3b46b42f47c3434d0" dependencies = [ "async-compression 0.3.15", "chrono", "crc32fast", "log", "pin-project", "thiserror", "tokio", ] [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi 0.1.19", "libc", "winapi", ] [[package]] name = "autocfg" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", "windows-targets", ] [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bincode" version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ "serde", ] [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "brotli" version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", "brotli-decompressor", ] [[package]] name = "brotli-decompressor" version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] name = "bumpalo" version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytes" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "bzip2" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ "bzip2-sys", "libc", ] [[package]] name = "bzip2" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" dependencies = [ "bzip2-sys", ] [[package]] name = "bzip2-sys" version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", "pkg-config", ] [[package]] name = "cc" version = "1.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" dependencies = [ "jobserver", "libc", "shlex", ] [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "charset" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1f927b07c74ba84c7e5fe4db2baeb3e996ab2688992e39ac68ce3220a677c7e" dependencies = [ "base64", "encoding_rs", ] [[package]] name = "chrono" version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "windows-link", ] [[package]] name = "clap" version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", "bitflags 1.3.2", "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", ] [[package]] name = "clap" version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim 0.11.1", "terminal_size", ] [[package]] name = "clap_lex" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "convert_case" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crc32fast" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", "crossbeam-queue", "crossbeam-utils", ] [[package]] name = "crossbeam-channel" version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "ctor" version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", "syn 2.0.98", ] [[package]] name = "data-encoding" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "deflate64" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" [[package]] name = "derive_more" version = "0.99.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", "syn 2.0.98", ] [[package]] name = "diff" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "directories-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ "cfg-if", "dirs-sys-next", ] [[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", "winapi", ] [[package]] name = "dyn-clonable" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a36efbb9bfd58e1723780aa04b61aba95ace6a05d9ffabfdb0b43672552f0805" dependencies = [ "dyn-clonable-impl", "dyn-clone", ] [[package]] name = "dyn-clonable-impl" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e8671d54058979a37a26f3511fbf8d198ba1aa35ffb202c42587d918d77213a" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "dyn-clone" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "encoding_rs" version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "encoding_rs_io" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cc3c5651fb62ab8aa3103998dade57efdd028544bd300516baa31840c252a83" dependencies = [ "encoding_rs", ] [[package]] name = "env_logger" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ "humantime", "is-terminal", "log", "regex", "termcolor", ] [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", "windows-sys 0.59.0", ] [[package]] name = "fallible-iterator" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fallible-streaming-iterator" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "filetime" version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", "libredox", "windows-sys 0.59.0", ] [[package]] name = "fixedbitset" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" dependencies = [ "crc32fast", "miniz_oxide", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-io" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "futures-sink" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "pin-utils", "slab", ] [[package]] name = "generic-array" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ "typenum", ] [[package]] name = "getopts" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" dependencies = [ "unicode-width", ] [[package]] name = "getrandom" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] name = "getrandom" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", "libc", "wasi 0.13.3+wasi-0.2.2", "windows-targets", ] [[package]] name = "gimli" version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", ] [[package]] name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hashlink" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ "hashbrown 0.14.5", ] [[package]] name = "heck" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ "unicode-segmentation", ] [[package]] name = "hermit-abi" version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "hermit-abi" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iana-time-zone" version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", "windows-core", ] [[package]] name = "iana-time-zone-haiku" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", "serde", ] [[package]] name = "indexmap" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", ] [[package]] name = "is-docker" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" dependencies = [ "once_cell", ] [[package]] name = "is-terminal" version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" dependencies = [ "hermit-abi 0.4.0", "libc", "windows-sys 0.59.0", ] [[package]] name = "is-wsl" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" dependencies = [ "is-docker", "once_cell", ] [[package]] name = "is_terminal_polyfill" version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "json_comments" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dbbfed4e59ba9750e15ba154fdfd9329cee16ff3df539c2666b70f58cc32105" [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" version = "0.2.170" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libredox" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.9.0", "libc", "redox_syscall", ] [[package]] name = "libsqlite3-sys" version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" dependencies = [ "cc", "pkg-config", "vcpkg", ] [[package]] name = "linux-raw-sys" version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "lock_api" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", ] [[package]] name = "log" version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" [[package]] name = "lzma-sys" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" dependencies = [ "cc", "libc", "pkg-config", ] [[package]] name = "mailparse" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d096594926cab442e054e047eb8c1402f7d5b2272573b97ba68aa40629f9757" dependencies = [ "charset", "data-encoding", "quoted_printable", ] [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime2ext" version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "515a63dc9666c865e848b043ab52fe9a5c713ae89cde4b5fbaae67cfd614b93a" [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", ] [[package]] name = "mio" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] name = "num" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" dependencies = [ "num-complex", "num-integer", "num-iter", "num-rational", "num-traits", ] [[package]] name = "num-complex" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ "autocfg", "num-traits", ] [[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ "num-traits", ] [[package]] name = "num-iter" version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-rational" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "object" version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "open" version = "5.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" dependencies = [ "is-wsl", "libc", "pathdiff", ] [[package]] name = "parking_lot" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", "windows-targets", ] [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "path-clean" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" [[package]] name = "pathdiff" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "petgraph" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap 2.7.1", ] [[package]] name = "pin-project" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "pretty-bytes" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "009d6edd2c1dbf2e1c0cd48a2f7766e03498d49ada7109a01c6911815c685316" dependencies = [ "atty", "getopts", ] [[package]] name = "pretty_assertions" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", "yansi", ] [[package]] name = "proc-macro-error" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", "syn 1.0.109", "version_check", ] [[package]] name = "proc-macro-error-attr" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", "version_check", ] [[package]] name = "proc-macro2" version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quote" version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] [[package]] name = "quoted_printable" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" [[package]] name = "redox_syscall" version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ "bitflags 2.9.0", ] [[package]] name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", "thiserror", ] [[package]] name = "regex" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "ripgrep_all" version = "0.10.10" dependencies = [ "anyhow", "astral-tokio-tar", "async-compression 0.4.19", "async-recursion", "async-stream", "async-trait", "async_zip", "bincode", "bytes", "clap 4.5.31", "crossbeam", "crossbeam-channel", "ctor", "derive_more", "directories-next", "dyn-clonable", "dyn-clone", "encoding_rs", "encoding_rs_io", "env_logger", "glob", "json_comments", "lazy_static", "log", "mailparse", "memchr", "mime2ext", "open", "paste", "path-clean", "pretty-bytes", "pretty_assertions", "regex", "rusqlite", "schemars", "serde", "serde_json", "size_format", "structopt", "tempfile", "tokio", "tokio-rusqlite", "tokio-stream", "tokio-test", "tokio-util", "tree_magic_mini", ] [[package]] name = "rusqlite" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" dependencies = [ "bitflags 2.9.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", "smallvec", ] [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.59.0", ] [[package]] name = "rustversion" version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "schemars" version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ "dyn-clone", "indexmap 1.9.3", "schemars_derive", "serde", "serde_json", ] [[package]] name = "schemars_derive" version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", "syn 2.0.98", ] [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.218" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "serde_derive_internals" version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "serde_json" version = "1.0.139" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" dependencies = [ "itoa", "memchr", "ryu", "serde", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "size_format" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ed5f6ab2122c6dec69dca18c72fa4590a27e581ad20d44960fe74c032a0b23b" dependencies = [ "generic-array", "num", ] [[package]] name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "socket2" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structopt" version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ "clap 2.34.0", "lazy_static", "structopt-derive", ] [[package]] name = "structopt-derive" version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck", "proc-macro-error", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "syn" version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "tempfile" version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", "getrandom 0.3.1", "once_cell", "rustix", "windows-sys 0.59.0", ] [[package]] name = "termcolor" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "terminal_size" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" dependencies = [ "rustix", "windows-sys 0.59.0", ] [[package]] name = "textwrap" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ "unicode-width", ] [[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "tokio" version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "tokio-rusqlite" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc785c98d0c872455381e59be1f33a8f3a6b4e852544212e37601cc2ccb21d39" dependencies = [ "crossbeam-channel", "rusqlite", "tokio", ] [[package]] name = "tokio-stream" version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", "tokio", "tokio-util", ] [[package]] name = "tokio-test" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" dependencies = [ "async-stream", "bytes", "futures-core", "tokio", "tokio-stream", ] [[package]] name = "tokio-util" version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", "futures-util", "hashbrown 0.14.5", "pin-project-lite", "slab", "tokio", ] [[package]] name = "tree_magic_mini" version = "3.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aac5e8971f245c3389a5a76e648bfc80803ae066a1243a75db0064d7c1129d63" dependencies = [ "fnv", "memchr", "nom", "once_cell", "petgraph", ] [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-segmentation" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vec_map" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" version = "0.13.3+wasi-0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" dependencies = [ "wit-bindgen-rt", ] [[package]] name = "wasm-bindgen" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ "unicode-ident", ] [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ "windows-targets", ] [[package]] name = "windows-link" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets", ] [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "wit-bindgen-rt" version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ "bitflags 2.9.0", ] [[package]] name = "xattr" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", "linux-raw-sys", "rustix", ] [[package]] name = "xz2" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" dependencies = [ "lzma-sys", ] [[package]] name = "yansi" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", "syn 2.0.98", ] [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ "zstd-safe 5.0.2+zstd.1.5.2", ] [[package]] name = "zstd" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" dependencies = [ "zstd-safe 7.2.3", ] [[package]] name = "zstd-safe" version = "5.0.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" dependencies = [ "libc", "zstd-sys", ] [[package]] name = "zstd-safe" version = "7.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" version = "2.0.14+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" dependencies = [ "cc", "pkg-config", ] ripgrep-all-0.10.10/Cargo.toml000066400000000000000000000041241510417424300160210ustar00rootroot00000000000000[package] authors = ["phiresky "] description = "rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc." edition = "2024" exclude = [ "exampledir/*", ] homepage = "https://github.com/phiresky/ripgrep-all" license = "AGPL-3.0-or-later" name = "ripgrep_all" readme = "README.md" repository = "https://github.com/phiresky/ripgrep-all" version = "0.10.10" [features] default = ["perf-literal"] perf-literal = ["regex/perf-literal"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] anyhow = {version = "1.0.71", features = ["backtrace"]} async-compression = { version = "0.4.0", features = ["all", "all-algorithms", "tokio"] } async-stream = "0.3.5" async-trait = "0.1.68" async_zip = {version = "0.0.12", features = ["full"]} bincode = "1.3.3" bytes = "1.4.0" clap = {version = "4.3.0", features = ["wrap_help"]} crossbeam = "0.8.2" crossbeam-channel = "0.5.8" derive_more = "0.99.17" directories-next = "2.0.0" dyn-clonable = "0.9.0" dyn-clone = "1.0.11" encoding_rs = "0.8.32" encoding_rs_io = "0.1.7" env_logger = "0.10.0" glob = "0.3.1" json_comments = "0.2.1" lazy_static = "1.4.0" log = "0.4.17" mailparse = "0.14.0" memchr = "2.5.0" mime2ext = "0.1.52" open = "5" paste = "1.0.12" path-clean = "1.0.1" pretty-bytes = "0.2.2" regex = "1.8.2" rusqlite = {version = "0.30.0", features = ["vtab", "bundled"]} schemars = {version = "0.8.12", features = ["preserve_order"]} serde = {version = "1.0.163", features = ["derive"]} serde_json = "1.0.96" size_format = "1.0.2" structopt = "0.3.26" tempfile = "3.5.0" tokio = {version = "1.28.1", features = ["full"]} tokio-rusqlite = "0.5.0" tokio-stream = {version = "0.1.14", features = ["io-util", "tokio-util"]} astral-tokio-tar = "0.5.6" tokio-util = {version = "0.7.8", features = ["io", "full"]} tree_magic = {package = "tree_magic_mini", version = "3.0.3"} [dev-dependencies] async-recursion = "1.0.4" ctor = "0.2.0" pretty_assertions = "1.3.0" tempfile = "3.5.0" tokio-test = "0.4.2" [profile.release] debug = true lto = "thin" split-debuginfo = "packed" ripgrep-all-0.10.10/LICENSE.md000066400000000000000000001033421510417424300154770ustar00rootroot00000000000000I like the concept of giving back, so I settled on the AGPL as the default license for all my personal projects. This isn't set in stone, so feel free to write me at `phireskyde+git@gmail.com` if you need something else. --- ### GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright © 2007 Free Software Foundation, Inc. <> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. ### Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. ### TERMS AND CONDITIONS #### 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. #### 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. #### 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. #### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. #### 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. #### 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: - a\) The work must carry prominent notices stating that you modified it, and giving a relevant date. - b\) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". - c\) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. - d\) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. #### 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: - a\) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. - b\) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. - c\) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. - d\) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. - e\) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. #### 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: - a\) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or - b\) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or - c\) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or - d\) Limiting the use for publicity purposes of names of licensors or authors of the material; or - e\) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or - f\) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. #### 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. #### 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. #### 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. #### 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. #### 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. #### 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. #### 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. #### 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. #### 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. #### 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS ### How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see <>. ripgrep-all-0.10.10/README.md000066400000000000000000000234321510417424300153530ustar00rootroot00000000000000# rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc. rga is a line-oriented search tool that allows you to look for a regex in a multitude of file types. rga wraps the awesome [ripgrep] and enables it to search in pdf, docx, sqlite, jpg, movie subtitles (mkv, mp4), etc. [ripgrep]: https://github.com/BurntSushi/ripgrep [![github repo](https://img.shields.io/badge/repo-github.com%2Fphiresky%2Fripgrep--all-informational.svg)](https://github.com/phiresky/ripgrep-all) [![Crates.io](https://img.shields.io/crates/v/ripgrep-all.svg)](https://crates.io/crates/ripgrep-all) [![fearless concurrency](https://img.shields.io/badge/concurrency-fearless-success.svg)](https://www.reddit.com/r/rustjerk/top/?sort=top&t=all) For more detail, see this introductory blogpost: https://phiresky.github.io/blog/2019/rga--ripgrep-for-zip-targz-docx-odt-epub-jpg/ rga will recursively descend into archives and match text in every file type it knows. Here is an [example directory](https://github.com/phiresky/ripgrep-all/tree/master/exampledir/demo) with different file types: ``` demo/ ├── greeting.mkv ├── hello.odt ├── hello.sqlite3 └── somearchive.zip ├── dir │ ├── greeting.docx │ └── inner.tar.gz │ └── greeting.pdf └── greeting.epub ``` ![rga output](doc/demodir.png) ## Integration with fzf ![rga-fzf](doc/rga-fzf.gif) See [the wiki](https://github.com/phiresky/ripgrep-all/wiki/fzf-Integration) for instructions of integrating rga with fzf. ## INSTALLATION Linux x64, macOS and Windows binaries are available [in GitHub Releases][latestrelease]. [latestrelease]: https://github.com/phiresky/ripgrep-all/releases/latest ### Linux #### Arch Linux `pacman -S ripgrep-all` #### Gentoo Linux `emerge sys-apps/ripgrep-all` #### Nix `nix-env -iA nixpkgs.ripgrep-all` #### Debian-based download the [rga binary][latestrelease] and get the dependencies like this: `apt install ripgrep pandoc poppler-utils ffmpeg` If ripgrep is not included in your package sources, get it from [here](https://github.com/BurntSushi/ripgrep/releases). rga will search for all binaries it calls in \$PATH and the directory itself is in. ### Windows Note that installing via [chocolatey](https://chocolatey.org/packages/ripgrep-all) or [scoop](https://github.com/ScoopInstaller/Main/blob/master/bucket/rga.json) is the only supported download method. If you download the binary from releases manually, you will not get the dependencies (for example pdftotext from poppler). If you get an error like `VCRUNTIME140.DLL could not be found`, you need to install [vc_redist.x64.exe](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads). #### Chocolatey ``` choco install ripgrep-all ``` #### Scoop ``` scoop install rga ``` ### Homebrew/Linuxbrew `rga` can be installed with [Homebrew](https://formulae.brew.sh/formula/ripgrep-all#default): `brew install rga` To install the dependencies that are each not strictly necessary but very useful: `brew install pandoc poppler ffmpeg` ### MacPorts `rga` can also be installed on macOS via [MacPorts](https://ports.macports.org/port/ripgrep-all/): `sudo port install ripgrep-all` ### Compile from source rga should compile with stable Rust (v1.75.0+, check with `rustc --version`). To build it, run the following (or the equivalent in your OS): ``` ~$ apt install build-essential pandoc poppler-utils ffmpeg ripgrep cargo ~$ cargo install --locked ripgrep_all ~$ rga --version # this should work now ``` ## Available Adapters rga works with _adapters_ that adapt various file formats. It comes with a few adapters integrated: ``` rga --rga-list-adapters ``` You can also add **custom adapters**. See [the wiki](https://github.com/phiresky/ripgrep-all/wiki) for more information. Adapters: - **pandoc** Uses pandoc to convert binary/unreadable text documents to plain markdown-like text Runs: pandoc --from= --to=plain --wrap=none --markdown-headings=atx Extensions: .epub, .odt, .docx, .fb2, .ipynb, .html, .htm - **poppler** Uses pdftotext (from poppler-utils) to extract plain text from PDF files Runs: pdftotext - - Extensions: .pdf Mime Types: application/pdf - **postprocpagebreaks** Adds the page number to each line for an input file that specifies page breaks as ascii page break character. Mainly to be used internally by the poppler adapter. Extensions: .asciipagebreaks - **ffmpeg** Uses ffmpeg to extract video metadata/chapters, subtitles, lyrics, and other metadata Extensions: .mkv, .mp4, .avi, .mp3, .ogg, .flac, .webm - **zip** Reads a zip file as a stream and recurses down into its contents Extensions: .zip, .jar Mime Types: application/zip - **decompress** Reads compressed file as a stream and runs a different extractor on the contents. Extensions: .als, .bz2, .gz, .tbz, .tbz2, .tgz, .xz, .zst Mime Types: application/gzip, application/x-bzip, application/x-xz, application/zstd - **tar** Reads a tar file as a stream and recurses down into its contents Extensions: .tar - **sqlite** Uses sqlite bindings to convert sqlite databases into a simple plain text format Extensions: .db, .db3, .sqlite, .sqlite3 Mime Types: application/x-sqlite3 The following adapters are disabled by default, and can be enabled using '--rga-adapters=+foo,bar': - **mail** Reads mailbox/mail files and runs extractors on the contents and attachments. Extensions: .mbox, .mbx, .eml Mime Types: application/mbox, message/rfc822 ## USAGE: > rga \[RGA OPTIONS\] \[RG OPTIONS\] PATTERN \[PATH \...\] ## FLAGS: **\--rga-accurate** > Use more accurate but slower matching by mime type > By default, rga will match files using file extensions. Some programs, > such as sqlite3, don\'t care about the file extension at all, so users > sometimes use any or no extension at all. With this flag, rga will try > to detect the mime type of input files using the magic bytes (similar > to the \`file\` utility), and use that to choose the adapter. > Detection is only done on the first 8KiB of the file, since we can\'t > always seek on the input (in archives). **\--rga-no-cache** > Disable caching of results > By default, rga caches the extracted text, if it is small enough, to a > database in \${XDG_CACHE_DIR-\~/.cache}/ripgrep-all on Linux, > _\~/Library/Caches/ripgrep-all_ on macOS, or > C:\\Users\\username\\AppData\\Local\\ripgrep-all on Windows. This way, > repeated searches on the same set of files will be much faster. If you > pass this flag, all caching will be disabled. **-h**, **\--help** > Prints help information **\--rga-list-adapters** > List all known adapters **\--rga-print-config-schema** > Print the JSON Schema of the configuration file **\--rg-help** > Show help for ripgrep itself **\--rg-version** > Show version of ripgrep itself **-V**, **\--version** > Prints version information ## OPTIONS: **\--rga-adapters=**\\... > Change which adapters to use and in which priority order (descending) > \"foo,bar\" means use only adapters foo and bar. \"-bar,baz\" means > use all default adapters except for bar and baz. \"+bar,baz\" means > use all default adapters and also bar and baz. **\--rga-cache-compression-level=**\ > ZSTD compression level to apply to adapter outputs before storing in > cache db > Ranges from 1 - 22 \[default: 12\] **\--rga-config-file=**\ **\--rga-max-archive-recursion=**\ > Maximum nestedness of archives to recurse into \[default: 5\] **\--rga-cache-max-blob-len=**\ > Max compressed size to cache > Longest byte length (after compression) to store in cache. Longer > adapter outputs will not be cached and recomputed every time. > Allowed suffixes on command line: k M G \[default: 2000000\] **\--rga-cache-path=**\ > Path to store cache db \[default: /home/phire/.cache/ripgrep-all\] **-h** shows a concise overview, **\--help** shows more detail and advanced options. All other options not shown here are passed directly to rg, especially \[PATTERN\] and \[PATH \...\] ## Config The config file location leverage the mechanisms defined by - the [XDG base directory](https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html) and the [XDG user directory](https://www.freedesktop.org/wiki/Software/xdg-user-dirs/) specifications on Linux (ex: `~/.config/ripgrep-all/config.jsonc`) - the [Known Folder](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx) API on Windows (ex: `C:\Users\Alice\AppData\Roaming\ripgrep-all/config.jsonc`) - the [Standard Directories](https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW6) guidelines on macOS (ex: `~/Library/Application Support/ripgrep-all/config.jsonc`) ## Development To enable debug logging: ```bash export RUST_LOG=debug export RUST_BACKTRACE=1 ``` Also remember to disable caching with `--rga-no-cache` or clear the cache (`~/Library/Caches/rga` on macOS, `~/.cache/rga` on other Unixes, or `C:\Users\username\AppData\Local\rga` on Windows) to debug the adapters. ### Nix and Direnv You can use the provided [`flake.nix`](./flake.nix) to setup all build- and run-time dependencies: 1. Enable [Flakes](https://wiki.nixos.org/wiki/Flakes) in your Nix configuration. 1. Add [`direnv`](https://direnv.net/) to your profile: `nix profile install nixpkgs#direnv` 1. `cd` into the directory where you have cloned this directory. 1. Allow use of [`.envrc`](./.envrc): `direnv allow` 1. After the dependencies have been installed, your shell will now have all of the necessary development dependencies. ripgrep-all-0.10.10/ci/000077500000000000000000000000001510417424300144635ustar00rootroot00000000000000ripgrep-all-0.10.10/ci/macos-install-packages000077500000000000000000000000401510417424300207250ustar00rootroot00000000000000#!/bin/sh brew install poppler ripgrep-all-0.10.10/ci/ubuntu-install-packages000077500000000000000000000001431510417424300211510ustar00rootroot00000000000000#!/bin/sh sudo apt-get update sudo apt-get install -y --no-install-recommends \ poppler-utils ripgrep-all-0.10.10/doc/000077500000000000000000000000001510417424300146355ustar00rootroot00000000000000ripgrep-all-0.10.10/doc/config.default.jsonc000066400000000000000000000015311510417424300205630ustar00rootroot00000000000000{ // This file follows the JSON schema defined below. // If you use an editor that supports JSON schema (e.g. VS Code), // you should be getting IntelliSense and validation. "$schema": "./config.v1.schema.json", // The default config and schema will be regenerated if they are missing // https://github.com/phiresky/ripgrep-all/blob/master/doc/config.default.jsonc // The config options are the same as the command line options, // but with --rga- prefix removed and - and . replaced with _. // e.g. --rga-no-cache becomes `"no_cache": true. // The only exception is the `custom_adapters` option, which can only be set in this file. "custom_adapters": [ // See https://github.com/phiresky/ripgrep-all/wiki for more information // to verify if your custom adapters are picked up correctly, run `rga --rga-list-adapters` ] } ripgrep-all-0.10.10/doc/demodir.png000066400000000000000000002025561510417424300170000ustar00rootroot00000000000000‰PNG  IHDRÇØ÷¡tsBITÛáOàtEXtSoftwaregnome-screenshotï¿> IDATxœìÝyxUº?ð·ª×¤³ïûböD „c¯lƒ . â ÂAÑD~ƒˆ2Œ¢¨8rçâ‚08 ‘!@BÈFÙz«îúýQÒÓÓYHª»Ó |?O§úTÕ[§Šê~ûœ:‡áyžDa bÈ*@::zÁ‚ÎÎÎÇÕÕÕÕÖÖúùùEFFFFF†‡‡øá‡6‰¼¼¼üòåËÂkFsîܹšššʇ‡‡ÿæ7¿ñöö®««»víš¿¿fffXXØë¯¿.…¹Ç\¾¥­­­ººÚÏÏ////==}Íš5/^´Iü½çææ¶`Á‚ˆˆ"ºzõªV« ÈÉÉÉÊÊÚ´iÓÁƒ»\«¯õÓ{±±± .T(ƒ¡ººZ©TNž<9--­‡AúZŸÏ=÷\LL EDDÌ›7ï£>zñÅ›››•Jå„ N:e~•Š«ŒÓ}28²Êï¾û.%%%00ð•W^©­­µßŽBCC322.]º´}ûöÊÊJww÷¡C‡X›9s¦‡‡Gqqñ¦M›„lÒ¤I“'Onjjzùå—;OÖRSSsêÔ©âââòòráA5©T:eÊ” &dggïÛ·ïÒ¥KÖÿþûï›ÿùÇ?þ±‡Â‰äå—_¾téÒ;ï¼S]]MDñññùùù!!!C‡ýé§ŸÌ ?ðÀyyy7nÜØ¼y³Ð+—˧OŸž››;þüåË—›ví,ËΛ7/""¢ººzÆ Â 2™lÒ¤I>øà³Ï>ÛÐÐpþüùÎ+ö©~zO©T¾ð …¢¢¢bÆ ÂðQaaasæÌÉÉÉér•¾ÖgtttCCÃÒ¥KûÛßÍŸ?Ó¦M%%%K–,‰ONN6e•¢ëG_UUUQQa“ú€ÛÞàx®²½½ý7Þ(,,d&88˜ˆf̘fóeee•––¾ù曥¥¥7nܸ|ùò7ß|cÑ#T¡P$&&ÑÖ­[Mmzß|óV«õóóó÷÷ï¼ÙŽŽŽõë×;vÌ4ö Çq_~ù¥ðå~È!6?[bYöàÁƒúÓŸ„”’ˆÎœ9#d8wÝu—yI•J5iÒ$žçß{ï=S·^N÷ñÇŸ:uÊÃÃcܸqýùÈ‘#ccc;::V¯^mj»ÖëõÛ¶m+**’H$3fÌèÏxrss=<<Ôjõ_þòӈė/_^±bE—=lEÔ§D"ùàƒ4ÍÅ‹[[[‰èøñã%%%tóac???Sa+ëGØûîÝ»EU܉GVIDjµúÃ?|å•WNž***  ßâ¿°°Ð¢±½½½óã¸$ª>kjjªªª„×mmmDdÚ²pÕÉårSakêG¥R¥§§·¶¶:t¨û#øèrÏ=÷„……éõú³gÏ:t¨s“ŽL&ó÷÷75£™ÔÖÖ–•• 2äèÑ£©©©÷ÝwŸ››Û|`«ØŠŠŠôz}ÏeZZZnܸáîîmzpÎÛÛÛËËË`0ô²ƒ®L&suužÞ”ÉdV†m+:ŽˆXö?~kš.]\\æÎkQÞÍ͈û+@"¢¨¨("êü°+566ÖÖÖFEEÙµ§´¹ÐÐP"ê}Q+ëÓâúì|¹ZS?999 …âŸÿüç-ÿ˜ôkV)•J}ôÑ1cƘò–!C†L:µ¼¼¼  àøñãz½žeÙaÆM›6­¨¨¨sVi²uëÖÇ?ÿüóEEE]~‡¶Ÿ]»v=úè£Ï>ûìæÍ›ÏŸ?8kÖ,–eøá‡ž0LLLLKK‹ŒŒôõõuvvîÏ€­!¤:ÞÞÞÞÞÞ]H$r¹\ÈHíM*• U×ÔÔÔeÆÆÆÀÀ@!æ~ —Ë…vÂk×®õr»Ö§5õòlnn.Çqÿú׿DìîXýšU†„„äåå9rdÏž=.\pwwONN=ztRRRRR’N§«««óòòR©Tׯ_?}útÏ[;|øpzzzjjjJJJÿg•¾¾¾cÆŒY¼x±iá¡C‡>ûì³.Ë«Tªyóæ%$$Æ ._»víúõëñññÙÙÙýµHB/Ù¯¾újûö펎…:„dAhþí7¦ÎÒ½ï‰m×ú´¦~†îíí}ðàÁææf[Ç·³~Í*;::Þ~ûmáÁH"jllÜ·oß¾}û²²²’““÷îÝ»{÷îÞ +zéÒ¥ÔÔTwww;n‰a˜ÆÆF½^æÌ™ººº–––²²²&Øxúé§*++7lØ`>a`ÿG.‚côs7×î †ööv•JåããÓå43>>>DÔù‘B{ÇãééÙËVìZŸÖÔ0¡Èž={ìÜÆú5«¬¯¯7MCoîòåËŸ}öYw }=Æ•éÿ¦•çŸ~ذak×®=uêÔ- +Š””"Ú¼y³Åô …Â^!ÚÎÙ³góòò’““U*UÎ ÒóçÏ''':´´´Ôâ­€€aš .ô[<•••Bc»Åt,DÔe?g{×§¸ú ‹=þ|“ŽtiЌۙ0^%uþölWAAA#GŽÔétZ­V¥R9›é²¤0f,qg¾<11q„ ý´Ž;ÖÜܬT*gÍšÕÏýK»tàÀ"=ztçI\¦M›FDçγÈÞíJH&333-†ÿïr¾J{×§¸ú&Ù»w¯Íã€ÛÞàÈ*ÓÒÒþë¿þËü[r||üÒ¥K]]]Oœ8ÑÏU^¿~½µµÕÅÅå•W^Y·nÝ»f>øàƒ•+Wfee™—oii†Nyâ‰'üýýY– xì±Çòó󅎈æÓB @Ç}üñÇ<ϧ¥¥ÍŸ?ß|jD''§ääd‹™Hì­¤¤äܹsr¹|áÂ…Âx§B$3gÎ>|8Çq[·níÏxŠŠŠššš”Jåüùó===‰H*•æææ¾ôÒK]NQcïúQ?...#G޼~ýúáÇ­Ù5Ü™0³ˆéééÇÿÕ¯~¥Õj…±1gÏžMD‡þë_ÿÚÏÁttt¬X±â׿þudd¤Å[,ËúûûÏž=»µµÕ¼uëÖ­/¼ðB\\ÜÊ•+yžZ¨JJJŠ‹‹çÏŸß§).âøñã7n|ê©§† 6lذúúz­VëêêêææÆ²ì† n9½áÒ¥K…¥¥¥ß}÷Ý-÷ØCy£Ñ¸nݺüüü°°°åË—_»vM­VûûûËd2Žã6nÜØŸÝ_‰H§Ó}ðÁùùù±±±«V­jnnvuuU(eeeUUU<ð@çU¬¯Ïˆ¨Ÿœœ¹\¾cÇŽžgjèÒàÈ*·mÛvõêÕ¤¤$OOOaR„’’’ýë_ýÜJiôÃ?|ñÅZ­VXÈ0ŒÏìÙ³ãââRSSͳʒ’’ŽŽŽI“&EDDhµÚªªª‚‚‚C‡…„„Ѐ§gÅÅÅcÇŽ2dˆ§§gkkëùóçO:Õ›'ñbcc…½œF²çò---¿ÿýïsssG%Ì“ÑÜÜ\^^¾sçÎ.ܵ·ŠŠŠ7ÞxcòäÉqqq®®®ÕÕÕû÷ï/,,œù0~æ˜1cJKKÍ'5‰ˆˆ˜:ujllì… „q8n{ƒ¯¬ÃI¥Ò—^z)))‰ã¸ŠŠŠææf•JåççLD‡þè£Ôjµ£Ã°±.{À"«ƒeÙ”””ìììÀÀ@OOOŽã***~üñÇÊÊJGG`È*@¼Ûd´8U€xÈ*@û³ÓŸ‰wt(‰‚¯+__ç´.œ wt,váËø~¦úl³ófGà+«ÔÆKÇÑ.ý.bŠ}x1^Ÿ©>{ßéý>­†ÄJb½X¯áÒáv Hêèn*R–Žn3¶íçö;:–å‚áÂnÝn?Ö¯@_àèXÀöUÚÆÙ%«Ü¡Û¡%­£cXx†ÿHÿ‘££{AX`y6Ošg仹ݎŽ _9¬­2V<œÈ&*e½±þ áàýŽžWIf“ÇÉÆE³Ñ*FÕÄ73ûJ÷Õuºn^ænÉÝË”ËNr'ßÒ¼õ„â‰,IV_÷žö½+ü•$6éIù“~¬ßnýî­ú­—ð’±²±™ÒÌ &HÁ(šŒMe†²ÜŽZ¾ö–Ç2\:Ü—õ-áJø†îʸ‘ÛÙ”áÒáŒG ßRn(¯â«ü¿@60€ øP÷áQÃQóòss³¤YŸh?ÙÉí™,ŸÉFêxÝþÊ>ý¾ ?Š«qå§ø]Œ4Fxíʺ~¦úÌôÖ!ý¡µºµå¼âC—-æ·ç_¥«7îËø®u^«çõ³:f)xÅù„tIz á5' '>Õ}zƒnt^«¯õÙK¢¯ŸÎ)p©ÓRÖg¯nŒQ¨™÷Tï)åê7NO[¬ÉFþÁéÏýwÇ·P‹ˆøúŸc²Êx6~‰r‰‚Qp–¿Ì_6ŒR’FI¢8ž;o¯x¾N]÷3ÿsw‡Ê„&H..Ÿ1žé®Ì3ŠgTÖ(6Šˆ\×å/Z¼åƺQÔÃêz^oþ§Ž×Yˆf£‰¨ÌÐE‡Æ¾á*5ˆ Š‘Ä\åºifŒtŒ‚Q|§ÿNÏè;¿+há[no¸³î±’Ø ã/Oú0>ÞŒ·7\5v±Y“®@G–[èkýXYŸýI8vö?û°¦>E¸åõc2K>ë>Ù}Z^û{õïMÞ]*ä §È¦¤JSuÎÔADR^*üÚRÀ¡û+ 2ýU*H!gäDÔhlìå*î¬;y³ÞÞ¬w—¤ŒTA qEJy©ŠUÑ5þZ—Œ Al;ãÞù-–gÇÉÆq<×ùAG ßê¿}\ñøóòç7é63ž bƒfËg³ »G¿Ç¢ÁV„¾Ö]ë³ص>Å‘12aô#£H“¦Uë{Ê*ëùú3Æ3 ’„4IZ¡€ˆR¥©*VuÁp¡Š¯ê§ˆl¤¿³JaˆN"’ЭðÄÑ/ciÚš°q"bLÃtþ'a9Ïw1Lš4Í›õ> ?ÐÄ7õ¼—ú~¬ß8Ù¸eNËL ‹õÅk?îf·}Ð×ú±k}ö»Ö§he\Y¡àù Ë®çë»ìÎmR /H$dJ3…¬2SšID…\a?Å `;ýUÈÐÆ·¹0.^ŒW—3‚t&älA¬]ºeC›±Í…uña|ºl&òe|‰è:ßÅ,Ž÷Iï#¢]Ü®[î…!¦‘oÔóúrCy-_Û·œ0œ8ow¯ð´} IDATs»–?ü üA¡ß¦7ëíÄ8é‹~Öõ_ViM}†²¡BÞHI$u;Œ ¨IýgíŸßP¾-‰ž§˜·F³Æb*N¢_&®œ*ŸÊ0Ì~ý~#c´c@v〬’ˆÎϼª~ušlZ¼$Þ•q­6Vÿ‹û×ú¦É§u·Ê†O«Oß'½o¨d¨/ë+%i ßò³ñç†çŒç¬ŒçÝX®^ž'ËË”f3Áî¬{“±©ÌPö-÷­©ÏDB’±Ò±z^Ë ELâ%ñALÐ^ýÞ-Ú-Zæ—f+†g|YßçÏ%HÒ¤iŸê쓾ָúüZÿµŽ×åÈr| IªÕÇ Ç‹¹bk"At}àÜ#½Ç“ñüZ÷µ½ƒläÿ¬ýóråòÒOÈŸøDÿIç2ÂÄ• ÃèÑý+¦Ë93ÉÉÉýÊíj;d©ÓÒCúCkuk;¿{¿ôþ™Š™Eú¢õºõýÛ`„úp”'Nt^è€Ñzî4)’"*3”u~‹åÙ‘’‘DÔÃ`õ 0  «´;aüØq²q^Œ—ùòH6r±rq¼4þ¼áü~ý~E7ø >ô€µ;)/]¬\wˆÛ9«ôòòZ½zukkëüùó‹ƒ=þÁõ?¸ êóõøãçåå‘ÑhÔëõ!!!!!!ééé+W®4ÿÊnA]?"ˆ;Þààà˜˜"JIIé9«ìýö«««e2I$’¨¨¨Þ3pŒ?þᇖJ¥D¤Õj;::\]]“’’’’’rss—,YâèomP_ÿaaaS§N:t¨£é?5<+3Iˆ"$–-¶ZlëvÎ*¾ììì¼¼<Žã¶nÝZXX¨×ë#""žyæ™ÐÐйsç®\¹ÒÑÞA*++÷îÝëëë»ÿ~[msëÖ­Â 77·µk×Új³ý&++kÆŒDTXX¸sçÎÚÚZ"’H$¡¡¡ééé¶úÕº£R©^ýu†aÔjõ¹sç’““Qø_N)¼p%ãJ§;­¶…¬Àa¤RéäÉ“‰hÛ¶m{÷îVVV®^½úüc\\\JJʱcÇã„çù-[¶8: »Óh4Ddê_­V«Íÿ4çêê:}út"úúë¯ÿïÿþÏ´Ü`0TVVVVVöC´w8†a4;}ûvîÜ=è³JžW1úè£_|±¹¹Y©TN˜0áÔ©S7AÓhmmmÕÕÕ~~~yyyééékÖ¬¹xñ¢ÅÆ«ªª ƒT*½ë®»8Ž»pá‚é­«W¯v&::zÁ‚ÎÎÎÇÕÕÕÕÖÖúùùEFFFFF†‡‡› bcc.\¨P( CuuµR©œ…hn¹µ]»v}ñÅ ËËËMÃi4šsçÎÕÔÔX”‘ÉdÂõÙÝG[p°ÉýÁöû|x0Fâÿý§ÃwW2å—i…j1ò|#Ï2Äû²DDž ÿ‚B³Rë¤qD‹åÃrÝÍ”’t<_ËKœ‰÷ay"R0ô¬\½Jë\Ãwq7èÍ?€;c²Êèè膆†¥K—þö·¿ š?þ¦M›JJJ–,YŸœœl~|àòòònܸ±yófá7o¹\>}úôÜÜÜùóç/_¾Ü◼͛7ÓÍO\µZ½bÅŠžã©©©9uêTqqqyy¹Ð9^*•N™2e„ ÙÙÙûöí»té’©°R©|á… EEEņ ®_¿NDaaasæÌÉÉɱ~ûöŽß\YYY[[›R©,))éy}¶hÑ"…BñÓO?ýýﯫ«–Ëd²˜˜˜3gÎt^E"‘¼üòË—.]zçw„/Ðñññùùù!!!C‡ýé§Ÿ¬<^™L6mÚ´¯¾úêŸÿü§°ÊÈ‘#çÌ™“””tÿý÷ïØ±Ã¼p_뿯קIhhhFFÆ¥K—¶oß^YYéîî>tèЂ‚‹bÓ¦M‹ˆˆ¨¬¬|ÿý÷ÍÛO<==…':¬„óeÛóÕ'~~~DÔÔÔDD‘‘‘sæÌqqqÙ¶m[AAAKK ÇqR©ÔÏÏÏš¬ÒÞ÷“™3gzxxoÚ´IøB?iҤɓ'755½üòË]._¾¼bÅŠ×^{Í×××ÊíÛ;~s555 ,J¥ÂÓç¶òÌ3Ï(ŠƒZÜyõz}w¿˜²,{ðàÁ?þØôôÌ™3ÇŽKKK»ë®»,¾…ˆ;Þ-[¶üðæ?>öàƒŽ?~×®]"úw ¬¹>³²²~úé§õë× {¿qãF—“ÄÆÆÑ—_~iñÝ®¹¹Y\Ìp¾l{¾úD©TÒÍñyä‘€€"zòÉ'9ÒÞÞ®Óé¤R©“““•{é“>/…B‘˜˜HD[·n5”o¾ùæðóóó÷÷ïœØûzÔút}¶µµ½ýöÛv FxÑÑÑ·5q ݬa§Ï÷¾J„fIÏ¿«sn½Ù&ù“AêÇÈ’éˆ(Õï¤þÎ*M)e›‘>Ò)µ7{Àž1J¿ÖË•ëˆ(Fb b ]6W@gŽyHº¦¦¦ªªJxÝÖÖFD¦Z[[‰H.ÿ÷ý%55U¡P\¾|Ùt‹7),,$¢áÇÛ)N¡Û———ùBaw………?X¶··÷õñ‰.·oC½Ù>Çq¶ýȉ‹‹ ×jµŸ}öYï×Òëõ›7o¶hÖ~ävuuíåFz8^½^oþD°wï^ŽãÜÜÜîºë®Þ‡jÁšë³ªªjÆ ·ü$ü£°˜HÝVp¾Llu¾zO"‘s Mš¶Ìó¼ÐkTX.Ìvèp]ž/…BÁ²¬Á`®RÑhþ4¥%æìz=vü¼ëÌôAÜù¡ßžáþ0@ØüóÝÜ #5›ý§é¦l4ûïgÂç*4K¦ÿF²¿\WþÞ‰ºí@k'±7+6Hµÿ9îëNf:œvP€ÎñcÀZ|\uþô>!\\\æÎkñ–››Ú<*™Læêê*ôÙ°øJ'Äoss³ðÀOpp°ˆ‡Ö\ŸEEE½ùº¶k×®˜˜˜ & 2äÈ‘#'Ož¬¬¬ìܱPœ/[¯Þ3 ƒÁ”[~ùå—¾¾¾®®®ÿûß…ÖKa¹mw*Bç«¥¥åÆîîîÑÑѦ“âíííååe0ºì9i×ëy°sÈç]w„ÑD$“ÉL¯­Üî·ÕZçkf-“¤Úñ².ßûæó–r† cŒ \£º›ž÷bxa„žÚNûå¦ÞÈ„Ix"òayB^ Ð;ŽÏ*oI¸•{{{{{{wY@"‘Èårë?óÓÒÒ"##}}}»{®F.— ?ß^»vÍÛ·†½·ßKˆ/¦áÑìÇ&Ç+| qqqF?\ŸÇë­·¦N:eÊ”ÖÖÖ£G~ÿý÷Ö€óeÁV÷“^Òh4*•Jè{éÒ¥%K–˜¿+ÜmúÚÿÐ&z¾víÚõè£>ûì³›7o>þ|``à¬Y³X–ýᇺ|Í®×ó`×§ëÓÅÅeΜ9·Üæ‘#G„v¶¾2>{ÏlûÃíª—¿ ôs 9CìÍi[»úE«"žˆä|·™0XY¥ðöW_}eåÓ=P©TóæÍKHH0.\(..¾víÚõë×ããã³³³ÍKš:·ôKýp}QEEÅŠ+üüü† –’’““““••µeË›Œóå(õõõ‘‘‘žžžßrwwÚ*û!ç7××óµk×.__ß1cÆ,^¼Ø´ðСC=ô©¶÷õÒ÷ë#â=ÐÃñ¼0A¥'ÓE›=r28-À 5²Ja»vûyúé§*++7lØ`þÙéîînQR˜9J¥Ryzzö<¸¸í‹cïí÷‰0(nPPývaÃã~b§®O“úúúÝ»wïÞ½ÛÃÃcâĉ¹¹¹O>ùdyy¹53eá|9VUUUdd¤Ð¯Þ‚°P«ÕöuN+õõ|1 ÓØØ¨×ëÏœ9SWW×ÒÒRVVÖ›Û£=®çÁ®O×gSSÓÓO?m¿`„CCCl5/ng¸?ÜÞ®ò¿deñ¬AN¼ŽºÊá¡gžˆ"XC‘á?ÚJ]ÈèËþ’UÖò%`€oü#Ì$–œœÜåÀ·tËF…B‘’’BD›7o¶ø9V¡Pt._YYIÝ 5Ñe¿¾nß‚Íã·7a"Š˜˜ó|mHÜñ2 #t24ìããC7Ïi—nYÿV^Ÿâ\¿~ýã?>þ¼D"Œ ç˱„™!âââ„fIswß}7•——Ûpü{ÜOžþùÉ“'¯]»öí·ßþôÓO¿ùæ›Þÿâ&°áõlÁ®ðöØþ@»>…±ÙÓÓÓ͇г!Ün{§ ¿tìreiªLëØ`̹Xš„óøÏG'ÇJu2†ˆˆçù³†AÐú0@ ‚¬òرcÍÍÍJ¥rÖ¬Y Ó‡„‡‘LÏ,uGÃn·h’˜˜8a„Îå…QÑ333->uâã㻜¯²¯Û·wü$‰m“ÏŠŠŠêêj‰D2{öl{ $îx¥RéÌ™3->ðÀDT]]Ýå|n½¬Ñ×§õ„‘!,êÁBXXØÝwßÝC`8_vuËú/--½~ýº‹‹Ë½÷Þk¾ÜÍÍ-++‹nŽ<)zû&vºŸ9R§ÓiµZ•Jål¦O ®g“^¯hvÚ¾ï']*((èèèðððxøá‡»,`e¶y‡ßìÍæŸï"Ôð’“Ü/·‚{¤ÜS2µ/ˆˆáy72&³ú‡e_Æãáì7È 5‹ŠŠššš”Jåüùó…§¡¤RinnîK/½Ôe“B_·oïøÍ®Y³æÝwß9rdweDøÛßþ¦Óébcc—,Yb­D"‰‹‹³r&qÇk4GŒñßÿýߦS6qâÄÑ£GÑ×_ÝåŽzYÿ¢¯ÏÞ ŽŽŽ6_âââòðÃÇÇÇwttœ8q¢»_ýõüüüG}´‡íã| lu¾LzSÿz½^x‚ë‘GÉÊʾa/X°@¥R={öøñãÖlßÄN÷“ëׯ·¶¶º¸¸¼òÊ+ëÖ­{×Ì|°råJ!76gïë¹OÇ+š¶ßŸ×go´´´üýï'¢¼¼¼çž{.88XX.“ÉfÏž½bÅŠ¾þ|`±ý;öþ`ovú|á3½âúÍ!oÒ¤†×Ô«•mï8µ­pêxN¡Í‘rѽ›½#_Ññ¦¢íMEÛÓ2u/wÝÃ*u<»›ûåê –ðK”ê·•m«•m¿’ë…|:xú»®¿gÑÔGËþñãÇ7nÜøÔSO 6lذaõõõZ­ÖÕÕÕÍÍeÙ 6:t¨Ë÷ìÙ3uêÔûï¿?--M£Ñxyy9998pàüùóæÅ¶nÝú /ÄÅÅ­\¹’çyáÊ’’’âââùóç[´Iêtº>ø ???66vÕªUÍÍÍ®®® …¢¬¬¬ªªJø¹ÔBŸ¶oïøÍ 2DøŒLOO?|øpwÅúêâÅ‹o¿ýöܹs£¢¢–/_.Ì=àäääáá!•J·lÙ²wï^k¶/âx Ãßþö·gŸ}655µ¹¹Y¥R ¿àþðÃB¯.õ²þE_Ÿ½”=~üøöööÆÆÆŽŽWW×ÀÀ@‰D"ÌÞÃØŒ!!!BåDDDô°}œ/Ûž/“^ÖAAAHHH^^ÞìÙ³Ÿ|òI½^/ÔImmí{ï½gýöMìq?éèèX±bůýëÈÈH‹Ý±,ëïï?{öìÖÖVó§òì}=÷õxE½ý¥K— /JKK¿ûî;‹wûíú쥂‚¹\þÈ#Œ5jÔ¨QZ­Vh—’É––___ký½cï½”ðÌ3ϯ…ÛÝÝ}ÕªUÂ’#GŽ|ñÅ]®h§ÏwZˆ}[çük™:TòËÊJ†ÈìËÖXÜ‹¼Òýf;ˆ‹±·õ¼Ê·z¹‚¡17[&fQ]7Ò{:§ëÔ“ÜGVIDÅÅÅcÇŽ2dˆ§§gkkëùóçO:ÕÃGøŽ;ôzý=÷Üãíí-‘H®\¹ròäÉÎ %%%“&MŠˆˆÐjµUUU‡ ¡®ܯ¨¨xã7&OžçêêZ]]½ÿþÂÂÂÉ“'wF_·oïøMŽ=š““£R©:Ï(m¥ŠŠŠ%K–äää 6,(((((¨½½½ººº¼¼üÔ©SVn\Üñá×÷î|ø£>êy²¸ «‘8Ž{ûí·SRR²³³ãââ8ŽkhhسgÏ?þØÃ|ôp;Áh=Ð+­l Y%ˆ‡¬ÄCV â!«ñU€xÈ*@’ðð𬬬„„///–e›ššNŸ>ýý÷ß×ÖÖv·ŠL&ËËËËÈÈðóóÓëõ—.]úþûïKKK{Ø‹ýâ¿= ´ë“ˆ¢¢¢¦Nš˜˜ØÔÔ”ŸŸoóò½1bĈyóæõP ±±qñâÅæK¼¼¼V¯^Ýeáï¾ûîË/¿ìò-\Ÿ·__ßiÓ¦ÅÇÇ;;;wttÔÖÖþøã………ŽŽ lC.—/Z´ÈÇÇçwÞ¹|ù²m7ñÚk¯Ñ›o¾yþüyÛnlÎaYåã?ž——GDF£Q¯×‡„„„„„¤§§¯\¹²¥¥Åúòv‡a˜çŸ~äÈ‘D¤Óé4M``àƒ>˜™™¹zõê+W®XÌèÑ£…`:::ˆ(000000;;û“O>éò ™³³óÂ… £¢¢ˆH­VËd²¤¤¤¤¤¤î¾²Û;þÛÀ@»>æN:tèP;•ï=­VÛØØØå[ÎÎÎÎÎÎjµºËw Css³ÅÂöööÎ%ïÌ볆ge"" Q„IJÒV«ô'‰D²hÑ"???­V[SS£T*£¢¢Ž=êè¸Àf‚ƒƒcbbˆ(%%ÅæY% .ŽÉ*³³³óòò8ŽÛºukaa¡^¯ˆˆxæ™gBCCçλråJ+ËÛ;žx`äÈ‘:nË–-?þø£Ñh ž={vddä‹/¾¸|ùrNgM<ÇŽ»páÂÉ“'…ïÜS¦L9rä¬Y³jjj~þ:ò’€ IDATùg‹òO=õTTTÔõë×7nÜX^^Î0̨Q£fÍš5a„êêêâââ~ŽßÞX–5íøz ]Ÿ*•êõ×_gF­VŸ;w.99Ù¶åûääÉ“M‘&/¿ür\\\çëMpåÊ¡åá–ûõ)ÎÿrJá…+W:uØi•þïçç×ÖÖöÚk¯555‘B¡àyÞÑqÍTVVîÝ»×××wÿþýŽŽÌcÀJ¥ÒÉ“'ѶmÛöîÝ«×뉨²²rõêÕqqq)))Ö”·w}úàÁƒ¦fœÚÚÚ 6\¸peÙÜÜ\‹Â!!!iiiDôᇖ——ÏóÅÅÅŸþ9=òÈ#2™¬Ÿã··ÜÜÜÇ\¥²öI¶. ´ë“ˆ†Ñh4;vìX¼xñ¾}ûl^Þ&BCCãââ´Z­õýûõi‰çUdt¦×–ÈïJFaÀ!{&¢3gÎ)%iµÚÛò;Ïó[¶lY³féÀËYerr²§§gGG‡Å÷Ý7nѽ÷ÞkMy{ÇãäääááADÇŽ3_ÞÒÒrñâE" ´&ž.ñ<öìY"òööî?5558qÂ|ùþýûëëë=<<„œÓ±ñÛ–^¯ÏËË[±bEnn.ËÚøh×'©ÕêÅ‹oÛ¶­Ëþ¢Ö—· !,..¶r§·ÁõiD†ÙrÍj§ö·œ:V9u¬T¶ÿJªQ €ô2UÂ-«×(ÛV:uüÙ©}¥²}†TíIÛîE©TQkk«m7 zÀ YЙ3g„VseeeãÇOHHJ¥lj+oÎËËkÁ‚nnnï¿ÿ¾ÐŽg}cÆŒ™3gæææ~úé§¶Úø@»>‰È`0ô)Uëky빸¸¤§§ÑÞ½{­Ü”5×g/ë³dHt3dZ óïáX]~ŒŒK‘þ¢QÖ‘Ä!QIxã,¹v¸TH S`Y2CšT½I§}zfff}}ýÆkjjf̘áëë»oß¾îÆ‹ê=¥R9bĈ¡C‡FDD¸»»Æššš¢¢"+{ ˆŽ¿—õ£P(Ö®]«P(V®\Ùùþúë¯s—ŸŸoþp¸B¡Ø°aƒEá¥K—ö0˜Ý}÷ÝcÆŒ‰ŠŠrvvnnn.--ýöÛooܸÑçJ€Êm•¡¡¡DT]]Ýù-áq¹\ º¼¹#F„„„¸¹¹;ÖVñ‘ð]áW¿ú•yCÙÈ‘#CBBnܸqøðáîö%ZBBBjjªÁ`èü­]Hf<==;¯uéÒ%"Šˆˆ°XÞÿñÛÜÑ£G—-[öÍ7ß¾üòËsçÎíÜŠ+Î@»>…œœ¹\~úôé.롯D_Ÿö®OÆèMÿþωé¶ïhË=~3¥4ò|½‘i¸ÙBéÉð/(4JµX>,×ÝL)IÇó—l£ñ—ÜRÁгrucm‹eÓM¸MZ­¶ÉLç_ÌåäääççÇÅÅ)•JWW׸¸8___‹2nnnË—/â‰'bbbZZZ®\¹âææ–““óæ›oŽ5ªËÍ>÷Üs#FŒ ¢ˆˆˆyóæÅÄļøâ‹2™L©TN˜0!11њ㎎^½zõìÙ³‡ ¦Õj…ä*22òÉ'Ÿ|úé§­Ù²¸ø{_?Z­öÈ‘#D”‘‘Ñy§Bá“'OZŒ7f4Ïš1n}Á<þøãùùù))),ËVWW«Tª¼¼¼7Þx#22²‡µLhk4š[îÎm•~~~D$<†9gΗmÛ¶´´´p'•JýüüL_OûZÞ\YYY[[›R©,))±Uõ·lÙÒyœ½ .GsîÜ9ó·„oužžžJ¥Òüƒ¹ßâ·+N÷üãÇ|ì±ÇÒÒÒ’““wíÚõÝwßYùàÖ@»>>Óã¾{öì願‡‡Ç3Ï<ãåå¥Óé*++‹ŠŠº{Kôõiïú\¨ìÕ·[–ç•i†!¢*ó¡ÎIh™L•p³d)C¾,Ÿ+åvrr{Ùƒ0†»GúK›ù ƒäcRM ųܳrCr†yD¦}Gç,zF£Ñ4‡Í¤I“&Ož¼ÿþO?ý´7놆†fdd\ºtiûöí•••îîîC‡-((0/òì¼yó"""ª««7lØ ,“É&MúÿìÝy|Tõ½ÿñÏYfIB’°& k”UÁ°¸¹X¬âR´ZÛʯ´ é•Úz}´U««Hkq+¶´¶½E¥ ÷º€¬†}AH!!ÛÌœ9ç÷Ç‘¹cBr&É|=}ô1œùžs¾ç›oâ¼ç|Ï÷;ùÆo¼ï¾ûNžúè£çXJ³Í26 ¥E!UÚÛìÀó­o}˾s×]wmÞ¼¹²²Òï÷ëºã¸|¸¢¢¢|P×õ¾ìtp|Ã0-Z´yóæï|ç;?øÁì›7o~õÕW›qäá˜1c¦OŸn¿>tèÐË/¿\PPP·ØÖ­[;–ššúýïÿÕW_ݳgišöˆÄÉ“'ÛebbbÂ[ uêß:Ž?>þüAƒM›6mòäÉ£Fzùå—#ùŒØÖúgÛ7tèÐ:”””lß¾½Þ†aƒÁ„„„Ñ£GÛ[ 4iÒ¤7ÞxãÃ?¬·¼³þÙFÚ3[ &«""~ËzÁ{öÜ­A½“âžäò‹H®X!­*C‘²Â”Wý^ß¹°ûLý­€ûV·_Dúhfš,²¢0@wÔ¨Q[·n]¸p¡}û«¬¬¬î—hW^yåå—_^UUõÌ3Ïœ9sÆÞþþ÷¿'&&Ž5jÚ´iO<ñDø.š¦ýᨩ©ùâ‹/Ξ=¿}ûvû{‡Ý»wÛÕFRíªªª… †o1 ãÍ7ßÌÌÌÌÈÈèß¿„©²IõojûìÛ·ïäÉ“ÉÉÉ999[·n mÏÊÊêСÃÙ³g^ôø‚âââ&OžlYÖ‹/¾dë÷û_ýõN:õë×oüøñÿú׿êÝ·²²Òº<š …ÖN•š¦éº."ö-Bƒg,˲'{´·‡¦-mjùº è÷‘¶ÿÿñ×]w®ëv¨ËÍ͵?[ÿá¨ûè£3eeeìØ±ãe—]–žž~ï½÷¾üòËu?fƒÁçž{nÖ¬YIII=ôP ¨©©i×®¢(¡{Aö5¶rý[Ó¶mÛöîÝûðÃ÷êÕkРAŽSe[ëŸ{¡Î÷ßÿ|˽”——Ï;7==ýÀgÏžMJJš8qâØ±c§OŸ^VVVkV›ãþÙ¢íYf~eÜjŒ"^¥žb½Õÿ«Àž¯ä[Ϲu5:kVŒXÕRßþ-æòsÛÔ}_=õzÃ5Ùå·/§, F!U,Z´¨á•#FŒ‘5kÖ„"SȲeËFŽ™‘‘‘’’þŒ_QQQèû¸ŠŠŠøøøÐƒšv\q»[$Þ8p ##Ã~î=Mª¿ƒöY¿~ýäÉ“‡ ž*íá¯ëׯoÌ× <Øãñ>|¸îs›kÖ¬éׯß!CΗ*E¤¬¬¬Ùçc´ÖN•Á`0 †>‹¿ùæ›ÉÉÉñññûÛßì»=ööг7M-ßÒõ±ÙsK.\¸ðرc"òücüøñ·Þzëþçþò—¿lxÞ‚FÚ¶m›ý»k×®·ÞzëW\1wîÜßüæ7µÆw‰Hqqñc=6~üø¡C‡&''»ÝîC‡mذáÈ‘#<òˆˆÔ4Ø:õoM·ß~{¯^½N:UoJi¤¶Ö?Û¾ôôô>}ú\pA‘“'O†fÙ9~üøë¯¿nšf^^Þ´iÓ¶oß^k Ã6Û?ŸñÅž {}²î›àªç'ÛñÜó–nE鮜÷ùÉvŠYÝŠ·Ëê Xö =ÅuÎk(Ê Sé®Y"’¤ZÍ=l£¬]»ö‚¿)"Rï×F%%%ÅÅÅ©©©çë!µŽßB¿˜.—+>>ÞÝÀ7J\°þÚgݺu7ÝtÓÀcbbBµìÇ8ëmª^½z‰H»víxàZoÙ“o5<¥3©."Q[SSšàñðáÃsæÌ ×þÚ5<5µ|K×gÈ!ǯ©©yöÙgKKKí–e­Zµ*55u̘1wÞyço~óÇõ©«°°pþüù?úÑrrrî¾ûîyóæÕ-SUUµlÙ²eË–…o2dˆˆø|¾Ö¯ÿ3ϼÓÔOµÕ°"bG6räÈÎ;×zkêÔ©"ràÀÖœÅÚãñØþÕšy¸oß¾7ÜpC«U#ÄqûØã]‡n¯üÑG5K}ì¡ì^¯wúôéÆ'÷êÕ+;;»YjhiQøôìG,¾õ­o5ÊþOr—.]|ðÁ¸¸¸ýû÷×úÚÔòáRSSçÏŸÿ /ØO5K}Ö¬Ysúôi—ËõðÃ4È.Ÿœœþøãf©=;åƒ>رcÇ™3gú|¾`0hϼgÆ_ÿú×V¶èÚµ«ý}mzzúùÊtïÞ}ܸqöÔš.—ËŽ‹ÇŽ{á…ê§g̘1¹¹¹"RYY©ëº]þèÑ£ ,¨;ûh$õo#Zz@i[ëŸÙÙÙßùÎwì×ö‡ÔÄÄħŸ~ÚÞ²yóæ¿þõ¯‘”iLÿ´õìÙ3##ã‚ ŠØn¸á†®]»ŠˆÏçóù|ö¢ UUU‹- Ÿ§ÇIÿld{¶‚rQŸõÇ~×UÝMûòaE¯"ö€eºjnhD/N<÷½_;ó±4r—wn"מ»3é «ÕS^ôÇœ‘6=9ŠišÏ?ÿü¬Y³ºwïþ裞:uªºººsçÎ.—Ë0Œ—^z©5‡¿Ú–.]úƒü 33ó׿þµeYöoP~~þ† fΜÙÊ#?#i{áJEQÖ¯_ߌc@¶oßþÒK/Ý}÷Ý8pà‰'ì? ªª.Z´hÓ¦MõîzXÝžvÐÆEíù™7ÞxcïÞ½yyy=zôp¹\EEE›7o^±bEMMM³”·mÙ²e̘1qqq|ðA3ÖçèÑ£óæÍËËË<%%¥}ûö~¿ÿСCùùùkÖ¬9ßšÛ¶móx<]ºti×®]0€– 40yNNNkVЖÕZ`Âv|3 h³H•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çH•çôhWà+nqÝ2Å=å]ÿ»¯^‹v]š¬›ÒíÉØ'‹Ì¢ÙU³Eù¿íÉJò‚Ø+0½jz z®gn½ø–Û+ooÆò‹‹ºÿ©¶•*/jô "²2°2"MIó(žÓæéÝÁÝËåÅVñ¯eˆ>$YMÎ7òOZ'.é±<7¸o¸J»*EM©±jvw¾á£LÊ_o«‰¤}ZâøMê?¿ðü¢ÞÇ~¯Æÿ9îÏ¡·66-ð/h–K¾ž¢“*³Ô¬9Þ9ÅcXF¡YèU¼SÝS‡iÃ> ~Zÿ–L÷LŸèš("VÅóHŠ’2Ñ5q¸6ü©š§>·>¯»Ç ïŒL5SDzi½~ìýñ}œí}Ú<íU¼7¹oÚܽÛÜ*œ $<ì}¸—ÖKDŠ‚E5VMšš–§å]ãºæ÷¾ß¯ ®kør®s]'"++.ÖSíù硎jÇb³¸Ä*IQRF¹FõP{ü´æ§A Fx½-*Âöiöã7µÿ±Ž˜AS=CË0,ã y0ôÖQóh„•¾æ¢*c$懞zÏ'Æ'Ïûž/•RIWÒð<çΫw—IîI]Ë̲?úÿ¸%¸ED<â¹Ó}gž+o–wÖœê9R^¾Öç„ubvõì45í¿bþ«‹Úe–wÖ"ߢMÁMó¼ó²µìúÀÝþ/S¥j©?öü¸—Öëˆyäùšç ­Bq‹ûf×Í7¹oú¾çûÇ«f}v¾Ëé¦tËÖ²ì3÷5pÕšhó¼ó¾0¿xªú©³@Dúª}ñ>ÒMë6H´ÙÜÉõ¶¨Û§Ùï ÿ,ö/–ssÀV[Õ¿¨ù…ãÚ¨% ÏUæéyíÕöÕVõ³¾gíH "‡¬C×<~´Ö.GÍ£G¬#öë³rVDBG¶ÿéO¨ð(}”]ŸPD ùgàŸ–eõÑû¤*©õ^K;i7BQn–¯7Ö7pÉ"°‹ý‹-Å ßX,‘x%>ÂëmQ‘´OK¿©ý@‹ŠÂØZù$øI#Ëg¨"¯ÄÿÈý£Zo%¨ "’¦¤5°{À „ÿÓoùkè­ö‘ÝÁÝRÇIëä1ëXš’ÖGësÌ8V·ÀµúµÅóïÀ¿J î»ä¿ˆ¨_Íö^o³‹¤}ZâøMí?ZTk§JxÜŠ[DJÌ’Fî’¨&ŠHGµcGµc½tE÷ˆÇÙB‘º¥Ç©q"rÊ:Uo“æÉ45-QI¬û–j©ã]ã ËxÏxÏÁ©Ï§E¯·©"iŸ–8¾ƒþ Eµvª4İ_h¢5rK,ù§ÿŸü½Ùëc\DQê-`o·,«î[¹z‹xç IDATnGµãúÀúÓÖéf¯R ]¯³Êˆ£öi‰ã;è?ZTk?W”`…U!"”ÜÅÎlij‹ û *Á ³BD’”¤z $+É"rƪg•ȉúDYi¬lÞ*µèõ6U$íÓÇwд¨(ÌÖó…ù…ˆô×û×}+V‰­»q_pŸˆ ÔÆI\KÔç3ó3¤ªûVª¤¦j©¡2áz(=²ô¬Ï‚ŸÕ}+B-}½Må¬}ZîøMí?µ(Jý7E8…T¹ÙØ,"£õÑí¤]øö¾jß<½žõ·[N›§½Š÷^ϽŠÕü‘`­±VD®Ö¯NQRj½u›ç6ÙÜ_l×zë:÷u"ò®ñn³×§¥¯·©œµOH¥GŽšÓÀ…4õøMí?!ÕVµˆ´SÚÅHLÅ4IRåcÍ)ó”Wñ>äy¨ƒtÝÒÇéãf{f–Q·¼¡¯ø_±,k˜>l–wVg¥sè­X‰¨L„Hê³Ñظ?¸ß­¸çxçØó‘ÚG¾×}o®žkXÆÿ’Z»ÄKüpmx©YºÑØÉ©ëÕÒ×ÛTÚ'ä õŠ_Æüò‘˜GîpßÑ\Çojÿ ©–ê2³LDnvÝüå&Kú(}B'à@Vñ‰ïß s½s³ô¬Ú‚ÓÖéx%Þ«xw;˜G¾áþFÝ]¶·,ô-ü®ç»ƒõÁƒõÁǃÇ}âKP”UQŸ¯y~}ðËE6ÀTÌù5óñ>ÒCëñxÌã%fIµU¢¦¸—a } ëïÌså¹÷²À² Ÿ·‘_ïcÞÇì[ƒ[ß¼}Á36PÞAû„tS»Ù#N{j=å˜êžz¾]Ö×}RýÉD}âm@²š¬‹^n•f~¶3¸ó€y Âú”IÙ£ÕŽs¡è¢tITO›§ww¿c¼sÜ:^«°&Zžž°Í» H-^o¦–i¿(2‹sº†Ë7©}­7ÖÖG·WÚ¿å«bM=¾ƒþc{+ð–ßòqIR’4Ñ ÍÂíÁíŒ ï JkBäää´fUmÙÎ;ënŒÂs•€K©à©à©à©à©à©à©à©à©à©à©à©à©à©à©à©à©à©à©àœÞú§Ô,ó2åË×¥¢˜¢„ÞŠ+F, ˆ”GœxãÅt×ÙX댑ï_gQH•]TsŽ·Æ~ý³êØSam¼îŸà ˆÈAå7þ¸Ot·«&K7km¬uÆÈw€¯³(¤JD"99yêÔ©YYY±±±UUUÅÅÅëÖ­[³fM´ëu‰Såšk®>|xZZšËå*--ݱcÇ»ï¾[ZZíª]@zzúc=f¿6MóìÙ³Çß¹sç‡~XYYݺႚúûîv»gÏž””ôÛßþöÈ‘#õ–™={v¿~ý·ÜsÏ=Í\o ë{O<ñÄÁƒ[â ¸”Se‘¥º‚""šHºVûdsíÒš4M›={v§N|>_QQ‘×ëÍÈÈØ²eK´ëu‰s»Ý>ø`VV–ˆ†áóùRRRRRRFõÜsÏíß¿?Úl”’’EQ.¿üòË/¿üúë¯ýõ×?þøãh×ëbÕ¡C‡gžyæìÙ³3gÎl¡S8ø}ïÒ¥KŸ>}DdРAçK•……….—Ë>~FFFKÔ|Ý\Ê©ò†×~/æ¯cªZh—Ö”••Õ©S§ŠŠŠÇ{ìôéÓ"âñx,ËŠv½.qwß}wVV–ÏçûÓŸþ´aÃÓ4SRR¦OŸž••õÃþpÞ¼ygΜ‰v/ì'?ù‰ý¢OŸ>S¦LÉÎÎþþ÷¿³zõêèV çãà÷ýСCï½÷^rròG}t¾2K—.µ_$$$,X° yë ¾ž.Î9`-+NÌXis÷U±âÅ´'j ]ºt‘}ûöÙ1EÄçóùýþ:D¤gϞÇ‘—_~yݺu¦iŠHqqñüùó;Ö®]»É“'G»ŽMsàÀ§žzjõêÕŠ¢ÜqÇ]»vvP?¿ï–e-Y²dþüù¡]ZÁE–*Ó$x¯»æ™˜Ê§bªžŽ©úµ·ò›zM\ˆ—ƒ5ãAwõ|oůcª~Sùkoå4½º½›÷,^¯WDΞ=Û¼‡EF-"………µ‹úýþåË—‹ÈðáÃíñ„—?ýéO.—ëæ›oŽv]P?~ßÀÅâb;\óOsù4åÿ¦cW¬k]Æ =ø»ïqÑ¢R+Í2§»}Ct;@*¡ŠrsõêÅ~ï3¢FVUuñâÅá[ÆŽ;vìØÐ?Ÿ~úé½{÷ÖÚëþûï>|ø_þò—U«Võë×oÒ¤I=zôEEE«W¯Þ°aCí«Ð´1cÆ\uÕUiiin·»´´tïÞ½+W®<~üxx±¾}ûþä'?Ù³gÏüùóo»í¶#Fœ8q⥗^***ÊÎΞ6mZrròûï¿ÿæ›oFrÉ"âõz‡:`À€ôôôÄÄDÓ4‹ŠŠÖ®]ûþûï×*™””ôôÓOûï¿ßãñL˜0!77·sçÎ>Ÿo×®]ýë_ËËË#©INNŽˆÔûüá¶mÛLÓôx}zÿþýkÖ¬9zôh¨X§Nž|òɪªª3fÔ:¤I“n¾ùæ5kÖ¼òÊ+ö–Hú[˵ç£>z1>>>T[ÉÏÏ_¸páùš¨1ü¾{<žE‹Õ:Îܹs‹‹‹#©I-lOðõåTy™b†QÎ;v4[5îpùEÓ²J,U+Yi¯X?ðÔüÚS[¯·¸ýç"¥ø-«ØÒbÅJR-ñ(rŸ»úi_l‘Qâ }≉‰‰‰ñù|á³wö3fÌ·¿ým»Ý¼^offfÝšðàƒ¦§§‹È±cÇìÙhÆŒ3jԨŋoܸ±îa¿÷½ïÙ“‚¤§§Ï˜1ãÕW_ýÑ~TZZêõzo¸á†={öÔ=KãõîÝûÁŒ5 ãøñãÅÅÅ:uêÙ³gÏž={ôèþ!>\=~øÃvìØñøñã§Nêܹóˆ#ºwïþóŸÿü|Aî‚bbb:vì("õÎ`YUUuüøñÔÔÔ®]»†ReÈõ×_?uêT¿ß_\\ SSS¿ùÍofeeÍŸ?¿n}î¸ãŽqãÆ‰HEEEaaa§NÆwÕUWÍŸ?ÿ‹/¾h¡ëݶm[ p¹\™™™á_48è½{÷ž1cÆe—]&"'OžŸÏ~QSSÓ¼õmM”SåCÞF}ÚP-ëVW ‚Ê+þûÎä`͘îªÑIV­±º±Âp·luë讣uÃ~½3¨½î÷V‹""YªqŸ»&F·¢|Ëåû­?Öñ)LÓœ5k–ýzòäÉÿñÿñÑG½ñÆÙ·[·nÇ?|øð¿þõ¯C‡%&&0 Öì,ªªÎ˜1#==½°°pÑ¢Evp¹\“'O¾ñÆï»ï¾“'OÖÊT½{÷>yòäܹsSSSö³Ÿ¥¥¥Íœ9sñâÅùùùsæÌÉÊÊÊÉɉ$UíÙ³gÆ {÷îµ?˜êº>eÊ”n¸áꫯ~ÿý÷>\kMÓyä‘Çÿö·¿-,,‘¬¬¬Y³fuíÚuÀ€[·nuV“N:Ù/NžúhÝ%@šåz Ã(,,´³z(U:èÝ»wŸ={¶ÇãÙºuëßþö·ÐýL—ËÕ§OŸ}ûö5¦2 hjkéö|íµ×äܰÕÕÕ¿úÕ¯"¼Àp~ß@x^xá…ØXçpêrО¶ÐmÞÇ €¶ïâx®2[ Ú·%ý–õ¹H)"[ƒz(Iæª Ý²k!¡HYaÊ«ç"¥ˆì3õ·_V¬f¦)Íü€e#5jÇŽO<ñÄŽ;ÊÊÊŽ9òöÛo×ú„wå•W^~ùåUUUÏ<óLèžR øûßÿ¾víZMÓ¦M›Vë°š¦ýᨩ©ùâ‹/쇾¶oßžŸŸ/"»wï–°0æLUUÕÂ… ·mÛº×aÆ›o¾i‡™þýû×ÝEUÕ7>ùä“v$‘}ûöÙŸ€{õêå¸&111¡*Õ[ ººZÎ=ÿVË’%KÞzë­Ð%|üñÇ+W®‘ &„ßJŠ‹‹›—Ÿ«Ø† î%ü­õ†+t9}Ôè¤Ê‚‚‚E‹5<rĈ"²fÍšºËc,[¶Ì²¬ŒŒŒ”””ðíEEEö늊  Ýé²?>ºÝ-rÓøÀ"Ò¡C‡ºo×^{­Ö¢ vBˆw|ÆÐ4<çflOÈéñxêÖçƒ>¨µñ½÷Þ3 #!!!<¨ <Øãñ9räÓO?­UÞ^ì~È!uÏÛ\×kM …gizÈÌÌìÑ£‡ÏçûóŸÿÜøó6I“ú[tÛóÒã¬=CÊÊʈ”|Dyì3¾ØSaÉv²î›àªçã{ÇsÏ[º¥»rÞ[í³:²'›D±¬ŠeÏÐS\缆¢œ0•îš%"IªÕÜÓÁ6ÊÚµk~êRDìyGê°ZRRR\\œššš‘‘q¾™?jÿ‚§sÆårÅÇÇÛC ?áªùTÕùW'¡ËÑu½Þì<º!Ù°ÒÒRû½.]ºØ YÎÝ k×®Ý!-hƒ.ŽTyÌúò3k–t‹å—(Dz´ÔTÅ‘t5¸6ø•{¥íÄLV¿üŒ^lµ• × +++ãââ’’’ê]þ!))IÎÍéÒjî¹çžìììC‡-Z´(|öûÆZkªªª:uêTÇŽ{öìùÉ'ŸÔz766¶sçÎrî¼Æ°Shx{–––JS†e6£z<˲BÌ9èöë´´´V©ò…E±=/I¶g#g«»¶r‡¡a{‚_~Û¯ÊÍ®F=ÃÖ:ö«X®f\öÕG'ót¿K±,k°í¦w{bÕÔ}+%%Åž—%|E¾–æñx $"¯½öZx¤”ú&ÅiöB”C‡­ûÖ AƒTUõù|uÏP¥îİ]ºt±SÙ¡C‡Bí•srrââ⚵⠪ê¤I“DdÇŽáã]›ÚìkïÓ§O#'þµï}y½Þº·7›åÆx+·gÛ¹IÛB¢Õ?ÀÅåâøHTdi»Œ/óÛhݸÛU,AQ,+AÌ5p‹«&9«w|t-KDtEp×tW‚"âëZÍ7Nÿr‘¦~ª ·óúõëEdäÈ‘öm·pS§N‘ÔJw-ÊãñØŸÔ ÃßÞ·oßn¸¡ÕªòÑG‰HÏž=í¬âr¹n¼ñFÙ°aCÝ9ct]ÿö·¿]kãõ×_/"………ÇŽ mܶm[ii©×ë>}zkŽ7ž6mZ=À?ÿùÏðíMíŸ~úiaa¡¦i÷Þ{oc&R²ŸáTUµÖíÍ^½zM˜0ÁéÕüŸVkOû9Û¸¸¸zו¹dDØž½zõÊÎÎn‰Š€6¥í¦Zþðœ97åM®üyLõ3ÞŠßÆTü*¦ê{ßÝèݸÕ;fyªžðT<᩸ÇU}áÒÚ帥®:·`fÍšã­~Ö[ñŒ·â›î€=‘O•%ó·È2Í%??ÿÀn·û¡‡²çÿ‘˜˜˜oûÛC† 1 céÒ¥­YŸòòrûÖÙwÞÙ¹sgUUSRRn¿ýöY³fÙƒ-[hÙ’óùüóÏ7nÜ("ßýîw‡ f'Þ”””|055µ²²rÙ²eu÷2MsèСÿïÿý¿öíÛ‹ˆ®ë7ÝtÓÈ‘#Eä­·Þ /iÆë¯¿nYVnnîÌ™3ÃïøÅÄÄäää4ûʽ{÷ž5kÖ¸qã,ËZ²dIhÑ›ƒþðòË/ûýþË/¿|Μ9¡]DDÓ´ÌÌÌZ+ÁTWWÛ¡úæ›o¶Ÿ¸óx<×_ý#<Ò,W×jíYSSc/ý:yòäÐÆÞ½{‡·À% ’ö¼êª«æÍ›÷ðÃãßh•Ê€¨i»#3k)õYìw]ÕÝ´/Vô*"aX¦«æ†FäÊÄs9ºÙØÅ-Þå€Û£ÈµçîLzÂjuÆ”ý1g¤MOVašæóÏ??kÖ¬îÝ»?ú裧Nª®®îܹ³Ëå2 㥗^jÍ᯶¥K—þà?ÈÌÌüõ¯mY–}‡$??Æ 3gÎlý‘x¯¾újûöí333¿÷½ï}ç;ßñûýv*++Ÿ{î¹z: ƒ/¿üò}÷Ý7xðàÒÒÒ¸¸8{øî|ŸŸ_«ðöíÛ_z饻ï¾{àÀûÀddd<úè£åååeee111—]v™®ëK–,yï½÷ÂË/_¾ü¾ûî4hÐsÏ=wúôéääd·Û½jÕªªªª)S¦D~¥­Óž"ò¿ÿû¿7ß|óu×]—››[SSÓ¡C‡˜˜˜õë×Û£ˆ/"sçε_ìØ±ãßÿþw­w·g·nÝìÝ»wo¹Ê€¶à¢I•"rÊRŸòÅÑÁªÑ] Æ+«ÜR Lõ“ ¶Õlå…EÎQ”<[ íÝè­ã+`ÉIQwÚ‡†Ë§\wƒËËËüñ±cÇ6Ì^7¢´´tïÞ½+V¬ˆÊŠùùùUUU“'ONOO÷ù|«W¯Þ´i“=aiëOÄâóùž|òÉ«¯¾zäÈ‘iii.—«¸¸xçÎ+W®´ç2©×Æ‹‹‹o¸á{EÇC‡½÷Þ{k×®­·ð† >ýôÓ¼¼¼þýû'%%µoßþìÙ³ܳgOsE”¤¤$˲*** ¶oßþÁTVVÖ[ÒAøôÓOçÌ™3f̘¦¥¥¥¥¥UVVîÝ»wÏž=µ ¯[·NQ”‰'¦¤¤$&&îܹsÕªUŸ}ö™ýœg³h…ö‘åË—Ñ£GwìØQÓ´£GîÚµ«¹"kkºüòËíç[–ÖY{®^½zðàÁgÅŠ-RoÐf( ¬%““ÓšU.IIIO?ýt ¸ÿþû£] ™íܹ³îÆ‹àN Í"Uœ#Uœ#Uœc¶@£0[ ™‘*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*Α*ÎéÑ®ÀWÜâºeŠ{Ê»þw_ ¼íº4Y7¥Û“±O™E³«f‹òÛ“•ä± V`zÕô:õ\ÏÜþzÿð-·WÞÞŒå/v‘\¯GlnÚ]XOµçÕÚÕý´~ÕŽª¨§ÌS{Ì=++YÇ¢R \ÛJ•µ úYX)[GYàºED­·Ö»ÙË_ì"¹Þ®j×˵ËEdˆ>äp ¡TÙAéð|ìógͳ߫þ^$µ­k´6z¢{¢ˆTš•ª¢¦iiiZÚX}ì+þW>0>hÞsMEªlq7RYaV|d|Ôúg_X"‘DI|1îÅf/±‹äz?~¾Ê¿ª“Úiu`u‹T®¶·¬9¸=¸½R*E$UI½Å}Ë0}ؽî{ ƒ…¬Ѫ ¤Êær­ëZ¯ê]î_î_´ë‚æd)Ö«W£[‡=æžð³Žý®æwÉ1ÉZÆx×ø~R%¢‰Ùzšj©ãôq¦e®2VE».øZ°k_pŸˆtT:F».øº‹Ú½ÊTI½ÅsK_µ¯Wñž0Ol n\XÞð.9jÎx×øÞjï8%î´uz[pÛ2ÿ²3r&¼ÌÚ?õþt—±ë©š§îôÜ9JuÜ:þ¢ïÅ£ÖÑ~j¿»ÜwuR;­ ¬ZXZëàš¥å¹òFè#Ò”4â9mžÞܽÜX^l_ðZ†èC’Õä|#ÿ¤u²á’Ësƒû†«´«RÔ”«fgpçþ7ʤÌñõ¶šHÚ§QÇm´6ú*ýªjvJ;CŒ2«ìˆyäÃÀ‡ÛÌmuËÛý'[ÍŽQbBýç&×MÍ2Û“Çò¼Òî•ZgUÎ:&õÏŽó Ï/úè}ì×ñjüŸãþzkS`Óÿ‚z÷ŠðçÛQí("Ç­ã,´è¤Ê,5kŽwŽGñ–QhzïT÷ÔaÚ°OƒŸÖ¿ƒ%Ó=Ó'º&ŠH…UqÄ<’¢¤LtM® ªæ©Ï­Ïëî1Ã;#SÍ‘^Z¯{üGßg{gŸ6O{ïMî›vwï6w‡ '( {î¥õ‘¢`QU“¦¦åiy׸®ù½ï÷ë‚뾜ë\׉ȊÀІ‹õT{>äy¨£Ú±Ø,.±JR””Q®Q=Ô?­ùiP‚^o‹Š°}.¨´›ëÛSë)"Åfñ1ó˜.z¥C®ž»ÕØZ·|“ûOYŠ~¨ÞjoMÑ(Ä:bM]ô -ðŒƒæÁÐ[GÍ£õ ÒŸo?µßPmhÐ ® p{Q…T#1?ôüУx>1>yÞ÷|©”ŠHº’þ€ç'¬³«g§©iÿó_]Ô.³¼³ùm nšç—­eÔîö™*UKý±çǽ´^GÌ#Ï×<_hŠˆ[Ü7»n¾É}Ó÷=ß?^}ü3ë³ó]N7¥[¶–}$xdŸ¹¯«ÖD›ç÷…ùÅSÕO˜"ÒWíûˆ÷‘nZ·Aê ÍææH®·EEØ>q«ëÖžZÏσŸ¿PóBøýÀÒ¡ZªkõŸýÁýÏùž;m– õŸ¦ò‹ÿ5¿ý󥘗┸Ê/ö/–ssÀV[ÕáûÖËñÏ7ARÕÔ1®1#µ‘Š(¯ø_9djêÕÍ+ ÏUæéyíÕöÕVõ³¾gíH)"‡¬C×<~Âh‘¥g‰ÈRÿÒZCLOË麩òZýÚöjû«æÙšgíH) öŸ¶ÆñÏ7OË[·è±˜Ç®Ñ¯)0 þ³ú?ß7ÞoÅŠõ‹BªÌÕrEäã{™„ ©XgÔ3–2WËõ*ÞÃæáÚ7ù0𡈠ՇÖÚå¨yôˆuÄ~}VΊHèÈö?=â ¥²ëЏ!ÿ üÓ²¬>zŸT%µÞki'íFè#ÊÍòõÆú.YDV`±±¥Xá ‚"¯ÄGx½-*’öi¤r³\D®Ð®hLá+õ+Edu`u¹”‡o?_ÿikÿ|ÏșςŸ•š¥"ÒSëù}Ï÷Ó•ô–­+ÐQÛCë!"Ÿ?idù 5CDâ•ø¹Të­5ADÒ”´vXðú-­½ÕÞ"²;¸[ê8iµ’¡Uf•4¥ÿ´5Íõó Ý=öŠ7Ò:ˆÂl=_˜_ˆH½Ý·b•غ÷÷‰È@m`œ4´ºƒcöciƒôAußJ•ÔT-5T&\¥G–žõYð³fª­¥¯·©œµO„J¥t±ñ〦h}Õ¾áo¶Ëy¦ö©·ÿ´2E©ÿ¦nHsý|»(]DİŒ«±ƒÉ€–…T¹ÙØ,"£õÑí¤]øö¾jß<½žõ·[N›§½Š÷^ϽŠuì¬5ÖŠÈÕúÕ)JJ­·nóÜ&"ûƒû‹­âZo]ç¾NDÞ5Þmöú´ôõ6•³ö é¡ôÈQsœ]ˆ¡"Rk&¤Ed´6ºV*;_ÿi5ÕVµˆ´SÚÅHLÅšåç«[úÍî›Ed{p{•T9;Ð,¢*×kN™§¼Š÷!ÏC¤ƒˆè–>N7Û3Û°Œºå ÅxÅÿŠeYÃôa³¼³:+CoÅJì@u`‚$DRŸÆÆýÁýnÅ=Ç;ÇžïÔ>ò½î{sõ\Ã2–ø—ÔÚ%^â‡kÃKÍÒÆÆHN]¯–¾Þ¦rÐ>!W¨Wü2æ—Äæ}Ì~±5¸õíÀÛ©þd¢>q€6 YMÖE/·Ê?3?ÛÜyÀ<a}ʤìÑêGǹÆÐGtQº$ª‰§ÍÓ»ƒ»ß1Þ9n¯UX-OÏ Xæ]P¤–¯7SË´_™E9]Ãå›Ô>áÖëGë£Û+íßò¿Õ@±ü`¾7àí£öé tèªvõ[þÃæáÁ«ŒUåVyÝò»ÍÝ?«þÙ7ÝßÌT3Ùšt½Ž½xËoùǸÆ$)Išh…fáöàö Ɔº%ÿó-4 _¨ya¤>2UMí tðY¾O‚Ÿl núÐøÐ^ïˆ.¥5!rrrZ³*@„nqÝ2Å=å]ÿ»¯^‹v]€KÐÎ;ënŒÂs•€K©à©à©à³õ…ÙzÍŒT pŽT pŽT pŽT pŽT pŽT pŽT pŽT pŽT pŽT pŽT pŽT pŽT pNv€‹›*V{±ì×¥–b*J (^Lw¥¢˜rÞ3:Øh*R%‘öb=Se¿~¤:öl‹¶»]5YºYkãϪcOÿŒvšê"H•IIIO?ýt ¸ÿþû¹ËìÙ³ûõë¾åž{îiªáÂÜn÷ìÙ³“’’~ûÛß9r$ÚÕi²G}4##ãé§ŸÞ»wo´ërhkÍ•œœ}DdРAûÇÄè*²TWPDDI×jßl®].%š¦Íž=»S§N>Ÿ¯¨¨ÈëõfddlÙ²%ÚõºÄEòç·ñ.Zî?mÓ×íz‹à^¥K—.µ_$$$,X° º•ùš;tèÐ{ï½—œœüÑGE».·^ûE¼˜¿>7æ¶Ùw¹”deeuêÔ©¢¢â±Ç;}ú´ˆx<˲¢]¯K\$~ùsÀEêÒL•h;,ËZ²dI´ká\MMMèÿ/V,]¬JQ‚y‚ѲâË©jcs2«bʼneˆRÝèç05W éÒ¥‹ˆìÛ·ÏŽ”"âóù¢Z£צÚß‹ýÏ..ûï ´)¤J !%%%"râĉÆŽW¬‰ZÍ`ÍHTEDü–µ=¨ÿ#à©8O\L“àõî@_Õð*""g-%ßÐVîÊhÇËÁšqHW ]QìŠí0Ô•†»T´†wlRsµ4¯×+"gÏžvEZO›j ã÷šQtR¥ýˆ¼ý:>>þ•W^ ½•ŸŸ¿páÂóíØ³gÏ &deeÅÅÅ•””lÚ´iùòå†a4WÅ:tèðàƒ&$$üþ÷¿oÞÇ÷&Mš4hРÄÄijgÏîÛ·¯   S§N)));wþÓŸþ´mÛ¶ðò÷ßÿðáÃÿò—¿¬Zµª_¿~“&MêÑ£G (**Z½zõ† êžâŠ+®¸öÚk322bccKKKwìØñÎ;•¯J/ßÔŸ—ÇãY´hQ­sçÎ-..®{ððé"<Ï„ rss;wîìóùvíÚõ׿þµ¼¼¼î^MmOÇNžÚ±cGÝò)))S¦LÉÊÊòþöî<>Š*ÝøSK/I“}_ lÈ’@€DÄ,«x®(‹xqtÞ«âˆ;" ŠŽ:# ‚ÈbØFvˆDdMÙCötw-ï%}cgë®Nwü}?üªOU:}êT=]§ÎÑëËËËóòò¶nÝzçwvÉh4v5¤öòaoóh¥|u:¥|:H¯×ë‡ 2pàÀèèhI’Š‹‹÷íÛ·k×®Ö‰U¯]Û·°ýòjïöí­oääïËÂííÀÍÄ=Qeaa¡(Š<Ï÷îÝ[„óçÏ[>ºzõj{k;vêÔ©&“©¤¤D۰°I“&%&&¾òÊ+f³¹K26dÈÈÈH"ÊÎÎî¨2((èé§Ÿöõõ-++;zôhHHHZZZZZš ¢(‘$µ;’JFFÆý÷ßÏ0 éõúøøø63vß}÷5Šˆêëë‹ŠŠ‚ƒƒG5lذW_}õÂ… ¦·÷û’$é§Ÿ~²ü766–ã:‘zõêõøã”––VVV†„„¤§§GEE=÷ÜsJ)YØ^žÊîzÛ¶mŸ|òI›]¾|Ùöš „”FI.“ÙFöd‰ˆ"Yy+–4-S&²Â}£òµJ²\!³ ÉA,‘#?ªk~ÑèÑìŽ'–wkM×CJ2Ér‰Ìy’ÈÊD¤ch–¶ée£g±Üî·iWq9‰¥¿«‡‡‡‡‡‡Ñhlhh°|Úq[aËéæíí=oÞ¼èèh"ºzõªÑh ÍÈÈ1bÄÚµk<Øz³?ü°2Mttôœ9sÖ­[÷ÄOTWWëõúqãÆ>}ZÙ‹kª«Á`X¸p¡’ÿÒÒÒ’’Fãëë;xðàcÇŽµN7þ|N'•+Wôzý¤I“RSSÏž=ÛiVmaos¡âòaoóhKùˆ¢XTTÔiùôéÓgÞ¼yžžž‚ (åÓ«W¯–A£ºãµwû Û/¯önßÞúFj¿/KÿvÛ{´v‡ö à¦áž¨rýúõtýª©©é…^ètF3uêÔM›6}óÍ7ÊÅ#55uöìÙñññwÞyç_|Ñ%;uêT}}½^¯ÏËËë’ *î¿ÿ~__ßÜÜܵk×*aÏĉ'MšTUUµxñâ†éÙ³gZZÚ¥K—¾øâ‹‹/úøø 80''Ç*ÙØ±cGUSS³~ýzåV«½çž{233çλtéÒ–wÕ*ÒÛû}™Íæ–iÞ~ûmOOÏŽWá8nñâÅ—.]zíµ×ŠŠŠˆ(!!aÁ‚‘‘‘ªÓéΞ=ûÎ;ïTWWQTTÔìÙ³322:ͪ-ìm.ìmŽìmîìb)Ÿ‚‚‚U«V]»v:+ŸâââÓ§Oçæææçç+×2žç'OžøÀž9sæèÑ£©©©½{÷nUÚUžõõõ+V¬pÙQl4ë÷‰¿DÄùQ¬™ˆü˜_ýpȉA×_¼|ÛäYwý™ä‘f´ã5&"JeÍ[ÉÕQ¥%¤¬—hIo¼ÞöŒÄiÖNÓšˆ¨/'…3b+o\¶œnC‡‹‹kll|å•W”‚ˆÌfógŸ}æãã3bĈéÓ§/[¶¬å*Ç­^½º¹¹ùÂ… uuu^^^ÇŽS~·:uê”2P­’Ò5Õ5..Žˆ>ýôS«–G‰­dddøúúÆ7ß|Óò†êåË—_xá…gŸ}6((ÈÙ¹u³›»ÌÌL__ߦ¦¦7ß|Óít\>VÝVAøôÓOãããcccû÷ïß:곋ºíÛ~yµwûvÕ7G¾¯††%Ÿ¿©W©ºî5ædÌfsËkžbç΢( †.œ”R„®N§Ó±,+ŠbËK$IÊ Cë®ZµÊªÿ§•””NwùòeË5ØB™í}ðàÁޤw ³Ù¼~ýz«Ç¶ÊCK//¯– )Og;.þ*Öª¿•i~ýNeöÿnÑÓ5/Ò5Zþ eélÂÉäê90â®g,Wä¿~ô€ i¾ž¾lGòÆeËé–žžND{ö채”›6m’e966644´åòâââÂÂBåoå .Ë‹šJ¥Õj]úó²Ó~ýúÙ’Xi öîÝku§ÞÐÐÐæÛÝݳ›;eõ={öX=@SQ>JYGò£nû]rymoûvÕ7¿¯šš„”îr#=«l­¶¶¶¬¬,,,,""¢õE¨›¨­­­©©ñññéÓ§åM›€€Q;xPIDûöíëô•ÑÞ½{Q={ì1«¼½½‰(,,Ì‘ônd2™ˆˆeõÛ‡#åébÒõ0Ìj ž€ë.µ Å´ûJmFjrá#AF–ýYÉlI«ý S&1QœLD¬L7c\iËé¦Üa·ù.VEEEIIIXXXlll{õÐjû]õB¸]¶mÛÖ·oßqãÆõïßÿ‡~8yòäÅ‹Ûë‡ß³gO"úñÇ]›Ç.ãìæN)¯>ÆËËKé¯Ñh:MïšíÛ~yíxûvÕ7¿¯šš«ë¸ÌUQUUUXXX§¯í¹×¶mÛ¦M›6kÖ¬õëן;w.,,lÆŒ,ËîÞ½Û‘Wzʵ6  ÍÇiµZ%BS‘¾²½<{ôè1{öìN7øÃ?(?„»†·u]wÙ!-CìõiëÚºå«'†H&"­Ün$|sãy^ij,Y©¨¨ SN1\S];¶|ùò)S¦ÄÅÅõìÙsòäÉuuu‡þöÛo‹‹‹[¦Ôh4:Žˆ*++UïνœÚÜiµZå9³ŠòIJJJMM‰‰ rÆõ«K¶ßÁåÕöíÛ^ßÈáï«¶¶Q%€»ÜðQ¥òËhN.â Û¶m ÊÊÊzê©§, :ôñÇ;¾qåGßM›6Ùøv½é»!ÛËS«Õöïß¿Ó *c®¸LÓõ‡—y·ÎìáÊ]wÀHŒ ËÊ•~ÖÓ ù^ï‘ë–Ái»ƒÖR0L[g3—Uׂ‚‚^x!88xРAÉÉÉ}ûöUưݰaCËщ:=Þîϩͥ³´-c\[ †9sæ$&&J’tþüùÜÜÜÊÊÊk×®%$$Œ9Òñ\uáöÛ¼¼ªØ¾õþ¾***ìú.  ÝðQ¥ò‹fëwœº†a***Ìfó™3gJKKkkkO:åøˆö eÌÛûqÙ›¾²½<«ªª|ðA×ç°cWå_¢²VÔ’lj5•¥»”Ël#Q4+Z†Rô IÏ–ˆJäî’aE±¡¡Á`0¶Ú’Í‘‹«kYYÙöíÛ·oßîëë;a„ÌÌÌ?þñùùùåååJA===ýýýBÆ]œÚÜYꃟŸŸííùƒ>˜˜˜xñâÅU«VµœàÔÇǧKrÕ…ÛoóòªzûÖ7røûrpêTp„ûŸ9ØØ_…a½^oµ°gÏžÊe¯«"4'yä‘G&Mšôú믯X±â£>úꫯº0ÃÊTo °q {Ó[éý‹œZž.púú >^,MÑÝ›™–Î\ÏX*'øþúÕÉlÞ¤Œ9$ËòOâ ÿk”jʬ!lýQhh¨2NOËo×®]ûàƒÎ;Çq\BBBË”Qp•Q—­t‡÷:mŽlî:uñâEjg(š6ËG§Ó%''Ñúõë[†dÊGî®ÓãU·}Û/¯æ_ÑA}sö÷ÎãΡ±±‘ˆ CëëYk<ÏßÿýV ÇGD/^´º¼9‚ã8Û¯Ž¶:t¨Éd2ƒÁ³….é«sôèQe:õ3fØÒÏÞôv}_Îãìòtb™;)ü’ÕÛxáMS‰DÄȲ7IXóÝšæ Æ ãáìµ¢,ÏÐcÚæ(F$" ÉYœqÿ˸2'$¾²üå. ¢[o½5$$Ä꣩S§ÑÙ³g»°9r%eè «îŽ‡&¢ôôt«)!!¡«æ«TÇÆæHusg#eÒ£ôôt«(¨½òQ†°¦V圔”¤\ÎÚcãñªÛ¾í—WÕùo­Íúæà÷Õ»wïÄÄD{×€.áÎgÍÍ͵µµÞÞÞ'Nüä“O”…}úô‘eÙjq"’$iÈ!Z­ö£>ª®®Öh4ãÆ>|8ýç?ÿéª,………-Y²ÄÓÓsõêÕßÿ}—lóÚµkÊ$uÿó?ÿcõ‘$Iååå›7oÞ·oŸêí ‚ðÁÌ;755U£ÑüóŸÿ,++S>òððèÛ·¯2Kžêôv}_ÎãìòtͺEl£/KD”Ê‹©|S³L<ýòZ#Il¹Øy¼@רŒœsNâÞ·íÍV)•Ùí‚v¬ÆLDœ¼ˆk2ÊÄ“Ì1Œ26l£Lÿ2uÙ4z½~áÂ…ÁÁÁëׯW¢—î////;;»oß¾óçÏ_½zµRó=<<î¾ûîÁƒ ‚°qãFwç±?ÿü³eI=ÆŽ›ÐØØxâĉ–‰÷íÛwçwúúúÎ;wõêÕUUU<ÏßvÛmÓ¦ME‘çÝv±±9RÝÜÙH)ÿ¹sç®Zµªºººãò©­­­ªªò÷÷ÿÃþðþûï———geeeggWTT·7͌ǫnû¶_^Ulß®úæÈ÷5lذGy„ˆ>ÿüóÍ›7·™œÇÍ=ÙvìØ1eÊ”ßýîw©©©ÍÍÍþþþh¥ˆ¢øÞ{ïÍš5+%%¥ººÚ`0(O¿ùæ«ËR›–,Y¢üqüøñ¯¿þº½dýû÷WfG6lXWE•/¼ðÂC=cõ˲!!!3gά««;~ü¸ê];vlÍš5<ðÀ Aƒ TVVf4½¼¼¼½½Y–]µjÕ¡C‡Ioaû÷å<.(O¨%v…Éó!MSOî——õ µœ‚$š•rmxZésý©aÉÖU:^e³Y«c(ëú“I]‹\]“è“Ç5겉‰‰ÊD<ðÀUJ’ôÖ[o-X° **jéÒ¥•••MMM!!!F„5kÖtÿî¯#GŽ=ztCCCEEEcc£——WXXÇqÊìöV£(777¯Y³fÞ¼yñññË—/¯®®öòòÒét§N*,,;v¬-{´±ùµ—Í‘êæÎ&“iõêÕ ,ˆ‹‹{ùå—m)Ÿ7>úè£ñññ/¾ø¢,Ëʹ¼¼¼ÜÜܹsçvÐóÓÆãU±}».¯önß®úF|_Ê,/DÕ^€ó¸9ªÜ²e‹Ùl¾í¶Û8Ž»råÊÉ“'Û»fœ‘‘a0ZO íˆøøøðððÝ»wòÉ'Fã/ïÑ1 8sæÌøøø””£ ÜÜÜ‚‚‚ìììþýûúùùÕÕÕ;wîôéÓm†|ö¦WØõ}9 ÊÓ*ev¹Ñs0/¤°B+z1$’\+³…û£È‘\<±Èu ó¹YwXànç…>¬èÅÈf™Ê‰=.pß #Ó•}_Ï;§L=ªÕj†¹QF­­­}þùç333‡®Ì#R]]ŸŸ¿uëVËs•îìÈ‘#z½>66Ößß?""Âd2]ºtéäÉ“»víª­­m>??ÿoûÛ¤I“âââ¼¼¼ŠŠŠöîÝ»gÏžI“&Ù¸G›_{ÙÞ©kîlTPP ”O||¼-å“——רØ8qâÄèèh£ÑXXX˜““sèСÈÈHêp WÝöm¿¼Ú»}{ë©ý¾ró«%· IDATrrRRRt:ÝÖ­[ÛKÎÓÑÜ€\™•›U¿~ý.\˜——·råÊÖŸÞqÇ÷Þ{ïÖ¬Yãú¼ÝˆPž7¿þõ¯eeeÿûßݰÏäÉ“'L˜°cÇ ¼ ð›ÒfGÑßî¨.£ ™ŸŸßú#–e‡ BD®ÎÖ åyÓ`&33Ó`0XÞ€¢J§SÐËÊÊòóók¹<::úÉ'ŸŒ‹‹;þ¼2°$ØåyÓOMM}饗 ÝPï·;ïœËäää$''÷ë×oùòåÊXÁÁÁDôý÷߯[·ÎjtuèÊó¦qåÊ•¿þõ¯îÎ8 Q¥Ó ‚°bÅŠäää‘#G†……ÅÇÇ ‚P^^¾cÇŽýû÷+“hƒíPžÝ Fë›`´èbˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zÝ+ª¼[s÷džghf¸;#jôdz~løøï'ÙÝY¹©1A>^ï¹^Ýê:Ò=§î-·z1½º6cÝÓoíxÀõºWTyCÍ&¢mæmĸ;+оH62Ž‹ógýóƒÝWø­/¸ïî Ü$ d¸•¿µ^ªß+ìuw^ #çÅóÛMÛƒÙàsŽ»óâ ¿µã×CTÙ5²4YzV¿Å´ÅHFwç:"3ò:ó:wçÂu~kÇ ®‡°]€•ÙQü(I–¶ ÛÝ—rÛ³Ê0 »[ww›¤gôeRÙAñàó–ŽWÀ¸CsG¶1TÉUGÅ£›L›®Ñµ–inányZÿôIáäòæåÐýa7¢T.}ÇøÎùJ?¶ßµ fƒ·›·o4o´Ú8'sÙšìt>=œ ×1º*©ê”xj‹°¥D.éôXóƒƒØ ßz9ú9ñl<õæz?©òÆ,Ô/¬’ªôŒ~‚vÂ)ñÔ)é”%±7ãýgýŸ{s½‰¨X,n–›ÃÙðl.ûvÍíïßm3jéwšßÑVóÖöô KôKb¸"*‘J®JWyâýÿT>õˆp¤uzù±ëxí-Ï86îϺ?{²ž‚,”H%Wå«Álpo®wo®w ³Ú´ºƒÂÉâ³fjg2 CDzFïMÞ§„S­“űqOèžðcýˆ¨L*+—Ê{0=z²=c¸˜£ÒÑB±¨2†™¯›À”H%rE(:B3¢Ûëéæ§­!™‘[V­>lŽáÚÌ­‘1~/|?R3òVþÖMÖQe:—NDÇÅãÖ!¥ýõÓv"‰çÅ6¶àÅx±AÍróѺ Ù~¼-׌Ÿ¦™f"ÓUéªHb8>M7-‰OZÞ¼%tÀ Q¥y<®{\Çè~~|ËøV5UQ4ý˜î±lmv›«Œ×Ž£S#ÕüÃôÃâa"Ò‘îÚ?dk²è,jZTOõ-Ó÷åú–Ée ›†³áóø[±@¿`•qÕ!ñÐ3úg¹ÄAü S¦_bVfŸÔ=Ù›ë}YºüVó[EriI;E3e‚vÂ#ºGJ›J–nïpz2=¹ÄËâå3Ò™öÒLÓL‹áb΋çßn~»åó"òo¢&«Ä*òc×ñª(Ï+Ò•“âÉ}Æ}§¤SÊ‹£¼ÌOÕN ¡ÉøVøö‚t¡Íb£nåo½ ]øÜôùé‚/ã›Ì'ïvZ%‹f¢ëëYýæ>6ly«%m—/ä·~Ê÷Œþ™ Ò…åMË ¥B"Jb“ë÷äz&³É?H?´Ll"Ó_›ÿjùï5ÆÐf†‰h°g¤fäPnè:yÀ–åŒÌ ç‡Qëaoì-O»ÔSýÒæ¥V 9™{Þãù Zg\W*—Z}j×ñ*4ŒfšfÚç¦Ï¿¾V¾â4.íQÝ£ý¹þwòw~)|©:ÿpÓsÃ{•Ù|¶ë×$7­0®PBJ"º(_|¾ùù2©¬uz&k&˲üºñuå–ˆŒd\k\{R<éÇú) [â‰_Ù¼²‰šÎIçê¤:":,>$"¢ãÂq" f‚-‰Óø´>¡Qj|©é%%„#"™6š7æ˜s8†û£öN§*‰(O ¢¦V]«¨ªuT©"?v¯Šòl †×M¯–[Æ"a£yãÏâÏD4€ÐÞß®¹ý˜xìÙ¦gJG¯Ñµ‹òÅÿ˜ÿÓúAßlÝl=«ßo޿¸¢e_™N‰§$Fj½e–a÷ û—5-SBJ"Ê—ò ¢>\Ÿöòc‹|1¿L*ëÁöÄ j¹<‰K `j¥Z«Ë*ÊÓqÓuÓc¸˜ƒæƒ{Ä=]µÍu¦uÿþcùŠsÅܯÍ_ÑXÍXŽ:Ô ¿Ynˆ*S¹T"Ú-ìn †–Ëë©~¿ÐFßÎT.UÏè/I—¬2ôù;"±ZåŠtå²|Yù»ŽêˆÈ²eå¿:ÒYàG(ù±„¸ÿ6ÿ[–å¾|ß0&¬ÍcéA=ÒùôZ©ö€p ƒC®•j‰èî–Ò8’»ŽWEy¶Géfȶ—à²xù-ã["ÓQÿÉ.!š‹6ÊÆMÚ>Õ§Y6¯5­•¹åB¥£¬ãeëVÚÄÐ>aÝÊßÚr±òß}Â>«î ]Xž6º…½e,?¶Rª\kZÛUÛ4ËæÂ«…Û…í‚,ø°>}X‡u¸¹¹¡l/®ý(Z¿´ÖžX6–ˆ¼¯'´OX}äÍzQ8ÞÁêfÙÜò¿&Ùd•@¹c>%¶ñ²_¹\~U¾΄÷åú^Úé$‹ÏÒ1º¯Í_›sëO-¶[â¹ø Ú ƒ¸A‡ÄC'ÄçÅóVQ—ä‡l8^ËS¡%­y)oKòí×¢!ÇDÖ°’Ä%Ñâ­Ç¿±—²/ÖáßJö{&k&§ð)ž&ÏFj$"^æ•_Crëî¯]Rž¶ó"¯GuÊ$¿c|Çêw™.W%W)/¬F2‘ÔÎ;Ïð›çê¨RG:-£%¢ ©ÂÆU|X" `Ø€6ð ¯#º‰"y™7°"ª”+ÛLP.•‡³á>ŒOëX™½Cs‡ ­_´rD<²¬yÙ4í´x.>Š‹º›î®•jó„¼m¶+ò•®ÊT—ç-ì-Ãøa±ll¤d²Kø‘•JÖ/ºQ™\vF:“È%¦r©9b¥ð)Öp^<ßz4Z§ÖÏÖfëfû±~_š¾Ì—ò»dƒ«*BÙÐLì nP®Ž*úeøÛßÔ’I&¢›þý™ù³.ϲq"bÚé|©,—å6ž+¦ò©lÀó*¹ªÓ‘Îüµù¯!LH —2˜ÏÆgk³o×ܾθn—¸«Kòc#åÙƒz<¡{¢ßO’¥sÒ¹ýÂþJª¬’ª’¸¤LM¦êœ´Ä2ÝkêÔsN"—˜Î§+Qe:ŸND{„6^btjý´2š=˜|^<ÿ©ùSgïK¡ ‹1` ®Ž*EëåúLÆßÆ”˜-œíÊn„ÿ—F¬—ê{°=™À6'E b‚ˆèšÜƬƒcø1D´MØfûîJåÒ­ÂÖ­ÂV?ò›¢’­É~P÷੦Ser™ãù±‘Šò|H÷P?¾ßñ›Æ7[ަãËøªÎ†…òúh$éø¦ºÐ!áÐòý¸~~äg$c2—,ÈB›oÏ:µ~¶ÉDN×No–šßn~Ûea^ HŽÕ7¸é¹á‘2 E¾ë<ÏÖ Ïˆgˆh7È@]Öë²¥Ÿ¥Ÿ‰(™OnýQ……qa–4-õbz%ð ?‹?·þÈÕT½Ö´ö¬p–c¸$6ÉñüØÎÞòÔ‘n07˜ˆþaüGË’ˆôŒ^u6,òÅ|"ŠcãB˜Ç·ÖU”‰+Y†ÎÊ Õ0š„Úœ ÄÙõSÁËüëþ[Çè6˜6X$Ü%b<ÈÃja$ÄÑyÉ¡)7àææ†¨òá"º¿­ýêe­$6)›oc¾ÊÃÂá*©JÏègêf2²Íƒ„ÚLðs$?2” µúèÝ=Dô“ø“U4ED¿ÓþŽˆ¾¾qd×ÊtˆV#ý¨Ëíì-O=é•î©-'o$¢[¸[ÆkƫΆÅñÌeé2ÇpkÖÈÇ7ØU”þ®·ò·*£¿¶§Gá`ýìÅôÀètÅût÷EqQ?˜hÙ_º ñ ÿ öAúuÇêßk~OD…ba±\ìŒÀÍÁ QåaO¥T©gôóuóýÉŸˆx™ÅZ¨[(ÈBëô#¼oz_–åáüðú-Ÿhy’ç v7y;’ŸƒÂÁŸÄŸ´Œv‘~‘eOòœ©™Ê§ ²°Á´Áj/òJãÒª¥êƒÂA[vÑ“éÇÆµ¼e÷"¯{4÷$r‰R£2¥¤#ù±‹½åY#×TJ•Dô€æP&”•Ù0 »_sÿbÝâj¹šˆtŒŽÁÐêæÕ&Ù”À'<ãñLæÿ&±àd.MðgüÚ¾ZÊÄ•½¹ÞI\RµT}R<Ùf2Gêç-ì-ÿëñ¿‹=ß§½¯ƒœ äŽÑŒ¹&][cZ£úp:&ÉÒ0~Ø<ý<Ë)9Y3y¤f$ýÛüo'ínn˜YÄHÆ·o/Ñ/Ià^ç^¯’«¼/=£?!œ¸,]þ½ö÷­W9,^i\ùî¡>%…O)Kdôf¼½o–aßj~ë€ØÑt‘“éÕæWë÷âz=ïñ|…TÑ$7…²¡F#ÈÂJãÊÖÝM³5ÙZF»É¼ÉÆ×Û2øŒ±Ú±õr}…TÑ 7x±^áL8Ïð RÃÆ7¬úUªÈ½ì+O†6˜6ÌÕÍMäWð+dYV&9d>´OØ·Àcã=?ÏËç_j~i®~n®ÏóžÏ×H55rãáÇøñ ¿Î¸n»°ÝÁ]¨ÁÐ>aßí†aöš÷JŒÔ^BÕõ³'ÛS)Ì.†Ú™›Æ›¼Ñ=BD 1‹ô‹Z'øÚüµ#õ_!’¸Ú¸úaÝÃC<‡TÉUÆ toÞaÞqH<äàÆàææ†¨’ˆÎHgžizfªfj—àÅxIEß ßí6ÚÞ*ûÅý?6ý8†3ÄñÄ×ʵ?K?ŸOœ•Î:˜ŸªYÚ´t”fT:ŸÁDø°>URÕ)ñÔfas©l=ãG\6Ÿm–ÍN(b‘'æéÍú¾l_Æ?’4ɦKÒ¥ãâñíÂöZ¹IíÊ:v•ç!ñЋÍ/Þ¥½+†1’ñ’pi·°û€x 'Ó“ºh š¥ç7ÎÏâ³Rø”&"œ o †ËÒåSâ©“BÛ ]@™¸’a˜sÛÝ_-ÔÕÏÂÛøÛü¿/M_¶—&†Q&’ña}|¨e|õÓÌXBqsñ~B"—Ès^<ÿ­ù[e\€0ÌQ1`ÀWf\/ˆ zÝóu³lžÑ8ÃÝy€îîĉ­v¯IàÆ‚¨ÔCT ê!ªõÜ3,tårù½ ÷º;póJPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€z¼»3îÄÉ’/óËßÕÄHÄX>ò$Ùƒd"2Õ:ü ”IÚV ­öèø*àzˆ*~Ó"Xi‘¾Yùû/Mž•-¶;xÓh™ˆ.ˆÌßMwô€¦9—¬ZíÑñUÀõºWT9yòä &ìØ±ã£>j/V«]¸pa``àk¯½vùòeçe&""bÙ²eW¯^}úé§·—ŽËÊßl©o š:ujBB‚§§gcccIIÉþýû÷ìÙãî|Ý0ž|òÉÑÊ•+óòòZ~4oÞ¼Ño¼qôèQ«{õê•••ïçç'Ër}}}qqqnnnnn®ã¹bæöÛoOKK ×h4ÕÕÕÇÿæ›oª««;^ÑÞú`oz4¿ Zttô³Ï>KDË–-;w³7¡îUÚ"""¢oß¾D”œœìÔËê¨Q£ˆèÛo¿uÞ.ÜËßßÿ•W^©««›;w®ík¹¬üá&S,³‘ˆˆ#Šæ¬Ÿ@vÕ*®ÄqÜÂ… ƒƒƒFcqq±^¯=|ø°»óuCJOOoUz{{÷ëׯ½Ä'Nœ0a˲DT[[+‚O@@ÀÏ?ÿìxN´Zí¼yóˆH£Ñ:bĈ7Þxã§Ÿ~joE{냊úƒæê.ßNuãE•/^ܹsgPPÐÞ½{·ƒÁ––ÖÐÐpàÀçíåFäšò‡›Ïç‚^ùˤ=´Š+%$$×××?ûì³UUUD¤ÓédYvw¾n<‚ ÜrË-^^^uuuÊ’áÇs'Ï[_¤†:iÒ$Q¿üòËo¿ý¶¾¾žˆX–ŽŽîôY¢-xà„„£Ñøá‡æææJ’:cÆŒ„„„Çü™gž¹víZ›+Ú[TÔ4¿ÐmÝxQ¥,Ë6lpö^FŽ©ÓévïÞm4½¯‹kÊn$²l`d™¨±›)Í’l Y ¦É9ïaFDDÑ™3g”€ˆÐ\¨“ŸŸ?`À€aÃ†íØ±CY’žž~íÚµššš^½zY%ÎÎÎ&¢-[¶üç?ÿ±,”$éüùóŽç$&&&--ˆÞ{ï½ï¿ÿ^YXRRòꫯ>÷Üsaaa'N\¿~}›ëÚ[TÔ4¿Ðmu¯»Àn‚eÙ¬¬,I’vîÜéî¼t_á$ÎÔ6¿âѰܣñeÆõ wñÍrWÕN˜§mzU_ÿ¢Gãß=^Ô7Lç›üHìÚ½èõz"²<^ÕN:USS“žž®ü7""¢W¯^¹¹¹m>¸ #¢'N8#'·ÝvYBJ…ÉdÚ²e ¥¥¥i4š6×µ·> þÀÍÄmÏ*CCC'Ožœ˜˜¨ÓéÊËËóòò¶nÝÚ^bN·jÕ*«…K–,)))io•Ù³g§¥¥ýóŸÿܾ}{¿~ýÆß«W/³Ù\\\œ““ÓñˆÉÉɇ®¨¨h/··÷øñã“““}||êêêΜ9SXXòá‡Z /¡"?·ÜrKVVVll¬§§§2\ÄæÍ›kjjÚË’íé—.]«üíååõþûï[>ÊËË[¹r¥Uz»Ê?00ðå—_6›Í³gÏÖét£GNMM 1'Ožüä“Ojkk[¯eoyÚË®úFDÇedd 6,<<\«ÕVWWçççoÛ¶­´´´½Ut:Ýí·ßžœœáééÙÐÐPUUõÓO?íÙ³çÊ•+–dÊð$GŽyóÍ7­¶0zôèéÓ§¼ôÒKmÞOûûûÏ›7ÏÛÛûÝwßÍÏÏ·³ ºXgš®1rÌÿ=ôbä,Ì‹o6ëK‰sK®8Yš¡5æ•’±dl„FLå›Öšô§%‡=–e×®]ÛrIfffff¦å¿/¿ürë¯ÆÞÓßÆê—””ôÔSO>}úÕW_½çž{ÒÓÓËÊÊÖ¬YS\\œ˜˜8}úô   ]»v}úé§Ž2éõú!C† 80::ÚÇÇG’¤âââ}ûöíÚµËÁ-+$I:xðà˜1c®^½ª„—HLLl¸¹¹ÙËË+22Ò#Ž(ãY…”Š£GJ’¤ÓéNž<©,´·>¨¨?*.dssdaïåÆ.ݧù ~饗çÌ™cµ…ñãÇO™2eÏž=– ¢#ç—å©âriïåÀeÜUÆÅÅÍŸ?_§Ó‰¢XTT¤×ë'Mš”ššzöìÙ6ÓK’ÔrŒ„ØØX޳õž5##ãþûïg†ˆôz}|||§·ãŽÓôôÓOûúú–••=z4$$$-----MQ• ;˜Ÿûî»OÉF}}}QQQppð¨Q£† öꫯ^¸pÁÁô………¢(ò<ß»woAZö»zõjë«+ÿ^½z=þøã¥¥¥•••!!!éééQQQÏ=÷œRJŽ”§-ì­oÞÞÞóæÍ‹ŽŽ&¢«W¯*ÃudddŒ1bíÚµl½JŸ>}æÌ™ãëëKDåååååå=zôˆŒŒŒŽŽ>~üxËÛš÷Þ{ïùçŸOII1bľ}û,Ë#""¦NÚÐÐðî»ï¶÷nÕ!C"##‰(;;ÛQ¥/#Q‹={0í¾â•È ÷iŒJ5–d¹Bf’ƒX""?F~T×ü¢Ñ£Ù]!îÖš®‡”d’å™ó$9•‰HÇÐ,mÓËFÏbÙ¡ˆ×Ò_ÑÃÃÃÃÃÃh4644X>5›Í¬kË鯢ú=üðÃÊ .ÑÑÑsæÌY·nÝO}æÍ›çéé)BiiiIIIpppLLLLLL¯^½ZÞÔ:"77w̘1éééÿþ÷¿‡~éÒ¥¢¢¢6S~ÿý÷wÞyçÔ©S‹ŠŠº6°ôðð ¢67ÛØØXZZi‰*Éþú`ozͯíÍ‘ÂÞË]ºU󫎽痊ò´ýriïåÛÂÒ¿º¹¹YU1t Q¥^¯ôÑGu:]AAÁªU«”‘¢¢¢fÏž‘‘Ñæ*f³ù…^°ü÷í·ßöôô´e_={öLKK»téÒ_|qñâEŸæäät°JdddBBBaaaAAA{iî¿ÿ~__ßÜÜܵk×*-þĉ'MšTUUµxñâ†[°1?cÇŽ5jTMMÍúõë•gtZ­öž{îÉÌÌœ;wîÒ¥K[Þ…¨H¯¼¤ "×ÔÔÔ²lÛ¤¢ü9Ž[¼xñ¥K—^{í5åî0!!aÁ‚‘‘‘Ê“º–‰U—§-ì­o,ËΙ3'::º¨¨hÕªUʉF£™8qâwÞ9kÖ¬òòr«›Î¨¨¨… êtº#GŽüë_ÿ²ü ®Ñhúöí{æÌ™–‰kkk×®];þüéÓ§ÿøã•••DÄóüÃ?¬ÑhÖ¬YÓÁˆ#§Nª¯¯×ëõVs0t•ùz›î6XYž¦iVB£B‘yßä¡<™Lᄚfž¡ VÎä…­‚Ö™ì@#ÜÆ Êß'Dî“^y£2fi›=Ò2ÌiŒ¯™lj=Ú$IÒ‚ ”¿•Zºwï^§F°åôWQýúôéS^^¾dÉ’°°°¿üå/ááásçÎ]»vm^^Þ¢E‹ àHTY\\|úôéÜÜÜüü|寔çùÉ“'7näÈ‘»víºté’ê[(adZZÚ™3güýý¿ùæ›öRnÚ´©ÿþQQQ‹/Þ»wïæÍ›-qšƒ‚ƒƒ•?ÊËËÛLPYYfIFö×õÇÞæ×®æˆì¿|Ø¥»5¿*Ø{~©(O».—ö^¾-,=Ûì.à878}ú´¯¯¯’CÕé]ƒeÙƒ¾ôÒK–gΜQ²×»wï–))O[Ø[߆×ØØøÊ+¯X~ä6›ÍŸ}öÙ¾}û8Ž›>}ºÕ*úÓŸt:ÝÁƒß|óÍ–}´Ìfs~~~ë­'OžÜ±c‡§§ç¬Y³”%wÝuWÏž=÷îÝÛq¸X\\ºaók/»Î/uåiûåÒ ‚ ‚€WyÀIÜU<˜ˆöìÙcõ‹]CCC—L`ÝRaaáªU«¬:tÀ`0 6¬®®îСCí¥Ñét,ËŠ¢Ø²i–$Iù¯Á`p0?))):îòåË­–*³c+¨:½k˜Íæõë×[=fT.™^^^-:Rž¶°·¾)ïtíÙ³§õü›6m’e966644Ô²0>>¾W¯^F£ñã?¶=Wÿú×¿ŠŠŠF0f̘ÒÒR[y ‚à¼þK5U·ø×ÜÎCâ>¬`ùû1]ó"]£åßÐëÁd'{«ç؈»ž±\‘7þzÜׂÆr8}Y÷D•¶œþöV?"*...,,TþV¦Ù°Tlå$ÒjòÐXéÁèïïßUü¹çž»çž{”,U³ ÃÓ^7f“ÉDD:Α½8•½Í‘³/ݳùµ‹]ç—ºò´ýré šš„”àûì³éÓ§kµÚÏ?ÿÜñQ1\ÆÆ0¢Ë¢ Ûhb¯H[×ÖSÒzbˆd"ÒÊîŸû¤M*ªŸË$%%¥¦¦ÆÄÄÙøZ» »wï¶w•úúú>ú¨  `Μ9#FŒØ¿¿êWé,½ C›`•.²Ýy°{›#§^>ºsóë$Ýür\[[‹¨œÇÕQ¥¥÷—탸ºÌàÁƒ<ØÁp)ŠmÛ¶eee=õÔS–…‡ê’N8J7˜M›6}ñÅÎHß 9¯<í­oŽ Ä0L›ËÕ]ª-¹jï¤{²¼¯˜'pëÌîÍŒ…‘A–y†!"¿¶¾%ßë=rÝ28­-TW?§2 sæÌILL”$éüùó¹¹¹•••×®]KHH9r¤ëóÓ¦~øáرcƒ ñWÏJ{ÄþrÏZ"w— [QQý\àÁLLL¼xñâªU«ZކâãããÊltêÂ… ƒ räAnccceee@@@LLÌ?þhõ©§§§2xX{Sžtö6GN½|tçæ×IºùåØÆÑªÔqÃ/|/^$¢~ýúµþÈy«:wîÜ9[&@{ä‘G&Mšôú믯X±â£>úꫯº0BV¦&0`€ÕØ›ÞJwø•שåio}S*ÀÀ[ª ÑrŠ0åÁHß¾}íiS£Ñ<üðÃ<ϯ_¿^)þÁìÚœç´øË¯Ý^,MÑt£wÌÎ\ÏX*'øþúÕÉlÞ¤aˆˆdYþItÏ<½¶°·ú9›N§KNN&¢õë×[ÍAßÝ­QNgMP^é2dHë’““Y–5ŽOVá<ö6G^>:ÕÝš_åY¢^¯o}áë’ŽÎ.O+Ýáò `á†&I™|)==ݪÙMHHho¾JPÆûÞ¹sg§)ÃÃÇj2™ŒF£Á`ðl¡Kú–=zT™^yÆŒ¶\çìMo¡¼8d0Ü;P¾ƒåuË-·tpàöÖ·Ñ­·ÞÚzR“©S§ÑÙ³g[Þ^q7sæLÛG.¹çž{ÂÃÃ÷ïߟ——wìØ±½{÷úøø<ðÀ®ÈqœÛïæ‹eî¤ðËWs/< i "‘ˆYö&ik¾[ÓäŽÙ;öŠZQ–‰ˆgè1ms#‘†ä,Î8Šÿe\_Ù]{À’ýÕÏÙ”!š‰H„–Ë“’’Æç²ltªGC‡¥ëa¡j{÷î%¢˜˜%–¶Ðh4wÞy'åææ:i ¤.aos¤úòa£îÖü*ƒ¸²,kõx³wïÞ£G¶í˜:âìò´PwùîÝ»wbb¢Ó2¿un¸»Ú·o_UU•^¯Ÿ;w®ŸŸñ<Ÿ™™ùä“OÚ>H×RîH®]»öý÷ßwšøÚµkuuu=zôøŸÿùŸ·ÞzëíV¯^ýâ‹/Ž1‘Ì‚ðÁȲœšš:wîÜ–?Ázxx 0Àꉖ½é-š››•ßõ'NœhYاOe>—q¤<“’’ž{î¹ L›6­½4öÖ·¼¼¼³gÏjµÚùóç[ŠÂÃÃãþûïýôÓÞÞÞ'NœpdãçÏŸW¦Ê|衇†®DÔ¡¡¡óæÍ khhØ´i“ã‡àTv5Gª/6ênÍoSSÓÕ«W‰hÊ”)ʯ–:nìØ±‹/vä0-œ]ž*.߯ {æ™gþüç?ÿþ÷¿ï’<XqCO0“É´zõê ÄÅŽüòËÕÕÕ^^^:îÔ©S………cÇŽu}–222´Zí–-[l k_xá…‡z(&&Æê#–eCBBfΜYWWçÈ;rÇŽ[³fÍ<0hРAƒ•••F///ooo–eW­Ze5¦½é-vìØ1eÊ”ßýîw©©©ÍÍÍþþþ°¥pWq¤<###•߃£££ÛÛ¾½õM’¤·ÞzkÁ‚QQQK—.­¬¬ljj Ñh4‚ ¬Y³¦uÿà .¬X±â±Ç‹]ºt©2WЇ‡‡¯¯/Ïó6lhù ÜÛÛ{æÌ™’$­Y³Æ2˜dssó{ï½·páÂ{ï½·   Í‘Bˆ¨ÿþÊMɰaÃlùÄyj‰]aò|HÓÔ“ûåeE=CÔâËhVʵ!®ô¹þ»VÉÖÉ-;^e³Y«c(ëú“I]‹\]“è“Ç5êÖƒU¨¨~ζqãÆG}4>>þÅ_”eY9ãòòòrssçÎëšž~- 6lðàÁwÝu—Ñh¬««óóóSƒüüü·ß~Ûñí¯[·ÎÏÏ/>>þá‡þÓŸþd2™”clhhxã7\üR« v5GäÀåÃÝ­ù%¢-[¶Ìš5+99ù7Þ¨ªª ÒjµÛ·oollœ±Ì]Æ0L``àÌ™3ãããSRRy%77·   ;;»ÿþ~~~uuuçÎ;}út›× {Ó+¶lÙb6›o»í¶€€Žã®\¹ròäÉ®ºæÙNuy\Ⱦºº:??ëÖ­í ÿXPP°hÑ¢ŒŒŒAƒ…‡‡‡‡‡744åççŸ>}ºeÊ?ýéOÞÞÞ›7o¶LΩÈÏÏß¹sç¨Q£fÍš¥Ü¾·ÞËáÇ322 ƒŠ º\¥Ì.7zæ…VˆbE/†D’ke¶Pb¹#’‹'¹Ža>7ë Üí¼Ð‡½Ù,S9±Çî;AcdºoßW ÕÏ©òòò'Nœm4 srr:Iî˜ä³Ï>»zõj¿~ýüüüüüü.\¸°oß¾~ø¡K¶o4_z饑#GÞzë­ááᦤ¤äĉÛ¶mëtxðnÂöæH¡îòa{fºOóKDû÷ïgf̘1¡¡¡>>>'NœØ¾}ûÏ?ÿ<~üxÔ©åiaïå;'''%%E§Ómݺµ«òÐÓÁXÞ peVnýúõ[¸pa^^ÞÊ•+[zÇwÜ{ï½X³fëóv#ByÜ(Ú|ßäøå¾»Q†§ËÏÏoý˲Êà®ÎÖ å pCCTi7eº¬¬,eì‹èèè'Ÿ|2..îüùóÊ@v` ”'À =`íÆóü“O>Ù¯_?A ª«« CpppDD}ÿý÷ëÖ­kj²u@K@yÜ(Ú싨R –e“““GŽæçç'ByyyAAÁþýû•IŸÁ.(O€¢JP£õ@CT ê!ªõU€zˆ*@=D• ¢JPQ%¨‡¨ÔCT ê!ªõU€zˆ*@=D• ¢JPwwÀ8Yòe~ù»š‰ËGž${LDf¢Z‡qö"IÛj¡Õ_ºD•¿ ¬´H߬üý—&ÏÊÛ¼i´ÆLDDæï&ƒƒ;z@ÓœÀKV ­öèø*Ð}t¯¨ròäÉ&LرcÇG}Ô^­V»páÂÀÀÀ×^{íòåËÎËLDDIJeË®^½úôÓOwÌeù€Ný–ÏG[ÚÏ   ©S§&$$xzz666–””ì߿Ϟ=®Ìç}÷Ý7jÔ(ËEQ¬©©9wîÜwß}—ŸŸïÊœ¸Xllì”)S’’’ªªª,Xàîì€ÝºÃés£³ëôŽŽ~öÙg•¿%Iª««+--=qâÄwß}×ÐÐ`Ëö­üóŸÿܾ}{›YöµlÙ²sçÎÙuP è^Q¥-"""úöíKDÉÉÉN½kT¦o¿ý¶›äç†ãïïÿÊ+¯ÔÕÕÍ;×Ýyºúƒó±Ç-\¸088Øh4ëõúØØØÃ‡»%3F£±®®Žˆ<==ýýýýýýSSSwîܹa÷äÇ©¢¢¢¦L™2pà@wgÄuŠeV#qDÑœõÈ®ZÅ•ºÕés£³÷ô¯¨¨`ÆÛÛ;.....nìØ±|ðÁ÷ßßéö­466vÕ!@k7^TyñâÅ;wíÝ»×y{1 iii èù[à|ì@BBBppp}}ý³Ï>[UUED:N–e·d&//oíÚµÊßAAAÿõ_ÿ5dÈìììÒÒÒNË»± †çž{Ža˜¦¦¦³gÏ0ÀÝ9r…Ͻò‡I/zØt+¯bWêV§ÏÎÞÓÿ©§žRþèÛ·ïäÉ“y䜜œN·.sã+Ëò† ^}õU¥Yw’‘#Gêtº½{÷Æî°ÎÇDDDÑ™3g,…c4M&“[3EDT^^þöÛo9r„ˆÆçîìt1†aš››·lÙòÔSOíÚµËÝÙq˜,Hò¤n÷,‘%Ù‹$eÀ!gè¶§ÏήÓÿìٳ˗/ÏÉÉaæ¾ûŒtIÀ&7Þ³J`Y6++K’¤;wº;/]C¯×Q›úƒ;w¦¤¤øúúTVVº;;]¦©©é©§žjï5°H8‰cµæ$VÐ3DDu2“'pÛmƒ»žNá„Û9s4+ð £dì¸Àn´ÕÄuá^ºùés£³ëôÿðÃ{÷îݳgÏ)S¦¼ñÆ®É!tÊmQehh¨ÒA§Ó•——çååmݺµ½Ä:nÕªUV —,YRRRÒÞ*³gÏNKKSÞÌîם߸ñã{õêe6›‹‹‹srrrss;È[rrr``àáÇ+**ÏO``àË/¿l6›gÏž­ÓéFššb4Ož<ùÉ'ŸÔÖÖ:’Þâ–[nÉÊÊŠõôô¬®®>~üøæÍ›kjjº¼|:µtéÒØØXåo//¯÷ßßòQ^^ÞÊ•+[¯¢×ë‡ 2pàÀèèhI’Š‹‹÷íÛ×ÞOûNÍ?y{{?>99ÙÇǧ®®îÌ™3………ÁÁÁ¡¡¡!!!~øáÑ£G-)_ýõ6ÕÁðþþþóæÍóöö~÷Ýw»vœÛó¯PQžvÕ7»ÒÛ[œz>*ì-OÛµÌOLLÌèÑ£ CEEŶnÝ*Šbëµlo?Y–µê –™™™™™iùïË/¿Ü^Ýs^ýl“凇‡ÕGö¶*¾/{ë³íDQTRº¸ü;–Æ™¦kŒóñz1r–FHæÅ7›õ¥]¿ÙŽ“¥Zã`^9GKÆFhÄT¾i­IZrè&GÝécosÊq\FFưaÃÂÃõZmuuu~~þ¶mÛJKK[&KJJzê©§NŸ>ýꫯÞsÏ=éééeeekÖ¬)..NLLœ>}zPPЮ]»>ýôSG™ì?ݺD§k¢(~õÕW=öØÀýýýÑ3 ›pOT7þ|N'ŠbQQ‘^¯Ÿ4iRjjêÙ³gÛL/IÒO?ýdùoll,ÇÙz ËÈȸÿþû†!"½^ßéå¹ÓqzÔå§×ÿoïÎâ8ó<€ÿªúš¹ZPˆ(žè ¨‰øÔÑ5ÎÌ£™HLŒOHŒf7™™Íó˜cLv¢aô1ÑD7“˜Èã±*DT6Þ8£b ˆÜ—@wWwí¥=nŽîêSóý<þÕu¼ýÖ[Õõ«÷0àå—_ »wï^}}}ddä¸qãbbbþð‡?tùàèÐúæqÏÚÚÚ*++ÕjõäÉ“G½~ýúÛ·o÷*ùÓ«ŠŠ £Ñ(•Jãââ8Ž»uë–ù£»wïÚ®Ÿ°lÙ²€€ŽãîÝ»W]]­V«8pàÀXžIDDÄ›o¾Ù§OŸšššóçÏGFFŽ;vìØ±Ç 9o2ý³õ—Ñh,//·ÝI```xxxggç… º;ÐÈ‘#…<ÙÙÙ.|jt(ýVìÌOGË›Cë;Z~Ü}=:“Ÿö›6mÚœ9sôz}uuµÑhÔh4¿úÕ¯´Zíúõë­ÒãèýÓòqÍßß_§ÓY9ƒ¡»$¹©|v'""BøÃ*–sôþ â|‰¾º•»ó¿c²l.êÏtÛv4‰å~#Ó ·Ï×ñ,C|KDÂðKïêü;½Qc9W®R’žç«yIñá,OD †òäkuU¼S¯èˇì»-[¶,66–ˆîÞ½«Ó颢¢&M𔑑±eË–Ó§OÛîö…^Æ$‹]ºté¶mÛ^y啯ÆF??¿œœœ²²2gJ‹3?ÇÎèîòïÎùóç ƒL&KLLtþ=2™»;uvv:¿7€_&/D•~~~K–,Q(ׯ_/((hjj"¢˜˜˜Å‹Oš4©ËM Ú5kÌÿݰaC@@€=Çêß¿ÿرcïܹóÕW_•——6¬»îÝ‚~ýúiµÚŠŠŠëׯw·ŽˆôH$’7ÞxãÎ;|ðAee%iµÚåË—÷ë×oذaBÑëO›6mòäÉÍÍÍÛ·oÞÁËåògžy&333??õêÕݽ)‘?öؾ};=ó££Ã2¯ºTUUUVVVRRrõêUáÎ.•JgÍš•““3qâÄ£GÞ¹sÇ“é_°`AŸ>}JJJ¶lÙ"<†æææÎœ9³¡¡á7Þ°žáþýûüã­ö ‘HV¯^¾k×®šššîtåÊ•¶¶6??¿ÒÒR'Ó,:ý–ìÌOGË›£ë;Z~Ü}=ŠÎOûÉd²9sæìÝ»÷àÁƒÂ%0jԨŋ§¤¤<õÔS………æ5½šL&ó$B²Ož<ÙÃÔ#–ÜT>»3qâD"ºsçŽU#CG/Ñ÷Owswþ¿æg×Ó3ËóódBhTad¶êý…šÉ4 ·PÖ)e(‚å3¥Ü~NîŽDö †á&H9áïKFɽ_1D¤e¹ùË_Ì¿Ö?þøãš5kÞ~ûmóû*—ÈÈÈ8wîÜÆ…g‹æææ^'˜2e u×dQ4–eOŸ>½cÇó3͵k×Ο?ŸžžgUÚ¿¾R©ÌÍÍåyþã?6GÂz½~ÇŽjµ:%%eÊ”)_}õU—©‘?îÐÞÞnÕ¬‘ã¸/¾ø"111>>~È!ÝýŒ¹#ý …"99™ˆvïÞm®#úæ›o¦M›¦V«###{hwm6wîÜØØØÒÒÒâââV«ªªZ¶l™T*uáËQgÒoO~:ZÞœ)Ÿîcÿõå’ò`;w™ÿ{öìÙ˜˜˜éÓ§O:õÀæC{òþéŽòi+ 22òÉ'Ÿ9r$Ïóÿó?ÿcµ‚C÷GÏ—o–Ogò¿WI£P-©çù ú€Ö‡u’çŒR5#Ÿ!ÓQ:kØOžŽ*Í!e›‰¶éýt[À^3I¿6ÈçÉõD4Hbêˬ®ÇžÛé¨Q£ÜÞÞ¾nÝ:á  †¿ýíoÁÁÁóçÏçw,7‘H$›6mêìì¼}ûvkk«J¥ºpá‚ðÞáÊ•+Â@µÎ$[ôϱ8½^þ=r,00Ðö£ôôt­VkµðæÍ›¶}%Ìîß¿Ïq¡ë,€¼UŽ1‚ˆNœ8aõøþýû%%%O?ý´ UQQQPPÐeûÒ.)•ÊÑ£G·¶¶ž9sÆ…É "ƒÁ ÔÀXª¬¬LOOW©TάŸ––¦P(îܹc[¹zâĉ”””#Ft÷TähþxØ7âããCCC»[ÁéW(,ËFËŸaþe…B¡T*{ÝCrròÔ©SlÏ -Žã„_2Wq&ýöä§£åÍ™òé>ö__Η;ÓcR Ž9òä“OÅÅÅ™[·zòþIn(ŸfVÇÚ¹sç¥K—ìÜC—÷GÏ—o–O3÷å?5›~6«?C~L«%°ÿLÀKŠŸÅ·Š‡/e"%¼?ñÔÕön3øaÂJŒRÝÏ}Š“åÊôÂ×Ä«Œ^ˆ*í¹Ž7ŽˆNœ8a)ÍöîÝ;~üøøøø¨¨(ËW!UUUÂßmmm*•Ê\S'”y¹Ü-á}¯?Çqþò§‡MU»ì‡©P( …ÕÂîFÊ0knnfÙGofßá…¨²ÿþDÔCûR*..î¹Ûƒ•I“&)Šƒ:´•h äößź\?..Žˆ_zé%«õƒ‚‚ˆH£Ñt·CGóÇcd2™J¥Ú\Éd²îVsGú[ZZš››ƒƒƒÌòaaa¡¡¡F£±×Š©ÀÀÀ矞çùÍ›7{¥áœ3é·'?-oΔOëòúr²<8£±þÅ IDAT±Qèðm>´'ïŸnež¦Üh4¶´´Ü¸qãØ±cµµµölÛÃýÁÑóõ•O—[§ ¨·è ™+ÕM•uqù‡=ìo)g˜¦Û.ÄŒ©ÃƒU‚ χ2¼0BOµÍq9†©111žˆÂYž¼ñâÔžÛ©0,Y— Vëêꪫ«5M|||w÷«ý»é×ÜΟc‡8sù› qcGG‡íGÅÅÅ"æ«DT à$OG•r¹\x‘æƒdz,›™™ÉqܱcǼ>aaaaaa]® ‘Här¹ïO«•œœœžž>pàÀˆˆ;ûͺÉæÍ›———·}ûö›7oj4š… ²,[TTÔk øÜsÏõéÓ§°°ðÚµkžI­-gÒß+GËÛcP>ÝšŸ=¢Js/_¾:ÊÑiÊí¿?8t¾ƒòénv†®‰6ì&gˆ}8 mkW]›Ûˆ!â‰HÎûÜÔš©T*”äî†0­««Óh4Bõ0wÿ;zùw)88˜ˆÚÚÚ\‘""¢––D•ÎðtTin bÿ ®3bĈ°°°Ó§O766z;-:†íݻ׋ʹœ¤T*—.]š””d2™nݺURRR__ßÔÔ¤Õj…üvàÀˆˆˆ¬¬¬×_ݼðÌ™3Ÿ}öYÏfgg§¦¦–——ÿýïws{":ýöp´¼=åÓ­ùÙ3á>i¾múòýÓ}½?8t¾ƒòénæv­¥œd›¡÷YÝí.ÿ *Ó²F9ñzÏvžìA-ÏjžˆbYc±ñgu¥dŠ`ÄlÕ¼¯$ØŠùrFµN—¿gøÚÏqw†®P(xžwaw;G÷€îx¡_eyyyJJJJJŠíÀ§^l÷3xðà›7oZâíû¾ÿþûÉ“':T©TzküôÚžD¡P¤¦¦ÑöíÛ­&}¶ímï/¾øâðáÃ?üðò²2;7‘J¥/¼ð‚B¡Ø¶m›[ûÚÙCDúíçhys²|úB{$·æ§€a???«¡>£££…ÇJË Q}óþé>"î/¿ú‚2£d¦ŒˆHÅÒl™n·ÁÏÛ)zàšQ¢a9"J—pû Æ&úg-S¶T/cˆˆxžÿÞèy¹íqóæÍ¡C‡6ìâÅ‹VEEEEEE‘å„½îæƒ?Ç]bYvÆŒDtñâÅîÚ€çyá‰Mx7nœÕp|Z­¶»ù*=@˜PäÈ‘#ÞJ€hçÏŸ¦?^¸p¡ÌÄÄÄ<ñÄö¨½½ˆ”J¥Ÿ_OO!˜Dd5ÔarrrNNŽs‰íB¯éïÛ·ï¨Q£ôz½N§S*•zh3oÞ¼þýûŸ;wÎÑÙ2%‰k­Å¥ß~Ž–7ÑåÓÎòãnNæ§×‹T*]°`ÕÂiÓ¦QeeåÝ»wÍ =|ÿtyùt”£÷GÏ—‡ïŸŽòzþQ/¹Ì=Ⱥ RîYYG‰ˆáù 2 e seŒZgœ4Ê·æ’IZï«-`‰èÔ©SD4~üøÈÈH«æÌ™CD7nܰŠîÜÊÃ?Ǣ͟?À€ƒÁ¡™Hz—””äÂüÒxá^qqñôéÓCCCóóó ¥Ré„ æÍ›g4¥R/$)00pÔ¨QMMMgÏžõüÑÄqÜŽ;òóóÓÓÓe2ÙçŸ^SS#|äïï?hÐ aV+—+99yÅŠ Ã2™Lµµµûöí³š…rÈ!“'OnjjÚºu«CéÑh4«V­ Ø´i“«Êžˆô;ÄÑò&º|ÚY~ÜÍ™ü´ÿz1™L#GŽ”Ëå»vín‰999ãÇ'¢¯¿þÚrMOÞ?ÝQ>åèýÁÑóåÉû§£|!ÿŸ+Ùö>,QºÔ˜.íèäIJº5Q¥‰­µcöŽåŠva䜛&ÉVûºhö°É=ž=ÄÉ§É D-áWJ:t|øðššN§R©‚‚‚X–-((pÕô›ýúõ^çÇÆÆÚ³þáÇgÏžýÔSO¥§§wvv†††úûûŸ:uÊ**ؽ{÷’%Kß}÷]žç…C”–––””äçç»jJ@;ÓßÞÞ¾fÍšçŸ~àÀV±,¹hÑ¢ÖÖVsƒ%•J•——GD Ã,_¾Üv‡è.ÿ‡ "ÌŽ8zôhW=5:š~-o¢Ë§åÇ­œÉOû¯£ÑøÉ'Ÿäå奥¥566*•J¡†ª¨¨H˜ßÜÌ“÷Ow”Oº?ˆ8_î¾&%%=÷ÜsÂßÂCyppðÚµk…%ÿ÷ÿg~ibÅGòŸˆZˆ}_𼬣¿äAgE?†È¢ƒe,k*±ãÇ3øa­a ©—jìÜdŸA®`(ëaͤÂ"UM&úXïoÙ,Ö™L¦>úhùòå111«W¯®¯¯ïè舌Œ”ÉdÇmÞ¼Ù“Í_û9vÈÚµk†Q©TÂtÿþý;v¸ö¢&m"¢˜˜îàÅ;ý ®_¿þÿñ3gÎLLLT©T•••'Ož=nܸÂÂB{Ö/,,4 &L “H$?ýôÓåË—mÑJKKÛÛÛssscccu:]EEÅñãÇÏœ9#ŒðæÂ4ìLbbbß¾}‹ŠŠöìÙ£Óé„… ć‡/Z´(111--ÍüT+ŒüÜåx= rðÝwßMš4I©T‰ÿVÎ¥_GË›¸òigùq7ÑùéÐõrúôéêêꜜ­VKDåååGŽé²Ôc÷O7•OG9zq¾Üzÿ”ËåBÿX3‰Db^bž6Æ–ä¿ žgßÓŒri,ÃU ‰oáÙ û£äœÉË<Ä0_ßq’‘r ¬QÅðžj‰½ÈIŽq2ã»m_ÍZZZþô§?effŽ3F˜G¤±±ñêÕ«û÷ï7W›{’Ç~ŽÎó|[[[EEÅ… Ü1«ÓñãÇÓÒÒ Åþýû]»g€_¦‡±­‡êɤø‚”””+V”––nܸÑöÓ)S¦üú׿>uêÔæÍ›=Ÿ6{<êé÷5îÎÏðððµk× †Å‹;—R Bùp¿K—.Ù.|ÞäxÒ°aÈèêÕ«¶±,;räH"ráPæ.÷¨§ß× ?-8_^¨àg„÷²²²BBB,—ÇÆÆ¾ú꫃¾uë–0pŸozÔÓïkŸœ/¯@ X€Ÿ‘J¥¯¾újJJ Çqׯ_†NQ«ÕÑÑÑDtöìÙmÛ¶uttx;™ÝzÔÓïkÜŸhëZ(ÿîÖe XD•ÖX–MMM8q¢F£ á8®¶¶öúõëß~û­å|ô>ëQO¿¯qk~"ªt9”·BT âa´p1D• ¢JQ%ˆ‡¨ÄCT â!ªñU€xˆ*@}çwnÞ¼)zç±±±o¿ý¶åƒÁÐÔÔôÃ?=zô‡~½gqœ¹]˜¿‹“yðK€¨R¼ÐÐÐuëÖµ¶¶æççÛ¿Uttô Aƒˆ(55Q%دŠgeF"" Q¬ÄºÒU›x’D"Y±b…Z­ÖétUUU~~~ñññß}÷·Óõ‹ ÓéZ[[m— —ì¿®®Žˆ† Œˆˆˆˆˆ3fÌ×_ýÕW_¹dÿàSUzZyyù‘#G"""Nž<éí´À£äKÎOøCE¦wýÛÝ´‰'iµZµZÝÖÖööÛo744‘B¡àyÞÛéúE(--ݲe‹ûöÿú믛ÿŽŠŠÊÍÍ3fLnnî?üpåÊ÷¼Q¥§ñ<¿sçNo§| Ï+ž'j÷±1™Yâ•ÄsÄt¸§ftt4]»vM)‰H§Ó¹ã@à]ÕÕÕ›6m }jjjΟ?9vìØ±cÇr'„=üÆOš4iÁ‚ ÑŸŸ_bbb—áyœÃ¶¶¶ÊÊJµZ=yòäÑ£G¯_¿þöíÛN®_QQa4¥Ri\\Çq·nÝ2t÷î]Û›L¦ï¿ÿÞüßøøx‰¤÷˜aÀ€/¿ürXXؽ{÷êëë###Çó‡?üÁ*0s&?íäh~Ñ´iÓæÌ™£×ë«««F£F£ùÕ¯~¥Õjׯ_o•~ql÷?sæÌ¤¤¤uëÖu7âÈÈ‘#ûõëGDÙÙÙîˆ*û0&²èèÏtÛE0‰å~#Ó ÅØÄóu<ËÁ…0üEç»:ÿNoÔXΕ놔¤çùj^@|8Ë‘‚¡>þ•W^Q©T{÷îíaô s{ìÎÎNû¿)À/“w¢Ê ôéÓ§¤¤dË–-ÂRnnîÌ™3Þxã†ëèß¿ÿرcïܹóÕW_•——6ìøñãV«M›6mòäÉÍÍÍÛ·obärù3Ï<“™™™ŸŸ¿zõj˧Xëoß¾ŽÛÑѱfÍšž¿¯Á`°\gÆ =o"‘HÞxã;wî|ðÁ•••D¤Õj—/_Þ¯_¿aÆ;wÎreÑùi'Gó‡ˆd2Ùœ9söîÝ{ðàAáálÔ¨Q‹/NIIyê©§ L’íþÓÓÓ/^œ˜˜8}úô\¹ÒÖÖæççWZZêdºôšŸ]OŸ,ÏÏ“u ¡Q…‘Ùª÷j&Ó$ÜBY§”¡–Ï”rû9¹;Ùƒ†› }PÓ{É(Ù¡÷zTjY.OÞéÏœaþU¦û@ßKéíÉdZ¾|¹ð·PJOž<¹k×.{¶µçògYvéÒ¥±±±•••?ýôÉd²ÜÜÜéÓ§çååÕÖÖZÍ‘P[[»jÕ*FóÖ[oõíÛ7??Ë–-¥¥¥+W®ÔjµC‡u&ª¬ªª*+++))¹zõªPV¥Ré¬Y³rrr&NœxôèÑ;wîXmâÐåïˆ މ‰yúé§5MYYÙ±cÇ,Wpô|‰8¿V†úÒK/I¥ÒmÛ¶ÙþvX2W ?ºõÃã…¨R¡P$''ÑîÝ»Í/Ý¿ùæ›iÓ¦©ÕêÈÈÈ.Û… 222Î;·qãFaÃææfÛÉ9”Jenn.Ïóüñõë×……z½~ÇŽjµ:%%eÊ”)–Q‡£ë{˲§OŸÞ±c‡9&¼víÚùóçÓÓÓãââ,+ÉO{ˆÎŸ;w™ÿ{öìÙ˜˜˜éÓ§O:õÀÎ×·Xí¿´´´_¿~O?ýôäÉ“÷íÛ×e;تªªeË–I¥RïV>$IŒBµ¤žç7èZÖIž3JÕŒ|†LODé¬a?y:ª4‡”m&Ú¦÷Ó=l{Í$ýÚ Ÿ'×Ñ ‰©/ct²ºR{.ÿQ£F <¸½½}ݺuMMMÂBƒÁð·¿ý-888##cþüùï¼óŽå&‰dÓ¦M·oßnmmU©T.\Þ;\¹rE¨Ö™d···[µŠç8î‹/¾HLLŒ2dˆmTiÿå/ZzzºV«µZØÖÖöÇ?þÑù‘UlKKË—_~iÛÞÑó%âüZÊÈÈX¸p¡ÉdÚ°aC¯îß¿/ÜFÐõ W^hb§P(X–5–?Õ&“Iø¯R©ìaÛŠŠŠ‚‚‚ž’´´4…Bñã?šC 3avõ#F8³¾g †íÛ·[U3 µ*•Êr¡3ùiqùc0,C>Á‘#G8Ž Š‹‹s2UÝíßh4*•Js¯W[ǹ/¤l6Q£Å¿În*‰ØF¼/):W*ÚÍÿF±ÚFJxòôƒ&¬Ä(Õý|Ü×SœÌüu±ÞiiÏå?nÜ8":qâ„9ä0Û»w/ÏóñññQQQ–Ë«ªª***„¿…^掚ÂE$—»%¼¿qã…††Ú~dÿå/šB¡·æ’Q]]]]]]CCƒP=+—Ë####""¬Vsô|‰8¿fÓ§O_´h‘N§ûóŸÿlg?óææf„”öðB]eKKKssspppBB‚ð\EDaaa¡¡¡F£±çеâââ^'é"–ÀÀÀ—^zÉ꣠  "Òh4άïEz½žˆXögïœÉO{¸0…bÑÑÑæ¤ºPKKKMMF£‰ŽŽ¶=`. ÞâMM®T7UÖEq {ØßRÎ01L·]^S‡«žexa„žj›ãr Scbb$<…³=Þrøðá§Ÿ~Z©T¦¥¥*<<œ<^<~÷»ß%%%•——XN¨ìÉd8ÿǽÿþûF£Q¥RÍŸ?ÿ¹çžkhh°§‘¼£€wê^|ñÅ™3g~øá‡ï¿ÿþ®]»¾ùæW…@D$Ì 9tèP;ªqt}+¾Ð>ʧòSÀ0Œ0é¹¥èèhᱯ¼¼Ü¼P¨ðóó³ÍÉjºÜÿþý…V~}w(3>¨ýP±4[¦ónb,]{˜°t ×çç]'³¥zCDÄóü÷Fï¼²‡0«Ä°aÃl?ŠŠŠÆq±œ`ÖÝ Ejj*mß¾Ý2¤>òX2|Ã0B3ZËño=_âÎ/ÏóBûˆC‡9rD*•¾üòËÝ ê"x!"êÛ·ï¨Q£ôz½N§S*•\ÒÖèüùóÂôå .´§Á›£ë› Š”J¥mxãINægLLÌO<Ñ×?R©tÁ‚V §M›FD•••wïÞ5/FÝdY¶oß¾–+ÇÅÅM:Õ¡ýçääQyy¹Õã»%‰Dâõ§ù*^r™{pj&H¹ged$"†çƒÈ4”5Ì•uF0^ç¤Qnäy"’2ô’¼3†1‘Œø,‰n²ôÁ¸5—LÒz_mKD§N"¢ñãÇGFFZ}4gÎ"ºqãFÅÃå„!šÉ¦Uvrr²P\9233…eeeæ…Žž/çÏïgŸ}vùòe¥R¹lÙ²^{ØÆÅÅ%%%õöÍÀ-`›šš„Iá~ÿûß[}$4‘Ú·o_qq±èýs·cÇŽüüüôôt™LöùçŸ×ÔÔùûû4H˜•Nôúf---AAA¹¹¹{öì&$$ð<ßó4Ü®åL~&''¯X±‚a˜ƒîÞ½»ËuÄåÉd9r¤\.ßµkWcc£T*ÍÉÉ?~<}ýõ×–kvttܽ{W£ÑÌž={Æ F£Q¡PdeeÍš5«‡€¬ö/“ÉrrrÆŒCDÿûß»ÛJ£Ñ¬Zµ* `Ó¦MgÏžín5øÌ Xɶ÷a‰ˆÒ¥ÆtiG'ORzЭ‘ˆ*Ml­±÷—ËíÂÈ97M’­öuÑìa“{<{ˆ“O“ˆ(Z¯”tèx’/aalØvžþ[ïéY4RZZš=hР×^{mÓ¦M•èïï?wîÜ#Fp×]9w“–––†††ÐÐÐßþö·[·n­­­U«Õ€¨uuujµÚMÓ–ø–e5Í”)S&L˜@DÇŽ³ ÕÑóåüù5™L7n|óÍ7û÷ŸÿÞ{ïuwŸ=zô‹/¾HD_~ùå¾}ûœË€Çœ¢Êööö5kÖ<ÿüó´úˆeÙÈÈÈE‹µ¶¶^¼xQô!.\¸°yóægŸ}vøðáǯ©©Ñét*•*((ˆeÙ‚‚‚3gÎ8³¾ÙáÇgÏžýÔSO¥§§wvv†††úûûŸ:uÊ“Q¥3ùÙ¯_?¡ú166¶‡CˆÈ£ÑøÉ'Ÿäå奥¥566*•J¡†°¨¨H˜_ÞRaaa^^^jjêý×544DDDÈåòC‡µ··Ïš5«Ë$u·ÿƒ^ºt©»/2dÈaº¿Ñ£G{7ªl!ö}}Àó²Žþ’ý"‹–±¬©ÄŽÚÊà‡µ†&{'·ìy“}¹‚¡¬‡5“ ‹T5™èc½ùôà%&“é£>Z¾|yLLÌêÕ«ëëë;::"##e2Çq›7oödóWÁîÝ»—,Y’˜˜øî»ïòüí·ß–——{>I4ä'x‘Fë€G‘¯ŒÖ D• ¢JQ%ˆ‡¨ÄCT â!ªñU€xˆ*@ ui generation https://json-schema.org/implementations.html#web-ui-generation - https://github.com/guillotinaweb/ngx-schema-form - https://github.com/hamzahamidi/ajsf angular igh - https://github.com/dashjoin/json-schema-form - https://github.com/json-editor/json-editor - https://github.com/jsonform/jsonform - https://github.com/vazco/uniforms ## json schema is ridiculous "mimetypes": { "description": "if not null and --rga-accurate is enabled, mime type matching is used instead of file name matching", "type": [ "array", "null" ], "items": { "type": "string" } }, what the fuck???? this is the only thing required to see that json schema has horrible design ripgrep-all-0.10.10/doc/rga-fzf.gif000066400000000000000000005520411510417424300166670ustar00rootroot00000000000000GIF89aŸ¸õÌÌÌÔÔÔ—˜˜sss«¬¬³³³‡ˆˆggh|||œœ¼¼¼STTkkl678##$ÃÃÄ£¤¤KLL:;<”””CCD[[\789+,-000./0Ý“1kE¦ FXjTá¹?ƒFµ–5‚mPÔ¯Kţݯ<îþ/¸N<Ÿ¯¿?VÿÌ0 ÀøV0¡Â… r8À¡Ä‰+„h1£Æÿ½aì2¤È‘·>’<‰2¥ÊN&Wº| 3æ –2kÚ¼‰3 Íœ<{úüùë СD‹ݱó¨Ò¥L›>ê4ªÔ©TÃA­Š5«ÖžI·zý d×°dËš-8ö¬ÚµlÝ¥m 7®ÜioçÚ½‹Wݼ|ûú=µ÷¯àÁ„-.Œ8±âB‡;~ ™NãÈ”+[îwõ²æÍœÁLî :´h!ŸG›>:µêÕ¬[»~ ;¶ìÙ´kÛ¾;·îݼ{ûþ <¸ðáÄ‹?Ž<¹òåÌ›;=ºôéÔ«[¿Ž=»öíÜ»{ÿ>¼øñäË›?>½úõìÛ»?¾üùôëÛ¿?¿þýüûûÿÿ`€H`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡~bˆ"ŽHb‰&žˆbŠ*®Èb‹.¾cŒ2ÎHc6ÞˆcŽ:îÈc>þdBId‘F‰d’J.Éd“N> e”RNIe•V^‰e–ZnÉe—^~ f˜bŽIf™fž‰fšj®Éf›n¾ gœrÎIgvÞ‰gžzîÉgŸ~þ h ‚Jh¡†Šh¢Š.Êh£Ž> i¤’NJi¥–^Ši¦šnÊi§ž~ j¨¢ŽJj©¦žŠjªª®Êj«®¾ k¬²ÎJk­¶ÞŠk®ºîÊk¯¾þ l°ÂKl±Æ‹l²Êÿ.Ël³Î> m´ÒNKmµÖ^‹m¶ÚnËm·Þ~ n¸âŽKn¹æž‹nºê®Ën»î¾ o¼òÎKo½öÞ‹o¾úîËo¿þþ pÀLpÁŒp /ÌpÃ? qÄOLqÅ_ŒqÆoÌqÇ rÈ"LrÉ&ŸŒrÊ*¯ÌrË.¿ sÌ2ÏLsÍ6ߌsÎ:ïÌsÏ>ÿ tÐBMtÑFtÒJ/ÍtÓN? uÔROMuÕV_uÖZoÍu×^ vØbMvÙfŸvÚj¯ÍvÛn¿ wÜrÏMwÝvßwÞzïÍwß~ÿ xà‚NxᆎxâŠ/ÎxãŽ?yä’ONyå–ÿ_ŽyæšoÎyçžzè¢Nz馟ŽzꪯÎz뮿{ì²ÏN{í¶ßŽ{îºïÎ{ï¾ÿ|ðÂO|ñÆ|òÊ/Ï|óÎ?}ôÒOO}õÖ_}öÚoÏ}÷Þ~øâO~ùæŸ~úê¯Ï~ûî¿üòÏOýößþúïÏÿþÿÀ p€, ˆÀ*p l ÁJp‚¬ /ˆÁ jpƒì ?Šp„$,¡ OˆÂªp…,l¡ _ÃÊp†4¬¡ oˆÃêp‡<ì¡Ä qˆD,¢ˆÄ$*q‰Ll¢ŸÅ(JqŠT¬¢¯ˆÅ,ÿjq‹\좿Æ0ŠqŒd,£ψÆ4ªqll£ßÇ8ÊqŽt¬£ïˆÇ<êq|ì£ÿÈ@ r„,¤!‰ÈD*r‘Œl¤# ÉHJr’”¬¤%/‰ÉLjr“œì¤'? ÊPŠr”¤,¥)O‰ÊTªr•¬l¥+_ ËXÊr–´¬¥-o‰Ë\êr—¼ì¥/ Ì` s˜Ä,¦1‰Ìd*s™Ìl¦3Ÿ ÍhJsšÔ¬¦5¯‰Íljs›Üì¦7¿ ÎpŠsœä,§9ωÎtªsìl§;ß ÏxÊsžô¬§=ï‰Ï|êsŸüì§?ÿ Ѐ t -¨AŠÐ„*t¡ m¨C шJtÿ¢­¨E/ŠÑŒjt£í¨G? ÒŠt¤$-©IOŠÒ”ªt¥,m©K_ Ó˜Êt¦4­©MoŠÓœêt§<í©O Ô  u¨D-ªQŠÔ¤*u©LmªSŸ Õ¨JuªT­ªU¯ŠÕ¬ju«\íªW¿ Ö°Šu¬d-«YÏŠÖ´ªu­lm«[ß ×¸Êu®t­«]ïŠ×¼êu¯|í«_ÿ ØÀ v°„-¬a‹ØÄ*v±Œm¬c ÙÈJv²”­¬e/‹ÙÌjv³œí¬g? ÚЊv´¤-­iO‹ÚÔªvµ¬m­k_ ÛØÊv¶´­­mo‹ÛÜêv·¼í­o Üà w¸Ä-®q‹Üä*w¹Ìÿm®sŸ ÝèJwºÔ­®u¯‹Ýìjw»Üí®w¿ ÞðŠw¼ä-¯yÏ‹Þôªw½ìm¯{ß ßøÊw¾ô­¯}ï‹ßüêw¿üí¯ÿ à xÀ.°Œà+xÁ n°ƒ áKx®°…/Œá kxÃî°‡? â‹xÄ$.±‰OŒâ«xÅ,n±‹_ ãËxÆ4®±oŒãëxÇ<î± ä yÈD.²‘Œä$+yÉLn²“Ÿ å(KyÊT®²•¯Œå,kyË\î²—¿ æ0‹yÌd.³™ÏŒæ4«yÍln³›ß ç8ËyÎt®³ïŒç<ëyÏ|ÿ è@ zЄ.´[¡èD+zÑŒn´£ éHKzÒ”®´¥/éLkzӜ? êP‹zÔ¤.µ©OêT«zÕ¬nµ«_ ëXËzÖ´®µ­oë\ëz׼ ì` {ØÄ.¶ !ù ,D!ù., .`ÿ@€pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕN/.ÙÚÖO-ÚÚ1¹Øà.Üzä_1/32Ù/-êG10ð3/IÚ/[ßÌNœ1FhdƽlçðhÈfÐKŒrÚ`@(ÒãŒ$]ÀØòî€ CV$sAÛÆG¶é¹(cáš]˜21çÇÿzàv^i)°<+ÇuñÒQLˆzà%år!Æ  ÔF„œ ôªé™Q˽‘FÂYÚP‹0Ðò´¨„põy{†^Žî²Í€£­šîÚƒGذ*+0!HW&“‡äÐÒ]Œï/¿l`ÓRTÒÀ«gŽ‹Eâ5gÅwH‡`.2›³F"L˽XÆàÕtCähÙlŒI…—ÅÓÅn$ð„ YZŽm×JÌž.¸ Ñ45 Q®6Iº#G§ÊÆ^„`9ÖÍG—`ûzÊ% Á NüÉæÏÕ×\RÙuo/´–Øc%øQþ$O€íAÅ\FÇý$DkÂÍÿaPM…Wf ÁäH‡™„ÅzôÁáQÎ]˜Ó e˜ÒkôÙ7_sú¹'œP4&HÎsKÁp/Ø"-XG„})â¶R]R>¦ßg'Ø‚hãay5—‰àxŸHÈáµ—åêÁ™M¢½è¢žfÞ÷"ÁŒzú( ˜!¤ßQ;á$%–DP°¥WŽíÑU%”ÚN™UÊ“˜N„i ´˜Ù~ÝUfá4Æ3WkEÔ‘Aq ªé¦cI•Dyn¦ú©…uÕic¥°ñ¨Ó£rwç”ò‘¥fžÒåºj¯Ííäž< ~¨Ú–H`£¡ª"Ù[M‡Ê ®WÏ’ÊÿA8qšQ¢þ¬§a•DðWލ&ËjŒ~ž ê@Obê¡Æªè+µ:‰Ë辂Yu&¼~6íîyÄì½sþצ´éjŸ ?Æ',A/yÑ©ÛE/ƒñá;@tJ¤G¨Èù‚ÌÄ ^êêÅÑnø±HCPÀšzJ¬ïqÀ¡ŒãqãkÑk>œòÇ!³…ŽRœª½™„tɳ|ižê1ÍNR Úô‡Ø3Š?‹÷ÀÓm/)´»¬Ai[I#ž¿ª'ª¾÷½½Ä¿”i ´›ï}øvy5Ô?Î2áÃ\¸ÛH ý»ÇÙD©ÝÚ„FD©ô¡¾x·;#AVÆoÞõo`/Kÿ;]j[Ê\—óê©îŸ¨ûLÞ³ç·ÿJyîG·¾0ÏH=1¯_®$OMæéòrŒ¯ÞBº+£xéÝû’逯¥ü Ù"D.ÄØfÕÀß ß6xðYåß©M}áȽÏßBBH38ömæ}åN öT¢rY§]œƒÎ—˜¥Ó<ü*‚n·†qÈá×J"Ôš3$c6 Ô+¦1,'BéíŽ>¯惪êØaúãIÝ‹~ÊÃÈÌvBF(ý¡Q–HDRap*ƒÇKÈ’ÄÕÉÐ?ñ¡Ð;\–Âr¬ƒ¶kà:XŽâuî`TÄÐê:8Fi•18ñ©ÐŒ@7p ÿÆP†BX¬^XŽA¦/:< ¬šÓò`¥ S®±…[®c¤_ )È"ç$’áÙÏ~N! ('VPЬ@ U¨>úO$DT¢›h( Ú¨£›Ø€F¡pQfB}BIMЉ}”£{GX)K-Ò‚Ö³ 2é$DZP¨ô£:­FúS¦3¨•¨i?+j„œ"µ -èCI ԧ„¨T½§U!¡TB´ª[]DTû9Õ(85¬…ài?}zP°¢Ug}k'â*×Mе®™¸+^/¡×½V¢¯~`‰Á–A!ù,'L ~@€pH$ŽÈ¤²È*ŸÉfJ•2©PkûÔ¹Q¯“‘âñ9¬ÙCUjXÉS*È›(·§þ+{qxs+‚k|WŒ„,SB}“dtgš—™„›[”–œ •sŸ`ž§¬¡«\­£iƒf¤Z·^»º¹V½À¿RoA!ù,5L ¦@€pH,ŽÈd²È$*ŸÈ¦ •6©O+«Ô¹QïÈG³PŸdâJ•J­"ôû;.\Õÿ,ykhBuz†‡ƒ|t*D‰zlBuEŠ{`uE‚˜\šœžv‹™‰LŸ’›)¤‘„”–¥ XB—’¢µ¬µ¼~€À±},ŠªÇMt•¶TZ£ÐU}ϸ)ަ¡ØÄ,®Û·…—cÌ^ÁbéèhA!ù,DL @€pH$ŽÈd²È*ŸÈf •2©Ok«Ô¹Q¯“âñ9 8†++•R­¾d¡œÎ§GÔyvBs*€`V‡)Š\Z~mk†{})„nB+}r{™kwD’šœ‰E¥kžEªy§©¯‹®)£– –|µº‹›su³išÈ”fË^ÉÌÐÀÒÇÔXA!ù,*LE ÿ@€pH,Èd2Àl:ŸÊ¨tŠ|ZÔ¬vy½n¿à®L¦Š­åtô U»lì{.Œ7ét;?×BD!"‚C †‚ [~€‚C— ’B£¡Yœª¯¬Ÿ¯§†"––¦­z²’”¬¤’ªµ¿E—¬S®«G‰¨»D!ØÊ¼vŸGÅ´Cà‘ⳤDÁØê§Íƒß"ŠÔãæ èæu½‡HîB¨Bf‹ß$|ú¸42n@¹pΉZ@Bí@ë iDP)®Ù'(‰Dz§$gÏ É U¥"WðP%™ÛâøS2³DEõD*ɨdQ£€+†¸‚’P.vÈ4äãg ¥ZTæÑc#Uø`ä*Å¢¹bÇFRé.ib«¦M#w.™ºv¿ø !ù,`L Ž@€pH,ŽÈd²È$*ÏcsN›Õç•™U6? Ž¸ót—ÅÏx\>#™ž±º˜Ý&ۈ׋ËN}k…dwnB„†{xyƒtabstˆg~‡‰E{›˜|œDžCŽ™€§‚¥¢Ÿ]©£ ­š«¤C¦B¨¡µº¬¸®¶³[¾·Ä»ÄÅÃÇ¿ÌÆ[ÈÉÑÎgA!ù.,*L ÿ@€pH,ȤrÉl:¨tJ}Z¯Ø¬Jí ¢Û°xöšÉè´Úhö®ßðr»_¯Rø$ QåSVstuh~{[,,‚R„hxˆbwŒYŽc–…)+Z™`›•)*ž ˜¢~ –¦”+† ­D³‹¦©YŠŠ”¾yÀÂy™¬Ÿ†y¼¯ÌŸDË¿Y*ÕºÖ*ÄØºzC}ÖxØÇŽÉ­{¸©ÁÐêëB*+Ú¼YNõF¶ªÈ´H~§Þxæ‘ÔM˽%êbEswET€rI& ÈD¢ASM \¸Ñ‰ÃdÙY’Ï›´a[&ñ§¤dÃU.oáÁÇÐÙ6…ÎQy„g‘µ˜O>¢Ž&/ˆŒ’3¤,ŒJ.ÚD¨N€Iºã¹ôŠO¬Nµ†UbÕiWŠïtJ½ø¯Ô©W=ÂŒ›¶­È­oÓfÅòu@ߟt™”M¢.3°Z»Zùº– UÁsÃæ—øâ'_'ëR˜vl’ÁJ^ÕÒù*€ËöòÉyèÈã%µøÙ@ªvÕUZPÛÞ 6“xIëòηcaˆ+â{I®ÃË—7N=¨ñêØ!#Ëά¨ !ù,šL ˜ Ždœhš–,©¾h+ðÜÒ¯Íâªnoeû9„ÓˆL.€¤²ÈŒJI˜‰„€V§H¡:ªÒ€ˆrJ€/[ô° °íæy1É'%ZPipj„{‰,_a‚‹†s'}.Œ<"uw# y‘›ˆ¡‰š8#eg•bkZ\^§4:~®µ‡¸z£»º¾sÀ·µ¿¸i!!ù,©L ˆ Ž$œhš–쨾hÛ°ÌÒ¯]âªnò1ŸOÂá1 8”äi.­ÑÑ4PuBZª•øýu¯’@V´=“±`¶Ø sÇÀ²üNOW¤sh$o$‡y'„i|W[)Ž<# mxItFW©o«­¦¯8L¨>G!!ù ,·L  Ž$œhª–쨾iÛ´ÌÒ°]â¯nò1ŸQÂá1,™" b"©"2®¥¨BÃ(ÛE2*œ4N­p¤Á63âM$9¨ªù3|:L zjeƒ{gŠ#Œ{'‘#‚„`# '›u‡hU”j)Urt@#†‡«pFj½¼>Ž¿£Ã³IÂÁ¾ÉG!!ù,ÅL y Ždœhš–,©¾h+ðÜÒ¯ÍâªØ¨—/¸L‹SÐ4< —®fà)lR™V&t$j«Ãk4ÝŠºb®4}^±á÷8^óX‡ÅŽÃ|4,pwU md$Dh:s‰–Žt™•™œnž –¤:]!!ù ,ÔL tÈIi¸8ëʧþYפȑ Y¡‡ÅʆÕ[3ÆG"ç(ôƒÍÍH” ì—sM‡ÕÚ•™¥Ø¨3ë2yƒ(36¬ŽHï–Ü”»áj.^úoe‚$„]BxE‡lEŠŽƒu‰‘”“*p!ù ,âL ‡ Ždœhš–,©¾h+ðÜÒ¯Íâªnò1R¥Ð¸O¥D€`<&—Mà“¹;Dk‹Ã vp$%õ‡©£¼)'¯¶Eo»4 ÕÇùk.]€s4% …5B'~t% 'fVW, b'[™ƒ>g{£¡¥£š¦¤¦«¬°¯¢ªV!!ù,ñL ¥ Ž$œhª–쨾iÛ´ÌÒ°]â¯nò1ŸQÂá1,™Š€eh<™¤tÑ^†@¢„:—¢„ùW9EíÈzP¾Eñ(_°çuq~@lj .h#Q `z‡<$Y r”8%ak›5$'?w#„ ¨‘®ˆ;…µ©i7Ž" “³•¿º»wa[ǯF¼>_ÏG!!ù, L@ÿœ©Ëí£œ´Ú‹3¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñhÒ(—̦ó 6RÒªõŠÍjÔ­÷ ‡»â²ùŒ¦Óì¶{ŒzËçt躎Ïë§ñ½ÿ¯w8Hx&Xˆ˜˜u¨ØèØÄø(9©ÖGy‰™É‰¹Ù úøJŠ8ZŠúwšÊŠ·Ú ûöK‹6[‹ w’Ë;wÛ lõLü4\Œ¬„´ÌÜ켓½•Pm}}ý¬½ÍÍ#€ ^Ý=N^În®¾ÎÎÞ/¯ýŽ=_TŸß￳ï[€ Î(Π…Ô2|1Â+Bœh1ãBŒZ;þãè1ä="K²#i2%9”*[Òsè2æË€2k6ci3gûtú‚ó§PA‡=ó¨ÒE—:UÑô©ÔQ§ZQõªVY·ZíêU*ذNÇ’Ujö¬Ñ!ù , 1.{ÿ@€pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏÿŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèÿᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xf©å–\véå—`†)æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvêé§ †*ꨤ–jꩨ¦ªêª¬¶êê«°Æ*무Öjë­¸æªë®¼öêë¯À+ì°Äkì±È&«ì²Ì6ëì³ÐF+í´ÔVkíµØf«í¶Üvëí·à†+î¸ä–knM¤«ÿ.ì®»XîÆ«.¼òÆKo½ëÞ‹oºúîëEðL`ÀOlð,¬‡Á#bA L°ì;oL°À|pŸ1ÅC4,Á'2±H¬ðd°Çü†Á@+ÑÀ .GÐrÊxP@´Ì,áòSðÜ3?½…ÂG«µI3ó1WÝ®¿>í×gh0D„]ÌØF$p²Ù) +« ÆŠ €üõf¸#Ÿ÷È÷.ëå ?³ €Ò!|BûßV +€X=þÑpðH© ,vH!PæxB\ßÁwŽaà{²›¢Ô•9#¬€DX™œ˜ oŠ€ƒÀ àB'n·‹@ú$Fÿ-‰9d]ñæ1(¸M}LÈØñ¼(Ã¥ ŽB@`Ý€F†M€äû:wCùñeôÞ6¸„²á‹tý9CF® … åÏb’E‘{ Ìäõf5?Î.’=L‚'‰P€BòÐû›ä"1ð„]Ò‰Cè›ÍGJ^Þ2 š4}ØFs‘À‚+9ø¿’e1–Î\¬VÂ'ˆ.ˆ„f.‘ðÅ#Lì‚•TûDF¾‘1-}M fÍpÍÇY’x¬¬cä¦WN!P›ägÚùƒѳžŒÜæVVMîM2”­4%ì6Ë(Ó£ñóÞ2:ÈO’šþ”§ÿ¦·?ØÌ{ÿ5)ô)̺°—7a3¥ØQð­“'ÀJ-hSm25¦lj=yM¡ŠË£à~JÈif´šHY/ʽñnŸÕfQUF>Ó A-ÂYuTo"O£<ªÃ:VY2õ„ãä[:“IU“Zõ)•"B£€Ó\£bUj#OºV"2a­@µª2ÝWT2Ò¢d}[]Ãy×>^a²$•æ¶šIõMm 4碘RdPœ«¨[ÑŠE%Ì–­¥dR;Q_vs}'O;‹6+€v³‘EÜY9„Œ±v…K^F¹×û½2e«- ºÑ´f‘»É%¤À[]é2¡ ÿÜ)¿UâN·B€åRùXÜ&T€qˆLM›³N¦UŒq´!£)JÞÁ3‘[”â:I›—ݱo¶ã5'=û 7¡àï`X°qNŸæîm}øÃ‹1M«ãF9J\|Ù²{ëðüBê7^Btqôléùr(?öµïÀ QÕÚ×Ij°ý£÷¸Ë`ÛÙt:­gK!HcWv‘TueûFºX†˜³ôu1 Š@ÉYq|»çP)ÊÈ5Î’hoèU‘Öͻ ]piªg3y§´}, ¹9TŒ^1~©ï— 7âŒb@y À ‡a 7Ða®×)2&c^¬¬Ÿqøh)ÿê‹E3¬–£v@Iqaj74Õ©(ù4^m¯X+t´vW¿ÄìQ÷šœÀ¶°‡MìbûØÈN¶²—j-0ûÙÐŽ¶´§MíjG› ÖÎ^¶·Íín{;×ÙÆ6¸¿í1 ˜ûäN·º×=mq³Ø ¼)ðîzÛûÞx͸§myû›ÞW¼çm5øßO¸ÕàïÆÅkxð÷Ýýí ü›àoxÁ¾ïeS@ÞiT¸ÈÉÉpŒ¯«äÿîïÖÒ9gÜä¹6¸¼;¾ìÌ|ä8çʾ. ø{q~^ùºwm™—€æÉ¾ÈsÎt|aÀåë:€¼p=Ч›èÏ6z·}^ÿ‚*6ýëgÃzÔå Ç|m­ø@Ñ%P‚©[€çê»»,~qz?¼ß%£ÖÝ•¾Ìî|g»ß%wyµ}سœàÀ€³Kê$#ÉüŽN.¼ƒ~ÁÃý}ˆg>ðƒ·Ýº ào ¨ËæKöÎ},éxqÃboûÅ%žá*l ¸A2€ôz)}ö‘ÇžÜÇ^÷Í_œëG{ÄgŸÏtý~öe¯—`Î?øê‚<Î.Þ|£#Ÿìîr€¿§ŸråÏhÄïú>þ`£ÜèSç½óp|¨ËøßšpÏÿ´›î‘gOØwrPxS€éÂ×wséBS'x&€ €ÿѧmÙC93wSg6“zy÷÷o.ð7{—.âw}T×€*H€à€^§z H¢g3Ès‚Œ—BµÇT" ü§{Ŷ|Ž×BÆp3pJè‚$ÀUd}gƒòVyIÔ~ #ošwŽ~UøpV˜.¨7FbH{3~$(‚@zX¸†)×8‡xTHƒè†|Íç†Uˆ†Âötþ†N('êrÆԗ…Ø1V÷ûÇh'Àæ€øjׄ€—†&·|Égˆrˆ‚S¸|‘¸/ 8^õrE^ ˜}ö×~F×|§¨.)xˆg£€O¸.‚—¨X~ÆrÑgtó~ÿ·Ø„ĉV§.ŠÈjlxGvM4ŠH‰×ƒz€ø‹¸9‚v—Œ°Ëèt8z|·(Še8‹sƒäG#ȉ_hx݈|îò|…¸p}Ø.(·E¯x„Xx؆=˜ièÆØ{ìw|éè„'ÈŒÔGw+8ŽÉ×çp‰‹òBwòò‡à˜€ñgyä¸wꈎ®ØŒé¢‡–è‘£ço[˜‹ˆ†çˆn©²(ŒBGŒ‹Â2!H޹„¨=Çq |'è:7)Ž.Xƒé7v·’yˆî8‡%ir÷øj"é”î"‹8¹‡)¹tJÙ’ñ¢}º&t?ȈhwŒÆDXyÿ挩–Õ7…ÓH‡$‡y…ÈuI‹nÙ”ûx•x'м¨‘$‰‡é.²g”Ù1çØ¸/õ˜–è•\Y•üˆm@(–!@–Êæ€F¹~S)/LX‰pŽ<‡‰êR‹òƒì(—ërxõâ€Di•¿x²G†«({ùšmø|Öxšð›[ä…Xø—¾øxÍø’_élŒH„ÈfÁ—›¹fÈÔ‡rP8‡™è}ŽÈ;dø–wøšÉw¸Ù›‚I’:XE˜Fð÷hçX/ç(zvH|ãešÂ7iIMć ˆ‰ƒøo.9™[#„€šÇö’"ãŸ]™r8“ŽŠ?è^ÿ`•É.ß8uÓ‰ È–×ðùs¥‚¿X¡%X|·9˜’ |DyŽÙ™ ‹I|5ø}&¸ °H™ÐF¡ÿ¶‰N¨†Ø)£éb‘Ùè–8t}Ý ‚ù”i£)7…Ú‡¤ú ˜%È£‚i 'w¡Sx¼i›Nè¡Aj’G” S…ˆœfçlÑD¨ŒN¥^G£Ìwx§wnI‚¡èwãˆjºx£³  ‰/}w-ä¤/Ø¡hé”#`Aθ/}i,¹”À£]J‰¬çˆí2† ÀŸz£1 vøÆ‡Ïy ü(ž è©‘imÃhªï&u‡¤l^ ¨uê©“(m©ªªëœ57ª=Yªÿ¦ª©ÛV«¶¬×óªÒ«`7«×֩º¬Á¸˜»š‰ªŠ¬Ð¬ÎʬÕz­Öš­ÏF­ÚÚ­ÞJnÜú­â:®ív.æ#Pu&p#Àeºd(7 0êz(àZE±®úª¯#°_E ®å”ûº¯15&Ю®¸®ñ*4{C xôjîǃëê¯B@¯ZƒˆE@¯ýÚ°®øê°ÛI ²"›ôÚi v²Lq.+51«[²Ká±I`±‹êºjDÑ37A‹8û²)+>ðºPG«!+±J°³´I¡ê j^Ä®L³&0²Fq1Iû´N«гMQ´ÿïj³ˆC¶La¶*¶Sµe{°7ˆ¥µ§”¶ð:·€XAÑ´«¯¶² û·úZ]?á·„»LTk[G„[¸Ta± ‹‹k¸c±~{®šË%kÆR_ѹ kIè‚nwë£Ëf5aGƒÆ©KoôiÆIlY[ðº‘dµÅ³ÛhñÔº`ÃFaõ¸+ºûè• ¾kHÀ[G÷¸º°K`_PVEVLÏKÅË –˻Ի6´[ÜÓ¼‚&½Þ >à³Rà:•v¼‰$U%Ck¸¨óvÊå»G6h½K=ž#` vHÛ» :0À<°Ð;fD`—s`±û^þVÿÖ[RùË]û;=žã`#…@ÀÚà<À= ¾J0J+5K ìÀ¥Á¿R{…ÁC¤Sƒ–¼ôP¬t“Ä2¬ °<À-pÀµKI.õUïû5 lPg$\¼*V{ãË·<„IÝå09Ì Ð=lÀ–•2à©Àð{Ä@ä PÆ6̼\û»Pœ½—T=Îc@æ;,ÄÜ]üH`lÄÔ;ÅíÓSM,¶l,^Í[8ECÂvÅÞ -PÇ(¿ñ[[g|Ä>æ?\…ÆNÈ2Õ¼ô2›ü;ˆ¼ - ÅœÆ>å>o\Ä œÇ`ßëÂ1d»Î«Y¥ UöÉ×P<üÁþ>`Çq_€:Í•ÇXD»Û;)u½±¬É˜LhIÖC¶L ‹¼Å#ivJ_ _À ÇÃvACL`Íü.˜÷[ÿ3Ï߬ͧ+ÎH báL—ãÈÏ< LÊ/VÂÿÛÇ|0èE@6BˆgP7æP#Ãe^¦w¾- ?Ì›­•ÏåĘZxøö pûãZCf©å–\vIW‘E Ž]D“UÐEðRŒG(X? M 4ç6 T@'U&I“—€*è „ºÓãžÑXK”ìãb5JÉbª¤Óí¥‡}êé§ †*ê%`Z ÐuògA§&ô(&TÚ`OOȪ‰LYàxI0FÀ¨À+ì°ÄšÒ®Å&«ì²Ì6kh§ÎF+í´ÔVkÈÉÏ”Övëí·à†ËZ’î%î¹è¦«ÿî´ùÖ ðÆ+ï¼ôÖkï½øæ«ï¾üöëï¿,ðÀlðÁ'¬ð 7ìðÃG,ñÄWlñÅg¬ñÆwìñÇ ‡,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ@-ôÐDmôÑH'­ôÒL7íôÓPG-õÔTWmõÕXg­õÖ\wíõ×`‡-öØd—möÙh§­öÚl·íöÛpÇ-÷Üt×m÷Ýxç­÷Þ|÷í÷߀.øà„nøáˆ'®øâŒ7îøãG.ùäZ{Çk(ØÆÑœpD:Ǻ ‡.úèé6­Œ9ÉæDtâI”Ç.ûì´×nÿûÕ=fm"½ü¢X>Å`‚ÌíÄoüñÈ'_ò‹x‰²#p—FP‘òÔWoýõØgOï¡ê£ƒ}ÎP« Ý(UC]~’Mb‰éðÇ/ÿü̼ؒYù¼nd¤2­)ÜLWxžÚ³ó©ÅÚK ÈÀæíEŒÙÇS0Ð >iKhâ›"¾~¥&ŠÉѶØç'šð„(L¡ «Æ¼%A/|QK€P©pü©€R"!;ä™ßi†~@ ¢‡ÌèâOFâÔÉp€:„ˆÂ=‡4€ WZ¡·ÈÅ.z1f¦£­Ö 1ÌS<4Ð‘ÃÆ¬t¤#“*ÿñŽxÌ£¹`¹Ч8l4¹8•$öx„Q€&a£ |ñ‘Œ¤$'y±RAo†JD#–@¤žWeaЦ:T"ÐJšò”¨L¥*çeI(Þ8÷:©Æ.°WžÜ£.wÉË^¶²|›2Ç=>"¼1"ܲá*—ÉÌf:³¿œHﱤ&ÝèIÉá+•A€x¦8ÇIÎr*®•Ó´ 35ÉMXÓÚ´98Õ„Nv‚’ò´'w*臽 ¨@ :îq.Q™$Îe¾ü•qwJ°•¦€@DÕœͨF77t.† H†XõN2DVàD]$zºÖìÊ,ÿE"AgJÓšæñXÍ©NwÊSJ¾äŒ6 ªP‡JÔ3`ë‚äšaQ—ÊÔ¦:µäúNÿzJÕªZõªÊk—ç‰Õ®zõ«` «XÇJÖ²šõ¬hM«Z×ÊÖ¶ºõ­p«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯€ ¬`KØÂö°ˆM¬bËØÆ:{}Ü”#Ô ¹7ÄA|Oͬf7›¢0މžØf5qEΚö´¨­OîŽZ_´“u4FóRKÛÚÚ¶2- €JJU1· ®p‡‹îu“à;fYb„˜ÔH±JL×[÷}ÄÍ®v· û9…=ÓU(#åP30„‡Lÿ’d}ÅÝöº÷½Ððî!30Êóùå*œ§™Øém–&¼I=(DáKà¹ÝícØ=&­æšÂ!usÝ8ÊôÀΰ†aD€ÂçŒÄl]ŒÞ˜L%Ü›¶c®´á»øÅzÈÊ­Æè›IœQ–ÂIOË“H'ô¶{ωNT ã"ùÈ[ˆ,KÆÓFAnòC†l¹H14ÉXβ–¡€Îÿ`ÒÉ9®¥Ž´ u:¨Ç[N³šŒN ™– Q‰Å¼æ:ÛùÅÑ4 :{ÈD91½[ø±|çBz»ÝŠƒGHM¿@YFò/Žk%púÒ˜®-:ÕÉ_îžòÜ <ÿ#`O9áÓ{wò ?À§_ý“Ð™Žµ¬kšhNí&¡åkŸþ÷Ð>׊=FcE_}áYûØõ¨îPU©¹®" tQêG(°tR.%Fxƒìn{{»Çú¶¸ÇMî%ü´ÜèN·±š$¥ªûÝðVsTeUíxÛûÞFÖ@t‰A|ûû߸ÀNð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{Ün\4¥$ Y¡ÄÝO¹°”Œ92’ù²(?ƒ.fÉŽu òÁÒPN®òž˳¼„êÄ Z?“6ãq‡˜b€(¸íìuÿ.1gŸ[ÝK†5!z÷ÿZï¹3rÐ,pcá%:00Àö¶·Ý7gDÕ¯N÷,qo¶ "Š…€;tÂTap:hQï) #zÆ ã¾ž×ýñƒ‚`Nàä9”“Ô¹¯šÊKM„ÈêöÏwøGÌ.âb@;1Áæ;pÿ@ǃ\€ôІ ™Ksô{Š÷ÏŒ xA-€ó~8y|³\ÈŸH#ý®JÂ˨þ‘÷¡–Â- èBNÛÇ0q<ŸÇãa1è%¾f=ôÁ„ ~„ݸ%‡Òî‡Üa nL€a¦Ðÿþ?’¯¡¢­©Ü+b°Ô_†³7ÖwÀ  zQZMÄýæ:·§PÿÍÁ"ÂD&`'GpnƒæjhÄxKw2'&x‚Oà~Fà íóGÛ|š±{†4¨"wÇ-0”"WC°ÄyÖyæ>v„G#7Ç'‚¨g(?EÒ&ƒ„æ6Rrt¶Q6w*Xß{•é³Xƒf(!Yw}´¾v…T† }Ò‡hMDö,fŽ÷\MU¯âFPkÝ!þ„Üô r({O‡K[ÈtFÐ…D¨×N‹¨a xJx†š!@Gcã׃pV>;–d·?ÆIAÖz³·ŒÑ$bCp$½'^ P‰HWaçׄHÀ'«'ÿø8’(…sÇÇñMLjŒ³ÈO䛸ŒøÁrHÂD aÖ=†DdZHeñ1hàŒšTz¥Q]íô‚ðye’!«Haç·?¥˜ÁˆA4—"8i[øŽ(ZØüÈ]öY ·`רŠrÖce6+ÅhmÀ&Žù¸‚чS˜Žÿµë‡¾xO'˜‘¶è‹—DH¯’"’X˜i‹ý˜’×Ñf:Ô#8ŠÕhUW"e„’ˆzèè"¸ø~yÂU’‡Øˆ)HrºçZ‡͸”*ù”‘‘gÁÄC8é†P”„Z ~è”P°Öèg~ˆ”:h”°‘ÿ[ù'äg´0l¹ €¨hÑŽöh”N˜rsˆ¡‹p‰RÈ~P˜”‘g3D.FB<è[’õ‹SVt¯¦xhiTpù{~–„Üã}#xRv”b …ð~ê¥PXõÈx9ŒŠ¹ yØ&C‚›²!ˆŸÖi‘Aj"¢VO_hju‚j=±OzÂjžÆmT e?È‹Èk©znºPš ¹R¯Vr÷ÓnƒfŽP÷™^xFH›–ƒ3(›æ9è´2¡(4Ñ|±k[Q.¢É×V‡ùÕRÄF䲘+ñÜ—F¼G†U  ¹6fŸRh‘Vá…"‹…š³t$ÿÕÆ—0(Oyž ÊöÌælÌE>™·o³2r–’+›ÇˆjøBÐò3—7]ê‘tÉŒ\éM§òzÊ"V‹îˆ‰khºC ¨})Ã÷š¤ú{ðà¡} •V@²G”NàFڌމ§©¤\.àØ¤5š hT9…Gó‰¥Ù¥lú-ì6BŒÙ µ´p¥WÀ¤11£MŠ¥i‚°¥m:¨É2oSGsº xz°Œ]y¦j·…‚J¨”,Ze&}*§aêæ7 t2’#§•:ª¤Zª¦zª¨šªªºª¬Úª®úª°«²:«´Z«¶z«¸š«ºº«ÿ¼Ú«¾ú«„ 9‘R]+VyÀš¬'c%töç‘ú£¬ÒŠoiØZ¾EÀ#[a7­Ü*n7¨[£pb9º“ÝZ®ß¦ߣNÊå˜/ LÓ&]ÈE;长Z¯ÈÆ=Ù‰Å|üS }›ªƒ g h¯{gÆåõåg½‡›Y!€©$‚^6„{±j–`y1…Õô`6äƒÛÊ·4¯È‰¤{²x¦$¬µTY##¶Š­)° ú[«(¯²8ËfÀæ‰Ãö’£©P£èFøˆ·„Šd¢Švš³J cªLH±ô“|¨žËW€¡1^C»´Zk`ÿ8j´µOÖIYúI/'Lÿg&ª[›¶&žn¶“Y9“!«¶tû^R)…Ãä²&ç5´âY·€‹hå ~"³ª÷h‹)iÙ™‘ ˜û¸§µiug¡‹ðʽ)}§v©¦jÃé:Æ^[ºš6`T+¸Ö¯ Åke”¦µÕ¬^gº¶‹Zš>"µ*ÐÆ‡±(¢’)õy)“¹1u»È{d‹š¼Ì q_Ú¼Ð{po ½Ö[p†ê—×»½w© ½à¾â;¾ä[¾æ{¾è›¾ê»¾ìÛ¾îû¾ð¿‡‚ò[¿kö¿hi¿®z ‘µEù g Àù{Àh»ü KŒ¯9±ÿ”d?Y9¨v56¤M0t½(lª¬Âú”U¬–…¬¦à.€_qa¡“´Üärï¸&>šx©±`Àì|ÀÀø«¿Dû@ |gà¤DX–‰}¬œ•¿à ÐÄÛ©” \îÁc1¬H<Æ­˜w«Ñ®1*,,L´ÏʈÌ“W¬ 6|p¼À&&ÇœCÇu )òqÄ\KL¶Iü {¬¢kz Ž«PZ¬²&‹\g±$µ¿ »mñS*'N]·±ªÆÒÐÆu v ’£<ćüˆNé»_Æëã ƒÅçÀ„lŠs›«ë|§¥ì½¬cº~ÌʈäÊ»óÇ|àgGÍYø«’—^”>ìÚ»!z¢Šû•yÀ4ʰål ´ês© »~n Ài«ô…©œ“\Åg_%UÎÆ §,{Á<@¸B®ÎŒRÓõ›àfÍå–Gªº´ò›ÔK|*µo|¡Íî!À"€Ì¿"-ÈŒ o\Òà `¬Ê¼ÃH:¼ÌCÃ5mÒB@Ó6 ÐÌI0Èàì7Ôº+ÄÛÂÇã3ÐTÑ¢”-SCOáÏœà!%žU‡E¸‹:ëzšWÐÝ“ÑÿÅÙt†T`P§·ÔÔLPeÃæ•¢> šÈî*­èª¯eį.ñ|žÇ&F±a¹^ŒÄB)ȸ+Ç¡Tœu¯ Ñe„Ö’bÿ‹Á+u_¬×VæŽú¯=¿Ü·ÆJ# ÀÐ\pmÂlt*ÇX†}á‘ü#r¿ ׈Wcþ:ÚJðÓ:Ç-}Ó:ÒL,Ó@@ÍÓ:L+8mÜi`Ç,}ÃGéq}¸¯[rѬ ¬k3»¯#§ üÃ|,u)±BŠÇ¸{×<…ÌšåPµ=cˆÍcÇèG0ô¿Ô÷ÙR0|æ}n9Þ%ç³fȼš×ô°òù±#$±"+Øÿga±z¨ TúÖ…®÷©÷`ðä:h¢ˆ ‰HŸb$ ®è Ëqæ±ÿ ø³O0Ƨ,h±.Ó¼Ë>YÈŒA—bTùÚ=óx(ï²ÌÛcÅíäÁåÃ=0‹On$@@]Í í‚!îz̺Èû‰ÊóI–¸¾-©WBÛ°S8—P"@}®È×™“MS …¿¹ìûÌ Jëúž‰º.!Nš>¶[wíÁŒ<`™T•/ ‡a\ðÐÃyV„E7kpÍÍM ð¡á¨¯ÉЀ;´| êAݲmXñ€þ¨¡;“؉„gTãYð·ÀnQæH¸¹þ›_ÆDR ›PÂÓÔíb.ÝøÄ!ÛÎÝþÜ=mõY/rœÒŠþçáˆ~ÿXšÙ½„;úàz .ËDØŒFÌ—KVJÚI½™:Jb´îé_["ŸëWù†3? ŸîÆ´Š à‹\¢½ñ‰?_K¢˜Œ¾¡äÉ™RƧžÙ8·êï^ëú¾òh¤ò븱˜ØN‰ß³À%¥ŸŒÇ„ç$ãêØ ¼†©ä:Έ»uôtÑhŸÎ~ŸôÕWþÛOÜÀ¿ÓL~íÞ¾õÂðí@mÀ'}õ\íkm©û‹?÷Ã~@kàð^úÁÚ¨¯ýIxŸF#°ÁŽ?ƒ§ŒÔûƒ¡÷é%¶·FÝùHð8YòëG˾«Mû´ ‡€Pœ Eå#X6¡Ñ&EYµ^Ÿÿ 6!E2´Xñ˜|„Ndu±K ;†caâ* 4Œa€å^Dôת¬(š–„&„”Ž’ª2‹.¼¤¨É ¦EGI¯4š2®#Y9_«þÎ ÄøÈ*,±v•º ² ã¬ì.`D::Bª@šA”<šŸ‹¢;¦‹>š½¿µ­4¼7ÔÈÅ*б.¼º›Ó”Û¬V”þˆ¬øî‡l]]òÊ”µ¢CiW¦(ý„ñŠãIH„=€Ì8 “ÃOöÚ˜=€¸êèqIdXò]á'3 – IæÔ¹“gOŸ?:”hQ£G‘î36†„Åô]œÿ¤“¡P¥CðˆJV£dAêiRL¥W Ô`ÏÅdnýz%i˜Õ‹N«˜J—¡ÝŽHç”ô(Å”×'äå™jôAh€©¶ï˜^ ®£ZD$Ô:z^1sM5k¦Ãaóö¡€lÛ–¬s.^:ÙWÈe»6ï,{øzKÍ\±8œðÒÖã…T ›ÃY„"Á^]íB9{ºq ÃF&$Kóyž¶‡‚ÙBSlJˆÀÛìž”~}û÷ñç׿Ÿÿ2Ä«ˆî¢½jB¯ªÖ‚:4é¾ó77Æ€#*ö>{ë1 õø£­¹j ¡„¯®,$*0L¥/Â;ê²öÿRÚN>ÌÄ0Ä.ÏjP‰ÎØ æרf4Ô`r7!aó6×J£ä6›žŒ­61B&Ê@Æóͽ(ô ÷ªÊ%­9ÑnÄ"À`.—ù„Ð`•µ8±¸`”/€íO§,c´Bˆ¶nº3= µüG©ø„[óFmÔÑG!TRHù˜°°EH+*.óò…­«d ÀI3´¬Qcê«5>0lU™A,]ÅÐ@ËcÓÞà¸ñÓ¢<‘‹¤ëbÑ” ˆŠÏDkœX÷6#h$s\ï•lDgœ&™Lm%©[­ n«€À›·f»’#sÏý¦Z’²ü3œv­ÂC4¸Àu¾-zÕ^zÿC „V€(0’­ziŽ9Ɉ7|dÕšÒÚPáŸ^ºâ²Z˜Ù…1%ÕãAYä‘õKUŒ^ËÙ±‰¨tY0­ÿ vZ–A5/!€D<G‰n$Vãrµ¹èÀXeyW&1%˜¦Ä'YðTÆæ„)#hÔœž¬NïþƒQÁ–ZÖS …W!” x†ÌF[·k©[p`{É"è¶mJSÆ%CÈÓ†PDê>z7èÊØAúÞ0zÌeW.{JjïªîQCÁ.'Ü×%„ÎwrÆU–™'+/S¹böœs*önC­«ækI®ÝöÛqÏýöJÕS²<´cÂ#ðŠ íÿ,> tÎ Z¾àyÕH èsµ4 í{ÞZÂÿŠÏuC¢á*ŸCÁòÅwÃÏ"žfã¡ åCáwô¸zåÀ„åùJ´0½°%kkk°ÀAäa##2Ü¡•6¦ÄÐl=’À&‚§¶1ˆ ߀ Û:X$%}ÀmÚB6@Â|‘0…ó@ ¥…7%¥ðWáïÄÓwÅ…Ã×Д5÷ÅŰÙ$ظ•½jOÛPþ º ö/G‚êÕ‚Òæ€ÖlÀ,HT¹ê×,Ò%„ ›œB¶'-æÙ/!­SJsÄŽàL)¦ÒÝñ˜G=îq(&#`& »™Av0ÿË¢Zæ6–I#O¤·)ŸYNQR€Ñ…Š–É£É2¯[IAy¬4!‡ôŽ"•a#Tæäe«Ɇ“5FºR„\„Ô­ÉH¡bŒZ2òCõ$„(ÄVD#×(Él†Ä·®°ƒà¨aäöÝ03oªÄhi…\ÙŽˆ°d?’<†“ËG+ 9C2ÀŒøÑH^†±vvrEi™&ºYÞRF·ð“¯éÏEÂÂá‚')!IDrâ°Ÿ  "1šQntwœ™rðï…+f¸,£) ð2X •[ÃCÏ@ $bÀX_¸çŸI–Ê  éëÿÊG¾Ìq„Ü‘3 #e¦,Lzœ”’sg.Ý`r±R:ž/œ?Z p$`U‘¦¦H7W65„‚©xhèbÒ†r¢ÕÁ3–ÉLÝ@ ¯Ô 3îÊ×cêÕ™­Éf5‡„M$s›JÍ5÷Íþ9àeøª8[iS’ί'e&fÚÖœ8'ŽKª@KÈ@¾/3ð<pì¸ Œ\ÌœêÊZêKr§éÓom«Òªîd®ÁÞeª¥6£Íuîs¡û\Lì6ºÕ•f‰2]ë~†gÛÅBÄê](íM¼å5ïyÑ›^õ®—;d¯wÍT÷nWAá¯!¨«ÿÞ¾¾—¿ýõï`_@‹*Ó €ùxìò„À8Œœy=tÑíÆÉœfeo “©To˜Ãöð‡AìŸËÐS´!N°s2âÌš£WîMÙ Ž»±˜Æ5¶ñqŒ`7™A«9¾c|{²cBÑÇw$+nì»Â¸ÈMvò“¡e)O™ÊU¶ò•±œe-o™Ë]öò—Áf1™Ìe6ó™Ñœf5¯™Ímvó›ág9Ï™Îu¶óñœg=ï™Ï}öóŸhAšÐ…6ô¡hE/šÑvô£!iIOšÒaBm½«Ü*dÕ£•öô§AjQ?êOç-n,!„ØŽšÕ­võ«aÍGÿhغšΪck]ïš×½vî©oíka›ØÅ66¤l]Ác/›ÙÍvö‡Ù*P8.ÝåiUÜlÊ*‚gnâì¿`ñ—Ûv×L Ój –ŸV(Ú”ÈBåå¸iS´ Ž‘vÒw5©›©[}ö¿p#eŸ^™×usƈÂT9¾•ß9;Æ ´Ç9û„H-ù£ãA!eʦ /ÉÕ…FÁs"¥:žr•¯œå¯ÞBDÏ~H—®WŚ؊âq’ŒÙV MØy½ÆLEÕ)_€˜Ë$z¼SåÌw¾D^‹DH4MqpN[žu­o½Ùšzø&ìP9a¡Ô±|]Ò² ¹ÓE\ÿQï ÆŽjaØÅ"jM{°í¤ÔˆQ²P=zNÙ¹xÁ¾ØWKÔ 6ÑÅw nÓ(ùk{ÄÆ\õDz ºä´)B> §ZõHëÍ÷Їð¥7ýéYm#ŒqÊ,“HbëÉîxºb&ˆ 7NOúØ#ªp •Þ?NŠ ¨Ú=·i‡zå/Ÿùˆ¾˜8}d7PÄ*ˆ=¦ù~F¾4+ºÜØ÷oÖx5Ô©?;¨°3‰ÑG˜™Á¬)“›ùÏÿÍÏïü 1cˆë¬%â6~µÑÈö^Áû¶O÷ÐB-ÆDÊ/û8ïTÔØO^z‹¹è¯-ðËÌûd§MÞÄ¢ää•¥]ŽÿL¼o ps€,ó4‡\|/8ÎkÔ`ý P– ¨0ðq0£ÌðØ 8f`p @Ò¤^beKì…í¸£ò@$ëˆrΜå‡óêå­ð?¬Mµp ¹°ÃÒâ=Æ*ú ÂPìt°ïÚΨe:ní(ÏípÂ9,#:Rç ÃÃð@Çul¢øÒÉ£ ýðñ¿^. b.jÈŠ8ÏPßcˆàgqç#~®pŒná ¢4`é4Ʋh‹oEqô2¥À,ˆÖ1Uq›«àz‰[AG>Jì žá9ñá é d‘®VF  “0ã®àX úN¨\dÿð ƒèäš@ÂXq©±m'Úæ-ó~/ "rq³îmæÆ Æ˜Ð¶belÚ¢Z+ÛdJµ äfÐ9§†Ì߬qù±AL»R ýq ² Cm¾ºO r!²!­Á Lí|ñ²"-ò"÷LÅJìö(#=ò#ARÍ„l‰r¢Cò$Q2%Ur%Y²%]ò%a2&er&i²&mò&q2'ur'y²'}ò'2(…r(‰²(ò(‘2)•r)™’T¤'þ ñc,Ùšò*g²áÎ@î&…À/¤Üm£žr'¢ÒQ¨‰Ê بã¶zÌbBKÚØ+íÿÒµò‘BæŠ1–4£~ð'RŠ+ó#-›.Pñ×ì“âü@î.!ÓM¦´(ÐcñïkiÊá€kL z…9>éäÔ*ñ¯BUá— õX™/B)ÿ³€dGCW€DX“0@ï¢VÁésgXÇ.À+ˆfÓY€õþ‚^’ ‚±Aã¢EÞŠûÖ kúTI# 62WÍ0Hw• ìÏRƒˆÀ¤õònY¶ùòò ðdÛˆñû $PRÁ-Ö;,€f6Àqn•¸¸5c©'˜ÒÓB_UÃ\чâÔÕF$Rä„Ï t óéæS‰õbópzŽ6èœõj„§coÎkI]6h³®`Iu6‘”ft) tÓ UQ¨õYGtå å òåhÁaãU8×*8*aVFVfZ5 ‰užÂ4sT/m””¨ P”¡hÿãkÇE¿VôôU…¶o ORiByÐpigÎ$yb”ÀRFßOZÛHc½u]“\ÕgÉõ Ä–^n‚lô€Hr¹f‰4æí¦œþS BÔ p´ QQ75uneývvp×SÏHU=ô'ìcd·q­öq DNdËU= Gs³°=#J3ÓGrÅkµ' V5_Ç`5/ˆð W.jŽzÇXi·|WÎv¹¯kµzù¯t»T{ͳj…k Sº6Z:"IÍOyAsÉ·l-FÓÞ4zù…xüttÁ¤CõEOõ•ar³bL¶Q•|Í·‚kwk–ÆÀX&:Zv]!ÿI_qŲU*±&xùÏ"28ŽÎ“{ØM]—·têk€ÈgßUGBtÇ"jDÎ}Ç—7há~õ ÉÅu비‡-¸‰Ÿ }unK©*%Âg¢²ô‹¨y~z>OªGè)§>u[Q˜~OÇÙgB\ø~+—exfþWˆ ÈFÆFV‹4Øw':¢À.Cfƒ¸P{éPµÍ©3§çf!w^Ymø‘{m\+ŠÛDÉ– Cã 2àm|3!<,6¦TOx~ýB‘d'‚ïŽ `©DÁ"ÂÖ`tZYsn‰Fïø0ýÉ7ë… ¸;‚c§ ˆÿCˆ7¨Hÿ´ ,ñ£ãNWC!9š… Še«›ª7¼-¥J¸r+!`Êîî¸àoŒAÔqS¸šéR¤Œ¡W¾Ê”$*\9†Çö Is2ñ¨£>§˜ÿ/‰ù'Jʦµ?øM®˜x»uœ^öïYššù2(÷¡)šç”''º¢5Z!Òp$Ò'3z£Eú5² R'Cz¤UZþFÒ>…2¥W:¦ez¦iº¦mú¦q:§uz§yº§}ú§:¨…z¨‰º¨ú¨‘:©•z©™º©c b)Ñ¿€óhLØ©­z؈ö¤¥ŽLmZ3£–T Ú^#3¢ À˜{×tU*!«ì Âÿ²²Ê“?6 µLúªõÚÊ œ?†/•K¡Môc2Ú§ˆµ(vŠªëcª‰*Tà mñÖAy¯)[Ê&3,t35óR:sfrdÆz?»±éƒ±) )"ö§2íß4 ¦N²é2´º²mûÃ$õ³uH˜Å~õc´O{±;-„Ñ2>A¤Ç;xù>Ž÷¶¡»ÆžS|Ù<£¶ ;k›Åùp½4>ºæ(v*tÝ ÚÑ/óº,Ì€@µbÝ蹡9Ò!l0¼•8‡í(?s÷^s×Fô1zÆw“õƒ;£{ÀCLRÃÛ(”E/‘2™rCØK+TSÔ'¾Yí¾qŠ3Þ–2 ÿ¦¨ðKLgaeD¡¶ùtÃiyÖ”9GùEA‘t‹¿#VTØúWà°_á¹ ¼Ç9ÌÀ?¢´ðí-9‹y„GŠé–c¨ubÀ§vBäÈŠèmöÞcŠg†£zr‹'øÖ‚êRÈû9{•8NY¶N®·|uùÉA°ªy59<xÜÇñÀr»[E…D‹j2µ^óî½ÛSëÜ€ôÂù¯5mÍ ÌhÃé¾*vŠÑ‘«Wm4¡ïÒîd¨{|}4"Qaãš•–<ÏU½¼”³ß`)Ö×S¢¸/…Z{[K¸PGË û3ªl__ŸÉœ€0ÿFcì»ÃI6f_G;BýÕ?ÖîÜ'0ù9Të{յݼ ίU9DÛ£ö¨‚a…/´]b%£b âiSŒ$÷´S®¡sê¸é°ÜP”ù°Ø{Y9á`b»TÍSeÓXuõ…”Òúwí<Õ·½á+«6«¸Vi dšö/ß—ÖDnji]Ú‰½Û¸×Ô0齿"$yÌG+FƒCÜq6aíu /bDG‘ø|²1(Üáy¾ Èê:…@â£pýÁ½z+z ¦C.?VÑ[Þ½_}×ÛXßùNctÍ(êsÏq0`³ÓaÚ—ØynËÚ5Û{>íÅ‹š‡7@MÆå™ÿ–Ï„qÕª´…'äâé]™ÉÀ…‡ ³\—K¤×ò>ôÖ&|AØè|+áM\í)ÿÇ0÷`ýù(Dظ+Ý'Æ£,¿PÒ·üz0o[<ò¹„A¯ýg~9¿‰˜`ܾ¼g¯?ŸÐ+¿÷þòä26øq FfŽ‘òÂÚkm_[ƒ¢ü ¥ŒâÑÕ&êçNj…L“Ofáxœ*PdD~¸À>vø‚Œ‚y¨í}¿ý3Ší—.ƒ†G˜ÈŠmY´˜Œ¸8€‰ äQ€%sy $›Ò)Õ‚ :‘)ÒT HE‹'*ÀHP'ÿÐFĉÔ™ há FÀIm̱²í1h°Ý1PdR9@LJl0=½Õ5 Ð1l†äE,”j@°¶žvŽºúEÒÖF¶2l²Úòöúþ #'+/37;?CGKOSW[_cgkßYDjš%y3 šiA æ†C©ýб·7‰²»Si’§žËK…OP€ (Œ<%*$* xñN-á¼v l aÝ‹Žš84cÏפRäX³DN¸b@­µdãÀGñøº™®×>”lI¼9kÑ¢F"Mªt)Ó¦NŸB*u*Q7ù ep#á@Ÿ’‚hð`gÿ.=YH0”WH€M.X8`ƒÊ{ý‚Y w+Å&är à$ ¼bÈM_¿=*šwÝ„ÆLìýékÃÁOSþvÉÌkY-ùxY±€XÀø”IO§¯Ù:ü ú*ïÞ¾.|8ñâÆ#gö$er©©,7.}:õêÖ¯cÏ®};÷îF{'šëcøòæÏ£O¯~=ûöîß½à 2×ðY‚x?ÿþþÿ €H, 8]†€æ k B¡„RX¡…bH…gôZ†T؇#’X¢‰'¢˜¢Š+²Ø¢‹/£Œ3ÒX£7☣Ž;òØ£?ÿ¤CY¤‘G"™¤’K2Ù¤“OB¥”SRY¥•Wb™¥–[rÙ¥—_‚¦˜c’Y¦™g¢™¦šk²Ù¦›oÂg•Z¤ S8@glLfÐr¨ ƒªNÌEES8{~vy…B©¤“¦iUYÝõÔF €Œ¾eÐhµ¥§¢šªªMv##¦júéŒÔ5€\„­š«®»òj£¥¡zfJ (6…`‰EV9˜…V+0Èz’LKLbJ¯×b›­¶þZ!°9ª?‰ËÎUÏF[Æ´õAa*>Û¯¼óv×í#…!ÖLÿЗš*™Q$äb'-¤[кöIñÿ.½C±Ä½µzZ¿³ÊTAÂðTt.Á m 2q«? ?rîÄ+³Ü²ËÑtûX‘ŒsÙOˆ¨ë¡º#2É[[ò·oYñàËG#´Ò¶ÐYÏZ †ƒ[L¸‚ëm `}Ñ>:ÿ‚ðÈÆöÙ'.]¶Ùg—Ýt;¢Í”™Ö&O-YàèDv/^ÿLíDã¡Ý·ßKloÿÚœF?’‰²ÈøÌ'i8‚2à“S^yª‚OrÅmÔ¬Õ°ƒ·-Kà¬å§£ž:œ˜ ¬ܕܬ,01.ù"š©ž»î»ƒÉúçMÀ’阇ÍA—²í`ûˆó½ôÓ¹9iDvÿàU(ñ,˜'€E0ÒÝE|êÊeCñváN½üóÓO£ïŠ×Ss9¡c¼Õíˆm `NܧLÕ/ \à‰î— ­†4ËÊÅ’U:ApˆXjࡈ¶— Âa ! KØ£å˜0…*\a ÀÃÂÂ0†\’}<õ5â0‡:dÒ´Ã1ˆ>Úа,À5!"1‰J\"›èÄ'B1ŠRœ"«hÅ+b1‹ZÜ"»èÅ/‚1Œb#ËhÆ3¢1j\#Çä)ó ãǸôÚhÇ;–Hm2˜Rä£'Ç­£XH‘£1Y :â1‘ŠÌ#â(¨(Ê D¸yÿ©ƒ`˜$†Kø¸ÈO‚r?1›Y¢$À)NRng8ÖâBéÊWJÊzœóßTçªRÔêu°Ü%/%8Ò‘‡|ð¸dÞþ@A ‹Y¦¤Kè$§KØ!/†¹ÕøžÙ“øFfLåiNlaÛ0®ëÝF2ëP/ÛéN©ÈRdÌ$ÝDÊå ÅÑ!*ی䆖8Éx“ ƒš€½`ó ½„?²¦™|tcX 'ˆ ð6–œ ìðä;;êÑiÈRøZ3vØ„Ϥ´¤I±>ÆQ6ˆŽ “œa²æc”„caD5Mlx•#^ãÂ[Ö¦³VLZÌÿB5ªÏÜ«“±)+¤­¼›3×õ»ÕÔ†Mˆ·ÕNðÔœ¸ÔÃVÙÇ ¬U§ìÚ'"k!† Š¡/G•*_ûªŒÍa*~…¬_dwR…u]‡Z.ý9“¢  y ‹d•VÓüβu ¿9¸¤b,šp½ çüjÚÓCm"yK¢F ªiÂjZ›íX5BSŸŠm©Ë¨¬Z'KK¶^¶ydm×N7›æ ‚§u5,ˆÇVSΡ¿E-u««GöE{éˆÖ q8UâÏ'vã…-O¶Q¾íּͅ~ÜʆÚ΄¸š•›Iëø­=æq˜9Zyâ™3I3£¡`ìé­ S)ø¸)L odê‹ûŒ iøQYÏVtkÜ?s¹Ô‚Þð ?Á¦,± Q£kÝÎÓmm”ÿaO„¤Äÿ, AÙQ÷–ZYƒGÖêÛSTË·˶ÈEê 1V:Óæî0)²Ž€Û¢AÕè@©fës‡2ÀÆD{Ì's˜Ï°o‚¼>-Ótø u$öœìYêdNu#…b_¸f»§Ã¾ðMTÆ™í"Êèžxš;Kñ‹cL{Í8Ç;î$2a9ÉÔ–<å*yÄ•Ã<æ2Ÿ9Íknó›ã<ç:ß9Ï{îóŸ=èB:Ñ‹nô£#=éJ_:Ó›îôé©–Sým žþx òéZ_¹jÛAï¤DÒv–`‡Ä·nvŽ2 KÙT§n»Êªž=îhÿ Ük)9ZÁÙÜrß{ÿ­94aR0ë\&¼1øÁ’ÒùÁϬßn¿Ç¢n¿>סÏf>رmnoXïy¿B~¤01 Vð'ï)‹¥ÙÓ¯bó¦Û»ßŸŸ½;©mWƒË¹þ¢¥VA–ø?Çm¿`U;í‹k7“ÈKŽ->€:ìîrŽÀ^ìÆ™´?û-8@X»PLº¶d1Gt¥ûròÆ^¹®öÛïhìBD»"q¨Š <·Ø°Ÿ«†Ýy÷ïþÿ÷R€¹Á€éMý×?)Â}EƒEôà‚R€iŽw­Ø×Ù–ÿ1¾A`~ÒšMWX¤¡X:àz` ~ ¬¥™ VñÞÿô-ÚïÕ‚H]Ýó¨`¦Ñ£Ž Q÷PšlYZù`0mxZütž:áÉ@åÏ®ñåýDO,Àe¡ÁÚ‚á©[`EÐO°ámU¥¢“½yP³`ñ…á¾’ÅÑáÝÆááÚÈ-Èña ÒÜÉá„ â̵;â"2b#:â#Bb$Jâ$Rb%Zâ%bb&jâ&rb'zâ'‚b(Šâ(’b)šâ)¢b*ªâ*²b+ºâ+Âb,Êâ,Òb-Úâ-âb.êâ.òb/úâ/c0 ã0c1ã1"c2*ã22c3:ã3Bc4Jã4Rc5Zã5bc6jãÿ6rc7zã7‚c8Šã8’c9šã9¢c:ªã:²c;ºã;Âc<Êã<Òc=Úã=âc>êã>òc?úã?d@ ä@dAäA"dB*äB2dC:äCBdDJäDRdEZäEbdFjäFrdGzäG‚dHŠäH’dIšäI¢dJªäJ²dKºäKÂdLÊäLÒdMÚäMâdNêäNòdOúäOeP åPeQåQ"eR*åR2eS:åSBeTJåTReUZåUbeVjåVreWzåW‚eXŠåX’eYšåY¢eZªåZ²e[ºå[Âe\Êå\Òe]Úå]âe^êå^òe_úå_f` æ`fÿaæa"fb*æb2fc:æcBfdJædRfeZæebffjæfrfgzæg‚fhŠæh’fišæi¢fjªæj²fkºækÂflÊælÒfmÚæmâfnêænòfoúæogp çpgqçq"gr*çr2gs:çsBgtJçtRguZçubgvjçvrgwzçw‚gxŠçx’gyšçy¢gzªçz²g{ºç{Âg|Êç|Òg}Úç}âg~êç~ògúçh€ è€hè"h‚*è‚2hƒ:èƒBh„Jè„Rh…Zè…bh†jè†rh‡z臂hˆŠèˆ’h‰šè‰¢hŠªèŠ²h‹ºèÿ‹ÂhŒÊèŒÒhÚèâhŽêèŽòhúèi éi‘é‘"i’*é’2i“:é“Bi”Jé”Ri•Zé•bi–jé–ri—zé—‚i˜Šé˜’i™šé™¢išªéš²i›ºé›ÂiœÊéœÒiîèàižê©žÚ)ÅíéŸæiŸN rÀŸ *ºê*ðé¡ÚZ¢î)£6ª£ª2À‚$Ñ‚ÝBŒmÃ5C¥ž ¦cÀTÁ¤ˆ¤Nj2LÆÖ\ê¶N5|ƒ¸*^8”WuJTˆê«µƒé™* *ž>z1—Uiê2$˜¬¾Ï°Újka5«S,°œÞ¯Hÿ°&3äB©ƒ9À꺈˜³žß/ìÁ´6EµÞ*¶.ˆ¶’«‚%«‹ÝÞ!Ì*1ë0p*TìêÉ +»ˆ»nëSÝ«´taY ¸. ".ìVDÍàNÐdÀ¹–`|ýà9ìS©U¹r!O-”kÌ>,-<‡Äv·b@bÊ´„¬¥úë,/xj i™Ç”jÈ÷-¹™Av½¬!´àƃõ \´V=U˜*€C)W­6›hŒÖZl^mX¡å‘n”ÂsÌÔfîÅì~̬-äø`h•l—IË€5Sù%ÌÖP´®«À˜-dÊÑÒR¾œ-¿,­·ªÿ³‚j¬Æ;xYÕ]›8$•ņ­€ŒmôaXà¶*Oi¶rŒÐèU®m!”,ãÉÖÅ^.„åF¨Jk!ä+b!n™õC¤Â&ÁB9`äJn°êß™¡“ÇÂO1™yµú ⥮ XŠ‘îÐ6J´~®Pìôk‹uB41 ÝAÊ`¿âî¿ên/ðî].î! "”KÔ#Ç™ñö”éϳ½ªc|ê.ëÂÚ¾ž.âB =ÂZÄ*÷v¯Ì~/úEÍxÑïñòÔŸ/þADk¡Æù^æ,VëvlýêíÖÒþB–éïôþ.ÆŽ¯°õE‚-ëkkóÇÿäÚB¬S!Z°ïm¯KáI/Í*Süp­ç°ë¶˜(à“/ç/è~ ká ïD Ç„í1 ‹í?K©øð «piAÓhÜÏ0/0 1 †qñíà†Àïõþoϫ߭߇ ÛTþoù²-ÿ //ôïá¢ôˆÂ´ÞkÕ–nÛ¾šCïÛE"Äëu‹@8›öŠkËñ{бXíš™Á-)Ú”pðíqa!È8[òæÄÙ²Y@i2–Ášê¶-¬5-Åòj¿è×ì Õ$Cn%ÃÇ%óImÝ‘r(S2)¸mÀì[dhÀÊâ ­E"ßüîì*1›ð­Áÿ?xr¢%ùª"«"Gš­²êìèßâ¢ãb1/³‡/ÃOD•ÂQcx-Öœ‚9´DϦ“ÂD”¹9_© öß,äš8àN$!=KW³µKp+ ÆD&_­@÷ï2;·‡;H “ÐÒ òp;Ä_¶€ôþÅ€Ý(1 ™’§òº-ÜvEüœaœù¬¸ô×›·žì>Ð2–±ì¾®.G»G¡¢ª{ÈE<—‡…!î3u†8µ¤¶GõJ´wÄ´ÕZõU_ˆGwG88wǽ:…µXWHV;j›ÌF¡µ[—\'j›ÀCÞCÛõ‡àuÿ`ƒí_·“`+jª¶;ö£&ö;-ö¢6vaSqdïYSv"YöeßQfkv=6bƒ§>k1ÇaåšU?Bt6`O¶1¬ê?îè4r2´rwtë4wõ®ö„|¶°:Ãó†Ü%!p58ñTán·kkKÓhwÍlÏÑ${jšrgpg 5$™z¬­R[·…`·P†¬^S°aX(lKï…iˆ2]Zë¡MW¬fÍ^ÁwÎPÓÊJ€Ý"+Èph¸­œTÒÞDx¿5s3@¨ÝóβÎ2OÔè³ÒþÏ@ -j·Y>£kIÃn8#í,”m@ñ€c´’åsÿ‚¿ Û3ƒó¶ƒ#±·¥íÍâ19ÎÛâÏ|8UÇÔ­7«ÞŸòWÕAËVð…å­‘ÓÇMáó‚:“ÛŒ“‡hÔù7ŒKvww-h7ign'¿/g°@=˜èb¬³Ñð.NßëÔV´@÷#àŠ“Åï¤áø‰cy¶ööî’íh«nðîדN˜¿0òÂq·ÄôüÊE_˜¹¿ñ–l/V´ò½˜ožGÈx‡/1ùƒÛ°øùú6›t­/¸/ç.­üR ‚„:`<™^Ù¿±Ÿz»•1)๥çîSëŸô÷ç±(?0•ƒWw­ïò59’k±£›ö"ßùÈ~q´ãzÿ–v^›k Kw—;¹g–4CPWz«/5*ÂÐ^ ©ù¤S;¸oº·Wûrë:­¶·ãNø¹ºÞÐ5ÄæŸËTÖR Þý{¾Ã:²±»´0­7 Eßz¼ûÇxŸú!ßx¹“`C“qósÑ¢ŸLÐ8{rãϵ.°¿µ;¼žÏû±Y¹t'²Ú²aE+1c|!Ók)Ú…­ñ,@rcFÈ“3JáœâÕ¸§ü©ÊøÎН»‘ÖÇ3,¡‘÷­O‘3ƒ÷8Å3O’õ~iýyˆL’½º‰ÐýV#¯]ÙñRûñ³Ä[‡Y£õ½ñkÃóC¿ŠH¿zHDGÀ=Thÿö£H÷§‡ÄÊ›¦#Åø“¿‰$û‡ÑûÃÿ™ÿü/QýÛÉþoÑþóáÿÿ‘ÿÿÿù!± “6ÃGfÔk$0Gdò¨F”Ï$#PV­WlV»åv½_pX<&—ÍgtZÿ½f·Ýox\>§×íw|^Ýpü}@Àµ‹C‰©,Œ€ ®¦º‰€„=.„‰…ÆºŠ‚†J7ÃÌÉ,¦€.© ÐV×WØXÙYÚZÛ[Ü\Ý]ÞÞª@`à·UÅGȹ‹dÝÅ…º„M_/‹R¾ƒƒÔ-âénïoðpñqòróstòàõáDµGTºj#^ghéô#k5n}€$XÐàA„ ͱ æŽÙBG]—ë@IÝ»òZèJ¤QòÜ&‰^{j͹ɃÕ6MQ¹³}_Mä}ip@ 4ÓþðBЏ Àà2׈²«óà3 v¢o¯"¾Êëµj&ì {b<( xŒ( ö ‚ˆ"Œº|l21µÖ’äÂÿT2¨ËÜ&ù*òNÌ=îè² 7I¸0¯!¬‚à¶/¢a€¨–8H,¾c”K=*‡Xo€&ò'-¹DÃã”sN:ë´óNGþP© Äœ)8((<ËL×6¬+IŽ‹° šŒó“ª%—sÒµ´ä,Ë#9d€3àà”Ìé–#À åtŒt¹LO9M0³PL‹WóÄÆ\ÂP'BO^{õõW`ƒ)Á>ø$T‹F=²€Ö>.F7¥”‹ç\óî EwÝM f$,SÀ À¦ZU»ô©LÇO“ð>ÑÈŒh¼ÑU½`mu[¶På,ÚõÂ…¯V~æv`‚ 6ø`ÿ„ç ÖS-ê:ƒw­Hö AáS@‰eèÓ“Qæck§dʼ0ÅR‘ƒ¼·‹j!5 ãù8ÊV‘tKE‚ä$ò2€Tí:ž Ǧ$¬Âf+teò‰cÛbæ¨8R-©s–zjª«¶ZØ…Y"®È?…V¶BS!Nãônj,?óM"ã|Ÿ5™¿‡º”¿¹Ãhùˆ²‰¸X.áåQœEå9o°-¹©¬¡Wv»mñrôv€¼us4íP¯¶ürÌ3×|¤¬³Lë^M¼öÛâÝÈŽW‘ØÌKüÚœ•—ï*2~›åL“æ¹ï£Wç¯Ýšãúò3Ö¢Ådöt¼=²ý à…—vs裗~zÿêwé< f]pÒ×N#0˜=uqÚ¶_’Ǖ¦º1E~Ú¥ÒÍýKÖ“ç}Ê/q'£«y‰/ÿ\ð)!iUÁT½ªw@&P <ÃõÄ01vѬpT*œ³Îg>Ý)!`WÐDý$6…e´/Q›°ÑþÀeÀÅøF ÌŸÇ×8üI„g`áëø &¶yÏ#€Ñº&È@ QˆC”žÃ>m]án‹Xf\3¯ˆ1Î_I0ºž‡­¦ø¯LiŽrH11Eâ:WÅ p¼œUi~­kUåì¶,ù]qŸªÕ=Ò•ÿ (rL E€ÍQƒ$d!IcÄk@l X’aGg!/eÿˆ:|ÓZ´7º8NmZãŸÀ¢m+Y]Ô”#º¤µdCÒ"Õ¥ ª•ªy!­PM.rK_°@%I4FYƲx«œ\,µôš¨lE•éå­€ …IbÑw†¤f5­yMu« ²ëMxœ!0lPÉŽf q6â4%"Çì &•N½! ƒcË 4ÃYŸÖ„è[ádÀ]ÐVO ¦GmêZš9:ã¾ÈôÅ»ói-Ï»ëUÃä­ª;v'}éiåGÃ%Í¡— >Åö½ÈmèŸ~‰ŸzŽELÛ ô3Sš7}øx{}ÄíÌ#Ôõ5¿Ý5¦ˆÛyñmiKÔ¨¦§~õ£ge„O•Ú\º’^o:jíô„Ó‡¢1vk;Ê+o½,Þ“Ê@üå`ÔzãZ,îÑßÔy¦ì|pžï8“™;ë@¼ì£"—P´¾;’¿ƒ=±3œª7óëÜëžôË?ïÛ›;[›€+»'¸<—ÿr'ú3ÁmŽ®½Oÿ,@ŒÁ‚9À-çÕ¾‚¾´» þÂ)²¡?™¾_ ¾FÛŠäs'~ 7Y£¢ˆ`Šœ?(dB4 #Ü#™s!À™¥ˆxºˆ“A/üB¬Á;C Àiê¾Rʨ'JŒ‹;7ó“¾ ©B–ÓLÛ Œb0 ¤9)&:\Œˆ$LK±»=ûº.CFlÄ:©±BÐ7OK£èA—£ ÑJ ¸¤(à¶nó?ü PRDuCŽ@“x½O™³4C,Ë;8Nãî¸Z»Tl¦r{&y"Âä©— ø@[ù4V|AGLFe H,߃é'YT6L@§_ÿ[§²Y¿†¢ªR+€‚”Q{ÀTT’Ü@íS?ýS@ TATB-TC=TDMTE]TFmTG}THTITJ­TK½TLÍTMÝTNíTOýTP UQUR-US=UTMUU]UVmUW}UXUYUZ­U[½U\ÍU]ÝU^íU_ýU` VaVb-Vc=VdMVe]VfmVg}VhViVjÿ­Vk½VlÍVmÝVníVoýVp WqWr-Ws=WtMWu]WvmWw}WxWyWz­W{½W|ÍW}ÝW~íWýW€ XX‚-Xƒ=X„MX…]X†mX‡}XˆX‰XŠ­X‹½XŒÍXÝXŽíXýX Y‘Y’-Y“=Y”MY•]Y–mY—}Y˜Y™YrÍ’88Èœ1€¿›=HKÄK£=Ú ZXZŸÍœ-¼ ÀY¦]ZÎCZ«½Ú Zʳɤ¢˜œ- œ'„¨Z¬=[´µ» XÚ¢ L¡A¯M[¹Û¬5®Å‚µN¡Zºí[¿ÿ5=¶õ‚›È¸ý[Ã=\‰‹Z½m€ †Û¸ hÚÛE\ÌÍ\Ë[¸Z»½¥ÏU¸M¥eÚÇÕ\ÔMÝñ¢¦ýY8ì\SÒ€À]¦¥ Z²S]ÝÝÝèbÝÂ=œ(¸u]Ú Ý%à[ÞM^å}®µ5¡©\½}‚§=£ÙE‚›}°åÍ^í]­æ-¼ø]_®XZØhÚí=_ôm-ÙuÞ«ß½dŽ _ 2ßô­_û­éíÙèßý͉êÝã½_`Ç‚Ûþ€àß«¼^*ú_~`¬ XZ×ÕØmàÈU"ä½]ñ`þà’ú^Ïeß$`à¥á5(Z^a¢ èܸ\ ŽŠi\xÃÎa6¤áÝaþáÂr` b"&)®-b$Nba !ùI,D!ù), ,i]ÿÀ”pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸ÜlªÛïø¼~Ïïûós‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”`—˜™šužŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÁ›ÐÑÐÎÔÕÖרÙÚÛÜÝÞßàáâãäåæç»Òêë|èîïðñòóôõö÷øùúûüÄìÿû H° Áƒ*\Ȱ!A€ÕUšH±¢Å‹•@H@€A0 pH²¤É“(Sú«3"Á…F`jàž 2ÀŒ çËÿ‘œè™s'žŒH“*]Ê´M £~œ°S¥Õ«X³j-É2”ÌK0¿ÖAJMQbÇ–½Ó´­Û·pã&ðÑ¥† ¦nÝË·¯ß¿åìD¸€,€´|Ø€‡,á³f/ A…†Å'€ÌV®çÏ CGŠpöSÞ«^ͺµët7c‚€‚aL#:ÕÖs»³èßÀƒ ã©ÂÇŸ¯“+_ÎÜužÜ‡ÿÕЧ÷ì{¬×ν»÷ïXе`|óóèÓ«ø\¶Ÿ °Ûî”iäî<ÚM€ßÏ¿O |TÕ'˜·Þ&¨ 8íE×tCÍÇ“t—MÈ}¾ù§á†ÆåÿIŒR^:-hâ‰(¦8Lƒˆåñ’PÕaØ(´hG~æ¨ãŽé&à(`A…*iä‘H¦Â¢#E(aŸh`ã2nÇã•Xf™HMPQä—`†)æ'KòA“M~äדe´%V¥~ZÆ)çœld•bcæ©çž –¹GXÒ½ ¥ƒø½I硈&ÊÅÀç£Fê\l„æ!R—¨ifM٪觠†ªÑ„(驨¦j•Ÿyè™(FÝ…Z)ê­¸& ¥ªêë¯À"ÄêÓa¢é4Íj©§¹6ëì•€8Ò)AÀA°Øf«­7z¸—Çe÷¥)èСYh­p>«ÿîºÿh€Ä+ï´ ŒXâ¶øæ«ï1e:i„3 š›d2µ´Ó”xúËî sg§TãY¯ûVlñŶØŸ(Êš BAW@¶:ÊÈ §¬ògC•ÄRŒñÌ4×\ŠÆ£( 0“'ÛáÓ¼Ø(rº+môÑH'­ôÒqiòbD1-õÔTWmõÕXw¡‰«P³“õ×`‡-öØdçš NòuíuÙl·íöÛpÇí–Útû!÷Ýxç­÷Þ|ŸQ÷ßÝÚ,øà„n¸¯€'.ØáŒ7îøã£§¸â‘Wnùå˜g¾Ðä‰÷íùç ‡.ú褗nú騧®úꬷîúë°Ç.ûì´×nÿûí¸ç®ûî¼÷îûïÀã­€ÁoüñÈç¾QGS‰Ìð¨9³@Ég¯ýöÜ+ú”ËPÌ®лŒõ/w¯þúì·ÿÝS8 ^zdÀ x½ûü÷ïÿÿH!Íg4 Ii@yÞU^M@ ¡G('"'f„…'P èY„Øý >Úð†8ä€~ŠV€Ð+æEÄyÁâ‚GêˆÀ¨ð1*È¡§HE¹|¨Wä‘Ù+‚ø æ¯~¯€a¯× ^á©@¨¢×ÈÆŠøˆ Eµˆ .ºÿ‹_\âÉ8F/ ƒ°‰ÚHÈBò¨ËóxX $I?d yÈJZò’jxÀ„aÇFòñ‘)”äa@Lšò”¨Ô9>F¶¢ˆð2âa¦"QÚ’”©Ì¥.w9R™Š“®\Á§Ç0~²H€ü#)'YJ^:ó™§Ü‡ÑIVò‹`t+Cq—ÄÑ*',nÉeÒ(œ€¦:׉ÃhMÓsb0›!ÆQœÆy²ˆç, ¤Z©˜uŒÊ8CIP?š¦.ìL¨BèÎwÍëWL¡,ª¹ y5J–5§,ìE vtž¯ôè ÊL¯ t¡(Méú4‰MZNR¢ÿ­ ?ù9•™žÐ Àæ7_zScÂt¨…HêÄ.’t”%àqTÊÔ¦"¯eàsé8ú `S£ÇÈéw ˆoŸZÔ&H[1T*Ò¨åüI^’ZÆ:õ­pë ×S”äå«­Ä¥\÷Ê×¾^Áªxµ ©Øê Àúõ°ˆMlÖš•áökU¬d'KÙÊZö²˜Í¬f7ËÙÎzö³  ­hGKÚÒšö´¨M­jWËÚÖºöµ°­lgKÛÚÚö¶¸Í­nwËÛÞúö·À îØ–ç ,Ÿ§®r—ÛÔï¹ì±¤`®t§«NºÀ.8Í/“KÝîz×”¤1© ?Aò~÷¼è­ÿ¤ S‘ÞöºWëíaXEñÞúÚ×;/ ïeŠûú÷¿Ü»âv÷Ë^øÀÀ{#WuckÁŽ°í¸„UTHøÂÎK¥Úß {øÃ®[å1U⛸tÒ0‰OÌâë-ůp±Œgì6w´ KAãû8i …¥yZÁQüøÈHf˜qZšÅŸF7ÉPŽò­ ê2©R•»Rβ–·Ìå.{ùË`³˜ÇLæ2›ùÌhN³š×Ìæ6»ùÍp޳œçLçÃ"àÆŸ¨°æöÌç>ûùÏ|¹3)$P@úЈN´¢ï!èQèyÑŽ´¤'MiœâÙ®´¦7ÍéN{º‡—îD¦ÿ?MêR›úÔ˜k´(F Œ%_®Î°&q›Wä]ðªÂw2] ] W[.ÖÀþœse8ä\@*¯‰áëÊûÙ{³.vµû‹”Ê•¸€¶+°ín/˜Aý5´Ç-·ð‚¢€¾È ¿ÑìÈ‘ûÝx‹// X€×»| ¨§1\]R]·ØŒƒ·ÀÉ&oÇ"@à¾cæ(¥B—š9 îî[èw dGë8 íˆ „'zßXå@Qa­ö’hƒÇE|òDtZá°cøðݘ ߎ ŽCŽóéµ`Ž´P= @* `ucÅ MT © »BSò˜ |§@츑ÇÐi PË øø M´ˆ=?ø|ñqý`ºð ”ÉxC P”»@‘¶€’œ§’Úð‘îè”`å‡Ú'•p†ç ä#‘Åpsð„„[tR§Š(mÿóCm»ð0;™ôà“ƒ‡”R'—¹0A¡ JésPR©—5’ï·— â•¥—æP“g¹lè¦ l¹5דܨ @—¬p”ÒXm`iV z}y ïÈté˜Ø™ÉA˜¤`˜|£¨…) °`2åU± æèpÔS\@Xáo!A“ÕX™T¤S¶Ù+0"ñc›·ÖœÉ¹D¸¹IÜ4œ!ñ™ ·"—àÑÈà‹”àÙì%” y™ŸïžàžðYŸ” $N4 `|møœ&) LÉ1Ö™Á„ÌyUeºSlùšP›ÿ4R P9DÊH†™SþÙ~9Æ›19IT¹ Š•;%v5âU¼vMà³s(”MYw•‡Ù¢À×~á£sŽR}º ÇYVÎIœ€ƒ(ç^¤ ôE¥av…%»Iœ ÀU= R‘'*ÿVωƒR‚¢ˆ¹‰¬‰Š•Yñ—QsBN§¢.úRe%Jš¦·ÐDc +” ,´%Z*—F»27 g 1×&˜¬ðï)”èé ç)žß™Š:ŸôI#í9Ÿ;%Ÿó)žP”çyªð§f§b·fvP;´™A¨®$qÅ%šúIul*ÖFA¯*Z%u« „Ȧ¡ÿy&I T;ÚE|â(vèøNÕÒB3ÅOçÆO¹j¨JCjšmuS‡¦Xש35V¡ºªë© Ã4U±ÛZS,„ÿtB°¬;¥f÷­s*¥×s¬8—r¢ªzѺš ?ŠŒG~pwŸðÖzU« à%5"3ׄO2Å_°Y!úw>ײ¯¡Æ“§>ÆõAQL§áGÓ‡¬ÄÊD‹ÙV÷J Žœº¨š¨*A "€”“yŸ `žç¹;[³.[³³Œ à8´‹l£9™Çè»w½ EÖôh|cB€cœu[ÇÆ»š+v¶Ð·aüRËZ§ˆ—¡ïdF²g®ËÚÉ·pOæ§À…ù·p<Äÿk¬T*Hk Ȭ°©ñé¨Ò˨äÙ½óùÄ‹aÅˬ½WìÌÅÜÌZœ´E¿¹ Æw,_¿¼r¯¤ÓÈy ª Ì¥ÊËëkÄe»»Ê¿¿ ¡²·!ZÁè Ê \¾2#È#ü·PÄ;á;‘ÈÖZTv‚oŒòȯÉú“¹á ÎÇêd•œÍ*ζ AýúxÜDu˵Íf¹‰pç ¦,§ˆ×B_ôU¬¼¶ä{2?Gʳ M8¹v<¼Á¤`ÍØ|ÒWôxøL 7ÛŒêÄDûÓøÙ²ÓûÌÓ<ŽÐœÅß¾àKÇì,Â3\ÎY„Ó®”§ýù­œ‰“"iµS=Ò#Òé,Õ¹jÓe\ÿΪÇñì·¹¿ g¢´÷S9 ÕmuÓâÏ43½™šÄȸì—ö䃑ËÔ°LÉ¢‰šG*–Y}ªm¸+‡M~T `͉ÐsÖQ™Öi|ÓÔÒÔ/zÐ+Î8éhnÃ}g¾ÇðlÙlŠÎ§°ÓH;žÄÜÄÞÙ³`@]¼Ä ¹ÅGŸáø=Ý©˜=J¢ÍrŠÍ_ËMá­bucŽGÑÙìØçÜ Ì}ÚM¥R„ö ÜlR’-2ºÊ,wÏV©Ï†ÞÐŽ\Þ‹±×òL|$f÷ͧ¬‚¬2íÙÈ-zLK|ÝÜÕ½ˆ”׿¥¼Õ^;Ú_YÊ«všM’\ÈÙ:ßÿmµÏ¾¥]×ʽ ³ÐËÓ^ÅÄìÓ×[ÔÙ âÛ Í`Ÿ iÕ¨ ÖþÔ×Ìâú- 0ŠÞ*ÖlûIiWÙ>Ü—ÌÑaÝÛ~Êþ /~Íõ|ÞnýÝеπÛψÈ!SÐÕ´GT„{›Ef¬ñâ%²Vîôÿk{ºZñ¦`´BÍ©È|¨1‹ž@)é¡4”;ažˆŠž5Ûà’”«í ÈL^ÜÛÉö` ·3¶Ú›;a·¿Ž¯ú6®æb ºT{ɈoÄ»·¶¡Z%r1>O£|pgÅøù?«uµ ­¶nòf’i¬È=û-Õ§XWº15ú^TÛ{Ð`'»?γ._ø­QÐóAÓbõR{-K‹Â†hŠ è–ݪjv,øjjÜ…½ªWÞ½¤0Ž“÷s§ìNf™Ž*®ùCê%~¨ä ÿÄ ; Ž4ÛáD­ï- Àpê‘¡Ô’™BzˆQ锘¤ÿŠ€Bj|%ßI„ p€ŒFto¿Ñ3¼)߇ó·‚H+⢠ØÒöñ¨Úè´²Þ ¶ˆ èÔ¥,è4˘ä®0G¹¨ À ,äf1%hȈv‡Òr$ ¼Ö2®†’ A¥(fgŤ+ˆ„3Çž§°Ýì¤ Ü^)¨°Í N‡…ÿ†¢¥©g­‡:ã‰0•IòöåQƒ&T¸aC‡!F”8‘bE‹1fÔ¸‘cGA†|ˆLÒžt_2lc´ !CÐ:‰Qpá–(ZVIÁЇ ºqÄÜHJm*§\Pà¥'žhÞ>Õÿå€);`y˜Á9Ž’­Ë$ e㡃ˆ@Á&m‡³m×Z !¢ì[µŒ@ÐE’Ë¿I¦|ð ×-½BÄVÉ:dk–ªíð$`ú«Ñ¯› ì¬e@ÑÄò&„™€!˜a´Ôut£ÏÇX_†¤ÓÀ†@ î—j6¾8¼£7Fd »¥D#MEîÛî»ñλرO“›¤’ä>-‘êü±¯ ¡Gü0S9¡[ïÇ!\òÉ•ä[ž²‡^ Ï hÅêk I 70ÉŠ‚4 œüœò×a]öÙD¼õ­£èCŸßÜ‚©çloÉíϼ`ú$×ÿiO^ùå™ÿ™o¢ÅX$V3Lœ#Š0çùϬ‡•øš_üñÉ¿8æ7fv ‚@ÏérÔšYbi¦Y<Ä °/_ÿýùïáómÁ(ìlf~ÀâBs²UÐgH"@ÿM‚´ »,wˆ+ÆóÀr5B4á Q˜Âlep Ž£â:á¾f0Pk)º„~T˜CbáQ¶¬´"IÔ#\°6¢ö‰Mtâ'õCKÐítYá]6A ç̇x8ôø F1Ž‘Œ*‘¢'p,&4ék馺*à%Hi£ G=‹Û+ãÈžñ}"›ÿÞÁ’ß”¤ˆ øt$X? ’’•´$ÿ©Œ˜Ø&gžÚ?K*Aby$àŽW§K®’•­ ãéêèJYÎ’–µüLnl™K]îò’X“b&ÉKa“˜;\ãdRWLe.“™•qJÕLiN“šÕ´æ5±™Mmn“›Ýôæ7ÁNqŽ“œå4ç9Ñ™Nu®“ítç;áOyΓžõ´ç=ñ™O)Žu¾BÒ³¬¼åT5èAšP….”¡ •HÉÔ¸}ȃ‰i@T¹$~ëŸ#r@ ñÔ¹d&J )"¨CQšR•®”¥-uéKCò4’"Rt**–|LI¯¨é¯ÿæA¢üå)„°ò"ŠN S¥.•©MuêS¡*&™²#iÐ;ªŠòè¹=²g§ *žŠÊŠ«’(©Q5ëYÑšVµ®•­ ‰@˜µ`¦È ÀQWöÕ;…u •QYÛXÁ–°…5,¦ú¦¤º–{ˆIXž$¶d“këk2. ŽÀéaxD(Žh:C…Â& œDJ²s2V<†uÝ8jc;a Ur¶$ÈÙ†î„‘Æ x²´íUx³ä´'m •k©€âî†@«Ù (pXéN—ºÕµîucZ¸ìn®§ílê ”m€… ßvë#^’H¸û™_gÞ:$%6ëgpP1ÿŒ)4'zŽYÀ‹â›õ®8õ+à,p‡‡ó½"(l˜L9®CŒ÷šw èùrþâP¾Ð]d½Á쎘Ä%6ñ‰ëÙÎ'£¯Yl€%°¶føƒFUR‹3OžL;™Ogòšh†çÀc4îkãR`Å~rõIi,<šR'ÆD™q€[lÇd4õÑÆ‹2QC}„m»òdµ¥†@ ln|ÁüV  ˜Îu¶óñlÐö• Ñ‹[(@çîÍ Ì¨ÜQÒq¬x1áyàû¶ÈÏaí…qÄÚê’ûZAO¯‰éªâ7¹DA^¡±†:K³ù:¨(8’‰º<ÿÏšÖµ¶õ­»Ääà{¶•ôwßìnZ1Þ‘Š;|½Âűw’a%Ê=E*Ó«¾ì”Á Ä@gÙŒêƒO:aª7.Ú|-sãJXmíõÃqÙ"poyÏ›ÞõvÐ Ï$£A_ïÑäXö€F*WúÑ£ˆgˆåL­â„5ü³‰†£;ÓØn²nÎonß¶ÉáOJ;pl×ÜÇÎZN&ŽE’„f |Ž0:{Ïœæ5·¹½ÁÉŸ’hßÚS¥¿[KìÖÍ”¤ÏHøû®Ýp2Ï<‘¨|*Mñ¤cYÛRè´N;žuŸ8°UŸúɳ&Ð"]êº1Žþpsµ¯ÿímŸ®£K#`ûY¦~ÄkÙ¥7ÖSŸ›ï{¿ÃƒM½§g=ÃcÿºÕ‘ôm‡èÛwü‡pøz29‰:¡W1Z¼ËnbpûçAzÑ¿ô†QŽQÏ}‘øŒƒ.àÎÞ Ç:Í›\ðUIÊ1þ9Ü»~ .a¬êýxu-‹[멟lJ>Üç ‡.ŸaË…îäÑOŸúÕ·þ¥JO%ÔS‡îûû)"wE+ý§þ¦{r:û_ÛUá(S·ñ+þûŸ¯>õFãKC|pÃ>öF ^nÞò¨Ý¢õ®ï0H4ŒÿÌ ×xnîok.Oé¢M7ŠÎ‘­¢'ßÔÏÅ0tlÿ;Bð}pÇ÷¨.޶†¯øàLÍü(ÙŽNùÀ.÷.-ã\ÍZó°}ð0Bpföè>Z‡îÄB¬g«êÏë€É¶¢ë`Z!ßvù€ì „Œ·d.®~ãšî.ÎnLxŽª£O‡mÊ8NÿoX,”bé¨C†h1¤ aðÕ´ph¥@~‰É.  ± ñâ”ôkغknª$*ªÓè;FÁ€ÐK²2P´¬ {äk?PÚèhûÈŽ*hAýÈÍ^ÁºÍ _Ð6lx<‡^ÁvüjùŒ‘p¦ÃÆ-õ ‰±ÑÑ$ Uÿâ%!wè &+³Ôc&¯Ì0qÔ!´Æ •C;Vë·ª¦<®ƒOеìúàé³>í­¦à>õs?ù³?ýó?4@t@ ´@ ô@4AtA´AôA!4B%tB)´B-ôB14C5tC9´C=ôCAÿ4Db*q±*[$3:¯¤¨š,`»bEE£EEtFi”!¹Rf’Œ¬pTé ‚ÊCj4H…´ÉÒ,Ù'Fко4g|L´DšôIµpH­ôJ}Ð-“sM ‡ ¹Ð”À´°´LÍ4órF*02lÏ» áLá4NC/MûˆoÉäDòTNù´Om®ý¤SDÖ¿Øë&ÀO5Qå 2—ñDUÙ¢ôE‘HQ)µRñì2Y8ïŠÿú PµìP-5TE•Ä>ÓI5– KaTYµU¥+‚¤äTŸPDNäâ@*ÀUuuWÙŠ„¦DVÍ0ß\‹¢Ê, yõX‘µ©zÿÊ»té+ð^Ú’uZ©µ¥n3Vê7tΔ&µZ½õ[ª7wŽÁhSõ4v[ý\Ùµ]=Å83Á¶“=ôè…˜Pq, 9›Ñ(â•(Üõ_ÖO°³•=ª:Œ¡®Ê£ÙžAa¡c6b%ÖKVèæõ3•ŒhaÅ‚¶$á&6dEvdI¶dMödQ6eUveY¶e]öea6fevfi¶fmöfq6guvgy¶g}ög6h…vh‰¶höh‘6i•vi™–O¥i¡¶BITsÆ5!£öjôFÑ'GÍk½–A§jM ÀªL/?¿öl…ö­âêv¶mÝ–héTaÞvn­ÿ3n`è6o™P v`ôöou“Q“ÓNûp w61•\3Ó_·qS³T#Æq%74Ksb&÷r)s5ås9·3¯a:7t3ÀFtM·0Åõø \æt]W-áUóbæum,Á¢<´3òþåv}++vw•3_~·x÷x‘7y•wy™·y÷y¡7z¥wz©·z­÷z±7{µw{¹·{½÷{Á7|Åw|É·|Í÷|Ñ7}Õw}I’)Ý÷}á7~åw~é·~í÷~ñ7õwù·ý÷8€x€ ¸€ ø€8x¸ø!ø\/ßðP#ø‚1b&X¬,8ƒ=ÿøƒA8„Ex„I¸„Mø„Q8…Ux…Y¸…]ø…a8†ex†i¸†mø†q8‡ux‡y¸‡}ø‡8ˆ…xˆ‰¸ˆøˆ‘8‰•x‰™¸‰ø‰¡8Š¥xŠ©¸Š­øŠ±8‹µx‹¹¸‹½ØhdXå d˜1Ð&F ÷‹ÙØ&ƒ«¸ôNüí pH±ñø&Ÿ§hŒ&€pµ÷, ,Œvó¸a2ƒàòU"n0Á ù‘W2ƒ´Õ³ÒXm˜”,CØØ E#uYu™’Ež$™`¡ÓÊm}à`ÙN¹¿è•wŒÆ®l”iùJY@*€juC«°hƒ†®t,«Š¶Õè`9Çð4Îÿµ–•ùœ¹˜kl†šíw®ï|t®ò£•Î7—y›½i]Ùÿ¦Ù4. «yã®™‚ÁJ‰›ÙYœÞóàìÀÀƒ oï¸ìÀêÇE÷µÇ64ʶÚI€–• (+œoïÜlË™ãâ. !:œ2©Sýlzºÿžo„œ™Í"º£Ç)“\¡ó0£IÚ†6ú4âØ£UzšéèHw÷ ‰4zxs¥mZ›ZšŠŽ´¤%éåXgzާü¾ç¡oú¨m)“xK ÄA8J§·äÌSnl1'öaJ7ೄn–‘ú«s)“Z&M•=‡G‚ª™nGàš;8 ¼¬åÿZ–2‰´ á6 Ò¹ôÑm:A†¢‹ #Ò2 ŒŸ ß'™ç:±½ –»±é—;²‰’ŒÙDø$û²{ò˜þ³9(Ÿ Z´³E{´I»´Mû´Q;µU{µY»µ]ûµa;¶e{¶i»¶mû¶q;·uû`Âx˜…ŒÍx>Ðø¹–R`´)v;¹÷åSNæ8 ÙLcOe¬çY¹­û^¼9”¯„ þ&™Ji:M` œ4³°ùºÕƒô#‘]ÅÑÖXåHfLn½í;]nÙl*ÙÊۮ @6„»*:™˜iXE#ðßî{ÁÉ%¿k/:KgpÐÚlꤿL–¿91\U«ÿ–Á=œ[<Ì6gVú—ã(˜Uí•ù½ùÁ[%6<úU_©ÀÀ?üƯ¥™»+¯ˆ»€‡ª(D>Æ ;›CdÃM†è°°q¼É«%»µyz`z®Î—œpÏáŠúÈ£qè”\ƒœ<Ì·…¹Õç—¤ÁŸóYÅí;ÐûŸ¼Ë.UżΟ| ¯¢ ×á¿Dšäº%Á° <¾Ïå¥êÛX¦Cåa_ ûX^>æmž]|©²Ç»Wjþæ}þ\4›`—¥ç¾èÅ峑›YˆÞ虾éþé¡>ê¥~ꩾê­þê±>ëµ~ë¹¾ë½þëÁ>ìᤷ¹¬:>‡ÛãÅ~íï}¦ª=Mžÿ;òìø­Ù¾îiÊIÆå>/`­Üî?OtüíÛÊ9ðßUB|Î&mÞÃNC)ÀãæÖ \»ÿò©$Ä[9½q•'¼àÕ•Ð/œà-óMßQõc’Eœsx¹ÄG3,ù}|Û7ºŸy·^üôuF_Áš Ù{:œUŒý‚šÈÓ™w?ù+‡Æ–ñ˃¦üˆZ< 8€ÙË Ë‘oË•û_„ÌËfèy¤g/ÍEβÝß¼ì¹ý‘ Ï#|ÏI÷¢gHp:1*Ý÷šýõ¿ýµ,Ã`–ã$P8Àñ2…b³Ú-@3Íp±”k¸l>£Óê5»í~Ããÿò9½n¿ãóú=¿ïÿ "&*.26f -…}a!(19‰‘uMAàqLžep:’–šž¢¦ª®²¶º¾ÂÆÊÎÒÖÚ¢B†yQaX%M`%hH4x‚š5ŒÞ>CGKOSW[_cgkosw£årA,4ÿnl@WDdqÀí‚aih51hmuVŠÄeæ”c‚md0Å—“bçŠÆ&Ô¥—ªNA°e&Ÿ^¿‚ +v,Ù²ÿf6JÀè45´3Ð@Š-`2° ÓT¬V£8 ÀTå…¡YÏ"N¬x1ãÆŽCVdÅ]äÊ–/cάy3çÎjÐô,z4éÒ¦O£N}ꂃˆäÆ©Ž-{6íÚ¶o_.Ç€jܾ.|8qiî*Í[¸8óæÎŸC.}:õêÖ¯cÏ®};÷îÞ¿ƒ/~<ùòæÏ£O¯~=ûöîßÃ/>ýúöïãϯ?ÿþþÿ €X "˜ x•øsÍ.()¡„F&DUGA¸ k¢Oà…=zTBSZy4P@§0FŠ+–â@|éâ…7â˜ãW^Hc*âT5ÿâºUÕ‰Eex"B8pÊ]FnÁ¤)ÇÀ¨‹  £–[rYSC”(Ô,PÀDŠ¡—I\°lu”ˆ kiŇ”³ÜI •]òÙ§Ÿ^šèL+ó á‹Gú"•JÞ‘g,Ž6²çŸ“RZé6'V0C‚˜œˆúÄ5—(ÀÔd)Ï›Q†FGPM±è[¥…j6BÁ I~ɹQ§d&C &¡¾Q$<¼j*“…*¹…[K´YëÇ-`j“Î"‹fFPe˜¦Q øx9ø .0!Új©ºë²{Ï[É>E¼Ó&Gh¼Ð‹•˜mz†¡ZpõFP*kÁ·ê{„RBn4ÿDÕV;ÄO°ÂUÕyÉ]ƶA±R N;ÁÄžRl±¬XUyD0gFuUCŠì¦ÄûøRÄø>âW:ULA TXöòóªí]t—˜Â[Á ðEê8ÅgRæŒSHCOmIæFPƒù~AÕFBªr ×j‘èÎnõz2D; G‹\¤­6Á:Ï0C¹&B! "JJ·*i8cÓ¥ú”‘g»­Å”m´æ›ëxb‰Íæ e¦ÚÓœ4U­*éAC•n=]·ñ5h¶6ô5©#Ñ*wk¼Õ8íœ.t¾ïî²ýúê븞»î¾×•…âáàjQEýžsÿ°õïn5ç߃ã—a–‘DÆH5žëÖXL¿Æ'««Õ¦[YÐÀ–H!UCí°çdFˆÃoÖKY÷’wº}ŽF'âßg¼º-<+ l\ñÊ (…ÁïXŒ lƆ°XeDQÝã^øJhÂñègá Œ¼`'í`&ÓZJÌ<¶>~a €Ñ"¡l·Žt€ƒ.5´árÈPµ"n0oÖ™æåÁKÌÏk–&ŠŒ&n¡ÌP~•â1PyÝŠ¡Ð'®ÛÕÍ#Y1Ù ÛèFý¤LPà`b–¨Þ5 _DáUÙð>†ámŠ®úÁFx1>ÊjE´zÂÿ¨¸_̱‰qƒóì&ÿH<æ Y\ a’@Ã,îL}Ô®Ê!Á4Ž.›ì^TfôÆWÂ2>Œ:]G2’±&0‘$<Ûà°WÜ-Éa bõN‡*ÔOÄ€a9ÅcTŽ’q‹Ý%eUEk¢ÁŒ4à›Â˜ÇÈ ©Œ¨tJ3VÙ…¬I±\';Ï3K®Îv†D£/H_.Î\sg%@Ì ¢±\È Fúù@äIï†k‰d%ïÇDG"ô ´Ë»àçÍ|a5£.ÑhÎÆñ°")vÞyÆøO‹Å€¦2*{R(¢™ÕXZ#¹ Ã øáAsÖ•<*Ð •âC Á4–ïyÇ{EoH=^ÿâó‰ 'и@ ’4«ZŽIJ¦f,ñ‹ž¬ªºÕ²‚øÈèÃì'E1=ÄjÀƒ‡ú@”’ia©»lÖ\±¿ÊQ³¨VÔÝ.šÀ¿í뀬ûjJ¦¹…¹‹{Ø›ªÍÊÖ‰n5³šŽI­77‰P®CØÙ½p¤Ïš $üI²N’’¥=À%0¹fÀÞJOspÄb¡… F¾S2 ‚¥í¶\·Ð – zÅVp·p/¶m }Ì]bÃÙ+¤~=éß¹]ªrN™;ÛfËk^ÜtvKÑæûZç”Ñ%¬/~á"SâûÒç™Až’ô|[(B¸Í¯×’T"—©a ÿ¢PT® ¼øWšnœZ8]ÌfR^åá. ,2íöfX4Y…‹ÂáTz4x/;/‹[Œší"nm™•RNµQ!'+{鯪šÀ Ó¥gu¿¨Y…hÇà…'§UáäÂÅTÉmæ_Ùœù‚ª¾SÖZÐd K)XѪ>"/gkºþüV¸PLÕYZ.ž3­3†Ö9ÏzÞsz@ÃL>:Ђžk\³áA#:ÑŠŽnx³èGC:Ò©¡–§š,éKc:ÓšÞ4§;íéOƒ:Ô¢5©KmêS£:Õª^5«[íêWÃ:Ö²ž5­kmë[ã:׺Þ5¯{íëOÇC®ÿØPr …¿^6³#Ç¿¬‚À&ΑZ×ìkcû@ãƒÝ˜Êt&@~$kÒš²³mîsÛÇs0“KƒögtÃ;ÞíAZÜv[é,ëÆ$LN%|ò§ò8ÁÓCï`õWÃʃʽ.¯"§àÎ im nñ‹WçàQX<Ù,¨Ì´Ç(yßðGf¤ÓÒÇ8Ë[^ý²R¸~=ÇWM7Ø}‡.­ï¼”q—=è±Ù6~©«6¬úL” ÇÕv.¿.ºUèRŸzjJ•âƒá˜Ô(†˜EK£AâÙ![©nö³Ÿ&Ø‘Ô@Eö¯™sŒi6yO'X´ã=ï™é¬ÿjit¸ŸT†-%ôônøÃc¦³4Ç 3/}ë3b×`äoùË¥«6º#'Ó‡Á)ÿ»î{Å<éK/Í“®2};:-´Ò5 k…?înúÛãþ}HDX&ÚŽ”vj¨õ'V#ÎÚ’¸öµ,‘mϸVôÜC?úÔH¯¾Ì‡`¦xR õºrñýÕc—%Øù?—>ùË_ /kÆ èâ¡$W> T©Šã,±!ïRàæß?ÿoÒÈþ`‡Ÿ ` jT@kX‡`: f4EDÒR`:¥­‘jàr`zà‚`Šà’` šà ¢` ªà ²` ºà ÞAÿòÁà Ò *<@à`üÕࢠà äâà2<!"¡ ©Ý¡±½É±yQæ‚!áv@ÖÃêÃxaÙ%aŠÔ³W´¡ µñÊöæÁ€ÀráPÄáæ ÚaVÝø1‚8xÛ›„Û¸ÉL¹éîÌ¡TÀ!Þá"¾’ºµ[)œœ÷½Û þ bJž"2â&šÆyD*[ߨŽIYè=âÍY¢Š@ !€à ++vÂbxÞ%fá„bâ\!0Æ¢üb0Àhâ/=D¹8 ¥É¶8c'ZãwxbÂEÿóìýW q›Î ¢»‰(#Â!. c1Îb%®#1vÀ!2BÁ1ba¸ #1ÊâÌá-VaýŒ£d÷eH0ð\5]cB^G6ry-E:ÁÉ} ì鹕ãÀãþã-Êâ+ºc;ŠÀ¦c/nÄ2Úâ-šä¤$G’¤<¶cÖ2&"=㦊T2a¬…˜X¸™óÖve\¾Ü/ŒÄoY•9h“ó(ûœâS "Ïá߯éÅ\aÿªð¢UN%Vþcxa„Wž¤Xveä…¥WÎ$Â-¢lÃ5ñeÇ‘S1Éåhš …ß<-Ù9x] ÒÝ#ŽD„@fL"æGÒ¢TãbvÁ2^¦eþfä ¡,ú&ô„ .‰M[çåËQ’æsúÆ^Ÿ1ž¹ß!ùE`†‚è^ˆÀU*æ;âfHêænN&[‚%J’¥Y®à•ÞxØÍ„’õñ%áAç}¢WÑõ‡™r~SÜÙÁä9ž|gb†§m¾#bÆ#_h&/jadgø&'¸'&‘7iK^‚M_â燾XÑ-áX§&Ïà…ݺÉAm(VŽgÿVFGB?v%Îc„ö¦dŽ%.§q"*ÕÑ)σ‚h‘V~AJ ©çIèIw2•ºŠ€aÊ(‚Á•BMBÁ•þ&ØçWêhŽa•¶gʕڶ€SÎ雪êq˜êÞU,e=4åëÉ®<ÀÄØ^H%+BÀ*¨=Øã?z©Tòæx©˜â(?bf¨¤ª›pOÉ©fcmhÏÁœzjiì^úDn‹È n©–ߚЈJ,ß¼DóÝ—†ÃF’§­*(¸!:fÁŽä–%IV%I:¾aM²ä="¢¬î Û”\PýdPBé§ZketªÿãAÅQ\Ïö5ãh#´Uê÷iª}9­rAy¦ã?B@þ +¶+0ŽdHþ¦²&£­‚ç½ãGþ¦XÒRHŒ÷ ¤¦,ƒA¦æµ"lg ›a´æ)EÔ­ÁüýÌ´ØŸrÆó±%,®b+Ò«¨"+Ò"„Àwv¬fFA>ò…=n$²ã¤òë¨Ë²4cA9ÐÆ`lÁZ±$ìÏRÇÿU‡ƒ6ŠcI”ÆmÒ^Ê>©‡J£ÒJ-sÚVIö¨˜‰aZjÐçÔ‚-pD ¬R0.ª|IØRH)EÍfغml` ÆZ‡K‚¡›¹Á×¾íÞòmßúíßnà îÿànáîá"nâ*îâ2nã:îãBnäJîä&®t¶‚f²E¬Rn窋i®­"H›¦¡çšîºä!+ð¡™ø¡šh›¸æéÊîŸå+¨’ÎnîMEE‘½\(†Š¾½_4¾æ8Þ©î"/Žd#"!˜½|£¹Šc¡´ÊÊ%oõC2C²ðId(E"¤Db8`ä¬Zïù^ï‘åq}RéjF¯3=¥ù¢oýîGêv^ªÎðÏE±%Öf8Ôžý0~€î0d]QÜR‰>Þ'a‘ÿ.Ž}flže[ð}X.90ç-‘a'Vh§øB©›üé›0|ð]ÚÒÖžÿh/¸é ˰|È©°( ¹ç‰Æ ”’DèÎð“êeÔÛýÞ¨“æ©‹¨(3±yÔ°u…ë‘U÷XÖa½0žî©mÄ7qccÑñ^eUÈ @ðåËð¥ªû¬ª ºjKÀêlA¥ËqvPß…°—·f_ó>aY¹,‘Íq —Ôó ÃÒØÃN±CÂc=ÀÅZ˜R¯ Sò|ÜY%còH1m&sr U­Am'‹ò¤ŒmøŽò)SJÜF2*³r+»ò+Ãr,Ëò,Ór-Ûò-ãr.ëò.ór/ûò/s0 óAd°†ØŸ±i®ÄïP@Ž%²¯$J¹ os5+Âÿ›a ¡_¨aTÛ3psuØ[s9þªÂê~›²ˆÛë–/ŠäŇTOgÀw©lÁnÏ™ó>÷AíºÂíbÐ$ÚÁ™hÁšžCmÀ(Ù3?3ô‘ мø.³à›\o=䘿=­Ûð´OaA׿//5ôHËÁòf§ÃeÅó’³û@)23ã $ýM(IÛtL9Þü(MöZ©âl1 øvsŠÂæ;¿´t4_"Ü;˜Z"íMCuÀ K»±oRÚéûVVÕ6Bº2è$ËEÈ]åVT›5É”]UJ!ÝJ9•$1]ü:%Öô©ÄÂARÏÐÖ ÉLÈÜZtßYvÿ ÍÖãã°‰:0]1ùR0Gƒu‡ XQ”8ve;µgÛmpuæbÏ]Ó-sw¢Èc³_tµZ¶Y§°ßõ'Ão4(;68ësSçtjã6«Œßˆ²p/ñbÿo(»^³0‡Îç¶e qÐE^&Ýç¡èT¿qËÊ|4ï&÷v/åµdk*-‘n'ü¨Ÿr1R—Ò2è[Ñ…gr·rƒ±¨†–O›q×U ñ…Ä'_3Ÿ M²Û('qõ)Riv¹œ„ Æw`×ñ¶êm{aŸJû#¯ØA*pW«Ž_HÖ•u¯óð y7øH/l—E@òßuÂÙÿ"ËW#[¬`lnÆzõ õD7NˆøŽËÐòø›Æ&ùgFy’'F)µ’;yb¨ò¤À”Sy•[ù•cy–kù–sy—{ù—ƒy˜‹ù˜“y™›ù™£yš«ùš³y›»ù›ÃyœËùœÓyÛùãyžëùžóyŸûùŸz  ú z¡ú¡#z¢+ú¢3z£;ú£Cz¤Kú¤Sz¥[ú¥cz¦kú¦sz§{ú§ƒz¨‹ú¨“z©›ú©£zª«úª³z«»ú«Ãz¬Ëú¬Óz­Ûú­ãz®ëú®óz¯ûú¯{° û°{±û±#{²+û²3{³;û³C{´Kû´S{ÿµ[ûµc{¶kû¶s{·{û·ƒ{¸‹û¸“{¹›û¹£{º«ûº³{»»û»Ã{¼Ëû¼Ó{½Ûû±³ ³‡€â½ûû¿|À üÀó:6§ójk‘üÂ3|Ã;üÃC¼¢£s·±.üü¡;bÄküÆs|Ç{üÇc¹?JK;È›üÉ£|Ê«<º{¢D€âD‹Ê¾]t5²´‡ÅÊã|ÎëüÎó<±›4£ô·ýS?ÉS\Vô|Ò+ýÒ3}ÓW:ö6ÍC^÷õï‚r“‹pQ§œø9}×{ý׃}ØÇ¹ÈG”U‡7VËVƒŸÐÈü¹vo{vk"yÑk½%~äKþäS>Á³fÏLÄ…®¦z=hYTþè“~é›~¹¯6r¶§}t5œ~ìËþìÓ>³?ñû6S(ló0'Ôþï𠿬/7î1›î}€Bi9@Àð;ÿóCôgúíƒUžýu·VŸ·‡L?Hÿ÷ƒø‹¿‡êgêÔ3Ý}³&ªþµøò7„ø÷“-‘ýÛÿýã—gëm%L  ÀØ0ƒ$0 åÒ¹4Hµ[©Áúe›à%bÀ½”SkvÛý†ÇåszÝ~Ççõ{~ßÿ $,4„QâDŠ-Šk`…W‚‹=~RäH’%M:Ó0«J±“-]¾„SæLš5mÞÄ™SçNž=}þTèP¢EEšTéR¦M>…UêTªU­^ÅšUëV®]½~VìX²eÍžE›VíZ¶mݾ…Wî\ºuíÞÅ›ÿWï^¾}z#$‚.Â… þ¬J†-  uÁÄ•µ@P0LÁÁƬ$H†àWôhÒ¥Éî…ËòjÖÉTØ’‘̓ևa͆­ªÊ ¦}ÿ\©§"ƒ3°JU[yeH€± \РáÂ…Ëuy9›J˜.L(??@øzöíÝÃ$®¹jïõ kèn¸‰û®¥K¡ ?dÛà—%(x/Ad°¡øT9!ÈZ™Œ‹UZy%–Ë2«ïðûÏ0Vèº%èCBÀµà_„1FÓyÐÀ˜b¶/Û­ m l9§+l?4ʨmHÀH)†8`F)ÿ§¤²ÊfjÌqG$h@5ÌlÒ<#‹âˆæ’ ¶$Á´p;6³,®µQÂ;ã'ˆ0cŒÅJ?ÿ4PC°`>]FIÀFÊÄ`rÅ%PNIPưÂÃ#“c ‚ ÃÑÌ7dB´TSOE•CR—!Ì0J-`Ò‰== 1Ó7­ô¬ó5&,Í’1+5Ue—e6Fa¿0ÅS6ÖBÕ´ÑÆ ¶] [jo]ƒ]UqÓÚ <€ ÍZqÿ£Ç”ñzk¶^{ïõíYçÕ n›ˆsSS ,ST{mMÒ¸øÜs58D…³$_‹/Æx.B·ðÄ"ÿx•ц³ÌÖáw?Ö%M‡c%¯¼†óD¨ÏŒg¦¹æÓ0õeG¯åïQ¥­ob]28qåhQäY™°¹i§Ÿ¶jc‚Ï(ÏZYŸ¬UË…Î…@£[VzLœ[„ºl³Ï6Jj\ Œ9¹yË“@ C/‹ôMÎXû—_G¶ ŠE³ä—Ï\“¸mÃGÜ&µ€3Ù0•mz˜<³q C w]¢¥[w°]¸|`ÝhqàÒ8Ã%eO;)oÂc$ZOúlŸ0LAåø ÷%¼1•ʸx}™B1RŠ9¦Õ$ÿÉÍBÏ@“>~ùç?)ÀpèÇ?ýß‹wÿÿà] r7ЀDàY·‘6ÐÄJJ¨EŒ @ЂÄ`5¸AvЃaE8B–Є'Da U¸B¶Ð…/„a e8CÖІ7Äau¸CöЇfÑ—`V6Ä‚ eHxLd&óC&6QYúÂІ(¤×ÄFGqbµh¥U!çxS¤âs¢sÄê\';n’ÎÕ¸Æjn`ÜÚ¸xô6ÖÑŽì!2(p9 ýMïËPÁÌô½ kM;T=î¸HFІP êÔxÈ`È×U‹IÌ»ÎP‡È\ÜÉxe(Û’Ç<‰¢ÿKGð[yè2õ«BÈRBàtÅÉØŒ‚–È €(u¹Ë›ï\@”¢à&7œ©ìGä¶0 ðÒ™ÏÜJÕŠÜ,o´¤­æÈcvò {Å,` h–ÓœR!S`¤¥˜j! [$ƒ“·¼%ÇÂpí2åRÏ9õ¹Ï©Q–•d¿’#°Þ ç,‘ L:òÓ¡Ž&ñæ:Tô+Ù¹ìy)ˆvÔ£B¡›v扞e”pR¤"-/U±¶Ô¥5±ˆ¨Æ¸Šb®mRpB§â¨R+€¥/jPMS0µK˜¼"&ùèÖÍ¥â RËÜ›P¥:U‰P/=FˆäÄÄÊ+ôËrXÿF 0ìtîsÝF·„Ò-S T…k\B½ƒ®¤šï´›ÝØ´2ÁƒV2Ûi:¹Ö°ø Þ–j=œm¯·ñ^dlRÂöwåÆùêVEÖ³Ÿí8@;ZÒ†….*mjU • ¤m Ymle{”^‹³Åmn}"Á•TP·¿np…;\â׸ÇEnr•»\æ6׹υnt¥;]êV׺×Ånvµ»]îv×»ßoxÅ;^ò–×¼çEozÕ»^ö¶×½ï…o|å;_úÖ×¾÷Åo~õ»ßv³Ý\ÿÊ¢ZFp‚¼`7ØÁ†p„%«+Ï®òžû h8ßÙÐÓ òø¼h 5Ç‚n4°h5¹‹~¡m i?WZÓ96Ÿ=Vãê€Ñ1>tªŸ‘hFúјö´Œ'Íç4S€Ï›Q+¬?McNïZÈõ£,€V— ÆpDv²•}.znÙÊ)âb¼ÿg%ÂVÕ¤òûtã^ïxÖÆ&³¢_ÚÕ¾Žq·Ñë(›£Öó¢ýuìg×ÛÞ÷ó†ïûTÑD³¹íµ1¸esGZÊß&sH0™ro{Ýg·Ý oYSšÆüÆxÆ“-M‰jÜ5b|SËŠÆ…zÜä'GyÊU¾r–·Üå/‡yÌeþlrÏ¹àŽ†2Â#îäYüæß9Ðg<ñë|Æ3GºÆÝX´™otŽ%MzÔ¥>uªWÝêWÇzÖµŽòxàsv×à„€™^³ÃÛ]ìN¯YÜ3º¬•PvÐìfGÚoL÷´÷›D¨¯m)êº [ÁfEÙÐiÿ,ºˆÄ&‚ŒÅÍè¶»ò ©ñ¢ à&Å™è 6nÁëÞ=Æ¡.¶Å·¾zåRkÕ©¶û0Ô½ ¡¢'1IÄzÞ÷Þ÷¿~ð…?üá‹ A2 +¼Ø£ñÏ%ÎvR—]Þ°x¹‰]ì¬yû­†¾špî\ߺÕ¨yŒSÏçÑËøðïf@«qéñ3šN˜¼ÚcŒýb3 ð2¾€Eû¶ìë1Ôó‚Vë>+ð3=ü[?Zcâ¾G*¥+š£Ý¹$Iʤ/² §ÓOÒ Á$Á4ÁDÁßó€ãcA¹_[´Øb ¿3’>»ký{¿õ›1Sã3²ÿÛ¶É“Á·Ë1S»¿†{@†S?(wcBÛAîSÀô¿ýc€$¿«¿ü>ŠË€$ÏÃÿ«ëK=xÓ6QkzKÁÕs=p2%/I%Æ™ŽV•WJ“êÀÜ+·¸è¹€8>ãC¾H¿³>\+7F”±¼1uCÂ'Ì€85-Ô¼s>xÛ¾X³Ü´,,8辄 À¼ë;ƒ#²(ܼ h€ÉJ7ûs´Y¨1I\Âw«¹oÓ;F“ƒpÅ#ä1' qÊÄ ØÂxçÃE/‹;6lC­[:žâ™£A:šˆ©ž¢˜ù·f Äøy€XAìºDä±í«ÁÿƒÄPÌÂ-D»ïs¿`›BÜtL«‹?ô‹¾¬8ò+¢_½[ëAý›Çe|µ,l<òóA% @„Ás³¾QC=p+?ƒìGŠ”±gtC·ñ"¨¦«¹©#Ð&-pnJ9ÚÆÿR…¨úÆùÉ€Ç@ÄË¿ç0ÇG$ÈxË€7É˾ë3€ Œ?W›H°É37PÄIœÄöË¿VSÂ$øÁƒTEnS»oû—‰ ¿2ä3 @2wãœÓ›Jq‘Ç[FctÈÔH¬Ó·h™• ²k!©Ón™'i$Œ“ÉK|jIzICœI³µç{ÁIÔ;v¬J 7}ÄDzCWLð#CÿC=ƒÄbœÈÔ‹Ê÷KG^ËÉ(³Å§ì?,ư3MP+K¤Dt4¼ÔlÌžŒ²µ„F2"½ñ—n˜°É¨ºš •D t™¾ —ŒÉC 2ÎãÅêËÂZT»Åœ1kH0Ä9ääGåŒÊ¥¬ÊLŒNEëÛL×ôÌådÎ|ÌûãJRüʱܿ±dÍx´È׬1ÙÌ:ꙓ©&‚šxÒ¨ÜkáÜŸA$Ç® Ì!k€Éa¿}OLLK¤GÕ¤ÈÒܱl¿~¼ÉŠÅȼHóDÀ|Ïð$ÂDÌÊã?ØÄ±èTʇ KÕÔGÎQ/DËuFù¤ºB¤‘º(dø“ÿáOý´Ñ Ò!%Ò"5ÒÞ CdA哲…¤15[tGÍ>%5OsRã;1+¸ðÓÅUEú‹ÑÓ,HÏÄLÈÄTNôÔ±@€7½I'ì´ˆKzŒLmFµ<Ò˜#*A«¹¦¬Ñ©þÎÜÓCEÔDUÔEeÔú Çäk2ë¸GX`ÊaO­¼‚«Â¥Èo‹ÊJYóE÷¼ÎžSGF3ˆ‚ëI øÐÊ…Qd¬´45SLͼœÎIë4(Õ19­1aÄŽÉKÀhÕW=ËâÆ‚Øë#.vÖ$Z¸½”²åDÚ=eCk·“Qè‹ÆèŒNÔƒËHž•˜žš…å"¶$?õgeš¾:–\8?“Ù(ñãšZ[¨Ié(°`Îcj€b^ \¸Ña7~Å ¨ná® Ô³Ui€º‚É)¨¡>IFþi‰Â¥s‰—Y¥êj’Ô¦&ë²6kä1ËPwÁ€¥ŽéV^¦Ãޤ<ôl²åŽ1I=áÀšâ‚ë! œZä'À\€™‚‚ÅcN‚^,2pÿ~XÑ”¢b:´g„A†‘™œ=ù»†~ë³f¶b*%.‘C0áX®òØÈêXšÖ½´¥VÞêñ \‰¤Á ¿F“ÜAf cæ0â†kŸá¬½Î긡çiÌiRîÃÈžEvËz¶¦±Þ˜+€iª¡‡èîeÝ{˜ë6ŒÌÆäŽiCJ<ÏóíÚˆÆjýã¶ênk½–ã1¦«.¹µMb8Ù)bQP‰ÕX‘41ám·À1àÆjjæ‚6°ÃïŒrð&¸oPPpÛ¶Â÷Žhºk8“²ìJúâ‹B d€éü°hŸÎiôNoÖ฾®(@•alªåmbª¿¾ãkž¬þÿ˜‚caãS ›'ðøü«a1îæ6c‰BäŒÂ&»¼KÄf+Lž€Wô§úlîfGqnëå9ñ¶!âz¢aïr7g¬^ñ…Ÿu‚Kõirý¼ (Gêá6s¼ìÃ2?½¦xyïø~:r"o #q¾šç5Çó`–ë/(;g›lÐØÑò?¾M`6ùHMb“qyé‚]NôL¯ò4óifó6O¤Àø'ÅÜô;ÁÏÝ<07p*Oud£9s¦»F(tCO‹c H'·>ï˜ð tUÿn±æö¦&ÊÎtOOŽ»Úò…QÏÏ~ñS§vkÿòrngtW>¯O¬ ˜ýõQ¬žo=Þ0¿mhbG ‹À"·¢G=œ†wrgQö”ªõ`¾öÍvF$9b“‚w§Kn ŠßuZQ*s_uto=>)‹"ø9©x×õ@'"Á¶q÷f°¦a\÷ø˜—ù™Ç7ßþíå eFaî˜yô!(÷éFñØs±ápj~# ÷êÅÖðiTø’¿lˆñvŒ'+VWqšÏ…>©í6ø_n“?Œ4‘ål´òkLéîo­gû¶w{“Ù1ïÈù]âGóã® ©¬‹òö•wèæqÔêé¼ê£:|¨ÊñP&îñÿ&&Zšû·g(GyÁ‰6®Æ¤r¶_hí¦‚o½Y|Ö¸ –ï©»漇Ö}“üÕgýÖ¿'~ñƒ6‚/ï¯ÖÓ€iвCž†ç/†ºRˆÀˆnhm—†Á–lNOlÎ~9zÉþ¥Z?}ÎâÀƒ²»0æ¯÷Vg{Œýª¬ÚØ­šA‘¯Š€£ÙRƒÂCgÒÇï«6ƒÎ‘UúdÑV“ˆÞy××ÿý—ù´NôÞìv `† àp,–‡ád¹ˆ 7bU1D1ÖêP¡íÁÚHõRN »\F8€s´…À¢é…§ç=²m€Ap õ—•vá´·È`8qˆ4P1ÿ †é×éù *:JZjzŠ* iñéh5Q‡ Å±†W'Qæšgwj@ôË{„¬×Ȉš@ü»1»›Xvù«B]m}­½ÍÝíý .>N^n~Žž®¾ÎÞîþ/?O_oÏ^Ú€à+q€ ƒ' މ¦l‚B 4  ‡~U6PxA¿GÒ$“ô Bœ+½á€Á_À2±D6´g³®dBâM™Á´8"`Ì –")Ðä@Q!7ËôI5ªÔ©T«V]ªBMEô<ÂÐ…Ϧ ­H „^Ê ™%€Çb§Ÿ©’µå­!‚µ*ýk/°àÁ„ >ÿŒ8±âÅŒ;~¬Îªäɤš\œ*óS,Êœ•í :´èѤKÏ-9µêÕ¬[»~ ;¶ìÙ´k×3;…ÏP3{Úœ›ªÉàÄ‹?^ ÛÌ›;=ºôéÔ«[§†<{.©úî\{©áâË›?o¼‚ ˆ0]?¾üùôëÛ¿/½þTßý„ßšH`§4@„?‚àÇ`ƒ>a„N8˜Æ„xÅ\ˆo~âyh´†PˆbŠ*®Èb‹.2bŒ2š÷b6ÞˆcŽ:îÈc3þ$q=Id‘F‰d’JÚd“N†¶d”RNIe•V^‰e–ZnÉe—^~ÿ f˜bŽIf™fž‰fšj®Éf›n¾ gœrÎIgvÞ‰gžzîÉgŸ~þ h ‚Jh¡†Šh¢Š.Êh£ˆôŠZ^ ÄyDQ!9Êi§ž~ j™c_B@LSí“@¨®¾ k¬²Úˆ•\ ¨.P@—údAhPOîÍŠl²Ê.ˬsµ"q‰©Ò’á'MLÓl¶ÚnËm·ö< ÖÝ @A¦üš×_íqÖ_RiП'qàm½öÞ‹o¾)€»¸á*Ókx1T.Î|u DèzrmPôê qÄO,(¿ø»Ð—-t {”ˆuNÁ1¹B$¼ÕîÿÁÄ{ÄOÏLsÍ6«Éo´ò Òaµþh1¯&=§ óÇVl°7/ÍtÓNGô-ãªÙ†u€ÔÞI›Ì”pÑÂ=Á>MvÙfŸâ¨¿”Ê’_¿È2CÿûK<ÕõÊ}évß~ÿ x}jKÀ«BÄUw¹PIQÍDó]ç½p'<xæšoÎ9lü¦‰²xãe9äY¥²ªžìÆ@ç²ÏN{íø|>²ëQ3¾aä©£.-U ‹’L¶|òÊ{ƒ»À© wÛõÆÆUµ. ‚@°|÷Þ/{óÿŽÞÞâû\VlŸN´Þïäábc~ýößÍ?±ø_Oà1 ‹ó¾¾¡*]Ê´©Ó§P&JµªÕ«X³j¥4u«×¯`ÊKÖHײhÓª]˶íɳnãÊK·®]GpïêÝË·¯ß¿OòL¸°áÃ[#^̸±ãÇ.CžL¹²åË%cÞ̹³çÏp4ƒMº´éÓKD£^ͺµëƪ_ËžM»öÚØ¶sëÞÍ{)îÞÀƒ ¾ò7ñãÈ“+oh|¹óçУ#­G½ºõëØ³kßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿”ôûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒFØ×Vhá… BЀÿ€z`€À”HŸlP‰Zp&Æ(㌈!àáäÁ<~8'ôx£—Ðhä‘HÒ5""úˆ pÁT`c ù!T^À"$)æ˜d‚õc6‚x‰pBe¶éG™tÖi'Sw¤‰ ’â@Ÿõ©rç „&˜§“°é' ¢R裀ž~< €‡Bi£ŽFêé§øMŠhWyf(”&§‚êê«È‰ª¦¥byj(ŒÊª}°öê+o²þaih JŒîjʯÌ6+[°— »@+`íØ^›myð)Aʶêì¸ä‚í%fÿÀB¶›ã¤®¸åÖk/eçþ¡ª'AÐÀ¼ôÞ+ðÀ†åÛÇŽþvRÁ¾ÇBðÃÓe0Æ’*ï&0`kÃGìñÇcEÁÈiŽ<2š8PÁÈ^¶è¦Æ˜,ó­/ òÍ8_@¼í&,j»År’@Ï×|JÎH'ÝÔÎDÿK±ˆ¶¸ªÐDð€ÑG+­õÖ£a½×`‡}™×€ˆmöÙŒ‘Úl·íöÛpÇ-÷Üt×m÷Ýxç­÷Þ|÷í÷߀.øà„nøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœwîùç ‡.ú褗nú騧®úꬷîúë°Ç.ûì´×nÿûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõØg¯ýöÜwïý÷à‡/þøä—oþù觯>tj·ïþûðÇ/ÿüô×oÿýøç¯ÿþü÷ïÿÿ  HÀð€L ÈÀ:ðŒ EQ"p#Uˆ@+УM0¨•éÁ§ ¬ïpà$0ˆ¡DUÛX¥á€Tì`ÉR…—°U´š"j 8ÀÔU¬†'Ä4¨†U[Õ £1Ń ‘f¬ÐØl³°oa‡@@2à¡$Þm]  Àªô']•bfmœ™PÅgÔÿ±Zôá)ŒXžŒIÀŒv«ƒ0@‡¡1`wlF±H=.ê]äñ# û†Á®Âˆ´Ú,`"KÚ!„LdáÔðà€¨¥lޤôØ%JR²Èƒ¬šíÐÆ¡R)ÔX+á5¢…ñj™ô (šÔÉn±2Œ³´%°3Å,DÇlá ï€WrKGba–Š6´Y¡)DÂÃ*uùLjú¨”%º¦ÐI,ó`\¤ ô’…LJ'ÓéI:­Ÿ™h@®0…"qSɬÃ2›i¢„Ú(œðìaªéKu~SNw`¢EYé2‹õìvàà!-†€I†Í[ 0©‡tB1]ÿEèb¼Y Âp·¤Ö–fúÉ­ÐCH¦@'Íl%ÙÊ!.%¤,)´g£Ì¨ÕD¥vñ›=bÀ;)†©¬æ´V0tjO…T<„†L½a7— N¶fU˜+ýÐ>M…?Õ–ælj]uÉB¼RMHN³ÃµB™­l U}롲zXev•Ge­Ϻ5ªÄB6¡²è¥pš'l1‘³®ä¡\‰*F;0ì“4iÒΤCNK¥,ÍZY³; ¬œ<ëÏ<˜Û륫zË©ˆÓ©dêÔïFÔg+ÿ@`kJ, wTW² u¯»ÖCA4® XU“eH­¦W¢Ÿ&@Rçê4»œœ@c#°JÄvt¿^¤,$µë!ý®r„楘xkà ×áŽìÒ-qÝ‹\»W¢m=™«Sš–PµI)Ž 0ŽT¶Ä2'¿éâdU^Jh\Ý(Yb%´’8è^3˜ÉL=ɹr2váª0£²C¥}*z—yßMÅ£{é‘«øcÁrSW—‚(Â<Ù¡©r½¥u…ŒÙÙ!ÍR-(®r,Õû6wÂUÎ.œ*{Z.Û÷Ш½®˜m[G–j”|܃ùÐÅ[†ÆH“±“TŠß&Ÿ÷T‰œâ¢ÿ½Þ!OÑwq’…ÅâQkYYÎóž§Å‡5ã“Y^æVë[äï!ʃ^•HÅyfšâ¹Å¾ETl¿iÑGSZ©•¶£ê g7×מ5«\÷×Lóu¤EeQöFµÛ^–ðYln§ÓH@k™Šeß¡Ž{.P KÔ‹IkÐåþw& ÀoV–ÛŸJþ4­ˆì[ñ(Ö¦4'2ۇɦ´ 2˜1x"!GœàDMêÆîîl£zŸÿ¬ÉïÜÖ:ØÒ-*x²®$%,jB¢ýÂ"¸;Añg3YǾÁ*ªúã)·³–ÙÝëu3æ´þ2¼WÛtWØ;âWåêÏûÕÿ´×çC ýŒpVÿüÖ O4±BÎDˆX⛈sÅ•:4Œf<ÅÄ~øV0v¯Ù'¯Fw~l­ŸÚ­DC¥ew¹‰——<ì 8mˆèÎg­›èuyûžwjC^ÒLy›§ž3ìêVW»%ó­e&ŒÀ¸.Ÿhšè„ÿ}Û9õ{¼k"7²Úèü¯t눢7Ò3ßá~(Ú›­=zßrÃO?íyH¡Ã£ž ÇkÙã;ç„Üaþt kùòè7£™¯‡cúaèN‡²­6Ð'Òߌ¤Vg1¾ƒü}?ÜÌ—v¿çô¶d6·YÛ–uSv `m¸Dy—CðGiÿöv¥–lÜg}€€fævê†jÞ‡nb]¨/‚–sø =zg·Ñ†wëwXœtz’w}B¤t)¸båf9kö2í‡}‹²ƒ÷&hügï§T5øhçÁdv¹×i>G3X¦LDeœnK¦€ÝV|08…˜„ÃÇ4ŠVyìQ©÷yÌ&UR¦ƒ‡·&8x (…jØ ZƒMè…Uwhvfwý²wƆ} EWøƒãqdHH^JDˆuxxQ¹·`³^®¶”%qo8mPèiO¦EFd$rzZÂ~KDh[&fˆE(Š‚xC•¸X7ÔŠZ§feö‰qelÕgj…Hdÿo˜jq˜(«¸‚æh¥ˆ…W†Šzö‚{˜bdšhz’ȃ*¦#GÈòĈ1”FÆÅT‡ôŽø„‰–L‡aÖ"‹?Â3n7{}ð%sd%-8¸·mdC •Oì¥`ÔrSÂÇ{&Æ¡^hyƒH-ô¤P9ð˜g_–]-âD﵋L%e*’_+·†c5DgÒâV‘.WM÷u*Ó\¦È‚Ïao~Yx‹Ý¥’i†w׌Œ9)‘fHŒ é‰>NÛ1ÞbU Žæw{ ¨uwõ`ìÅS"Xk>õSÌÅu 'T…sØBeàEÑ%$-ä‹|D¦Xÿ,‡–电T– ær6Å#ŠwV.•]ós»8`•|InKö”DhHzqƒùW=ây¹8 ÅWYW*Œ©p_¸Xp·xréŠç%`ÙBXF•lûF{Q¹Eù0 vOÚ4KJI|É•u¬g[+CàgJmXŒ€Tº$MaÆQgw”í¢|i"§'¥éŽõ4Wض ¶YLUQBv“ê÷IɉOŠ8щ›¬ùYÛ$hìÄ-…§LÆ™F´‰jÔôJî¤#¤©ÞùJ É/sµž9 Ñéž’EžÍ©ŠDŠÕZ-‚‡s†U=£ˆÈ·Š×šŠË÷‹ŽD £x JE·’ÿ ú •ö V6¡ÁPU%u¡ªª Ê ­ Sz¢&¢#J LeX+ú¢0£2:£4Z£6z£8š£:º£<Ú£>ú£@¤B:¤DZ¤Fz¤Hš¤Jº¤LÚ¤Nú¤P¥R:¥TZ¥Vz¥Xš¥Zº¥\Ú¥^ú¥`ª@t™¸€Atå ãöcºg¤hC‚¢E©}CÐB0" r¼%¢upº0›Ô8vЧÖ¦nÂvD §?xŠd5æ¼yÊt!Fæ©›l¦ðPŠº¨Fkômä™Ä€©º ©¾1ó¦š šZ ±×©¤fЪ¸€ª½0iõa«ÿph¨…*«Šd®"PBÈN§$iÙ$ðT¢óä›âù ÅœÐaPjÕDÀ8cIÖv5‡PC­ž®Ìš}}²òägãÔNÅz0òD]Ìe« œ“ï\Ùç¬'‚‰ ¬E‰Rcp”ÆH5d*UR™wëOBâ„~ {é_F—éY\¹Ç! @¨EÈWÙjgm E ¸'j®ßòR>©–š`¦h¯igWPqÝf²¥f²U¯þj¬åZIË„#¡ÐªÉ“&RW$™^Þ”¬„|ª ^f8_ÔFX¨«I˜Ÿþ”)æõŒ €žöD ÑµûD3]t§Ô¥ÿ fcNaQ( ¥2y»ÕFëuLs%˜e¯Œœz³S§iF6{騗`ª±¸·ufŒ„›˜õ UHj*©|ZHµsgµSt1”Z€âw‚@¥ˆÂ*mÁèto5p˃f†5MsøžÌæ·«w ¸(K°¦K3…–¡ñ׸)Ò‡Õg]Bm”Š“o7GGX"òW‚<|Z‡˜Äž™À„©gªéÆŒ]¸”,¸pຳÊqÔ w¼Uk°W}—˜›|åWÑŠ1Ø—Ÿ»–á‹cG¼ggOqº•²¬<UÌèVIgµ»——´Ø—¸~Âôª¡¸œ^e³Ú ozB/µ´ÿÆ·Zذi¸­AD±cè‘㺾˜ˆ„Y¹É¿Ã»t r¾ i0T¢¥¿ìæp@“©Ì²q»º§eÀ ˜­ˆšÁä¶À˜&¬à´ù³ 7Áäëµy¥|¬ÁP¾u'À¥ª…ë{?g¼#¡åÔnq§+Òç¾ÁF £h€¬‹ÅEX6ü‚o6^ÌÕ·<Š˜[ÈË›W‰K3É”0´NBø«ezF‚Íg¨œ~~<ÅØìD—˜‘†<†ÜüÁKæy‹K²£{•­ÖCŠbfÙemÄh¦Ìl¿|Bæ& œÚغ´AËŽDû! æ³’V ¹Ì$ ­Lk`N fµµVV[}\„" ȵ¨A~z#'¬ƒå4_ÁÉtù\ÈbÐl zIÐ8¶´Ÿ5·±£¹}`š6 DÔ†¬€úIËŠ´.—®UÂn_Ù®æË®Õú®ÓgS’Ù.³¤ÊÙ\©ôÕ{òJ`ÕÄÌK·Yžˆõ®”‹°ÊK¿ôŠvö:PÐO]+ûK×g…Öi]Ú)Ç$°dÚ¬ °6/iÖڲݯ]’®8Ûº}µM2D°ÛÂM½=˜Ý"ȦʽÜÌÝÜÎýÜÐÝÒ=ÝÔ]ÝÖ}ÝØÝÚ½ÝÜÝÝÞýÝàÞâ=Þä]Þæ}ÞèÞê½Þ¹z2ìýÞðß+úPßã,ßøßú ¸ Pß ÿ]ßþ–õTàÊ ¹û½@Ãÿr*tÊi¥ÊŸÀÐß¿0àŽ Nà`àÙ‡àõô"nsª°! §à ^k` ~ŒÚ#As3( +rѹ€á©ð °ã Ni=^W?Þ 3NŽ)A-nŸªF ªC+ãöK8¾ ä Cå«0ä©YätäE@«> X®Q® SnߢPV® a~Í!ë>d ß\Î{¬C|í~jJQÇÎöÕ…IKÖôU¶r%)3ow¦ŽÌD]¾®È”"ÿ-!0cîõýèu0æ£ã’ÞUæ¾!Àáf~.ê“^¡>ꨞæ0 UEH¬(—Üu &U jɹ¯ÿ!H‡Ôå»Îë½çK°§)°k{ ]T4EŒ›Â"§ÂDW9ãÌ&±Œ5µ§Ôlà§|K¥2¶  ê<®évé”–žé¦þ:’æ©ÎáBVêë®P?žé&.ZÎ>pU—•y^È»Sb`NÕ[ÈLêë ìf!2:k NY³3Ó[ˆ¡„1þ^ÞëýyVà—]ì¼ø¥_ Üx¦Îá÷nîåà¤Þ"°ã AîéŽê2䘮ãì^4ßçþó19×…þLýk·UñqFìÒmÄ*ª×4là\.Þ>Bà O€‹Sa ÿè« éFÈ6¦Aã§»”Yšw]©ënU òuØf;;löäzî§<ßòBï÷÷pj,o[¬þ#ô­ê@®øv ÷p&Ž_ìò‡ôþ¤Ð3§+<õ±‰¬åäÑõC ijö?Ã#‚ˆ.bàt‡Jœ¾Ò—`l÷ŠÛžm²×Ìx0à"ÀZ¾ò§^é._W"!PøŸtø“æhÎø.â–ÔËP ‰±/ìrœâɉé‘õdCúÌ ðkC›úâϽ(~, ¬¾ù¾•‚†0L·æHÇo£Nk>zT ÷šÝ‘('ÿ¸!ÀÓ逆D#RX섆 eòc´MÿY­PcÝ$Á\oXl„•OdŒv-‡[¸$!ÀyÈ.ë.´ MÞ2ô"¸ß&)+-/13579;=?ACEGIKM+SUWY[]_acegikmoqsuwy{}ƒ…M†.$O#õô 6•Ÿ•)Â0ô0ÞâæÈ ·àäÀ ìläR©'†Â­½·•Ó1EŒ ¢¦šæë†ª®¬Ë:|iÔ&L‚`.XÀ¯Ã€NØèØÁsÌ™»j´|{³Nˆ‚EÈ@†9’dI“'Q¦5ŒeK—/aÆ”9“fM›7kÓ2CFÙȰr†É'k;'Jœ1ɺq嘑Éÿ³§Uo@?ÉS“Iz^ómMP ›“4ãÆ‹”­œ˜jSšŒÏP4µ2&˜äàãsU<˜paÇߏ˜qcÇ!G–<WEŒ“ypŒßõ¢‰ æoJ£8Í Õ"½ úzëÊÉ×4]ksÒáÙIg×jFKeÉp¢HIžZ—3¼ÈÃ,7vÀafë×±g×¾¤¡!”Á‡?ž|yó‘Ʉü½ŽiJ›í8{ ºË§‘«¦E®¾t©‘óL·D‚ {nÛÍžߊ‡¼c à 2 # ôµ$IŠ¿p/ŒçØ9*Ö¸KQÅYl‘$Vÿ&9OÆi¬ÑÆÅû0 .¦”r¨‹N§Ù<2 :0ÊYŒô˜ï;48µÏxª¿ª±ÊÀj‚Ú¢†èqKŸ{Ö ÁŠ®ÎÜçA!Òœ°!46°BB4œÀGÃØÂèpK-„ H¤„Ép´tÑÐC9ñ²”,mô’,ÁQÒI)­ÔÒKY¡FB ôHaJÑ௠椀x: ÀHuð6¢LK!*(ÇOþBcµÊÕ®äO=26‚& ×‚>-Œba-(Ž“—ô‰³ËÂU§]cz›U“’@G„î–À€M9©  p) ‡@rCA ¤]„šwîÙç…€öŠ¡…Ð èO6H\ëÝyïÝ÷NÂ^øá‰/~øßÿ‘Ϥ “¶Õæ¡Âøé©¯Þúë±Ï>ûè¹'ãòîaWüäµ/ßüóÑO_ýõcŸ{kk^×}OtyöñÏ_ÿýùïßJ‘3÷Qà3³²ùþ—@. tàW@ ­|LR•ˆx?nƒôàABŽ„%4á Q˜B®…-tá aCΆ5´á q˜Cî‡=ôáD!‘ˆE4⑘D%.‘‰Mtâ¡E)N‘ŠU´â±˜E-n‘‹]ôâÁF1Ž‘Œe4ã­xL@ fCãáG9αçè˜G=î‘} 96õ <€/‹ðÿã!™HE.Ò&hÀ#!IIN’’´pW*™IMn’“{D :JQŽ’”R„^µ€…•’•­tå+shÁwà–µ´å-q BYö%—½ôå/‰¿ rÁ4æ1‘™Ì¯Cv¡[  M(“šÕ´æ5e¡“\¢y6ÁNq*Ó2†ç9Ñ™Nuö& êYç;áOpê{¤<ñ™O}â’I›ÊB­”á }” Ý$ÂÜá-ƒ.”¡ õcžY6aIÏ¡µèE1šQn”£õèGAR‘Ž”¤%5éIQšR•®”¥-uéKaS™Î”¦5µéMqšSî”§=õéOÿT¡•¨E5êQ‘šT¥.•©MuêSÁ™A©®ªUªÙø‡°¤~Sõêø¬ÖŸÚFÕWW¤ ´ŽH¬mÕ) ) HBÖÁkµë]æV½ÚÔ‘0Áë_w·WÁîô’€UÑš {Á.V¥Ÿl ðö•XÉr‡±• é)S¹Êa@Ö;“õlf,ÚŽî²^.ùìií%ZÕ~t—uÕìfõÕYÔÎ6¯«µíF‡é™ŠÑ–·S½ío-ÊLXý¢Ò<•4Á—¯Þƨs‡îs ªMStÓ›Í\®sd{Ý@—»ø,çð•]íŽwQÝ5o:eU2ò®·yçuo8éiÏÇRgì½ksûÿ^ýVSSœè§Îê>ñ¿öÍÄ~œLÒ>Cai3ðƒó›` ¢dƒØD_Û ƒ¶¾íí0&&bû•¾#6ñ‰Ï0¯˜Å^Tq‹ac*¾XÆ5¶±i|cï˜Ç=öñd!™ÈE6ò‘‘œd%/™ÉMvò“¡e)O™ÊU¶ò•±\R¬¶q«Yöò—mDÖg˜Ìe6sxà*×Tž™ÍmvL_Ýg9;æ’s¶ócâX<ï™Ï»€PfûhAË‚´ å èC´Švô£ÅÝBšÒˆî­FQ\ãJ³Òæ±tKAÝêzšÔ5þn©Q}æô¦šÕYŽoZë)ÿ÷7Jÿe€¬q-e„r,ùö5’+ܶ £í×Å6ö±‘le/›ÙÍvö³¡miO›ÚÕ¶öµ±mmo›ÛÝöö·Ánq›Üå6÷¹Ñnu¯›ÝÞ² ×eئÝõg©A{ïû•id!]û;~œ•%ÎÂ=ça‚/¼•…Õ7Ã!.J=s•Þ·x%1K×^û¨0÷ø$ }è„ æã%g$£7ÎñÁ˜œå‹Ì-Óz×r™òÒ¦Ðô¦¡i’™ï| &…¨½Yž}ŽßåÑ‘þÆô6éMã«?6ߨ:ê_ì§=Ū|kU÷zw …:¸ë_7;ƒ-Qbs]ÿágwûÛáw¹Ïîu·ûÝñžw½ïï}÷ûßxÁžð…7üáŸxÅ/žñwüã!OÄw'BÞ‘·|ñ 1‘_žóUô÷\ÍÙyÑϘ ýé³XgÔ¯žŠgý듘ñÒžöG yíq_D”çž÷C|¹0Ù{áûðÒÃ7~µy|åÓðÔËw¾ Wý|é£ꦟþõCØßfûÝႚrïi¶ÁÉŸ~õ¯ŸýíwÿûáùÏŸþõ·ÿýñŸýïŸÿý÷ÿÿ0p ° ð0p°ð!0%p)°-ð105p9‹6ìA0EÿpI°MðO¡UpY°]ða0epi°mðq0upy°}ð0…p‰°ð‘0 •p ™° ð ¡0 ù©° ­ð ±0 µp ¹° ½ð Á0 Åp ɰ Íð Ñ0 Õp Ù° Ýð á0åpé°íðñ0õpù°ýð1q ± ñ1q±ñ!1%q)±-ñ115q9±=ñA1EqI±MñQ1UqY±]ña1eqi±mñq1uqy±}ñ1…q‰±ñ‘1•q™ÿ±ñ¡1¥q©±­ñ±1µq¹±½ñÁ1ÅqɱÍñÑ1ÕqÙ±Ýñá1åqé±íññ1õqù±ýñ2 r ² ò 2!r!²!ò!!2"%r")²"-ò"12#5r#9²#=ò#A2$Er$I²$Mò$Q2%Ur%Y²%]ò%a2&er&i²&mò&q2'ur'y²'}ò'2(…r(‰²(ò(‘2)•r)™²)ò)¡2*¥r*©²*­ò*±2+µr+¹²+½ò+Á2,År,ɲ,Íò,Ñ2-Õr-Ù²-Ýò-á2.år.é².íÿò.ñ2/õr/ù²/ýò/30s0 ³0 ó031s1³1ó1!32%s2)³2-ó21335s39³3=ó3A34Es4I³4Mó4Q35Us5Y³5]ó5a36es6i³6mó6q37us7y³7}ó738…s8‰³8ó8‘39•s9™³9ó9¡3:¥s:©³:­ó:±3;µs;¹³;½ó;Á3<Ås<ɳ<Íó<Ñ3=Õs=Ù³=Ýó=á3>ås>é³>íó>ñ3?õs?ù³?ýó?4@t@ ´@ ô@4AtA´AôA!4B%tB)´B-ôB14C5tC9´C=ôCAÿ4DEtDI´DMôDQ4EUtEY´E]ôEa4FetFi´FmôFq4GutGy´G}ôG4H…tH‰´HôH‘4I•tI™´IôI¡4J¥tJ©´J­ôJ±4KµtK¹´K½ôKÁ4LÅtLÉ´LÍôLÑ4MÕtMÙ´MÝôMá4NåtNé´NíôNñ4OõtOù´OýôO5PuP µP õP5QuQµQõQ!5R%uR)µR-õR15S5uS9µS=õSA5TEuTIµTMõTQ5UUuUYµU]õUa5VeuViµVmõVq5WuuWyµW}õW5X…uX‰µXõX‘5Y•ÿuY™µYõY¡5Z¥uZ©µZ­õZ±5[µu[¹µ[½õ[Á5\Åu\ɵ\Íõ\Ñ5]Õu]Ùµ]Ýõ]á5^åu^éµ^íõ^ñ5_õu_ùµ_ýõ_6`v` ¶` ö`6aQ ¶aöa!6b%vb)¶b-öb16c5vc9¶c_BÀ<öíì'dÝî€HÖìLöd½.eU–êþªeeîea–ådvfK®fmÖãX6g‡ngyvç|ögc6h…Öä2¨h¯6âpvi®ivß 6já.Ǩ–ü¬öjï ´ÖûÜ k½–_ÀvlɶlÍölÑ6mÕvmÙ¶mÝömá6nåvnÙÿ é6Ѽðní õ6Ðø¶oùìoÏwpí ÷Î7qçlq7Î÷qÛ,r%WÕ ·rÍìr1·Ì4ws¿¬s=7Ëò6t-— I·tµðt}-kU7ñX·ukañ¾vviWlm7wuwwy·w}÷w7x…wx‰·x÷x‘·üÀ*ysmd™WÖˆöy=-z¥·Ò¨·z!mj±7p•v{-­{½Wд7|×yÉ×zÍ÷|³7}Õ×ÑŽ¶}í}áWÑÆw~Qw­ìWqÁ7!wù·Ø^÷“Vüøfk·€˜­8“`ø!8‚%ø6`*ø‚18ƒ5xƒ9¸ƒ=ÿ˜>8„Ex„I¸„MØ‚O8…U„W¸…]ø…ax‚ã†i¸†mø†q8‡ux‡y¸‡/X†áȇ…˜…‡˜ˆ‹øˆ‘8‰•؃ø–Xƒ) ŠŸxЏЩx…£8®®x‹;¸‰Ñ…Ÿ8H`ŒµØŠ¹øŒÑxƒÇ˜Î&ÑØ‹Ï‡ `׸>XŒÉX„`Ýx‹)€ŽÇøx s¸Æx6Âa  ‚áØŒäIõ˜‹øÙØ/˜“éXÍx”]˜IÙ“SØ”¸(Y”#¹ŒpH$“=+9“Çøˆ' —Qy¦ã/yǸO¹—I‘Iÿ4˜Ö˜®”y^™Œv˜•ó؆÷˜—…ؒ٘1ø‚™›ÁY‡Yƒ½™`%ƒ¶3 ¦™–‹™„¯¹Šøš/ œ7`ŽÍÙžõ„‘ù™»ù›18±Z>`N8 f‘÷ÆŽ3˜šoyƒw˃ HJÀLE“1¸z&ú‚念ºƒy8˜n¹):#Z¥+Ø¡) XJ`̘‘-z¦ýùŸóyƒ`Œ à‚Ëù‘18y¦ùf¨)Ù¥‰øXZ~BƒûY–LZƒ=¥£áæ„×x*ú¢?šXºUy™’I@¨zm&2à…y„¬ ­¡ÝÙˆ#ÿšŽ»Ú¡ Y£9 ­“z©o§Œ/Xª™¢€¬‰¹‚m9”åjÚ9§+xÜºŠƒšƒ{z›+¸²Aš¬I ž{¯58±9ƒy¬w¨Éz°Ú§ûz°ïù±ûù‚MÛ¯+ø¬±N–   Á„çú& ‘ßš¢ãz£ h¸7 °9[že»™z°{û·-:¸yú´uš’ù¥g{»“;ƒãEY§ÏYƒ/{»_û´AùbÛ³»¸Ç®9û¯9 »ÝY°ÇXqÚ†º9¹Ç[´›…áœyo,’£92ç *'•y¨•Z`ú’]›±›¹ž%[£ãÙ’}ù²…ÿZ¬œ…1àÁ/ØÆøª‘ú¾5\ÓP»Ä3›–1 ÂÏû¡óšŽ…Å—C†œ:ƒË{Å;ܾ`±k…½Iû½«nžÆiœXÂ:¢ÃÛÆܧ@›«Ÿ;Ù®!û¼;ü‡üŠ6ÀtÀe­Kø¦å›ƒ#¼–‡{\£Z¾ @Ísüƒ Ûpp|ÂÁ|3 œ»1Û¡‰Ù¡MÍYÎßœ…w¼ÅO»Í霃Ãz¹1{Ɖ™;<¶ ø^x¬?Y•ý³‰œÇ5x˵(¼ü x›Ž *€ÌÛˆmù£™›9`®¿1FÀµ˜Ê`ÔK½ƒ_¼“É;Ð+ݵ‘[¨ËüÖØÄ]=„ñÿ¹É‰xб¼×ïFÑ3Ñeœ~]ÑýYÙý<¥…Ü„GÛÚ}9¬…ýÃuZº œÓ±ÈÓƄӻÛá{Úy¸#ZÒ+8žñ<¹”›ƒñÚ=´ã:ÞñüÞ‡}ÅÇÛƒ5{×ýàc<Éù]©S]¼½Ÿï|Ã[ùÙ÷»ß×\ÚMüг¼¶IÐÜ£Ëq{ÁK˜©g»àþ”â1]¹ñ³5Ü—/<ß58Ú#þÝ]à)¼šÃ]ÆËYåõ×=<áß\¦yã1¸ã[Þãs^ÙA˜£%ú‡ã¿yàs^ÓÑ9äEÞ&>@trۅǦ¹•”•Þß'¼æ«;ëOyì±~£Yÿ½ê?^¸}ý›ƒýí‹ýƒÝ²'>¡ç¾½‘Yè)^×A<®«]â¾ß?é_„/=âÁ½ã;Ðm;üt8åŸ\ê¿ýÏq}¸}|¤ûú‚ýþ„/ûº—¾ñW¼¶½ÎÙýçŸùî=?ÛE<ƒyáè¯S¿ñµ›Ùý9¬9ßöyŒÿÊ‹þÇñœ˜Ÿ|üÊä+ßkÆÔúxÛ€|ø__çÝ=½Kݱ1܉ºÃßfû£ž?Å_ú¨cÜÈe}åéí^j«¨úí«ÛŽWH‡ ±a¹‰ 3Éq2I 'qMQ$±ÄœLËs£' Lµms¼ÿã Emd¯Š :j3ÌQ"&*.26:>BFJNRVZ^bfjnrvz~‚†ŠŽ’–šž¢¦ª®²¶º¾vt„ ™ØÞÚÂéæ•LXéQiE0 )'cmØEA7%õA‹­¥­-¨ÝQõ±•ÁF3ýG$5pïW µaT£!ÀÇ›“HLˆçsÀPÌX”è;·Ê—2ÏÒ)abÌŸ8rXÄÇ I|R]k$É’&O¢L©r%Ë–._ÂŒ)sfKZ¸næÒ° ¤BpêÎUxç̺jÞ¨³6îÛ†aK©`‚Ág› Ï¢¡ÙÐñi™¢$ð¸!Ѭ °hÿL8Eǰà0¦óàQàèàV³ÀÉAc ¢x2d”Öm 5vBýTÒ ÎÆŽCŽ,y2åÊ–/cάy3çΞ?ƒ-z4éÒ¦O£N­z5ëÖ®_ÃŽ-{¶ép(Œ0`MÀ»&Á…À\4 ¶ÀÔɈ}«C [No©ÂQ0ŒwV"Xcý§TïîÊ$˜^B.m,(%±PÞÚ:q@àÙzîµÎuÖwáWF^I<”ÄÚñÇBº\ØÔ7A\T F¨@IТˆ#’X¢‰'¢˜¢Š+²Ø¢‹/£ŒÙV£7☣ŽT¼åv;ùÿcC I¤‘E9MCIÖ8£“OB¥”SRY¥•Wb™¥–%2Ù¥—DÖ÷¥˜c’Y¦˜‰™IÄ–k²Ù¦›o§œsÒY'kiâI&L•§Ÿzæ’xÚY¨¡‡"š¨¢‹2Ú¨¢B)’’RZ)QtW¦£›rÚ©§Ÿ‚ª¨ Nj©©§¢Zªª:¥:ØGyŽ«¬³ÒZ«­·â Úª¬¶Ú«¯¿Ki®Ã[¬±Ç"›,•ÁîÊ+³ÏBíŽÊR[­µ×b›­¶ŽIÛm³Þ‚+í¶ã’[®¹ç¢'Më²Ûî#鯼óÒ[/¢î⛯»öòÛ¯¿ÿ0mú\ðK#œ°Â 3¬ÿ°ÁClRÃS\±Å±Æ¯‚±Çƒ²Èr‚Ò@'Ÿ|#‰3ŒTÁÉ/±C8 v,{àý‘²­) (¡ $ÚÈËÏPÖ8Iø£y(Ôž!A_0~Lä‡6¨Á3¢1j\#ÛèÆÐImó0À?DC€l"ý Ò·šŽaŒìFøL€…À #‚(;ïµðiq»¢¡Cÿˆnhr±ã0жnr,íÑd áDJò”S pGHP; d$P‡Z®ð‘nÜe) çË_sE5’ê` ã-­”—O˜þ@2ôÃY~™ÉË@—AÊ4@^TŽÞhÙZê8Ã:Ö²ž5­y©&Èø“°›¶ ‹¨Ÿ1õ‡/ÿÓlê É ÑŠËMñt«ØÛ)çPË*Þ«~'gTû•QØ[Ca|¡ÛTŸ™…»&-ªæZ«‘»ê^70=ˆ½Ì‘y9ìbf›Lˆ:OqS¼Ç½ tUÂÆ(z¿Þ”úàþ€½ékiE8›…ãõ¤Ïweok Ü^Æ${(š@„¸î›¹EwÙmò“Ívfn#ÆIÎ1”Ã<æ2çLí¼Ë¨¹üo3ß9Ï{Ž“š ¼glyÎ#æó£#æEŸ Ñ—^°¤C=êÛuzLšNu|I=ëZ—ëÕi·õ¯ƒ=ìëúìÄnö³£Ý_dg]ÚÛîö·Ã=îrŸ;Ýën÷»ã=ïzß;ÿßûî÷¿>ð‚<á oøÃ#>ñŠ_<ãïøÇCžî$<å+oùD¹üòšß<ç·”ó΃>ô¢‡ÑçGoúÓ£~6EO=ë[ïúѬþõ²Ÿ=í%ûÚã>÷³¿½î{ïûÑóþ÷Â~åƒOüã#?ñÆO>ó›ÿ÷å;?úÒ¯;ô§oý룽úØß>÷¥^úîƒ?üQÿ¾øËo~™gþüê_?»'Ïþ÷Ã?í…ˆ?ýëoÍÌÿþúß¿ýÁÿÿ ú-B`rj`*à2`:àB`JàR`Zàb`jàr`zà‚`Šà’` šà ¢` ªà ²`±pN Â`ª KçÈ` Úà¨xÎ êà6Jòàaø`a®Éîa*!ééÎ:ážBáRalHabažÆjaz!jpáŠázF’á¢!e|N²aþŽºa¢áÊaV!Úa:!êa!úa êaþ b!bŒâ!*â"ÌÚ9â#Bb$Jâ$Rb%Zâ%bb&jâ&rb'zâ'òR!ù’&, 2=úÿ@“pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿`lq0&ŽHxÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…^ f‰f†Ž‘’“”•–—˜™š›œž&fŸª«¬­®¯°±²³´µ¶·Ye¸½¾¿ÀÁÂÃÄÅÆÇÈbfjÉÍÎÏÐÑÒÓÔÕÖ¶ ÜÝÞߢ×ãäåæçèéêë­ dßÝáÚìûüýþÿ ,W‘¢ ÜÀÀ‡#JœH±¢E9 ]àJÛÂ,¸H²¤É“(Sªœ–1ÀÆn™­œI³¦Í›8s*sàÿ3t J´¨Ñ£E' ¼'áÒ§P£JJÕ‚¥ßÌ4¨Êµ«×¯`ÃRBÔÓÛO—bÓª]˶­[*´€¹ìH#ßêÝË·¯ßšW¼lÐt›]q+^̸q9e&üˆØ±å˘3k~¡€¦ôæRÖ·¹´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ýÎ&Ê ¿¾ýû–"Ô¸°¿G´´ß;ÿøÍ, `Fôáçàƒþ¡ß€öh!Sš‘À…vèÿ!7W5áˆ$–èF¤¨"Wö¡… ®¸â‹4ÖèMˆ&æ¨ãŽ`DÐÔK6úÇ`D‰#H&©ä`UäBCúwVß4É€BÜhà<¡!7ˆX ÎC>Ëx6O=ý…X`J­)Ó’tÖù^7J±yiJü×Ô†ÿ&–ÄE žNæ~î4u%G¢HVá7nöW¦¤vfª)zYÕ_C6Fù_‹ˆºbˆVÁg.ÆAd }öR>‡v¤çÜúR¤:@J9´é°Äz¢“{Zj†ÊMA5©Ô­GdcXµŠâ•_"ªk7‚:{ÖŦ«ÿnuÏúQHãv(à~Î2¤Õzz-›`&¤.e0¥¹¶Yð®N­«ðÂÌuTï“Þü‰âÄÓzíñ2$ÏA,ʯ¿ç.МqFL àÊ 2ìòËÄY€-ÄPºk O#/jFÊ 6ëñÏûvÊÀ=yÞS)†Ì*óÒLë6%Íý‰Z ­@¢ióúþôÖ"#œ†ÉýÕôØdëæ*Ôz3BÖÒ¥¬YY¬u“ s»>oÝxÝöž~¶Å§y–`nÿûí|]e€ Ö£ŒæJ¬¸ÕÌ¥ÌqÌ&Ý;~08³#Ê@é¿^5'îØgï•Wö6óô}°/€ëA[±:Ð Ijp"vs)½Ú×oÿTåòî­ï̾}q½O£KaR%õÉ퀬™š1É H÷À@£ät¿ Z°;ù¸ 78¢ rðƒ |CH–g„&L¡ ·ƒÂºð…0Œ¡ gHÃÚð†8Ì¡wÈÃúð‡@ ¢‡HÄ"ñˆHL¢—ÈD_L.p2_à^d¨ùLñŠŒŸšÈEéLˆ^X c*Pê®C@Ï& F%¨ghlc:2˜ÿêBš[µöcÇtñ§ùâA*&ÇBþ°g@‡Å&IÑz"$ƒd¸œq(ÿy³0ÈNf†b+’Ù'IJ·•òMÈ:¥Ñž§JþUíC˜ÜãÀ4 (´xò–šáÞ+[ IDòr!Žüå*¿&Ìá«F±´Tä6P\:³1¢ã:F$|FNßàX„²âE¬³"ô@–zdƒÄ“®ÉÀ‡-Š5 &ÑÜ¥%.&`M•R©±.í²CÖ¼gÅ ’(XFÏšÜ7Üa€g:41âúÔþl¬Dè|Œš–6¿Èº…ª,2+#ç®à¸'E ïqýâãEe÷H*Î.¡ÿ„"@A"ÉÖísw°Û#/tMEÀ“\,CÈÊ:zɃÊovº{¨RùÒ©Ô%‹Há#ä…Æ0¢^L0:Û¥/ ôÄ xŠªÙÐS¤ãñóZ-}‘Lñ©Í¡JU¬¢)+Ú6Jv¹Â’A2ð!ª¶n”Ü8&’9𕀡KM¬[ŽõÓ§Ú¨–‰0£åB.”R–±ŒÁÆåÕ¡Ùµ.áø^ØúÎ9¦ò3Þ”¥\3ÖÙ›zµùœ¬Íò‡!_ Ö¨M])3·¨ØÞ‚¥]©µKçâh ‚ŠÓC´…œ».æÚ樫X©N½ÚØ…(E²h Ò¹ŽêTev÷X¬­ë]›Z±®q(¹íÿëRÒBo–µÌ€o燉‘Žüù·ª{Øçí×'³Ûêsçj/)jrºÈŠGOkJJ.W³ؘ"80L‰JÀ¹ éGëZ\~­¶Åíè2”úšØ+¢”£ÏIͦ¸´³-ŒÌÙèÚ§­IO']7›ð[Yôjª9 3‹Ãå‹câï¾×§d=±”©@1rS€ª‹ý«Ùkvµ‡ç;…ãŒlóµ–§¶k¨iuŸC&0yYÚ`"‘*¶ß”±AÝKW[NùÏTI©%‹yÿz­Î¹å± kàÛíЊ¦ÑZ³ ;юذْ³M+M—²TÓÃrfïžÿ1Ýg?úÔQ‰+¡ „^¬=øÂx™€Ïf2ÛšÒÜe¤š»”çmŸN&r]³ãκóCÑT.v×Ëç¢:¹Ô¨ŽöQû.Ïý²ÊŸuêÅÎTªÌâ˜Öã¼53qŠÞsRñ[ó½¾{gD¹×Ð ¹,÷¾ 8»xÛÉÎs“©iaSKûß:Ñ7”л_úÕV9ÅêRºË„rÜtm´˜±r]u§Âsðg,moš5zùxxùw©owäÌ…‚Qµ¬p„×LÏÊ#ðµ[üæ4á>½GèïÌY=ÈÊÝ}/I.¨©¸­3E(À;M©£–}!+©W¦è;(ÖÿA«ÁOZ wÔDÝès3æÒ\† “P›ãüí(i5Ï PlrZFo“~L>Ÿ.}â&“ŠõÐõôÜ’ϱH€Uúé:P CK~n`cv¤º"Ù¹s}#óÈlÜGÿm’þô¨ÏƒéSÏúÖ¿¡_•s½ìg¿…ÕÓþö¸ŸB[WÍûÞûþ÷À¾ð‡OüâÿøÈO¾ò—Ïüæ;ÿùоô§Oýê[ÿúØÏ¾ö·Ïýî{ÿûà¿øÇOþò›ÿüèO¿ú×Ïþö»ÿýð¿üçOÿúÛÿþøÏ¿þ÷Ïÿþûÿÿ€8€X€x€˜€ ¸€ Ø€ø€8ÿXx˜¸Øø ‚"8‚$X‚&x‚(˜‚rte"–/žæRiEwf‡lZƒ“÷eÏÇ-Ä¥|“–I;³MëÐ ¹·B'C@NF H&F5x¤PêÕ!2óO¿DüE#ttv:‰wùrdòK:X$Š'L=(% òsêÐ!Cx?Ü“QhÆ,RE3Ôöyév[WX…[X$•T äó"b·Ib¨iÈÅ`ªt†b(°†Ò†öã#ô¥¦2se’e4³kA2†D[Ù—Tèy"#‚6#ƒ¸ƒ\•+88Iˆè‡{#BèˆÚTR±—º$F³$ X$ÿ»X}¢oϦ_HÆKœÈ‹ƒÒƒI­xF‹²xAu(;/h#J!hWu3X('PúTLÄb?(£gÆå> Æ9 µS×k’;5W#Çøy‰¤¯ô‡V#r4³V6@‹v0'"€Ñ86ñèæX’Ö3óðQüFŒ˜˜mâ3Z¡8IO—†yø'8(ß‚tC5Z d:LňGì¥j42ï˜(©ˆh6tc8Iu2CLl@€é2À6‡—fa÷"¿˜’²„ Y"&›…L <=v‘û“YŒé˜Yy•%u#©ño'IˆR|%]PY!X‰6X7Ô’÷kÿÐøx“8Ù’„“‡å‹«è!¸…òÓaÉ!çH!X(ŽÈvOé]&8÷àN¯óŽÛ0PˆŠ{?M1˜”³“WÔ(g‰7_’8a`“l¹0±æ'Q¨1"!—‰D$ÛUXz¹þ±—û‘”£58»eINÙgR%w\èŽ52%–™•ŒÉ….2“…™¤•|;y‰kÒ#k¹™ Ó:úiWô“{vl´Y›¼§‰Ê7Ï›±qÓ“ÔI$´bƒÄ¸›Öõ`6žL8W1 @(È€Êé2o6`Þ8ÐsË ÞÖ!ÓyJÖ™^|Å]îÔ‹r5vó9i$-x!(yoÃÅh–ÿé :EL=Aï €ñ¹0†GØF÷yœ}’hÞ0€i!ù–x–¨"¬ùrØ9 ÍVw½Ò§i›·Ù7ž¼–!ˆ£ú^–tN)£úº.!œí¸Œh¢² _yšp‰J`Ø¢yR¥˜%W£©HUÉ!2'P*JJ8k·J”F­¸žQš–\ Gš.IŠ íâ’ωš_Øœ$ÚbtZ›Gf¥L& .êƒÏ–¢©ù¥^z%Åé! ú¤Š.‹ú’ÄyVÚR¢EÚqJ,íRŸ¥–ˆÃ%šORSý%žå‰x¼d…ù¢ƒê™©\¨x˜£V§›X¦V1gQVÇWD5ÿXW™WÇJ™©¡™:,¯²Às75š•]:«¤ÚY@MEè :Iÿyvª˜©*’QÉTi£R&ép6Ò¨Zv…&9®Zê`ÑuZanÚÂ:¬šÒY$–6ú3—Rú$Xêå(°«òm­dM ©tÊ5¦¥¨¬ú!Ù¦>YW°º˜ü/Ķ(Õ8±¡ª 1Y”·óJ¯v¢v:ýi5œº¯kªòÓv‡g­2)¢vPëêj­ŠPã…ù"!7O¤ÚaäÉ]ÿä0?[>LZ#üˆu÷_ó˜*² )û…Ç~ÕÊ|æ ~…G‚RûP²2«C‹}&i}ÿ[ë},éµ_ûL¡…Œ:~)•t9ê|g«}ÇÓSI›kûP 0¶-«§å'…a¶´j}†ÒG%¸·Š¨ä·*ø¸¹’;¹”»u[¹˜›¹š»¹œÛ¹žû¹ º¢;º¤[º¦{º¨›ºª»º¬Ûº®ûº°»²;»´[»¶{»¸›»º»»¼Û»¾û»À¼Â;¼Ä[¼Æ{¼È›¼Ê»¼4Õ"È‚Íö{e¸ÄWw…ë‹›½N0­GÈIâzdg9EÓ+‚M˜DF,‹0|çTGéÛˆÚ¿Hð†èˆ:3Ë„N‚ŠéŸúêQæ+|W$ò;ÀE‰ ‰c0v–¸d¬{­ªä¤ÿÏ×f4CÀl´h4M‹® ÁÖڿΗPPSÁ"\ûkœhC²ÑÛ÷4¦ÿAÜèOÃte¾2JVU²N aÿ™›§€2(gLÌb[¾‰fÔÓZ À+? ;\iR}–_ï‚2£P[ <ÿ+¢Vp¯ƒµÄµ3œ¶ýqïÕ¬°$dÍö¯ËнRP 3ùEˆÇƃ$@`´§sf:uì!¹2üÖŠžÈœõ‹Ç¡6³ µ2®iÆ€kub'YÉ1-lž‘†B¥ š7`:åÅÙ› ‚É“O2¾5óÃÀ˜R  íª3f„fÈxÊ… ^CÏÝ5^ÇRµ3ö9}²ÉÕ0ÐV0Ðdú=ÿ3-¿óI8} 1[ó2Ål¹ÉlÔ#ÔðüÕÚ…*Àj†ÑýNÌê±CýÕVÝ_iÍÁkýÎ]³á,Ðv­Ç3SÖÚÛ¡‰(oé9‘ a»îœ^s=WîÜ‚fæ,¶¼“ Ò™ˆƒtM2¿l£¡`ÎlÂÛŠ†S ›­ ÁØ›¦´ ÙŠ«õvHˆ 5kÅá Ö>M`“ÚŸ½­“„W3iK™P© œb=°ÒÝaQ=OÿôRm£ØW‹Û-=ÖñÊÛÃ:§R¶8ÍÜ k  ÉíÙ6×t†&ÛkW£ÒMŠÚ±sYZYÿܰ½ªýÜi¢¨Ñ.í …2mÞÿ"»©»œÑŸò©ERÑëÌÞ–Ê$‘“¬RMÄ9¥Î†Ç s.f(¦zµÚ—éßâ•J|¨5|ÆÏÝðÛ8kÛ·ýÒþ99îàñY¬«Œ”ãéÍ1xX¢Ëâ¦üÊ)•ÊòíÈ$Ä]gˆ£úeçDLÀ-Ô›âìi„!Tý¨“ä·hÁ»õå@=wÌ|àýÍ¥¼à ®h^b>Ÿ(<Èøª¬¯½ot° ¢6$+ —| L.Ç ³ÜT«IÇ-ñtiYï³lÜÛ=t„«içÄçó$ ¡‘%!*#Rnˆà½äPpÝdšÉy®œöZ²œL¨Xí]ÿg TìdÃy‹Å­nÔ …]Ê­^5lXG¼3„'g‰pµpR‘X®s‰wBðÇ­UßJÜ<v.RE²r*̼çY;ç¹=F\ëè!˜îì~ëÞîð¾ïïôÞ XïøÎTÌ»ïüÞïþþïð?ð_ððŸð ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñÿñªkŠ ?ò$_ò&Gò(~ò,ßò.¯7F ò 83Ÿò8Ÿ³•ó½çåØ'ªª½W\H¥ ³˜Î­P ãÌGŽË}ÍHA |?’ï²À½Óî½D „Iÿ{1E7_óhsóÿ8ß:<èö½N3?QÔô§T¾ÂTôò æà Èvèà¸aTEZèö²U܆ôôrµ¾¾7õTÏR]Z/༔µWôõó PùgO-—™ßFa•}‹Ä{%\JAäýÅŽŠ nx9Þ«¦ßÔü™ÌH«c†|ˆŸø­`ÀL‰><öÌõ.ó4E°ù>Küa¤ŒèÀ¿Gø®T$¬Ohp¯e•jp…¶ÇWû¶¿ L)Üõÿû^üW4ü*žÆ§·^€¼jÌQ†o! ©Qq³…ÝÆ‡ýÙ % ˜Àa0‘Iå’ xlŠM©Qx4&ÿU„ÙH¢HK1]V@QhžN‡mtÃHþ=Îæ: –B!’Üë çÂ>͘²˜4´"*ƾ 2–6«,0"Ç’ 02$ ª>‘¾„y•lÁ°´“ t 6¾*•ª„­­– d%&Z“*&:h•0T»•®AÒDµ.”Ò…'¦tí-­õï]³FĈ/ Kt™›f7ìŒøÅDE‹1b¤p À¥$¾ €êDláBæäÖ’Gš‘TR€L•«¸¼¤båÁ˜•ç,l+QÈÉ`ì9ÎÂ…ŒO¡F•ÿ:•jU«W±fÕº•kW¯_Á†;–lY³gÑ¢†­I™H.ÒY¬Ó@s|ivÐN ÔØ.œtˆÏ<úÔAlIFtŠQ*ôøè¢ÇªÐ8£N£þ†Lâ%ŸÜXÂt}¹åiZ«ùT-f¾·¿ä©è5_æ¨Í´ö‚¾Nª%?lb™¨«Á²)îsÀ½ÉW›£~M¶C5œTqçÈÁŒ®^òzòÕNŠ«+Ž××'š ”È’ÙLÚ“ískâ;„Xn‰“¼ée"–Jú%¹õpg¢SŽ%Á#4B·kHËÃA QÄI,ÑÄQL1­. ü¦ÅPÿLÃk'Ô"À+¶5E4¤Îchˆ— ¸L˃1#Eà$Ë£É$ö( (•RÉŒÄ € çÀr®Ò;° ¥ÇtÙÂ0xK7–À9î×pÃf¯¿ê;°µb¨H:!öd퀻®“1Â †t‘.žyŽ íÂŒ¨€ì`NÏÍI=€ ¬‰¥ 4Ì€.Ô.©¬$-báé(P;¤N‘Xk3ôŽ3tÓ 8èÔŸÛ*15ª*¡‰÷ªñ¥jÔŒ«¦vøkÍ1ÒÑ:Ó¤7U WÜqÉ-×ÜsÑMwE$Ì”¤&¤5/Ò¬Átšk©Nÿåyi0È pŒÈ.³As…'dŠ%ô-5³ƒrø{Vì<^œ;V”—õµînÍ–¥aoIÔ\@µ8 cM«‡élÿmƵçÖÿ{wŸO"ÃQ…'{ Eóâ­zZï‘QæÜ­K}k®gFÂw¥ñJÇZš€ñ"}Þ¿¦;«_rmýl…,djc8†¾ €4à˜ÀäÍâu ÜùÖV/Åí]í@TÎtÂ90é YRÌåŽð¯ÇŒtsèUd†BÏ-ár\Zap¾wum2š^Š&†Å19¹ÉôD,—±hGcX™õæ2>>Ý¢8ñUCv“©@cyš È[nvŽê1m ò+UÒ‚7H 럯<¢­‹-Q”Á¸6úì V‡"Æ^šHžèµ je[]Âñ Ya‰º™ÿ@³œ.’‘tä#!Ùc¤Ê:nœB"ñ¥:2©1ìßK8è%Óup”¤œG¸ŒÑ-,…ßXå115 Ê↛Ÿ(á:5<ŠÔg­Ú±‡a\â§÷S/}.šˆ0 v8Q=¨QS&˜—22jqUÛ•ކM+.A{kBâx(ž‘/ØóZ(JZ’5±Û¦OU’¤ošrkž¹E&œ“u\àœ(¸·D}5J$!Q‰N”¢é‚'Ú–ñ…>Òs{9ªb6 ânNTÓI(C9ΰr–;] _˜ D@¥«€fÜ ~´NáÛÉ ÿÐK!j#9 ÙþˆI)‚-&ºCf=ÉL§âL£ÝJ'›d#4€Pí$<¼èâqó‹ù$š:¿”Nú¡*xÏ´>šÉQv"QŽsÁ^ò¼ð](ƒqç#¨9 š&£îè£Å*šXÅ.–±%KÖbxC¶É•²y±Z#õ#†fðt˜KI!¥4´k*]©^iÓG,â=žÛÚ\â$;"0¹øÃbîöŒÇ$bŒèÌ‹¸6®\½dÊÊ /ñLõŠÕ$§@§wÃnŽÌ]5IãKî9RcÎñ™5$F-ÙW’I—VbóE^‚«àBð¯~TFÏ; fŒc¼sì}ñ›ÿ_ý*²<­de)[©dͰsqƒ¢àÂÏf´0Õiƒ;—CW¶’•1° ,Õí’ì„Òã!õ–æ±$Tj˜»Æ:yÄ\èi·¡ã$î@? ã6«¬]¥îYüÔPm•¬ÇûœQÚXÖM¾qÞ‰ñy£QiÉ6¼5ƒ­ý[‰fP`ÚyÆ÷Ü<_µ×+îdì.û8Sû5ó™Ñœf»íädâdòl `Õñ¬7NyJ´œ„΄PuXÄg=÷ˆÐBø_$„eJáKÁ1Zjg6O–ÈûªKƒ­nf·F¥¶ÈtM.¯Îæâ—¬•—`ëË';YqÆêmÞ•×~Ë5Ÿÿ’· ­öG¢l§Õ‰Ç¸ÅîUE§½+-*)³E`T¼ÈŒrœ€seäMvÉ-Žì |ž[ÍÝöö·Áýaߢ"0÷¹Kâ%¶YÎb%C"rdêÄáEH§¬7 =°Â(aIâƒÄ”$0%}¦~(ùlÓ…èë¹<Ô€JÜöŒœ0ƒ_¦ˆ‚·àR)z “vW·ˆ}›YžáÙx¿1ëá„×° ½3[ê¢êMü¯Ž!w5°„ÕcðØ¥Òm;¢Ðª:/×¼·sÁl|QƳd7™S?ùO%) xCÓÚÊØMxÌǯö<¶¼v–_¦k²©á6ûÙÑžv]rÿ0³Ö»Û c“K4o®*¥d0†¥Øû’ôÒ‚KFÐBB¸$£SÓ Þèà…xjHÓ—Œ $;ø¸Æó0©—Oê–óê=ä*BŽÚ´,Ž¡sjê¢, ë.4 Z| ‡M,OmXòA*dä¹å!»Š½ò¨ïóuùüŸsûë £RžÐ°ÊK¬ ‚é=“ðùt {%OÝ ÂÌ\Myio][¾o"kÁæ¤ýíw~×nØEÞ ñŠ{Ø®Èk.áèsAƒØ€¥¶$ Ö P˜¤0,c… ï2oö`ïÏPjkt è~"Ø‚J(ö/R®ÿ )¸¡6Ïã8mF&bG(ÖÉ(`™ÄG ˆ ¡€(®c è+ (Tá!ªÉ­`‡v e p.9tèÇ£òŒe¶¦!¡Ï®‚®š4 ¿¾föä A2@%€àŠ®}° ljõ,nüŒ+R©dg ¶!ëœà:¦Þïñ0õ€Ü¢ý4@áJâºîï%ê&.ºo1‘˱!À`%q)±-1DZð5ÑÀOèànÀn6 I±GM L1Ý( à]ña1eÑ´Pm1–ä´ (&íñÀSèωÑMe‹1U'fÿ±ñ¡ÍjP G‘ ÍW`L¬QéeÀ«ű Q¯ùÆñ·Ä( Ù±Ýñé7Œ¯ð"éQ‰®ý‘ É¡¶þq ² ò 2!r!²!ò!!2"%r")²"-ò"12#5r#9²#=ò#A2$Er$I²$Mò$Q2%Ur%Y²%]ò%a2&er&i²&mò&q2'ur'y²'}ò'2(…r(‰²(ò(‘2)•r)™²)ò)¡2*¥r*©²*­ò*±2+µr+¹²+½ò+Á2,Ų(.Ølä âÄDK3qÃq,ò¢ª íÿò.ñ2/û¦-bŠ2¢.ž©Ýh`P|%O e úñ"…Ü®m*.m‚Ælk„ï(Rá‘%k°)Б-Kppöqô²4Mó4QóC"à™p0'ÂÆ,iˆÎç®´)×'2çÉÇè©2}¥1SE&b7W2ó M{I/Ü,5™³9ó9¥b5 5à •3Î-;× ÀÂik|ÓPda1+’áì*;ÿ&;asÕzS2§Áˆ" =Ï=cò7þÂé2[EAŽ,˜ ³?ýó?ó20Å~"†<¹Ó6ñï|©#ÍrÙÒ cô0Ù3m¨±tã&±çB–ÎwMUºïÿ4DEtDÙÑúÀIy8J8©NèÐò ƒL‰Jaȸl=îÃéžA 4‰"tèËÆÁpPŽH".fFçG)k †l^nÂ3½1޲Ì»'SªQvHtK¹´K'QWžbÀÞ.1}¯‰s F±á®î¢kJâdnÔ ,Æ5Ó/¶”I«(9q¾sŽ`¡O[,ÿ žïÍK•ö<ì­PÂKõQ!5Íœ«Özt>劫¼63c,€ô± Ë=åSuÆ®M<ÌFåtE%äú*õŸHçMZ~ît ¬Ä€NPÇŠ=ŒÊžôsDuTMbZ*`êv5×gŒÿgCA4RõY¡u¢´­ººÉþ¼AÍà ùò –°uI#Hb4NÙAYb à.FùO,†ÕOks²Ú«¡T-î”ô׎V#Óî ‘”%ŽóSLì7K­£5ava ˆ^²Qjpju]¹UF¨m‰ÄðD÷ôDõ$.Ʀ GK/ìÔµ.TFd°äÐ õÏÃ×ÔOW3–W+Öÿ"3_ÛNV°!`m1u~ƒÒ§‹a‰¶hÖ\heá«ÝHmjô‡4ô‰]qH³ô§È­®6":&)¶êdñ"e½ªñ&ö¸¤iUÎÐÓ#„µPÍ!6¬xVSÿçU 3huçvoù¶o?d’ŽëR×3SmÖ Ô£EÎ3³½éjU¤rÐÆTTþ¶ÐiÍêüŠÔrß)ž¤vËtSu¶O—nnSñPÅ(¤ÎoUwuY+z£V3tÑöÑvugPq5XÑ-‰ß‚\sÌN5¤ ™¬.àx‘7y/`lÀ¶p› ^e„^įrålrçmáö3Tu÷>qLx‹Qõ¦•ÿ†¯uÉ·|Ë·9Ö-iv­°v;—“|´c-–¶˜ƒàL ~Õy(ó}Ull]«lw®»r• _Š_Ó̵EªÀ^"Ï|%x‚û}ÅjV”pçbuG<¡ÿÌAå×P Ô²úˆúb¶®øZ_µXÌr„iU„li-¨^Ûí^ioV'u†3!tøþ®´N²Ô (¸ˆ8aÙ,=ó7bãìZ5uê”5žøy}q„  ÊU[Ñdït…ó…Éexš×^q¶]=8c÷t; w 8†LW‡àˆé¸Ž½tÜp=Ÿ"ŽÇÔ‰÷·f¥ÈS7‹IæÄ>éõ}ª!‹ÍfU ù7ù—¤CVƒ€Å7zä\e–PµÊY. µª9Q2ÉMÁ‘ƒÈŽUy•ÿ3þ®°6SŠîtŠ!t…¥÷Ft¥ez]šD–|£ Z弸]õT‰YÿvBA•^©wjÏX× UtyÙ™9”ƒyXX9›µ5'o8±°þJÙGi™W‰sKÉ—Ä7–±áC —÷—“04…ù™“¹˜kŒ¨¦™“Ù’IÂL8mé4ù±;sfËoeQ CWK·ù¡!:¢·bŸü Ÿñ±ewì!1Z.ifº”Q$:¤Ez¤1" ~øDýù7£ø Wš£Õ댤iº¦·I·Œ†ò¥Áµ0˜ y¦yk³F(˜Ñ¦‘:©8R:z ”Oõ!ƒZ¨ez|•:«µz«©ª)Ò«­:¬Åz¬Éº¬ÍÚ#ᇫÕz­Ùº­Ýú­á:®åÿz®éº®íú®ñ:¯õz¯ùº¯ýú¯;°{° »° û°;±{±»±û±!;²%{²)»²-û²£‚ìúþ21û³A;´#z5WcèôD;µU{µ'X:©Ó:ßSTùƒµi»¶m»h”—ª‚´íì¶}û·;RMÄH3¸û¸‘»?ëLÖ˜ ^’û¹¡;º]q‡uÇxÖMº±;»µ;í·£‘fU¶;¼Å{¼ïËaÅŠ8{–¼Ù»½Ý’’¶ÀÞ»¾íû¾ pCq[ú|ðû¿<ÀÅâu§`)KÀ<Á<³;!×®¦¸<Â%|ÂÁ‚CE(<Ã5|ãÿ"‰«èWál½9|ÄI¼½ñ8Xù{c-µÄY¼Å·»›§y'ÔyÅ]¼Æmü¸]ù8‡±¬,àÆ}üÇ<È…|ȉ¼ÈüÈ‘<É•|É™¼ÉüÉ¡<Ê¥|Ê©¼Ê­üʱ<˵|˹¼Ë½üËÁ<ÌÅ|ÌɼÌÍüÌÑ<ÍÕ|ÍÙ¼ÍÝüÍͼ;³¿1Û\f1’}ÙËžÑàÈ5»"ü²¤Xκԗ!ÏÐ!¸W  ~Ú%´©QöRÜ–ÏK±9žš£ð¼X|pÒøŸYÚÁ×÷[5ÉýüÏoœ´[/Ôž‰Ÿç<Æ%RY¢jYŸ©LpBf.ǹ# sŠÔé©ÓÛÿ•rŒXH—£ô¼¢OºÏ)BÕmܵ3`ûL‚u;»07¸@ZÑõ‚ ÀÄ£kL£M]Ønîä#½-…¾Ý»©›iÏ{Ÿ}3FÚ§}@wÛ…Kx=!ñ,ã0=k²Ù ò8·VÎŒ]¬Î´dØCá=÷Þ8Úõ=ȇ›Ö(«Á==5ÜÙ²Œ×'€Al—Ї÷9& “.Ñ *;¼ƒð(U²JöÂlô¥]0Àã™ã•]}MÇÝÃ8SVT†@þI‘e)7EŒ–\´éû‹R> >T@tǨ£ ÏHçé“ëAÎmfpbIBHñçT"äÍÙøÂÿ^Ô½#AŸ?!C¨í‘0{;ã\W˜» ׃;< q‚Í,epMÀ‘F>8³¨_é‚nNHº¾‰Î$ÀÁx‰ªÖZã÷>×âšöa %(y®E^ð¬z¢f´ÆÀw]­’†Öû• ž}r0@@ LÊ%AdB¡IÃL (¥Æ‚Dßhô¸§qJ4ÿLª„=¸0Öä=Ÿ?l,=Àm0 8üVA9!,=Ñ9ôñ©U\n(&E-$È)5PY- MvqQÙmÆv.ºÁm)‰Q¡½ ™* é¹0©ÙÝå%Hµ4h@P|âJhE ¡É.nçž´…Ÿ™¤«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿ (p Á‚"L¨p!ÃwP Aâ£à<9-)êÒÄdŒ̹Åí ECª(0÷ ÑÊ&9Mdf#6@«.> ÙGˆG(TL #&Œ“"œ rú5sÁÑFQœô<6IhÔ‘¯.)¦µŽ&Pq˜@%yMhWÿ Œ›ŠÕWJ¬itNŒ¸ó«¯-{ÝRC` „ ŒN*r*ô$*Q3Ý´PQ'€ ­TúìòL r`ÑšUëAÃΞ?ƒ-z4éÒ¦O£N­z¡(lËH–BÀ‚Q·J:n2óLlÈÝwÝø€×æ(g ã"Åø*n(ÜÌiÊDRëoœx’¡Â‹¦ö§š÷4Ï×^ñÚjöÔ[ÙrÛ~¶¶òv›b†à} Cu ¤|¡µ¯*R€åqqÁkæ2^]¦ þ—êA¡‘\¾TçÅ© YQØç˜‚” Çe¿‘WY‰Ó ±š‹/£Œ3ÒX£7â(‰ç‘A{̵ÿY$¶¦_Œ±â…T-Ф“ÎÀÖÍa9GÓ’(6d•ceµbw…­xY„=§Œ¶h…\Š‚x¢WEƦåëqÝy|'åMµ%©âkxZ‚U}L  aF#J4É}6P×Vb¢w‡¼)áN>Ë€ª¥ç¡æ„¦M©„EâÕ‡(êw¨£N€çp9ÒZ«­·âš«®»òŠO}ˆVúÒœdDwÉ¢‹…Yªpa§„I!ÁWŒ‡&Êe[L3­xåª*^÷җ߆¹§±“"+*©ãmʦ‰,ý¦ì±Ã¾gÓ¡=éÖ&­.û¦#Àuâ}ÞL4ä&G|‚/#­8©SŸu9ÿdº™Eû^Î7-˜lijÄÅðÈ x•*bÆómfT»G`Õ‰½ 8{xªq²næ iÚ`Ê{‰ˆxî– ~ ~K×Ü4˜O;íÛóµå¹Lè©yzÕ †®öÞïv>ö7Úª4¤Í“Í0VH~ÁÀ~¶emÿÈÐëÛ7ð_SZÜ%§Óý ìYFýÖïÄ‚ìæ¯#'W¹üóÓ_¿ý÷×x9f| •<ÿûÃÆ7©2–°Ã½`eîèš[î“:`ÎUÕy·j—/a0lRãƒ$pF&.9Pkê’Þ¼X:)dcsúÜÍH»u-§x䈻Á/Íé!†¤› ¤Hx@ •p|û+Šò2S›bBK…[^AÑ“_iRœ"«hÅ+£l­Kâ4›Ý­,| "„Lˆ¼•,vQÆÏ¨DA¬°ŽEn²Óù¼v ƒ…w·ÓÝÔ À*­dÁÖ÷¼£ª‚Ï:d0Cúh_˜BÃp‰ª´ÿÀ³TK~ÈTõ«Jb$'@Eõö éx„épäÇ4Ä®‡T1‘|¨$…^01)Ëáœø‘4`1˜Â&1‹y£°.Xæ2ÝA¥xXd‹Ø³Lª! 1cfl+ú‡È«pó Ã9£)@’ËÐV<ÿX°Mz̃‰¸HRk ÚÑÇ£á ¬•æÐf"Ox°¸K0 ÅÌ`DØ}ï”Än,rCÙ¹‚ p¤[¬6ž]ž2†"á}ha B ÒÐÈy´U¾.CÈP†Õäc .õR¢ÚP£û'’!0Ú 0&Q‹jÔ£"U ¿ŠX?‘H&BÿbDðI7¶òÀE­ªj’J´xñÊ#}&] #é`1’ ¬uˆÕ‰)¨ÍsEÈÔ¥š$—ûÀzÝkµ£•3…õ,«MèÊVV•gS!–„‚J÷lŒ•èÛJOyÎÉÐá à O+|е=RͬUR™ ªÂÇ–$kÇb¸l´å4|pj3YYo yà¥O¯çªÔ&5¸Â.q‹ºÔh!G’5ƒ*€{)5‰3 @€'Úbhp pîÊaNdU#2L:9Å8ŒRhhò-fǺÇ÷ÒÓ±ÑêÉ}¢µÅœÔ Y“(PÁ±³FwÜfÔ¾ú#ûöSÿn} Õ4‡Œó^4 …5Œ~Ðå‚RÁ¢Ò@NGzÚŠÔ…Þ,õª,„Ï´ït'É—Øâ¹¯Y"‘` Å=%F€[Q\Ü9ÈB2‘Ýa!ÿ!9ÉJ^2mÆä„2öÉRž2•«|`“9ËZÞ2—»<Ü#[9Ìb®²=Ç,Ä ›9Íj^³ëàå7Ã9ÎržsäÀÌæ;ã9)kÌscbÆç?ÚÊåýFèlèC#:ÑŠNíèG¯ÙQh†4¥+Õb É‹Þ4§;íéOߣі5©“g f”:Õª¾B[)<PÃ:Ö²ž5­kmë[ã:׺Þ5¯{íë_;ØÂÿ6±‹mìc#;ÙÊ^6³›íìgC;ÚÒž6µ«míkc;ÛÚÞ6·»ííoƒ;Üâ7¹Ëmîs£;Ýê^7»ÛíîwÃ;Þòò>  Ž` eÖæíï<àÝÚ|¶oøD@à _8ÃNl ‘"…€Cµ˜iñ`pÆáß8Ç;Îém¼z×Ñ/ò´Fæ.g2}D—<ç;ïù9>M½a4?oúÓ£^È"b*З»ùÔÃ>ö²Ÿ=íkoûÛã>÷ºß=ï{ïûß?øÂ>ñ‹oüã#?ùÊ_>ó›ïüçC?úÒŸ>õ«oýëc?ûÚß>÷»ïýïƒ?üâ?ùËoþó£?ýê_‘ë}ï|³ãà[qqòVŠ[ üs:&Æ?ûûïÿe\m\É,Þ°XeõËVÀÿ1` Ä9@@ÀÄõ_XÆ-Á`Àp˜`!GL¤‡aÀÈ9` š ­œ#ÐÁµ¼p lÆÿœà Ò ¯±Ü\HÖ”mΧÔ`ú ­!†íA4!YieFü`*¡¢µ^ÜÍÎ!™j C‰¹ÚZáfÙÒ±í ÿÀÝŠáWÕÉ Ú5Æ\Ñ4…\ DÉ ÊáÕ×5B%YtLRÍQÏÐáâÝ%xAe1ÙsÈNæPG 2b#ÎÜ©Oþ¢ÍQ“Ÿ8â%b¢ËÈh¡Õe)™E0<­K&’b)îJÞ5…Þ-™ˆ a!)Âb,ÚˆâŽÜ n¶`ÓÉâ/£jP^FYž!¹ÞœÀÌ\`d£Ýã3Bãh¬rµÉ.Báø¿Ñ–ÿb‘`4zã7"DèmÅ)—êT {øBÄ ˜F-8ºã;Âc<Êã<Òc=Úã=âc>êã>òc?úã?d@ ä@dAäA"dB*äB2dC:äCBdDJäDRdEZäEbdFjäFrdGzäG‚dHŠäH’dIšäI¢dJªäJ²dKºäKÂdLÊäLÒdMÚäMâdNêäNòdOúäOeP åPeQåQ"eR*åR2eS:åSBeTJåTReUZåUbeVjåVreWzåW‚eXŠåX’eYšåY¢eZªåZ²e[ºå[Âe\Êå\Òe]Úå]âe^êå^òe_úå_f` æ`fÿaæa"fb*æb2fc:æcBfdJædRfeZæebffjæfrfgzæg‚fhŠæh’fišæi¢fjªæj²fkºækÂflÊælÒfmÚæmâfnêænòfoúæogp çpgqçq"gr*çr2gs:çsBgtJçtRguZçubgvjçvrgwzçw‚gxŠçx’gyšçy¢gzªçz²g{ºç{Âg|Êç|Òg}Úç}âg~êç~ògúçh€ è€hè"h‚*è‚2hƒ:èƒBh„Jè„Rh…Zè…bh†jè†rh‡z臂hˆŠèˆ’h‰šè‰¢hŠªèŠ²h‹ºèÿ‹ÂhŒÊèŒÒhÚèâhŽêèŽòhúèi éi‘é‘"i’*é’2i“:é“Bi”Jé”Ri•Zé•bi–jé–ri—zé—‚i˜Šé˜’i™šé™¢išªéš²i›ºé›ÂiœÊéœÒiÚéâižêéžòiŸúéŸj  ê j¡ê¡"j¢*ê¢2j£:ê£Bj¤Jê¤Rj¥Zê¥bj¦jê¦rj§zê§‚j¨Šê¨’j©šê©¢jªªêª²j«ºê«Âj¬Êê¬Òj­Úê­âj®êê®òj¯úê¯k° ë°k±ë±"k²*ë²2k³:ë³Bk´Jë´RkµZëµbkÿ¶jë¶rk·zë·‚k¸Šë¸’k¹šë¹¢kºªëº²k»ºë»Âk¼Êë¼Òk½Úë½âk¾êë¾òk¿úë¿lÀ ìÀlÁìÁ"lÂ*ìÂ2lÃ:ìÃBlÄJìÄRlÅZìÅblÆjìÆrlÇzìÇ‚lÈŠìÈ’lÉšìÉ¢lʪìʲl˺ìËÂlÌÊìÌÒlÍÚìÍâlÎêìÎòlÏúìÏmÐ íÐmÑíÑ"mÒ*íÒ2mÓ:íÓBmÔJíÔRmÕZíÕbmÖjíÖrm×zíׂmØŠíØ’mÙšíÙ¢mÚªíÚ²mÛºíÛÂmÜÊíÜÒmÝÚíÝâmÞêíÞò-úqàßnà îÿànáîá"nâ*îâ2nã:îãB.‡EîäRnåZîåbîåò«äfnçzîç‚.ˆnè’néšî颮énnê²nër®ëÂnìÊîìÒnâ®níR@îÖîîònïúnäæ.TÀï¾îãÞîì& (¯ðoó:ïóÒ®ò’@9@¯ãïåN€ôJïnò.oâ"€ôVoìR€ö*oJŒoú–¯ù¢¯áJ/õnloõ^ïèNnöš/÷®÷’ónø*/ë®o>ïújoûÚ/èR0ðð&pú>ðë°ô"0á¾oâÊï÷BoýV.THÀüv/G0àp °.þJ\;”œoÿê:€ô/.0R î#n÷ï÷._®ë/7n §î” P— € Ÿî k°Ëðàÿ°;ïªaqkñsq{ñƒq‹±ª¥°ë1;.£.Ç0O1 T0é:ñ£qîÃqçž1ôŽqûñr ò r!rt€|@<<.œ/þ î .þj¯ÿ®5°ð(©1 p %ÿ­±È˜ûæñàÖù¯À0à€ø†Êr<.Çñ%ãq .&ñ«øo.›¯ò.@(+/-oÀ&sà+“~D‡'Gàèn “2ü6rÿïó”ñâR3/7ÀhK2áò/(ë°N3sZ—p)¨v'c6^óöh«´h§óZ›6~0#3P®rçòD.I¿ö9K܈0QßµFD÷»ò1óõë7 ï'1xsØqw5—XOÏu§ößö5#v^«µq«·ýÞuçÎë`uV'rn£±|îoGpp.a›6^›ð€Oôg34„£ñY#3àæ²ks÷GkðpsB£·ÿãöàÎ1S˵€ëð†ïo+w6g“vàwFŸ·E3÷k.þfâ¶ø C7A+ï]ç²i3sˆïõJ5‚Ók(xVã6ã 󀃛¸Ox9£8Ž×B‡3[Ù‰kö–Gø‘®‡Çõ‘ǸPÛ´€w·gÛ´™ç2fõ…×øŠ‹n˜C6Cÿ¹ +õ^mv~ÿï+(‹¸gî~Cùïù€ žãðOŸ{®½Rym_ù ò§´4G9‡¯¸+u—£õt‡:z£ €{t{tD“xNúN#z˜£5úF6pÛø6ãxd7áòºKßòáµtãw².¤v S8†O6ÿ_¯5Ggî¼Rù‚[¹ã–X«‹y—ñ—Ÿ:«qD¯º^»gô?û¬÷¹3{v€O/åz·°÷úi—xû9 º¾§:~ç{Ç8³ »`.´ z€›vÁW»JŸuþ~.¼n@•3¸"Sno5rÿ­„÷8(:¬gø@z„ÀÆßø«ó·£¿{ÿ⯻x×ù®çz…—º©{ùc¯·Ë¼Ž×|ÆÃØMî½'<›ã¼ÿN:^/w⪳«{®UC}ÔKýÔS}Õ[½•Ñ6ƒw@?gnœ‹µÑ“»—[øèöÊ#ú­›=¿{R <Ú½hS³¦ob3Ç8³xÏ?w¿—øŒçp°snÿ±SºÏ‡{Þç<öúô¿›2w9/9ÀÃ6Σ2«ýà6 kúÕc~ækþæs~çÛsmß¶?s5ãÒF›'¹à:}Ÿ{ùpH{óõ«ór—~Ë»;«þ«vwÙ<Ý>ÿ&Ps|‹t¨ë/^8yKœy}½öÏñÈ뼬7ó…ã@;ƒuóëýß–<ñGº¸´ñxu<$þ›¾R·³ç³û»ÿûÃüßY>‡À§SnÄußx™T6ãÀ”Hc‚³I*¥%ép(˜b¥+c9™hI ë•Ä-§¡Y)"}™žÕå3x¨Ÿ{~3•0R°a£R"ÿJˆ;,Ñx<j`œJ#¨Óã@0”¢Ø í$‘‹"qó‹d˜Ä8:šzMµðD´2¨°ú#5˜ðÒLk %jë@NV^fnv~†Ž–ž¦®¶¾ÆÎÖÞæîöþ'/7?GOW_gow‡×þÈ0©·¿7é#:°”SãçÂLþ”´jt°Ê.:–ÐpÆhAš¶ˆ]85eÄœ)NÊ,øDÉØ¾PýâL´BË(+ üé s²LD% •` Ó K’-ýIÈ S¦†EÿUȈ*dƒ»vêÛ0LÔH+ø¬^ÅšUëV®]½~VìX²eÍžE›VíZ¶mݾ…Wî\ºuíÞÅ›ÿWïÞ<=Ÿ4«fP®ÝPÐठp•0@a”£4µ0@xWà;4óIÂÀo‘Cžû~¼Ä'àà &Çø…™‘€Ÿ 0°€AcÛ xV¦‰ò•€¦Ì©§AíÒ¹a[¹Pà—Vˆa²ý¯¨Á ¨K0HPÉâ®Ç5 ¬j"b)ôú¤nšÌxÈ^úõíßÇŸ_ÿ~þýýÿ0@$0«ç :0AH „0B%¤p /Ä0C +,°C?1DG$±DODÄ WdQ¨ÓZ„1Fg¤±ÆSÄ1Gwä±G2Hm$rAð¨H%—d²I'%2J)ÿ§¤²J+¯Ä2˼žä²Ë 1H L1Ç3 ¯ó²E2×Sˆ4ßÔCK9礳N;ïÄ3ÏúàäÓI׌: Ï"2ê5AùÔ3QEe´QGÍñPIküÓ @'Q¼B =Ó!5TQG%µTS¹ò4UUWeµU’N…5VYg¥µV]ŵS]såµW m6Xa‡%¶XµâA6Ye—e¶ÙhŒ…6Zi§¥¶ÚüœÅ6[m·åk¿7\qÇ%·[sÏE7ÝxÈe·]wß…÷Qu祷^{½7_}÷å·ßï8`éõ·`ƒF8á»Èi ‡¾@ 0«fÓÅáÞÑÀáÿ.¶‰ >f&1$PÚS­4 €¼2w}KFá¹Sjs’’ RŠÙP~>Í¢WÅjVµ:=¼3ºÿIÛTKzCfì­ #}¥Õª¹ ñ“ÐØf>ÅzOœî©ë$kRù×i1…õüëWÕéB}^ózBËáݘJ¢>Tò¤)^™Y½–Ž[Ålf5»YT¥áRâ?W:WJæÕ©wEë=ø°ï•-ƒíÛ_jƒ:زf¯¶M,D“1оÒS§‘ÜKWÈK¹Jƒ‰Tin+«ÉäÑ6‹ð¨d—º&V5eœÅnvµKÑMd0VD-L{GÓV±ª MH«é(²6á5§skzÛÒ.c±»éMY XÞ%@Š@Ù/‹Üúê6…Ôcm6(«^銷º–Eæv%ÐÑžV÷¬À})öTj aæ7¾6Þ3|Ú/×¼Ül©oïæ×QÊ2ÀÒ4ìûòê×û:/Kå¨PmÛàdPÖ˜0^c’•¼d&7ÙÉOnV(îaЩžT¿Æ%פºÑk ¾J…«u<Ýü*7²Æ¬«üd<_h$PÀÝÑR¬WÜÙÅ*Æ'4šúbÙŽtΆr =hBÚÐJŽ“»A]ú¦´×ä€S4 sùxU}a¤ñ<Ó ¶Äê43UÏzÍñâXË"¢±åâ6ƒÒýg¨{ìãò&uful[B?¹ÐGN•t‡v°…=lbûbhÊŠ5dÏKjX˜r´«1ÿ£é>¾’—s´^ݧÚ?ב!™#õ `SQÖUê&ÁæIÂwŸÐ†ÀGü¼ÆR‘@­&,mÜâ37t#…0™‹ß!s`ßÜV­¯Åll†7Üá‡xÄ+F9­d4ƒó´À‘0o1ÖP­­½¢ß,Ü+¢öâ¾$s©szDÎY‘i#öö¬÷yò·Ò’·#Í ˆ³|r.*q‰jý³Yø€,oðÎTU`­ Žk'&XÒLÛa·Ñ WÝêWWØÆ4â^z…½^mT}™¼˜xÑË8{Å'ZºÆö£Ðë:ÿ<ð¶Z‰k—ßö¼Ó_T‡”)Ä€ô^;®–íó3Mt¾‡ç É0¸;(˸Ëô€ §ûu±¾yÎwž]´²ÄÝ¡ÑvxÞô§G½±ÈSÑž´ãH}ìe?{º9PyëÍAzvÐÞ÷¿>žt/qÞ¯#øÇG~ò£4üˆ_ʇ~ô¥_"æWÓÇ~öµïëwŸÛøÅoï—ßüçGúÕ¿þÃ!ù,ŽŒ _ Ž$œhª–쨾iÛ´ÌÒ°]â¯nò1ŸQÂá1,™ÉgS]N­ÕãU›%n½]`©Qp8 ?z¤Áëö[LbŸÜ.lü>ç}éFz>Tjƒ‚:„‡†‰K!!ù ,Ñ»ÿ`'Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ p¨,€rÉl:ŸÐ¨tJ]jHuË­R&ì¢K.#…gÛ=§¬¸¿”ïøª#Žuäÿ€Qk[gvˆd DŽ‘’“”•–—˜™š›œ+Œ‰¢£WY¤ˆ b¨ynjl\°N"qcTuR ®ˆ r¯X Àeƒ[¡ÊÊ‹ÔÕÖרÙÚÛÜÝÞ0FHÐãUäfÏê] ±„\ïñQìR ¿QhíÊ„1ˆº€R˜ @a"iß"JœH±¢Å‹3Öø”Ï¡ÇS0™G¡(|ÿýóCR,@Îö‰k©Ä$P¹h*b¤±§ÏŸ@ƒ J”7E±ÓO'›©:s`ÍÙ<@ШjÈ™N·@LJ¶¬Ù³hÓª-‹(œ À*”=aXlRáŸv™0eÁm: LØðÀ€„ÅL²Ê9U àº{™ô C Ê2‹&O&Àö‹ÈºNâÎe€à¹y4p"ú _6xس¿\ä>‡Ã’ßJ¸ÃÔ„†Ü÷Út…žvÏ­üòÌ7OÑRC{¹£Õ¶†4qÃé~óýÏ!ßî®ÉÇ/áXÙЛw¼—Ê€ ¸H/Á—L¨å ÿtr†íWèëßð†Ó>i‡lドwDB¸%\*£ð ÿž@9<¤§w\¹ U&P‚&5 P+Ÿ `#!.YQ"ÁœÇºð…”HŸµ 2Å`‘FNW“éY €´þÄw"®J€Øs»c®—½.aÔ T­èRC™àÐ?bÀW‰€$Áü]®kBû ÞŠv5ÿ± M‹µ;â1èÁìÝv>;ØÅ´¸?€‚Ô³¢½)„P Âh—ä`Ô¤íEÊ6™‘ÃF:ò‘” g€ Œ`ëÓ {°f,6«{J _G©Æ-6¡‚A„ÜâÈP@0Øìb•dbjœ#‡UŠuæó"ËÆÏѱpÂë*yÄ!æáDC’G#Ç6.ó&¡Ð]´§£=¤#ÔÏ+yG^V(’à §8Ç)‘q/B¤Û»4æ2'eD¥!ˆÄ\F'€ìÜëÙ1têIWøãb3éøEhégü¤àH h@;}puxØXý…AÅ\™ä› C#Z¼º0ÿž² óðÇC:P;‰,˜k‚™>rºô¥0UžIé™ÄÒÝ¥s üf9OîÌm›³g.e¤Ï~>Qrf,eÂlšÐ[b.B,¨7èK?2âdH§RŸú‡Ç%_é<¿³DÍ5oN\¨ΰ|v›HÒYÏüé´~-¦xÍ«^%¹9©dW‹•<á7WžìLˆŸO£—ª„jÔ«³% ¨&5˜µzScS#‹¦«˜Ò%ž5ª´…–=³E‰<Ó¶ÚÍ2A.›ë[Ô„6uö¢<ÅéN!0lOµ×ãhàÚ.ÒBÑbëk…ìõ¹Ð®O zJ…‹Aÿ6µ`î£ › •êUwZ—ŽˆpŠM/M?+Ô…´I’ÝBNsÕ‡3m`+ès dÀ¶Éùâ¤0˧ õ³.Jƒ@›™:@ÑÊpR¾Ö ¹ŒY†í3·• lƒ¡.{0ëYWÚHhª©#µÅRPX­XˆkPîðê¼È-˜F“È€èl&ÒͱŽw¼›õqØÍd8° BV©kKçýÖv&ƒôö´là˜D4–Îx®tR|«ÀÐ̈Aeò_ò1™ xõaºÚ”L#颯Žjl)S1FNX21&PLÌ–$G+Wñ0×à.1qÚòØ f¿bkÑ~jÿYÉæl«35›¹4NJ½,‡ ›#Š8汨GMê–Ô ~Ñ¥òñ€w<‡Ž !j„˜Ç\À{‹U¯„¢˜ßfÍøðmuQià%\à±iàfìÙ 8ç4 ×ôÚ¬?ö*†–cÊjŠ(¸&_žpÁú<&B´Çpt.[!™‘Þ«j„°öE)Œ‡4þº›$@F B—5vØ´*Ô™4¬ÔO¸Â}@&¹IîÛa‰¸ÄŸÛ‰[Ü[QÀÂ7ÎñŽóá¿÷ÅGîÄ@œä(·ÇWÎò–7¯0IM¹C0Þ¥Í[æ8'‡lsÎszTÇå@ºÐõ ûõÜ# "ƒÿÄxô¦'âD'wzÓ1†¡[ýêXÏú –´mÖWê`OÄvT­õ²›ýìhO»Ú×Îö¶»ýíp»ÜçN÷ºÛýîxÏ»Þ÷Î÷¾ûýàOøÂþðˆO¼âÏøÆ;þñ¼ä'OùÊ[þò˜Ï¼æ7ÏùÎ{þó ½èGOúÒ›þô¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸Ï½îwÏûÞûþ÷À¾ð‡OüâÿøÈO¾ò—Ïüæ;ÿùоô§Oýê[ÿúØÏ¾ö·Ïýî{ÿûà¿øÇOþò›ÿüèO¿ú×Ïþö»ÿýð¿üçOÿúÛÿþøÏ¿þ÷Ïÿþûÿÿ€8€ÿX€x€˜€ ¸€ Ø€ø€8Xx˜¸Øø ‚"8‚$X‚&x‚(˜‚*¸‚,Ø‚.ø‚0ƒ28ƒ4Xƒ6xƒ8˜ƒ:¸ƒ<؃>øƒ@„B8„DX„Fx„H˜„J¸„LØ„Nø„P…R8…TX…Vx…X˜…Z¸…\Ø…^ø…`†b8†dX†fx†h˜†j¸†l؆nø†p‡r8‡tX‡vx‡x˜‡z¸‡|؇~ø‡€ˆ‚8ˆ„Xˆ†xˆˆ˜ˆŠ¸ˆŒØˆŽøˆ‰’8‰”X‰–x‰˜˜‰š¸‰œØ‰žø‰ Š¢8ФXЦxЍ˜Šª¸Š¬ØŠÿ®øŠ°‹²8‹´X‹¶x‹¸˜‹º¸‹¼Ø‹¾ø‹ÀŒÂ8ŒÄXŒÆxŒÈ˜ŒÊ¸ŒÌØŒÎøŒÐÒ8ÔXÖxØ˜Ú¸ÜØÞøàŽâ8ŽäXŽæxŽè˜Žê¸ŽìØŽîøŽðò8ôXöxø˜ú¸üØþø9Yy™ ¹ Ùù‘9‘Y‘y‘™‘¹‘Ù‘ù‘ ’"9’$Y’&y’(™’*¹’,Ù’.ù’0“29“4Y“6y“8™“:¹“<Ù“>ù“@”B9”DY”Fy”H™”J¹”LÙ”Nù”P•R9•TY•Vy•ÿX™•Z¹•\Ù•^ù•`–b9–dY–fy–h™–j¹–lÙ–nù–p—r9—tY—vy—x™—z¹—|Ù—~ù—€˜‚9˜„Y˜†y˜ˆ™˜Š¹˜ŒÙ˜Žù˜™’9™”Y™–y™˜™™š¹™œÙ™žù™ š¢9š¤Yš¦yš¨™šª¹š¬Ùš®ùš°›²9›´Y›¶y›¸™›º¹›¼Ù›¾ù›ÀœÂ9œÄYœÆyœÈ™œÊ¹œÌÙœÎùœÐÒ9ÔYÖyؙڹÜÙÞùàžâ9žäYžæyžè™žê¹žìÙžîùžðŸò9ŸôYŸöyŸø™Ÿú¹ŸüÙŸþùŸ ÿ: Z z š  º  Ú ú ¡:¡Z¡z¡š¡º¡Ú¡ú¡ ¢":¢$Z¢&z¢(š¢*º¢,Ú¢.ú¢0£2:£4Z£6z£8š£:º£<Ú£>ú£@¤B:¤DZ¤Fz¤Hš¤Jº¤LÚ¤Nú¤P¥R:¥TZ¥Vz¥Xš¥Zº¥\Ú¥^ú¥`¦b:¦dZ¦fz¦hš¦jº¦lÚ¦nú¦p§r:§tZ§vz§xš§zº§|Ú§~ú§€¨‚:¨„Z¨†z¨ˆš¨Šº¨ŒÚ¨Žú¨©’:©”Z©–z©˜š©šº©œÚ©žú© ª¢:ª¤Zª¦zª¨šªªºªÿ¬Úª®úª°«²:«´Z«¶z«¸š«ºº«¼Ú«¾ú«À¬Â:¬ÄZ¬Æz¬Èš¬Êº¬ÌÚ¬Îú¬Ð­Ò:­ÔZ­Öz­Øš­Úº­ÜÚ­©v¬TlÐ'àZ®æz®èš®êº®ìÚ®îú®ð¯òZ}Ôm{6¯øš¯úº¯üÚ¯þú¯°°ó¥Jü6°›° »° Û°û°±$U»$±{±›±»±Û±kq;Fá­)€bжaj'Àñƒ7tsIÂ#ò–+Ù“{dÅñ±:»³<Û³>û³@«³Q¶ 'ÀiÅñ:MF#K'bÐYÂHoRi€EBÿ%wVC A­"Ñ0ä8KÄ/i‚ à#DÆ%vÔ ÊÕ–ÝõZK}ÄRí°­¡†…aæ„T„ò²©Ä7³‚Ôd$‚Ogt«$Û #§–è2L…RS`M_5¹ÙvºN¥¸ÔÛ5Gƒ Ú›ºìÛ š;œ;±´ô[¿ö{¿ø›¿úqTÁ&`aÿOpI°Õ·H²¾̽Àò0¸ 4-ý2¿Ðà­Ÿ&ºõUøµ3´òÀÛ˼Ü[bãÃo `‡ ·bô¹ãЭ5«·_f”´,̺[$Í+å4>}¢TËÁ»¿<ÜÃ>üÃ@Ä?Ü#`IŒKk9bÛÅÈpMpÀ|=Ü43[ 5[7ž[±B¼Å\ÜÅ^üÅ`<¯‡s^Æf|ÆhœÆj¼ÆçzA2ç½lÇr<Çt\ÇvLR™‘t¬p|Ç~üǀȂ ÄIG K—s}<ÈŠ¼ÈŒÜȎ̰}ÑuÖƒÈûÈ–|ɘœÉš¼ÉœÜÉžüɠʢ<ʤ\ʦ|ʨœÊÿª¼Ê¬ÜÊ®üʰ˲<Ë´\˶|˸œËº¼Ë¼Ü˾üËÀÌÂ<ÌÄ\ÌÆ|ÌȜ̃|j‰€eâKqÆrŸ+¶¦ÌÖ|ÍØÜÅXAXËtÆP•#qŸ‹E ÀÙœÎê¼ÎõË̤²pÁ êÄT—¸òËÎøœÏú̱Ûì ðŒîLÎùÓÏû\Ð}ÐТðÏw Ða‘¸Ð=Ñ v@ b d2ªq²¢u1µtNÞvRô\7â†,°lAqþb»`v´=Ó4]Ó(·&%/\"Dhud$P9 H_Bp`C>Â$Ê1<ĹU V1=4+Ì É‚µÿÁ$`­ñb+ûN™ó+÷q)F¡»ÞlPGÒ˜»·¿[Á†oÞÂ{d¼mÓr=×t æÕ$¢z‹d£²iìU!ýVÖ“ÛDKÃ(Y‰ôn_ÓYpÍ$KF±ÑkÖÑË ÿ¤$hµ¶d`Q²ô·fC_M½ÐÃÓ)•£qNc=U ]U¥’`èk<÷ålڞÜqk‰´lªv¾¨f'jrF=" ÒBdO*}T.Ë./ÝÛTþæpçøÚeM-Þr~çxžçþ <àZzþç€èñjã¼.舞èŠîtõ‘mjmç‹é’>é±m.~Néš¾éé!ù,œŒ • Ždœhš–,©¾h+ðÜÒ¯Íâªnò±%@ØO¬añw%€Ò9ŽHÀáäP^&§Ë;RH^ñ¸9ÒXR « %)ËcD§žk<"`zSw}jSsdBDFl$ @>.š¥†ˆ¨©8«¬4®‘¨²¥´>¶:¸6º3§µ¾·À¹X!!ù ),Ž,è]ÿ@€pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßp¤iN¯Ûïø¼~Ï¿Çÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘N}”•–—s’š›œžŸ ¡¢£¤¥¦§l˜ª«ª¨®¯°±²³´µ¶·¸¹“¬¼½yºÀÁÂÃÄÅÆÇÈÉ‹¾ÌÍÊÏÐÑÒpZÕׂÓQÀ aƒÝà„Íò¼)õö÷øùúûüýþÿ H° Áƒ*\Ȱ¡Ã‡.8×-?/Õ@ mÕ$èH¥A M²a³vÆAL¸yÕ­f7 $͈#7eƒ…ÿj/HÙPñÈ„ZžK·®Ý;x‚èŒÀp&€•¸ g„ y(ÀÔ@áDX ßÈšó°­Û·pãÊK·®Ý»ö@°Y”Ì|»Y%“o+;›8€2ËÆgÔ5VÁÀ4ßLƒ`Ü” K,ºH7 J 0e·í)T@tŒ`¥ôm6«`íx-ÁöœÝ²ÙâN¼¸ñãÈ“+ß§WdsMÇì p ÁØÃ:Ê@¨†Îѧ$>%×é´Àk=3>ÜR!Ö»Ÿ`„‚àÔ«Jx(v (á› lE ^ÚÖw&Œ°àZs,8›ƒz ·Ü…f¨á†ÞÅÿ[_bP¤‚²ØG¡CE{¥”wËyD€,>ᢠ¸6„ï™aŽŠ_€ˆ;ûñ÷Ç» ˜Z(è‘wv8€mIJ%`Uv¨å–\vé%—ù…L¨1ဌÎ}C„K©NiB&ß9^FÄG!MPæG%EÄ_'*Ö#|÷ ±€5 “m¥YM{:j“PE$0NgÕA dCTÀ¥Eäøh£€#Uúh¡B°i“šG¸)<­Ù&Pp¶#Ÿƒê…@žsÀ£Gȹ&whêÙhRq£¡Ë~eê¢9¡8ž³FÚ©¢"ý×ëV¡Š–­Äʪ¬q®ÓÿšÉmšõ½ãÓ©çÚ:+9€J$ë¾9¢´!áddH^ɇ”zdÁT Òe sõ›6xå—g¬ñÆ+$“ÂIÚì–δšêܤ¥„»ÙŽ3Á¢§Ûé³2Ö Eβ-x)û¬× ˆ|@ÑDƒ nÑbP²M"ëøÒMoeÑW ù¨ŸðQMÖ ¬ì5fÅÖŒ.›¸³»¦«³¤|q-éˆ&ÂÊ£MGG EgrWqh®ZkÖ÷N!Ajͽt£,«Ý÷MmPÍqA3‘¯òjx“Ñüt7vÚkØÀ[|U’'G€ ˜ð00©^jXyÿºífu¬ûî¼÷ÞåÇJp²xßÊÖ—‰r—ÜÝʆG3ÙCÜ8]»‘f¯šØ€®oö\ ´çpà+«¼ÖªD¾F” SHh¥4¯ï')º´JN¨ÞÑÜ3ôDp~ò óŽÿØ&´ô (â‹€«æ$£ïÁŒk&úhÚöà]mD¨[ŒÀˆ*RÜš€ä8À;-j,hR ÌP&e1VÊ»FóÆ•®˜‘pPÓW'9ë…>­ê tœg8¶m‚/ ¢þHÓ)I7[RÌrÜÄFX¿1 Âæ«ßÄÎB¾ £ÇHF¸X "kÔ|–09‰j0%#‰±òG’:õÿ¯WäURˆÄš(PÖ È;š/ *Q•Ÿ†D}Lx£™Š÷,$Èd{Í¿XÇGâO [ëã&³sGí e¦ Ï¡øÉ&(ï_Q ŠÉ„µ¶$`PsƒT³=™i:jlà)Û6Çt™ò+ âÿòx¿ÐyïŽD¬¥2ËWF2ñ NäƒPZ‡Ô4Éu ³ØéF(NQèOß4A×ÉÎvº³gŒUË…jô-^EòdGJ&3½YS@µ¬$!%§jÒ m4B!WYÍoÕ ‰´U½Ø4ÑVF4 djhœ™?5º‹|÷ãß@åÃOC¾áQPÚ4o6K`Ò‰:ÿDS÷¢@QTvª*õš0—°ÑR¦TGÉ•¢€dS‰ó…&Íß!𮸠ÉsH˜ ºøÈRûˆsã!R¯Y…lv%Š«Ýªˆ¥+ AœRšd§Îwºõ­på]˜–¸’{6HÔ¼jCßö¼Ž²l^{Ÿ‰Š×„„Ážy}éV{¾fYJ4 âÛàÇž¡ÜÂ[Ù¢Åo”¥­q¯|绡x~!E¹­åo‡©Bæ6w“Μપ5À)üq¡ø“jhSâØeEv“¦µVüÊQÍ1ÀÜýiLv»ÒÄŽ––¶åvG\´\-‚<:¦AªI;f’† NêÄÑ—ÒrÂJ°)] Í gØZ޲_ÉeaÍóÃ¥ýïQï7à?éȹ~îᎼªÝvweïm´L‡Il¬áT/î®è›,Ñ÷ÌhN³]2ÉY.ÌO Þomæ_ÿv8Æ1¡WfÓhýíp³”óÉ Yë·©9®Z'YºÙ  töpâ¼*פ¿M  lWe¿ŽÏ‚æÞ,ÿ5ØXžx&I¶Ið\£à™¿ŒE’¨[‚£O&r§¯ûR*cúÊYðj7Å »)ÍN¼¤X $Öñ¶NÍÐŽ¶´òÜ6o¡¤¶th´f=Ù¾J×ÊF9GÕÜ·Œ†z”Fxh£UUèv¯û£² * ßëGÓ¯‚æöI5™ImȻӤÑQ"ÛX3áÉó»0ñ®!£`âOT2†–|† ekÙU‘{UrÀm&KSk5ÛÇ|õt Eå Âö—¯¨„µ v +p‡ˆÁwÚ8ϹÎëQUéüñzÖ÷OuÌâ`ɦÅ]#ÐVqƒÓ»‘P‡ðÓc{q@òûÍ·än!ÿôI‡82ü¶`œG.å\ËT¶I xlwJÓ™ýê:²­’ÿ­Ç%/a¹Ÿ­vžæºç€—Ô”rl~÷‰&P³UÞr0[1B +/ä˲óÊ[>ÍN¦«ŠÖAâU8—Gä¤×PÚ8“ƒ”¥¿)Í„ 6êPxž'jú©?øö”†$éaŠH½Éd±Nß_gC?K¡ëŠßê ©O £>¥»–Tú_Eêw G÷d{&+w^‘”÷Ïí¯¹y눃®—Éÿ>žvZ÷É<¶¸» ßÄÃK1” k¤D%̤³LeÖ*7wyX€ìÔ)@$Uajid¿g°Ø1ÿ„<ºVgÕ,¾*P4TÇR¸UYÔ!@¬u~ã|AÄôd{†æn,6a&2Òb‚†Ÿt7aƒ)qB&Ó“)d/€رO£—?6Ô|&4‚t²ìwtЃ)Ó9ð§~È3.?dbô×xYöD»Q1} y& ! ò ¶Óë5Eh€ˆ˜ˆ»>QaÖBWu*|¡(“2&g|ž¤~™g6)x6àF’XB%…ŸoÐÕ6 ƒ4߃{.˜ŠX£¬¸BGs5–ÑG•Á,ôwv5ÿƒÑ^6JS‰P8gG@F¦€R9¦¸ƒŠó5h—ƒ4ÆzL4ÿ2xXèjе9“¦bi Ögw4Võ\œÈh•:¤¨/qÈQŸ4_w‡FPlîâl˜ _6ˆÐ3 R‡¨ˆY]ˆ|ar‚”²é“B…‰+ôuï‚*TmÏ÷k5-©ÒOTBÖ6/)#sµ5QçŠê(803*èD/@viˆŽGõ(9Q¹=xWŽÈ¸9A07at(kì¢,L¿B-Õ‰QUŒwr”Aq‡?Þ¸-'ôaàr* Jƒ‰’Ñ/â†?I7§*÷2P}Äkÿ$g9GIIö(—ëŇ}Hl "Ìó^H‚—yiù—€˜Óögo U˜Œð‰ˆù—°Mó ‚™’9™ït(Ú²˜³`) ‰™‰@tœY—PÙ ”Yš¦yšc™ŸI €r™« ZÙ)œöša` SÁV£Ù ¨¹›¼Ù›¢š´é á²™ÁùÚˆ2äXœ\›ÌɾùœÐsA˜ÊY CYa‰^МމÜžâ9žäYžæ lß™ž,wžìÙžîùžðŸŸ žê)ŸöyŸø™Ÿú¹ŸCŸß) : Z z š  º  Ú ú ¡ÿ:¡Z¡z¡š¡º¡Ú¡ú¡ ¢":¢$Z¢&z¢(š¢x*Ú¢.ú¢0£u±Ú©”FKp7*£<Ú£>ú£?šI“¢3@z¤Hš¤JʡͱÏ1n³¤R:¥TZ¥*ö`_×d¥\Ú¥^ú¥‚9WÖ†™`Z¦fz¦h:FZ[6 Ô– i§r:§tz!bÚŽcº¥uº§|Ú§~ºkª92HZ¨†z¨‡z§"fG¨ˆú¨©e¨«)©–z©˜z¤ãdš©žú© J¢lö™¡Zª¦zªŠ‘¤€‚€ª®úª°Ê „' ¬š±z«¸š«¾™yÿƒZMiÓ¨Ið¦pª«ÄZ¬ÆZy¨€Ñ€M ¬¸p¬Ð­Ò*_©YÏצQ:­Úº­ÜÚ;ÕZ›É¬wØ­äZ®æj¢Fz®êº®ìº¤éÚ®ð¯òš¢ï:¯öz¯øŠ¡õš¯üÚ¯þz ûú¯;°[°{°›° »° Û°û°±;±[±{±›±»±Û±û̳‚ü9²$[²&{²(»Ð,ëq)û²0³2;³ä ,{³ŽG°²-Ÿû³@ ².½ÚÚ˜að8+:Û6‹³9ËS7kjðX»ƒ4ë¦AÛµ÷*¤5Q´]€RI+µÿ7 Z‹l[µTÛ³;ë¶[Ë¢^[·ðÚ¤OŠ­{Öз.‹`¶g+r뀅;·E`·Š«®=3<ýpŠÙJ˲ð“K¹b ‡K°¹ˆ‹¥‹ºêJ©[¹\¸p«¹,‹¶Bà,Cµ¬«…këºà ÀYª;µGf;"Q+¸»à»,[—û·>+ºÌK®¤+®Caº[€º+ÁK6¶K¼ »D`»fûå¹B`¼8 ¼Âûº_q³b»³;²Íû¾Ûª¨h¥ŽV8Œ*Ô +ÉÛºèË¿·Û½À´l+›»»O;¾lë½#R»Þ‹»l ¾ÿþ«½p³L²ð{ÁÑú¼ô{pâùÛ)êÁ±»ºDðô”½¼!¾¢Â ·È+·û[²<ÃÅJº0OˆÁ—CtÀYðÁ鋹ÛÛ¿Aü¿“ƒµ!(¼Â.lI,,¾ ÄÜk²4<Ÿ*¿g Uw>¬!<ÄÚÅã{¾íËÅKœ¸õÐÄe<ÂÃKƼkÁTüƯJºap7`Ã[ÑÅI<ij{¹‚;ƬgœÆ?ÜÆ“SµvÌŸpœÈ§:ªjÀu^°Å1œÇ`ì½&Œ`<È<̵)€Æ„\êµÚ{ŸŠ<ʨªªiÀ_`Ç䋽B̾C0¸jìÇ*¬ÉœìqƼ™ìžÿ¤¼Ë :«fb`àû;»®ÌƳKÁDËCðÄ€c´,Èw ÍÑ|³"°Ÿ¼|Í—Ê«JpÃŒÂX|Yi‚¥¾–‹³ŒË@¾ÇLÂaÌÎÉìÎ;ºÉм]ŒÞ»Æú‰Íúü¨ÉZ~nëð¸ÁÀ¯„„=ùÔk¶íËÇR;»Á k‹³c<ÄœÀjR»m»º ¬FýÀFÀÇ"»¼û\Ò~ú­L¹T@ŒaˆEÙ­ÌZHÀg Æ@ÓÔ\ÌJ,µVA¾Â[ÁílÎá ÏøiÒFͧ(­‰*ýÓR–Ùo˲Lë´îb³"à´—|µ|ÕpɼpëÓ‚ Ôÿ,ÔF@Ód-ÊG½Ö]û ÌÖp×¼ù ²+×v}×’É ¬¾xÝ×~­ˆœðÐ=Ø„¬›@Íiý¹Š½ØŒÝØŽýØÙ’=Ù”]Ù–}Ù˜Ùš½ÙœÝÙžýÙ Ú¢=Ú¤]Ú¦}Ú¨Úª½Ú¬ÝÚ®ýÚ°Û²=Û´]Û¶}Û¸Ûº½Û¼ÝÛ¾ý …Ü–5jµúÛ'+ÜÊs`»ÁÈŸËÝ̽N bûÜù,ÝÚ m ›rŒÝö¹Ýâ-mV ÞÉ=Þè_¬·´ÉÈÞðýVë}Ýf¬Ïzæ°ñ½ßì4ßù öm úü]àîdÃ8, øýßb`àÿ^Få Âà^áaôÝàÞT0áÿmá®;Œ< AÎàþá(Ž1¦lâEâ.¾%¾ü Áâ®ðâ6Îá+þÝœ3NãN cpãB¾ýÌ} Ðyêã•:äLnI툲' ®äÐäV>OŽäœ ÐTîWþåsÝåædN bÎežæzæ‹ ænlŽo>ç&çv~çxžçz¾ç|Þç~þç€è‚>è„^è†~舞芾èŒÞèŽþèé’>é”^é–~阞难éœ ê–Ï \8„¥t~ê¼C£DÛ—S˜ŸŽ ‹ö–‡Ù?±ˆoÿ]€êº¾1ÍÍÞoÐêoùêZ K¢Þ¦?⻞ì¼NÝyKßiËÀnžÄþΖ¹®ìÚî%Ëê×N:ÓŽÕ>¥¾áÛžîáø;ÒÕ·Ákµ‹’Ðü2”5¢`Nù6°–Y9"ûâ•ÔC–pº§…69ï8‚,D™âY˼ïhò”Z7K%¾³H‡+;Xÿ”Q?ÒǾÍÜÑï†{Íçîè®î,¨ô ½%‘2 ¼ŸËˆ´ …7ÝWmAã®9™76øP`p4ÉéϘ7pò,¯D@?|³®Ð_S–ˆIAŒ`@ã!ï.,rÿ½/³-ö ÁÅ̽ˆ'A6V(7Hä^z–y)ÐØÓ–ÒÂs,%­Ø6©¥ ;¼Ì€A=JJ(`æãôœä÷C£Ô/fŽŸ—{gL‚_Љ²õQ†”ÿ#ü"Uh†L7WèpI\€ö¬_þQKßžyËw?‡4AŽØXÃC$oÓa{W`qÆLNÀT¶¯q¹5îœÛ úþvÍÒñ€Ÿã›´ýÀQ66;å>UšÜúÞïjß* î7±Ñ¬rv·ÿs•F’BRT ¦€¯6ÿ™FPzùSÏ'Ç­üŸÀP, +ÆcQL=¡QéêPÿÌ+Xl‹„@a›Å„´›¿·Tùœ^·ßñyýžß÷ÿ !#%' 5èà4Á „<"6ß*.7/$>‡Š„ ®&Æ®HA55 T?ÏZ_•¼Œ„¯J7„&–™U/D•2~•dÉŒœ• ¦[sw={£… 5/¶‹RÁ—œþJŠã½”™³fÛžõׯã(8`Aƒ&T¸aC‡õXbåâmŸ¬UP‹ˆ¦NÉì3ׯJ8 ävh–o£8yÞÍc—¤åªUlÆ•³E%lF.†òr™ª[íÔ8´LOŸ˜ÿÂE&Õ/`l®RÐn–B;–lY³gѦU»–mÛ?5i.­˜Aƒ’K9¢t*R)š»Lá0iÆH­+Á`é4aËOr·<ŽÕóg‘ ×;­ 0Ï¿O; Š«¸jÆX'ÂCÓد8+º•=›vmÛ·qçÖ½›ÏÐ œãuÇ©*_Xži¹CA¹t…›[à@ã‰I—Ö—¤’Ê›‹0?9ùhrîsG>÷5о˜¶˜~#x¦Õ\_ï1›ÿÿ PÀuƒ.µà%/Õœ &µá0Ê<8äËFˆòÀ3‚¹Ä2ô ³ú‚ƒPÂåÙ©B .Dj$ôŒ@DöÿüH¹ÃªB£ û\˶ØìÑÇ RÈ!ƒ4é78 € nÁ7¾‚§Ôĸ1< ¤0:xX2ì¥õ0 Â½¯ªCJ£,¬¤ª§j¦<ÎÁ”àÃõŽ”K§­¦NvbœG¢Ñ˜š£Åà쪵}^k"mÔÑG!TRB€‚`» Èn²A…C$2 5Ô+ÁÒ@Œmt*Iš³|ã"+?ê2º ã,¥(â’È€¸(PR#ñÊÓ©§Øˆõ¸W…êä‰9@S(ádÖº ølçF t9Í:2¨¨ Ä ¾ê>CÁJpÒsÑMWÝuٵ휬¨@;…†Š¬¬<•—áÿ¸L©µÏ¼|#VÁÆ ¬³+9< UÈ­›´¥è«OTÚë¦mø 1˜%5¦2…ºÖ¼‰³Ž”àCˆ~=a’¸dtÉJ\¹2·ÝyîÙçŸ.äݬnÂzýyß8SaÀ‚$F f øwBM¨k‚38nUê hÚŠïf{ Д"©®Ú© N%Ss²Ve‚' ެ.-XÀì2¢‡Ú+üx n§5Àºær‡ÁG‚ œ\D.èË1Ï\óÍ9P™‘–kÅÐI']§ÎQO]õÕYoÝõB.+})Ze¯Ýtê^Ï]÷ÝyïÝwF ÀÉm)m‡ÿê¬@½â™O°–ß¡^ú驯>¡š H…:µ›Gædº_;Ü­/ßüóÑO_ý'²nðgÅs÷Ó‰ßþœ¢»_ÿýùïßÿÿ@€4à˜@. tà!A N‚´à1˜A nƒôàABŽ„%4á Q˜B®…-tá aCΆ5´á q˜Cî‡=ôáD!‘ˆE4⑘D%.‘‰Mtâ¡E)N‘ŠU´â›§Qa‘‹]ôâÁF1¦ð0#÷ƘF5®‘ma×h5$‚ÀŒ @͘GÉBnôc×HAb# ÿ§`ÇÊ‘tÇûŒñhÇzá1Ø#ÊxFW}€“…âáþ(ÂAŽ’”y˜™MêDCE‘¡sÅy8I¤}µìã-n™\†òˆ¦”`)Ì©hcÁ;Z WYÀV"í•#”e#wi§hò’šûæ5ƒižTÎ0™\f½šY/‡<Ó•ÓÔHÌIE†TSØt§0ÿ”ÅÄ-å+»B'ÒÔ+Á d½Â¶Ù¯ItШÀßœVP«‘éõ ÏÔÜöÈœŒ@Þ”ˆÖ”£$`jî)[Ó ÐYtÃÝ>–D àÅA Ë'´´0-9gFKšz(ËF:ÿCPIM*’B5£Mƒ:Ô"|@R¨]Ȫè·QxÃ;±º®x2‘k;üÆq"Æd ƒWý²ñìhÞðFšH¢½oÜs³gX)¾Æ¥ÌÐèÄ<§šh…<Ú›s&(i„©•´e$ šÚT²u$ªQŠ UmE5ªM7°Ë6 -T Z¼¬®vR8¦ÑºŠ¿O/iù;ibö·1àYiv>2O¿ª ã(©Ëà tÄZ¨K‰‚µ ‰ŠB0V‚îÚ!yy °T2Ò´ÁƒqÌ=i¼¼gX`K¯þ€fóÙɧ-A-A ÿ‚hj¨ø¦Ni Yü~€¾™µL ¬BPV ªrÑÏå0BÖNøQ[}ƒ·€Ø–iDh”œ.ò›Òê¤3®NJ,—ŒÑ–dÙÁŽÑò‰¥ÚÂREzº°ŒK$\¯Ì£ÅnÆÊ4”«ø£±5,_W²Jø€Žcºä+•Tކ9‹\¨,¯pÁì|"…Á<$ sÂêÍ0*Ï–°•$+•]áº|zÅ*GÛ@[Ðh=Ó½Åk¯Æ <_a±F‚±*Ã&ž y”,-{Ó%ã´œ AæûS+kvÓ­0ç{ÍH“HZõнñ2 À0¯úG®eE&4°Ñÿm¢ÖÈi¬ÁÐ{ÌO&†t+ßld7OÊåp3ñ»Ø°µ)º"bƒr7á¬ßÕË$1ŸßS‘LKºÉܦ,N‹lÔÈNÙ’¦H':;Íd›¦óÔí† «á= 17Ò­ÙsVªT„Â`޳‰Ø;²e¤‚Å«ð34ôe€•[ ’axN62¶l»sŽfí”k«Îѯ‘ Ümu‡<²á·EØíét£»Ü`Èò–¹lwg0µö‹÷Íý—â= .ÿ3o™ 5æfV¨¹ÑvU«‚§¡ ¸¤?È ‡ ôâõ™úp7a  "°˜´íën[Eá(QØx„*§RK™ÿœÛn;‚CiH·™¤;-Ø­G GRìMjÿ%a’éì€Ì“.‚Ñ ¡ÈlŠ’”L“’JäÞ/ÇÍý"­îÎ-þ4!ÀÚµünˆ‹üoÑ¢R8b‹6…^âg;lá"ä# à > '²ežšŽÇÖ„ñüKhByváòÊEZ‹iakæi·Àê]«â4A¼pKfªDef´¦"سJ¾DÎiɱ¶€’î«–´ ¿’ ¿Å±j)Áœ¬’žmÿrL‹%q,†b¶+¶ºG؆fØà+KpBXÎfÎ.°5cœ0%š aCÃFæE&+&bEáôŒê¼Î&àªG<$à «F6ÁäkÜ>®ŽÈ ޱüTÿ¯þ„ê8b¾q©>kþ<Ài(ÂP¨ÁÂb½Ñ!*±®.Qã‡ÙàAâ,JúèÂnÈ`ÅåE·­‰Ô…ò3ƒäõ ï=ïr>t@ùÀÕª“™Òrmê‚j¾IŸÚ“ì1ŠI0Èì)òiè^âŒ08ŠaÜÿÃßL&>N%¡ Åè‘cŽgŸêç×f CAŠ%ƒ¡ë‡jˆ>ô¸€¡DqÔ@Î*Êv$càå W! 5¥@màÑjf Ùˆ@©´JçÀºå>ñê5‚e^ñ3\1jdHÏæFƒ¼ ŽŽ(Šé¯K1BbD1*â–³îV"EÇ@®dLIx- —YÐÔ:æÎ*à…beêêÙVì 0L®0VB%˜Á£\ظ RïAS¤†¯”tú(fTêVƬ´TMuÞ’p|^ZØŒ`þ‚XB Ók½&Æe.¥/¡ž Ä7#ÀHj?­»¾ë®HsJ¾%é #7Ñÿàqšë¹äì6å8|Õ<²§´¨WuTÏ ,!µhëò¤>dUó.,mʤ¶sûh$6  ó„ža·ŒLµ^©U§ä@Î&„3ÚæA¹¼g›ÎŽL†MðDÊD<®„xrâ Xa ô¾$¹2Y9åT\lE –w ®t"ù0#a^i›>âMQ`+E§EA¾Î`M'¢NôÚÈ^mv>ñu¯æu_•S;+‡Uò“e aÑ‹NãÎ|áhóçêÞLÐüQ!¯I”µñö¤ãr¬®®R Ç*OMÒ2h-ü\dµmkÞª$O†-;ÃèfÝ6< Ôv¼”ÆôÿbÙX‚dv×´B$a“öoÕÄWL¯sÚžVNUA¦¶5¤TY•¼òÖYƒo>*'j©bò.r«‚m/5â<5ôU»(ŽãA=öÞ6uW3g;%a19‘‘ö&£’Ó§ÀÃo[â4!1d_­–ûîMé£^Ê–\Kq: ·VŽ´/˜¶j³Mé¸ ^&mnáZÖlÏC•àICÏN7”T7|©Rçl‡çX¥oŒ× Á Ä®F®Ât½H Vlß1`R‰÷b5.e÷6‡ózŸyw_§kf½ÆyǶ´w:8Ät_7Äw‚u²ðèûJ‘q±—]Âhÿww»ê8q—Ca¶S· ê1÷j£rÃv~Çj²³kø¶°7 ™v1¸V¤T(8ˆ]rrèúÔö?µh‹~?XK{¸€±jGx)Rx!Ù XŸäç4kBhŸd t ͶŠwÏm/†#„¸%fð~4PMî"×7&Šæ„Ý·‰9„àò˜FZøxµqu¢b墊÷‰·ÍÄ$¶ØO Ä‹Íä¸ÇrWWÀ`jÆà‚xŒÜx”ûÏA%SƱêl#\Uyƒ“bfVéP$ÞW‰9D<~ôºˆÏƒ{—`!ýyÁÅ}rræ—[}Á‹õ¡o ºüÕmìâ½oZCÏ2ΞÄ`؇6¶<åé‘hƒ,‹Ñ ~æi¾âÉ?³Ýw9Œ!›ãñŒ:ÜmëPð£õå¥/>Ý›–Ýst¼Çá{‹½ÚTÛÎ}2yå§–o•ƒ“Ù­µæ½þëåàO~08\7 ë•b’7WâƒgvŒ 9ÿÝzѹ×}}§A¡÷ÈÛ]20ê9n{M˜½çÀêSvÏ'wUy]A"À¾ñkž|kÇ|/t) (²Cí“÷¨5ž'XÃíxtw é3>œÇêÅÒLï^ì¹ôÒ.ð{Yó“Ù"Ðþšg¥*tyÒ?÷©Ý‚hö¥¾cKÝŒÛr\„¾+l¸íEÖ³zÖeXbF¸k]„Jüþ)@ÇÞYå1üêy~'bG![t?ü)ˆÈåi¶Ý]]é†rØŸØcâã}9ñ…_ß¡{VGB^)¢ZlÓÂ!€¸“KÀ¡|ŽÐfÒ0 +I²q}µHªl>£Óê5»í~Ããÿò9½n¿ãóú=¿ïÿ "&*.2ê…me€ ),pH&*|E)maeA*! ` ilE”J-½2QE%<²*œ¦`p‚­Ž¥šNàò‚IP%A yhG+4 é Œþ&E]´™~ò‚?mŠVïª y¥³6ÎÓ×Ûßãçëïó÷ûÿ (P AHød©c>á°3¦$@²eÝkž$hOX&„˜œôjƒ“*D)ä–Y˜Þ¥2ò©ÍÁ‰sùT…À–º T^›FT6v§*ZóÖé˜-ËQ½E€Å†/EâÌfÁæKÿÏ¢M«v-Û¶nßÂ+W­v¥¢ôúsï1_w“‚:õ÷¨F®L˜@–BâJ¡*-@KrÊɪ'«)3ïÆ«B@ŽºU•ƒ‰ú€ï´¿KËþE¥ô`w±×qmÌq¥×—+Î:ÙéÞDüÞÅp«‹7+[Î.}:õêÖ¯cÏ®QÝ¿xaee->"“d\æ€ÁãV`k6ó¾Ñ&XöÉv½B‘&I,½¾ç3¹DõÚðqÁ{ øÆ¢55ÛTÎTŸ–ø²@7ò‘³L€Ê9Åa”Ç€‘,wœ7``h @°Œ3ÒX£7☣Ž;¢¡×x?ÿä^Å$À£‘G"™¤’K2Ù¤“OÖã£SRYeO1B™¥–[rÙ¥—_‚f"RVY¦™{AP b²Ù¦›o§œs®Eæ™wâIàFÐÙ§Ÿ¨ ƒŠigž‡ÞÉRdˆ2Ú¨£B©¤“RZ©¥—b𩦛rÚ©§Ÿ‚ª¨£’Zª©§¢šªª«²Úª«¯Â«¬³ÒZ«­·âš«®»òÚ«¯¿¬°Ã[¬±Ç"›¬²Ë2Û¬³ÏB­´ÓR[­µ×b›­¶ÛrÛ­·ß‚®¸ã’[®¹ç¢›®ºë²Û®»ï¯¼óÒ[¯½÷⛯¾ûòÛ¯¿ÿÎ[_‘súÀf¯CÚ Éÿð°1…òhÂ@Z±Åƒùh‡¡m€x¨ÀJ¸UðÁ®N,‰ x“{9 ÌÊ·>¸@:šòxóܳÏGr5µ!ÀèÈ$³e2I³jp7’$Ó1ŒÉ$Õ˜¼´­13Ú4<âý¶Øcc4 º,ÑFSCÄ–|eMlÔœö¤+×§’·Þ{¯5¢Wm»6¢G# %Ü'ï:÷¦qçz·©|C¹äýƒb×±¦‹]]rÐ^iÀ&fdæ]Õ°øf …_õ·ÁE¡?-0‰æIv܃F„^A!ÙDe€Oç•çxÎKu7PÌ…-g1{ žÊƦ¥ÿðAè7Œ™}3»0â;·'Pòi½[ÄJñz/Þ¸ÿ]yÞm£éð×öP‹ÁÃÈ{½pžèTq= $²Fƒ²½ ”È °ÜgÏÇ|âûÑä:èÁΡr˜ØÔø‚œ¢eN0hèÐ.‚†ÜeãÈy_hÊš×0¡uýƒ]OìBšú>JÝ5eæ#JØ’‡‰å5ñ.ùËf&R=¨uf#iÃ]öç«tæ‚Alâç£5w@8•`ÆóM¬./,¤„ÍÞ˜FÞT¢âãÏy‘>"®¦`|_ ñ×Çùá (_UÔ™54ÏŒÄ+‰wÄÿAb2“˜”Hx(ÙÉŸô?ÑECœCm4…s´‚š.N„«Ëëøsšé±H‰à1ŠƒÚÁ郀lBó´†—(Æ•G‡Å/žcæ%"ðz‚„ùM{ŽI h¶Bš·Ù@6’Cj䓱T“ ¸už35;Ì`–x\Œ&[XôÀ7*Jä2|?·åS(@< ÓOÉbšœ(E÷&BY¦ícÜà1HIXxÑ0áq]iª@‚RR‡µ GÁƒ¹xbM„H)䌖•§eÔ{Æ1ì †9â†?/ _è‰ i¨¨?Nêê' ÿ=á’ ÿ>JUæè2"'c¥;Õ¹—wö„©©ÃIšÒ9=£mi¦ŠÂ5®>ãd ‰PXâG÷Sß^H9Io>«ð¬ O1!¸…´ $'FQª ëíBΘä’Ñ30Á‹Bª$|ª—Ã>Ö‘E5iU ZØ+ 4©”}jõ8{R04²,L-k¹ÐÐù5S¯µéI +˜Ud°Õ©m%žQÓê¨Æ'·g’+s›+¨‹æ‰”>䋿L›‘‹@f8¿¬aI+[Ú¬”­ßU­]gT¢º´a¨ÁëL(jª@ Ì&Ã[èÆ¯@mrµ̱¶Ö«ýÕªm7«Î«²ÿq8ëX£Jq·`‘ ™(%áÒ2÷òª‰µƒcÿ½“sKlb8ÑQ"Ý{ûJÚ†Ôï/Ûõî`Ï:!ú‚a–/ACÓLS‰˜ ¢¸ãmðŸx‡ºÑ-6î^$¼²OˆdM²mÎÛÛµ®6=¼@p‘©ÜßV aéKý—ÄÆ”Éá/ü²­ÃËì¬böÂìÈÇ\™J'Þ3Ÿ»Äî13.Ö¬]ÂAw—ЯÍqbÛ&¶°0«dÒ2¡C:vôò€d0 Ç{yÀ]S×2I׫…IÀ^ïûhL¸VÌ/‹­kì=7á$‡ý‰N j5#RÚÿs3Jé›éªì.(X~*«1óÑŸô9ÚÒöóŸKZ=¶·£4¦²5,jW,·Þžz¡Þ©´8‡îí,>½f%›5Ψš\àw?áÉ2r»ZWUÇ3ÖøNð½Ï±‹_ÿ°ë}5˜Ïí”m‚YžØÈè2A|E4¾9ÓÞ8Ç—„mkO¸ÀÜ…¬¢Rì!x¥Je´c9Ü›@²2±,Ê»C„¶{Âép8œÅ;èÀD­'ø!û]äDÃú¨–õoãí½ ˜5áxy¨»ƒíøt’Ë£Ãðºngˆt<ìb¿Ñ-þý¼z¸R açD2¬pÛ/MV­¢rHcÝwäÿšQSGâ´Ñ7ªNU¡NÅç£ôR—Áð¡{ÝèLÙò›áXk[ ]žXƒC&Ûš¥LÌïÄgR=‘r:鮆Z½¾³±Ã>öq)oÙßÙ¾QÒ•Œ)?? róÞ{¶°àŒ†±W€†*‹’‘ó"ÆìuÍSOøÂë|*”æŒâeyž§ySÐ!FÏÕ€}UÐ,fßÎr!›Îôs éIŸíúŒ ‘¶Gº Ï~•A¤ }R2„›+l†¾aÀï]DÑ ú‘ƨŸžÉ^J ZtÇs(QŠæT¦ÉdzFñ¢ÅX¤ÞÒQÒ}Ø…ùœÂ0‘Œ‘ÿꨔCÀÀ…HF÷1 z²•ý‘©éÎ醫©`q´ hü˜õÑa|™Öö¬Qý­uÅáýüÅM)PgDÔ¼X¡a ¡_Aà²aîCJÑbJuIÏÔDЙœC(ÄÄ‘5ñŽr” ‚5Áí\ˆ‚C±’ F ¢ÙäõÔ3ñ_ôðìÜE#š‡ñ<žÕ)”‹GÝ™w_éH”mKÐxÈG%@|¼Gó JXÁ!˜p؉Aa‰Y¼]‚ º¬Æa´¢£Øã@ä—à£>"ä¦DE1 ‹±_BBdDJäDRdEZäEbdFjäFrdGzäG‚dHŠäH’dIšäI¢dJªäJ²dKºäKÂdLÊäLÒdMÚäMâdNêäNòdOúäOeP åPeQ¥>QA*åR2eSRà\ýuZ›°š9åUbeVj¥!Í]` »ìÔVŠåX’eYŽaœ_|庄¥Yºå[Â%S^_ @—»´e\âe^êe7Öå¡d@™ñ÷Ü"ÝQVÿL5C²™ƒKÚ¡Aî|]$[ÈìHPìåfrfgJN_z’Ù™™(Z„™±>uà(Ъ ®ŸÊTsdQ zæmâfnZLŠ hC(ÉÝý…éµÍN¹â Lj‘RFˆÁIHœ¥KõlÐ%N²õ^:‰ÎBéfwzçw¾ h é–¡e£oµ‚X¸—“íô°ç²M¢Åëç~ògr o–øâxì•<®•«ùžüiÑ„(Œ.©I ƒ}ƪ “jè†r¨Žˆg™ü‡>ÄNå—ÝW0l•ym„l,¦é)ÿõHhby^æ±YvÝñp˜'vèŽòhJLJVÉŠ)D¨àjÒæ0òᲨË1i:mZ¨]EÙÒçXøè•bi–þCµù%C0€#:„ â]ÛMÃöÅÐþ´èW¼è/<)yѨzv^²Í”–ÒiÚé!ì©ìT3Ò]}úÛ ºh ª©:„ÛŒ~♎ZNÝé¢2j£ÚÁÇ‘ ÍñBÖTr›Í¡i“²ƒ“šT~jžòZ9ꨒj©¦@ÙÚaÊ‚ªÂÂÁ<ˆÔ•yS¦âL„nª:ä]:©¦ã©ž©k°j)íÁ‡B(yFb! ùM¡JÀC¯bêóe­ *Œâª2% ÿb‘)߆¬G‡ÀÄ …<k¹šë†Â¡]|²^ uÖ]YsQ#Æ™¦ª)#Á…Âl%£CgžkÀ ìw¦k«6 p"ýžŸJ)uR¢é b½Öª½²Nd"Ö˜WÊNL„Îë4bžÇÀ’lÉš¬vÚɪìʲ¬˜¤lËÂlÌÊl’¼ìÌÚìÍâlvIÎòlÏú¬[´éQ íÐmÑíÑ"mÒ*íÒ2mÓ:íÓBmÔJíÔRmÕZíÕbmÖjíÖrm×zíׂmØŠíØ’mÙšíÙ¢mÚªíÚ²mÛºíE ib-¤0Žƒ]\ª0Ñɹ(‘ëÏúm°jÌýøfÿ¼¤‰’Ržû©ØÝN¦«Ô ÌÙÛCÈùLjßþmå:jWÚÅZæËåcvâFDù@®«p*8êñZ€å²n£š ÚH%½p®¦Ôí³”îCDMëênÀ>À”ã§X'´ìÚxäîîoÀ©™ü%¬Gø¨éG™­ / à!5›ÄÒÈÄ¢d …ó˜HÐ=âÁšl±Oa@XçG%/DaöRÁîOUxï:k‡yÅðzª·‡iâÜÖßf¡y²™ˆ^&ïXfÜ¡fïÇeò²«xœŸÊ”ºêØIÀ)Bö!IgJQ‡˜&™˜NÂ"n,GbÕ-¼kÿl`¶&œ~eY¦YXò¤‰þÆyÝo§ ¦ŽÀâËüóôQ$‘ÏhÇVÅlÞf,C±Y¨ŽG•² Ï>=l*ÁpÏ_~ Õòq‰p ý%©µØ“a]DÍ.·a‚5¬þIkÛPÓtê ü¹oÆöXnÕ1lhÖE¸„taþ ÔP0«wÝ®äÚäŠWø HvX{°HDq%¥#,N×”3šAÕ†ÝÝ;@O¬zR{.ñ¶^l"®"iÏ‚f£¥ÂèFi!Q©W2˜rW~TN!ª„¤Úû=.ê3ÿøF~&Œ%+sYNq.¨* ÍW…Gõ©”VÿULÒïêXø“Ô}YÏÝuæê¸iÙ«–TLfuYü.$êü#!d9»q-ÿi1Óhòeè2ósVŠà‰tðo&(5”G‰>àæ§ç—îòØbº'É1ròdM‰"k;ÅóDCâ/¦0š)C…Þ óðl)ˆ…c8Û3=wôÃÚ¨$áêösM7eòNIÜÒ/#SÖóº¢!U¡-t”ÍVÐ*¤ðfŒðábÇN)}D-{Ý¦ÕÆ”’«îð¶zªt%õJCÞÞþâàö›@ ȼZ©M£5=riž" ót·u*S(n l\o±j^aÍAtÆ‘4XÓâ§Žhÿ: ^„dVÇóI9³4X_㧤1NDZK67‚ª¨ÔÛÑi´ÿB§bC*#\•ÜN×3¼˜k´˜¶xQ5aÛÏA—<ÿòöÛ[c‘XpÆ¥ïLön·!¤Ž ('6S40g6£Ác®yRh3õH ²¤²ò9‹‡Ñùt†=´¬åµ×v¶.˜m³•¼J3ðvy˪ªÌ3[ C4Õ$P0ÀcPÏu‡8CžqÅÙ5¡â—fïu+Ohcõ‘‡ÉrT ³j6iû*/·æXjÖhÚiJ j¿éѽôTx.`®³ykxØë«ø.£8réšc6 .lÏtÿš~Ë-›§Çæ[1ò·³¶ÞøŸz÷ñ5E·`ÏàŠÏD‹Ûr ‹èp: 5óÿ îZ‰ö¥RR+ö¬fD.kÿªÒ†cù´,i’^¦„¨~$–‡2boð6˶ùÅÇ ‡ÿ–Ïiœî¼Žošë0G—¡÷BzL·Í}Ô —ugK¼YO€ù°f|RFcèWv¡ñaŸ—bê€km6Q–{zŸm¹ýd2¢4¯‰tE%0·y*Æíkéq³‡°$ß\«¡˜{…Jo„ùò¹'R¦(Fív^”±óC/ö®OüúõC­º²û¢4ïCõ«]œ¢ÿ¾a†I³Ï³uì(‚¬È>À§ƒ;øâä>‡û¹£{ìòOš{º»û»—à{ e»Ãû½‡{ðx¬ߤ½ãû¿cy$5bëå䨿íÁ#|Â+üÂ3|Ã;üÃC|ÄKüÄS|Å[üÅc|ÆküÆs|Ç{üǃ|È‹üÈ“|É›üÉ£|Ê«üʳ|Ë»üËÃ|ÌËüÌÓ|ÍÛüÍã|ÎëüÎó|ÏûüÏ}Ð ýÐ}ÑýÑ#}Ò+ýÒ3}Ó;ýÓC}ÔKýÔS}Õ‹<Ÿâ—ϳÕs}ד$ÖÜyüØ“}Ù›ýÙ£}Ú«ýÚ³}Û»ýÛÃ}ÜËýÜÓ}ÝÛýÝã}ÞëýÞó}ßûýÿß~à þà~áþá#~â+þâ3~ã;þãC~äKþäS~å[þåc~ækþæs~ç{þçƒ~è‹þè—˜"{ýé£>¬(Ãêéõ²~âê¹Ì$*§~íÛ¾ÈÈÿ6PÊ?ŽnNÜ…[ßþðÿ”¨óc—¨ü£œqò“ÊiÈ»CÿôS¿n µÁGŠütq©ÔBõ{ÿ÷7™I‰Ábxû&ª¯L&ú ‰x›Iû ‰ôƒüËj2ÖFç+¡[‘Ö¸ëŠþ>„Câp\ŠÂ2³„F˜E‘f¡‡@Bû‡ÅcrÙ|F§ÕkvÛý†ÇåszÝ~Ççõ{~ßÿ ”³°(º@ÿ¢ªXh€*p"š0x`B ‚0ä¢`èbk¸Úš\Ó8-‚p}€…Dõ´½ÅÍÕÝåíõý&.6>>+<$B`€" eLÍÜj^e`«DˆjJb[µ&ÊÐDOÇ\­E~‡—Ÿ§¯·¿ÇÏ×ß§W~ŽxÐÌIß„HšP$3OJŠP;ãÀ™B 4Œ›à\:ŽëJãRäH’%MžD™RåÊb…8Zš©R:ƒü™cuÄRžážI$¹k¸¸c™TéR¦M>…Uª—è& ÕÈeg.Ù*@”ó%ºE@=a­C´M»©mݾ…Wî\ºuÍÜ”Rÿè‘‚C¾†-4¶zÔ¶z¥A,v í>†YòdÊ•-ëÁ¢Í™6’Q.Ÿ÷=V“GJŽ/¿†[ölÚµObË¢³¨®‘:û.7ÀS7 ü6œ±‚êÕ´l?‡]útêÕßd^Ò)À"¦~/ßÞ:x³X—9ž`PªDŸ9j]þ|úõíß—‹}Iú‹¼#¯d¯ðDNF0 0=˜3¯Ÿ0 îŒWÚa ? 7ä°C?ìE?À¬êˈQ8k"ð8JhŒÆB‹3¡ÌX'$zª  ÇŠ D2H!‡”¹(ñİ$RO#ò xD´ÿŽ»1Áx€¹'Œˆ¹²ÆØñ¥+‰$³L3ÏDÈDL³M7ß„3N9á!°¦9ïÄ3O=÷äS‹ èoŠÍú$´PCE¿ÿ¨t-QG…4RIçÒ`Ê-øiRM7å´SO?5TQG%µTSOE5UUWeµUW_…5VYg¥µV[oÅ5W]wåµW_6Xa‡%¶XcE6Ye—e¶YgŸ…¶×ªP¼*B` H š*w‹¶[o¿sZ«Æä¥ÀtZ7]uׯ j’—N”Ì‚ àe7_}÷µ;ÈÕ…¸"þå·`ƒ– 7œf¬AžÈîÉ(+¨¬¶ 2E¸cÿ?~ ;r0˜æ%’¤IEs©mƒŽ«d™g¦9$ì6fÄ‘˜$ Ï/KÖ¨BO¥05¼³Öçkfºi§ñ÷=ŸÝ5*™1r›nŒT:æ§¿;l[ÜÅ7‹@H!†–bP2$b PŠ,»n»ï¾C\j¯t`&tjºY¬­zj( œñFí!Ï–ds £8e ¼)Îy‰`Àø¤~FAŸmh¨I" Mâ¡La¤>&Œ’ »(Aoc$ð|©axåì¤wA)aL‘î±çîä¦b°;™©ŒÖ $ISøl§Å¸p€—€—[B@.5D* •Â$H/Ù}d…Jþœ!«(ÿUÀ•Vô Hh²ûêYù’5f0@<y|úÒ£j–l]BFSÔ›¦ÔB}ªã¦&T”5gCƒá0 DµÊ$ImõÍ!úvNíQcx)9’PÁlàI·S0Ö¼¦£²l”Xø6ÕÀ³mlsFPSëPÆzyމ±Ù2è°ØDì ë®zâêñ.=‹w±štÎË#ƒZæÜž,ր֦ċ$;iËѼ gÅœÿ@:~Ñ&OYD +!ÖS&~r¯¯:7—|ôcµú˜ÙÑó¸m[¯%„Rމ³ç iøýÑ^°šè=i{h¹wÅîq7vÍkˆ¸—ÐNcïYKeºw]lš¶ ž ×a6s㚢¼ÆC¶´ä ˆ/²Rˆ±=c^M×2 øÎÄÉHž‰~aã%û’¹Ñ@ U—†I*Šuëm^€“£Ü›kEiý½G";—ÞÈkžÁ(-&§ûpÚÇhš˜©ù$Ò€t£QÔ À ~tü•ZF_TÅÒ׊÷µr ÞÁͳ+‘‹ï­xOŠq·3ÿÅ¿–½¶{xȩس‰8tYEÁ7€ ".w¤:H\I¨ÑäÆ;y¥îœìÁ®ªïm¾¨azZÀ9gÊÒ„Ý |a3,h§–†˜ûÆÄµŸùÒ‡_$EªÝ™Õ¦'â§L˜à¨^ækˆ­~gT9×;È×Lç–òP^¤'”poüÛZ2‚oóõBgÃásO»÷_]Ó‡·9ø?"Iäí&˜æ¼ë à›1Û©à’I²Ä?,I¿9àÝÒiظÒS¨Y@÷ê«s<Ø[>Ÿ :Ôs( 쉙xð¸îû'Êš»Ü+‡Àª A?É˃?3xÀ®ë» ŠûˆÈÿ)A£Àœ:åƒ?ë“‘ÔÀ“Ãp±)“'¬û´„²Á0¸=)¨B·Áô‡3Âü¦‹á%ã²»(̽ ù5Às )¼Â/h@ö.®á>$$Ðê€ @4 $ky. Ô@À1ÁQƒÓÁ³–YO Qø£y±Þ£³»¯Þy@ jÃX?I‹@ÜÒÁì3»šAŠÔ=îªAKøB1xC9ÜÁëc>éSÛÂHƒ>Nê.)Ô)Jd- ‡3CIºÄj“¾œÂšxA@ãi’Âj¡´U±¨ò¯$k»hœ¸L\?45ôš7 Fk„C+5LÆ_ãAá/¸ÿÚCˆS,½ðš³QAÿA0jL‹ù>0ÐA1…Eóh‚|Œ‚Ó“>ŽÁÄ ÓÄÕ³Å"Ì¿œC pBMð4R„ÁRô=Ü™CUsH ÙŒˆ‰Í°CP|Åóã&"ƒè+Æk ü³‰„Bl 8ƒ$Ɔ¼Fd„¼-ô áÓÏ{#htETxµ•ä©xCÈlÜ:Ü»·5I7̸˜ü‚q¤Ã›4ÇdžÌ¥uÄ&êrÊcI»Ýabà‚Já†àZ…p*ÇÍ&(üFÌH”¸x¬®ÀÃ<›{AÔËCLE&ÔFxc›OlËl”QX¿9ÔJ¸}JË4 º”ÜÈÿ¿—#ƒVŒKò³ÌœÌí*ÉiL9Þx¤2„ÉX´7¿»Kp|K•SM˜G)‰JáÒ'f¤­™ÄJJÌ@bž*ì¿€;L Kbh 0€opBS¨ ¸AE¿tÌhÍÍ c\Í€cÉd»¥Ù¶«²ÈŠ4ÄoÚ ÷»ÆëÔ‚âÃÉOcµ€Ü$´èA‘=a"»`cÌPˆJ(ª…»dp ïðˆÖŒÇhˆO£&í ¿„TÆs„OŸ”G)°:íˆ0¢„1¥Ê4àFšË·Ó$Íùl =üIŒÜ?é¼ÃÍMýÜMˆèŠóº‹ÓÈí¡Ÿ¹›Ð„…(NA™Qåâ©…´E€Cº¥”PÿÊM>ú¬à‚O"<0Ô§L¼u¾©äL³ÁÍåÊ,¨5ùbŸw{ŸÇ‰ŸùS„޳…5 ·ÚÉ„SHé J [9AíQ È–_RLË¡Vƒ’Yø¶S¼äNïÜË<“†HµöÒ…IÕ…ó#Z;£†Ú3óª Ažgô,´Ð‰ïŒSí!Õ k}Õ`­ `ÄPíHUŒ©®¡ÿò7˶gØ6;©M©´ eû‡mû¾ßŒ=ðü|PzŒN”£Î ¡A{^åÑO’°kÓÍݪӋ3Õv…ŽyUHe3¹$äøÃB„üʯ=7ÕØÍÛƒµ¿÷¼À—ø’¾Ñ1žˆüJ‘»ÒÉ dµÛZÄfœÆ!Í´•I(KZ/þêÎ_•#é9™¥{-cÓñ„U判©°Z½F „¬ŠXÙà&ù2®PZ‘Z² †ètYŸzÔÇyZñ0—ò²CÛÜÅ^ÌÅÂó’ÄP œÁù‰˜µ¿õ³$ äP¤|ͬ³²@}RFàØK*j‘œ˜¨0[2Ò<]ÿ]Fxí¯ŽUXŠ ¶Ä<,°¢ ’b)“­âÂ,]JõÔ±‘Ê( K‘Ø“Å-mЖð9ÈÂ¥/®ñ¬÷B€Mœ‰WûKؽ¬¢õ,ĺ¼LÒ‹t0 "­õT½¢×t‚´úW-Œ4%{ÆÕÝ–ïQ/;9Üq‘EZ’*Öý[ì•·OWV嬨}“Ú®Ñò-ƒ‚×ôÕÀÂrÑà]/0¼MúUO!‹/éוʯàLC{Ú€pX€ ðF å öå)Dš2ùBZËz¬÷6¶•ß÷JDÌõúB•ýÕà® ¶ý]D•áž‹? þä ÀÆÍSá<¶a¸À¡]ãÿ‰œ ÜP2¾á!–ŠZ*¹—ËŠÞO©° &â'†â(–â)¦â*¶â+Æâ,Öâ-æâ.öâ/ã0ã1&ã26ã3Fcv!È5XãIA15í&´ÂùúØË… »Ã…Þ­®¦œ[Íõ*¿aH.ß&(·ÑKã?èÃa8¤KÙÚ`Pߣ•cŠ*Öé@€Éc#(ò”H~JCTzœ <æ.S"„Iî3ER=U7ض$¡S溲 N„¯š~b\z7`@;æã¤Óì’U;@>‘´…½¯a&¦-=,T¾ãÈqæ“4åżkBåÃ;f>d1÷úÛã(Ú1õV?1xâÉÿóãA˜@Ñ7’eȸ4!ydd–¼iÞ=–fMÆlnç›3^¤åFÜg9ð5Ø*Ž8Ò½§©EhË(f‰çÍzÖ{þŠŽ}>gêgjŽ?‰ „Ÿ£?ƒÆ8†qB‡Á®c»UÙL’Fn5¯U…%®h«è¸í² Ü g"õ§/seri€TãÝÂÜ ¢.i°R©†`çgSÊ‚eÇâÜ–^ü m­N•“GÖå]ÞE& M ÒP/­]Pv’ÀbªxVúe²¢ö+·â²’£Þ1jGˆ*µ¾Os«À æ¢cØ5édvª¿dؘ 3¶ks.fžÛ±0æÒCÌÿ RWeÚO…ˆ €éÅÓ¬ûE™úª½èß;݇$3(µd5V­ü:ƒwvT1áAW⧆¸±²íV t˜!\W#¸1­v@Ž–˜™¿ËcÏsÜ$ƒ¥Ôî 9kß5Áä´`~ÔÛ6¬ß–¸®Íë£*ɨum»3"›0ß¾ÚŽmÑÃY.Ûºèþ;òžîãMn–¬£‘ônRÓC­)ÝLaR“Œê]ÓÅeå*8«49û×M´ö ×Rˆ·N\?Kƒ‡nNªs4»mílÊ–/q·h Ó;_» Pç{±m‰3ºó)H wU<ùò»9  ŒÿvSXÛ,nú¼dˆÆÑ 7Ð Ÿì:.Ýg„›Ùa’¹R *8 Ñ}qãk8—CÄà€HŠP*â€ø¾2$e»í‰*è\ÅZoµ¤S ’Ì@ûaäI¸o»lœþá=uT­$ÐóÄ_6ŽHvTLÚ€ö0Ï(>hŽ–G«qóóo5ð†M²ðõÖ„…îÌÐ6n8·7–¶óî›Øèç˜%Y÷¤»Ç³´¦9ÍÁ$µK„løñM–K0hcÜÁCÑ€*»+t†ƒ˜…ïËñØÅk=Áõµãc¹¥]ýÀ&°“>å!§ÉúË­ìÔtÀõ¹˜¢K®¼žM? fwO%¸v"ž¤ÿ¦åÔµäÉ—^ìÎû¼™UHnƒXI?-VûÜJëÜ4ÖÒ^Çpsc/ñâ'vÀY6ÉFku ß6ÿoh—^|Õž…ç±¥®s}Tnl3gXT-å7Ÿw>‡Ø ½£<õâöTÒçÑ´hò Go-ô‚4á½ú«þ:§oîÒà°Pv‘.±ä%A„%¯ôEþ6œ0ñöe-w¯"Lç³LD#ž¯¯Ê5„WoºBü,È€DOæK‚§Ò#¸¦„W¬~¯t®&žFéudFž ,ïµúõ·Ñúeß €JS?ò{WÝOž»$æ%¨' ²o{Å.osíJÿx™Çh¥÷;A~>ðVrÒœöÒE‚Ü]úÌÍŠ…ž§âq,jDæ‰Ç~ßÙî3'®GèbcKò(pZ´ÆÁlje@„ºO4Z—·}›œ}ïFVÈÂdœ>•F;øi8{¥”Ó ‡õæÎº|{!ïDØÑsUÜ@”tu¤¹Y‹P´¨Ìö”çä}Ž(¿áEßxµÔ!‡Ž0ƒü€…_åਯ|œ¾i @€ñˆ4‰¤ó ¨ –Šu ÎI@‘ ‹Çä²ùŒN«×ì¶û ËçG 5l7<…»ò›ô0tt18ÇÁHõ° Áà0àÖà7YùD¡à5Ä•öØÿ”•hqUÇdT ‰d™4´•·wÔgô˜aPëôxqôú–á'8a´` L¤;œ„qù$˜*&ì$%Ñeš$T ¦ÁË7å`Ž&[nXà8Eª›`7|´zÐPŠP6ÎZ !­šÍZå­[AF䌰:CéŸH©ŽQkøËÙt¾)RLÌ÷ $ÂfA‘ ! ™2¡@®4}˜%n‘Î<{úü 4¨ÐŸvÚaæ/)TG”i„£çÐ9ØàTÓ‡Ÿ§–N(`”韅FĺzêðRȦÐ,ËXÁ 1ctmX›Ì,€«Xªá»ô+WSbìõkº3fÿ·d¡´øÔ»„)9Ѩ¸Ã¾ž¡MKVi_³^B>àA¤ýÓvx_ÜÓ2³I4;É,ùð,Ó{–B›L‰¦ nFšÀfý¦:=ºôéÔåÍ‚hù£i‘ûÂ’×ÕÓPÊf ½˜ÂŒ# @%ʲ»÷…Æ;P{jµhU’bØSDfF1ÙX–]'AW†¥mê"–J¹‰6Z„Å|Gm8¥ >º5!lË9ÆàÊ58F@,"”“Šz±MbY\vVŒeঠL4_~!>[‡µ}´Õ…&Õ8 RÓ‹NøU#—á…¨Q^—^~ f˜b’qÿ¾7yÛÀ"â‰6겕fY¼C_žgÕƒ0n$& M”#äíµÒYlN)dšáG%}}šd5u†yhcii[:X"„`ÈÈÝe(¥ˆƒRÊ·‰r†‡YhdòTFYèˆÝa(¶y(†žõÉjeƒBfšoB\€^Øiâ )§mkà·$rÔf¹^1@ÇèqÆxå:fºê®Ën»p”‰Åd\Bv‰äFh©É$ro€.KýB@pªi}*|k(¬„‡¢Ã¤»L1‹*‘—UB¨´b eï7Á¼ð7S^Oe…½nÒÜ,[ÿ`]—z'rßÚ ¯úd¨¨xó­ÎjËP„„~Á¦ À³§ª!o­#kf‘‚GK,62ÍH÷BܲÓý‡€>ž´$ ¨—[ piêØÉX©mÚº+¬Gë+dðÖX-’h`KdÄÑ.©&Öq¯² ‚ínä’ON¹»_4'§f7Ä® m“¹Þ…ºÙÀV7î \©ú$×:ë­¿˜yq‚ïH:L4g®IKùòK#}“æ—yL$ŸÄ&Žt¡x¹=¦Ò7eû¶ÒÖ9aïî¬f©¯ÎÉ짤z¨ ÷¿­‡¯zI{œ&ànü\œñTg¯{9ø›Uÿ þŒ#¶?}¨Ïuì[@IØ¿ë%A%ËpÑðÒíwË^‹âÑí¥u›p]ûL$g…Ì;)GÓ÷)ñ¬¯‚ª3Ý(6Ô”ãmOX ɺç},¤;aå~Ä ±'—£F=˜Y5E!´g–¦àl3:taev(”ænŠ¾Ñ¡<2¡<Ü ð# kÕA” Èt˜  `A,%ãˆáPâ]úƒ+-#„kcýdR)™%h)l3`£LE¼- ~›zÞ Ä/¡Í)ÊyÞ×&»í!æh¨@!ëx‰Œ«~.„,À:pެÓäI¢Jæn‚¬‹ ÿp6Ь)hòetñF ŽGcA“oø/ÛÁÍŽ›¼M ux»fæÇ—pD ‘—†:Òb$­¨I© Ö°Šu¬d-«YÏŠÖ´ªu­lm«[ßÿ ׸Êu®t­«]ïŠ×¼êu¯|í«_ÿ ØÀ v°„-¬a‹ØÄ*v±Œm¬c ÙÈJv²”­¬e/‹ÙÌjv³œí¬g? ÚЊv´¤--cf=öJŽj¡ÀÀBõ zTuј„y¢æM¨4yí Çàˆ`©Ãp¦-®ëQ¼›~É”\@W×…Z4DW² l³À÷:Ø Yòƒjìð†Í²Úv8InJTp—Dyâm¶ê[†˜/aÝ4®}×ó<`µÛ¾q@x÷¹þš¹hS…ǦS‹h3h»m˜¸×ж¿E+÷}ðå±`‡9çŠçj7<åsÔs„u ËøêÜ0ªÕÙåà 9¸*‹Ïš|…~¾߳Â]»Û€“%’KNÒD*ÊøÓ¶ÂÿGÁê|FC ü(³ï€ƒ¾$ðF—‰b†)³Gò–1› Üûåqaž4ïhg‚J­æ‡Û-æ€6±±»{¼5b) ¶iŽ„ðP™µ‘lÓKßeß6™>ĵ=¯± rú+Ù¬HüU”·yß“‘´× Iƒ‹T™Ø» ›õ‡—ÜçG?ŸŸkãþ ÝŸfL,%E³kâP1¨aï&C-`áwÆu9¶ÇC×'P„rbPn0{5„~C:Uxrdæ³ opcd$ H¢d§÷p¸jo²"̱)%!‚õ32ãc3Ç!9¦e!¸s*è+Œ~"b:%6’çfósðÿ ”¹Òw«¤[žâsxs&¯$‚bLïv'# U„†r~DS‚e1g(bt§)<ôkr#QB:¤QÈß ø€Å/àb¾CÅ·aó×[4´0 †F:-Xfó‹1Ï…Bé$ƒö±3gp*öƒ&µ!¹aAawƒ3¯ÃƒSäƒUÈ0[B†1|‡±!òÖÈ·§"œ$#`èr‹¤R€}ƒ‚S„[Ìt{Læ(•÷àPˆB[¸w~Câe¾h~p¡Ê%½QÙM˜‘áÀ…{ȇù…3ZÅ;ÂB+ÕàA¤fîDor1ÕÆ9V5eåuÿ-DØg™Cp¤á1ê”5ý5(WÆ E6L<8—îÓ3HÂCˆ„Â{ÀØ3˜#-‘(|Td0n£gWn&q*WcŠRn}øyL‚„†=žÄZò8P†s!8Ó†eàûW(9Ù{ï%!®xOG’Oæ¦)5'b’¸e±;e'á(ŽpF:̦ <åA#a7i2MctAŒ†aeÄ€˜°¥r1‘€bp‚Ñpui|úGï0±>‰G€x±C)_¤¨ èqŠz—`ׄӔ, añ¸E­ò!VY—L·G¨(–)÷Â2˜ù·un)\•‘,²ær_ˆÿ ß’ õÔ“ô÷“&”3”þW”ø5bØhbæ ‡Q9ZEäýr{Z©cãӌٴA!{}—ZŽØˆ±9L`& ·"н“Ù$°Ç˜Ò¹•cFÖÉ–ò)6è„I˜>#¡Ñ„IBd@ŒÃ¥›(JV×lô°tF˜-s‹£Ã)&Ç!¸Å›§É™(‚žÙ¹8‡yœª‰š>i&Åñ~jhÓ|(qoRL¶IZ¸9ˆ¢a'”ŽÜØ"XùCô¨ž¯…2|ò$òGŸÐ¹¢j Ýè¢bùŽ1Ó âÚ "‚‰*ã)žZ˜‘ˆ7 ™žmðu/¦(³2Ñyÿ*é[cø4º÷ŸWˆ‹&c“`ù ¨¡iüà?Ê á¹’ŠÁš_j˜<´ u¸^9[Є¦Ï𡲣¯Çê6i":¢Jž.ˆ¢ï6!òq‰ƒúþY~É¢Š|Ê7*HD)}Z ©9Mw¤—™">º‚AfI‘€W“‘ª‘—z”5ŒÊŒ¾DœaÀ#ýà#Ë蟭x  š ÞÑš5zžG¹dºž/Ǧ7èor§•¥¡VjL,Vä º¸™cP~sBur'Œš‹8‰¥oê-"[Py4÷0Yx”‹r—ò``’QS’–á¨ùd¥Ÿé:†<Êy8«˜Jÿ§Ô ©ú*#’e䀇ç’#îh0 z¦cÇI‡¯0Ê~Ã3×õL͈‘”*6|ùncº [©ÕHåªÃêYź"³Uç-ùâýÒÞZ1(¬AA¢‰•„twÆG¡T #@…Ò?ÞÚ¦Q3•$®¹‡'Z´®'"è×r¿9v¡´ÔÆEÁ—³»{¿7‹ 8¯¤™4KsBˆDk´âw5-qmÚÂ55§}7[|Þ7Gàwv³6#£Qn3hÝG ââ´Ý* ž”‰A/h‡öTdaª©¶J¦“Ú-ÇaÔ¡dܲ õ±ÄóG¡d;'§¹Wçÿ«¹cE‡:ZÇAPk*ßBâCû£µ9KŽIÈ;Ï)»ÀCi’\ÇÓ« ’Ør‹9:ëJŠ<ËÀAm*»Ýcs7Ǻ¨àvóeu†¸AÌûA»#–ù3øc?d;r¼÷¹5f½îG¦Û:´?Pè) ÄU™@Ü[A×Ê•£r1„D½B"Äv×4±«‰ ¬ä–Ý3xkHvÇ·¨¦Sáu¯{¹–%²¿‹DÌ„IMôƒMai `Rº³Œ¨Àêöe^D}†Á ¬±ûK~¶FÑ iqÙ¦Q@GKv´„hkMº·Ë†$¼ù»†„%‹´–µ¦tð‹r¾Yk‘ô‹ùòÿF7rî hØ[ Ÿ$ÃKaŽh¹@VõhªôζUé’ÙK]ɵäŒÚ@gZGÄ4ÔäG—šÇx¡GiI˜ kË$”þK«œ“;ùäŒh±fÙ‘®Î±²`ÜÀ‡Ü—ˆl‰_¢ûôUˆ¬VR” É•\Œ‹¡’œ0¨:QlÉg«Î‚ŸLÊf³GóÂN¦eMÔ!R’‹Rž\ÊcµR¨;'ò;˹L0A¾pŠlCÐSÓTËS²¬Ë`• }ë¶|ÌÍ\%R²+{U¥[?JÉPÆìÌÙ¬ÍÛÌÍÝìÍß Îá,ÎãLÎålÎçŒÎé¬ÎëÌÎíìÎï Ïñ,ÏóLÿÏõlÏ÷ŒÏù¬Ï•ã²ûìÏÿ жù@УÐÐ ]X @Ð Ýͺ mÐ MÑ=ÏnçgìÂ\Õ<ÈÃáÐ"à!ÑpÀÐýÐa0Ð [ÀÒmÑ/ ÓàŒÑÀ<ÑСpÔš`Ò .A-Ñ(=ÔÔPÔ1ÔIÎ}ø‡ê²G‚öÅUêÑ;MÐ=ÍpÔkPY­Ô]íÕÇLÈc³ÒÐð:}ÖWÍÕÙÔÖ_ ×q}ÈqÆd`”Å-Èy6§ Eí Æ(PÔX]ÕGà†]ØMÔ‡ÝuHØ'ý!°Ó8SÒT݉ –MÿÐI Ö”-×£MÚqÊ‹@;ÇžpÚQpÏçŽ 'ÖGÚ/’ÙªàØœ %mÕFàØ;ýSòÖ}ÙIÙTÍÙ°ÖŠýØ¥ÍÜͲÓðÇ£Çvhaxç“xÐⵑ×xeÑ*m¡Í%·­Ü»ÛÒAÝÛ83ÙÝØé ÚèÍÓèýÛ¼ØMÑÐóíÜù­ß“Ö;´Â°ün‚UÈœDºj ØÞÉ-Þô½Ü²Ý· nß ÎÁ½Õ.ÛE=ÛûÍáÎXL”EŠÞûÄÛôzˆ‰ˆàGÜ}®ÛÚÀÒ!ž Á=á¢o  ¾ØäA.X3½ å(’Ñÿ¡Àèë8w›Z£n°á7îâŽÛ1žášMÞ ŽáÚ`áÁ]Ò‰ÝãS.äcNæz…Ѽ/À|•Á›¸&œ!”ØQ®å” ã?ÚTåëMÔ[.å:ÞÝ0t^æ…nèoõÀë âmÎ Ø œ¸ìÖ ÞT>Þʽ٤`å9>ÒQèHpÖ_~è£Nêj•¹.Ú®©nÄÆš§8PG]Û”îà»ÍÓHàØ{Žãœ^á~þÝUÜ¥ìÁNU"[„z:â‚H¨é꯮àµ>ëGàìa¾Ù þã¶]Îëu^íÂÎíÝ.Sľ¯ÈJÝÊÊÉÊì¬&­ÐéÖ]±îÙ>ÿÑÚY>ïÛÎå¼Þâ@w½=íÞð¿QŒ¶Sc²²›²‘²åRä; ÈÜ}åzŽynÒ»Ù Ômï™}Þ»ÝØB]Õè­$ÔøñŸ.ð)¯òûôÀó¶GœÛt ·?œ¼¦¢ÛÁZåC"í!ÿã & Òø¾ïM ñ®Ù&/Ü&Û9î+ïôO?O ÃY<ʼnFÁÁÅQTÓò<£{âÚþØ"½Å¢žéñ?/"]öM?¯áš}ßNñqïnôP÷y/SäôX|®÷ø'…ɇµöoø‡oQ§¬¾ˆßbŽøùáTS½¼Xù—ùA¤$ìÿkŽÕÐiïÓ™/ú£Oú¥oú§ú©¯ú«Ïú­ïú¯û±/û³Oûµoû·û¹¯û»Ïû½ïû¿üÁ/ü+ær^­õïüËŸ.D®_ë‚ÂÌ/ýÓ?›,ÖÔccP}ýÔÏýÝOGñYEÖ5íýåoþgÝu]lxgz6%}æ×sñäçOÿõŸ¸Ã⛬ÚS#ó@–™T.™ÊðÒ\@›Uë›Õn¹]ïÉeóV¯Ùm÷—ÏéuûŸ×ïù}iqé‚  b¡"©`i"Àà Èi‰‚! Á¬A(â/ ôÔô5Uu•µÕõ6Vv–¶ÿÖÕPI2ÑŠ`3©bÀà3IÒH)“Á¬¡jJÔvšºÚú;[{›»Ûû\79âa—¼JñIqb)Ái(jiÌ!ž©ÀÂB#ü`@ 4xaB…Kpqh W¢Fs(ÞG &pä8oŒ –4yeJ•+Y¶t)«áCNN9Ðñ#¹F0F(É0†Ì|yiR¥K™6uú´ÕÅ+¸)Q—dgÏŸ>ÕpÐÄjX±cÉ–5{­@©Vì!;@V$#šÑP3nZ½{ùöõûpà&n­Ð]R“\»wù†4@¡Ø:Á“)W¶|sæik›@æ©ÿ¢0iXóI:j‰¿/‘dQÀñ’fÙ³i×¶}Û2ç?Tƒ®HÌQlC$Ð ž„«Cpþ<Ô(ÜÓ©W·~{AÝLDÊüí•¢"®[ºë’¨C£J¢UÈþ~|ùóéßÙν¡žøÐ2mà|$"Ž€êÒ‚¨ô„X´Ñê{Â%œB4Y®Â 5ÜÃ=|c8É>‘ÄM<1¾ P ìAÆeœ‘Ʋ|+fÁuÜ‘Ç}*AV Hà! iÍ Íû¢j’@¿ýœ”ÒJÿ‰‰"ˆ^!.SÔØð,= ½˜(H,=ÕT«Y+ƒs\ñ,R*p5Qiž“t‹b¸@ƒ ðqQU…–XStÛ×Sû“—Z“õbYer,–Új­ƒ°­„ 9°¤³ÿ/ ^b ,| Õ˜öÚxåW Ý4˜V´ R’¸áÈ%„S"úã^Ùc— cQI‚â©HÅU‹YÔ^V$>¬iŒaDÛú%F3žqiAš‘.7¾Žq”ãéXG;ÞyÔãùØG?þä YHC‘‰Tä"ÙHG>’‘”ä$)YIK^“™Ôä&9ÙIO~”¡å(IYJSž•©Tå*YÙJW¾–±”å,iYK[Þ—¹Ôå.yÙK_þ˜Áæ0‰YLÿc™ÉTæ2™ÙLg>šÑ”æ4©YMk^›ÙÔæ6¹ÙMo~œáç8ÉYNsžéTç:ÙÙNw¾žñ”ç<éYO{ÞŸùÔç>ùÙOþ è@ ZPƒ¡ %gáÒ•>U j èR—B)ZQ‹^£ådál’DR,XéHIZR“–Ôiãk¬V$«sœ¦1•éLiOš5«ÑÂjÚSŸþ¨Ae¦n(†G¡ d©Ñ¡»Ì…£†žbB•êT©ZU«¢Ò^øâ¾ÂÂ%6ÑoìjÏUÉZV³ž­y$ê 2p¨ò/“(—&@&²Nøl¬iÕë^ùÚWšÞÿx¿hÜ\†#]ðlÍ8žù2àWÇ>²‘%h¶Z¥R¨UD1Va Öˆˆ…_%kЀdI[ZÓžvÍÞ€\(7ÇiÄn±ÚP €ZÛÞ·¹ýfÇv¸GÉ#»;adzA}ÑvºUîr™ÛÜcÞ*eë`V(Q\ŸAxÎÕîv¹ÛÝWÞOwäàÝk¯ÈÀÅ»éUïzÙ{IïÇdÕËl"6«S2œíÕï~ùÛß?¾÷3–ÅYЛ´Ô¤¬\­Ü`+÷~ÅÈ·öGšùËcèr&”ÃÞPð€µ}ðˆI\â¾j°…èàãÔãÕPÑ„Ñ1ñŒi\c©Ò°ÿ6Œ”ª í05B2ÔÏcÎ‰ØÆIVò’{!&?ÊQ6qˆ¤\e+_Ù¹*bQë€e/̑̈́Êf3ŸÍWU㊄F7¿Îq–óœé\g;ßÏyÖóžùÜg?ÿÐô  ]hCщVô¢½—GYv,#à S^&̖Ѹì|ÓÙ-TV®²¨ÉË}»à. \47 ó‘áV¡`­‚&V˜†ŽLFŒ¤pͰWóEÓm¸@p¿¦7V‡`ÿ¨f LÙ‚ü,¢P&ÇDD$«;6-‹fe /¦ Éã‡ZGçÄC(‚o…4& Q´jàø/"^0"Äóv. ³@äâŠAh¸$ Î"àeتo¬5d…AÁ7ð/Äã@êâñuÖ~KqBc5Ee¾3!ç2%Ç]³A;â/T±ŠS/ÓçqåˆS IJºÜqr\pA›S/ž³*±S"ßH'=S;­óàìRæ:²7GÏs(„ ¯„%¿SýŒÄÓÀGa ¿rI‡&MÇÞ€L9Ù@8Åm_4ÉNîœíÿ˜´ƒ&#T=)/'CsB÷¯Bû/ºÎrHw“Cst6C²-ßQ I4ÃîDK8U4-Ô’0€ê’1°ñQí8ï.g/ÁRC…TDÛ u†G"«4=™3AåþPIi¼„&[Æ+%ßt ~¡$Éà4µN‰ë@¨Ë@ 5ï(+E[óTÇ1D¿àN† 1EËUÙ´QÕC—ÓV·àñqM?O?TOÑÂ!Gt$¤3/ÁÇ .-“#ÙÒ³vôjt¬ÊÒ ¶“õ$•;\Œ)GõP%î+YTgÃ&Aô Øg @SQó3gì^¾&¼4Oós>ATÏ€^Íôe(òXÿ¿± èt ô;­N›TXçÔPu†A¸5JM1YÑBl B$RS fV?Íg@£ú ^ÓcËUkp-}>/KÚ VBÉNVqo±$M•!`&h?ñÀ ¦1ÍRß‚:wÖTö4_C´|’ü¢GÊSr(‹OÇ,__õf›.gO¶ùìñ7>±@'§²–(©uCY¶g|“kÛVF³3,'–&™/Þte3¶,ÎËÝZ#¿ôñˆ+Z2jy¢;PæWÞs. Pd?ÓЉC[[t\î‚ÖvÅoS û"%€h×ZûÍHƬ8CÍeSÿ”T¶ðôtæÂX·`¨ÃºÀü­W0Ì¡Äï 8ÄzAu—8rFrYìjÝ®(lvõañ0?3ÆtûÓj` 5Kt@#"v§÷…ÚÁk–Ý’×7v ò 5r´Wiu† ù&d9±`Vo#íƒX÷A©3Z V ~Å&t*úV¯c=ÏŽnB?æ.¼VÃE…˜£Lüº×¹SÛz`\ÄœÆ?aƨFD ±(«Ià|¾¨[ଠVvZ¹ڧ|«ÃF§`±ƒÛ`Èÿ…¼©‰š{ J€ į5aDZ«|ÊáÄ'²‚‘ŠsÈÇÆ…‡ÌΑK†û{ ÛN¢Âö•! –énv¹…”ûÎK€ïpÅÏqùOq³<.îÌÔ6ûн¥ñòd0¹ôýÏ£9›ñ{X0±YÐ?Á¬'] Ý‘÷Áå•§€7”ð}—–;˜9qbùXµaœ"§l¯oªÝè™:È7 Ãû %àÌ-AÉÉûp÷ÊßPÊÏÈr[§@؉úðÛ·º ¡½×{<Ø¥½±5äú–¥óÊxƒ»O%¿ ÝÄjLRl+:‡³Î4×"ÜïÓ×ü.êÞÿ» Û¾ÅÑÍØÿÔ½X‡"A˜#.Ý;°ßý­þn$ØöS‘âí'‚Ù]ÅEX Vn±ÐöÍãç6ì$!´!²Ö¡F3Bár H^$* Ä,\ÚËE¡ç¯ÝªçR±'Ü–è(¶³\§Ó­Û\¸'àŒ|¬ßPçI@´|˧ü2€È|Êû–Øûy辟Ë=Cº. ñ‡»cŒ£®¸°G7ýd vΡ Qã ¯WyÕÏ ]*íßê#q¸¤—[Ú¯y•Sg"{)]--Fí¿È¿±§MÑm§…l1†}-Qb3ñòÊNX$_ßE¢ž-7 ? ÄC¿ÿ}9ý¥.¶ Hµ@Äkœöo¼ÿttã½* œõ ˜J¬Ø/X$~½ÊÝ{Žà€ÞêãÈèË»¶}ºê¿}§‹=§£&ëÅzêÍÁÚ‰]«‰¿éy>ʯÜì+ÄÃö£Ñ|¦1XœÕ­³;:èžVó¡j½èjqo¦ XˆaDH @eØ"HrƒÜr… #rºDf·OH·9æ2 é÷»èHË·‡@c˜y*ÔGýÓÜPÝ À —“ÁÒ]ŸÐáäÖÅ“…!œ¥›fWÁS'è–•ž%†×ÚÄgé@ƒÀ©D”ì-j¤h%/žß®!°ì)£/ÿ_J³ó3t´ô4uµõ5v¶ö6w·÷7øµ ùÃÆF9‰óyn3‚ú9}…‚Aùt:9 Õ6$PG¡Bu6» ðƒ~'J;`ž€~ÍÆ•;pÝDyë+iò$Ê”*WRÊd%ƒ“c\Dýá5aK‚'db 9SR &4i ä³u’SIŸB™Y³³&(š€xæ¼IéÕXû pùÒJÓszò4@è©lÊž,¤È©«RÍme%Ô‘[…¼€éõÑJëˆÖ>þJþÓw(i0bbœÖ4YÄÖ-¥—˜ï¨¹Æ¥›~:êØlpå}ì]Ð#)×1ìõ°ì\sÏÔ£4º³NîÐàl^íç„(y¬Ÿ)BÅEÓ8ôÑ7^Ãi¾0%ú‘MkÁëí{V‡rŒY¶ë±2ný˜xE½¬]LžmîJç·¨þžŒ~í϶IìÖ#úm~;šZÖâð7u5‰\èÓ›ß#¿ÎIï`é«„•:sq•ÿbb€ÀÔè5%ÁB{óZV “X0{©{! cx1Ž@:QY  2ë”àšrE‚àNQÎØ9Rfêe¡ÒQðqî4êQ¿¡¡ g×<¡Cz^ü⨨‡ñðOw`Ø ë¾jjà«Ú7ø4x}ÈmTƒÐcÊÈ#†îp¾Ç’뉀ð{àÚθ•P{ýËÛ»âµÁÅ"]áR˜{$˜?J’=\+œçŽÖÂíE®_ì™t*NC¢s Z: ¬-%ˆlæCK t/¾”!0ƒ)Ìl‡Ä[‡3г$§uâá2u7;—U‘fÿ@ÛÀG–œNU§šÇdÀÉ~7Ä@êŠZÔT¥ºÆu²S%b„ƒàÄÀGÙÇq\h(z©Jœè#…G‰#ö.¨`ì2×;+ÑDzMH ±ÐÜ=½EÐ}:Í¡B)Ÿ«—½Ï%Pn"̉¸ HÇ5¦[Ã0D_Þ¢¤mp¤ÅÒÇw!¾Ðœ¤’¡Ì|*ªÁL¦p1@Çw9†ƒï\ç(3S³àp˜N}j0±s¨à¤SÙ8’ICDA£;ýhCe9òp•@Y+§¼ØA›Âój4€¦jLJ5»*å M½ê5tíü+`Ñ•´!„Ð(,ÄV™<Š- ÿÀå¡/œL®‹ÛAÁ²p¶³h)h#4°È4f,{_þÞPØC*4’ˆù…f€â9ûäÍ ®hiØ6‚W®\í«Q¹eŠ‘ ,­dËÉùÐbJ˜€µÔˆO plZeLÚ$ÒNò%¼M茶Dш]nbVÈ z9¨‰ $PŽoy•«D ̤¢Ì©y×EW¨ò·¿¥+§rnö³mŠŒ–‡"O-bÕCM1‡W£ õÛ©ã™:k+íàÕ$ÖÀ_¥j Åů¶Ä&>éS9Åqn+þ…¬¢$BMV>Ñ K£(!n©zD[óãÝ1Ǻ…‘ªÿZk8†öÇ4¨|n«ÙìÅ,—ÉoVJù¨%–´¦É%ï Ç œZ¡«ÈW ¸Q-3¥q1™±)±‰èÆÂñŽÍsH¯f2ظ¤i,ójÕ*ÚIèþÍq ð/¤#± `ðŸJÀ›ªƒ‰x.§@ ’h``Ã0‹Çƒ9¬à K@;>skW½¹›½Î¬€¥-)á Š$'þµ‰šbZ€+ªÐ¨{AtZeM èždÔ†^-DFÖ´^Ë ¥V›~„Ç0¶Ø.R²Ma¹9¬( mV‰eñm„»G‚wX!¤ %ÀØI-’½ ÿPi b^nÝ=m `rržJ­ “…ߘÎevàpa³n´á2bA…âq@Ÿ2z!ïű“Ý«9#5§¨Qcƒ%-ó™Óü…‰y7vm'`ó¼çë¹Dd}>=õ®sÜB?:ÒKlô¤ÿzËL7…âj.õ©S½NÐù7°N§§s½ëõº½0úWZìf?;kÈŽö;Ýëæª:Üã.÷œoØáÐúœÖ®w0²·MëøÞ½Ë/Vf\”ÄÊÀ_¯øÅ%º—þ8ã‰Öv®cÁs¿<æï4¼%êÆPì¸;ˆåïÈ“¾=»tŒVUzYL­W­‚vѬÜúÁ®¾öI—ýÂm_A#ÿd¾÷¾ÿým6Ÿ³Î?„6xÓèu¯ü]¸×>ô¶ïò-am/z/ÂË£¯}ž_åÛ7M€/þñ“ ¿uùòýQ¥¿ýî?üã/ÿùÓ¿þöÏüúŸtÿýó¿ÿþÿ?  Ôåß{ & . 6 > F N V ^ f n v ~ † Ž –  ž ¦  ® ¶  ¾ Æ  Î Ö  Þ æ î ö þ ¡!¡!&¡.!6¡>!F¡N!V¡^!f¡n!v¡~!†¡Ž!–¡ž!¦¡®ÿ!¶¡¾!Æ¡Î!Ö¡Þ!æ¡î!ö¡þ! ¢ RÃìe—(À &¢"."#¾P!]0X"6"%V¢%^"&f¢&n"'v¢'~"(†¢(Ž")–¢)ž"*¦¢*®"+¶¢+¾",Æ¢,Î"-Ö¢-Þ".æ¢.î"/ö¢/þ"0£0#1£1#2&£2.#36£3>#4F£4N#5V£5^#âÃ@¢v£7~#8†£8Ž#9–£9.Ÿ6Z*#;¶£;¾#<Æ£<Î#=¢cá7Ö£>î#?ö£?þ#@$=¦cଣ@$B&¤B.$C6¤C AzˆA>$EVÿ¤E^$ÓéjBJIÞI²SKÖf]†ÙO=¶ÛGæ¤@îKœž†½‘NB¤|¼YI–Ø(@byß÷ùä%{ä®üXöœ1y–g­$J][{T††©^ôĤ٠€ÔÒí‘¥QJš^µQW(¥[ê£F¢˜_½å©ÔJÙý¢¥ ì•Þ8å{K±ÏTŠW¶M¤&øG[Ž j­bŽÏ=ÆXMšåÕìeòÛ“Ä™ËÁGá$]vf<Æ%yæÑÕÄÑ;YeÙ¸mh‚T–ÄœŒlÎf\À^ÖþÌeÓ™æ=]nÿÈ”‰p çôý%¸¡Á.½—f¦%gŠ&FF`sâ£V:§fjTv%–-_tz‘M®_w ݱ™ˆd Ýo–ÂÈ}Ü¥wi/‘Š%m'u6¤‚$% Ò4@ë]Ó…ta›~6øìôùQlœIRWh$HÉX|ºç1¿í[Pˆ%¿%¥ åe’FQ¢ i¤%” äŘ­ôä»–DÜL$åRÝõé&‹º e9P>ކËx–æóÕÔôñ›´H‡\Ÿrª\Á}§x¢ç-&kHS æ­fµ<ÿ@•ªÙ‚*å~„¤°É*J§|€È>Ú}A7`&è)g‚ÜéŽÍØÈ݇FÚÔ¯(Îj„~²©RáÈˉɋ½Ë¤*KüÝLVœ,4†ªt>Þ•i Ò#êÒX2ªÄÔfL'`Àª%Q,*›&u=ûÃÕ-ª–ÄÄŠí(?Ù*€œ +á)”M~•&[ðäL0êžÞ“d>èŽye*E .U…¨²*óåX}¸ Ê凈°™hpBeÆ[¦¦JYkf>jþu©jp$¾ÄFì§|17Xô'’ÄϼJËÃ×L…Ń&&|Ò+k­hF,ÿ@\>%–akSègn„€T^têI¨ØWt,YxqHl‹ l{zBl­æ"Y›§Âf”Žg1¬Hc$ëU×>¹®*™uèâ¬å<žVB¾¸j&5ÜÀ€“Ü݆:ž¬â„ÉhÀ%HI-Ë^,ÁlÍÊ ˜Ž«éùè®>É{òr¶T˜Ç’i–u‚9ì9†çÉæQt}×$7$Km(ÑìD1€—@+Ù2lÖêmÃu*)n“­ÑFÉd!«ÈªMâJY“ڲѽvOþêÌòjÍ­It£©DkºÔÏ‘e’´HÃ.TK Bì̹´ÿmo6Ùªœ‚_úÔß Ž!å¬@…ëÙŠéJˆÁ*!E¹ífffÃ.I¢mÐðBnþX„ `ÀØãpCâɤY|¶ò6ÌõúmÌr/{fL<æ×EïÔ"TjP´R…@ŒçV! VùFeç¬cì2MQˆ¨¥ÛïžXFÐìb®ÐÆ”W VˆK,å‘”UmorM[ˆ H…Ž[Ø/|°yŠ+óª„yê ¬q1çO) ã†fah.üjœÒhhfî× AùlÇÁ“R’êêQùNPþ®O{]b)˜eo~8°™¯¢ÄÇž.Jðð6²K¿*q×@ÿ±©¼ædZ0ïØm‚ÂÓJ}¾±x²îÉŠˆØm$HÛ™5™¹éæ%9& Aæ‚âñ¢ò!eeN‰ ¯çî .¯{ä,L ¿ÇÛŒØ9šH"l G1_¦Ù!±G9ßV‹ã‘ý¼Åãnd"­Á AC›²(»ÓP® PQ²<²Å©X­4Ü.pÚåþ<ñ ƒ°ö^ðû–ŠC©·.Ÿ™Dƒ`(Ⲵ诸™¾}+Ãñ$¦²-‹ðÔBKQ,)ëq#ʽ•ícHrÚê‘ /燒» ©ÅQð-/_4„—L‹¿6CýÊD ¬27ð´á(Ð2ó#³)KÿC?—ĪÔ5Í1ÿ2ËÌÚkÙJ}uégv=ÿƒé÷\Ê0,Kj‚ÓWèw8aE‡ › ×)Œ0±Xè.LVe%iêøz¬ÉÂyV9„Lnrf·m/xXözo‹³“Ü¿\Kgs£×™åÀ‘¼qi3º©º9$öeQ&§Q¼´£ŽqMð )õû“Æ'’«"lÒÄÄÏfëtÙòƒÈžCÂY9éáá°Æ }I^N"7XóÁ×mí6ÆAs¨JYOîa;Z­–ƒ¥.ôvÿX‹nn­¤®'g¸l”¤ K;­ç2P£§îz±™Z5&!ÿ6š¾³*Qžó·Ò¸y¹™}ëo™»Ä 0+«±þÿ»›Åº´î˜ 6¼#ÉkNûøf°GAö¸ØšTöƒ¤.ÚN²ŒÖ{‰O›†M@À<¹lŸü>”*˪¨@3w~NMÔ|Ëh€RœûÒùšg\‘¤¨Ó}ÿ8îI´·7ø=¡å¹!›†® ŠÎ<›þò1µÁÞº·8Ò‹8¹}›Ú+© ­£›ê›@·Ç¦÷ýç6+ð¶]é™F³ÂaÒNí”"‰Öc3 iÇ?éÕXÈ ÊIöºbÛDöx;Ë›ó÷“°(Ùˈ¨Âf•Æ;°7pŠº Öƒ¶k7}ä}ö]û1Ç9'zïÙ•>è¯þ‡B>w¾;ëÓ«èOÏ©~ìwÝâ{ÿíß>ï+¯R‘¾T~ï?êìOz`íþðŸXß•.Ú!ò??”Ú¦UrV‚‚QOA¿Þ?ý*¿Èc?ð›{G×~÷{ïƒ<„’?úë˜VÒ>°9úQó‰}óÿû³>mÖ&mÖ¿þï?ÿ÷¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;lDšá›]Dšáÿÿÿÿÿÿÿ?8F¤¾ÙE¤þÿÿÿÿÿÿÿƒcDšá›]Dšáÿÿÿÿÿÿÿ?8F¤¾ÙE¤þÿÿÿÿÿÿÿƒcDšá›]DšáÿÿÿÿÿÜÿZðƒ]ºôg«Ðôÿ/<,Œ@pD&•Kd!€IZ,ÿÌãS‰±Rµ[n׫uB‘ˆ)5ûE§Õë-1†«5Ƹ23,JêjÉa° ÜJ81I÷àßDŠiXå)÷¬"’Gi¤ä €JxÄ·E³“(1 »’RŸH÷pqùÒQÇ]=}ÆC„åçOK ýƒ`àÜ‘$ÿãDDCíС=‹"ÚPÕ§%Þ6z¡°È¨Öž%µ$Ka¬Ù¯mUùs—ËÃ^#åÞ8¤L„;Eön´ €Bhþ•t2_]™4Õš Ɇ •-_¾À–œä©â¸ìâ €rÌ—Ùb€ÃjÖ«œf*¡õì€KV‚»Fq¨_œ,WhvkŒ°â¾ÚW%›sGÙ–:9†•°ë,ŸŽf’ÛϽ;‚ûýîî®bÅŸG¥×dë…¶?»íˆ(ãG†pbRqò¡ÑDc{¸ÉŽÈÁB ê›Ì.ôæòï‹Þ¼ B¢ÎdP¬,,‰þÄx.«šŒ*0 Eà[e?$¶ÿ¹d©_LĈ::8K €FWª‰iŠ j¹…!„j…_n ;”0….P£ *’€ ò;èj&§+a3õL,â±(@ É€LYbK" h «“€@Adu"I'§€ Eö\â—í¸s0‰Žl'˜ST&D¤â×(ÃGÉ#¡{¥%8 ÌI9Šà‹°(¥“ˆCxAU=Ì0 ©pV$ É ó3O L!šó)´oØ0ŸÕ"´2‚%_]„ªr„<ˆ–*©HÊZ¶jI`ZK#5—%:—€ˆ”àÝw[…¶^tQÿ…)ƒœðÍ«Äés+Aj-”Õ§ä}syõ¬Ì6 þ¸•ð{8Y55¶½€¸`‰½´Ä7U#ÁP®ZQ `s`…L€OxÊÏ IÞÖ˜‹•rÅ–ô4ó“qmd×ü\´Ä3pŽüÔ‚ù­Bä¦I¶HÅ*fURe{Ãì— BYf–«©€ì†h)ÞÌ4ÀÀnׯ–b%`þƒÊb‘¨¥3Ìk©uS‚Â’iPI÷þºq/ÆÔaш'B•4ÀB´b]„ƒF‰°B@®¶åë/fƒz­k㊿´ž×á°Šk6 íñhw½ã3µxà[ ÿ-›a»Ñ)ãAôÌXI·'''Üàèy‹_B—¹Ø_€äh⓾<&ÈeócVIrª¾ä\vEC?±2˜µ]?Çí•6‰œ&sxlŸÝØv¼º•DOîËÞ6‚"i R7é›þŠ 2ûÝÏ‚Öc\KÚó¡?µªIˆBŒîذ?ŒL6Gbßé¦B¶j{åÙY4Š: ®Mò °VÿE#†¼r #q¬%Ä/(®»[ñšÖÃ/.ªAò‚缡ùNz¼±"³Â7(‚iƒð^ÁG¯&\«kp¸ˆK´¦Å­Djýkˆh :dòÔŸ‘†ì¢hƒAŽÿà„-PÆóйÎ/F‰q“ZÑ›AAÆéÑ’'ÙK_*©'Ô’I]ü¸„,‚¥„Q,€8ù`nüFråJ ’a“ÐQ":â¶ Ð ¸ƒÐ•dKabŽdª£)=UDöð¦W±€ŸÂ?YK’WœæÁUÊÈɆw’£1ÆÈ«FBΑ©º%ðü§/m’Ð ð›" ægÛ= ™–|Qx8r® ¤é'[& Ù£O@gï"N¸gEºS4÷ܧ ë†OŠ&P\œ„ÚŠª?½Lg£|Šc2Á%n€Œàzzrð…ݳSÍJæR•†ƒpC„g2sÇDÿû퀛–/›HMEŠâ‹¤7QB*òˆË<´ù9*ÐÒ^$å5øNàéÔgw¬§R+*}"µ©E(@79P pè,j„ØP:ä1eÄ"ÀX/i­i€'¤Hë^^Ç%¦ê¨<£é HŠ“FÔc¹“\úŠ™4Ye¦<}¬«"‹Ó®Ú ªíÓÐ.źæ%²DF5-§ÊÌÕVª‘`Äìr¹¥ÙÆŒ¯L'*>)J­bõ9•X™@2êõ.iKAfÙiC+ŠDElEdÆFË7¹FªD"´+©ðjÜ š3‘™{iöldÏ9e7¢ÀžbQ—Ùð.·H¥^¹J(Í{ ÿqp+u^^'qÌ‘yödÈjíÊ2 ŤƓƒ•²ÝbWàjvºu'ßf‹Åâ²­ªï%íù”qÆ6ƒ|Ñ%Qg1Ïßx•ÜÍMY€ÞA2ޏ]t'ÊEë²ÒFe§Y®·];λY5n÷âÝìÊÉ«÷¢„‚[(ÝmüŒ ^d] ©Ó'ÚÎ7‰Ý(!ÚVÝ=ð÷jþEk£øds)Oµ1[,j§¦Z¡Î® m{m÷b‹ßò­¶W„Ð9YPF/‹" 1²ŽüYc…5ž=þJõ@J†©õ¹2ÞŸ[«ù8.w!¥YŽ€w!Ñ­"úk?¦“g:²—Ýþ·V} vR+<£PL»`{–"gØùá%žÆË0"ÂFá¶ÎÓxÉ_£aaÕù4·’†\ ¬MÆWà óJ$Pú Á½‘’ú½7´@ÝàF×§gÄÉÛ¬…Ó ®Ö©¼†˜ü£êŒ8Š$ŸXÌ„â;×öUçÉe’òrW›«‚¶Íf) ódçœÎ™rEÁuí»I›Ó1²¹xµ€c2æçK#ôC£7Ôqßvå•h:nµ*Ç­¿[Sçö*‰]ÓˆÇ%ly#ÿ[7Å VЫ“18€€ƒ0`;ýì¡”(=U"™z ÷xÞ, òKü½¢ðû™zò¼EÀÃÓxå®™bLx'jÒ!tt‡ÿA¤nÎ9¬¢,æG5ó|@¾°èoɯz}Š-¹¶–£®t~”vÍNm6ßvú>wøOÛ!XL0LÎÙ—CÜÄ'½<ùò½YÄ®”æMRï¢×ºðÿ–GŽ×ÎUÀ‚£´Æka“ÁáOBs`=»Û(FAÌÅ.NWðú0šx7Køvô{„¨²–Ër ÷K t¤£³(Â3eóuc'£¸J/b1,Ÿ‹µþa·.³6€>ËÉÀÿ/ð6Ù$f«ÀDð(¿xòa¿~;,%CºœÈç(ĸ D@ÍŠ:9ñ=ªC>²³‡ŒZg1cé@ ¤7úÁûÛ˜‘fK’&”®û¾½?²A§Ð-'q6í²´R’½y€Ø47©¿áS¸È?ô†o?:9‰>ˆ§B-L&4Á¡ s¯_c¨ô`¸6}ar`”ÿC½D§ ä¡}a¦@L¨&ð =ɳÏ(B®s+ä¹o#<ôÊB'3YÁ3:Õ‚ÁÜë3¡iŽF¤¢n›3Æ8¬~°³/ÂÒ–Õú&"±?‰D• >;Ã^l ½óÅ`<E¸­ˆŒ‘ÿJ” z„à[×3 ©Ú:KŒ:`FK„¸:@ENŒ:~[•ª[Ķ€¨»²Eœ+Å#»r„ŽV¼ÆvtktÇxä0_ >ƒvŒ‹z”'3¼9f2‹¹ã”U$e”ÇJÑCWT¸€Œ:Y™&p\|”‡Wá8ÐPG:"Ç#¤'!È‚äÈU³¾ŽtÇ è¥ Ffœ¦Ì “Œƒ£ ‘4Ÿ°0‹“€HÍÒ°¤(ž!ø@lš§[:~dÀšÁPÛÈpØ=l ·ü‡¿é¿ôj‡÷Ñ0˜´¦A#ƒš”‡ÔÉ«ì„ÃÊ‚l>BDO3Œœ\™ƒ4»-äɉA"t¥¯äȸÁNÐÿ5tò‘$ËTh©;Œ£¶´¦+” ä$·ÜÊÂ\s3Ì{Ó€± ËÄLLÒ( ÓHšÉ¤LÈüŠÂ°ÌʺîÙÌʈ ù«äÉÜ̾äÏÌ ÌdÍÖtÍ×„ÍØ”ÍÙ¤ÍÚ´ÍÛÄÍÜÔÍÝäÍÞôÍßÎàÎá$Îâ4ÎãDÎäTÎådÎætÎç„Îè”Îé¤Îê´ÎëÄÎìÔÎíäÎîôÎïÏðÏñ$Ïò4ÏóDÏôTÏõdÏötÏ÷„ÏøD±4¢Ã²„šÁ‹æË!µ”ÏþôÏÿP¹Hji š9¥»ÐOÐeÐuЯ¾h {|GÁx€Â Ⱥb’ÿ«{ÐÑÑäÁq” gü gl¼eÑuÑA|Ê™ »‘7‰Ã×SÒ\0M5óP}Ã@%Ò"5Rõ.¢)¬Ÿà=Á7@‘3ç“>Tù0’ Èàµ#åÒ.õÒôôÆtx *©œ ŸÆÛ\\¥Às&`¨9d„¬)5yà {[¡üÒ<ÕÓ=mNïÒ )["’o4$ÐsóQ†b¾uaŒœ»D>•ÔI¥TàŒP!ð Ÿ)–9 ¥HÊÀ ý¿°óœq•ÑS¨ÁذGå$]«ÔW…ÕXeÍ ³x&¨"Ãòò(œyÌ.àB‚Ó)žýùUÿ!=GYUÖeeVäOü쿜 ,Ç",xƒ«™ŒÓ 9m*Žñ (mÖp×q-É÷ºVá?Úû“n¢›„–’(ä €y¥×yeUF"×|Õ×}å®4Ì´-²*]#›ÝG"1'u ¦q¨JáI~…؈•X¼HC‚uXG<žNm†ØÛ,u¬šÓªT·˜qFFØ“EÙ”EÃÜz±Š£¸~K–“Ð89h6Ũӽ~ce±D‹YQ•Ú ZnðWÄ[ÓÅc¤R}<Α¼ð<• ËÃ<žCXm,91{ÊESã‹E̡۰ۋy/űWØi|R€AË"áÄML¸}Dý%ÒÑØR¸l€¼=ª•©±õÛ¿\Gš¬©eC{C8!¯6™C Lý¡Q$ÉÃËÀ_h¬ `L)-Å'ŠËÀåÜÎõ\D ÆÏÝÑ%]Ú„ÀÒEÝÔUÝv¬€‘üŸ¼\ÝØ•ÝÙ½ ®<ÚÅÝÜÕÝÆYL¨qÌÝÞàE‚ !ù ,«Œ © Ž$œhª–쨾iÛ´ÌÒ°]â¯nò1ŸQÂá1,™"ÊDÂ@D 'ë3ª2²Î%@C¥iÅ”c ù‚·Ø€aÔ@á@á¸#j|~@€'$nƒO!!ù ,¹Œ — Ždœhš–,©¾h+ðÜÒ¯Íâªnò1߈'£P‘£ÂÀ8M !ÐÀi–ÛnÀ`™¢ƒ'Q”iDHb x=z$ Š<êËdO¼j@"<<\(o(Œ} Q“‘{#•P“škŽg’)[¥)¡‚"¬ˆJ}·[F¸»ºB¼¿¾>ÀÃH!!ù , ,j€ÿÀŽpH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸ü ¨Ûïø¼~Ïïûós‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”a—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øù}fúýþÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏÿŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³Ò¼ ]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ù L¸°áÈ+^̸±ãÇ#KžL¹²å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµkÕ•bËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿ%Úü'à€hàN`‚ 6èàƒF(a Nhá…f¨á†ÚUÈÿᇠ†(âˆ$6òÚ‰(¦¨b+%¶èâ‹0Æ(#èÌhã8æ¨c+öèã@î³ãDi䑨yˆä’L6éä“¿) å”TViå•rH‰å–\véå—Mh æ˜d–iæ‘bž©æšl¶¹anÆ)çœtÖgxæ©çžÛÝÉ矀*hpÝ fÇ ˆ&ªè¢ÏÊè£F*){AVj饘fªé¦œ.3é§ †*ªs{Œjꩨ¦ªêª¬¶êê«°Æ*무Öjë­¸æªë®¼öêë¯À+ì°Äkì±§vªì²Ì6ëì³ÐF+í´ÔVkíµØf«í¶Üvëí·à† ×â–kî¹è¦«ÿîºì¶ë ï¼ôÖkï½øæ«ï¾üöëï¿,ðÀlðÁ'¬ð 7ìðÃG,ñÄçTAñÅg¬ñÆwìñÇ ‡,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ@-ôÐDmôÑH'­ôÒL7íôÓ¥"+õÔTŸõÕXg­õÖ\wíõkU‡-öØIVLöÙh§›Ÿj·íöÛ‹° ÷Üt×݆Üvç­÷Þ\¤É÷߀~…ß‚nøáFŽøâŒóýõ㯣–£Wn¹ãf_®ùæRGîùçq.úèÂâMú騻 úꬷîúë°Ç.ûì´×nÿûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÌ7ïüóÐG/½O&NoýõØgXõ˜¥îýÔÚB¢ýøÝNþù觯þ=®ïþû }/¨ˆµÿýR•ýø÷ï?òúŸÏ¢…ð€š˜Ÿ%…À:p-4z w¿ ZÐR”ˆ.ÈÁzðƒ ¡GHšð„(L!ÃȺð…0Œ¡ gHÃÚð†8Ì¡wÈÃúð‡@ ¢‡HÄ""G…HL¢—ÈÄ&ŠÌˆP„‘ë¢HÅ9ñŠ£=€“–*zD `¡¾HF¯ŒhôÏ»"˜4ºQ?.É`A4“7ÚÿÑ>Á°X`äH9!@䎀œâ²€ÅBòŽŽ¦à#BÉÈ÷´„ w`c7H E¤‘˜¤%éŽÄy ’ˤ(­¶I1ºf”¨,O-JN%•° ïbIËî@†’M©¥.;¤VrÅP†dÞúب`³'Ò9¦2—ÉÌf:ó™ÐŒ¦4§IÍjZóšØÌ¦6·ÉÍnzó›à §8ÇIÎršóœ•”:׾ݰó¨P1oÏzŠ¥€ö|˜óÉOÏ(¡Ÿ=È>£âÉT$!$ hǪІ&‘¡ó¥7&çЊ’&¡ͨF× ÑI”®Ü¨HG*NŠ’ô¤÷BB20ŠÒ–Šƒ¥ÿ€Ð£KgJÓšÚô¦8Í©NwÊÓžúô§@ ªP‡JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§JÕªZ$G¼ªVƒB¨­zõ«` «XÇJÖwÈ´¬hM«Z×ÊÖ¶º•*ú{«\;Wâ’-ÿœ«^÷Ê×¾úõ¯áÌR[ò ØŒ¶°ˆM¬b£AÈÅ:ö±¬d'KÙÊZö²˜Í¬f7ËÙÎzö³  ­hGKÚÒšö´¨M­j—‚ÏÕºöµlïbÙ:U¥5%§pkÛ´·Kæ(> ÜÒSÂmÇoùÓâ*— ßX.CtëÜêæ’"9®u¦ÝŒ!Ý®\œ Þò~…·¸hÿ®y™ÙÑõ~-¼šù®E¤ëÞzVE Eo"›+ßú®Î~w%LwýÛýøÀN°‚¬—]¾‘Áް„'Lá [øÂΰ†7Ìá{øÃ ±ˆ‘Ÿ›øÄ(N±ŠWÌâ»øÅ0ޱŒgLãÛøÆ8αŽwÌãû˜Â÷ý±‡Lä"ùÈHN²’—Ìä&;ùÉP޲”§Lå*[ùÊXβ–·Ìå.{ùË ˜ÇLæ2G fN³š×Ìæ6»ùÍÓª+œçLç:ÛùÎC¥.ž÷Ìç>ûùÏ€´ MèBúЈN´¢ÍèF;úÑŽ´¤'MéJ[úҘδ¦7ÍéN{úÓ µ¨ÿGMêR›úÔ¨NõÌêV»úհ޵¬gMëZÛúָε®wÍë^ûú×À¶°‡MìbûØÈN¶²—Íìf;ûÙÐŽ¶´§Míj[ûÚØÎ¶¶·Íín{ûÛà·¸ÇMîr›ûÜèN·¬UÍîv»ûÝðŽ·¼çMïzÛûÞøÎ·¾÷Íï~ûû߸ÀNð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈGNò’›üä(O¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nõª[ýêXϺַÎÿõ®{ýë`»ØÇNö²›ýìhO»Ú×Îö¶»ýíp»ÜçN÷ºÛýîxÏ»Þ÷Î÷¾ûýàOøÂþðˆO¼âÏøÆ;þñ¼ä'OùÊ[þò˜Ï¼æ7ÏùÎ{þó ½èGOúÒ›þô¨O½êWÏúÖ»þõ°½ìgOûÚÛþö¸Ï½îwÏûÞûþ÷À¾ð‡OüâÿøÈO¾ò—Ïüæ;ÿùоô§Oýê[ÿúØÏ¾ö·Ïýî{ÿûà¿øÇOþò›ÿüèO¿ú×Ïþö»ÿýð¿üçOÿúÛÿþøÏ¿þ÷Ïÿþûÿÿ€8€X€x€˜€ ¸€ Ø€ø€8ÿXx˜¸Øø ‚"8‚$X‚&x‚(˜‚*¸‚,Ø‚.ø‚0ƒ28ƒ4Xƒ6xƒ8˜ƒ:¸ƒ<؃>øƒ@Ë„DX„Fx„H˜„J¸„LøHýÕ„ç_PÈ>O0…Vx…X˜…3Ö9ZØ…^H¥ó…b8†dêv†h˜†j¸†l؆nø†p‡r8‡tX‡vxk¯ P{Àˆ;u‡r’‡{¨ ‡x0ˆ„8'¬ˆ|˜>õˆ¸ ’¨pRš¨(‘xˆyð‡ Š£#°zH–˜ð‡–ˆ ­ˆ €‹ÿx ‡p`€ˆ°  ˆ Œ RÍx‹ŒvxØ(z0`~pVç´ŠñAÙ8Œ³xŸ8Ž€0ŽÐw ˆŠHØ˜Šš°Œ½X0x0Ùh‹éX°É‹C°_Žî‘ˆ@Œ ü¸wP莠瘌ˆ¾iz˜ŠëŠÐå˜ p â(’v Y²ˆÿ¸,É\RXTÙ•Èú˜‘%©“hÐŽ-Y’u0” à‘¦(“u ˆõ¨‘w’=iŽLyŠ5 V9ÉüŠVi0i”a‰ŒG™•°“ÿJ‰‘ˆ‰ ‡Sy öø¿hŠqyÖhŠ4I¯@_±µ•ꡇY”` ¶(`˜Î¨”3YuÙ–ГnÙ”ù”“y˜’g)–Óˆ—V©—Zé—è±™‹™™ƒéŠì¸ˆ>)—v¹–’™–­I™XI™s”9V šWi²HBi–y”xð¬é˜®iœQC!ö›a9˜Šé‰À¹U¹‰Ô‘%ù‡Ié»É˜Å™Èù˜Ð˜¿‰™²hy°v€Š¸9æÑ•49˜hé—©Ž%逨–•žèy•âY‘èYê)Vìiñ铃©/œ‚ù–Çxœö™ŸéIÿ 9œPÉ›N)™˜  ÿI˜Ñ©UZ ¹‘éœY“ÐŒ@‰‰iŠŸlùŽºš)+é•uà’ ð1É™éÙ¡Wõ¡åA’‹ø‘byŽè•ì˜ßyŸ­é¢3ZÙù›Øx޶ù£žyBJ»8Œ±‘Ãi‹`0šI¦ ™•ù¢ç¥ÜÉ“Ñx8ŠsšŠÈœÚ¥é!‘ÙY Ë9K|:?Cɤè‡4¨¤ƒ:ú–‡ §¸£¨¤££Œ¨ˆh* ˆº;”::€Cù‘¹ˆ ö†@Ñ©T?¨ºª¬Úª®úª°«‚ÀP«¶z«¸š«ºº«ÿ¼Ú«¾ú«À¬ÂÊ«²Z¬gB«Èš¬ÊªÌ:¬Îú¬Ë ­Òê¬ÆZ­c2­Øš­Úº­Âj­ÞúÜ®â:®äª¬p®­êZ®Í*®ßú®Û«ÃÁ®ÎJöªô𝽠¯üj·úÁJö:°$pµJ ÿjúj«K°û«‹¯¿ÚÛ »®íÚ«]Ó¯ò‘°]°«F@±k°€òzµˆgú±ë« K° ±÷ ¬"KÛ²Òº^hä±\±¼ŒÂXöJ²&˳Tà{,‹³» ´€8´2K‹±P³7Ë´Îê^ed´K{°I`C«'kHk¯ÿJÛ³¶ª°T[®`û°âjµXû¬ZKFÉ*c{µÁŠ´]«¶´ ¸äš·n®p·k{«õEÌC[P« ´·º[«@¹p+‘û¬mK²»jŒ ´t¹Bp«µ˜¹%°`«më°»°k¯ž+¹—[¹¶{¢O+ºUÛ¶Ћت„;¼ºJ¸¢«¬}ë°S‹«òغŒZ±¸ê¸`Ê›« ¼–¹åº¸E´¹ »Rk£ë·Êº°Xµ³[«`½Äzð«·ºj滣×k¾%P»üK P»‹»ö*½¶‹¿‹‹õ+»ú ºü»¼ÿöë¼²½¶Z¾ ,¿µz¼ œ±À¿¾s;DÌ¿ ¼ܾ››¾¶ŠÀ%p®ï[wK ܼ·:¹[ºa›º ð¿+ÌAk»ÎXÂñK{(¹C`À$LÀ¶‹Ã…+¬ÏKćY¾EŒ«¡;º—ªÂHÌ¿W;ÄK± Û¹Q,´L®â+ÂeKÄP« 0#0`@¿'<ÄE Ã\KÌ»«B[¸l¯WkÁR›® ‘Ü«¹H|»ÐÇý«»³ûº)K¾ö;¬Ṵ%œ¬yì«^Œ«{,iüÄ6«Æ›œÂk«6,Ÿ»¹g ÂæeDiÈi‹¾f+C|‰ª+»i\²ÿ2|ÇÜĶzÆcŒ¹÷*Ëü«À|–KĦ|¹ÀK£|«À¼¾3;¬t̼ZɽúÌî;ͯìÇ´êÌÊüÅÞÌO|µ‰;­!,Â8lËc»8¬¾î<ÌGœÈìµóËHÉY|˜a¬·åœ«pì·F̈¬ÈY,ÈûlýìË¿zÊ%`¦ÖLŬÇÜ\«Ñ¬Ä7˳ű+±5[°`ÎdÜÊ®¬Í¹šÌ´Ë¹f««Lœø ¼/=нÀÿK²m̰ì¿»+ÌÓYÌ¿4œ¸€Ü¹"=ÃQKÁ§ìÒ´ºÃã̺ÿ+Ä ¾#]^Œû¾½Z¶{hÈ Í»½º|Ï̪ØÌÈÿ5­Ä©Ì«Ç,ÓáLÏk½ÀSœ±\ ÔÐú‰²ÑÝÔ¹ªÍI-ΡÏÿÈ¿¬ÑëÕç¬é,D~ÍμºÇÁXÑ ³=¿ù<ÀøèÓGpʯ{Ç}È=ÝÖÝüÖd͵>°ÍhÕŒ³šìØÿŒÑ#ÌÐWÌ®­­‡DÝÜÂ>;Ï„»Ú§Í¾ö Ó½­ÖuLg\Ô¨Û5K»1ÜÑ Üþ»È ÚË<ÎäšÌAMÇG«5;Í}³àŒÊÎúÄ÷«²—̽â-Ò¶C'JÔjÌÆó¬Õ>mÑéûÄÊkǼÜŠœËœl»ø}ŸØCÈ%LÈØmÒlÈgìÜFMÑhlÉžüÝÿ\˹zß© ØÒ¼à~³ÐÈ +žÙf×ï­¬ŠLÁç­C­=Áó¬Ò¦]ÁólÁ{(¸½šá+%¬È],ÝLm¾ ³><µ ¶§ Ð4î°NÝ×ÂÚÇ>ü޽Í@L¼UëÃOÛä À,l¾[LäÌ× }¼xå¼*ÉŽ]â&¾Œæ;Þ&ÜÕYœË2^Ì{Û·ªÁöŠÂµË5Ì¿È,»È}âqþÞÝ-äC®ÅÎjã ÁÛ¾9.×|ÁÒ]pN°|]×,âÉ:â+æc®£{Ö4íÜĬØÇûãô}²Ò[äy¾ÞNÝ‹ N«+´®K¿ç¸â­hº  È•íÙ_m£ÿJ޼Äí²Ñ¸Îf^¹C܇n¾ž^º ‡ûËÞ;åÖì¦yÀv-̶^çaaÛ–ÜOPß]‹¸…Íí²Í`×®íL î[àíÝnî瞫֎mºjä®èžîñžµ Öj àøžú¾ïùŽì^àçTðîX0Èü^ðü®Ôóžð£­«ëy‡NìÿŽíP ð(û×»ë ŸñŠ»§oñ9¬knñ¯ñϱ&¿$$ŸòÓzò,_$*ÿòÔÚò2?ó4_ó6ó8Ÿó:¿ó<ßó>Ϫë蜦@¤×˜©ôI›Ñ Á‰¤> öóP/½© `˜zô}`¨Á ô4¹ˆ; ÿQ?ö¾1õ­§}@SÞfO ^/¥žË˜@ötßmωMŸœHp÷ÂðöÍ™Nuø¸ô®€ö À÷]ˆï ‚ßø•ð¥°x÷Õé“1:µªÌΆÿõ¨ù¦§I–:¡2Êõ~àŠil𰍯(ª^IJ |™@Ž?û‹@ôŠø‰Î9ùþ™Ÿ'¹¤{°ùiõHoŽV?Œ†™p_ù#)©¥¿øß€Lo‰òX§ºAk˜´+ö´ßýþúŠ,ª¾ùœv 1ÚŠÛ’¸ü´¨™Ö9þzP¨Ò/¦š€ú¹È‘3z£*©ˆ[ @"@‘Iå’Ùt";Qé”Zµ^±ÿYí–Ûõ~Áañ˜\6ŸÑiõšÝv¿áqùœ^·ßñyýžß÷ÿ; Ž4Š :2 §;–.ž›ˆŒ"=$27•&!0-…H9–@Qqsuy{}ƒ…‡‰‹‘“•—™›­T ’(ZO WŸ.¯:'¬Žn™4ŽÀub-’H5­k•È×ñŸÄ…žûýÿ8`Aƒ&THÇ…w²L1Âvî*D¹)Á4ï›,{§Ub'_,iH:1’a•h¶@擉jaM›7qæÔ¹“gOŸ?V /É=e[yÑ O™fLÿ²q†˜ãÌš¦Ð`¸øJ$)³ü$C1Å\d SÌ1É,ÓÌ3»Hé" †ËÑœ5­rKLŠØ† :11à³ødJ‚>ÝlЩ œKJÈ&¢ô8*hà¡5â’½/7AÓÒK1ÍTÓMQ»€’?3xìÎ@…0¬O Æ«n4åPãÖŒ•°wü¼ª;*vë­¹ >äÐ ¨±³B±ò’ÒJ9MVÙe™mÖY2sˤŒX08VÅg±ÍVÛm¹í6@"ôT‹ZkwñÖÜsÑMWÝu zÀ•µT©–\\Ø­×Þ{ñÍW_6ÿ>}u>.ç]bß .Øàƒ½¶F¶Æ Y„!ŽXâ‰)®Øâ‹1ÎXã9îØãAYä‘I.Ùä“QNY啵 ‰å—aŽYæ™ép™æ›qÎYçmÞÙ矺㞅.Ú裑®—褙nÚé§rXê©©®Ú꫱®ê­¹&#ë¯Á[ì±É.Û쳿ìZíµ·@Ûí·áŽ[î¹é®ûa¶ñÎÛî½ùîÛï¿üî¼ ïZðÃO\ñÅ®ðÇ o\òÉ)¯ÜòË¥ƒ\ó1ïÜóÏAïÍIZôÓQO]õÕS,ÝõŒY]öÙi¯ýˆ×q¯ØöÝyïÝwÅs>â߉/ÞøãÿÉ^yƒ‘oÞùç¡7mùé÷Þúë±ÏÞ ê¹¿WûïÁÿøîÉ_WüóÑOõòÙ?Wý÷áòöéçVþûñÏïúùÇVÿÿ@±õ€Ìà˜@kÃSà!h·Nw´àÑFA ƒô Ù6µ}„%”‹Q˜BH˜…Tá aCΆ5´á q˜Cî‡=ô¡v÷C!‘ˆab‘˜D%JÂvKtâyxD(N‘Š1”b±˜Å¶‹]$žièE1Ž‘ŒYã ˘F5®1mg„!áG9®Åoœãñ˜G%Ôñ…zôãåÈÇ’…ÿ£ QhHE.’„ˆ!#!É:2„’´ä%ÿGI b’“TŸ&)èIQŽ2{ œ )Q™J䙲ªtå+¯ÈJþÁ’–µL,hK]îs¸, /ÌÅù’€Â4æ1ýFÌþ!“™Í„›2“èLiNS-ÐD"5±™ÍÁY‡Úôæ7·ÇÍ‚“œågË™Îfž“ítç;áOyΓžõ´ç=ñ™O}ýôç?P” 5èAšP….”¡hJ€ Qˆ^@ #¨Då£Nn”£¥ÝC/:ÑŠ†¢õèIQšR•*î¡(0iFGÚ¤—®”¦5µéMËÖÒ Á¢÷ÁéOÿT¡Rª¥h@O‡šT¥.•©ùЩ|ÊpTø´©U]ZC±ê…€ô£€hQ‹š`GV5ëYѺR®Jt0âX/êҴΕ®uÍf°ùlu)†p*]`¬Ž²ëa›XcöÕìĪXÉN–²©é˜pˆ†¨²õìgiQ šÐÊX³¼`¥AšÑÆšg•€-ÚÑ•¶ô ¥sPúÒöt2-ž‹âÍŸ6õ©×jHsÕ­vµVWe"A{‘ùȯ¶õ­±àç­b„ÖMÆõ¯]çß¹ÔÀ6¶­×,ˆ5¹¹ØÇvö©! f ˆ¹6e~öµ?­ê©4ÛÝn´Ž:€¥nXÛÛå.´¶­Ans¯[Ïè®v­Ùï4»»<Ü–÷½­Œå‹àÃ)ö÷¿Ìj|ÜÉú61ÀžðÚ!ùj), ,j]ÿ@€pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|.4Ùïø¼~Ïïûït‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”Z—˜™|•œžŸ ¡¢£¤¥¦§¨©ªhš­®~«±²³´µ¶·¸¹º»¼´¯¿À&½ÃÄÅÆÇÈÉÊËÌÍfÁКÎÓÔÕÖרÙÚÛÜSÑßÝâã¨çè ‹æçE òäþÿZ»3à BFdjàBžçe@¡g’€jܘºtAøÏH’èÖq\ɲ¥ËO‰(ÄÄn¦‹&^Œù²§Ïÿ1æ,°‹Á9¡ˆF.(€¡d ÔpaÓŸX³jÝ:P (bZ—!» 31̳i"¬†pãÊåJ·®“ EŒ¹HÃÕ%øØL¸ðàŠb/!¤x'ì¶¼%(–áËt"Rá…!P'0ÐÇï„{&4ØpÎÈi|©Õ^áðW‰f̸sëö‡[>nóD.‹§\‹“7í^Î/¿dwFÞè Z?ÏGr3èý˜>rá(óóèÓ×êý{Ï „7Ô#„qÛÊrͪß/îööê -°Úü%Ú¡Wÿ•6£©ô]m®UEaCæñ§á†FÂÿÞÆÉç~ñÙá_`„G‡,NãÜz¡xb¸h§`ÞÙhmTl)!Q-&©ä’n|èGd*â1œNDé˜61©å0/> WF(X}H‘€ŽäY:dxF)ÁgHl`AT[æ©çžV8ÉGˆy8™Q4SAÅÅ碲xDÒ|(Zw0 ÀS:²FÚœN`UU€·ŽÉ詨¦Š„Ÿ{04¢i–dUúácªæÊ‚éH(„DzºÀxBˆV@èx$už…Ú¦V«ë´ÔjÉ*}¾ý9hPþñވՆɋH˜c@‚– ÿ€±È*‹æ¢6¡âÖkoz×â¡q} ¸A|ïÙÇÇgÄÝkð!äQ›ëZŠ)ƒ¿ž)¼Ï¶{ãÁgLW¾µN¶Oâ§ñÈq$lñ¶Åª[àEœ ±ù0ÔÅ›Nœt1É8ç¬Ç÷%—‰cŠÍ'ŒÎD›aòèš¡ï ‘ã˾éƒò¯?Rˆ´ïþz§´Ewíu2ÞÈÁŽhBw.hœNÁÞ4»·Ó´wO;@ÞÒj'®¸/Tz (p Œ 9 !A_‘+„(~C/îy ‰’:êJvlBmz:éLñôèN3kêÃ`~nÿûíÜÑ´kRÖꇯ¿þVç\¸_néFš{À± /ëh¬–u=O3øÄO¼þ(gïÀ¶Ïš‡#oüøä'¢ûð7Õâ€h€A~&F$Q‰<•oÿåpÿþücÓJ·à Iÿˆ…ìÌŽ€L /ZQ“ P4‚;®V%5Eð‚Œ…& "0ö!ƒ´^g8šð„ ð  ;‡Bj@“²øZHÃ6b…´¡wÈî‡ô¡‡HÄ"Jˆ4¢—ÈÄ!"MŒ¢§HÅ*ZñŠXÌ¢·ÈÅ.zñ‹` £ÇHÆ2šñŒhL£×ÈÆ6ZÑQGÞ!Üá8ýÿÊÞs"þC ÌЀ ¤ ›Gˆ%BzJäHˆe‘äRƒŒ¤$%Ù¥/r)MÕS¢2 irŽ<ÂÀ¨2)ÙLò”¨LcÂbĈx‰Çaˆx€£¤ò–¸cèlD§¡&z|j¢§)× –ªÁ‚+—°K.Xp#¹™R7\ZóšWLt¤Ã,SFì‘ªöIÀˆÏFµ{Â3¿‰=*d›ðŒgw9:U@@‘Jv·,¨As{P„È9Kzx2‘´³Â:W'£½ýÍ¡MB3åIÑŠÖp•³M¦“´†Am—ó"èHâM")NXh4ùRÈqš&fÿ©LQXIÄALéb™™Ð´P˜•3 Ë,‚œz)Á­)´œ+¥³Î™2Îô©PM`KÝf¦Ia§RM¦ŽÒ©NUlT_%•hØ•ftšY‹ªZ×j<^ÅeÀ:Ç„E¬†qBp$uˆ Ô°¦ì®eEêYÝùU¶ö°]c[¥úI¦Í°ë?ZU‚š„‚Á¬7ƒ¨4ÛN^"ö³ M›b}ŠÐmÆYÍëV¥9ÙÂâõ ˜eéRmz$™…ö¶¸Ùh‹)T•!¯yPƒéÌ\[AÖna¡G’íl½3Fæö¹ÐÖnÿb³Íp´m¥êsDJ¥ÕNl€)“Á>!Y5Šÿ®z×›ªÑòój™,Ü”úŸ €/4ß!•ß¶5WÁm€pç(aB«ÀÙÄW~n 8ÛYö:øÁš¨IG‡Shž.Ôü줠½Ø2eÔ!«j™šRy˜F$¾élwá»=î P> À<ç “è5fûJê|¸!Ý›q0L…|øn¤d€m›à2fuôÅP޲ªò' #KùÊXþœ«lÜ,{ùË÷š`dŸŒ +ƒùÌh—I8 3§ùÍpfÔ ûøGU¸9Îxγž÷Ìç>ûùÏ€´ MèBúЈN´¢ÍèF;úÑŽ´¤'MéJ[úÒ˜Î4E ©Ž©‚Ž×)(ÿ…LfM›úÔ»b–ˆh~¤´o[$ªgMëN0¬(6%„R˜B!¨He³­µ°‡ÝŒv¹”5M]‰ÍìfB›Í"Ô/¿gšóö9Ç„[IõF\ ;ûÛà>´$Nîì÷›Ø §¹[ÇÝWŠø¤áŽ·¼·0n{â3]Òœï‘ë¦`øÔY?­Ð§`=b”Îûà—(òX©p_7vÙí‘e'pˆ)|O¸Æ5^ÓÃÇ·N‚Ë,pâ¾´â ~–—®·ñ–»\©Ûk™UÑa*Ôžì›tõ*Ê›ìç”ÊÓ/zÐ9 ¼¸ruXêz,gÜ5[¾B¡çX¯Ð§¾q÷š«£¶ëÍ}äÿšÉ+­Tû¼½MÚ¼$–‘]ú±Û½„é°Zìpoöt%›#S­¬eÒ1¾gì#м=/6׆f¶ßê:Ýß‘y¬3áOý—S¹úØÏ>¶¬ýî{Ÿ b~[©¿Oþòý(6¿ú×Ï„9_Çì¿üçOÿúÛÿþøÏ¿þ÷Ïÿþûÿÿ€8€X€x€˜€øgRç Ðt ©àVÿÈ×Apõ0mC¶66cWÐ }%ƒvG‚"øà~ÇPØ‚±0U«vH$Ap"DRaðODàV`ÇÄcZ'=¥l‰ç‚FX —qr°k™4K¾ÖI âM4"b\Àƒã¢wr0„GØ…³`l+HP×[VX@ú _‡X k£Ap^‡ª0µXj¯|ÓCÚ¦LÝ–†T ¢‘4UH|j 1£×M†uyxÛ¦NWe1ޏIг'ž=Ê}p<Àåd;õŠ`©¡Ø3zU2) ¦c3ÆrrX‹ôæ<ÑÖˆëVRFÇÿœ‡‰æ¦„`Åwmón¹öšÑYesjçRo(:Ç=]5CèÅ{v%'ZxœòoÏAWúPf‡HaJ.…b1G(:g]51 sH ÐQ£×dr55ÕsÄh‹üHH¸Hn÷F7û¤o8øM2/@Ø~altŒw$fÖ%ý6b*цx×#Ù[ý\KðqU„RÀ€Õƒx§dgxSS|©1ï# ðyu§0ûø€%`gQK¦™äM.s_œØBéY14âp†qÃv½õ•ˆNUpF!/RnS|Ç<9får()èÕx C‚QW'µ‘#ÿ%\˜ˆFÀ…[G†ÿÑKÓ‘Z¡C’Cy—;¨.¸æqYww§Hrufr®ñ,C•àÕ€D‰!:ÅŒiRr r}‹øx)k[iZoYˆDà–‰˜AXŽ PŽ\b¹æUvÃèiA…™L³S^ ˆxùšXãcØóë†vŒ9bj',]¥™ IŒbåšSàƒ„è•sݨIÚ!È)Y•Ù™Cp‰–yÉ™Íù%º‰t¸×<"ù¿ôjmY“i•\É–Z¥?„w‚°™ž98:E,žRWJ÷Zz…Nw^Ä-RX&ÊHœ³ 9"$Ù!ÇÒ¸×0Î…r$\Îi ÓY’dzTæ™.ÿ—:©!,›¯E6ã™ä©4 s4†ê)”Vçy¬;€•c¸ÙuÄ5q¸FÆŒGÂÙ¡ìx'—Z…ÒÉ&5ÛˆŒdiv&‰¢N€•Ðh’ žÆµ¡x¡®8a<è)#z¥–© sv::£J1ûø¥·xZÑ™šâwÊ8p&G¶d;ê]âz×£8¤ëY¤oJ£$Æ}€ùpø–ÚXzSz’:Š¥¯9wør'٧æÅ%¢cYxž¢. j–ÑCzej\Õù‘¤n:–‡z§H Gº§di3döŒ§9˜?¥šÓ)…ú¤ˆ:¢‚G]Kóp ¶žÿÛP7K£9)'yu7gXsÚÅ™)÷P,*‰%v©¼JªmSŸBJѺM¦1žÇÓ#“²ªA YG0“j'—ïB¨K€¤µ ›–GUñe¬›Çõ%“Ês|snÅrz©‡“ œÐêïJrö…7­) tS;#G„yn Ú I°*|ñÂWêÚ¯ÒŽ,ÖTŠ(¦o£ “ƒª]“Õ„ëšž¯Ga¥$gX{ªSnúX¯=¶a…VoÅê£-[›÷ˆotb3xêjs•LÍŒDÚ[¡ÊwrœE»dE´žÂW¼bn›bUê½–ž)¡t<",3$ôx®ÿ${{›²r|ÊScÆgm{X=´Æn@¶Ôké]E9¤Ëg=À㥦é¼â¦Ç‡ˆI[­R 6+LúªUq:&Ë­ ‰Br!Pan_{õ14¹#û¡ ¶¦¶¦›yºªÛb|ºº®‹[áW\ã÷º´»Vk–~µ›»ˆå~ሞºû»À¼Â;¼Ä[¼Æ{¼È›¼Ê»¼ÌÛ¼Îû¼Ð½Ò;½Ô[½Ö;yD—¶tjV3j¤1»×¾{B?›ä¨H6(¾êË(IxI¼pOlQ¸¾ô›'`ØJĵlõ»¿-RovXKÖSPÇGLqÛ‡³ñ‡À¿ Ü¿ÿÈM«aÿ¾h{Øzùk§:»ÀŒV Þ¤O¼Ú¹:éÜæ› Ù{œÂƒq¿ §võ4]YM+ú«#å”z«Â8¼ÂziIJЗ¿•w ©'WP)7'†iT9œÄ[ƒ³9sKs›\'G·›BìªD M?§ÄZlÙûrŽÈš¢L·TÖÊs÷­[œÆ?Q¢ŒÕ‰F*®QÌc8a’©Ævœîµ¥dÚ¥«%©ö ©£çÇw<Èãp«tǨùœáºx5Sš„üÈ¡¨š«I9­®Á”´›ÃÊ™ÜÉ.âq"+P™×TÅyPc7÷yùUO¥×_¨÷_ª×¯{ëÉ´l +Û²ç²ÿבaG‹´æ|7;ÁWËÄ\ d§5Ãw±’·ôbˆ;&ÈEìaÜ#н[YYÌØü©›ÍÜŒ3­ÛÍà,.±Û„á\Îâr»üjÎê¬+¼+CëüÎðÏò<Ïô\Ïö|ÏøœÏú¼ÏüÜÏF´YÐìÏ­ÐÐЩ _ÀÐÑ+A­ÐžÜÅŠÀ½è½y‹íÐ^ÑÝ,mÒ2lÑ)ÌÄ2èèkÃÝÐ_ð pÓ'm˜9mÒÍÒ8|k<|LØkœ$¿‚‰-°ÓßÁÔ>­À,¼G\†MÓa°Ô==NýÔûë¿ÒÀœ8‰Ò#YÿÔcÀ˜Ü­JÍÐ"ÔBàÍÖomÕ¿bÓpÝ"x¸Õ#ÕC Ò×Bà×€Ý×|­6ÝðÑàvmÐyýdíØj ÍÕ ØÀè¶‹ÖN1ë³³<Ä%fŒþjð×8ÍØMØsíÚ¯=Øð®Á׆=ÒØ#؃-×°Ów ÒPÛq Ù³ÝÛDpÙ"ð×£ÉÙèÕ÷Ä>ÄgxB_$7‹ܛŠÅ(‡z´ÑÂ}×r n=×y}ÓwMÒ<ÍÞG`×ë=ð-ÞêmÛ±-Ü ÛçÞ >pÞ­íÞÀß²íÜÕpêÂØÃt|ÖÿÑü”ß«MذÞã­ßçÝ×GÞí]ÒÏÁ×°ÕÞÕ4âÚ[ë mÜ…½áú=Ò¶]ችÒžíÛÈŒoŽºã¼s…Y'H<"]Mù]à~ß”Ò!GM3. ¾ÕEžHî—=¹ýG äLþâtÕµ]ãèÒUU›a¼ušbœó[ÂWü+Y\Õa>ÛçæM׈ÞÂý+O¾âÞáHÑrýä· Ø¿ÝßXÎßÂ}åC°Üt.æˆÑ¿âžØùÆä9ŸéËæ› Œ^ÞunäN×#NÛyå‡MQ^ê‡~Ð&T;Íâ¡>؉®ßÎ鎀lŒuÿ\Šæ`wÀê¢\°éDpÞM.ì—ÍUæÎ§ÞçEÙ€.!Nè,¾ÞŽ=ç­è±Mëµî†lG Å‚–, ÈŽœMÞés^ÞÁ=âìvNêÌNѨ®çó^Ø -èƒ.à…ÞkÒîrÎí4¾í6žb6YŒ9Սм´¼Þ擼vVÑ"@äþŽî_à_ñôÎïÿáõíñ®ì#=ñà­ßYïœ^ñMò(OðØí_xùvxÉJ5ŒÜ]š\TÄ:#.×"=çìÛ±^à#>ê ñ¦þñ,þç0Nw-±Âèôt-ôæ2^ï.ßÙÊ"¯¥Œÿóz²ª¬7úEzãÊûºþt.ܯ>Ò@‹ôŽ×ê=và Þ°&÷7mßDêÍÍ¡¾Þ†~÷-ØC/ê[oë{ú˳ÀèËt ÌÚHs7\¯ÞÚøÍÚç ROÙëÞÞºmï.øªßôô`÷PÀÛ"½&¤ÿ×yM×ÊÍÜÿl›Ì6=c-‹Ì÷Ëhû|ÑgÍ©-AÿÍÖžõÌoç’½Ükíü¦ÁÛ|AÜ´Íú…øÚÀn‹=ýK/ÙË/Ù¸Oؽٻï‚ÛÌ"È.ÇøžÜ²¾þˆúÍ,RåR»“õ$áXvã’Ùt>¡Qé”Zµ^±ÿYí–Ûõ~Áañ˜\6ŸÑiõšÝv¿áqùœ{qh† IàA÷ÿÅ@@D:*¶ E C¬!#%')+-/13579;=?A=)H öBU× ‘@¸Z[= “Voqsuwy{}ƒ…‡!5 &H-.ˆ›™•¸> A¢k;®·¹»½¿ÁÃÅÇÉËÍÏÑÓÕ×ÙÛÝßáãåçéëíïñóõ÷ùûýÿ8`Aƒ&T¸aC‡!F”8‘bE‹1fÔ¸‘cGA†9’dI“'Q¦T¹’eK—/aÆ”9“fM›7qæÔ¹“§= ¤€2˜j“Ÿ¤2 (!‚{ HÿÚ“jU«W±Š<´-L¸ò1¢',ª¬gѦU»ÖßO àf@ ,Ø0 k!Á .,ÐË–paÇs[dn¯š4 †òAbË—1gÖügî["HQP:€‚ÓdQû`zBƒ ¤T+x*¡5’ŸtÞ¼›woß¿¥,þZè²–& ªöð°ž³D…ò’ tg×¾;UÝÎE¨°Àõ¸‘HÝ8°¤ e6:î%Û—½{ÿÿ$I¸!{l è½æ„ø.¯¸mº%f 9ëø Pà 9ìP¡h :&ΫLˆó&("÷`¦ýÿ¦n* ƒ ï> øòPÇy쑞­Â20áÊD~R ˆëÚ+®” Œ²Åú&d?dŽôQË-¹ì’ö€ ®!4¨p‚3«Ë%d²,â°1¸½¬ÓÎ;ñ\eÀ0 µábMç†`r 9£˜/ÏEmÔQ?ö\Â>“d³ICÂC¢È€! UÔQIµ"Ò¥ T3P@S$bÅKØ£Ma\‚,PKÍU×]C=Õ=ÜȂθ ˆ0Ö¹Ó=-]Öˆ"­Ã±^©­ÖZ}-¶OA0>SøØ—@š$RÒ¹qÂr!2ÅŽɳW`V…MIÁ{óBŸE' è \à Q¨•Ž'<ãÁÀc V4$m«A@ù|ÂÕ-j°VdÊOñ0•Á+˜ëâÔ­ü7À.‘‰ÉÞ§’¨¸aiëXS•8E£ HÐRB´…ðf¤S¦{›˜F5:DwZB‰Ì£Ä8ÂjJ7œ]„zX! ØÈ!ÊQÀˆ©CØI2$ÿ טHE„t]QQ‘‚r¤JÊI}Š’”€(… Žæ>ù1`ëB¶AæLkŠoDà"Q™J}€)qÊØ“Ðd¯AÑîRþ:ç4-4RŒ–•ﲨJaÓ' a¹âYV’–‡ê¡¥ÒÀKêíáË$1±™Ít\L“’å ÛÅ0ôïrâ4C ð”¨Å1eàÑæ;á¹McRR[Ð!¡«XD>Z]³HüžòŒà¾Z ñ4èA¹ÁÍ÷ÜÑšÂZPÓ·féǪbÀ K. ÓŸïûL2Ö‰P‘ŽTÜL' u0p‰ VärYüâ¤.}(*ïJ—¼HRZ€ézUºÿ„d æ9o‚8êQIšT¥ªâü×=Ã;‚¥ ‚§p#QÖ°²|’I^”›ö«ÚŸ`eèRÑšÖJ˜ÔcPÙØ í'V€º§sBI€éœ°°°<Ž‘ÓZ'Z;÷dNBzÕ›¦VÅ.v6cìc!»™žE–²•E ÑÄOËn–³2qÚÂX×YÑŽ&W;ÍçH›ZÕ®–µ­uíka[ÙΖ¶µµímq›[Ýî–·½õío\á—¸Å5îq‘ Ò‰©(+£(ä B¿äN÷¶Dé%P”`R3‚Ôõnm$—«NÂ.xÑOiúò—žï»í]í3µ rÞ§ƒîµ/iHÿ½ø–½"‹k(õWP+ÌW€^½ï!›_úTÕªh”Ðr¨:ÖñRÀÉ™gWœaµ*¸…Ñ›£ WöÜPrd -5{%aXÃ-N*|ñŠ u–RUUŒØã”G®8ˆ.ö±HÛ8O| ªâ*bñžù„ ë‘K’Ö¡OëÀ°Š$Áy©ñ‰ËPª#SìIWF™Ì]nhË&(=E™"”+-ÁÚd '¹a-ó¥,ä†!PX¶3¦š¹Ïí6Çx6t6›zäóQ*Ë'+‰×COZ ™)ˆŒÈæsVÖlf%MiQ§0ÑQ­R°hÉPhHÓa ì +:€Uÿ;9££¶õM*Tn}V[ÈL^KO“E˜8]žš©²jú€›Îëe·vöúLjË>y|+˜S­Úª*è5(Õc$9éÁgwl[‡×`/6$»«Â²ª²¾F÷¯â&÷½ßéX|ïû»“å÷¿…‹Yj&à×í|ž–Sƒ/œ·¦UF½q‰Oœâ·øÅ1žqoœã÷øÇAr‘œä%7ùÉQžr•¯ü ¬Ôؘ-Á¸çšÆ’ý§lÜëÕœ6Ô,÷ùe¦Üs:d÷¼«3ƒ±Ã²ÝjËîçMïM ü‡òs/éÞ§³ TNU€¨{îCóZít±#ÆÛƒ´¬õÌ?`I¦ÿ£r•óØáž»,Ãæ¨¹Q2ZÃîú±ŒÇsÆú y:†BÚ‘Õ 8ä'ãžø¬¸Ï•ìî !l0O8Fg¯/5£^ÎSCHl§âAÆÃÉ…E‹a¯×CVS—¤¯Vòz›©G)\§“á‚ÎÐïž'eo‚ŒSME"¸¯ÐÖña—v(@ÀÊ}ê´©Ç8ÀÁóžúØ3jÄ«|8²ê€tDòßïsünàÉÌÓX·ABž½úígIÐ)a?C³’]Æ$Ä5™d#¾ 6+ª+éF©ŒÜ¯mâÌ\)Í,)–枤mÇp) ãϾ —‚Odìcú pa¤fi j™ÿ™M Šï 8&¢êÌÔžš`Ža%,íwMIèi|„Îï-ùr þg TE§Š,‰ð$fpÌØŒºïÈZÐ *¬ŸÌI¹ZÍ{JùŠð 9¢Ô0póì…ÆN ¢`.‡r¬xbmÖ0¦Ö°àôhIqÚnš°ð ?"×PÊwT ¥~í†øŒÎ…ØdŠØEMÜ^pj‡zl iûfƒ¦hìT1 •OÚfDl6®Í9†òò*Þ¾ð9’/óMÂìcéTïMщ¬ðÜ^Žc"sNã~ÚÍ[ÞÍ ¸íuäͯBÑ •¬î ëîhzð…±%ôm‘küí•1hÿΚn¡qf> j¢±sÆá²Æµq¹±½ñÁ1ÅqɱÍñÑ1ÕqÙ±Ýñá1o°¹¶‚½˜‚Ÿ1õ!\Α¾"éTç–öq êxç.¨Îɬö²! Â÷ ÃòtÑ!)òGæ.ðÑ —"Àlãì´°"Er8ÌñÆÊÁ¤ >"Ì]:.LG2&¿ä"ÅÃÃÄÄPjÄŠŠõ±ò A€ˆÅdr(Ñ"HŠjø¬è”:EüÜp§ˆ2*ÍÁ `û6MÛŒ ú,ì¬t° ˜ìrÊO*ÅàÏUšï›lÐѶì’΄ýúHÿÄl,åRž0ÍÌÿ„WÐÁê)}rr.³<ðº®2/ÍPJ0Q˜20sfp»jþÐÓüò-ã«11Ó´P:Ð^†c¼¯ »`“  £2ó4ƒá1Ÿ‡?¼Ð ‘% [ÒYé¢úˆÐ5q3äpvÍ[P¥ðð¥l3¦XèѦâ…Ù,s³9#!ÚžƒÚRò‹*,°r jÑ¿íÊ>Ñ9½sB²­¦-ÝZñ¿æŠ¯d1kŒan‘Þr‘9¿3>¡å³>A"í3?+¢R?ýS"¦Qáþs@!Q‹@4AtA´AôA!4B%tB)´B-ôB14C5tC9´C=ôCAÿ4DEtDI´DMôDQ4EUtEY´E]ôEa4FM‚ÛÞî×*HFq” hÔ”À-G}ôG4H…tH‰´HôH‘4I•tI™´IôI¡4J¥tJ©´J­ôJ±4KµtK¹´K½ôKÁ4LÅtLÉ´LÍtpæqqœ‹ ¡«æÎt$Ë» òM’*å!Ï+xÔ‹xlÎNßÑ(ÿñï.Páqôô x°FºÈÄ×w©w`u}v ø÷¬i4îIzÜõ{“·c´ç÷¤5!„øæõUrº³½W+Éhútc>¢orõ÷Ð,׬ò39 YÇðO¿²_˜• fÿðÖ/¾t£`¦#xÒ wHβõu/É-Qå'¯— jV6”ÄI7š‡öLø„ Í嘫: ËÐò]÷2Qw5—¢i30‡[M}¸Ì“]CÐÍ©š>òïNP XRØ V[46Š¡L5•_mZÁà éiuùò¤þ ªº÷‹É˜Ì¶ž”Ð`‡ ×øìLÓÓúŽxÉ7Ž·Ž£ÌŒ6…/Wû¨b]­ukó6ÁL§èôŽ`Ù¥¸cçÐ7½8IV8qV“úÐ8Ó)Y–ãW“’Ê”Oj¨4ÍÄrï5¹Åb6:Ãj:WÒ:áMgµŠ%—3 «, rÿ@ YÍHnù΂ÝX1wÅuw[é—ÙS<œ–Qíí‹öò¬vÎ’Lf·™5njÉ9?­öœ›3kÁOç²k××33l幞íùžñ9ŸõyŸù¹ŸýùŸ: z  zBíðÖÛÔî ZåR˜wÐùåÂkwþQO—O¯®}+šãP÷rU÷£KîRoW~´Ù¿Ö ÀøNz§wRIº¤iryÝŒ—%Oá3üÕzs:¦ w¦ÇW Ñ'õÆ¥•{Ók›R†cu†}ú§#¦™øY«ÎXW_š zõ€›ºâ&ø€2í:U+ /ƒ½’¢£E’·ZâR˜H¢5[Øþ¼¬cÿØ£³5­=î ›—ˆÛL§¦Ùq-äZ7qŒíú⦋X/±Xí´x€;âBò^¥u2åê_•¬_¶±-îŽæ«—péx4ýø²1›â6síºWkhb™¬% ’3v´n7º}MUƒm4†ídK™¦P99[v›aûß ƒfÖÚzy¬Fùd€y=™9ö‚àžy<£y°Vú<ÈogqÛ8±içÍMµú¹ΜÁûP™z¼»‘óѼËá@K½Û‘žÝ;¾å{¾é»¾íû¾ñ;¿õ{¿ù»¿ýû¿cˆãYZ5:¥œÒš¼æÔu/Ám­«%s7ZsaÂ5,¤!z¤1ÿ\Ámw¿¼»hóŽ¥y7‹+“1Ê{ ´v¡:·ÂSLS÷¸¹Ó‘ËTeµ V\´[üµ^¼ô> UÏw YÕÆ—‚!] vü2{|¶4|†nµ|x)16‰±û –œ²›¼².&+¸X/x¬­\Y ØJ:¸ ¶¼Ëik­W8²áu-ÙRkQìÄE¦®Å`ÍÙ\¶ðÚ[ÁÕŠkéˆK7©í<²Á@Ï÷¶ ŸöÚˆÛÈë¥ =Ñ] ‘k!8Îy°5ËŸ`Ò)µ4}òxŽ6^“Éý‹ 9ÔU«´¹Ð¡¤ ™ÓË|üH°£Às”RÕ]=µdûc=y¨AÙÔJÿ6¹• e­]s)¹•|]èÐ/~]Ô#Q—)q`Pá¸oÖš÷й{t˜³Às0(Ç«ý±¢{h§»Q_ñh'i½+ÐÓ=¿Û ö UiczDóÜ‘K¼‡áÞù—Sü>à¿ ½½¡à žºàù~á“ ¾þÑ!¾â-þâ1>ã5~ã9¾ã=þãA>äE~ä{á /¡À;wI>¸ú‘0Eš+$ÚèVžå»£óÔ¼*\x|æ{ëÉ'œÃyž·LÄç§¿\RÝýºeœY €7ècKye¾:gü¦…¹é»‡§¡žÏú…‚ü“ñØpˆš¼²•~Í}ë-ëÉ¥Ú†©:“Áÿë«×¬“\í[K“©Ô³r ëmb}ËZ»Àòìþî9QéÛz†2Aäü…åšÌ±Š ¿Í¹õ£`é[û0ÓùD×'¿Ò•o]§Šÿ¬¯»ÎåÕº?Ÿëí•3Z'aÍÞÓW?²`½3íIÌCSöàkßÇÖ´e]Õ¦¼W»Ì-v6ÏÚó?Á8™7…×ÁþCÙ\=Ù‹Ó8WÖ·U9í›?­†»ÛŠ[9j˜¦¯?ð¯™g…l•¿ßöSQhߪ<«ûQíJi·;›Å–ýÛ?¸üÂ!±h<"“Ê%³é|B£Ò)µj½b³Ú-·ëý‚Ãâ1¹l>£Óê5»í~Ããÿòy\@Ðóú=¿ïÿ "&*.26\8h a<8bfjnrvz~‚†ŠŽ’–š26T2HT&œÂÆÊÎÒÖÚÞâæêîòjiL0TZ\ô#'+/37;?CGKOSW[_cgkosw{ƒ‡‹“—›Ÿ£§«¯³·»¿ÃÇËÏÓ×Ûßãçëïó÷ûÿ (p Á‚"L¨p!Æ=Aˆ8à!ÅŠ/bÌøìA‡Ž4‚ )RWª Vp1•*K†P¾òAÂZhN¤ò À‚^ :‚øò³#Ñ K8z©T©…–Ãb ‚Ô´R# 8Ðê‚K¨€¦Bÿ|(™LrU%’¦PÕe([æÂ‚ºTõÄ5Û6å;’€Û¤ß#²ÒDðñHÓbt6`@\8ÍР^†í`T RÍH |s)i„Sò\üg¦SÁDX¢~›É-š<Ïrå\) mv¶ ¤æ˜ÎoÞ“·°¶¹—íQœ†[9•ddgÚ9Z[Ê6SùËÞ‹oX|éòܶ™}úÕ”½[„‚…4h +_So3Åí$qÙóßÂéa ýmAXJ0˜„ƒH°bÀ%T8¬¸‡(Àdl†äUQŠæ±èOSÁžjh°ßZ)ÀI„c(XH»-×ÿNd ˜ÇCÀäE‘A2±äkûHÁÜÁ‡0#ŽQ"'&u…Š]¶&?/QA%R A+‰Ueb4°D\uÝyi#„í‰ñÀfW8°&Wx ñ#jªú0נׂ|a°æŽAw(ó- ÌwÎÈD&QÉb™ªR§¡V’|½™èè‰^OSºs“ÜVëZñ‹ t:@ÁÐÄ멬jêj¥¨]zì+ÃÒ4é$orÕæNNAUk*fDd¿vº¬SÍà­^«ªeŠèêî5ëªäñ©ryà8×O"„0€–tÔ¯ZÚwx‚We®8ÿD™90Ä üpÄ4ÌDwQà p"(\QW¬˜+ÏÆgÁ®Ú®«Ó’°Ë¬†RÐìRùN7 \wÀÂS¬¹ìŸÔEê¦M€¸B?ŠÕ¸BP£MËÆžSX"m½s*0]¦Œ]<5M.L×¹+…¬OJ ]IC‡6• Z%°U c½xWbÀŒnÁ 3’ZÃuÕ^W’ã#2‡ís‘£f7T¦ztÖN7 Ÿ³‰'·ße6­ièQ§}z@·¾îë ‰oéÜA|°eˆ,0ï@!òÄ31gÖ)fw ð(мûÈüñÂSLÿÄÉ"@¬2Ëß+B&fÒ^èq¶ny¹µ*t Óíê‚í©žVé§þPmEÍïSÁ6 Nä£Û Á °›ˆ…’®@à0–޳Ép@.PØQ]×A´åÌ8Îѱ¨»+M=h‚•ë8À‚Éh ä³Àf®"8÷MÀ1DsÝT&`”Ð[.sà2Á š}ÔŸÄ…R}„i| Ț"»Ög/# ¢ è,&cDgJ“MX²3÷Q0 Y#ýçEä0(»ëÝõ€WG’y‡{Æã’gŽÐƒõÑaÞ^¼C¼ß5¯^'‹ÂâØ‘á Ðc ‰ÿ0ða²â[U¼‡Æ±©oMǺašæ$Ãû%ðkHàߣ¸1¦Ðƒ‚ÂÞõƦ•Q¨%cn‡ÝàL‹ª NY·õÑË ¬q̘¾Ú …R†¼ê…«+~êO(é$(‹Y r²~$¡P¸ñ¡’­°E8Ìt6žŸ\*—¹¾ž°Re„É¢Ø.SJAšaÀXÀBÖ1‘»¤Ã4篂Ò)cã“è—y<¢ä„ ¸—0s¡Ì 祣2#0áy2“*ýÃ&×Ó?$ì³D :™¸ÎÁ3qÐD]}* '™Lrÿ®¸>£ ‘ŸBD*#Ó3ÿ(‡CI¦qH)5&:Jpè«¸Ú GÑô‹j”g’Š)Bm²‰L§û˜*!Y^µCÙ*+nÕKfâ2^³cÝXó§¡~¦žwy_>§¤K&øóŸnç0“>΢ˆ”^¡B‚T‘Æ›E3ñÌ ‹òXWËbV²r|ìhWêZAô Šß$VKšÕÉíoNrb›Ù‡Ueʳ`ú*Xؾ:%\§õ?ޱ‡ýT£RÚ¤`²RÁüæa'ª^¦‘;…B0‚ûÖjÎss. ªœ*Þ†N ïT÷DܴѶT×úíbå:_‰ËUêE¯XS9^¢ŠŠÿ¹·ô®Êz&¿0ø]\ƒ@ÁÙÉ&ÔwÓèÄ(ËÇ¿Žg³…’èPf=(<L)î@H¹»Ö@¾{-û[NÁ¯TŒ»aCxÁ¸ü5낱PÞ—š®TÀ,‘·¶ªIW©B¬-;Ÿ U;HàAfဩÊdúêÉ”åmeÚ:ÜvÕ­/ûçéæ[>îJÊŸ[oµbUµ"לú‹i)uLªì€ÓÍx}‚¡¬ÛÜn>G…]ê*üÏŽˆÔ°¤9ÜáâY4Ä™Öì¦Gìò E'¶tî†ã ×8ÕtHk/-4Ó6—.@¹Ý.²‰àïn‰=÷%ô¢T¡²æ šEÿ•³ØZ0«Å ‘  ^4_ÓËàÝk3a'Ìȸí‘ Ý„_*Á¼‚®ï,ãu4>SÛGë²Z ¸>@¶¬óßÝœßÂW´¦[ŠØèïÅŽÒ ¬B1,J2´ˆ!Ñ|¬Ä¡Vñ‰…—pIŸZ²ªÞxºÿò؃¬DtlÝ„B‚pmnùMdq{|råf‚JD=ƒnfweýå7ól?Åm¸.Á½•ÛùËÓýê87 ßožû«?öFxC¾Œ7]>Özzé„]™ÊË~²ùÚNpôe4½ ÜÔ’68§AÌÙ†WÔ“óèÿĹbǬ6î%Õ¸À9nx7°ÚÇZoº—XS¦÷ʼ}¶nŽÔ\l±‡ØD'´ÚÕ¾Tà‡vZqh^W©öq#-%öl¯W~toÛoȉ×<Àüt¨g­=\µd«Ë¦åà%¼ ¼ªà{ý‰É§ý~™žíyíe×ÅN;®z˱ Ck%ýöÁ3ô³<§«îéN;¼áé'?Š[«Ñbˆ¿àÃxG¸þC>ÿix~¢ÿª\’»­¡RÙŠÝé OÖ¤‘‘´ÖÙ} TE”„îÛÚݪpŵ _ÿýÜïíIZ°.ÁêMž™ A·¥©K¬[ÿÁŒê¹\¹Y…üó)Ÿ³‘œÒÀÍØV ØžéÀÞ±H2! ‚Rµœí€MNFù9Ö Ï‹UûeÝúý`ÏŒAJ Hu¡ÃŸI”êßžÁìiõ™ë‹7Ý ­±†«¥IÖèDÑŒ ŠA·HØÐÅáry—]9Þ`™`TÜè`Ιƒr`"Ú’äèÚz\üœ‘½iäåÒ1áP(*˜¬P+Ëë i8Já 6áž`I…HlÜ™zµÏåPUk0ž*dG”„`µyœ™  ÎŽ«e"—­Y¶D\ÉMYÿª…%í©Y¡m "ÒÈ ’rü RÉh’pØ3.‡a‹-Ç,Æ‘Âa?~ÎZKL@ãívù¤JêʺŽ~â/²Á695²û˜ È-rU¦0è(Ыu­ÀRá—o…Îî©—“.ß V•%äí NÁ+½L¶Ë½ÈKîœÓ|#ödÎdã Ž@ÎäçØÌYõRãÜ .~]JUäÓ™ÚHtx"ÊAfΔ5 XšîÔ %!Œ–@€YšãÜ_ò–%ÉPÆÅ"9–aîœXZB ÉÐ_ó¨%åùc`V@%ÿû<ÈÙÅb«ì–UÃVÀ)äL* "&Î…%Ú Ølä0Óah md‘­ Ü‹ Ù‰æ!Þ‹(¥Vz Þ¬$ï‘b«]¦ùI¸ÀÙáÉ•­K¤ÔÌ@þ•T¦˜q$gôÐa"åÍ\"›Äf+܉(.ˆiΦïÄ‚uæÿ8ß&û¸Û8ÑWÂæ±˜bŠDR¿Œì {Îhp¿[Ê$¹¥\Â%þ‘ÖAáQÁÆÐ'y€ÆzÖ'CÀÉÔ'ɬ¦`:( ÛƒJhH À ÔÝ$f†[zÛÃÂÁ‘ú!ŒMh‰‚MšhŠê™5¾D½Édÿ îiòÉ-ChIA,>‰ªh²$0ÐMù辋úÒIÿpㆢä PBXòB=œhÕŸY’að(‘jéWÒ0Ö––h…B0bµ•)¯‰ B”Úìc“.A–‚iœÖZ¯1À%Ê)˜ŠéòQð *Š¥:òçŽÒ¥žj¡ê¡"j¢*ê¢2j£:ê£Bj¤Jê¤Rj¥Zê¥bj¦jê¦rj§zê§‚j¨Šê¨’j©šê©¢jªªêª²j«¾á“ºj¬Êê¬j„T@G•Õ‹d¨æKuVNƒÒj° ë°ÖCEª®>ÂsMØk¡mô&±Bk´Jë:Ì|¨²òâÿ#Ìœ¾±…µ]eõMk¸Šë¸ŽƒƒMÙÒäï¹. %¹ºë»Â«4Ð(ôE×EÍ¢íf¼êë¾ò«1˜ëìØa¬‹ÊíÌW`¿"lÂ*l)Ìëšé…c¸—ÀÊfĤعèÂblÆj,è‰=QSÖÍMv)á´mlÉšìÉÎhÇÖntÌÍÍàØ’-½¦RÔæA۲互ð² ®±×¶-ùÔŽš„&²†'œ,fÔ uš/rðЖðé¦âB2¦¤Ìí°M2'Š^jìçµÁĹ$‹·P‹e®O» Uc¾‡ùÖŠEfòV&A„š ºL ±ìÊî­Ó ð&ƒÑ?©™$²£l!†:Áº‰0pÊÿR6p†-Ciò§ÜkžVcš-rÚ²Ú§à B.ËÌ(ëÍeàä‰ßj-+2Q Œ†Iö½¨³C­¸ØDß|ÈsŽî“é$J?'Ûæès]ðóÔÜáäi%Ö¥¼Mf¥NM%–83ôÚ„Î’šÁ7ë‰Ðž"ZA:M t¸ó*WÊÑÐóDªq²Zmm’ÛÉ…p9ãl#ÃRœjX›æÜaê!+zýD^½EÐ6m2=c²Îô½y^Íõ™lÌÐÄI~¤™ìVOØK߆býµEÀP_fUËRlj.=ýVouÁ(`ò„}¬ÅJ@·°’H¯uÿ¯ø[ æVô"F‘,sÒ^^õL)âaðqâIoçI¬p±dú>-ÜLµl(nò´Í²Z Ù`ËÎ"ßöÙR#3ïa‡é râb´1U•†ÀËÒ2UoÔKÆ`ønÓ;Ýíä±Û¶öñ™Ùjç, ÷Ÿ”ÄŒÐèV€$N©ðtô¡dö”T+0' »0Kgp¾Þæj˵µüu ™Ý†Èî5"ßA~Á“I—¶Ôú°˜‰·Q†Õ8ç˜<Þë”ZðM7gÕOQw‘8ò^ ‰S®_…µbn`SÝ[2£ä(i,Î «-I»2øU½E—±\÷ç¦wœ,ÿTsmûsŠ?­Þìôªöãew4§dÌ"© §ó¶:í|Ó7-wJ.¿°qgÝW‡ŽÙx4~ÆpMµ×B—x¢ÕYêx¾™cÄnƒSøÒæl‰K2åq€ôV|r‘¶¦GK7. ªN’ ”„¯Ù“§1Ô4ƒ”hUtE€1/¹û̬Èäob4–yaß™ÏíȪÍç$¹èÌ2íVa8íkâXF׬¥‘ ³Q÷k{¹H®ña l åÌšqhù›é\—g'БŸÙ¬¤ªµa†wrÔžvR n ¥í¥nÉ9¯Û¶ËÁrWeöC§›R—n:ÿT°ngß8kÏÓ¿0j‡mŒ[:׳±ºE»âœLT( +÷5÷òµ¥{챺û É«+ž—ÛJðaé­:k•-ïôHíd—oí¡G“‹»Oy¿ ¶6Â8mwÊó=sÇR K;­b]ûÙšŽfgma<À˜üÉ£|á¦äÎÈa¥‡ûͦÕÊÕóÑì¿g]­U(ÊE…¼;¼´=J«ßûò=¸¾ÝÔå;ܲގ+8¬€æU©F°½ÙÖ;ûËdÚe;“lú{CdÍ÷Íc{Ø;¢kwŽá4Åã8ɾ<Ñ&‰C³¿¯¼Å¦ý׉:Ý„·+±Z¥ýǯ ÿÐÛ»­'<˜ }Ü/í{Õ½xw•dÏɉìÐà]W‡T}SU÷€c½Ù[¸]=ó¤«}†24æ·²†µëÉŸúxÏ_¦Cűܶý¥{öOà(¡¤7ÑÛoü„ócæÁý`îý±>Â>Ûû$‡«jýªà &p{`8 ^«UŒFÃï½N3­$2c†3Z¬UYQ,Kn—ᬡY~OüìrêIº`ùmì+lÌg«°@XCÀ$`à & ‘/DÊbâÄf±H…9åL¦Û00Ú S¨…Çås8# h¡Ò|¤zuòbˆ#˜*2TÿJÜjÒ*LÀJk;Òˆ xòÃÓ‹š8ô#²@¨è£ˆZ£cŒšD €$²˜ ˆ2bЭ@ˆ ŠJ%‚`‚p­»Snv†ã‚°%ˆî{ŠBH^e®eò„Xâ~¦,Î2BRl¼/`ºjSË‹/Šž®¦’pø²OðEX†G¬RgOáB† >„QâDŠ-^ĘQãFŽ=~IHÓœxîŽ´Û´Ž «„*3¹±—Ƥ»”fÂdƒ3dœvn&¤tiG'¼–Nl:ªˆ<+V|Ze‹%_4A¡ÔÒ“ŸXÝ4`ô¦Á˜ê€-2õŽª2o BŒ-²…Z¹ ¹ÿm¬.˜f–²9ï3`õ>YíéÄßL Ô ²õ°3½7ùž5éÉæ—à´Ó¼SôhÒ¥MŸFZõjÖ­]cœFç×Õ~#Ù“`€Âƒ¢àx1 “lœÛ¿D8pzÄ‚¨,ñ—Nà¶æ–2'¾O‚H¤‹€Åò;­T\|gç®çïyôLÓ±TÏd{ äÑt†•èv±­ÖbÁÀ17 ØÀ ¹Œ¡«.^È­²™øz"²ü{oÁ0p(³Ð· à?*xù‘©â¾ áÇA“ DÇ ,Y¦À×vä±G2H!‡$²ÈgÚËH%—d²I'3J£’ÿ6TÅ'å@òJ-·ä²K/¿3ÌÔ–@@L3ÏD3ÍŠVy. 2[,ªË¤Ô¤³N;ïÄ3O=tǾþÙ3PA-ÒéóÓ/ÏŽŒsKÞ 4RI'¥´RK/jÀ*~.å´SOÚ æ.ÑT-ÊÕò‚>?eµUW_…õI TnÔXoÅ•ÕY-´µJTs6Xa‡%¶XcE6Ye—e¶YgŸ…6Zi§¥¶Zk¯Å6[m·å¶[o¿7\qÇ%·\sÏE7]u×e·]wß…7^y祷^{ïÅ7_}÷å·_ÿ8`&¸`ƒF8a…f¸a‡Î32š&˜ªGU%΀ðoŒEÿ!9d‘G&ù4‰ÿÊîµcf’’Ô±*.9f™g¦¹æ9€Ù${xá‡ÿÑk‡ÊŠ*Š:®Ý8Ое°¯p¯N1Œxí·ç¾{N6 Å ¼›Ð°rŸÿÖÿÉzgt§:ŽÑO÷¾~ûïÇ!ðïc«zö7…Ö¡ñ<¯Ó›ƒc²—?6Ðùƒ\ìħˆ«™È+êHŸDˆ¥_=ЃáâlëÐçK_ˆ`*÷ùnv!„a e˜µr?i¨ ~ˆÀ<å‚"ðSF¦š7C"ш#áaõ§Ä b‰¼‹{‘;÷]ŽƒxD.vÑ‹øª¡Ò0 ñtçHBÂ1Ä•Mð á‚ †–²1”á 2à~÷E>öÑâ #…B±Óm@(BIŒéÀR–±¸§zŒq!ýþ8IJVòZ4Ž„ÒC¿‘ m"2†Ú®³Âª‰Çÿ=Ç!(–‡ßYÒ•¯„廲KZÖÒ–Z{Ó-u¹K^6LU‰Š^/…9LbîK/nù\1•¹Lf¦kWd[e3¥9MjVÓš×Äf6µ¹MnvÓ›ßg8Å9Nr–ÓœçDg:Õ¹Nv¶Óï„g<å9OzÖÓž÷<&&C2¿œI%Eô¹‘‚ôÊW]ˆ >¢ž"9qpÄgÒ83 ñèbBA6Ö1T\ÊZ¨$[µ26””ÉÀÏ@ÒÏ!}ÔŠ_C¨D)T U$!¢P0Ô8EÚhêŠ=à'¢MÛ&¨²›Ä€3Iæ ‚¹ ŒW$¥ÐP-2Ó•n HSÿ…)F¸ú½ÌÉ<ˆÛ)D'2V:œõ4ZC[¤xT¬og<êÙÏÜW…ÌÑh-XÉER)šT¬"ÍÈë†$Ø^„­¤qëc*=µÊ±±Ë£P+K×¹¹î…xlG)ÆŠ«h1¬c/{‘N‰±=,MKYÓ¥u²ªÝ'hK¸ru‹‡äÂ66å|ì6vø!‡xاDm -’x‘,‘!5†pC)“ç†5FȆb €—²ç$í$°»€¨„/GˆL(´€Ýlì¶­|“Ĉ[67šúåèŒd£†&~¶ ÐôSaxÂŒ½A@:€?a{`ðžT¹'EŸÿ„ p#Ý œ-Êú`‹·€~š0/›…ïF˜”ÍMJWë&¾‰÷j€³@ÅS•í|wÅŒ„Šü9 EN™OñÆ ï% QÛ„dž¨£aã†ã£€ðEnPé+û–_ÓÝC,šü¶!ˆ1kðŒl@ꉴ•TTªqÉ2EJÆtÌ£ ‹Ðö- emË 8QÍ4Æ)¹õò,lÝ5ª²Ì įݬT.¿çe¯àôfÝL 'µéàóŸ  ‘‚ÐëàD_P@+½¤22C½ÇäíM@-‘µÊ1h7…Œ0­5•lëš1ÓÃ@uÿ«iø&'ÇMfSDAk”2ÝÞa#õ¬ë—¤DÉ{Ð Ö—íŸØê ÄÑô–÷6nå¾Ë´› ±Å’T¡Òʹ´™ó…f@UàB ~!Q͹ 1ª¥³1`Ô;/䢖`›ö±•5Ü'ZÉ|üÒæßÅ 5^Sˆuá£,Fì³µÑZd‘ã m~»ql¦hS‹qj>¨PÁ~Á­ÐjOØÖI,Â6G6ŽKÕ§H‘{UⷦĊ5ºEWð0öIF”ÂÝ a‹œ óWªn*©?`ŒÁF24ÀÝ÷¡ÊÖE„v1I ¬ä}=ƒávˆJÑÑ®Ä ˆÿ¹#Ö¾=|ÄF'¹^Ä[(ȈýPXuÒ}²7f~:Á£ïæÿ—gÉkVÙ­Þ&b îÚGö=’¼Ž¶e\ÖÇƒÞ чAçLàÐSÐÃà iP,ö·³º+Qž’Žo¹tžÞ)›²¤ve-ÓyHYTçÇœ+<ðÍçmŒ†¹l-6¨óê#.4I<¿›…ÛÎËÙ†‡1*›bµHº?ÿ“,¢"¬«?|ë²å{‚Ñr„€sžˆÓ‚`J$¶¨­¸<ùÙ7-Kˆ•ƒ> D½z¡ã™1Ò!—YÀáK£í39Y­ Àž†H6‰UãÀçI€Z¢ÇbÁiÿã:Çø;ǘ+8¶Ð«Z2½cœË4¾(ˆ¿“,ôâ)Ú‘Âqø¾¼[áP²p»!Th…LÁAT"é*°ÒñA¢ú,€àð„€0Œ5ìBç19¸b«,|>ÚÙ"Ï{0€ø#•2Ì2íëH2®5œ³–Lã±DD>4T¾H›DG̲̪­ ÌÁ.kÂ{‹ëùÄ<3S‚äh° :¡)\²B³¶Ù£À'ø«K”1(:HMÜW<šý¨¨â«@:c·uË4Zô9æ+•1µÏ '„ú[6Ñë2æ1¶¦¨i\ˆ,d“-L‡jœ€· DnGA,¿æ( :5Uÿ+‹iÀ®{Ãwô„ø*´Ì =§ÊÀ}HÓ[®p,…F,Ge Çq,3B‚¾|,º}ÌÅÛ€7µHÀÜãŠ6l†×OÉ >IAe¨Ñš`UL‚Œ@M4K¯„QôZH&º!‡„(H +HŠt= ÕRµÐHƒä½«ÌPïü?n¤MµL"¿,Û„&õºìû¡ÙÔ 5 hC»Ö¼L,]Á=¼/«$Ô,Q=í!Ó%Ä´ìé­·IÐuø©Hļ¯ª*Ž!C»”­W°G–ÅDµ¸X Ò·ÜN÷´>ƒºRÝ ¯iFCm†ïp1OE,*…OV¤K½ÍC8Â%›Š íQ t<¬`]’»P íƒp°°¼ÍìÅJ•StÔÉÔŽœI¸kDËtA©3ÔÌ$-B5ÿ¶o-UåÍùj×BΨ³Í7EÄÏ9HAæùP"Í:=ˆTЛU;aõ×Aô¡í¬1eµSô[WeSˆÒr¿!ý“oÀÏjV3Ì~Õ¿±³†=U€ô›I ÃKÓU4¤Eé4Õ9³Wa×p4•shG~¬9[M7uWr ‡Š¹@c¸Çø|Ž:íP]?ípÔkm—Ï£2’¹K£5â7"8ÒJCЇ" ƒêÚCÜëˆÈÐ8žSQx#íUZŲƒ`@¯é£ƒ–ýA¡Ý¤;½SÑÎL€ÂUIæØ­ ИCaH<ÃÀ¨œM ´U ¹szKÖ¼G²eU¢ÿJ.æj?9TUå™Skí #”e×¶{Üu¸1L×[\•ƒ<åÕȳÀÅŽƒ ­HB7H¼07,Ó±{©Bu³ ¹§[„Ô*A¸B UÔÙñœy˜[£¥—Ï|É)¤‹ó›åœßüCS ÓPB4_;$§ª^xU‡- ®Û”Ê¿Ì c{ŠP ¦EE5h²V¸¼hªAõ›À½Éµ Í ¶Òi>Ú™¬b;I¨‘ ã_„¼½Ô䑨Uí'“¬ÜøÆìð\*a6Ÿ{³U†–…ƒ`_•´‚Ï!¬vkXNˉšŒ¨ô†xu¶¥eU˜µ1Ð ¹\Ñ̈×ÿ±7ÈuÙ2úf¯·]²”Y£ÌãLæ]—ÏÌ0²Ù$ `:݈Ћtƒùì…‡úP¥[¬¸ÓÀ®ZÑë >RŤ°6übŠÁ;¶À#b8‘¸KbÝò¤°L[^†ý"¼ŠºáŽÜ%ÛG£$•Y•Ù–¤ã°žMÙ¶ÕãqsÇÊ&¶Wõ^2ÞÐ…°F¾žìjÑÞó·è- !“ÁCâ±b}O!»µõjµc:þN‚°ß Z#$‘WN&TÌ+óaŸu˜|ÌB³9Vb†™%Ö1@>æ~YæfŽìSø…f‚¡æjV˜_ÒIžC¶ÄæÉ)§,Ïpÿö3B&Ôc[3gᮎñÓvö—g¢ÝÔi p.š”ç{¹ç|VÀ}è€è&è‚6èƒFè„Vè…fè†vè‡†èˆ–è‰¦èŠ¶è‹ÆèŒÖèæh#š¨ÅBUžá Áí”’½ã­…¥Îrîh<1ID=W-6 Úb!ÙºR©ë²Æ6Ý>í‘9Í£TùdiÁÛÕ0é¡#éx¹×Ä“ ÈéoQéP*ÚGniB à¥r ’:]¾ ˜>×ös?î…Eæf©ÙOéë´¡e­ ¨`ÏÕ€XrŽY1 åkÛöŒº »êK±«ád¼šë+¢™8´¾­g¸ë÷’¹î‘©ÿê—-êgpl×0æ¨ì=Ylq ‘¾Õ‹ç·òéP‹ëä!k8:mÒíרì<£Év†ÌfËöÚΓבôì[®€d³ñ¤)>2ÉÑÎV =kµÆâ@_Þß›¾)£ 6¥Á‘p€Ìãº÷ÍT[³cbð±ÝÕ$î…âé_ùi.ãF;ñXjØ3¶.îµ)Û)”·¦â Ù»³Ù½~ƒ)a¾çÞÝÂ4¯!Îâß ¯‹$›‰Vø†âe#ãå:úgÈì #%F†8³Þ rØ‹eŠUK~®-uäÁÑcC¬¶z®­ñ^_U’BïÍ­¤bç ÿNâVRç6ïÞ~ÈI³t`P{68“îºöH·.m=ÊxVÛ}5+˜n 6…66M_YíAáãîæIÌr ´á“5ëÊßω‡5ãiÈÔÞ+ŸrC# Màzí³ßäq/Üð8—ó/7“­½%‰¾6>•`³•EÓÞûp>O²nÀ†laMøòØ 5·þ3pÓñÎ0 ,o °.âÕ5Ö¦Õð`g0=q€-»üêL¯LÞ…Ïr4ztO§ò y´:ûœõ;¨ò&™®558 (ÜÜU85ZkÑM£äɸ:ìíuéÍp§>Œð2»òº¬Êƒ‹ôvØ<Ï¥ÅzãEÿõº» Ý ñ.´Aà Ê€*˜v Ò‘Å0ÝŽ@!?~Uö¸f½eѪ„¼…šck¼útR TJ¥+;ÜX[M¸38Žì‘ðt¸FÁ `Åc€p¡ÀUêÒõ»”¿Ðå² |-8‡?F𚣠õLtB°Æ[1ÝÉ’»mƒn±u#tØ:Ì u'ø_WÐŽkKͲ! ö.7Íqµeh¿.Ý+ët=ˆ&Ç÷øÌ¨.wY(4•0g÷«?µa¦ç÷ðÐFœËù0Ôf¸ù~—æ?Á¢B°H]½;D¤ÕÕÖ‡UøKKS ‚P¯ÃïD.oJ.;íÿâuµÇ³$ºüƒTUvC¦¿ÁGd—i“U,Õ„ßWÒ¾¾4”ü8­Í›ämyÍ-’f‡|¤’¿>Aå™ô!«´^Ä8x¤•Á1®z_¿z]·|«ž¶ñöfP]ÂG|r‡Ç·Œ4*ÌAuÍ?kˆ§ÏЭ7YÓ¯¹ýÕ ¢xƒ•ÁƲþì€Üøþ:$B ÃøÄçàñgQ`ÊäöÕèlPü•í¿× ˆ†‰Àbˆˆ¤2Ð8“À!‰`N·ÓCÃf Âä…,†>’Å VvbŒñ:˜»·†o’á—&Q†tÆ€‡˜¨¸ÈØèø)9IYiy‰™©¹É¹eÿ jáä0! ð©àdˆ´µ0K»€zÉ¡†qqÚÔ™—€›{7µkvL¤º¥¡Ð— æ0Ùæ¤Ð|›qWTÀÜ*<Œ¤mÁ,1Q;»lH*ù‹L<…™¥¾jÏ*Øîn×™=Ú¬ Ûóǟ᜜#ÀЉ—órùäà¢,w}±,LƒOöp㵌Ù‰UfkV…I1c‘T1P(å.'AL€ÄA3’½ð܉ÐL¥²0(aÀ–"ìÒº3¦æ›T  ˜‡k;ZEÒ™ªªÂ1ªV¯– 7®Ü¹tëÚ½‹7¯^~©íæÅ @/!é)«ih( 4ÿ+( ÷”¨Id¹x‹BMg3W¨¿kÙ-e#|è¶YpY8q¬‡œë¹D1(BÔšäåoBÆ¥67ÒÇâ¸Ä²_–j`"¹zŽêF‚ŠâGÐÓ¥CR£FÙg‘üŒÑóg“§-‹áÛ_ÏÒå†8•U@^£¬rºÇ¼×=¨oGzô™6wGí÷0X ’Á'•~Ü!O~|Á'~ÙY•~.–„"RÒayfeÈ N…D“yå‘UáAabA…¶<'È5jÓÞIC¤ÖÚj˹VžP+!•È+¸Q‡¥u2Jÿ–¨çe}làÍjŸð¶¹ÕcvIü' S/fäÜc`‚(œµ‰&åXç¥iîýù@ቆ}]á´•f”‚HŽhäHÛ’Špiè!ü4 ÐL6&’Ú$amŽvÆ€[lè ¤õ]è_ Ø­·b¯¾þ l°ÂëH‹x¼ÆÏŒ`¦I¤&ºèÈEVEþZȦ™êŠš“ƒÞ¸ˆ¢ODyZ5ªµdååúÄ>â†ÊâŸÈ™OwYŒÔ’¹xÜ[…àˆ¬qöéEßÝ í"^€5… ø°·¹2ys‘ŠêÄÙ.Ú~Ã;i êwá»xª¥ê!’2xÎ ÿIlÖ™Œá­a¡dÈ kØê˜«òJlÐBMtÑFûô1§,¹˜ñZEç,̳ںb5G‚)Ô6OÍÓeÂBu"âB9p¥˜]™.hPð©ñ·×v"eŠl!™i±2Ô7+€ÀsÄ¢uÁÍ=œéaò9\]E «ü'3»Ü8– ;EÞà;:r˜‹ÍpóH¯ÛŒwº$ýòõÇÑ2ëFôw‰Ã¶½]+è´¢…k鯭{hƒ,‘³´GO|ñÆŸ¢±aPÉêÝgøÆ¥ÝH’cŒÓw!Ú@ª‰Jo¡ôV÷ÔÜ.Ú¸ÔŸ>9u$ÛPÚëæW}®9‹ÁèÄôÿvâý›ütDþ£ þÒ04¡Cs+[}ž—¬70iWXx”£Ô°mÄù8x9°ÂlòiÇ:×3UEèq}Rý¶6‰ËTËwŒ@‘šV;<ÅŽ:äãÝXõ? qwäìäô ¡‡×CžŸÅ(JQ#.Bâd5œ!lèÓJŽ&0 Ìâ(£mpQFÿQÙ@¢Á¶ÃTÑD€ @ e ‚aHbÓ8[.fìkÌ„ ”o k‘óƒƒ:"GYA è˜m*Ñ‘ ¬CL› `³è< n$éŒt#1å-䊛” K8Ù%>v¥Mÿ£Ðǃ+ùàtrç»ÌÕ’7ÛÒØÜ÷•m+ŽŠøYébò—@’ˆ}„Ä'¦Ù[.¡&|ïŽäM¶²yxœ%ËáLZY@£DE÷tv5;ñV¢)¦$Ï9Å|êsŸü –*£5Œ dìYVp'<„¦rŠ \/Sq¿¨É™#(aË q$BùÖ8Ûl„?…ô](²¿*© ©ˆU6‡aÉoªP^1âBå&¡Î´G¤° ‡`–˜ŠVˆ,eÜG¨d#³ðÖe<3¹P`Ô¨ËS¨)÷(‹äÈGŒn± X¢+VnŽl¹¢éMCx»÷Àj ñ 3ÿÊ@­SÅT—j ©‚‚tTé+%=[˜õ(´L- è4T” …eêJLÑÄöTžý¬¬e/‹ÙÎÑD G7Ÿ$ ̯L¦•°¶”´ è¥W£Í–ˆ’°âÐ5ðÚ8œ ¯6‘ÌÀà©-øB§$ä ÍT€yòk9¢ðF-rÖ°€å%+ZYd€Œh _r6I°r¯B Úb·"Ø”d—°Dt¸ˆÉÆŽP+,M…ÐJ..¸–q n5p]m¥÷y7£a€·s§¦0¬Äîj»VE— @-:\KpÕæ_Y\7…TMF\ ±«¨+¦ÿ¶ F…@…©Ö’L¬‹q*+ŸØÅÕ=of ä ™.²‘Œä$+yÉ‹0/“Ÿ å(KyÊ• +•¯Œå,kyËsY—¿ æ0‹YhgóØ:æ4«yÍl2ÿÚ ç8ËyÎ$LgLç<ëyÏ|¦‹‚>Úç@ zÐS~†dp [B+zÑŒ&ôSßÚèHKzÒ”®´¥/éLkzӜ? êP‹zÔ¤.µ©OêT«zÕ¬nµ«_ ëXËzÖ´®µ­oë\ëz׼ ì` {ØÄ.¶±ìd+{ÙÌn¶³Ÿ íhÍw–¶µ¯ílk›ÉaÇä:d4ÿ`·²E¯‹·»ít«{ÝìÖ´Þ¢ãrÛ˜²í®·½ïï6Þ ÄDŒÛ<>2ß/¸Á.åÑRÙ»ÓÒ?ñˆK|âN$‰b˜YÛ&³rá•.#Ø%S¹0üY–3-)Žò”«|å³í*-ÄT`>VNµ »šå˜§ œ– G) Yô  }èP¸óèZÊBáìÅÆò"¢Ð fÆùĦ%FŽè\ïº×…)t£/J|L„Žúu GËâV`'Ø›‚¨#l 4úºÝïŽw•‹ý½Xk•ÇóZ®›a·^ѱ"œØ„2yo¼ãï½_+%2ŸDÚ©—‹û²»ÿq¯ÍF¥ÀxÈ‹~ô¤‡¶Øq.ˆ"í—ú|¨-øÑnö¥¯½íoìÓO¾ˆ«OÄå÷GxZ®X­Âáœpüä+?Ö’åkõÖ«Ýþ+Tª,áç£{ùÜï¾÷3½÷ã“Ìb–?M<à*Šk–ˆ%ïý÷ßÿøïyïáË\Ù%G‰¿'®ÀÀôë%[-=òG€h€t¶w9RNz$JçzPmJË5"e¤G`#MˆTyè‚Y¶wÂ``•“,% É.!¢?ˆ°-Š!&ó‚3Hƒ5ˆd#¸a€€hÖò€g N KaÐWÜQg0(¾µ}6È„Mèÿ„s† o÷„SH…U(lQh…Y¨…[˜kXÈ…_†aˆj±'†eh†gØg^ˆ†kȆmè†o‡q(‡sH‡uh‡wˆ‡y¨‡{ȇ}臈(ˆƒHˆ…hˆ‡ˆˆ‰¨ˆ‹Èˆèˆ¸gYðNP4„ýÄ.˜à9¨‰vÇv B,efqÖ ™‡`OÇ  «Ã“ip!‰údA”QK˜ã6|” ™¸‰»Ht( ÿç=Ãp‹1Q‚`U©$vQߦOp‰†~g"î…‹˜xV¼ˆ,§J„Ââ ~‘E¢ˆ^ p6\Ї#½ sÀø9œ¦‹yAfw‹—ðŽÙh÷ÿpûG,/„÷· ÂCdhõxñˆœpD÷¨Ú(!gd}£ƒ¦HZ¡e5Ô@nà_îAp‘hfW°×1¾ˆ*Ýp‘Â…þE.{µ<É^´µƒ>èFQN¶‘·ÈSÐò ˜`3_óñ:u4Wïöù6YQ»Á¡5]^1ç¨\ inçvr i•ëöp$Å ÇXùSTÔ£‘þø-å”®×hL.G `VÂ4;=¥5‰[ù–oˆ‚kõR ÅIÚÓ—8*¨ø5UMu–¡Àv–cc l9 `aP7Ö—‹ñ@¡à]‰gWÉ™Øæ]¹a pÿO¯q ÏØE¾³€Ø¼pŽOÉ[b‰– eAK#x© LbÉ!š FˆõŠ«$N‰Ô^F ½àu*éyôƒ3Hg+C˜\šÄ¥‰;°éNÁV6pÏ ù\PN†àB^ xtÍéœÚD‹éžÎ–a£K ©uZá]N– êC˜u&NÙ$(¹IDað!ðäAÀœ³4€Œ³u¬'=Õ`=õ—ò‹ *ú2O"†Sd¨,ðå[çb˜Sd—(’žÜõž+šmÛØ®óGBÕ¨‘µ3õ©>€ÙŠgé‘úñAÔ8‚—ø†€‘ì±Ks4;Œ£ŠŽ°ÿ6,Á6âç8Hbÿ&8å c°jA)X @Bq?àéN†B¡Sw¹b,ЦÛ&’VpC œ£’?"ÔŸƒŽ½P¦œ@ŸvU šCE!}8U—yú¡ÃzQ»÷vÚ§SM PYŠ¢€ƒ>€z!`¨ùCDÙ.¾³F옦¡Zl6öb€‘Pƒ¡ e:CÄ„ù‰Žcú0³`~ª-!"(*vAƒ*/H§º–¸*ŠºS & ª¢Ítv ©{à¦16ç;ò C"È".&‘¢ª­Æöp#J|Ú«?„-—@r9'›sdeuȺy»¤«Þ©üÅÝöÿššÚÓ*¦ØC¬Gõ¨ýi(ËŠ@Ó±£Ïʃâxúº©YÒ*“´˜Û ±ÜzVÈ27^ö-"ª«¨‘I yÚ®6 a‡H»Ê0ô « ÂJ~Tå¨VúZ:°Íy\‚ ­+qН:ر?ûkÝ­K3~$º³Ø¥‘oÖ±²ZR:K퉫{r¤Ôê²yR¬ ¥ª#¥žpµ°©&¹Ê:³Y³˜zsǵdK°ŒóXüéc@ ·µ&´8KNt =%ŠX€>„=›§£H›®/A:û¦¤yë´ûÒ8s· ³™zƒ#¡ö³µ›+^‹¢W𬙻¥ØDFz°C;ÿv,Q5¢í·§›ks›+bJUTšzÝæ;ߊ^ÀØ‘¸Dkôe4afÒ¸Šf´ŽäÕ´¢ûv—FÊ´=‡›«V4œœ›8åçH>«€çY•ÒÙµÔd a«¹µTu°MS•¿W–Ø›žÕ) Œ'Ò°¨ ¿¨Æpn ëYP qPŠa»a@s#‰Šoš?f™Z²!=³ê1ŠÕô;’MB Yž~E¹€gc´sHå/©îe¬ÅQ@)°4[K\Ù•§º¼9k·$( —‘ù‘H÷{®ñ Þ¦º©ƒžÕþ%š#^êKÌZ®Ákµ ®5›„µe‘;\ÿ$ãê“DL’†µ](ûj€4‰Zw“ò“FÌwÛEx‘°3K©ƒ—_n×”œk¾bp[¹%`8óRéoÔ•±1LÇÄÖ¡ëV£u¬ÇÚº®é–Ç{ ÈVYf£´x܃ŒÈIŒ`U°×ölj É›hhY\oÉ—ŒÉ™¬É›ÌÉìÉŸ Ê¡L lBÊ¥lʧŒÊ©¬Ê«ÌÊ­Ì® ˱,˳üʵLË·ŒË¹¬Ë»ŒÊ¢ìËÈËÁ,̶<ÌÅlÌÄ|ÌɬÌÅüËÍ\€Ë ÍÑ,ÍÓLÍÕ<ÍÎŒÍð‡ÌÖLËàÍÜ ÎáœÞ,Zâ¼ÍÖœÍéÜ}çlΫœ$ÏåÜÎì<ÿϹüÎñ\Ïá¬Îûœ|ô `Êlð,Ð$Лª|ÏíÊ ÐþÍ ÐϦ|ÐòÑ´Ð$ J§<\%°ÐÿÉÏMz ÐÏîüÐ ÝÑÿÜÐðìv]Ò]Ê Ó·|ð|¨,$]YÒ=-zâÌ’'mÒ/½Ê ÏÖ<GÍ&.Ð"Î2=Ó³\Ó}Ê0ÐFÁÓ>­Õy7ÏLÍFÅlÔ;]Í,MÊ^íÔQÖ«<Õ]ÊaÝ»¥¼Õq}wælÖ`ÒÒlÔå¸ÔB}Öi ؤ¼Ö§ìÖ¦,ׇÝu ðÆœ-¸Ñ}MÔ¥œÔ$MÑe}ÑÏXØmÿ %ð:M6ݬÌÑ ÓÝW¯%ÑÚ ÙÕ@ÕÙòlÕñ\Å9Í‚­Ó±ýʹmÓngÊ ¶`ÓR}Ü ÓOQÕ†%MÇM×­ÓJØÕv€Ý"u½Ëg0ÝW$Ñ~mÊ—=бÍÔmy} Ó eÓ:Úª¬DÍÔa Ï èÞÓ]§UÊ`Ó €Ù¤|Û$0ßWÍÛŽÌé­Ó±RÊ€Þï×®¼Ö>ÐíM×@ÒÝ ÝÓÕÖ â(·€Ý%ÎØºLÞÕTmÊwMØF!ÞÑ­ßJM× Рà×)þ,žÊ6~Ó©=ãxDÙ‘@ý=ÿã_-¾3þãõ㕽ä7álM×3NÈ=ãÜíÝúÝäAýߊõá!.æ·Ô! %ÞÚÍݳüÞ#ÓÂ]Ö1^Õ1ÎÔ¸ÄMÊa­äþÍãï ççáMüçÄíFFÞÖ|=äÍçdýƼ{áWÍF 8çPÙl­ç…~ßäX#ËSÍâ`èÖ¨½å<^ËMÊcÎêd^Ê@âh¾Ýl¾áªìâ© Õyî×NÊ|ß‘Nãï ÞNø ä<žéeí(°=má²ÝÔ¨<àTŽë1>àŠ Ž^ånÑ»ÝÒýÖuNØÜÞêå^p©ügŽÝýé7îË…Ê·.ÿí1.ê4Îá)íîí°â%Ýáï>ÔÏNÙ®éM÷Üú-ä5~ßC=è­œëÀ^•Â^Êè½ËS}ä2^ì¯l㨾ñÔ^_änî!ooª%Îî±¼ÞïÇ®äÕ^Ù—mìOãV^Ò)oàç|Ùñ.Þ£Þáðä¨^éÑnÐôNóM^£žËoÙ-ñîñªþʱFs!f¯†*òWÏš¯ë&ßÍÊ­ò‚.ôÛÜð÷žñº>ó4_оÙ7®ó¯Òßò†îàHÙ/ÛÃ>ïPô™MÞ\>ð_ë .OIâôãnïQkS¿K˜‰õï¤ü%æ'®Ëø…ôpÏÊcïÿõƒàbý™ÏÊ€¢/ó+ìN†~ÐvOñ½^ëÈ|í Oô‰ßönŸô àøíë?oôÊ/ü×¶fŽæ'Ìo÷Û¾ðô<öí¼Nøÿö8­í”„§ÌÔÞéÏ„Þú?ÿëyOØîòa?à“½Í¦_Õÿkþù}éúÝøž×ÃÏÿÏQ‡èùd6Iå’Éin,f€D5«$ÆÓ™Ld)ÌFvû dKJDQQ& uaZm/Õ wœ•ö«¼Ø” «¸õßÀ°ª”.F”ü“™:#÷& ó2 «šÖ™`cegÿikmoqsuwy{}ƒ…‡‰‹‘“•—™›Ÿ¡£¥§©«­¯±³µ·¹}7:DŒ6ÇK&F=—@UV“Ü%Èæ8ÑòÓ2ó©LñÍ¡ ÎÉ@9|ô¡¹³a "ô %˜HÑFOâɃ¨EÞ),¡ñWeR’ š6±+¹.a(“%Z’8ˆÇå’n7qæÔ¹“gOŸ?:”hQ£G‘>Ûp„\Ó ìòMx‚!á(1í$Ħæ #£–Ó'•& е"sj‘Ȇ 7Llä€à XI(Pse”T6%/GhËì²×•ͤ!G–<™reË—1gÖ¼™3§ÿŸ) H,À#Z /žÁª× …ÓæBw…—ªD†µŠöG÷¡2I& '€€›%^hóv‰ÜŠuÇd­uÁnúú­Ò›KàO¦ª›»ÇD8xU¬do輞}{÷ïáÇ—?Ÿ~}¡Ÿñç׿Ÿªfû p1 , ™ ä¾lÐÁ!ŒP ) &Á 1ÔàÂ×2ìp@  DÇ*,ÑÄQLQÅYl—aŒQOÆqìî¼]ìÑÇ RÈ!‰Œ&Ç#?DRÉ%CÜÆ"¡ŒRÊ)©¬ÒJ÷˜Ì2I-·ì’KEäñÊ1É,ÓÌ3ÑLS˜/ÙlÓÍ7/TSÎ9éÿ¬ÓÎ;)„SÏ=ùì“D< TÐA -T'?õ2ÑE=4ÔÑG!TÒI)­ÔÒK1ÍTÓM9íÔÓOA UÔQI-ÕÔSQMUÕUYmÕÕWaUÖYi­ÕÖ[qÍU×]yíÕ×_½4ƒF8ÁÔÛ%P˜å‚Š=v€`gµ €k± ŒzÖÚk3ÐEk ÖÜsÑM‚cÙE–cÃå‚v¥M×Õ‡°ÍW¢ ÈÜ\"×Þ .Ø–FÀ€‚c“Í¥FpöXö„i16¸Ô‡,à6‚ ðíx¨~(ƒq©ŽÊÕØå—ÑÕ€á]Š½à–…/†ycåfÁ‚£4ÿ@Ù–X–§e‘NW™ÝÍeÞˆ3–8g¥AåØÙk)W´•h£BžäZZ (@#m :€ pqg£©Ž[nW×m—bÀç¹=µVäXÔÎÛ3±Å`VÎwÜ®&üï5…¦eܬá®å‚kç[óÍ%eºa[6¨÷fÑ9¿ÔjY.—– ˜$–"ŸÀ¶`Á—qÀWöz€¯X&Fíxiy€g*óÒ‘O~PÏsAÁ„mõ&]yIýîùÚŸo! ÷Õc;–Óåõòµm©.Ù• °%õ̧oß}2™¿%þÑMxŸúá?¹yüaŸ`–òd!òÍB€ŸûÅïjq2Äÿ¢x‡³@ìA Ji~µp^³&½ ê[„Û—, ;!à{øãÞíg› ƒ…‘;  a±2ìo{´á ¡TAZÀK{Ã!=Üek…a` O>Âå+kãc›õŽFÃ(þŠUT‘A±]¦Á¯?äĈ9ûOƱ¬/áz”§.ód1hâ&dÄaÂf:ô¡(@ŠŽIô¢ͨF{AQ p£ ©HGú ‡ÙÕ8'IWÊÒ–ºô¥ÿ0©LgJÓšÚô¦8Í©NwÊÓžúô§@ ªP‡JÔ¢õ¨HMªR—ÊÔ¦:õ©PªT§JÕªZõªXͪV·ÊÕ®zõ«` +«V‚²¦ {O€€ Ìš-X C@Wºæó€«X÷ÊW¬B`€ì(±V¶¢Õ le ܪ×/\` X€]™×˜§7ê«f7ëSÅV(ëa¡@ÖÅvá­qpW#à PB@ÎÚö¶: mbȈÒja­+ðjɰÚÖJa¶µÅ­r—ÓÒš5¸ðm€+ÜÆŠ¡¸Y@.s·Ë]’Ö¬£]uWPX¬…¼e ÿ.u‰€Þ²ªºSHìn‡à\ùÆO¾l¥B  ÃBWE×µPüí/2ì"¡®tµ¬ú a#`  íV›ÙîzøÃس/€ûÝôÒW¾ëB‰?+¸Ø³/6/^[^ÏÆ/Æî}ñ2 áÀºð› Œ—×fm"+Y ‘=]™¼€Ø~‡ÈFÃ2ˆ·ÌåÑm@¾#Np{Øš˜xLÏ%Â{ï+f+H· o.BЧ@OãN­„\ä¥ `  e"8X ••­†‘À_$!¯'Ͷ¶Åg6ÂZUð¦L塞nnsÿ¾|V$ÌY ’4eì,`%÷9¼?¶r„D'A»HpÀ¢[-3Jûúׯò,x1mÚ#ˆ¶žF±©g%$[Í)€ï&kh ó¹&…>¡U]mã>ÚÉEÀuX´ŒØèN·«,iiwºÔÐv·Z…=lf‹Z¼÷>©¡PlOÀڮƶŸÃýï s›×”7ÄWëXÝøƒêí)ìÛÌm•sÅOœãÛãiFB³0r»›ßt5ÂÃð1iYRžr”wÝí„K8×47‘¹.ñžûü8"n÷§3ïo|Ëù³OÌió$ÝÔG—žþm=³œNÐò[ €ÿ¦mó–ÖH°5ΓÛ`%3üçhOûQØmñ¨¿{v)ùÓ£Pr",ÝäUÈ€¿Žu-SÃ9ßsËîð!œÝµþ·£ÕÎøÆ„â'ÂÅ…0÷LŸšÔáUBÝUœï$LÞ üͯžeªo`ïØðà>zÄ/`4ζãgOûdèÖ¬Msä9Ÿ{4½Ù6®Âæ7÷*¤ºôVÿ÷èßjúB×9ðP¾Ím&ð÷߯½ö·o z¼í»÷=to_Rÿ»™OBÝ1ï„Ï7áùVž: -ÒПêÑßùªû›zÄ€Ÿ*Wx·NÚvdÜw€ wîGqž%m+vVsGZÿ§tôÖ=î×yÕc±ö&«aå†ò÷àuŽñ«U}Æd$YÙ—æf%8nú—€6xƒ¦@j¸‡Ø^êåvÎ%cøuç€õV|V€ ö_+7&?& P…hý[ kýçXƒ,Wau¥‚ð£1}ù§8x†hhkui®rmiø†p¨CÈ%³†qx‡xØ +À†°i¯ò«%ky8ˆ„è Þ7‡ò„\XˆŒØˆ¥°%~Z²„é爖x‰˜˜‰š¸‰œØ‰žø‰ Š¢8ФXЦxЍ˜Šª¸Š¬ØŠ®øŠ°‹²8‹´ Ræmw0W†‹«6ÿi•rnÐo°å拈px5±…«W‹ÌØT·YýÅ‹ì@†4˜Ò'pÄh€PŒŒö…ÿ׌âøT pÔˆ`g+>ö‹€˜ 侮ŽÇ}Âȇã˜Ü—ŽXpzíx+ù€ŒÞ¨¹Ëxþx0…À8ЇŒ9‘Ö³_U¨Šáuy…†OH §a e ÐzQa(Ã%†Óh+OH ‘¨ƒ`™’‚çmM6eå°‘ЀøoòZU¸xoB“ f“ßvpï(”Vh"`€‘˜z5”³ægƒF’ÿõd=¦–‚[€±¥„üwŽD xÿT…2S•jÉpæ… I‘ry3ÊXW]G[cÈjßæ…t‚\ÌWWJ YMÖZ¨•—Nö|–a¯'þHW(˜dÞ¦3gŒ'hp)p×où˜Iuƒ'Œui‡ kpÉ`áF[!ø…WÉ–(’YŽÖX—²'Y P—f©ö–¡W–¹˜*9sPÈdø8—ÄY3!×w¤ÉÿCšäDÛ`\8[-)ø·š §–NÈ…žiSpdy5r`ÉiÿÆu*YW¸kð÷mä™Y8•™ÒšSw›BP›à£[çzj©5TŸ,G›€’sE™§Éѹ‘³ócÿZXQ&¹M6Ÿ¡}¶•žöYœ"Ú6üÅm pЙ”}¶*ŠgxtU"vžˆþˆ>ºvn:mq‰ìa…–`*Zz5÷éšBºn8š:©Ök!É +Ê£\)€NÐdkˆ€‡£ç›O:¢^j3'jBš¥€ò|Ýpx&¨¤ PM8Ï€ZeȦÜXvDɤ;Ú‹!ê¢@9rÊsùw§ÔÇ[÷(¥ßx#ô€Wù‚:¥ûxXH§Zj|9Gh¾™\ž.ª©_Ú©±2ud©›ª™TÇ|T6™£¤ê¹ŒMø¦,‡¨uJxউ§Ô¸ ¬Gª}&˜ÿ¼*§Yµj«×X” ‚ Ê/ú~з‘§ ›Pz|W@›ªQƒý«\šªžº­°¢‹®§­+¬è9¶U:´Ö÷°k*x^û­M¸¦tªj7Z¦y¸KP®W+£8+¥öšœJmº®=ê¨K’}z­SЦV»Yé)p=«²´˜«¸{Û¯Q ­€w©N6¦€+¸´ë %úžà“¶sJºa®ð±ªg“8·.:©ÝÉX¹¨Kƒq¤dJ@KædžéNjËm!ø;¥¥K Áˬ˜{¢‚Š1¼‹ eÔ ƒý"e²FhÆ›²[»ð«ÇygÎû¨Ôæœšë ±¯•»V‹µnʪN·f– *°Å†ÔÙZì{¾Y†¹ÿ°žSëž» KY†F«gZ²Ü«¶•Ÿ9:&÷G·¦{¶HÀ²ˆ7«ûÛ¿t¾3¬Sª¡Ì? öîë»ñ›Ãp!›p—`˜ÌÃ(ú¿xAe2Y²F¾B@À¼inf²W阀¹(È :’ÀÉ«ð¨›W{™fë… jdz‰´¤šßr(™NV·e´®É‚Gœ­Êø–h´Ñ+À²I€ºha Å:üÇ'a‘æ&•!É„)è¬i ú¾®Ù¸˜ —úÙª\û&M“2yYgÅH™Œo¹—ãºþ™‚ªâÅ"œÉ†²š<»&“rLy¡‚<HfÇë¸ —zó—ÿŠ|WJ|Ç2c •ÜZliÉ}<¹€|ÌÇQËõÀ£ eÙ vŒÌÒL3Ê|LL (Œ Ñ<ÍÜì.Õü@”f¼Ø ¬ËТݜÎïòÍ~Àc0†f©LÛ¬Îôì%ìÜ`” ¹Qó\ÏþüÏÐ=Ð]Ð}ÐI•¯†Ð ÝЪ§Ð¤ìÐ]ÐMÁ}Ñ]Ñ}ŠÑýÏí¶ÒþüÑ"]ÒêLÒ&ÒÒŒÒ*ÝÒ:ÌÒ.Ó´ Ó2]ÓKÓ6ÓŠÓ:ÝÓÅÉÓ>Ô ÔB]ÔãHÔFÔ´ˆÔJÝÔ¯ÈÔNÕªÕR]Õ¥HÕVÕ ˆÕZÝÕ›ÈÕ^Ö–Öÿb]Ö„HÖfÖqˆÖjÝÖgÈÖn××r]×µG×v׌‡×zÝ×>Ç×~ØêØ‚]ؾF؆Ø\†ØŠÝØŽýØÙ’=Ù”]Ù–}Ù˜Ùš½ÙœÝÙžýÙ Ú¢=Ú¤]Ú¦}Ú¨Úª½Ú¬ÝÚ®ýÚ°Û²=Û´]Û¶}Û¸Ûº½Û¼ÝÛ¾ýÛÀÜÂ=ÜÄ]ÜÆ}ÜÈÜʽÜÌÝÜÎýÜÐÝÒ=ÝÔ]ÝÖ}ÝØÝÚ½ÝÜÝÝÞýÝàÞâ=Þä]Þæ}ÞèÞê½ÞìÝÞîýÞðßò=ßô]ßö}ßøßú½ßüÝßþýßà>à^à~àžà ¾à Þàÿþàá>á^á~ážá¾áÞáþá â">â$^â&~â(žâ*¾â,Þâ.þâ0ã2>ã4^ã6~ã8žã:¾ã<Þã>þã@äB>äD^äF~äHžäJ¾äLÞäNþäPåR>åT^åV~åXžåZ¾å\Þå^þå`æb>æd^æf~æhžæj¾ælÞænþæpçr>çt^çv~çxžçz¾ç|Þç~þç€è‚>è„^è†~舞芾èŒÞèŽþèé’>é”^é–~阞难éœÞéžþé ê¢>ê¤^ê¦~ꨞꪾê¬Þê®þê°ë²>ë´^ë¶~ëÿ¸žëº¾ë¼Þë¾þëÀìÂ>ìÄ^ìÆ~ìÈžìʾìÌÞìÎþìÐíÒ>íÔ^íÖ~íØžíÚ¾íÜÞíÞþíàîâ>îä^îæ~îèžîê¾îìÞîîþîðïò>ïô^ïö~ïøžïú¾ïüÞïþþïð?ð_ððŸð ¿ð ßðÿðñ?ñ_ññŸñ¿ñßñÿñ ò"?ò$_ò&ò(Ÿò*¿ò,ßò.ÿò0ó2?ó4_ó6ó8Ÿó:¿ó<ßó>ÿó@ôB?ôD_ôFôHŸôJ¿ôLßôNÿôPõR?õT_õVõXŸõZ¿õ\ßõ^ÿõ`öÿb?öd_öföhŸöj¿ölßönÿöp÷r?÷t_÷v÷xŸ÷z¿÷|ß÷~ÿ÷€ø‚?ø„_ø†øˆŸøŠ¿øŒßøŽÿøù’?ù”_ù–ù˜Ÿùš¿ùœßùžÿù ú¢?ú¤_ú¦ú¨Ÿúª¿ú¬ßú®ÿú°û²?û´_û¶û¸Ÿûº¿û¼ßû¾ÿûÀüÂ?üÄ_üÆüÈŸüÊ¿üÌßüÎÿüÐýÒ?ýÔ_ýÖýØŸýÚ¿ýÜßýÞÿýàþâ?þä_þæþèŸþê¿þìßþîÿþðÿò?ÿô_ÿöÿøŸÿú¿ÿüßÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ!ùÎ, Œ¡`ÿ@€pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïl/.óôå-ôô1ç‚òò¹°§'à€/b¼˜!cÞ‹Ä€ÑpÆ‹ IÐ{±ß@óí3Ã!†É’¨`¦ß?/5hȬáe" ŠóâÑ0odMÿô`@(¢èŒ$8]ÀØÂ#€ 7“ú$sÞÐH8héïK™4h‚áPOOŒy(¿œêO¶G%æsŠ¥êÇ" ]Lc×ÅUHY·–qéůיaÈæÔÓp/— 1.p€*="ePˆùÈÛ Z(.5¢ïLß¿s}¹åXÄSZ$…Ñ âÅw”œ}ñˆì¼0z]8oŒ¨¬Õ {bÃãÉ…4ÊrIÈÛe™à 8ú¶óŠÂ3ÎÛLº§’™Ãu®ùÌl}2Ô;d{ûß…ºM_[7qƹEhàá€H`€`ºeU (ØÕm  @8Ð`ÿlDÔð!6Ü€ÑmI‰DTvFÌÔ^)‚æ[.ô‡DCt Ñ—@ÜŸØ'„]q-aW ku'DŒ¥%aÐy9VßE„$Ð{4š·¤–9¥ ÿ±¸–@J>E£Nl°Àš °æš'ÁࢠaBhá†TÜ “†Uć¯yH“\öÉ¢¾sÒ%)Nxm$iCzڹ،A¹X$ð¥Q¦sýµÖEÛuÁs¤¶µ¨C›> ª”4iD©yÕ*[CØ$jTòqéå–4VgeŠ9ö*i@®:¡ä)]ƒ¸…íPT+¥Bð駆Ul Ó *ÿ–1ÉTâ êA¼°n:UÙã¬ô PŽ ýº¯tÕ!Z‹ÅQZ=§Õo™Ù&D¯2œŠ¥R/±Iê )®k¥UÞÿúñ—OgÄiP++ÊsÙÄ/¹/¾v,Å´ºY;Dþ¥@B@î„›-‡Š¦ "‚æ`ƒ[ëfÝŠŸ"™IìÑÅÝÕŽÎc±‘Y‡[¬J Ñ1veç*PŽð¥SQ#­]ÄÖ&Í—#Û¸ºMr°Å lvßò¢ÕòÃÇviëVñ;Ògc_Ás•J<@ƒ6@|†ëF/ME»'~¸.Ôî‚×Þž-®v–tYù¸DP<ÿ³òŒjvpÏ&…¬ ÏÖê«[T0¦×A µð˘úûòë4– =í¨J)Uð WÚö,#ŒøóЧ-­Ï®>„í:S19]ôÑç•#íрݡ4 +„º!zÍ j@=]‰g{ É’ø~7¯»QI7b[™ ç"õ-$WÉŒN¸£½‚ýËSY’Þp¤„(.KukÙ ç½b R¬sž»CNa}C¨–Œ@A hD¢çD€*DMd$¢Àbp 8óž^(ÅA"°'Éy@Üþ&CË%p‚ ´áȪ3&‘]‡ctŠ‹TEækdÖ›` Y$VÿïK{KÜÅB¸ŸŒ©O+ÔrzØ'ù1öÓÐ|&…%&J&óÑ#Ób¾%DU9‰5€ž'z§W" ›”–w¶N!{_ôËχF:e#ü’ÞÁJØ(Iò\2Ôå‡W2¶-ðÜæÀ¦×ºê&›^üKtHY‡y•c¢G  +z²²pÕ„ãødNoŽqôR%mÉ=\Šó¢œ,‡99’™€¨CY…i&êtEˆšÿj˜°>Ùkd"”Q+؂ȅÓ_ùº$Íbø;òÿÓiØFÀU~Nlv”i(ÏÇJRú„2@…Ø=GxÏ1•)wÚ±£7_@Ó³ðkŠ•’ 9!%ƒ†IÎÜ&20õ¨´˜ð+€¦;!RC‹(B'ÑB>t H|Ú0µ©…ѓ̺Iƒ¢|t'I—2 ¦à#1Œ3—Åé•ÅâVAžÊÓŠYÒßIÑÖžR*rûŒ Þéך ('$Ö/ÙÒË"!žêÕÀëY)$ ™Eðy(ð'm)ò¥Þ¢]çœÍ+˜.€R»¼À².0Ê1¤ÄâgCµ@ÔŠ”flÑCDH„ d*Œb!‹°ÅRjl¨Ÿéì7ŸdIŠe͸YªÿÀéÇ—Rì&àÓ#d“åX DkºŸª9§ˆ¢C¤“žv;€ ²‘Ok×#íj§Ù`Ö£Sgz ÐF˜† :ëáÍí’>Ï\18¾@©ô”«ÇN^ªÄ:á 7&MqséFL½—†‰©§MÑT8`ŸÄéÍ’¾G5|… x‹‘H›Óƒˆ9$ 1À&0°åÛ§E ÃuFÑС­„DˆÑ6‚£aéu@`˜Æô¨0é=Wú,H¨¼E­¿FOúÓï€À¨G=…N£ú+Xu V0èS¿Ú*u©àê[»CÖ,`²©íkwlØPèu±Ù‘ëUoѶ^6³u mbK{Úήv¢¯midk›ÐÜN‡ª©ýí?‡Íõ®‹ ìs#Ö«¦u²£íîpŒ{Ô*ðâÚ]ïo¤›Ôµ¶v¿¿ïQË; ü¸6޽ê|·šÞ wsÂ#næ‰S¿¸;2®qvp¼ãêø8ÈÑ!ò‘›£ä&OF!ùd, Ì)@‰„©Ëí£œ´Ú‹ó¼ yøˆYš¨c~ëÒºoÒΰj#q®ã|Íì‚ÀŸ/7D•¢ ðèŒJ§ÔªõŠE¶Ün÷%ðŠ·à±¸lþ®Ò^4;àfÇÓss}|?¯ßä=?ßæ÷¨¦Å'(—H·h׈÷¨gø89XYHrˆx©èÉê( I*IR;ripgrep-all-0.10.10/doc/update-readme.sh000077500000000000000000000007301510417424300177110ustar00rootroot00000000000000#!/bin/bash content=$( cat < $(cargo run --bin rga -- --rga-list-adapters) $(help2man -N "cargo run --bin rga --" | pandoc -f man -t markdown --markdown-headings=atx | rg --multiline "## USAGE:(.|\n)*") END ) rg --passthrough --multiline '.*update-readme.sh(.|\n)*update-readme.sh.*' README.md --replace "$content" | sponge README.md prettier --write README.md ripgrep-all-0.10.10/flake.lock000066400000000000000000000121441510417424300160260ustar00rootroot00000000000000{ "nodes": { "crane": { "locked": { "lastModified": 1759893430, "narHash": "sha256-yAy4otLYm9iZ+NtQwTMEbqHwswSFUbhn7x826RR6djw=", "owner": "ipetkov", "repo": "crane", "rev": "1979a2524cb8c801520bd94c38bb3d5692419d93", "type": "github" }, "original": { "owner": "ipetkov", "repo": "crane", "type": "github" } }, "flake-compat": { "flake": false, "locked": { "lastModified": 1747046372, "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { "owner": "edolstra", "repo": "flake-compat", "type": "github" } }, "flake-parts": { "inputs": { "nixpkgs-lib": [ "nixpkgs" ] }, "locked": { "lastModified": 1759362264, "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", "owner": "hercules-ci", "repo": "flake-parts", "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", "type": "github" }, "original": { "owner": "hercules-ci", "repo": "flake-parts", "type": "github" } }, "git-hooks-nix": { "inputs": { "flake-compat": "flake-compat", "gitignore": "gitignore", "nixpkgs": [ "nixpkgs" ] }, "locked": { "lastModified": 1760663237, "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", "owner": "cachix", "repo": "git-hooks.nix", "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", "type": "github" }, "original": { "owner": "cachix", "repo": "git-hooks.nix", "type": "github" } }, "gitignore": { "inputs": { "nixpkgs": [ "git-hooks-nix", "nixpkgs" ] }, "locked": { "lastModified": 1709087332, "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", "owner": "hercules-ci", "repo": "gitignore.nix", "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", "type": "github" }, "original": { "owner": "hercules-ci", "repo": "gitignore.nix", "type": "github" } }, "nix-systems": { "flake": false, "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } }, "nixpkgs": { "locked": { "lastModified": 1740711547, "narHash": "sha256-qvixVB2cFGOX/B//KbjKUndrMbIDEGBx7xphitqnvr8=", "owner": "NixOS", "repo": "nixpkgs", "rev": "2ca95eef7e3b33ea8b858ed025e492373aca8106", "type": "github" }, "original": { "owner": "NixOS", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { "flake-parts": "flake-parts", "git-hooks-nix": "git-hooks-nix", "nix-systems": "nix-systems", "nixpkgs": "nixpkgs", "rust-flake": "rust-flake", "treefmt-nix": "treefmt-nix" } }, "rust-flake": { "inputs": { "crane": "crane", "nixpkgs": [ "nixpkgs" ], "rust-overlay": "rust-overlay" }, "locked": { "lastModified": 1760279501, "narHash": "sha256-EKuWaFiWINOlrVRQRRjFNpRuoWz62KSruJARuFE60qg=", "owner": "juspay", "repo": "rust-flake", "rev": "810667f24c6b5f2f2b0f6bff26e438efefe001a9", "type": "github" }, "original": { "owner": "juspay", "repo": "rust-flake", "type": "github" } }, "rust-overlay": { "inputs": { "nixpkgs": [ "rust-flake", "nixpkgs" ] }, "locked": { "lastModified": 1760149850, "narHash": "sha256-FVVS5YgOFQHa8waL9EoUuw29iaDIF0qRkVlXIaU1j+c=", "owner": "oxalica", "repo": "rust-overlay", "rev": "a8143c74e5ed8cdbca3c96d4362b6392577481ff", "type": "github" }, "original": { "owner": "oxalica", "repo": "rust-overlay", "type": "github" } }, "treefmt-nix": { "inputs": { "nixpkgs": [ "nixpkgs" ] }, "locked": { "lastModified": 1760120816, "narHash": "sha256-gq9rdocpmRZCwLS5vsHozwB6b5nrOBDNc2kkEaTXHfg=", "owner": "numtide", "repo": "treefmt-nix", "rev": "761ae7aff00907b607125b2f57338b74177697ed", "type": "github" }, "original": { "owner": "numtide", "repo": "treefmt-nix", "type": "github" } } }, "root": "root", "version": 7 } ripgrep-all-0.10.10/flake.nix000066400000000000000000000057211510417424300156770ustar00rootroot00000000000000{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; git-hooks-nix = { url = "github:cachix/git-hooks.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-systems = { url = "github:nix-systems/default"; flake = false; }; rust-flake = { url = "github:juspay/rust-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs@{ flake-parts, nix-systems, ... }: flake-parts.lib.mkFlake { inherit inputs; } ( top@{ config, withSystem, moduleWithSystem, ... }: { imports = [ inputs.git-hooks-nix.flakeModule inputs.rust-flake.flakeModules.default inputs.rust-flake.flakeModules.nixpkgs inputs.treefmt-nix.flakeModule ]; systems = import nix-systems; perSystem = { config, self', pkgs, ... }: { pre-commit = { check.enable = true; settings.hooks = { ripsecrets.enable = true; treefmt.enable = true; typos = { enable = true; settings.exclude = "exampledir/*"; }; }; }; rust-project = let dependencies = with pkgs; [ ffmpeg pandoc poppler_utils ripgrep zip ]; in { src = pkgs.lib.cleanSourceWith { src = config.rust-project.crane-lib.path ./.; filter = pkgs.lib.cleanSourceFilter; }; crates.ripgrep_all.crane.args.buildInputs = dependencies; crates.ripgrep_all.crane.args.nativeBuildInputs = dependencies; }; treefmt.config = { projectRootFile = ".git/config"; flakeCheck = false; # use pre-commit's check instead programs = { nixfmt.enable = true; rustfmt = { enable = true; package = config.rust-project.crane-lib.rustfmt; }; }; }; packages = { default = self'.packages.ripgrep_all; ripgrep-all = self'.packages.ripgrep_all; rga = self'.packages.ripgrep_all; }; devShells.default = config.rust-project.crane-lib.devShell { inputsFrom = [ config.pre-commit.devShell config.treefmt.build.devShell ]; }; }; } ); } ripgrep-all-0.10.10/rust-toolchain.toml000066400000000000000000000000371510417424300177400ustar00rootroot00000000000000[toolchain] channel = "stable" ripgrep-all-0.10.10/src/000077500000000000000000000000001510417424300146575ustar00rootroot00000000000000ripgrep-all-0.10.10/src/adapted_iter.rs000066400000000000000000000006361510417424300176570ustar00rootroot00000000000000use std::pin::Pin; use tokio_stream::Stream; use crate::adapters::AdaptInfo; pub trait AdaptedFilesIter: Stream> + Send {} impl AdaptedFilesIter for T where T: Stream> + Send {} pub type AdaptedFilesIterBox = Pin>; pub fn one_file(ai: AdaptInfo) -> AdaptedFilesIterBox { Box::pin(tokio_stream::once(Ok(ai))) } ripgrep-all-0.10.10/src/adapters.rs000066400000000000000000000173701510417424300170400ustar00rootroot00000000000000pub mod custom; pub mod decompress; pub mod ffmpeg; pub mod mbox; pub mod postproc; use std::sync::Arc; pub mod sqlite; pub mod tar; pub mod writing; pub mod zip; use crate::{adapted_iter::AdaptedFilesIterBox, config::RgaConfig, matching::*}; use anyhow::{Context, Result, format_err}; use async_trait::async_trait; use custom::BUILTIN_SPAWNING_ADAPTERS; use custom::CustomAdapterConfig; use log::*; use tokio::io::AsyncRead; use core::fmt::Debug; use std::borrow::Cow; use std::collections::HashMap; use std::iter::Iterator; use std::path::PathBuf; use std::pin::Pin; use self::postproc::PostprocPageBreaks; pub type ReadBox = Pin>; pub struct AdapterMeta { /// unique short name of this adapter (a-z0-9 only) pub name: String, /// version identifier. used to key cache entries, change if your output format changes pub version: i32, pub description: String, /// indicates whether this adapter can descend (=call rga_preproc again). if true, the cache key needs to include the list of active adapters pub recurses: bool, /// list of matchers (interpreted as a OR b OR ...) pub fast_matchers: Vec, /// list of matchers when we have mime type detection active (interpreted as ORed) /// warning: this *overrides* the fast matchers pub slow_matchers: Option>, /// if true, slow_matchers is merged with fast matchers if accurate is enabled /// for example, in sqlite you want this disabled since the db extension can mean other things and the mime type matching is very accurate for sqlite. /// but for tar you want it enabled, since the tar extension is very accurate but the tar mime matcher can have false negatives pub keep_fast_matchers_if_accurate: bool, // if true, adapter is only used when user lists it in `--rga-adapters` pub disabled_by_default: bool, } impl AdapterMeta { // todo: this is pretty ugly pub fn get_matchers<'a>( &'a self, slow: bool, ) -> Box> + 'a> { match ( slow, self.keep_fast_matchers_if_accurate, &self.slow_matchers, ) { (true, false, Some(sm)) => Box::new(sm.iter().map(Cow::Borrowed)), (true, true, Some(sm)) => Box::new( sm.iter().map(Cow::Borrowed).chain( self.fast_matchers .iter() .map(|e| Cow::Owned(FileMatcher::Fast(e.clone()))), ), ), // don't have slow matchers or slow matching disabled (true, _, None) | (false, _, _) => Box::new( self.fast_matchers .iter() .map(|e| Cow::Owned(FileMatcher::Fast(e.clone()))), ), } } } pub trait GetMetadata { fn metadata(&self) -> &AdapterMeta; } #[async_trait] pub trait FileAdapter: GetMetadata + Send + Sync { /// adapt a file. /// /// detection_reason is the Matcher that was used to identify this file. Unless --rga-accurate was given, it is always a FastMatcher async fn adapt( &self, a: AdaptInfo, detection_reason: &FileMatcher, ) -> Result; } pub struct AdaptInfo { /// file path. May not be an actual file on the file system (e.g. in an archive). Used for matching file extensions. pub filepath_hint: PathBuf, /// true if filepath_hint is an actual file on the file system pub is_real_file: bool, /// depth at which this file is in archives. 0 for real filesystem pub archive_recursion_depth: i32, /// stream to read the file from. can be from a file or from some decoder pub inp: ReadBox, /// prefix every output line with this string to better indicate the file's location if it is in some archive pub line_prefix: String, pub postprocess: bool, pub config: RgaConfig, } /// (enabledAdapters, disabledAdapters) type AdaptersTuple = (Vec>, Vec>); pub fn get_all_adapters(custom_adapters: Option>) -> AdaptersTuple { // order in descending priority let mut adapters: Vec> = vec![]; if let Some(custom_adapters) = custom_adapters { for adapter_config in custom_adapters { adapters.push(Arc::new(adapter_config.to_adapter())); } } let internal_adapters: Vec> = vec![ Arc::new(PostprocPageBreaks::default()), Arc::new(ffmpeg::FFmpegAdapter::new()), Arc::new(zip::ZipAdapter::new()), Arc::new(decompress::DecompressAdapter::new()), Arc::new(mbox::MboxAdapter::new()), Arc::new(tar::TarAdapter::new()), Arc::new(sqlite::SqliteAdapter::new()), ]; adapters.extend( BUILTIN_SPAWNING_ADAPTERS .iter() .map(|e| -> Arc { Arc::new(e.to_adapter()) }), ); adapters.extend(internal_adapters); adapters .into_iter() .partition(|e| !e.metadata().disabled_by_default) } /** * filter adapters by given names: * * - "" means use default enabled adapter list * - "a,b" means use adapters a,b * - "-a,b" means use default list except for a and b * - "+a,b" means use default list but also a and b (a,b will be prepended to the list so given higher priority) */ pub fn get_adapters_filtered>( custom_adapters: Option>, adapter_names: &[T], ) -> Result>> { let (def_enabled_adapters, def_disabled_adapters) = get_all_adapters(custom_adapters); let adapters = if !adapter_names.is_empty() { let adapters_map: HashMap<_, _> = def_enabled_adapters .iter() .chain(def_disabled_adapters.iter()) .map(|e| (e.metadata().name.clone(), e.clone())) .collect(); let mut adapters = vec![]; let mut subtractive = false; let mut additive = false; for (i, name) in adapter_names.iter().enumerate() { let mut name = name.as_ref(); if i == 0 && (name.starts_with('-')) { subtractive = true; name = &name[1..]; adapters = def_enabled_adapters.clone(); } else if i == 0 && (name.starts_with('+')) { name = &name[1..]; adapters = def_enabled_adapters.clone(); additive = true; } if subtractive { let inx = adapters .iter() .position(|a| a.metadata().name == name) .ok_or_else(|| format_err!("Could not remove adapter {}: Not in list", name))?; adapters.remove(inx); } else { let adapter = adapters_map .get(name) .ok_or_else(|| { format_err!( "Unknown adapter: \"{}\". Known adapters: {}", name, adapters_map .keys() .map(|e| e.as_ref()) .collect::>() .join(", ") ) })? .clone(); if additive { adapters.insert(0, adapter); } else { adapters.push(adapter); } } } adapters } else { def_enabled_adapters }; debug!( "Chosen available adapters: {}", adapters .iter() .map(|a| a.metadata().name.clone()) .collect::>() .join(",") ); Ok(adapters) } ripgrep-all-0.10.10/src/adapters/000077500000000000000000000000001510417424300164625ustar00rootroot00000000000000ripgrep-all-0.10.10/src/adapters/custom.rs000066400000000000000000000325401510417424300203460ustar00rootroot00000000000000use super::*; use super::{AdaptInfo, AdapterMeta, FileAdapter, GetMetadata}; use crate::adapted_iter::one_file; use crate::{ adapted_iter::AdaptedFilesIterBox, expand::expand_str_ez, matching::{FastFileMatcher, FileMatcher}, }; use crate::{join_handle_to_stream, to_io_err}; use anyhow::Result; use async_stream::stream; use bytes::Bytes; use lazy_static::lazy_static; use log::debug; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::path::Path; use std::process::Stdio; use tokio::io::AsyncReadExt; use tokio::process::Child; use tokio::process::Command; use tokio_util::io::StreamReader; // mostly the same as AdapterMeta + SpawningFileAdapter #[derive(Debug, Deserialize, Serialize, JsonSchema, Default, PartialEq, Clone)] pub struct CustomAdapterConfig { /// The unique identifier and name of this adapter. /// /// Must only include a-z, 0-9, _. pub name: String, /// The description of this adapter shown in help. pub description: String, /// If true, the adapter will be disabled by default. pub disabled_by_default: Option, /// Version identifier used to key cache entries. /// /// Change this if the configuration or program changes. pub version: i32, /// The file extensions this adapter supports, for example `["epub", "mobi"]`. pub extensions: Vec, /// If not null and `--rga-accurate` is enabled, mimetype matching is used instead of file name matching. pub mimetypes: Option>, /// If `--rga-accurate`, only match by mime types and ignore extensions completely. pub match_only_by_mime: Option, /// The name or path of the binary to run. pub binary: String, /// The arguments to run the program with. /// Placeholders: /// - `$input_file_extension`: the file extension (without dot). e.g. foo.tar.gz -> gz /// - `$input_file_stem`: the file name without the last extension. e.g. foo.tar.gz -> foo.tar /// - `$input_virtual_path`: the full input file path. /// Note that this path may not actually exist on disk because it is the result of another adapter. /// /// stdin of the program will be connected to the input file, and stdout is assumed to be the converted file pub args: Vec, /// The output path hint. /// The placeholders are the same as for `.args` /// /// If not set, defaults to `"${input_virtual_path}.txt"`. /// /// Setting this is useful if the output format is not plain text (.txt) but instead some other format that should be passed to another adapter pub output_path_hint: Option, } fn strs(arr: &[&str]) -> Vec { arr.iter().map(ToString::to_string).collect() } lazy_static! { pub static ref BUILTIN_SPAWNING_ADAPTERS: Vec = vec![ // from https://github.com/jgm/pandoc/blob/master/src/Text/Pandoc/App/FormatHeuristics.hs // excluding formats that could cause problems (.db ?= sqlite) or that are already text formats (e.g. xml-based) //"db" -> Just "docbook" //"adoc" -> Just "asciidoc" //"asciidoc" -> Just "asciidoc" //"context" -> Just "context" //"ctx" -> Just "context" //"dokuwiki" -> Just "dokuwiki" //"htm" -> Just "html" //"html" -> Just "html" //"json" -> Just "json" //"latex" -> Just "latex" //"lhs" -> Just "markdown+lhs" //"ltx" -> Just "latex" //"markdown" -> Just "markdown" //"md" -> Just "markdown" //"ms" -> Just "ms" //"muse" -> Just "muse" //"native" -> Just "native" //"opml" -> Just "opml" //"org" -> Just "org" //"roff" -> Just "ms" //"rst" -> Just "rst" //"s5" -> Just "s5" //"t2t" -> Just "t2t" //"tei" -> Just "tei" //"tei.xml" -> Just "tei" //"tex" -> Just "latex" //"texi" -> Just "texinfo" //"texinfo" -> Just "texinfo" //"textile" -> Just "textile" //"text" -> Just "markdown" //"txt" -> Just "markdown" //"xhtml" -> Just "html" //"wiki" -> Just "mediawiki" CustomAdapterConfig { name: "pandoc".to_string(), description: "Uses pandoc to convert binary/unreadable text documents to plain markdown-like text".to_string(), version: 3, extensions: strs(&["epub", "odt", "docx", "fb2", "ipynb", "html", "htm"]), binary: "pandoc".to_string(), mimetypes: None, // simpler markdown (with more information loss but plainer text) //.arg("--to=commonmark-header_attributes-link_attributes-fenced_divs-markdown_in_html_blocks-raw_html-native_divs-native_spans-bracketed_spans") args: strs(&[ "--from=$input_file_extension", "--to=plain", "--wrap=none", "--markdown-headings=atx" ]), disabled_by_default: None, match_only_by_mime: None, output_path_hint: None }, CustomAdapterConfig { name: "poppler".to_owned(), version: 1, description: "Uses pdftotext (from poppler-utils) to extract plain text from PDF files" .to_owned(), extensions: strs(&["pdf"]), mimetypes: Some(strs(&["application/pdf"])), binary: "pdftotext".to_string(), args: strs(&["-", "-"]), disabled_by_default: None, match_only_by_mime: None, output_path_hint: Some("${input_virtual_path}.txt.asciipagebreaks".into()) } ]; } /// replace a Command.spawn() error "File not found" with a more readable error /// to indicate some program is not installed pub fn map_exe_error(err: std::io::Error, exe_name: &str, help: &str) -> anyhow::Error { use std::io::ErrorKind::*; match err.kind() { NotFound => format_err!("Could not find executable \"{}\". {}", exe_name, help), _ => anyhow::Error::from(err), } } fn proc_wait(mut child: Child, context: impl FnOnce() -> String) -> impl AsyncRead { let s = stream! { let res = child.wait().await?; if res.success() { yield std::io::Result::Ok(Bytes::new()); } else { Err(format_err!("{:?}", res)).with_context(context).map_err(to_io_err)?; } }; StreamReader::new(s) } pub fn pipe_output( _line_prefix: &str, mut cmd: Command, inp: ReadBox, exe_name: &str, help: &str, ) -> Result { let cmd_log = format!("{:?}", cmd); // todo: perf let mut cmd = cmd .stdin(Stdio::piped()) .stdout(Stdio::piped()) .spawn() .map_err(|e| map_exe_error(e, exe_name, help))?; let mut stdi = cmd.stdin.take().expect("is piped"); let stdo = cmd.stdout.take().expect("is piped"); let join = tokio::spawn(async move { let mut z = inp; tokio::io::copy(&mut z, &mut stdi).await?; std::io::Result::Ok(()) }); Ok(Box::pin(stdo.chain( proc_wait(cmd, move || format!("subprocess: {cmd_log}")).chain(join_handle_to_stream(join)), ))) } pub struct CustomSpawningFileAdapter { binary: String, args: Vec, meta: AdapterMeta, output_path_hint: Option, } impl GetMetadata for CustomSpawningFileAdapter { fn metadata(&self) -> &AdapterMeta { &self.meta } } fn arg_replacer(arg: &str, filepath_hint: &Path) -> Result { expand_str_ez(arg, |s| match s { "input_virtual_path" => Ok(filepath_hint.to_string_lossy()), "input_file_stem" => Ok(filepath_hint .file_stem() .unwrap_or_default() .to_string_lossy()), "input_file_extension" => Ok(filepath_hint .extension() .unwrap_or_default() .to_string_lossy()), e => Err(anyhow::format_err!("unknown replacer ${{{e}}}")), }) } impl CustomSpawningFileAdapter { fn command( &self, filepath_hint: &std::path::Path, mut command: tokio::process::Command, ) -> Result { command.args( self.args .iter() .map(|arg| arg_replacer(arg, filepath_hint)) .collect::>>()?, ); log::debug!("running command {:?}", command); Ok(command) } } #[async_trait] impl FileAdapter for CustomSpawningFileAdapter { async fn adapt( &self, ai: AdaptInfo, _detection_reason: &FileMatcher, ) -> Result { let AdaptInfo { filepath_hint, inp, line_prefix, archive_recursion_depth, postprocess, config, .. } = ai; let cmd = Command::new(&self.binary); let cmd = self .command(&filepath_hint, cmd) .with_context(|| format!("Could not set cmd arguments for {}", self.binary))?; debug!("executing {:?}", cmd); let output = pipe_output(&line_prefix, cmd, inp, &self.binary, "")?; Ok(one_file(AdaptInfo { filepath_hint: PathBuf::from(arg_replacer( self.output_path_hint .as_deref() .unwrap_or("${input_virtual_path}.txt"), &filepath_hint, )?), inp: output, line_prefix, is_real_file: false, archive_recursion_depth: archive_recursion_depth + 1, postprocess, config, })) } } impl CustomAdapterConfig { pub fn to_adapter(&self) -> CustomSpawningFileAdapter { CustomSpawningFileAdapter { binary: self.binary.clone(), args: self.args.clone(), output_path_hint: self.output_path_hint.clone(), meta: AdapterMeta { name: self.name.clone(), version: self.version, description: format!( "{}\nRuns: {} {}", self.description, self.binary, self.args.join(" ") ), recurses: true, fast_matchers: self .extensions .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: self.mimetypes.as_ref().map(|mimetypes| { mimetypes .iter() .map(|s| FileMatcher::MimeType(s.to_string())) .collect() }), keep_fast_matchers_if_accurate: !self.match_only_by_mime.unwrap_or(false), disabled_by_default: self.disabled_by_default.unwrap_or(false), }, } } } #[cfg(test)] mod test { use super::super::FileAdapter; use super::*; use crate::preproc::loop_adapt; use crate::test_utils::*; use anyhow::Result; use pretty_assertions::assert_eq; use tokio::fs::File; #[tokio::test] async fn poppler() -> Result<()> { let adapter = poppler_adapter(); let filepath = test_data_dir().join("short.pdf"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); // let r = adapter.adapt(a, &d)?; let r = loop_adapt(&adapter, d, a).await?; let o = adapted_to_vec(r).await?; assert_eq!( String::from_utf8(o)?, "PREFIX:Page 1: hello world PREFIX:Page 1: this is just a test. PREFIX:Page 1: PREFIX:Page 1: 1 PREFIX:Page 1: PREFIX:Page 1: " ); Ok(()) } use crate::{ adapters::custom::CustomAdapterConfig, test_utils::{adapted_to_vec, simple_adapt_info}, }; use std::io::Cursor; #[tokio::test] async fn streaming() -> anyhow::Result<()> { // an adapter that converts input line by line (deadlocks if the parent process tries to write everything and only then read it) let adapter = CustomAdapterConfig { name: "simple text replacer".to_string(), description: "oo".to_string(), disabled_by_default: None, version: 1, extensions: vec!["txt".to_string()], mimetypes: None, match_only_by_mime: None, binary: "sed".to_string(), args: vec!["s/e/u/g".to_string()], output_path_hint: None, }; let adapter = adapter.to_adapter(); let input = r#" This is the story of a very strange lorry with a long dead crew and a witch with the flu "#; let input = format!("{input}{input}{input}{input}"); let input = format!("{input}{input}{input}{input}"); let input = format!("{input}{input}{input}{input}"); let input = format!("{input}{input}{input}{input}"); let input = format!("{input}{input}{input}{input}"); let input = format!("{input}{input}{input}{input}"); let (a, d) = simple_adapt_info( Path::new("foo.txt"), Box::pin(Cursor::new(Vec::from(input))), ); let output = adapter.adapt(a, &d).await.unwrap(); let oup = adapted_to_vec(output).await?; println!("output: {}", String::from_utf8_lossy(&oup)); Ok(()) } } ripgrep-all-0.10.10/src/adapters/decompress.rs000066400000000000000000000121311510417424300211720ustar00rootroot00000000000000use crate::adapted_iter::one_file; use super::*; use anyhow::Result; use lazy_static::lazy_static; use tokio::io::BufReader; use std::path::{Path, PathBuf}; static EXTENSIONS: &[&str] = &["als", "bz2", "gz", "tbz", "tbz2", "tgz", "xz", "zst"]; static MIME_TYPES: &[&str] = &[ "application/gzip", "application/x-bzip", "application/x-xz", "application/zstd", ]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "decompress".to_owned(), version: 1, description: "Reads compressed file as a stream and runs a different extractor on the contents." .to_owned(), recurses: true, fast_matchers: EXTENSIONS .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: Some( MIME_TYPES .iter() .map(|s| FileMatcher::MimeType(s.to_string())) .collect() ), disabled_by_default: false, keep_fast_matchers_if_accurate: true }; } #[derive(Default)] pub struct DecompressAdapter; impl DecompressAdapter { pub fn new() -> Self { Self } } impl GetMetadata for DecompressAdapter { fn metadata(&self) -> &AdapterMeta { &METADATA } } fn decompress_any(reason: &FileMatcher, inp: ReadBox) -> Result { use FastFileMatcher::*; use FileMatcher::*; use async_compression::tokio::bufread; let gz = |inp: ReadBox| Box::pin(bufread::GzipDecoder::new(BufReader::new(inp))); let bz2 = |inp: ReadBox| Box::pin(bufread::BzDecoder::new(BufReader::new(inp))); let xz = |inp: ReadBox| Box::pin(bufread::XzDecoder::new(BufReader::new(inp))); let zst = |inp: ReadBox| Box::pin(bufread::ZstdDecoder::new(BufReader::new(inp))); Ok(match reason { Fast(FileExtension(ext)) => match ext.as_ref() { "als" | "gz" | "tgz" => gz(inp), "bz2" | "tbz" | "tbz2" => bz2(inp), "zst" => zst(inp), "xz" => xz(inp), ext => Err(format_err!("don't know how to decompress {}", ext))?, }, MimeType(mime) => match mime.as_ref() { "application/gzip" => gz(inp), "application/x-bzip" => bz2(inp), "application/x-xz" => xz(inp), "application/zstd" => zst(inp), mime => Err(format_err!("don't know how to decompress mime {}", mime))?, }, }) } fn get_inner_filename(filename: &Path) -> PathBuf { let extension = filename .extension() .map(|e| e.to_string_lossy()) .unwrap_or(Cow::Borrowed("")); let stem = filename .file_stem() .expect("no filename given?") .to_string_lossy(); let new_extension = match extension.as_ref() { "tgz" | "tbz" | "tbz2" => ".tar", _other => "", }; filename.with_file_name(format!("{}{}", stem, new_extension)) } #[async_trait] impl FileAdapter for DecompressAdapter { async fn adapt( &self, ai: AdaptInfo, detection_reason: &FileMatcher, ) -> Result { Ok(one_file(AdaptInfo { filepath_hint: get_inner_filename(&ai.filepath_hint), is_real_file: false, archive_recursion_depth: ai.archive_recursion_depth + 1, inp: decompress_any(detection_reason, ai.inp)?, line_prefix: ai.line_prefix, config: ai.config.clone(), postprocess: ai.postprocess, })) } } #[cfg(test)] mod tests { use super::*; use crate::preproc::loop_adapt; use crate::test_utils::*; use pretty_assertions::assert_eq; use tokio::fs::File; #[test] fn test_inner_filename() { for (a, b) in &[ ("hi/test.tgz", "hi/test.tar"), ("hi/hello.gz", "hi/hello"), ("a/b/initramfs", "a/b/initramfs"), ("hi/test.tbz2", "hi/test.tar"), ("hi/test.tbz", "hi/test.tar"), ("hi/test.hi.bz2", "hi/test.hi"), ("hello.tar.gz", "hello.tar"), ] { assert_eq!(get_inner_filename(&PathBuf::from(a)), PathBuf::from(*b)); } } #[tokio::test] async fn gz() -> Result<()> { let adapter = DecompressAdapter; let filepath = test_data_dir().join("hello.gz"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); let r = adapter.adapt(a, &d).await?; let o = adapted_to_vec(r).await?; assert_eq!(String::from_utf8(o)?, "hello\n"); Ok(()) } #[tokio::test] async fn pdf_gz() -> Result<()> { let adapter = DecompressAdapter; let filepath = test_data_dir().join("short.pdf.gz"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); let r = loop_adapt(&adapter, d, a).await?; let o = adapted_to_vec(r).await?; assert_eq!( String::from_utf8(o)?, "PREFIX:Page 1: hello world PREFIX:Page 1: this is just a test. PREFIX:Page 1: PREFIX:Page 1: 1 PREFIX:Page 1: PREFIX:Page 1: " ); Ok(()) } } ripgrep-all-0.10.10/src/adapters/ffmpeg.rs000066400000000000000000000144371510417424300203050ustar00rootroot00000000000000use super::*; use super::{custom::map_exe_error, writing::async_writeln}; use anyhow::*; use async_trait::async_trait; use lazy_static::lazy_static; use regex::Regex; use serde::{Deserialize, Serialize}; use std::process::Stdio; use tokio::io::AsyncWrite; use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::Command; use writing::WritingFileAdapter; // todo: // maybe todo: read list of extensions from // ffmpeg -demuxers | tail -n+5 | awk '{print $2}' | while read demuxer; do echo MUX=$demuxer; ffmpeg -h demuxer=$demuxer | grep 'Common extensions'; done 2>/dev/null // but really, the probability of getting useful information from a .flv is low static EXTENSIONS: &[&str] = &["mkv", "mp4", "avi", "mp3", "ogg", "flac", "webm"]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "ffmpeg".to_owned(), version: 1, description: "Uses ffmpeg to extract video metadata/chapters, subtitles, lyrics, and other metadata" .to_owned(), recurses: false, fast_matchers: EXTENSIONS .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: None, disabled_by_default: false, keep_fast_matchers_if_accurate: true }; } #[derive(Default, Clone)] pub struct FFmpegAdapter; impl FFmpegAdapter { pub fn new() -> Self { Self } } impl GetMetadata for FFmpegAdapter { fn metadata(&self) -> &AdapterMeta { &METADATA } } #[derive(Serialize, Deserialize)] struct FFprobeOutput { streams: Vec, } #[derive(Serialize, Deserialize)] struct FFprobeStream { index: i32, // stream index } #[async_trait] impl WritingFileAdapter for FFmpegAdapter { async fn adapt_write( ai: AdaptInfo, _detection_reason: &FileMatcher, mut oup: Pin>, ) -> Result<()> { let AdaptInfo { is_real_file, filepath_hint, line_prefix, .. } = ai; if !is_real_file { // we *could* probably adapt this to also work based on streams, // it would require using a BufReader to read at least part of the file to memory // but really when would you want to search for videos within archives? // So instead, we only run this adapter if the file is a actual file on disk for now async_writeln!(oup, "{line_prefix}[rga: skipping video in archive]\n")?; return Ok(()); } let inp_fname = filepath_hint; let spawn_fail = |e| map_exe_error(e, "ffprobe", "Make sure you have ffmpeg installed."); let subtitle_streams = { let probe = Command::new("ffprobe") .args(vec![ "-v", "error", // show all errors "-select_streams", "s", // show only subtitle streams "-of", "json", // use json as output format "-show_entries", "stream=index", // show index of subtitle streams ]) .arg("-i") .arg(&inp_fname) .output() .await .map_err(spawn_fail)?; if !probe.status.success() { return Err(format_err!( "ffprobe failed: {:?}\n{}", probe.status, String::from_utf8_lossy(&probe.stderr) )); } let p: FFprobeOutput = serde_json::from_slice(&probe.stdout)?; p.streams }; { // extract file metadata (especially chapter names in a greppable format) let mut probe = Command::new("ffprobe") .args(vec![ "-v", "error", "-show_format", "-show_streams", "-of", "flat", // "-show_data", "-show_error", "-show_programs", "-show_chapters", // "-count_frames", //"-count_packets", ]) .arg("-i") .arg(&inp_fname) .stdout(Stdio::piped()) .spawn()?; let mut lines = BufReader::new(probe.stdout.as_mut().unwrap()).lines(); while let Some(line) = lines.next_line().await? { let line = line.replace("\\r\\n", "\n").replace("\\n", "\n"); // just unescape newlines async_writeln!(oup, "metadata: {line}")?; } let exit = probe.wait().await?; if !exit.success() { return Err(format_err!("ffprobe failed: {:?}", exit)); } } if !subtitle_streams.is_empty() { let time_re = Regex::new(r".*\d.*-->.*\d.*").unwrap(); for probe_stream in subtitle_streams.iter() { // extract subtitles let mut cmd = Command::new("ffmpeg"); cmd.arg("-hide_banner") .arg("-loglevel") .arg("panic") .arg("-i") .arg(&inp_fname) .arg("-map") .arg(format!("0:{}", probe_stream.index)) // 0 for first input .arg("-f") .arg("webvtt") .arg("-"); let mut cmd = cmd.stdout(Stdio::piped()).spawn().map_err(spawn_fail)?; let stdo = cmd.stdout.as_mut().expect("is piped"); let mut time: String = "".to_owned(); // rewrite subtitle times so they are shown as a prefix in every line let mut lines = BufReader::new(stdo).lines(); while let Some(line) = lines.next_line().await? { // 09:55.195 --> 09:56.730 if time_re.is_match(&line) { time = line.to_owned(); } else if line.is_empty() { async_writeln!(oup)?; } else { async_writeln!(oup, "{time}: {line}")?; } } } } Ok(()) } } ripgrep-all-0.10.10/src/adapters/mbox.rs000066400000000000000000000174621510417424300200070ustar00rootroot00000000000000use super::*; use anyhow::Result; use async_stream::stream; use lazy_static::lazy_static; use mime2ext::mime2ext; use regex::bytes::Regex; use tokio::io::AsyncReadExt; use std::{collections::VecDeque, io::Cursor}; static EXTENSIONS: &[&str] = &["mbox", "mbx", "eml"]; static MIME_TYPES: &[&str] = &["application/mbox", "message/rfc822"]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "mail".to_owned(), version: 1, description: "Reads mailbox/mail files and runs extractors on the contents and attachments." .to_owned(), recurses: true, fast_matchers: EXTENSIONS .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: Some( MIME_TYPES .iter() .map(|s| FileMatcher::MimeType(s.to_string())) .collect() ), disabled_by_default: true, keep_fast_matchers_if_accurate: true }; static ref FROM_REGEX: Regex = Regex::new("\r?\nFrom [^\n]+\n").unwrap(); } #[derive(Default)] pub struct MboxAdapter; impl MboxAdapter { pub fn new() -> Self { Self } } impl GetMetadata for MboxAdapter { fn metadata(&self) -> &AdapterMeta { &METADATA } } #[async_trait] impl FileAdapter for MboxAdapter { async fn adapt( &self, ai: AdaptInfo, _detection_reason: &FileMatcher, ) -> Result { let AdaptInfo { filepath_hint, mut inp, line_prefix, archive_recursion_depth, config, postprocess, .. } = ai; let mut content = Vec::new(); let s = stream! { inp.read_to_end(&mut content).await?; let mut ais = vec![]; for mail_bytes in FROM_REGEX.splitn(&content, usize::MAX) { let mail_content = mail_bytes.splitn(2, |x| *x == b'\n').nth(1).unwrap(); let mail = mailparse::parse_mail(mail_content); if mail.is_err() { continue; } let mail = mail.unwrap(); let mut todos = VecDeque::new(); todos.push_back(mail); while let Some(mail) = todos.pop_front() { let mut path = filepath_hint.clone(); let filename = mail.get_content_disposition().params.get("filename").cloned(); match &*mail.ctype.mimetype { x if x.starts_with("multipart/") => { todos.extend(mail.subparts); continue; } mime => { if let Some(name) = filename { path.push(name); } else if let Some(extension) = mime2ext(mime) { path.push(format!("data.{extension}")); } else { path.push("data"); } } } let mut config = config.clone(); config.accurate = true; let raw_body = mail.get_body_raw(); if raw_body.is_err() { continue; } let ai2: AdaptInfo = AdaptInfo { filepath_hint: path, is_real_file: false, archive_recursion_depth: archive_recursion_depth + 1, inp: Box::pin(Cursor::new(raw_body.unwrap())), line_prefix: line_prefix.to_string(), config, postprocess, }; ais.push(ai2); } } for a in ais { yield(Ok(a)); } }; Ok(Box::pin(s)) } } #[cfg(test)] mod tests { use super::*; use crate::preproc::loop_adapt; use crate::test_utils::*; use pretty_assertions::assert_eq; use tokio::fs::File; use tokio_stream::StreamExt; #[tokio::test] async fn mail_simple() -> Result<()> { let adapter = MboxAdapter; let filepath = test_data_dir().join("github_email.eml"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); let mut r = adapter.adapt(a, &d).await?; let mut count = 0; while let Some(file) = r.next().await { let mut file = file?; let mut buf = Vec::new(); file.inp.read_to_end(&mut buf).await?; match file .filepath_hint .components() .next_back() .unwrap() .as_os_str() .to_str() .unwrap() { "data.txt" | "data.html" => { assert!(String::from_utf8(buf)?.contains("Thank you for your contribution")); } x => panic!("unexpected filename {x:?}"), } count += 1; } assert_eq!(2, count); Ok(()) } #[tokio::test] async fn mbox_simple() -> Result<()> { let adapter = MboxAdapter; let filepath = test_data_dir().join("test.mbx"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); let mut r = adapter.adapt(a, &d).await?; let mut count = 0; while let Some(file) = r.next().await { let mut file = file?; assert_eq!( "data.html", file.filepath_hint .components() .next_back() .unwrap() .as_os_str() ); let mut buf = Vec::new(); file.inp.read_to_end(&mut buf).await?; assert_eq!( "\r\n \r\n \r\n \r\n \r\n

>From

\r\n

Another word >From
\r\n

\r\n \r\n", String::from_utf8(buf)?.trim() ); count += 1; } assert_eq!(3, count); Ok(()) } #[tokio::test] async fn mbox_attachment() -> Result<()> { init_logging(); let adapter = MboxAdapter; let filepath = test_data_dir().join("mail_with_attachment.mbox"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); let mut r = loop_adapt(&adapter, d, a).await?; let mut count = 0; while let Some(file) = r.next().await { let mut file = file?; let path = file .filepath_hint .components() .next_back() .unwrap() .as_os_str() .to_str() .unwrap(); let mut buf = Vec::new(); file.inp.read_to_end(&mut buf).await?; match path { "data.html.txt" => { assert_eq!( "PREFIX:regular text\nPREFIX:\n", String::from_utf8(buf).unwrap_or("err".to_owned()) ); } "short.pdf.txt" => { assert_eq!( "PREFIX:Page 1: hello world\nPREFIX:Page 1: this is just a test.\nPREFIX:Page 1: \nPREFIX:Page 1: 1\nPREFIX:Page 1: \nPREFIX:Page 1: \n", String::from_utf8(buf).unwrap_or("err".to_owned()) ); } _ => { panic!("unrelated {path:?}"); } } count += 1; } assert_eq!(2, count); // one message + one attachment Ok(()) } } ripgrep-all-0.10.10/src/adapters/postproc.rs000066400000000000000000000347471510417424300207200ustar00rootroot00000000000000//trait RunFnAdapter: GetMetadata {} //impl FileAdapter for T where T: RunFnAdapter {} use anyhow::Result; use async_stream::stream; use async_trait::async_trait; use bytes::Bytes; use encoding_rs::Encoding; use encoding_rs_io::DecodeReaderBytesBuilder; use tokio_util::io::SyncIoBridge; use std::io::Cursor; use std::path::PathBuf; use std::pin::Pin; use tokio::io::{AsyncRead, AsyncReadExt}; use tokio_util::io::ReaderStream; use tokio_util::io::StreamReader; use crate::adapted_iter::AdaptedFilesIterBox; use crate::adapted_iter::one_file; use crate::matching::FastFileMatcher; use super::{AdaptInfo, AdapterMeta, FileAdapter, GetMetadata}; fn add_newline(ar: impl AsyncRead + Send) -> impl AsyncRead + Send { ar.chain(Cursor::new(b"\n")) } pub struct PostprocPrefix {} impl GetMetadata for PostprocPrefix { fn metadata(&self) -> &super::AdapterMeta { lazy_static::lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "postprocprefix".to_owned(), version: 1, description: "Adds the line prefix to each line (e.g. the filename within a zip)".to_owned(), recurses: false, fast_matchers: vec![], slow_matchers: None, keep_fast_matchers_if_accurate: false, disabled_by_default: false }; } &METADATA } } #[async_trait] impl FileAdapter for PostprocPrefix { async fn adapt( &self, a: super::AdaptInfo, _detection_reason: &crate::matching::FileMatcher, ) -> Result { let read = add_newline(postproc_prefix( &a.line_prefix, postproc_encoding(&a.line_prefix, a.inp).await?, )); // keep adapt info (filename etc) except replace inp let ai = AdaptInfo { inp: Box::pin(read), postprocess: false, ..a }; Ok(one_file(ai)) } } /*struct ReadErr { err: Fn() -> std::io::Error, } impl Read for ReadErr { fn read(&mut self, buf: &mut [u8]) -> std::io::Result { Err(self.err()) } }*/ /** * Detects and converts encodings other than utf-8 to utf-8. * If the input stream does not contain valid text, returns the string `[rga: binary data]` instead */ async fn postproc_encoding( _line_prefix: &str, inp: Pin>, ) -> Result>> { // check for binary content in first 8kB // read the first 8kB into a buffer, check for null bytes, then return the buffer concatenated with the rest of the file let mut fourk = Vec::with_capacity(1 << 13); let mut beginning = inp.take(1 << 13); beginning.read_to_end(&mut fourk).await?; let has_binary = fourk.contains(&0u8); let enc = Encoding::for_bom(&fourk); let inp = Cursor::new(fourk).chain(beginning.into_inner()); match enc { Some((enc, _)) if enc != encoding_rs::UTF_8 => { // detected UTF16LE or UTF16BE, convert to UTF8 in separate thread // TODO: parse these options from ripgrep's configuration let encoding = None; // detect bom but usually assume utf8 let bom_sniffing = true; let mut decode_builder = DecodeReaderBytesBuilder::new(); // https://github.com/BurntSushi/ripgrep/blob/a7d26c8f144a4957b75f71087a66692d0b25759a/grep-searcher/src/searcher/mod.rs#L706 // this detects utf-16 BOMs and transcodes to utf-8 if they are present // it does not detect any other char encodings. that would require https://github.com/hsivonen/chardetng or similar but then binary detection is hard (?) let mut inp = decode_builder .encoding(encoding) .utf8_passthru(true) .strip_bom(bom_sniffing) .bom_override(true) .bom_sniffing(bom_sniffing) .build(SyncIoBridge::new(inp)); let oup = tokio::task::spawn_blocking(move || -> Result> { let mut oup = Vec::new(); std::io::Read::read_to_end(&mut inp, &mut oup)?; Ok(oup) }) .await??; Ok(Box::pin(Cursor::new(oup))) } _ => { if has_binary { log::debug!("detected binary"); return Ok(Box::pin(Cursor::new("[rga: binary data]"))); } Ok(Box::pin(inp)) } } } /// Adds the given prefix to each line in an `AsyncRead`. pub fn postproc_prefix( line_prefix: &str, inp: T, ) -> impl AsyncRead + Send + use { let line_prefix_n = format!("\n{line_prefix}"); // clone since we need it later let line_prefix_o = Bytes::copy_from_slice(line_prefix.as_bytes()); let regex = regex::bytes::Regex::new("\n").unwrap(); let inp_stream = ReaderStream::new(inp); let oup_stream = stream! { yield Ok(line_prefix_o); for await chunk in inp_stream { match chunk { Err(e) => yield Err(e), Ok(chunk) => { if chunk.contains(&b'\n') { yield Ok(Bytes::copy_from_slice(®ex.replace_all(&chunk, line_prefix_n.as_bytes()))); } else { yield Ok(chunk); } } } } }; Box::pin(StreamReader::new(oup_stream)) } #[derive(Default)] pub struct PostprocPageBreaks {} impl GetMetadata for PostprocPageBreaks { fn metadata(&self) -> &super::AdapterMeta { lazy_static::lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "postprocpagebreaks".to_owned(), version: 1, description: "Adds the page number to each line for an input file that specifies page breaks as ascii page break character.\nMainly to be used internally by the poppler adapter.".to_owned(), recurses: false, fast_matchers: vec![FastFileMatcher::FileExtension("asciipagebreaks".to_string())], slow_matchers: None, keep_fast_matchers_if_accurate: false, disabled_by_default: false }; } &METADATA } } #[async_trait] impl FileAdapter for PostprocPageBreaks { async fn adapt( &self, a: super::AdaptInfo, _detection_reason: &crate::matching::FileMatcher, ) -> Result { let read = postproc_pagebreaks(postproc_encoding(&a.line_prefix, a.inp).await?); // keep adapt info (filename etc) except replace inp let ai = AdaptInfo { inp: Box::pin(read), archive_recursion_depth: a.archive_recursion_depth + 1, filepath_hint: a .filepath_hint .parent() .map(PathBuf::from) .unwrap_or_default() .join(a.filepath_hint.file_stem().unwrap_or_default()), ..a }; Ok(one_file(ai)) } } /// Adds the prefix "Page N: " to each line, /// where N starts at one and is incremented for each ASCII Form Feed character in the input stream. /// ASCII form feeds are the page delimiters output by `pdftotext`. pub fn postproc_pagebreaks(input: impl AsyncRead + Send) -> impl AsyncRead + Send { let regex_linefeed = regex::bytes::Regex::new(r"\x0c").unwrap(); let regex_newline = regex::bytes::Regex::new("\n").unwrap(); let mut page_count: i32 = 1; let mut page_prefix: String = format!("\nPage {page_count}: "); let input_stream = ReaderStream::new(input); let output_stream = stream! { yield std::io::Result::Ok(Bytes::copy_from_slice(format!("Page {page_count}: ").as_bytes())); // store Page X: line prefixes in pending and only write it to the output when there is more text to be written // this is needed since pdftotext outputs a \x0c at the end of the last page let mut pending: Option = None; for await read_chunk in input_stream { let read_chunk = read_chunk?; let page_chunks = regex_linefeed.split(&read_chunk); for (chunk_idx, page_chunk) in page_chunks.enumerate() { if chunk_idx != 0 { page_count += 1; page_prefix = format!("\nPage {page_count}: "); if let Some(p) = pending.take() { yield Ok(p); } pending = Some(Bytes::copy_from_slice(page_prefix.as_bytes())); } if !page_chunk.is_empty() { if let Some(p) = pending.take() { yield Ok(p); } yield Ok(Bytes::copy_from_slice(®ex_newline.replace_all(page_chunk, page_prefix.as_bytes()))); } } } }; Box::pin(StreamReader::new(output_stream)) } #[cfg(test)] mod tests { use crate::preproc::loop_adapt; use crate::test_utils::*; use super::*; use anyhow::Result; use pretty_assertions::assert_eq; use tokio::fs::File; use tokio::pin; use tokio_test::io::Builder; use tokio_test::io::Mock; #[tokio::test] async fn test_with_pagebreaks() { let mut output: Vec = Vec::new(); let mock: Mock = Builder::new() .read(b"Hello\nWorld\x0cFoo Bar\n\x0cTest\x0c") .build(); let res = postproc_pagebreaks(mock).read_to_end(&mut output).await; println!("{}", String::from_utf8_lossy(&output)); assert!(res.is_ok()); assert_eq!( String::from_utf8_lossy(&output), "Page 1: Hello\nPage 1: World\nPage 2: Foo Bar\nPage 2: \nPage 3: Test" ); } #[tokio::test] async fn test_with_pagebreaks_chunks() { let mut output: Vec = Vec::new(); let mock: Mock = Builder::new() .read(b"Hello\nWo") .read(b"rld\x0c") .read(b"Foo Bar\n") .read(b"\x0cTest\x0c") .build(); let res = postproc_pagebreaks(mock).read_to_end(&mut output).await; println!("{}", String::from_utf8_lossy(&output)); assert!(res.is_ok()); assert_eq!( String::from_utf8_lossy(&output), "Page 1: Hello\nPage 1: World\nPage 2: Foo Bar\nPage 2: \nPage 3: Test" ); } #[tokio::test] async fn test_pdf_twoblank() -> Result<()> { let adapter = poppler_adapter(); let fname = test_data_dir().join("twoblankpages.pdf"); let rd = File::open(&fname).await?; let (a, d) = simple_adapt_info(&fname, Box::pin(rd)); let res = loop_adapt(&adapter, d, a).await?; let buf = adapted_to_vec(res).await?; assert_eq!( String::from_utf8(buf)?, "PREFIX:Page 1: PREFIX:Page 2: PREFIX:Page 3: HelloWorld PREFIX:Page 3: PREFIX:Page 3: ", ); Ok(()) } #[tokio::test] async fn test_postproc_prefix() { let mut output: Vec = Vec::new(); let mock: Mock = Builder::new().read(b"Hello\nWorld").build(); let res = postproc_prefix("prefix: ", mock) .read_to_end(&mut output) .await; println!("{}", String::from_utf8_lossy(&output)); assert!(res.is_ok()); assert_eq!(output, b"prefix: Hello\nprefix: World"); } async fn test_from_strs( pagebreaks: bool, line_prefix: &str, a: &'static str, b: &str, ) -> Result<()> { test_from_bytes(pagebreaks, line_prefix, a.as_bytes(), b).await } async fn test_from_bytes( pagebreaks: bool, line_prefix: &str, a: &'static [u8], b: &str, ) -> Result<()> { let mut oup = Vec::new(); let inp = Box::pin(Cursor::new(a)); let inp = postproc_encoding("", inp).await?; if pagebreaks { postproc_pagebreaks(inp).read_to_end(&mut oup).await?; } else { let x = postproc_prefix(line_prefix, inp); pin!(x); x.read_to_end(&mut oup).await?; } let c = String::from_utf8_lossy(&oup); assert_eq!(c, b, "source: {}", String::from_utf8_lossy(a)); Ok(()) } #[tokio::test] async fn test_utf16() -> Result<()> { let utf16lebom: &[u8] = &[ 0xff, 0xfe, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x64, 0x00, 0x20, 0x00, 0x3d, 0xd8, 0xa9, 0xdc, 0x0a, 0x00, ]; let utf16bebom: &[u8] = &[ 0xfe, 0xff, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x64, 0x00, 0x20, 0xd8, 0x3d, 0xdc, 0xa9, 0x00, 0x0a, ]; test_from_bytes(false, "", utf16lebom, "hello world 💩\n").await?; test_from_bytes(false, "", utf16bebom, "hello world 💩\n").await?; Ok(()) } #[tokio::test] async fn post1() -> Result<()> { let inp = "What is this\nThis is a test\nFoo"; let oup = "Page 1: What is this\nPage 1: This is a test\nPage 1: Foo"; test_from_strs(true, "", inp, oup).await?; println!("\n\n\n\n"); let inp = "What is this\nThis is a test\nFoo\x0c\nHelloooo\nHow are you?\x0c\nGreat!"; let oup = "Page 1: What is this\nPage 1: This is a test\nPage 1: Foo\nPage 2: \nPage 2: Helloooo\nPage 2: How are you?\nPage 3: \nPage 3: Great!"; test_from_strs(true, "", inp, oup).await?; let inp = "What is this\nThis is a test\nFoo\x0c\nHelloooo\nHow are you?\x0c\nGreat!"; let oup = "foo.pdf:What is this\nfoo.pdf:This is a test\nfoo.pdf:Foo\x0c\nfoo.pdf:Helloooo\nfoo.pdf:How are you?\x0c\nfoo.pdf:Great!"; test_from_strs(false, "foo.pdf:", inp, oup).await?; Ok(()) } #[tokio::test] async fn test_binary_content() -> Result<()> { test_from_strs( false, "foo:", "this is a test \n\n \0 foo", "foo:[rga: binary data]", ) .await?; test_from_strs(false, "foo:", "\0", "foo:[rga: binary data]").await?; Ok(()) } /*#[test] fn chardet() -> Result<()> { let mut d = chardetng::EncodingDetector::new(); let mut v = Vec::new(); std::fs::File::open("/home/phire/passwords-2018.kdbx.old").unwrap().read_to_end(&mut v).unwrap(); d.feed(&v, false); println!("foo {:?}", d.guess(None, true)); Ok(()) }*/ } ripgrep-all-0.10.10/src/adapters/sqlite.rs000066400000000000000000000116621510417424300203370ustar00rootroot00000000000000use super::{writing::WritingFileAdapter, *}; use anyhow::Result; use async_trait::async_trait; use lazy_static::lazy_static; use log::*; use rusqlite::types::ValueRef; use rusqlite::*; use std::{convert::TryInto, io::Write}; use tokio::io::AsyncWrite; use tokio_util::io::SyncIoBridge; static EXTENSIONS: &[&str] = &["db", "db3", "sqlite", "sqlite3"]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "sqlite".to_owned(), version: 1, description: "Uses sqlite bindings to convert sqlite databases into a simple plain text format" .to_owned(), recurses: false, // set to true if we decide to make sqlite blobs searchable (gz blob in db is kinda common I think) fast_matchers: EXTENSIONS .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: Some(vec![FileMatcher::MimeType( "application/x-sqlite3".to_owned() )]), keep_fast_matchers_if_accurate: false, disabled_by_default: false }; } #[derive(Default, Clone)] pub struct SqliteAdapter; impl SqliteAdapter { pub fn new() -> Self { Self } } impl GetMetadata for SqliteAdapter { fn metadata(&self) -> &AdapterMeta { &METADATA } } fn format_blob(b: ValueRef) -> String { use ValueRef; match b { ValueRef::Null => "NULL".to_owned(), ValueRef::Integer(i) => format!("{}", i), ValueRef::Real(i) => format!("{}", i), ValueRef::Text(i) => format!("'{}'", String::from_utf8_lossy(i).replace('\'', "''")), ValueRef::Blob(b) => format!( "[blob {}B]", size_format::SizeFormatterSI::new( // can't be larger than 2GB anyways b.len().try_into().unwrap() ) ), } } fn synchronous_dump_sqlite(ai: AdaptInfo, mut s: impl Write) -> Result<()> { let AdaptInfo { is_real_file, filepath_hint, line_prefix, .. } = ai; if !is_real_file { // db is in an archive // todo: read to memory and then use that blob if size < max writeln!(s, "{line_prefix}[rga: skipping sqlite in archive]",)?; return Ok(()); } let inp_fname = filepath_hint; let conn = Connection::open_with_flags(&inp_fname, OpenFlags::SQLITE_OPEN_READ_ONLY) .with_context(|| format!("opening sqlite connection to {}", inp_fname.display()))?; let tables: Vec = conn .prepare("select name from sqlite_master where type='table'") .context("while preparing query")? .query_map([], |r| r.get::<_, String>(0)) .context("while executing query")? .filter_map(|e| e.ok()) .collect(); debug!("db has {} tables", tables.len()); for table in tables { // can't use query param at that position let mut sel = conn.prepare(&format!( "select * from {}", rusqlite::vtab::escape_double_quote(&table) ))?; let col_names: Vec = sel .column_names() .into_iter() .map(|e| e.to_owned()) .collect(); let mut z = sel.query([])?; // writeln!(oup, "{}: {}", table, cols.join(", "))?; // kind of shitty (lossy) output. maybe output real csv or something? while let Some(row) = z.next()? { let row_str = col_names .iter() .enumerate() .map(|(i, e)| Ok(format!("{}={}", e, format_blob(row.get_ref(i)?)))) .collect::>>()? .join(", "); writeln!(s, "{line_prefix}{table}: {row_str}",)?; } } Ok(()) } #[async_trait] impl WritingFileAdapter for SqliteAdapter { async fn adapt_write( ai: AdaptInfo, _detection_reason: &FileMatcher, oup: Pin>, ) -> Result<()> { if ai.filepath_hint.file_name().and_then(|e| e.to_str()) == Some("Thumbs.db") { // skip windows thumbnail cache return Ok(()); } let oup_sync = SyncIoBridge::new(oup); tokio::task::spawn_blocking(|| synchronous_dump_sqlite(ai, oup_sync)) .await? .context("in synchronous sqlite task")?; Ok(()) } } #[cfg(test)] mod test { use super::*; use crate::test_utils::*; use pretty_assertions::assert_eq; #[tokio::test] async fn simple() -> Result<()> { let adapter: Box = Box::::default(); let fname = test_data_dir().join("hello.sqlite3"); let (a, d) = simple_fs_adapt_info(&fname).await?; let res = adapter.adapt(a, &d).await?; let buf = adapted_to_vec(res).await?; assert_eq!( String::from_utf8(buf)?, "PREFIX:tbl: greeting='hello', from='sqlite database!'\nPREFIX:tbl2: x=123, y=456.789\n", ); Ok(()) } } ripgrep-all-0.10.10/src/adapters/tar.rs000066400000000000000000000075221510417424300176240ustar00rootroot00000000000000use crate::{ adapted_iter::AdaptedFilesIterBox, adapters::AdapterMeta, matching::{FastFileMatcher, FileMatcher}, print_bytes, }; use anyhow::*; use async_stream::stream; use async_trait::async_trait; use lazy_static::lazy_static; use log::*; use std::path::PathBuf; use tokio_stream::StreamExt; use super::{AdaptInfo, FileAdapter, GetMetadata}; static EXTENSIONS: &[&str] = &["tar"]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "tar".to_owned(), version: 1, description: "Reads a tar file as a stream and recurses down into its contents".to_owned(), recurses: true, fast_matchers: EXTENSIONS .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: None, keep_fast_matchers_if_accurate: true, disabled_by_default: false }; } #[derive(Default, Clone)] pub struct TarAdapter; impl TarAdapter { pub fn new() -> Self { Self } } impl GetMetadata for TarAdapter { fn metadata(&self) -> &AdapterMeta { &METADATA } } #[async_trait] impl FileAdapter for TarAdapter { async fn adapt( &self, ai: AdaptInfo, _detection_reason: &FileMatcher, ) -> Result { let AdaptInfo { filepath_hint, inp, line_prefix, archive_recursion_depth, config, postprocess, .. } = ai; let mut archive = ::tokio_tar::Archive::new(inp); let mut entries = archive.entries()?; let s = stream! { while let Some(entry) = entries.next().await { let file = entry?; if tokio_tar::EntryType::Regular == file.header().entry_type() { let path = PathBuf::from(file.path()?.to_owned()); debug!( "{}|{}: {}", filepath_hint.display(), path.display(), print_bytes(file.header().size().unwrap_or(0) as f64), ); let line_prefix = &format!("{}{}: ", line_prefix, path.display()); let ai2: AdaptInfo = AdaptInfo { filepath_hint: path, is_real_file: false, archive_recursion_depth: archive_recursion_depth + 1, inp: Box::pin(file), line_prefix: line_prefix.to_string(), config: config.clone(), postprocess, }; yield Ok(ai2); } } }; Ok(Box::pin(s)) } } #[cfg(test)] mod tests { use super::*; use crate::{preproc::loop_adapt, test_utils::*}; use pretty_assertions::assert_eq; use tokio::fs::File; #[tokio::test] async fn test_simple_tar() -> Result<()> { let filepath = test_data_dir().join("hello.tar"); let (a, d) = simple_adapt_info(&filepath, Box::pin(File::open(&filepath).await?)); let adapter = TarAdapter::new(); let r = loop_adapt(&adapter, d, a).await.context("adapt")?; let o = adapted_to_vec(r).await.context("adapted_to_vec")?; assert_eq!( String::from_utf8(o).context("parsing utf8")?, "PREFIX:dir/file-b.pdf: Page 1: hello world PREFIX:dir/file-b.pdf: Page 1: this is just a test. PREFIX:dir/file-b.pdf: Page 1: PREFIX:dir/file-b.pdf: Page 1: 1 PREFIX:dir/file-b.pdf: Page 1: PREFIX:dir/file-b.pdf: Page 1: PREFIX:dir/file-a.pdf: Page 1: hello world PREFIX:dir/file-a.pdf: Page 1: this is just a test. PREFIX:dir/file-a.pdf: Page 1: PREFIX:dir/file-a.pdf: Page 1: 1 PREFIX:dir/file-a.pdf: Page 1: PREFIX:dir/file-a.pdf: Page 1: " ); Ok(()) } } ripgrep-all-0.10.10/src/adapters/writing.rs000066400000000000000000000046541510417424300205240ustar00rootroot00000000000000use std::pin::Pin; use crate::{adapted_iter::one_file, join_handle_to_stream, to_io_err}; use super::{AdaptInfo, FileAdapter, GetMetadata}; use anyhow::{Context, Result}; use async_trait::async_trait; use tokio::io::{AsyncReadExt, AsyncWrite}; #[async_trait] pub trait WritingFileAdapter: GetMetadata + Send + Sync + Clone { async fn adapt_write( a: super::AdaptInfo, detection_reason: &crate::matching::FileMatcher, oup: Pin>, ) -> Result<()>; } macro_rules! async_writeln { ($dst: expr_2021) => { { tokio::io::AsyncWriteExt::write_all(&mut $dst, b"\n").await } }; ($dst: expr_2021, $fmt: expr_2021) => { { use std::io::Write; let mut buf = Vec::::new(); writeln!(buf, $fmt)?; tokio::io::AsyncWriteExt::write_all(&mut $dst, &buf).await } }; ($dst: expr_2021, $fmt: expr_2021, $($arg: tt)*) => { { use std::io::Write; let mut buf = Vec::::new(); writeln!(buf, $fmt, $( $arg )*)?; tokio::io::AsyncWriteExt::write_all(&mut $dst, &buf).await } }; } pub(crate) use async_writeln; #[async_trait] impl FileAdapter for T where T: WritingFileAdapter, { async fn adapt( &self, a: super::AdaptInfo, detection_reason: &crate::matching::FileMatcher, ) -> Result { let name = self.metadata().name.clone(); let (w, r) = tokio::io::duplex(128 * 1024); let d2 = detection_reason.clone(); let archive_recursion_depth = a.archive_recursion_depth + 1; let filepath_hint = format!("{}.txt", a.filepath_hint.to_string_lossy()); let postprocess = a.postprocess; let line_prefix = a.line_prefix.clone(); let config = a.config.clone(); let joiner = tokio::spawn(async move { let x = d2; T::adapt_write(a, &x, Box::pin(w)) .await .with_context(|| format!("in {}.adapt_write", name)) .map_err(to_io_err) }); Ok(one_file(AdaptInfo { is_real_file: false, filepath_hint: filepath_hint.into(), archive_recursion_depth, config, inp: Box::pin(r.chain(join_handle_to_stream(joiner))), line_prefix, postprocess, })) } } ripgrep-all-0.10.10/src/adapters/zip.rs000066400000000000000000000231521510417424300176350ustar00rootroot00000000000000use super::*; use crate::print_bytes; use anyhow::*; use async_stream::stream; use lazy_static::lazy_static; use log::*; // TODO: allow users to configure file extensions instead of hard coding the list // https://github.com/phiresky/ripgrep-all/pull/208#issuecomment-2173241243 static EXTENSIONS: &[&str] = &["zip", "jar", "xpi", "kra", "snagx"]; lazy_static! { static ref METADATA: AdapterMeta = AdapterMeta { name: "zip".to_owned(), version: 1, description: "Reads a zip file as a stream and recurses down into its contents".to_owned(), recurses: true, fast_matchers: EXTENSIONS .iter() .map(|s| FastFileMatcher::FileExtension(s.to_string())) .collect(), slow_matchers: Some(vec![FileMatcher::MimeType("application/zip".to_owned())]), keep_fast_matchers_if_accurate: false, disabled_by_default: false }; } #[derive(Default, Clone)] pub struct ZipAdapter; impl ZipAdapter { pub fn new() -> Self { Self } } impl GetMetadata for ZipAdapter { fn metadata(&self) -> &AdapterMeta { &METADATA } } #[async_trait] impl FileAdapter for ZipAdapter { async fn adapt( &self, ai: AdaptInfo, _detection_reason: &FileMatcher, ) -> Result { // let (s, r) = mpsc::channel(1); let AdaptInfo { inp, filepath_hint, archive_recursion_depth, postprocess, line_prefix, config, is_real_file, .. } = ai; if is_real_file { use async_zip::read::fs::ZipFileReader; let zip = ZipFileReader::new(&filepath_hint).await?; let s = stream! { for i in 0..zip.file().entries().len() { let file = zip.get_entry(i)?; let reader = zip.entry(i).await?; if file.filename().ends_with('/') { continue; } debug!( "{}{}|{}: {} ({} packed)", line_prefix, filepath_hint.display(), file.filename(), print_bytes(file.uncompressed_size() as f64), print_bytes(file.compressed_size() as f64) ); let new_line_prefix = format!("{}{}: ", line_prefix, file.filename()); let fname = PathBuf::from(file.filename()); tokio::pin!(reader); // SAFETY: this should be solvable without unsafe but idk how :( // the issue is that ZipEntryReader borrows from ZipFileReader, but we need to yield it here into the stream // but then it can't borrow from the ZipFile let reader2 = unsafe { std::mem::transmute::< Pin<&mut (dyn AsyncRead + Send)>, Pin<&'static mut (dyn AsyncRead + Send)>, >(reader) }; yield Ok(AdaptInfo { filepath_hint: fname, is_real_file: false, inp: Box::pin(reader2), line_prefix: new_line_prefix, archive_recursion_depth: archive_recursion_depth + 1, postprocess, config: config.clone(), }); } }; Ok(Box::pin(s)) } else { use async_zip::read::stream::ZipFileReader; let mut zip = ZipFileReader::new(inp); let s = stream! { trace!("begin zip"); while let Some(mut entry) = zip.next_entry().await? { trace!("zip next entry"); let file = entry.entry(); if file.filename().ends_with('/') { zip = entry.skip().await?; continue; } debug!( "{}{}|{}: {} ({} packed)", line_prefix, filepath_hint.display(), file.filename(), print_bytes(file.uncompressed_size() as f64), print_bytes(file.compressed_size() as f64) ); let new_line_prefix = format!("{}{}: ", line_prefix, file.filename()); let fname = PathBuf::from(file.filename()); let reader = entry.reader(); tokio::pin!(reader); // SAFETY: this should be solvable without unsafe but idk how :( // the issue is that ZipEntryReader borrows from ZipFileReader, but we need to yield it here into the stream // but then it can't borrow from the ZipFile let reader2 = unsafe { std::mem::transmute::< Pin<&mut (dyn AsyncRead + Send)>, Pin<&'static mut (dyn AsyncRead + Send)>, >(reader) }; yield Ok(AdaptInfo { filepath_hint: fname, is_real_file: false, inp: Box::pin(reader2), line_prefix: new_line_prefix, archive_recursion_depth: archive_recursion_depth + 1, postprocess, config: config.clone(), }); zip = entry.done().await.context("going to next file in zip but entry was not read fully")?; } trace!("zip over"); }; Ok(Box::pin(s)) } } } /*struct ZipAdaptIter { inp: AdaptInfo, } impl<'a> AdaptedFilesIter for ZipAdaptIter<'a> { fn next<'b>(&'b mut self) -> Option> { let line_prefix = &self.inp.line_prefix; let filepath_hint = &self.inp.filepath_hint; let archive_recursion_depth = &self.inp.archive_recursion_depth; let postprocess = self.inp.postprocess; ::zip::read::read_zipfile_from_stream(&mut self.inp.inp) .unwrap() .and_then(|file| { if file.is_dir() { return None; } debug!( "{}{}|{}: {} ({} packed)", line_prefix, filepath_hint.to_string_lossy(), file.name(), print_bytes(file.size() as f64), print_bytes(file.compressed_size() as f64) ); let line_prefix = format!("{}{}: ", line_prefix, file.name()); Some(AdaptInfo { filepath_hint: PathBuf::from(file.name()), is_real_file: false, inp: Box::new(file), line_prefix, archive_recursion_depth: archive_recursion_depth + 1, postprocess, config: RgaConfig::default(), //config.clone(), }) }) } }*/ #[cfg(test)] mod test { use async_zip::{Compression, ZipEntryBuilder, write::ZipFileWriter}; use super::*; use crate::{preproc::loop_adapt, test_utils::*}; use pretty_assertions::assert_eq; #[async_recursion::async_recursion] async fn create_zip(fname: &str, content: &str, add_inner: bool) -> Result> { let v = Vec::new(); let mut cursor = std::io::Cursor::new(v); let mut zip = ZipFileWriter::new(&mut cursor); let options = ZipEntryBuilder::new(fname.to_string(), Compression::Stored); zip.write_entry_whole(options, content.as_bytes()).await?; if add_inner { let opts = ZipEntryBuilder::new("inner.zip".to_string(), Compression::Stored); zip.write_entry_whole( opts, &create_zip("inner.txt", "inner text file", false).await?, ) .await?; } zip.close().await?; Ok(cursor.into_inner()) } #[tokio::test] async fn only_seek_zip_fs() -> Result<()> { let zip = test_data_dir().join("only-seek-zip.zip"); let (a, d) = simple_fs_adapt_info(&zip).await?; let _v = adapted_to_vec(loop_adapt(&ZipAdapter::new(), d, a).await?).await?; // assert_eq!(String::from_utf8(v)?, ""); Ok(()) } /*#[tokio::test] async fn only_seek_zip_mem() -> Result<()> { let zip = test_data_dir().join("only-seek-zip.zip"); let (a, d) = simple_adapt_info(&zip, Box::pin(File::open(&zip).await?)); let v = adapted_to_vec(loop_adapt(&ZipAdapter::new(), d, a)?).await?; // assert_eq!(String::from_utf8(v)?, ""); Ok(()) }*/ #[tokio::test] async fn recurse() -> Result<()> { let zipfile = create_zip("outer.txt", "outer text file", true).await?; let adapter = ZipAdapter::new(); let (a, d) = simple_adapt_info( &PathBuf::from("outer.zip"), Box::pin(std::io::Cursor::new(zipfile)), ); let buf = adapted_to_vec(loop_adapt(&adapter, d, a).await?).await?; assert_eq!( String::from_utf8(buf)?, "PREFIX:outer.txt: outer text file\nPREFIX:inner.zip: inner.txt: inner text file\n", ); Ok(()) } } ripgrep-all-0.10.10/src/bin/000077500000000000000000000000001510417424300154275ustar00rootroot00000000000000ripgrep-all-0.10.10/src/bin/rga-fzf-open.rs000066400000000000000000000017301510417424300202710ustar00rootroot00000000000000use anyhow::Context; use std::process::Command; // TODO: add --rg-params=..., --rg-preview-params=... and --fzf-params=... params // TODO: remove passthrough_args fn main() -> anyhow::Result<()> { env_logger::init(); let mut args = std::env::args().skip(1); let query = args.next().context("no query")?; let fname = args.next().context("no filename")?; // let instance_id = std::env::var("RGA_FZF_INSTANCE").unwrap_or("unk".to_string()); if fname.ends_with(".pdf") { use std::io::ErrorKind::*; let worked = Command::new("evince") .arg("--find") .arg(&query) .arg(&fname) .spawn() .map_or_else( |err| match err.kind() { NotFound => Ok(false), _ => Err(err), }, |_| Ok(true), )?; if worked { return Ok(()); } } Ok(open::that_detached(&fname)?) } ripgrep-all-0.10.10/src/bin/rga-fzf.rs000066400000000000000000000044431510417424300173360ustar00rootroot00000000000000use anyhow::Context; use rga::adapters::custom::map_exe_error; use ripgrep_all as rga; use std::process::{Command, Stdio}; // TODO: add --rg-params=..., --rg-preview-params=... and --fzf-params=... params // TODO: remove passthrough_args fn main() -> anyhow::Result<()> { env_logger::init(); let mut passthrough_args: Vec = std::env::args().skip(1).collect(); let inx = passthrough_args.iter().position(|e| !e.starts_with('-')); let initial_query = if let Some(inx) = inx { passthrough_args.remove(inx) } else { "".to_string() }; let exe = std::env::current_exe().context("Could not get executable location")?; let preproc_exe = exe.with_file_name("rga"); let preproc_exe = preproc_exe .to_str() .context("rga executable is in non-unicode path")?; let open_exe = exe.with_file_name("rga-fzf-open"); let open_exe = open_exe .to_str() .context("rga-fzf-open executable is in non-unicode path")?; let rg_prefix = format!("{preproc_exe} --files-with-matches --rga-cache-max-blob-len=10M"); let child = Command::new("fzf") .arg(format!( "--preview={preproc_exe} --pretty --context 5 {{q}} --rga-fzf-path=_{{}}" )) .arg("--preview-window=70%:wrap") .arg("--phony") .arg("--query") .arg(&initial_query) .arg("--print-query") .arg(format!("--bind=change:reload: {rg_prefix} {{q}}")) .arg(format!("--bind=ctrl-m:execute:{open_exe} {{q}} {{}}")) .env( "FZF_DEFAULT_COMMAND", format!("{} '{}'", rg_prefix, &initial_query), ) .env("RGA_FZF_INSTANCE", format!("{}", std::process::id())) // may be useful to open stuff in the same tab .stdout(Stdio::piped()) .spawn() .map_err(|e| map_exe_error(e, "fzf", "Please make sure you have fzf installed."))?; let output = child.wait_with_output()?; let mut x = output.stdout.split(|e| e == &b'\n'); let final_query = std::str::from_utf8(x.next().context("fzf output empty")?).context("fzf query not utf8")?; let selected_file = std::str::from_utf8(x.next().context("fzf output not two line")?) .context("fzf ofilename not utf8")?; println!("query='{final_query}', file='{selected_file}'"); Ok(()) } ripgrep-all-0.10.10/src/bin/rga-preproc.rs000066400000000000000000000031411510417424300202150ustar00rootroot00000000000000use rga::adapters::*; use rga::preproc::*; use rga::print_dur; use ripgrep_all as rga; use anyhow::Context; use log::debug; use std::time::Instant; use tokio::fs::File; #[tokio::main] async fn main() -> anyhow::Result<()> { env_logger::init(); let mut arg_arr: Vec = std::env::args_os().collect(); let last = arg_arr.pop().expect("No filename specified"); let config = rga::config::parse_args(arg_arr, true)?; //clap::App::new("rga-preproc").arg(Arg::from_usage()) let path = { let filepath = last; std::env::current_dir()?.join(filepath) }; let i = File::open(&path) .await .context("Specified input file not found")?; let mut o = tokio::io::stdout(); let ai = AdaptInfo { inp: Box::pin(i), filepath_hint: path, is_real_file: true, line_prefix: "".to_string(), archive_recursion_depth: 0, postprocess: !config.no_prefix_filenames, config, }; let start = Instant::now(); let mut oup = rga_preproc(ai).await.context("during preprocessing")?; debug!("finding and starting adapter took {}", print_dur(start)); let res = tokio::io::copy(&mut oup, &mut o).await; if let Err(e) = res { if e.kind() == std::io::ErrorKind::BrokenPipe { // happens if e.g. ripgrep detects binary data in the pipe so it cancels reading debug!("output cancelled (broken pipe)"); } else { Err(e).context("copying adapter output to stdout")?; } } debug!("running adapter took {} total", print_dur(start)); Ok(()) } ripgrep-all-0.10.10/src/bin/rga.rs000066400000000000000000000123161510417424300165510ustar00rootroot00000000000000use anyhow::Result; use rga::adapters::custom::map_exe_error; use rga::adapters::*; use rga::config::{RgaConfig, split_args}; use rga::matching::*; use rga::print_dur; use ripgrep_all as rga; use structopt::StructOpt; use schemars::schema_for; use std::process::Command; use std::time::Instant; fn list_adapters(args: RgaConfig) -> Result<()> { let (enabled_adapters, disabled_adapters) = get_all_adapters(args.custom_adapters); println!("Adapters:\n"); let print = |adapter: std::sync::Arc| { let meta = adapter.metadata(); let matchers = meta .fast_matchers .iter() .map(|m| match m { FastFileMatcher::FileExtension(ext) => format!(".{ext}"), }) .collect::>() .join(", "); let slow_matchers = meta .slow_matchers .as_ref() .unwrap_or(&vec![]) .iter() .filter_map(|m| match m { FileMatcher::MimeType(x) => Some(x.to_string()), FileMatcher::Fast(_) => None, }) .collect::>() .join(", "); print!( " - **{name}**\n {desc} \n Extensions: {matchers} \n Mime Types: {mime} \n", name = meta.name, desc = meta.description.replace('\n', "\n "), matchers = matchers, mime = slow_matchers, ); println!(); }; for adapter in enabled_adapters { print(adapter) } println!( "The following adapters are disabled by default, and can be enabled using '--rga-adapters=+foo,bar':\n" ); for adapter in disabled_adapters { print(adapter) } Ok(()) } fn main() -> anyhow::Result<()> { // set debugging as early as possible if std::env::args().any(|e| e == "--debug") { // TODO: Audit that the environment access only happens in single-threaded code. unsafe { std::env::set_var("RUST_LOG", "debug") }; } env_logger::init(); let (config, mut passthrough_args) = split_args(false)?; if config.print_config_schema { println!("{}", serde_json::to_string_pretty(&schema_for!(RgaConfig))?); return Ok(()); } if config.list_adapters { return list_adapters(config); } if let Some(path) = config.fzf_path { if path == "_" { // fzf found no result, ignore everything and return println!("[no file found]"); return Ok(()); } passthrough_args.push(std::ffi::OsString::from(&path[1..])); } if passthrough_args.is_empty() { // rg would show help. Show own help instead. RgaConfig::clap().print_help()?; println!(); return Ok(()); } let adapters = get_adapters_filtered(config.custom_adapters.clone(), &config.adapters)?; let pre_glob = if !config.accurate { let extensions = adapters .iter() .flat_map(|a| &a.metadata().fast_matchers) .flat_map(|m| match m { FastFileMatcher::FileExtension(ext) => vec![ext.clone(), ext.to_ascii_uppercase()], }) .collect::>() .join(","); format!("*.{{{extensions}}}") } else { "*".to_owned() }; add_exe_to_path()?; let rg_args = vec![ "--no-line-number", // smart case by default because within weird files // we probably can't really trust casing anyways "--smart-case", ]; let exe = std::env::current_exe().expect("Could not get executable location"); let preproc_exe = exe.with_file_name("rga-preproc"); let before = Instant::now(); let mut cmd = Command::new("rg"); cmd.args(rg_args) .arg("--pre") .arg(preproc_exe) .arg("--pre-glob") .arg(pre_glob) .args(passthrough_args); log::debug!("rg command to run: {:?}", cmd); let mut child = cmd .spawn() .map_err(|e| map_exe_error(e, "rg", "Please make sure you have ripgrep installed."))?; let result = child.wait()?; log::debug!("running rg took {}", print_dur(before)); if !result.success() { std::process::exit(result.code().unwrap_or(1)); } Ok(()) } /// add the directory that contains `rga` to PATH, so rga-preproc can find pandoc etc (if we are on Windows where we include dependent binaries) fn add_exe_to_path() -> Result<()> { use std::env; let mut exe = env::current_exe().expect("Could not get executable location"); // let preproc_exe = exe.with_file_name("rga-preproc"); exe.pop(); // dirname let path = env::var_os("PATH").unwrap_or_default(); let paths = env::split_paths(&path).collect::>(); // prepend: prefer bundled versions to system-installed versions of binaries // solves https://github.com/phiresky/ripgrep-all/issues/32 // may be somewhat of a security issue if rga binary is in installed in unprivileged locations let paths = [&[exe.to_owned(), exe.join("lib")], &paths[..]].concat(); let new_path = env::join_paths(paths)?; // TODO: Audit that the environment access only happens in single-threaded code. unsafe { env::set_var("PATH", new_path) }; Ok(()) } ripgrep-all-0.10.10/src/caching_writer.rs000066400000000000000000000051651510417424300202240ustar00rootroot00000000000000use std::{future::Future, pin::Pin}; use anyhow::{Context, Result}; use async_compression::tokio::write::ZstdEncoder; use async_stream::stream; use crate::to_io_err; use log::*; use tokio::io::{AsyncRead, AsyncWriteExt}; use tokio_stream::StreamExt; use tokio_util::io::{ReaderStream, StreamReader}; type FinishHandler = dyn FnOnce((u64, Option>)) -> Pin> + Send>> + Send; /** * wrap a AsyncRead so that it is passthrough, * but also the written data is compressed and written into a buffer, * unless more than max_cache_size bytes is written, then the cache is dropped and it is pure passthrough. */ pub fn async_read_and_write_to_cache<'a>( inp: impl AsyncRead + Send + 'a, max_cache_size: usize, compression_level: i32, on_finish: Box, ) -> Result>> { let inp = Box::pin(inp); let mut zstd_writer = Some(ZstdEncoder::with_quality( Vec::new(), async_compression::Level::Precise(compression_level), )); let mut bytes_written = 0; let s = stream! { let mut stream = ReaderStream::new(inp); while let Some(bytes) = stream.next().await { trace!("read bytes: {:?}", bytes); if let (Ok(bytes), Some(writer)) = (&bytes, zstd_writer.as_mut()) { writer.write_all(bytes).await?; bytes_written += bytes.len() as u64; let compressed_len = writer.get_ref().len(); trace!("wrote {} to zstd, len now {}", bytes.len(), compressed_len); if compressed_len > max_cache_size { debug!("cache longer than max, dropping"); //writer.finish(); zstd_writer.take(); } } yield bytes; } trace!("eof"); // EOF, call on_finish let finish = { match zstd_writer.take() { Some(mut writer) => { writer.shutdown().await?; let res = writer.into_inner(); trace!("EOF"); if res.len() <= max_cache_size { trace!("writing {} bytes to cache", res.len()); (bytes_written, Some(res)) } else { trace!("cache longer than max, dropping"); (bytes_written, None) } } _ => { (bytes_written, None) }} }; // EOF, finish! on_finish(finish).await.context("write_to_cache on_finish") .map_err(to_io_err)?; }; Ok(Box::pin(StreamReader::new(s))) } ripgrep-all-0.10.10/src/config.rs000066400000000000000000000374311510417424300165020ustar00rootroot00000000000000use crate::{adapters::custom::CustomAdapterConfig, project_dirs}; use anyhow::{Context, Result}; use derive_more::FromStr; use log::*; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::ffi::OsString; use std::io::Read; use std::{fs::File, io::Write, iter::IntoIterator, path::PathBuf, str::FromStr}; use structopt::StructOpt; fn is_default(t: &T) -> bool { t == &T::default() } #[derive(JsonSchema, Debug, Serialize, Deserialize, Copy, Clone, PartialEq, FromStr)] pub struct CacheCompressionLevel(pub i32); impl std::fmt::Display for CacheCompressionLevel { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) } } impl Default for CacheCompressionLevel { fn default() -> Self { Self(12) } } #[derive(JsonSchema, Debug, Serialize, Deserialize, Copy, Clone, PartialEq, FromStr)] pub struct MaxArchiveRecursion(pub i32); impl std::fmt::Display for MaxArchiveRecursion { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) } } impl Default for MaxArchiveRecursion { fn default() -> Self { Self(5) } } #[derive(JsonSchema, Debug, Serialize, Deserialize, Clone, PartialEq, FromStr)] pub struct CachePath(pub String); impl std::fmt::Display for CachePath { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) } } impl Default for CachePath { fn default() -> Self { let pd = project_dirs().expect("could not get cache path"); let app_cache = pd.cache_dir(); Self(app_cache.to_str().expect("cache path not utf8").to_owned()) } } #[derive(JsonSchema, Debug, Serialize, Deserialize, Copy, Clone, PartialEq, Eq)] pub struct CacheMaxBlobLen(pub usize); impl std::fmt::Display for CacheMaxBlobLen { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) } } impl Default for CacheMaxBlobLen { fn default() -> Self { Self(2000000) } } impl FromStr for CacheMaxBlobLen { type Err = anyhow::Error; fn from_str(s: &str) -> Result { let suffix = s.chars().last(); if let Some(suffix) = suffix { Ok(Self(match suffix { 'k' | 'M' | 'G' => usize::from_str(s.trim_end_matches(suffix)) .with_context(|| "Could not parse int".to_string()) .map(|e| { e * match suffix { 'k' => 1000, 'M' => 1_000_000, 'G' => 1_000_000_000, _ => panic!("impossible"), } }), _ => usize::from_str(s).with_context(|| "Could not parse int".to_string()), }?)) } else { Err(anyhow::format_err!("empty byte input")) } } } /// # rga configuration /// /// This is kind of a "polyglot" struct serving multiple purposes: /// /// 1. Declare the command line arguments using structopt+clap /// 1. Provide information for manpage / readme generation. /// 1. Describe the config file format (output as JSON schema via schemars). #[derive(StructOpt, Debug, Deserialize, Serialize, JsonSchema, Default, Clone)] #[structopt( name = "ripgrep-all", rename_all = "kebab-case", about = env!("CARGO_PKG_DESCRIPTION"), author = env!("CARGO_PKG_HOMEPAGE"), long_about="rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.", // TODO: long_about does not seem to work to only show this on short help after_help = "-h shows a concise overview, --help shows more detail and advanced options.\n\nAll other options not shown here are passed directly to rg, especially [PATTERN] and [PATH ...]", usage = "rga [RGA OPTIONS] [RG OPTIONS] PATTERN [PATH ...]" )] pub struct RgaConfig { /// Use more accurate but slower matching by mime type. /// /// By default, rga will match files using file extensions. /// Some programs, such as sqlite3, don't care about the file extension at all, so users sometimes use any or no extension at all. /// With this flag, rga will try to detect the mime type of input files using the magic bytes (similar to the `file` utility), and use that to choose the adapter. /// Detection is only done on the first 8KiB of the file, since we can't always seek on the input (in archives). #[serde(default, skip_serializing_if = "is_default")] #[structopt(long = "--rga-accurate")] pub accurate: bool, /// Change which adapters to use and in which priority order (descending). /// /// - "foo,bar" means use only adapters foo and bar. /// - "-bar,baz" means use all default adapters except for bar and baz. /// - "+bar,baz" means use all default adapters and also bar and baz. #[serde(default, skip_serializing_if = "is_default")] #[structopt( long = "--rga-adapters", require_equals = true, require_delimiter = true )] pub adapters: Vec, #[serde(default, skip_serializing_if = "is_default")] #[structopt(flatten)] pub cache: CacheConfig, /// Maximum depth of nested archives to recurse into. /// /// When searching in archives, rga will recurse into archives inside archives. /// This option limits the depth. #[serde(default, skip_serializing_if = "is_default")] #[structopt( default_value, long = "--rga-max-archive-recursion", require_equals = true, hidden_short_help = true )] pub max_archive_recursion: MaxArchiveRecursion, /// Don't prefix lines of files within archive with the path inside the archive. /// /// Inside archives, by default rga prefixes the content of each file with the file path within the archive. /// This is usually useful, but can cause problems because then the inner path is also searched for the pattern. #[serde(default, skip_serializing_if = "is_default")] #[structopt(long = "--rga-no-prefix-filenames")] pub no_prefix_filenames: bool, #[serde(default, skip_serializing_if = "is_default")] #[structopt(skip)] // config file only pub custom_adapters: Option>, #[serde(skip)] #[structopt(long = "--rga-config-file", require_equals = true)] pub config_file_path: Option, /// Same as passing path directly, except if argument is empty. /// /// Kinda hacky, but if no file is found, `fzf` calls `rga` with empty string as path, which causes "No such file or directory from rg". /// So filter those cases and return specially. #[serde(skip)] // CLI only #[structopt(long = "--rga-fzf-path", require_equals = true, hidden = true)] pub fzf_path: Option, #[serde(skip)] // CLI only #[structopt(long = "--rga-list-adapters", help = "List all known adapters")] pub list_adapters: bool, #[serde(skip)] // CLI only #[structopt( long = "--rga-print-config-schema", help = "Print the JSON Schema of the configuration file" )] pub print_config_schema: bool, #[serde(skip)] // CLI only #[structopt(long, help = "Show help for ripgrep itself")] pub rg_help: bool, #[serde(skip)] // CLI only #[structopt(long, help = "Show version of ripgrep itself")] pub rg_version: bool, } #[derive(StructOpt, Debug, Deserialize, Serialize, JsonSchema, Default, Clone, PartialEq)] pub struct CacheConfig { /// Disable caching of results. /// /// By default, rga caches the extracted text, if it is small enough, to a database. /// This way, repeated searches on the same set of files will be much faster. /// The location of the DB varies by platform: /// - `${XDG_CACHE_DIR-~/.cache}/ripgrep-all` on Linux /// - `~/Library/Caches/ripgrep-all` on macOS /// - `C:\Users\username\AppData\Local\ripgrep-all` on Windows /// /// If you pass this flag, all caching will be disabled. #[serde(default, skip_serializing_if = "is_default")] #[structopt(long = "--rga-no-cache")] pub disabled: bool, /// Max compressed size to cache. /// /// Longest byte length (after compression) to store in cache. /// Longer adapter outputs will not be cached and recomputed every time. /// /// Allowed suffixes on command line: k M G #[serde(default, skip_serializing_if = "is_default")] #[structopt( default_value, long = "--rga-cache-max-blob-len", hidden_short_help = true, require_equals = true, // parse(try_from_str = parse_readable_bytes_str) )] pub max_blob_len: CacheMaxBlobLen, /// ZSTD compression level to apply to adapter outputs before storing in cache DB. /// /// Ranges from 1 - 22. #[serde(default, skip_serializing_if = "is_default")] #[structopt( default_value, long = "--rga-cache-compression-level", hidden_short_help = true, require_equals = true, help = "" )] pub compression_level: CacheCompressionLevel, /// Path to store cache DB. #[serde(default, skip_serializing_if = "is_default")] #[structopt( default_value, long = "--rga-cache-path", hidden_short_help = true, require_equals = true )] pub path: CachePath, } static RGA_CONFIG: &str = "RGA_CONFIG"; use serde_json::Value; fn json_merge(a: &mut Value, b: &Value) { match (a, b) { (&mut Value::Object(ref mut a), Value::Object(b)) => { for (k, v) in b { json_merge(a.entry(k.clone()).or_insert(Value::Null), v); } } (a, b) => { *a = b.clone(); } } } fn read_config_file(path_override: Option) -> Result<(String, Value)> { let proj = project_dirs()?; let config_dir = proj.config_dir(); let config_filename = path_override .as_ref() .map(PathBuf::from) .unwrap_or_else(|| config_dir.join("config.jsonc")); let config_filename_str = config_filename.to_string_lossy().into_owned(); if config_filename.exists() { let config_file_contents = { let raw = std::fs::read_to_string(config_filename).with_context(|| { format!("Could not read config file json {config_filename_str}") })?; let mut s = String::new(); json_comments::StripComments::new(raw.as_bytes()) .read_to_string(&mut s) .context("strip comments")?; s }; { // just for error messages, actual deserialization happens after merging with cmd args serde_json::from_str::(&config_file_contents).with_context(|| { format!("Error in config file {config_filename_str}: {config_file_contents}") })?; } let config_json: serde_json::Value = serde_json::from_str(&config_file_contents).context("Could not parse config json")?; Ok((config_filename_str, config_json)) } else if let Some(p) = path_override.as_ref() { Err(anyhow::anyhow!("Config file not found: {}", p))? } else { // write default config std::fs::create_dir_all(config_dir)?; let mut schemafile = File::create(config_dir.join("config.v1.schema.json"))?; schemafile.write_all( serde_json::to_string_pretty(&schemars::schema_for!(RgaConfig))?.as_bytes(), )?; let mut configfile = File::create(config_filename)?; configfile.write_all(include_str!("../doc/config.default.jsonc").as_bytes())?; Ok(( config_filename_str, serde_json::Value::Object(Default::default()), )) } } fn read_config_env() -> Result { let val = std::env::var(RGA_CONFIG).ok(); if let Some(val) = val { serde_json::from_str(&val).context("could not parse config from env RGA_CONFIG") } else { serde_json::to_value(RgaConfig::default()).context("could not create default config") } } pub fn parse_args(args: I, is_rga_preproc: bool) -> Result where I: IntoIterator, I::Item: Into + Clone, { // TODO: don't read config file in rga-preproc for performance (called for every file) let arg_matches: RgaConfig = RgaConfig::from_iter(args); let args_config = serde_json::to_value(&arg_matches)?; let merged_config = { if is_rga_preproc { // only read from env and args let mut merged_config = read_config_env()?; json_merge(&mut merged_config, &args_config); log::debug!("Config: {}", serde_json::to_string(&merged_config)?); merged_config } else { // read from config file, env and args let (config_filename, config_file_config) = read_config_file(arg_matches.config_file_path)?; let env_var_config = read_config_env()?; let mut merged_config = config_file_config.clone(); json_merge(&mut merged_config, &env_var_config); json_merge(&mut merged_config, &args_config); log::debug!( "Configs:\n{}: {}\n{}: {}\nArgs: {}\nMerged: {}", config_filename, serde_json::to_string_pretty(&config_file_config)?, RGA_CONFIG, serde_json::to_string_pretty(&env_var_config)?, serde_json::to_string_pretty(&args_config)?, serde_json::to_string_pretty(&merged_config)? ); // pass to child processes // TODO: Audit that the environment access only happens in single-threaded code. unsafe { std::env::set_var(RGA_CONFIG, merged_config.to_string()) }; merged_config } }; let mut res: RgaConfig = serde_json::from_value(merged_config.clone()) .map_err(|e| { println!("{e:?}"); e }) .with_context(|| { format!( "Error parsing merged config: {}", serde_json::to_string_pretty(&merged_config).expect("no tostring") ) })?; { // readd values with [serde(skip)] res.fzf_path = arg_matches.fzf_path; res.list_adapters = arg_matches.list_adapters; res.print_config_schema = arg_matches.print_config_schema; res.rg_help = arg_matches.rg_help; res.rg_version = arg_matches.rg_version; } Ok(res) } /// Split arguments into the ones we care about and the ones rg cares about pub fn split_args(is_rga_preproc: bool) -> Result<(RgaConfig, Vec)> { let mut app = RgaConfig::clap(); app.p.create_help_and_version(); let mut firstarg = true; // debug!("{:#?}", app.p.flags); let (our_args, mut passthrough_args): (Vec, Vec) = std::env::args_os() .partition(|os_arg| { if firstarg { // hacky, but .enumerate() would be ugly because partition is too simplistic firstarg = false; return true; } if let Some(arg) = os_arg.to_str() { arg.starts_with("--rga-") || arg.starts_with("--rg-") || arg == "--help" || arg == "-h" || arg == "--version" || arg == "-V" } else { // args that are not unicode can only be filenames, pass them to rg false } }); debug!("rga (our) args: {:?}", our_args); let matches = parse_args(our_args, is_rga_preproc).context("Could not parse config")?; if matches.rg_help { passthrough_args.insert(0, "--help".into()); } if matches.rg_version { passthrough_args.insert(0, "--version".into()); } debug!("rga (passthrough) args: {:?}", passthrough_args); Ok((matches, passthrough_args)) } ripgrep-all-0.10.10/src/expand.rs000066400000000000000000000077461510417424300165220ustar00rootroot00000000000000use std::borrow::Cow; use anyhow::Result; // from https://github.com/phiresky/timetrackrs/blob/1c3df09ba2c1fda6065f2927045bd28dea0738d3/src/expand.rs pub fn find_byte(needle: u8, haystack: &[u8]) -> Option { #[cfg(not(feature = "perf-literal"))] fn imp(needle: u8, haystack: &[u8]) -> Option { haystack.iter().position(|&b| b == needle) } #[cfg(feature = "perf-literal")] fn imp(needle: u8, haystack: &[u8]) -> Option { use memchr::memchr; memchr(needle, haystack) } imp(needle, haystack) } pub fn expand_str_ez<'a, F>(replacement: &'a str, lambda: F) -> Result where F: Fn(&str) -> Result>, { let mut dst = String::new(); expand_str_lambda(lambda, replacement, &mut dst)?; Ok(dst) } pub fn expand_str_lambda<'a, F>(cap: F, replacement: &'a str, dst: &mut String) -> Result<()> where F: Fn(&str) -> Result>, { let mut replacement = replacement; while !replacement.is_empty() { match find_byte(b'$', replacement.as_bytes()) { None => break, Some(i) => { dst.push_str(&replacement[..i]); replacement = &replacement[i..]; } } if replacement.as_bytes().get(1).is_some_and(|&b| b == b'$') { dst.push('$'); replacement = &replacement[2..]; continue; } debug_assert!(!replacement.is_empty()); let cap_ref = match find_cap_ref(replacement.as_bytes()) { Some(cap_ref) => cap_ref, None => { dst.push('$'); replacement = &replacement[1..]; continue; } }; replacement = &replacement[cap_ref.end..]; dst.push_str(cap(cap_ref.cap)?.as_ref()); } dst.push_str(replacement); Ok(()) } /// `CaptureRef` represents a reference to a capture group inside some text. /// The reference is either a capture group name or a number. /// /// It is also tagged with the position in the text following the /// capture reference. #[derive(Clone, Copy, Debug, Eq, PartialEq)] struct CaptureRef<'a> { cap: &'a str, end: usize, } /// Parses a possible reference to a capture group name in the given text, /// starting at the beginning of `replacement`. /// /// If no such valid reference could be found, None is returned. fn find_cap_ref(replacement: &[u8]) -> Option> { let mut i = 0; let rep: &[u8] = replacement; if rep.len() <= 1 || rep[0] != b'$' { return None; } i += 1; if rep[i] == b'{' { return find_cap_ref_braced(rep, i + 1); } let mut cap_end = i; while rep.get(cap_end).is_some_and(is_valid_cap_letter) { cap_end += 1; } if cap_end == i { return None; } // We just verified that the range 0..cap_end is valid ASCII, so it must // therefore be valid UTF-8. If we really cared, we could avoid this UTF-8 // check with either unsafe or by parsing the number straight from &[u8]. let cap = std::str::from_utf8(&rep[i..cap_end]).expect("valid UTF-8 capture name"); Some(CaptureRef { cap, end: cap_end }) } fn find_cap_ref_braced(rep: &[u8], mut i: usize) -> Option> { let start = i; while rep.get(i).is_some_and(|&b| b != b'}') { i += 1; } if rep.get(i).is_none_or(|&b| b != b'}') { return None; } // When looking at braced names, we don't put any restrictions on the name, // so it's possible it could be invalid UTF-8. But a capture group name // can never be invalid UTF-8, so if we have invalid UTF-8, then we can // safely return None. let cap = match std::str::from_utf8(&rep[start..i]) { Err(_) => return None, Ok(cap) => cap, }; Some(CaptureRef { cap, end: i + 1 }) } /// Returns true if and only if the given byte is allowed in a capture name. fn is_valid_cap_letter(b: &u8) -> bool { matches!(b, b'0'..=b'9' | b'a'..=b'z' | b'A'..=b'Z' | b'_') } ripgrep-all-0.10.10/src/lib.rs000066400000000000000000000044211510417424300157740ustar00rootroot00000000000000#![warn(clippy::all)] pub mod adapted_iter; pub mod adapters; mod caching_writer; pub mod config; pub mod expand; pub mod matching; pub mod preproc; pub mod preproc_cache; pub mod recurse; #[cfg(test)] pub mod test_utils; use anyhow::Context; use anyhow::Result; use async_stream::stream; use directories_next::ProjectDirs; use std::time::Instant; use tokio::io::AsyncRead; use tokio::task::JoinHandle; use tokio_util::io::StreamReader; pub fn project_dirs() -> Result { directories_next::ProjectDirs::from("", "", "ripgrep-all") .context("no home directory found! :(") } // no "significant digits" format specifier in rust?? // https://stackoverflow.com/questions/60497397/how-do-you-format-a-float-to-the-first-significant-decimal-and-with-specified-pr fn meh(float: f32, precision: usize) -> usize { // compute absolute value let a = float.abs(); // if abs value is greater than 1, then precision becomes less than "standard" if a >= 1. { // reduce by number of digits, minimum 0 let n = (1. + a.log10().floor()) as usize; precision.saturating_sub(n) // if precision is less than 1 (but non-zero), then precision becomes greater than "standard" } else if a > 0. { // increase number of digits let n = -(1. + a.log10().floor()) as usize; precision + n // special case for 0 } else { 0 } } pub fn print_dur(start: Instant) -> String { let mut dur = Instant::now().duration_since(start).as_secs_f32(); let mut suffix = ""; if dur < 0.1 { suffix = "m"; dur *= 1000.0; } let precision = meh(dur, 3); format!("{dur:.precision$}{suffix}s") } pub fn print_bytes(bytes: impl Into) -> String { pretty_bytes::converter::convert(bytes.into()) } pub fn to_io_err(e: anyhow::Error) -> std::io::Error { std::io::Error::other(e) } #[cfg(test)] #[ctor::ctor] fn init() { env_logger::init(); } /** returns an AsyncRead that is empty but returns an io error if the given task had an io error or join error */ pub fn join_handle_to_stream(join: JoinHandle>) -> impl AsyncRead { let st = stream! { join.await.map_err(std::io::Error::other)??; yield std::io::Result::Ok(&b""[..]) }; StreamReader::new(st) } ripgrep-all-0.10.10/src/matching.rs000066400000000000000000000107641510417424300170270ustar00rootroot00000000000000/** * Module for matching adapters to files based on file name or mime type */ use crate::adapters::*; use anyhow::*; use regex::{Regex, RegexSet}; use std::iter::Iterator; use std::sync::Arc; // match only based on file path #[derive(Clone, Debug)] pub enum FastFileMatcher { // MimeType(Regex), /** * without the leading dot, e.g. "jpg" or "tar.gz". Matched as /.*\.ext$/ * */ FileExtension(String), // todo: maybe add others, e.g. regex on whole filename or even paths // todo: maybe allow matching a directory (e.g. /var/lib/postgres) } #[derive(Clone, Debug)] pub enum FileMatcher { /// any type of fast matcher Fast(FastFileMatcher), /// /// match by exact mime type extracted using tree_magic /// TODO: allow match ignoring suffix etc? MimeType(String), } impl From for FileMatcher { fn from(t: FastFileMatcher) -> Self { Self::Fast(t) } } pub struct FileMeta { // filename is not actually a utf8 string, but since we can't do regex on OsStr and can't get a &[u8] from OsStr either, // and since we probably only want to do only matching on ascii stuff anyways, this is the filename as a string with non-valid bytes removed pub lossy_filename: String, // only given when slow matching is enabled pub mimetype: Option<&'static str>, } pub fn extension_to_regex(extension: &str) -> Regex { Regex::new(&format!("(?i)\\.{}$", ®ex::escape(extension))) .expect("we know this regex compiles") } #[allow(clippy::type_complexity)] pub fn adapter_matcher( adapters: &[Arc], slow: bool, ) -> Result Option<(Arc, FileMatcher)> + use<>> { // need order later let adapter_names: Vec = adapters.iter().map(|e| e.metadata().name.clone()).collect(); let mut fname_regexes = vec![]; let mut mime_regexes = vec![]; for adapter in adapters.iter() { let metadata = adapter.metadata(); use FileMatcher::*; for matcher in metadata.get_matchers(slow) { match matcher.as_ref() { MimeType(re) => { mime_regexes.push((re.clone(), adapter.clone(), MimeType(re.clone()))) } Fast(FastFileMatcher::FileExtension(re)) => fname_regexes.push(( extension_to_regex(re), adapter.clone(), Fast(FastFileMatcher::FileExtension(re.clone())), )), }; } } let fname_regex_set = RegexSet::new(fname_regexes.iter().map(|p| p.0.as_str()))?; let mime_regex_set = RegexSet::new(mime_regexes.iter().map(|p| p.0.as_str()))?; Ok(move |meta: FileMeta| { let fname_matches: Vec<_> = fname_regex_set .matches(&meta.lossy_filename) .into_iter() .collect(); let mime_matches: Vec<_> = if slow { mime_regex_set .matches(meta.mimetype.expect("No mimetype?")) .into_iter() .collect() } else { vec![] }; if fname_matches.len() + mime_matches.len() > 1 { // get first according to original priority list... // todo: kinda ugly let fa = fname_matches .iter() .map(|e| (fname_regexes[*e].1.clone(), fname_regexes[*e].2.clone())); let fb = mime_matches .iter() .map(|e| (mime_regexes[*e].1.clone(), mime_regexes[*e].2.clone())); let mut v = vec![]; v.extend(fa); v.extend(fb); v.sort_by_key(|e| { adapter_names .iter() .position(|r| r == &e.0.metadata().name) .expect("impossib7") }); eprintln!( "Warning: found multiple adapters for {}:", meta.lossy_filename ); for mmatch in v.iter() { eprintln!(" - {}", mmatch.0.metadata().name); } return Some(v[0].clone()); } if mime_matches.is_empty() { if fname_matches.is_empty() { None } else { let (_, adapter, matcher) = &fname_regexes[fname_matches[0]]; Some((adapter.clone(), matcher.clone())) } } else { let (_, adapter, matcher) = &mime_regexes[mime_matches[0]]; Some((adapter.clone(), matcher.clone())) } }) } ripgrep-all-0.10.10/src/preproc.rs000066400000000000000000000225311510417424300167020ustar00rootroot00000000000000use crate::adapted_iter::AdaptedFilesIterBox; use crate::adapters::*; use crate::caching_writer::async_read_and_write_to_cache; use crate::config::RgaConfig; use crate::matching::*; use crate::preproc_cache::CacheKey; use crate::recurse::concat_read_streams; use crate::{ preproc_cache::{PreprocCache, open_cache_db}, print_bytes, }; use anyhow::*; use async_compression::tokio::bufread::ZstdDecoder; use async_stream::stream; // use futures::future::{BoxFuture, FutureExt}; use log::*; use postproc::PostprocPrefix; use std::future::Future; use std::io::Cursor; use std::path::Path; use std::pin::Pin; use std::sync::Arc; use tokio::io::AsyncBufReadExt; use tokio::io::BufReader; use tokio::io::{AsyncBufRead, AsyncReadExt}; pub type ActiveAdapters = Vec>; async fn choose_adapter( config: &RgaConfig, filepath_hint: &Path, archive_recursion_depth: i32, inp: &mut (impl AsyncBufRead + Unpin), ) -> Result, FileMatcher, ActiveAdapters)>> { let active_adapters = get_adapters_filtered(config.custom_adapters.clone(), &config.adapters)?; let adapters = adapter_matcher(&active_adapters, config.accurate)?; let filename = filepath_hint .file_name() .ok_or_else(|| format_err!("Empty filename"))?; debug!("Archive recursion depth: {}", archive_recursion_depth); let mimetype = if config.accurate { let buf = inp.fill_buf().await?; // fill but do not consume! if buf.starts_with(b"From \x0d") || buf.starts_with(b"From -") { Some("application/mbox") } else { let mimetype = tree_magic::from_u8(buf); debug!("mimetype: {:?}", mimetype); Some(mimetype) } } else { None }; let adapter = adapters(FileMeta { mimetype, lossy_filename: filename.to_string_lossy().to_string(), }); Ok(adapter.map(|e| (e.0, e.1, active_adapters))) } enum Ret { Recurse(AdaptInfo, Arc, FileMatcher, ActiveAdapters), Passthrough(AdaptInfo), } async fn buf_choose_adapter(ai: AdaptInfo) -> Result { let mut inp = BufReader::with_capacity(1 << 16, ai.inp); let adapter = choose_adapter( &ai.config, &ai.filepath_hint, ai.archive_recursion_depth, &mut inp, ) .await?; let ai = AdaptInfo { inp: Box::pin(inp), ..ai }; let (a, b, c) = match adapter { Some(x) => x, None => { // allow passthrough if the file is in an archive or accurate matching is enabled // otherwise it should have been filtered out by rg pre-glob since rg can handle those better than us let allow_cat = !ai.is_real_file || ai.config.accurate; if allow_cat { if ai.postprocess { ( Arc::new(PostprocPrefix {}) as Arc, FileMatcher::Fast(FastFileMatcher::FileExtension("default".to_string())), Vec::new(), ) } else { return Ok(Ret::Passthrough(ai)); } } else { return Err(format_err!( "No adapter found for file {:?}, passthrough disabled.", ai.filepath_hint .file_name() .ok_or_else(|| format_err!("Empty filename"))? )); } } }; Ok(Ret::Recurse(ai, a, b, c)) } /** * preprocess a file as defined in `ai`. * * If a cache is passed, read/write to it. * */ pub async fn rga_preproc(ai: AdaptInfo) -> Result { debug!("path (hint) to preprocess: {:?}", ai.filepath_hint); // todo: figure out when using a bufreader is a good idea and when it is not // seems to be good for File::open() reads, but not sure about within archives (tar, zip) let (ai, adapter, detection_reason, active_adapters) = match buf_choose_adapter(ai).await? { Ret::Recurse(ai, a, b, c) => (ai, a, b, c), Ret::Passthrough(ai) => { return Ok(ai.inp); } }; let path_hint_copy = ai.filepath_hint.clone(); adapt_caching(ai, adapter, detection_reason, active_adapters) .await .with_context(|| format!("run_adapter({})", &path_hint_copy.to_string_lossy())) } async fn adapt_caching( ai: AdaptInfo, adapter: Arc, detection_reason: FileMatcher, active_adapters: ActiveAdapters, ) -> Result { let meta = adapter.metadata(); debug!( "Chose adapter '{}' because of matcher {:?}", &meta.name, &detection_reason ); eprintln!( "{} adapter: {}", ai.filepath_hint.to_string_lossy(), &meta.name ); let cache_compression_level = ai.config.cache.compression_level; let cache_max_blob_len = ai.config.cache.max_blob_len; let cache = if ai.is_real_file && !ai.config.cache.disabled { Some(open_cache_db(Path::new(&ai.config.cache.path.0)).await?) } else { None }; let mut cache = cache.context("No cache?")?; let cache_key = CacheKey::new( ai.postprocess, &ai.filepath_hint, adapter.as_ref(), &active_adapters, )?; // let dbg_ctx = format!("adapter {}", &adapter.metadata().name); let cached = cache.get(&cache_key).await.context("cache.get")?; match cached { Some(cached) => Ok(Box::pin(ZstdDecoder::new(Cursor::new(cached)))), None => { debug!("cache MISS, running adapter with caching..."); let inp = loop_adapt(adapter.as_ref(), detection_reason, ai).await?; let inp = concat_read_streams(inp); let inp = async_read_and_write_to_cache( inp, cache_max_blob_len.0, cache_compression_level.0, Box::new(move |(uncompressed_size, compressed)| { Box::pin(async move { debug!( "uncompressed output: {}", print_bytes(uncompressed_size as f64) ); if let Some(cached) = compressed { debug!("compressed output: {}", print_bytes(cached.len() as f64)); cache .set(&cache_key, cached) .await .context("writing to cache")? } Ok(()) }) }), )?; Ok(Box::pin(inp)) } } } async fn read_discard(mut x: ReadBox) -> Result<()> { let mut buf = [0u8; 1 << 16]; loop { let n = x.read(&mut buf).await?; if n == 0 { break; } } Ok(()) } pub fn loop_adapt( adapter: &dyn FileAdapter, detection_reason: FileMatcher, ai: AdaptInfo, ) -> Pin> + Send + '_>> { Box::pin(async move { loop_adapt_inner(adapter, detection_reason, ai).await }) } pub async fn loop_adapt_inner( adapter: &dyn FileAdapter, detection_reason: FileMatcher, ai: AdaptInfo, ) -> anyhow::Result { let fph = ai.filepath_hint.clone(); let inp = adapter.adapt(ai, &detection_reason).await; let inp = if adapter.metadata().name == "postprocprefix" { // don't add confusing error context inp? } else { inp.with_context(|| { format!( "adapting {} via {} failed", fph.to_string_lossy(), adapter.metadata().name ) })? }; let s = stream! { for await file in inp { trace!("next file"); match buf_choose_adapter(file?).await? { Ret::Recurse(ai, adapter, detection_reason, _active_adapters) => { if ai.archive_recursion_depth >= ai.config.max_archive_recursion.0 { // some adapters (esp. zip) assume that the entry is read fully and might hang otherwise read_discard(ai.inp).await?; let s = format!("{}[rga: max archive recursion reached ({})]\n", ai.line_prefix, ai.archive_recursion_depth).into_bytes(); yield Ok(AdaptInfo { inp: Box::pin(Cursor::new(s)), ..ai }); continue; } debug!( "Chose adapter '{}' because of matcher {:?}", &adapter.metadata().name, &detection_reason ); eprintln!( "{} adapter: {}", ai.filepath_hint.to_string_lossy(), &adapter.metadata().name ); for await ifile in loop_adapt(adapter.as_ref(), detection_reason, ai).await? { yield ifile; } } Ret::Passthrough(ai) => { debug!("no adapter for {}, ending recursion", ai.filepath_hint.to_string_lossy()); yield Ok(ai); } } trace!("done with files"); } trace!("stream ended"); }; Ok(Box::pin(s)) } ripgrep-all-0.10.10/src/preproc_cache.rs000066400000000000000000000174401510417424300200300ustar00rootroot00000000000000use crate::{adapters::FileAdapter, preproc::ActiveAdapters}; use anyhow::{Context, Result}; use log::warn; use path_clean::PathClean; use rusqlite::{OptionalExtension, named_params}; use std::{path::Path, time::UNIX_EPOCH}; use tokio_rusqlite::Connection; static SCHEMA_VERSION: i32 = 3; #[derive(Clone)] pub struct CacheKey { config_hash: String, adapter: String, adapter_version: i32, active_adapters: String, file_path: String, file_mtime_unix_ms: i64, } impl CacheKey { pub fn new( postprocess: bool, filepath_hint: &Path, adapter: &dyn FileAdapter, active_adapters: &ActiveAdapters, ) -> Result { let meta = std::fs::metadata(filepath_hint) .with_context(|| format!("reading metadata for {}", filepath_hint.to_string_lossy()))?; let modified = meta.modified().expect("weird OS that can't into mtime"); let file_mtime_unix_ms = modified.duration_since(UNIX_EPOCH)?.as_millis() as i64; let active_adapters = if adapter.metadata().recurses { serde_json::to_string( &active_adapters .iter() .map(|a| format!("{}.v{}", a.metadata().name, a.metadata().version)) .collect::>(), )? } else { "null".to_string() }; Ok(Self { config_hash: if postprocess { "a41e2e9".to_string() } else { "f1502a3".to_string() }, // todo: when we add more config options that affect caching, create a struct and actually hash it adapter: adapter.metadata().name.clone(), adapter_version: adapter.metadata().version, file_path: filepath_hint.clean().to_string_lossy().to_string(), file_mtime_unix_ms, active_adapters, }) } } #[async_trait::async_trait] pub trait PreprocCache { async fn get(&self, key: &CacheKey) -> Result>>; async fn set(&mut self, key: &CacheKey, value: Vec) -> Result<()>; } async fn connect_pragmas(db: &Connection) -> Result<()> { // https://phiresky.github.io/blog/2020/sqlite-performance-tuning/ //let want_page_size = 32768; //db.execute(&format!("pragma page_size = {};", want_page_size)) // .context("setup pragma 1")?; db.call(|db| { // db.busy_timeout(Duration::from_secs(10))?; db.pragma_update(None, "journal_mode", "wal")?; db.pragma_update(None, "foreign_keys", "on")?; db.pragma_update(None, "temp_store", "memory")?; db.pragma_update(None, "synchronous", "off")?; // integrity isn't very important here db.pragma_update(None, "mmap_size", "2000000000")?; db.execute(" create table if not exists preproc_cache ( config_hash text not null, adapter text not null, adapter_version integer not null, created_unix_ms integer not null default (unixepoch() * 1000), active_adapters text not null, -- 'null' if adapter cannot recurse file_path text not null, file_mtime_unix_ms integer not null, text_content_zstd blob not null ) strict", [] )?; db.execute("create unique index if not exists preproc_cache_idx on preproc_cache (config_hash, adapter, adapter_version, file_path, active_adapters)", [])?; Ok(()) }) .await.context("connect_pragmas")?; let jm: i64 = db .call(|db| Ok(db.pragma_query_value(None, "application_id", |r| r.get(0))?)) .await?; if jm != 924716026 { // (probably) newly created db db.call(|db| Ok(db.pragma_update(None, "application_id", "924716026")?)) .await?; } Ok(()) } struct SqliteCache { db: Connection, } impl SqliteCache { async fn new(path: &Path) -> Result { let db = Connection::open(path.join("cache.sqlite3")).await?; db.call(|db| { let schema_version: i32 = db.pragma_query_value(None, "user_version", |r| r.get(0))?; if schema_version != SCHEMA_VERSION { warn!("Cache schema version mismatch, clearing cache"); db.execute("drop table if exists preproc_cache", [])?; db.pragma_update(None, "user_version", format!("{SCHEMA_VERSION}"))?; } Ok(()) }) .await?; connect_pragmas(&db).await?; Ok(Self { db }) } } #[async_trait::async_trait] impl PreprocCache for SqliteCache { async fn get(&self, key: &CacheKey) -> Result>> { let key = (*key).clone(); // todo: without cloning Ok(self .db .call(move |db| { Ok(db .query_row( "select text_content_zstd from preproc_cache where adapter = :adapter and config_hash = :config_hash and adapter_version = :adapter_version and active_adapters = :active_adapters and file_path = :file_path and file_mtime_unix_ms = :file_mtime_unix_ms ", named_params! { ":config_hash": &key.config_hash, ":adapter": &key.adapter, ":adapter_version": &key.adapter_version, ":active_adapters": &key.active_adapters, ":file_path": &key.file_path, ":file_mtime_unix_ms": &key.file_mtime_unix_ms }, |r| r.get::<_, Vec>(0), ) .optional()?) }) .await .context("reading from cache")?) } async fn set(&mut self, key: &CacheKey, value: Vec) -> Result<()> { let key = (*key).clone(); // todo: without cloning log::trace!( "Writing to cache: {}, {}, {} byte", key.adapter, key.file_path, value.len() ); Ok(self .db .call(move |db| { db.execute( "insert into preproc_cache (config_hash, adapter, adapter_version, active_adapters, file_path, file_mtime_unix_ms, text_content_zstd) values (:config_hash, :adapter, :adapter_version, :active_adapters, :file_path, :file_mtime_unix_ms, :text_content_zstd) on conflict (config_hash, adapter, adapter_version, active_adapters, file_path) do update set file_mtime_unix_ms = :file_mtime_unix_ms, created_unix_ms = unixepoch() * 1000, text_content_zstd = :text_content_zstd", named_params! { ":config_hash": &key.config_hash, ":adapter": &key.adapter, ":adapter_version": &key.adapter_version, ":active_adapters": &key.active_adapters, ":file_path": &key.file_path, ":file_mtime_unix_ms": &key.file_mtime_unix_ms, ":text_content_zstd": value })?; Ok(()) }) .await?) } } /// opens a default cache pub async fn open_cache_db(path: &Path) -> Result> { std::fs::create_dir_all(path)?; SqliteCache::new(path).await } #[cfg(test)] mod test { use crate::preproc_cache::*; #[tokio::test] async fn test_read_write() -> anyhow::Result<()> { let path = tempfile::tempdir()?; let _db = open_cache_db(&path.path().join("foo.sqlite3")).await?; // db.set(); Ok(()) } } ripgrep-all-0.10.10/src/recurse.rs000066400000000000000000000010001510417424300166640ustar00rootroot00000000000000use tokio_util::io::{ReaderStream, StreamReader}; use crate::{adapted_iter::AdaptedFilesIterBox, adapters::*, to_io_err}; use async_stream::stream; pub fn concat_read_streams(input: AdaptedFilesIterBox) -> ReadBox { let s = stream! { for await output in input { let o = output.map_err(to_io_err)?.inp; let stream = ReaderStream::new(o); for await bytes in stream { yield bytes; } } }; Box::pin(StreamReader::new(s)) } ripgrep-all-0.10.10/src/test_utils.rs000066400000000000000000000040451510417424300174270ustar00rootroot00000000000000use crate::{ adapted_iter::AdaptedFilesIterBox, adapters::{ AdaptInfo, ReadBox, custom::{BUILTIN_SPAWNING_ADAPTERS, CustomSpawningFileAdapter}, }, config::RgaConfig, matching::{FastFileMatcher, FileMatcher}, recurse::concat_read_streams, }; use anyhow::Result; use std::path::{Path, PathBuf}; use tokio::{fs::File, io::AsyncReadExt}; pub use pretty_assertions::{assert_eq, assert_ne}; pub fn test_data_dir() -> PathBuf { let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); d.push("exampledir/test/"); d } pub async fn simple_fs_adapt_info(filepath: &Path) -> Result<(AdaptInfo, FileMatcher)> { Ok(simple_adapt_info_full( filepath, Box::pin(File::open(filepath).await?), true, )) } pub fn simple_adapt_info(filepath: &Path, inp: ReadBox) -> (AdaptInfo, FileMatcher) { simple_adapt_info_full(filepath, inp, false) } pub fn simple_adapt_info_full( filepath: &Path, inp: ReadBox, is_real_file: bool, ) -> (AdaptInfo, FileMatcher) { ( AdaptInfo { filepath_hint: filepath.to_owned(), is_real_file, archive_recursion_depth: 0, inp, line_prefix: "PREFIX:".to_string(), config: RgaConfig::default(), postprocess: true, }, FastFileMatcher::FileExtension( filepath .extension() .unwrap_or_default() .to_string_lossy() .into_owned(), ) .into(), ) } pub async fn adapted_to_vec(adapted: AdaptedFilesIterBox) -> Result> { let mut res = concat_read_streams(adapted); let mut buf = Vec::new(); res.read_to_end(&mut buf).await?; Ok(buf) } pub fn poppler_adapter() -> CustomSpawningFileAdapter { let adapter = BUILTIN_SPAWNING_ADAPTERS .iter() .find(|e| e.name == "poppler") .expect("no poppler adapter"); adapter.to_adapter() } #[cfg(test)] pub fn init_logging() { let _ = env_logger::builder().is_test(true).try_init(); }