xleak-0.2.6/.cargo_vcs_info.json0000644000000001360000000000100121450ustar { "git": { "sha1": "f6a62fd83e4fed7b1c69e9908a868813868c0a8c" }, "path_in_vcs": "" }xleak-0.2.6/.github/ISSUE_TEMPLATE/bug_report.md000064400000000000000000000016741046102023000171620ustar 00000000000000--- name: Bug Report about: Report a bug or issue with xleak title: '[BUG] ' labels: bug assignees: '' --- ## Description ## Steps to Reproduce 1. 2. 3. ## Expected Behavior ## Actual Behavior ## Environment - **xleak version**: - **OS**: - **Installation method**: ## Excel File Details (if applicable) - **File format**: - **File size**: - **Number of sheets**: - **Can you share the file?**: ## Error Message ``` Paste error message here ``` ## Additional Context xleak-0.2.6/.github/ISSUE_TEMPLATE/feature_request.md000064400000000000000000000012741046102023000202110ustar 00000000000000--- name: Feature Request about: Suggest a new feature or enhancement title: '[FEATURE] ' labels: enhancement assignees: '' --- ## Feature Description ## Problem or Use Case ## Proposed Solution ## Alternatives Considered ## Additional Context ## Implementation Notes xleak-0.2.6/.github/ISSUE_TEMPLATE/release.md000064400000000000000000000065661046102023000164370ustar 00000000000000--- name: Release about: Track a new version release title: 'Release vX.Y.Z' labels: release assignees: '' --- ## Release Version **Version:** vX.Y.Z ## Pre-Release Checklist - [ ] All tests passing: `cargo test` - [ ] No clippy warnings: `cargo clippy` - [ ] Code is formatted: `cargo fmt --check` - [ ] CHANGELOG.md updated with new version changes - [ ] Version bumped in `Cargo.toml` - [ ] Test binary works: `cargo run --release -- test_data.xlsx` ## Create Release - [ ] Commit version bump: `git commit -m "chore: release X.Y.Z"` - [ ] Push to main: `git push` - [ ] Create version tag: `git tag vX.Y.Z` - [ ] Push tag: `git push origin vX.Y.Z` - [ ] Wait for GitHub Actions workflows to complete (~10-15 minutes) ## Automated Release Verification All publishing is automated. Verify these workflows complete successfully: ### Core Release (`.github/workflows/release.yml`) - [ ] GitHub Release created at https://github.com/bgreenwell/xleak/releases/tag/vX.Y.Z - [ ] All artifacts present (binaries, tarballs, installers, checksums) - [ ] Homebrew formula published to [homebrew-tap](https://github.com/bgreenwell/homebrew-tap) - [ ] Published to [crates.io](https://crates.io/crates/xleak) ### Scoop Publishing (`.github/workflows/publish-scoop.yml`) - [ ] Manifest updated in [scoop-bucket](https://github.com/bgreenwell/scoop-bucket) - [ ] Manifest uses correct ZIP file and SHA256 ### AUR Publishing (`.github/workflows/publish-aur.yml`) - [ ] PKGBUILD updated in [AUR package](https://aur.archlinux.org/packages/xleak-bin) - [ ] .SRCINFO generated correctly - [ ] Version, URL, and SHA256 correct ### WinGet Publishing (`.github/workflows/publish-winget.yml`) - [ ] PR created to [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) - [ ] PR validation checks passing - [ ] PR merged (may take 1-2 days, requires Microsoft approval) ## Test Installations Test at least one platform from each category: - [ ] Homebrew (macOS/Linux): `brew upgrade xleak && xleak --version` - [ ] Scoop (Windows): `scoop update xleak && xleak --version` - [ ] AUR (Arch Linux): `yay -Syu xleak-bin && xleak --version` - [ ] WinGet (Windows): `winget upgrade bgreenwell.xleak` (after PR merge) - [ ] Shell installer: Test install script from releases - [ ] MSI installer: Download and test from GitHub Releases ## Troubleshooting If any automated workflow fails: 1. Check GitHub Actions logs for specific errors 2. Verify secrets are configured: - `HOMEBREW_TAP_TOKEN` - `SCOOP_BUCKET_TOKEN` - `CARGO_REGISTRY_TOKEN` - `AUR_SSH_PRIVATE_KEY` - `WINGET_TOKEN` 3. See RELEASE_CHECKLIST.md for detailed troubleshooting 4. Fall back to manual publishing if needed (instructions in RELEASE_CHECKLIST.md) ### Known Issues - **WinGet PR merge delay**: First-time submissions may take longer for review - **AUR SSH timeout**: Retry workflow if AUR connection times out ## Post-Release - [ ] All workflows completed successfully - [ ] Installation tests passed on multiple platforms - [ ] Announcement drafted (if applicable) - [ ] Documentation updated if needed - [ ] Monitor for installation issues on GitHub Discussions/Issues - [ ] Close this issue ## Notes --- **Automation Status:** - Fully automated: GitHub Releases, Homebrew, Scoop, crates.io, AUR - Semi-automated: WinGet (PR created automatically, merge requires approval) xleak-0.2.6/.github/dependabot.yml.disabled000064400000000000000000000024111046102023000166710ustar 00000000000000# GitHub Dependabot configuration for doxx - DISABLED # See: https://docs.github.com/en/code-security/dependabot # # This is disabled during early development to avoid PR spam. # Rename to dependabot.yml when project is stable and ready for automated dependency updates. version: 2 updates: # Rust dependencies - package-ecosystem: "cargo" directory: "/" schedule: interval: "weekly" day: "monday" time: "09:00" timezone: "UTC" open-pull-requests-limit: 3 reviewers: - "bgreenwell" assignees: - "bgreenwell" commit-message: prefix: "deps" include: "scope" labels: - "dependencies" - "rust" # Group ALL updates to reduce PR noise groups: rust-dependencies: patterns: - "*" update-types: - "minor" - "patch" - "major" # GitHub Actions - package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" day: "monday" time: "09:00" timezone: "UTC" open-pull-requests-limit: 2 reviewers: - "bgreenwell" assignees: - "bgreenwell" commit-message: prefix: "ci" include: "scope" labels: - "dependencies" - "github-actions"xleak-0.2.6/.github/workflows/ci.yml000064400000000000000000000025341046102023000154540ustar 00000000000000name: CI on: push: branches: [main] pull_request: branches: [main] env: CARGO_TERM_COLOR: always jobs: test: name: Build and Test runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] steps: - name: Checkout code uses: actions/checkout@v5 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: Install system dependencies (Linux) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y libxcb-shape0-dev libxcb-xfixes0-dev - name: Cache dependencies uses: Swatinem/rust-cache@v2 - name: Check formatting (Unix only) if: matrix.os != 'windows-latest' run: cargo fmt --all -- --check - name: Lint with Clippy run: cargo clippy --all-targets -- -D warnings - name: Check build run: cargo build --release - name: Run tests run: cargo test --verbose # Nix build - name: Install Nix if: matrix.os != 'windows-latest' uses: cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable - name: Build with Nix if: matrix.os != 'windows-latest' run: nix build xleak-0.2.6/.github/workflows/docs.yml000064400000000000000000000033201046102023000160030ustar 00000000000000name: Deploy Documentation on: push: branches: ["main"] workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: false jobs: build: if: ${{ github.actor == 'bgreenwell' }} runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Cache dependencies uses: Swatinem/rust-cache@v2 - name: Build documentation run: cargo doc --no-deps - name: Create redirect page run: echo '' > target/doc/index.html - name: Setup Pages id: pages uses: actions/configure-pages@v5 continue-on-error: true - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: "./target/doc" deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest needs: build if: success() steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 continue-on-error: true - name: Pages deployment status run: | if [ "${{ steps.deployment.outcome }}" == "failure" ]; then echo "::warning::GitHub Pages deployment failed. Please enable Pages in repository settings:" echo "::warning::1. Go to Settings > Pages" echo "::warning::2. Set Source to 'GitHub Actions'" echo "::warning::3. Re-run this workflow" else echo "Documentation deployed successfully!" fi xleak-0.2.6/.github/workflows/publish-aur.yml000064400000000000000000000100611046102023000173060ustar 00000000000000name: Publish to AUR on: release: types: [published] workflow_dispatch: inputs: tag: description: 'Release tag to publish (e.g., v0.2.5)' required: true type: string permissions: contents: read jobs: publish-aur: runs-on: ubuntu-22.04 if: ${{ !github.event.release.prerelease }} steps: - name: Determine release version id: get-version run: | if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then TAG="${{ inputs.tag }}" else TAG="${{ github.event.release.tag_name }}" fi VERSION="${TAG#v}" echo "version=$VERSION" >> "$GITHUB_OUTPUT" echo "tag=$TAG" >> "$GITHUB_OUTPUT" - name: Checkout xleak repository uses: actions/checkout@v4 with: path: xleak - name: Download release tarball and SHA256 run: | VERSION="${{ steps.get-version.outputs.version }}" TARBALL="xleak-x86_64-unknown-linux-gnu.tar.xz" SHA_FILE="${TARBALL}.sha256" cd xleak gh release download "v${VERSION}" \ --pattern "$SHA_FILE" SHA256=$(cat "$SHA_FILE" | cut -d ' ' -f 1) echo "sha256=$SHA256" >> $GITHUB_OUTPUT echo "tarball=$TARBALL" >> $GITHUB_OUTPUT env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} id: download - name: Generate PKGBUILD run: | VERSION="${{ steps.get-version.outputs.version }}" SHA256="${{ steps.download.outputs.sha256 }}" TARBALL="${{ steps.download.outputs.tarball }}" cat > PKGBUILD << 'EOF' # Maintainer: Brandon Greenwell pkgname=xleak-bin pkgver=VERSION_PLACEHOLDER pkgrel=1 pkgdesc="A fast terminal Excel viewer with interactive TUI, search, formulas, and export capabilities" url="https://github.com/bgreenwell/xleak" license=("MIT") arch=("x86_64") provides=("xleak") conflicts=("xleak") source=("https://github.com/bgreenwell/xleak/releases/download/v$pkgver/TARBALL_PLACEHOLDER") sha256sums=("SHA256_PLACEHOLDER") package() { cd "$srcdir/xleak-x86_64-unknown-linux-gnu" install -Dm755 xleak -t "$pkgdir/usr/bin" install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } EOF sed -i "s/VERSION_PLACEHOLDER/$VERSION/" PKGBUILD sed -i "s/TARBALL_PLACEHOLDER/$TARBALL/" PKGBUILD sed -i "s/SHA256_PLACEHOLDER/$SHA256/" PKGBUILD - name: Generate .SRCINFO uses: addnab/docker-run-action@v3 with: image: archlinux:latest options: -v ${{ github.workspace }}:/workspace run: | cd /workspace useradd -m builder chown -R builder:builder . su builder -c 'makepkg --printsrcinfo' > .SRCINFO - name: Fix permissions after Docker run: | sudo chown -R $USER:$USER ${{ github.workspace }} - name: Setup SSH for AUR uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.AUR_SSH_PRIVATE_KEY }} - name: Configure SSH for AUR run: | mkdir -p ~/.ssh ssh-keyscan -t rsa,ecdsa,ed25519 aur.archlinux.org >> ~/.ssh/known_hosts - name: Clone AUR repository run: | git clone ssh://aur@aur.archlinux.org/xleak-bin.git aur-repo - name: Update AUR repository run: | VERSION="${{ steps.get-version.outputs.version }}" cp PKGBUILD aur-repo/ cp .SRCINFO aur-repo/ cd aur-repo git config user.name "Brandon Greenwell" git config user.email "greenwell.brandon@gmail.com" git add PKGBUILD .SRCINFO if git diff --staged --quiet; then echo "No changes to commit" else git commit -m "Update to v${VERSION}" git push origin master fi xleak-0.2.6/.github/workflows/publish-scoop.yml000064400000000000000000000062551046102023000176540ustar 00000000000000name: Publish Scoop Manifest on: release: types: [published] workflow_dispatch: inputs: tag: description: 'Release tag to publish (e.g., v0.2.5)' required: true type: string permissions: contents: read jobs: publish-scoop: runs-on: ubuntu-22.04 if: ${{ !github.event.release.prerelease || github.event.repository.allow_prerelease }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_USER: "axo bot" GITHUB_EMAIL: "admin+bot@axo.dev" steps: - name: Determine release tag id: get-tag run: | if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then echo "tag=${{ inputs.tag }}" >> "$GITHUB_OUTPUT" else echo "tag=${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT" fi - name: Checkout Scoop bucket uses: actions/checkout@v4 with: repository: bgreenwell/scoop-bucket token: ${{ secrets.SCOOP_BUCKET_TOKEN }} path: scoop-bucket - name: Download release artifacts run: | TAG="${{ steps.get-tag.outputs.tag }}" VERSION="${TAG#v}" ZIP_FILE="xleak-x86_64-pc-windows-msvc.zip" SHA_FILE="${ZIP_FILE}.sha256" gh release download "$TAG" \ --repo bgreenwell/xleak \ --pattern "$ZIP_FILE" \ --pattern "$SHA_FILE" echo "VERSION=$VERSION" >> $GITHUB_ENV echo "ZIP_FILE=$ZIP_FILE" >> $GITHUB_ENV echo "SHA_FILE=$SHA_FILE" >> $GITHUB_ENV - name: Generate Scoop manifest run: | SHA256=$(cat "$SHA_FILE" | cut -d ' ' -f 1) DOWNLOAD_URL="https://github.com/bgreenwell/xleak/releases/download/v${VERSION}/${ZIP_FILE}" mkdir -p scoop-bucket/bucket jq -n \ --arg version "${VERSION}" \ --arg url "${DOWNLOAD_URL}" \ --arg hash "${SHA256}" \ '{ version: $version, description: "A fast terminal Excel viewer with interactive TUI, search, formulas, and export capabilities", homepage: "https://github.com/bgreenwell/xleak", license: "MIT", architecture: { "64bit": { url: $url, hash: $hash } }, bin: "xleak.exe", checkver: { github: "https://github.com/bgreenwell/xleak" }, autoupdate: { architecture: { "64bit": { url: "https://github.com/bgreenwell/xleak/releases/download/v$version/xleak-x86_64-pc-windows-msvc.zip" } } } }' > scoop-bucket/bucket/xleak.json - name: Commit and push manifest working-directory: scoop-bucket run: | git config user.name "${GITHUB_USER}" git config user.email "${GITHUB_EMAIL}" git add bucket/xleak.json if git diff --staged --quiet; then echo "No changes to commit" else git commit -m "xleak ${VERSION}" git push fi xleak-0.2.6/.github/workflows/publish-winget.yml000064400000000000000000000021711046102023000200170ustar 00000000000000name: Publish to WinGet on: release: types: [published] workflow_dispatch: inputs: tag: description: 'Release tag to publish (e.g., v0.2.5)' required: true type: string permissions: contents: read jobs: publish-winget: runs-on: ubuntu-latest if: ${{ !github.event.release.prerelease }} steps: - name: Determine release version id: get-version run: | if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then TAG="${{ inputs.tag }}" else TAG="${{ github.event.release.tag_name }}" fi VERSION="${TAG#v}" echo "version=$VERSION" >> "$GITHUB_OUTPUT" echo "tag=$TAG" >> "$GITHUB_OUTPUT" - name: Publish to WinGet with Komac uses: michidk/run-komac@v2 with: args: 'new --version ${{ steps.get-version.outputs.version }} --urls "https://github.com/bgreenwell/xleak/releases/download/${{ steps.get-version.outputs.tag }}/xleak-x86_64-pc-windows-msvc.msi" --submit bgreenwell.xleak' env: GITHUB_TOKEN: ${{ secrets.WINGET_TOKEN }} xleak-0.2.6/.github/workflows/release.yml000064400000000000000000000342351046102023000165040ustar 00000000000000# This file was autogenerated by dist: https://axodotdev.github.io/cargo-dist # # Copyright 2022-2024, axodotdev # SPDX-License-Identifier: MIT or Apache-2.0 # # CI that: # # * checks for a Git Tag that looks like a release # * builds artifacts with dist (archives, installers, hashes) # * uploads those artifacts to temporary workflow zip # * on success, uploads the artifacts to a GitHub Release # # Note that the GitHub Release will be created with a generated # title/body based on your changelogs. name: Release permissions: "contents": "write" # This task will run whenever you push a git tag that looks like a version # like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc. # Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where # PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION # must be a Cargo-style SemVer Version (must have at least major.minor.patch). # # If PACKAGE_NAME is specified, then the announcement will be for that # package (erroring out if it doesn't have the given version or isn't dist-able). # # If PACKAGE_NAME isn't specified, then the announcement will be for all # (dist-able) packages in the workspace with that version (this mode is # intended for workspaces with only one dist-able package, or with all dist-able # packages versioned/released in lockstep). # # If you push multiple tags at once, separate instances of this workflow will # spin up, creating an independent announcement for each one. However, GitHub # will hard limit this to 3 tags per commit, as it will assume more tags is a # mistake. # # If there's a prerelease-style suffix to the version, then the release(s) # will be marked as a prerelease. on: pull_request: push: tags: - '**[0-9]+.[0-9]+.[0-9]+*' jobs: # Run 'dist plan' (or host) to determine what tasks we need to do plan: runs-on: "ubuntu-22.04" outputs: val: ${{ steps.plan.outputs.manifest }} tag: ${{ !github.event.pull_request && github.ref_name || '' }} tag-flag: ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }} publishing: ${{ !github.event.pull_request }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 with: persist-credentials: false submodules: recursive - name: Install dist # we specify bash to get pipefail; it guards against the `curl` command # failing. otherwise `sh` won't catch that `curl` returned non-0 shell: bash run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.30.2/cargo-dist-installer.sh | sh" - name: Cache dist uses: actions/upload-artifact@v4 with: name: cargo-dist-cache path: ~/.cargo/bin/dist # sure would be cool if github gave us proper conditionals... # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible # functionality based on whether this is a pull_request, and whether it's from a fork. # (PRs run on the *source* but secrets are usually on the *target* -- that's *good* # but also really annoying to build CI around when it needs secrets to work right.) - id: plan run: | dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json echo "dist ran successfully" cat plan-dist-manifest.json echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT" - name: "Upload dist-manifest.json" uses: actions/upload-artifact@v4 with: name: artifacts-plan-dist-manifest path: plan-dist-manifest.json # Build and packages all the platform-specific things build-local-artifacts: name: build-local-artifacts (${{ join(matrix.targets, ', ') }}) # Let the initial task tell us to not run (currently very blunt) needs: - plan if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }} strategy: fail-fast: false # Target platforms/runners are computed by dist in create-release. # Each member of the matrix has the following arguments: # # - runner: the github runner # - dist-args: cli flags to pass to dist # - install-dist: expression to run to install dist on the runner # # Typically there will be: # - 1 "global" task that builds universal installers # - N "local" tasks that build each platform's binaries and platform-specific installers matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }} runs-on: ${{ matrix.runner }} container: ${{ matrix.container && matrix.container.image || null }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json steps: - name: enable windows longpaths run: | git config --global core.longpaths true - uses: actions/checkout@v4 with: persist-credentials: false submodules: recursive - name: Install Rust non-interactively if not already installed if: ${{ matrix.container }} run: | if ! command -v cargo > /dev/null 2>&1; then curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y echo "$HOME/.cargo/bin" >> $GITHUB_PATH fi - name: Install dist run: ${{ matrix.install_dist.run }} # Get the dist-manifest - name: Fetch local artifacts uses: actions/download-artifact@v4 with: pattern: artifacts-* path: target/distrib/ merge-multiple: true - name: Install dependencies run: | ${{ matrix.packages_install }} - name: Build artifacts run: | # Actually do builds and make zips and whatnot dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json echo "dist ran successfully" - id: cargo-dist name: Post-build # We force bash here just because github makes it really hard to get values up # to "real" actions without writing to env-vars, and writing to env-vars has # inconsistent syntax between shell and powershell. shell: bash run: | # Parse out what we just built and upload it to scratch storage echo "paths<> "$GITHUB_OUTPUT" dist print-upload-files-from-manifest --manifest dist-manifest.json >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" cp dist-manifest.json "$BUILD_MANIFEST_NAME" - name: "Upload artifacts" uses: actions/upload-artifact@v4 with: name: artifacts-build-local-${{ join(matrix.targets, '_') }} path: | ${{ steps.cargo-dist.outputs.paths }} ${{ env.BUILD_MANIFEST_NAME }} # Build and package all the platform-agnostic(ish) things build-global-artifacts: needs: - plan - build-local-artifacts runs-on: "ubuntu-22.04" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json steps: - uses: actions/checkout@v4 with: persist-credentials: false submodules: recursive - name: Install cached dist uses: actions/download-artifact@v4 with: name: cargo-dist-cache path: ~/.cargo/bin/ - run: chmod +x ~/.cargo/bin/dist # Get all the local artifacts for the global tasks to use (for e.g. checksums) - name: Fetch local artifacts uses: actions/download-artifact@v4 with: pattern: artifacts-* path: target/distrib/ merge-multiple: true - id: cargo-dist shell: bash run: | dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json echo "dist ran successfully" # Parse out what we just built and upload it to scratch storage echo "paths<> "$GITHUB_OUTPUT" jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" cp dist-manifest.json "$BUILD_MANIFEST_NAME" - name: "Upload artifacts" uses: actions/upload-artifact@v4 with: name: artifacts-build-global path: | ${{ steps.cargo-dist.outputs.paths }} ${{ env.BUILD_MANIFEST_NAME }} # Determines if we should publish/announce host: needs: - plan - build-local-artifacts - build-global-artifacts # Only run if we're "publishing", and only if plan, local and global didn't fail (skipped is fine) if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} runs-on: "ubuntu-22.04" outputs: val: ${{ steps.host.outputs.manifest }} steps: - uses: actions/checkout@v4 with: persist-credentials: false submodules: recursive - name: Install cached dist uses: actions/download-artifact@v4 with: name: cargo-dist-cache path: ~/.cargo/bin/ - run: chmod +x ~/.cargo/bin/dist # Fetch artifacts from scratch-storage - name: Fetch artifacts uses: actions/download-artifact@v4 with: pattern: artifacts-* path: target/distrib/ merge-multiple: true - id: host shell: bash run: | dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json echo "artifacts uploaded and released successfully" cat dist-manifest.json echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT" - name: "Upload dist-manifest.json" uses: actions/upload-artifact@v4 with: # Overwrite the previous copy name: artifacts-dist-manifest path: dist-manifest.json # Create a GitHub Release while uploading all files to it - name: "Download GitHub Artifacts" uses: actions/download-artifact@v4 with: pattern: artifacts-* path: artifacts merge-multiple: true - name: Cleanup run: | # Remove the granular manifests rm -f artifacts/*-dist-manifest.json - name: Create GitHub Release env: PRERELEASE_FLAG: "${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease && '--prerelease' || '' }}" ANNOUNCEMENT_TITLE: "${{ fromJson(steps.host.outputs.manifest).announcement_title }}" ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}" RELEASE_COMMIT: "${{ github.sha }}" run: | # Write and read notes from a file to avoid quoting breaking things echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/* publish-homebrew-formula: needs: - plan - host runs-on: "ubuntu-22.04" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PLAN: ${{ needs.plan.outputs.val }} GITHUB_USER: "axo bot" GITHUB_EMAIL: "admin+bot@axo.dev" if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }} steps: - uses: actions/checkout@v4 with: persist-credentials: true repository: "bgreenwell/homebrew-tap" token: ${{ secrets.HOMEBREW_TAP_TOKEN }} # So we have access to the formula - name: Fetch homebrew formulae uses: actions/download-artifact@v4 with: pattern: artifacts-* path: Formula/ merge-multiple: true # This is extra complex because you can make your Formula name not match your app name # so we need to find releases with a *.rb file, and publish with that filename. - name: Commit formula files run: | git config --global user.name "${GITHUB_USER}" git config --global user.email "${GITHUB_EMAIL}" for release in $(echo "$PLAN" | jq --compact-output '.releases[] | select([.artifacts[] | endswith(".rb")] | any)'); do filename=$(echo "$release" | jq '.artifacts[] | select(endswith(".rb"))' --raw-output) name=$(echo "$filename" | sed "s/\.rb$//") version=$(echo "$release" | jq .app_version --raw-output) export PATH="/home/linuxbrew/.linuxbrew/bin:$PATH" brew update # We avoid reformatting user-provided data such as the app description and homepage. brew style --except-cops FormulaAudit/Homepage,FormulaAudit/Desc,FormulaAuditStrict --fix "Formula/${filename}" || true git add "Formula/${filename}" git commit -m "${name} ${version}" done git push announce: needs: - plan - host - publish-homebrew-formula # use "always() && ..." to allow us to wait for all publish jobs while # still allowing individual publish jobs to skip themselves (for prereleases). # "host" however must run to completion, no skipping allowed! if: ${{ always() && needs.host.result == 'success' && (needs.publish-homebrew-formula.result == 'skipped' || needs.publish-homebrew-formula.result == 'success') }} runs-on: "ubuntu-22.04" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 with: persist-credentials: false submodules: recursive xleak-0.2.6/.gitignore000064400000000000000000000004071046102023000127260ustar 00000000000000# Rust /target **/*.rs.bk *.pdb # Test/generated files *.xlsx *.xls *.xlsm *.xlsb *.ods *.csv tests/fixtures/deprecated/ # macOS .DS_Store # Windows Thumbs.db # IDEs .vscode/ .idea/ *.swp *.swo *~ # Local CLAUDE.md .planning/ scoop-bucket/ .winget-manifest/ xleak-0.2.6/AGENTS.md000064400000000000000000000053661046102023000122520ustar 00000000000000# xleak Excel terminal viewer written in Rust with TUI, search, formulas, and export capabilities. **Stack:** Rust 2024, calamine, clap, ratatui + crossterm, anyhow, comfy-table, arboard, chrono **Formats:** `.xlsx`, `.xls`, `.xlsm`, `.xlsb`, `.ods` **Key files:** `main.rs`, `workbook.rs`, `tui.rs`, `display.rs` in `src/` ## Commands ```bash cargo fmt && cargo clippy && cargo build --release cargo run -- tests/fixtures/test_comprehensive.xlsx -i cargo run -- tests/fixtures/test_comprehensive.xlsx --sheet Formulas --export csv cd tests/fixtures && uv run python generate_all_tests.py # regenerate fixtures cargo install --path . # install globally ``` ## Architecture - `main.rs` — CLI parsing, orchestration - `workbook.rs` — Excel I/O, data extraction (calamine) - `tui.rs` — Interactive TUI state and rendering (ratatui) - `display.rs` — Non-interactive output (terminal, CSV, JSON, text) via comfy-table ## Code Style - Fix all `cargo clippy` warnings; run `cargo fmt` before committing - Error handling: `anyhow::Result` with `.context()` for messages - Comments: only when "why" is non-obvious; doc comments for public APIs - `CellValue` enum: exhaustive pattern matching required - Use `--release` for performance testing; use `-n` to limit rows on large files ## Common Patterns - **New CLI option:** field on `Cli` in `main.rs`, clap macros, handle in `main()` - **New export format:** `export_()` in `display.rs`, match arm in `main()` - **Fix display:** `display_table()` in `display.rs`, test with DataTypes sheet - **New cell type:** `CellValue` enum in `workbook.rs`, impl `Display`, update `datatype_to_cellvalue()` ## Development Conventional commits: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`. Feature branches → PR to `main`. Direct commits: releases, hotfixes, minor docs only. **PR checklist:** - [ ] Compiles, no clippy warnings, `cargo fmt` clean - [ ] Tested with fixtures (multiple formats: .xlsx, .xls, .ods) - [ ] README.md updated (user-facing) or AGENTS.md (architecture changes) - [ ] Concise entry added to CHANGELOG.md under `[Unreleased]` **Changelog style:** One line per item, no filler words. Bad: `"Formula cells are now detected and a warning is shown to inform users that..."`. Good: `"Warn when formula cells are blank due to uncached xlsx values"`. ## Release All distribution channels automated via cargo-dist. See [RELEASE_CHECKLIST.md](./RELEASE_CHECKLIST.md). - `.github/workflows/release.yml` — GitHub Releases, Homebrew, crates.io - `.github/workflows/publish-scoop.yml` — Scoop - `.github/workflows/publish-aur.yml` — AUR - `.github/workflows/publish-winget.yml` — WinGet Check `.planning/` (untracked) for planning docs before starting large features. xleak-0.2.6/CHANGELOG.md000064400000000000000000000134171046102023000125540ustar 00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.2.6] - 2026-05-24 ### Added - NetBSD installation via `pkgin install xleak` (thanks [@0323pin](https://github.com/0323pin)! [#40](https://github.com/bgreenwell/xleak/pull/40)) - Automated AUR, WinGet, and Scoop publishing via GitHub Actions - Warn when formula cells are blank due to uncached xlsx values (`NOTE:` before table, suggests `--formulas` or re-saving in Excel/LibreOffice) ### Changed - Upgrade `calamine` 0.26 → 0.34 and `dirs` 5.0 → 6.0 for Debian packaging compatibility (thanks [@nadzyah](https://github.com/nadzyah)! [#43](https://github.com/bgreenwell/xleak/pull/43)) - Nix flake version now read dynamically from Cargo.toml; homepage URL fixed - Replaced `prettytable-rs` with `comfy-table` for non-interactive output, enabling correct multiline cell wrapping with `--wrap` ([#44](https://github.com/bgreenwell/xleak/pull/44)) - Non-interactive table output: green bold headers, red errors, green formula-mode cells ### Fixed - CSV and text export wrote large numbers with thousands separators (e.g. `"18,441,600,422"` instead of `18441600422`), making them unparseable as numbers ([#34](https://github.com/bgreenwell/xleak/issues/34)) - AUR `xleak-bin` PKGBUILD: `package()` missing `cd "$srcdir/..."` caused install failures - `?` help keybinding not firing on macOS — macOS terminals omit SHIFT for symbol chars - Formulas fixture: `Formula` column now shows expression text; `Result` holds the live formula ## [0.2.5] - 2025-12-04 ### Fixed - Help popup not appearing on Windows - `?` key now correctly expects SHIFT modifier (thanks [@aarif](https://github.com/aarif)! [#27](https://github.com/bgreenwell/xleak/issues/27)) - VIM mode `$` keybinding now correctly expects SHIFT modifier on Windows ### Added - Automated crates.io publishing via custom GitHub Action for all future releases ## [0.2.4] - 2025-12-04 ### Fixed - Time precision issue causing seconds to be off by 1 due to floating point truncation (thanks [@Xuquansheng](https://github.com/Xuquansheng)! [#25](https://github.com/bgreenwell/xleak/issues/25)) ### Changed - Enhanced installation documentation with Scoop (Windows), AUR (Arch Linux), shell/PowerShell installers, and MSI details - Condensed AGENTS.md from 460 to 117 lines for better maintainability ## [0.2.3] - 2025-12-03 ### Fixed - Date display off by one day - corrected Excel epoch from December 30 to December 31, 1899 (thanks [@Xuquansheng](https://github.com/Xuquansheng)! [#25](https://github.com/bgreenwell/xleak/issues/25)) ### Changed - Consolidated test fixtures from 6 files to 3 standardized files (test_comprehensive.xlsx, test_large.xlsx, test_tables.xlsx) ### Added - Release checklist and GitHub issue templates (Bug Report, Feature Request, Release) ## [0.2.0] - 2025-12-03 ### Changed - Migrated to cargo-dist for automated multi-platform releases - Release process now supports shell/PowerShell installers and Homebrew tap updates ## [0.1.1] - 2025-12-03 ### Added - Configuration file support via TOML at `~/.config/xleak/config.toml` (thanks [@izelnakri](https://github.com/izelnakri) for the suggestion! [#1](https://github.com/bgreenwell/xleak/issues/1)) - Six built-in color themes: Default, Dracula, Solarized Dark/Light, GitHub Dark, Nord - VIM keybinding profile with hjkl navigation, gg/G jumps, and yank operations - Custom keybinding overrides for 23 different actions - `--config` flag to specify custom configuration file location - Excel Table support (.xlsx only) with `--list-tables` and `--table` flags (thanks [@jgranduel](https://github.com/jgranduel)! [#18](https://github.com/bgreenwell/xleak/issues/18), [#21](https://github.com/bgreenwell/xleak/pull/21)) - Horizontal scrolling mode with auto-sized columns via `-H` flag (thanks [@YannickHerrero](https://github.com/YannickHerrero)! [#13](https://github.com/bgreenwell/xleak/pull/13)) - Scrollable cell detail popup for viewing multi-line cells (thanks [@ket000](https://github.com/ket000)! [#16](https://github.com/bgreenwell/xleak/issues/16)) - MIT License (thanks [@hardBSDk](https://github.com/hardBSDk) and [@hwpplayer1](https://github.com/hwpplayer1)! [#6](https://github.com/bgreenwell/xleak/issues/6)) ### Changed - Help screen now includes configuration information ### Fixed - UTF-8 character boundary panic with multi-byte characters like German umlauts (thanks [@steffenbusch](https://github.com/steffenbusch)! [#11](https://github.com/bgreenwell/xleak/issues/11), [#15](https://github.com/bgreenwell/xleak/pull/15)) - VIM key bindings for `Shift+G` and `$` not working properly (thanks [@hungltth](https://github.com/hungltth)! [#20](https://github.com/bgreenwell/xleak/pull/20)) - Nix installation from GitHub by adding missing `flake.lock` (thanks [@senorsmile](https://github.com/senorsmile)! [#17](https://github.com/bgreenwell/xleak/issues/17)) - Double keypress issue on Windows by filtering key release events (thanks [@clindholm](https://github.com/clindholm)! [#2](https://github.com/bgreenwell/xleak/issues/2), [#4](https://github.com/bgreenwell/xleak/pull/4)) - Needless borrow in table lookup (clippy warning) ## [0.1.0] - 2025-01-08 ### Added - Initial release of xleak - Interactive TUI mode with ratatui - Support for multiple Excel formats (.xlsx, .xls, .xlsm, .xlsb, .ods) - Search functionality across sheets - Formula display mode - Export to CSV, JSON, and text formats - Lazy loading for large files - Sheet selection - Row limit option - Cross-platform support (Linux, macOS, Windows) [Unreleased]: https://github.com/greenwbm/xleak/compare/v0.1.0...HEAD [0.1.0]: https://github.com/greenwbm/xleak/releases/tag/v0.1.0 xleak-0.2.6/Cargo.lock0000644000001312640000000000100101270ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "adler2" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[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 = "anstream" version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", "once_cell_polyfill", "windows-sys 0.60.2", ] [[package]] name = "anyhow" version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arboard" version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" dependencies = [ "clipboard-win", "image", "log", "objc2", "objc2-app-kit", "objc2-core-foundation", "objc2-core-graphics", "objc2-foundation", "parking_lot", "percent-encoding", "windows-sys 0.60.2", "x11rb", ] [[package]] name = "atoi_simd" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ad17c7c205c2c28b527b9845eeb91cf1b4d008b438f98ce0e628227a822758e" dependencies = [ "debug_unsafe", ] [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bumpalo" version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "byteorder-lite" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "calamine" version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20ae05a4e39297eecf9a994210d27501318c37a9318201f8e11050add82bb6f0" dependencies = [ "atoi_simd", "byteorder", "codepage", "encoding_rs", "fast-float2", "log", "quick-xml", "serde", "zip", ] [[package]] name = "cassowary" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "castaway" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" dependencies = [ "rustversion", ] [[package]] name = "cc" version = "1.2.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" dependencies = [ "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-link", ] [[package]] name = "clap" version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", ] [[package]] name = "clap_builder" version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", ] [[package]] name = "clap_derive" version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", "syn", ] [[package]] name = "clap_lex" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clipboard-win" version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" dependencies = [ "error-code", ] [[package]] name = "codepage" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48f68d061bc2828ae826206326e61251aca94c1e4a5305cf52d9138639c918b4" dependencies = [ "encoding_rs", ] [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "comfy-table" version = "7.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "958c5d6ecf1f214b4c2bbbbf6ab9523a864bd136dcf71a7e8904799acfe1ad47" dependencies = [ "crossterm 0.29.0", "unicode-segmentation", "unicode-width 0.2.0", ] [[package]] name = "compact_str" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" dependencies = [ "castaway", "cfg-if", "itoa", "rustversion", "ryu", "static_assertions", ] [[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.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossterm" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" dependencies = [ "bitflags", "crossterm_winapi", "mio", "parking_lot", "rustix 0.38.44", "signal-hook", "signal-hook-mio", "winapi", ] [[package]] name = "crossterm" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ "bitflags", "crossterm_winapi", "document-features", "parking_lot", "rustix 1.1.2", "winapi", ] [[package]] name = "crossterm_winapi" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ "winapi", ] [[package]] name = "crunchy" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "darling" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ "darling_core", "darling_macro", ] [[package]] name = "darling_core" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", "syn", ] [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", "syn", ] [[package]] name = "debug_unsafe" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7eed2c4702fa172d1ce21078faa7c5203e69f5394d48cc436d25928394a867a2" [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", "redox_users", "windows-sys 0.61.2", ] [[package]] name = "dispatch2" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ "bitflags", "objc2", ] [[package]] name = "document-features" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[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 = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", "windows-sys 0.61.2", ] [[package]] name = "error-code" version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" [[package]] name = "fast-float2" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" [[package]] name = "fax" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" dependencies = [ "fax_derive", ] [[package]] name = "fax_derive" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "fdeflate" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] [[package]] name = "find-msvc-tools" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "flate2" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "libz-rs-sys", "miniz_oxide", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "gethostname" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix 1.1.2", "windows-link", ] [[package]] name = "getrandom" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", "wasi", ] [[package]] name = "half" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", "zerocopy", ] [[package]] name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", "foldhash", ] [[package]] name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "iana-time-zone" version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "log", "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 = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "image" version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", "moxcms", "num-traits", "png", "tiff", ] [[package]] name = "indexmap" version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", ] [[package]] name = "indoc" version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" dependencies = [ "rustversion", ] [[package]] name = "instability" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435d80800b936787d62688c927b6490e887c7ef5ff9ce922c6c6050fca75eb9a" dependencies = [ "darling", "indoc", "proc-macro2", "quote", "syn", ] [[package]] name = "is_terminal_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "libc" version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libredox" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags", "libc", ] [[package]] name = "libz-rs-sys" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c10501e7805cee23da17c7790e59df2870c0d4043ec6d03f67d31e2b53e77415" dependencies = [ "zlib-rs", ] [[package]] name = "linux-raw-sys" version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litrs" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "lock_api" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ "scopeguard", ] [[package]] name = "log" version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ "hashbrown 0.15.5", ] [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", ] [[package]] name = "mio" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", "log", "wasi", "windows-sys 0.61.2", ] [[package]] name = "moxcms" version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" dependencies = [ "num-traits", "pxfm", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "objc2" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ "objc2-encode", ] [[package]] name = "objc2-app-kit" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags", "objc2", "objc2-core-graphics", "objc2-foundation", ] [[package]] name = "objc2-core-foundation" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags", "dispatch2", "objc2", ] [[package]] name = "objc2-core-graphics" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ "bitflags", "dispatch2", "objc2", "objc2-core-foundation", "objc2-io-surface", ] [[package]] name = "objc2-encode" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags", "objc2", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ "bitflags", "objc2", "objc2-core-foundation", ] [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "parking_lot" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", "windows-link", ] [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "png" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" dependencies = [ "bitflags", "crc32fast", "fdeflate", "flate2", "miniz_oxide", ] [[package]] name = "proc-macro2" version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] [[package]] name = "pxfm" version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" dependencies = [ "num-traits", ] [[package]] name = "quick-error" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "encoding_rs", "memchr", ] [[package]] name = "quote" version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] [[package]] name = "ratatui" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ "bitflags", "cassowary", "compact_str", "crossterm 0.28.1", "indoc", "instability", "itertools", "lru", "paste", "strum", "unicode-segmentation", "unicode-truncate", "unicode-width 0.2.0", ] [[package]] name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] [[package]] name = "redox_users" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom", "libredox", "thiserror", ] [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys 0.4.15", "windows-sys 0.59.0", ] [[package]] name = "rustix" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys 0.11.0", "windows-sys 0.61.2", ] [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", ] [[package]] name = "serde_core" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", "serde_core", ] [[package]] name = "serde_spanned" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" dependencies = [ "libc", "signal-hook-registry", ] [[package]] name = "signal-hook-mio" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" dependencies = [ "libc", "mio", "signal-hook", ] [[package]] name = "signal-hook-registry" version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] [[package]] name = "simd-adler32" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", "syn", ] [[package]] name = "syn" version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "thiserror" version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tiff" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ "fax", "flate2", "half", "quick-error", "weezl", "zune-jpeg", ] [[package]] name = "toml" version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", "toml_edit", ] [[package]] name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", "toml_write", "winnow", ] [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "typed-path" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "unicode-ident" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-truncate" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" dependencies = [ "itertools", "unicode-segmentation", "unicode-width 0.1.14", ] [[package]] name = "unicode-width" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unicode-width" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ "bumpalo", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "weezl" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[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-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.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-implement" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "windows-interface" version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ "windows-targets 0.53.5", ] [[package]] name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows-targets" version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", "windows_i686_gnullvm 0.53.1", "windows_i686_msvc 0.53.1", "windows_x86_64_gnu 0.53.1", "windows_x86_64_gnullvm 0.53.1", "windows_x86_64_msvc 0.53.1", ] [[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_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[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_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[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_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[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_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[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_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] name = "x11rb" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ "gethostname", "rustix 1.1.2", "x11rb-protocol", ] [[package]] name = "x11rb-protocol" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" [[package]] name = "xleak" version = "0.2.6" dependencies = [ "anyhow", "arboard", "calamine", "chrono", "clap", "comfy-table", "crossterm 0.28.1", "dirs", "ratatui", "serde", "serde_json", "toml", ] [[package]] name = "zerocopy" version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "zip" version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0" dependencies = [ "crc32fast", "flate2", "indexmap", "memchr", "typed-path", "zopfli", ] [[package]] name = "zlib-rs" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3" [[package]] name = "zopfli" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" dependencies = [ "bumpalo", "crc32fast", "log", "simd-adler32", ] [[package]] name = "zune-core" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-jpeg" version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] xleak-0.2.6/Cargo.toml0000644000000043620000000000100101500ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2024" name = "xleak" version = "0.2.6" authors = ["Brandon Greenwell "] build = false autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "A fast terminal Excel viewer with interactive TUI, search, formulas, and export capabilities" homepage = "https://github.com/bgreenwell/xleak" readme = "README.md" keywords = [ "excel", "xlsx", "terminal", "viewer", "tui", ] categories = [ "command-line-utilities", "visualization", ] license = "MIT" repository = "https://github.com/bgreenwell/xleak" [package.metadata.release] pre-release-commit-message = "chore: release {{version}}" tag-message = "Release {{version}}" [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = '## \[Unreleased\]' replace = """ ## [Unreleased] ## [{{version}}] - {{date}}""" exactly = 1 [package.metadata.aur] depends = [] makedepends = ["cargo"] [package.metadata.wix] upgrade-guid = "7336173b-1ee3-408e-af34-d930507b8941" path-guid = "67e1bb49-876f-4934-85e4-8faad4ada16f" license = false eula = false [[bin]] name = "xleak" path = "src/main.rs" [dependencies.anyhow] version = "1.0" [dependencies.arboard] version = "3.4" [dependencies.calamine] version = "0.34" [dependencies.chrono] version = "0.4" [dependencies.clap] version = "4.5" features = ["derive"] [dependencies.comfy-table] version = "7.1" [dependencies.crossterm] version = "0.28" [dependencies.dirs] version = "6" [dependencies.ratatui] version = "0.29" [dependencies.serde] version = "1.0" features = ["derive"] [dependencies.serde_json] version = "1.0" [dependencies.toml] version = "0.8" [profile.dist] lto = "thin" inherits = "release" [profile.release] opt-level = 3 lto = true codegen-units = 1 xleak-0.2.6/Cargo.toml.orig000064400000000000000000000031311046102023000136220ustar 00000000000000[package] name = "xleak" version = "0.2.6" edition = "2024" authors = ["Brandon Greenwell "] description = "A fast terminal Excel viewer with interactive TUI, search, formulas, and export capabilities" license = "MIT" repository = "https://github.com/bgreenwell/xleak" homepage = "https://github.com/bgreenwell/xleak" keywords = ["excel", "xlsx", "terminal", "viewer", "tui"] categories = ["command-line-utilities", "visualization"] readme = "README.md" [dependencies] calamine = "0.34" clap = { version = "4.5", features = ["derive"] } anyhow = "1.0" comfy-table = "7.1" # TUI dependencies ratatui = "0.29" crossterm = "0.28" # Date/time handling chrono = "0.4" # Clipboard support arboard = "3.4" # Configuration file support serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" toml = "0.8" dirs = "6" [profile.release] opt-level = 3 lto = true codegen-units = 1 # The profile that 'dist' will build with [profile.dist] inherits = "release" lto = "thin" # cargo-release configuration [package.metadata.release] pre-release-replacements = [ { file = "CHANGELOG.md", search = "## \\[Unreleased\\]", replace = "## [Unreleased]\n\n## [{{version}}] - {{date}}", exactly = 1 }, ] pre-release-commit-message = "chore: release {{version}}" tag-message = "Release {{version}}" # cargo-aur configuration for Arch Linux [package.metadata.aur] depends = [] makedepends = ["cargo"] # WiX configuration for MSI installer [package.metadata.wix] upgrade-guid = "7336173b-1ee3-408e-af34-d930507b8941" path-guid = "67e1bb49-876f-4934-85e4-8faad4ada16f" license = false eula = false xleak-0.2.6/LICENSE000064400000000000000000000020561046102023000117450ustar 00000000000000MIT License Copyright (c) 2025 Ben Greenwell Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. xleak-0.2.6/README.md000064400000000000000000000345441046102023000122260ustar 00000000000000# xleak [![CI](https://img.shields.io/github/actions/workflow/status/bgreenwell/xleak/ci.yml?style=for-the-badge)](https://github.com/bgreenwell/xleak/actions/workflows/ci.yml) [![Crates.io](https://img.shields.io/crates/v/xleak.svg?style=for-the-badge&color=%23107C41)](https://crates.io/crates/xleak) [![Downloads](https://img.shields.io/crates/d/xleak?style=for-the-badge&color=%23107C41)](https://crates.io/crates/xleak) [![License: MIT](https://img.shields.io/badge/License-MIT-%232196F3.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) [![Rust](https://img.shields.io/badge/rust-1.70%2B-%23D34516.svg?style=for-the-badge&logo=rust&logoColor=white)](https://www.rust-lang.org/) [![Easy Install](https://img.shields.io/badge/Easy%20Install-Homebrew%20%7C%20Scoop-%23FBB040?style=for-the-badge)](#installation) [![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20macOS%20%7C%20Windows-blue?style=for-the-badge)](https://github.com/bgreenwell/xleak/releases/latest) > Expose Excel files in your terminal - no Microsoft Excel required! Inspired by [doxx](https://github.com/bgreenwell/doxx), `xleak` brings Excel spreadsheets to your command line with beautiful rendering, powerful export capabilities, and a feature-rich interactive TUI. ![xleak demo](assets/demo.gif) ## Features ### Core Functionality - **Beautiful terminal rendering** with formatted tables - **Interactive TUI mode** - full keyboard navigation with ratatui - **Smart data type handling** - numbers right-aligned, text left-aligned, booleans centered - **Multi-sheet support** - seamlessly navigate between sheets (Tab/Shift+Tab) - **Excel Table support** - list and extract named tables (.xlsx only) - **Multiple export formats** - CSV, JSON, plain text - **Blazing fast** - powered by `calamine`, the fastest Excel parser in Rust - **Multiple file formats** - supports `.xlsx`, `.xls`, `.xlsm`, `.xlsb`, `.ods` ### Interactive TUI Features - **Full-text search** - search across all cells with `/`, navigate with `n`/`N` - **Clipboard support** - copy cells (`c`) or entire rows (`C`) to clipboard - **Formula display** - view Excel formulas in cell detail view (Enter key) - **Jump to row/column** - press `Ctrl+G` to jump to any cell (e.g., `A100`, `500`, `10,5`) - **Large file optimization** - lazy loading for files with 1000+ rows - **Progress indicators** - real-time feedback for long operations - **Visual cell highlighting** - current row, column, and cell clearly marked ## Installation ### Package Managers **macOS / Linux (Homebrew):** ```bash brew install bgreenwell/tap/xleak ``` **Windows (Scoop):** ```powershell scoop bucket add bgreenwell https://github.com/bgreenwell/scoop-bucket scoop install xleak ``` **Windows (WinGet):** _(Coming soon - pending initial PR merge)_ ```powershell winget install bgreenwell.xleak ``` **Arch Linux (AUR):** ```bash # Using yay yay -S xleak-bin # Or using paru paru -S xleak-bin ``` **NetBSD:** ```bash pkgin install xleak ``` **Cargo (all platforms):** ```bash cargo install xleak ``` **Nix:** ```bash # Run directly nix run github:bgreenwell/xleak -- file.xlsx # Install with flakes nix profile install github:bgreenwell/xleak ``` ### Quick Install Scripts **macOS / Linux:** ```bash curl --proto '=https' --tlsv1.2 -LsSf https://github.com/bgreenwell/xleak/releases/latest/download/xleak-installer.sh | sh ``` **Windows (PowerShell):** ```powershell irm https://github.com/bgreenwell/xleak/releases/latest/download/xleak-installer.ps1 | iex ``` ### Pre-built Binaries Download platform-specific binaries from the [latest release](https://github.com/bgreenwell/xleak/releases/latest): - **macOS**: Universal binary (Apple Silicon + Intel) - **Linux**: x86_64 (glibc and musl) - **Windows**: x86_64 MSI installer or standalone `.exe` ### Build from Source ```bash git clone https://github.com/bgreenwell/xleak.git cd xleak cargo install --path . ``` **Requirements:** Rust 1.70 or later ## Usage ### Interactive TUI Mode (Recommended) ```bash # Launch interactive viewer xleak quarterly-report.xlsx -i # Start on a specific sheet xleak report.xlsx --sheet "Q3 Results" -i # View formulas by default xleak data.xlsx -i --formulas # Enable horizontal scrolling for wide files (auto-size columns) xleak wide-data.xlsx -i -H ``` **TUI Keyboard Shortcuts:** - `↑ ↓ ← →` - Navigate cells - `Enter` - View cell details (including formulas) - `/` - Search across all cells - `n` / `N` - Jump to next/previous search result - `Ctrl+G` - Jump to specific row/cell (e.g., `100`, `A50`, `10,5`) - `c` - Copy current cell to clipboard - `C` - Copy entire row to clipboard - `Tab` / `Shift+Tab` - Switch between sheets - `?` - Show help - `q` - Quit ### Non-Interactive Mode #### View a spreadsheet ```bash xleak quarterly-report.xlsx ``` #### View a specific sheet ```bash # By name xleak report.xlsx --sheet "Q3 Results" # By index (1-based) xleak report.xlsx --sheet 2 ``` #### Limit displayed rows ```bash # Show only first 20 rows xleak large-file.xlsx -n 20 # Show all rows xleak file.xlsx -n 0 ``` #### Export data ```bash # Export to CSV xleak data.xlsx --export csv > output.csv # Export to JSON xleak data.xlsx --export json > output.json # Export as plain text (tab-separated) xleak data.xlsx --export text > output.txt ``` #### Work with Excel Tables (.xlsx only) ```bash # List all tables in a workbook xleak workbook.xlsx --list-tables # Extract a specific table as JSON (default) xleak workbook.xlsx --table "Sales" # Extract table as CSV xleak workbook.xlsx --table "Sales" --export csv > sales.csv # Extract table as plain text xleak workbook.xlsx --table "Employees" --export text ``` #### Combine options ```bash # Export specific sheet as CSV xleak workbook.xlsx --sheet "Sales" --export csv > sales.csv ``` ## Examples ```bash # Launch interactive viewer xleak quarterly-report.xlsx -i # Quick preview in non-interactive mode xleak quarterly-report.xlsx # See specific sheet with limited rows xleak financial-data.xlsx --sheet "Summary" -n 10 # Interactive mode with formulas visible xleak data.xlsx -i --formulas # Export all data from a sheet xleak survey-results.xlsx --sheet "Responses" --export csv -n 0 ``` ## Configuration xleak supports configuration via a TOML file for persistent settings like default theme and keybindings. ### Config File Location **Default:** `~/.config/xleak/config.toml` (or `$XDG_CONFIG_HOME/xleak/config.toml`) **Platform-specific fallback locations:** - **macOS:** `~/Library/Application Support/xleak/config.toml` - **Linux:** `~/.config/xleak/config.toml` (same as XDG) - **Windows:** `%APPDATA%\xleak\config.toml` **Custom:** Use `--config` flag to specify a different location: ```bash xleak --config /path/to/config.toml file.xlsx -i ``` ### Quick Start 1. **Copy the example:** ```bash mkdir -p ~/.config/xleak cp config.toml.example ~/.config/xleak/config.toml ``` 2. **Or create a minimal config:** ```bash mkdir -p ~/.config/xleak cat > ~/.config/xleak/config.toml << 'EOF' [theme] default = "Dracula" [ui] max_rows = 50 column_width = 30 [keybindings] profile = "vim" EOF ``` 3. **Test your config:** ```bash xleak file.xlsx -i ``` ### Configuration Options #### Theme Settings ```toml [theme] # Default theme to use on startup default = "Dracula" ``` **Available themes:** - `"Default"` - Clean light theme with subtle colors - `"Dracula"` - Popular dark theme with purple accents - `"Solarized Dark"` - Precision colors for machines and people - `"Solarized Light"` - Light variant of Solarized - `"GitHub Dark"` - GitHub's dark color scheme - `"Nord"` - Arctic, north-bluish color palette Press `t` in interactive mode to cycle through themes at runtime. #### UI Settings ```toml [ui] # Default maximum rows to display in non-interactive mode (0 = all) max_rows = 50 # Default maximum column width in characters column_width = 30 ``` **Notes:** - `max_rows` only affects non-interactive display mode (`xleak file.xlsx`) - Interactive TUI mode (`-i`) always shows all rows with lazy loading for large files - `column_width` applies to both modes and can be overridden with `-w` flag #### Keybindings xleak supports two built-in profiles plus custom keybindings: ```toml [keybindings] # Profile: "default" or "vim" profile = "default" # Optional: override individual keys [keybindings.custom] quit = "x" search = "?" copy_cell = "y" ``` ### Keybinding Profiles #### Default Profile Standard keybindings for terminal applications: | Action | Key | Description | |--------|-----|-------------| | **Navigation** | | | | Move up/down/left/right | `↑` `↓` `←` `→` | Navigate cells | | Page up/down | `PgUp` `PgDn` | Scroll by page | | Jump to top/bottom | `Ctrl+Home` `Ctrl+End` | Jump to first/last row | | Jump to row start/end | `Home` `End` | Jump to first/last column | | **Actions** | | | | View cell details | `Enter` | Show formula and full value | | Jump to cell | `Ctrl+G` | Jump to specific row/cell | | Search | `/` | Full-text search | | Next/prev match | `n` `N` | Navigate search results | | Copy cell | `c` | Copy cell to clipboard | | Copy row | `C` (Shift+c) | Copy entire row | | **Sheets** | | | | Next/prev sheet | `Tab` `Shift+Tab` | Switch between sheets | | **General** | | | | Toggle theme | `t` | Cycle through themes | | Show help | `?` | Display help screen | | Quit | `q` | Exit application | #### VIM Profile VIM-style keybindings for efficient keyboard navigation: | Action | Key | Default Key | Description | |--------|-----|-------------|-------------| | **VIM Navigation** | | | | | Move left/down/up/right | `h` `j` `k` `l` | ← ↓ ↑ → | VIM-style movement | | Page up/down | `Ctrl+u` `Ctrl+d` | PgUp PgDn | Half-page scrolling | | Jump to top | `gg` | Ctrl+Home | Jump to first row | | Jump to bottom | `G` (Shift+g) | Ctrl+End | Jump to last row | | Jump to row start/end | `0` `$` | Home End | First/last column | | **VIM Actions** | | | | | Yank cell | `y` | `c` | Copy cell (yank) | | Yank row | `Y` (Shift+y) | `C` | Copy row (yank) | | **Standard** | | | | | Quit | `q` | `q` | Same as default | | Search | `/` | `/` | Same as default | | Next/prev match | `n` `N` | `n` `N` | Same as default | | All other keys | | | Same as default profile | **Enable VIM mode:** ```toml [keybindings] profile = "vim" ``` ### Custom Keybindings Override individual keys while keeping the profile defaults: ```toml [keybindings] profile = "default" [keybindings.custom] # Use 'x' to quit instead of 'q' quit = "x" # Use '?' for search instead of '/' search = "?" # Use 'T' (Shift+t) to toggle theme theme_toggle = "T" # Use Ctrl+J to jump to cell jump = "Ctrl+j" ``` **All customizable actions:** | Action | Default | VIM | Description | |--------|---------|-----|-------------| | `quit` | `q` | `q` | Exit application | | `help` | `?` | `?` | Show help | | `theme_toggle` | `t` | `t` | Cycle themes | | `search` | `/` | `/` | Search cells | | `next_match` | `n` | `n` | Next search result | | `prev_match` | `N` | `N` | Previous result | | `copy_cell` | `c` | `y` | Copy cell | | `copy_row` | `C` | `Y` | Copy row | | `jump` | `Ctrl+g` | `Ctrl+g` | Jump to cell | | `show_cell_detail` | `Enter` | `Enter` | Show details | | `next_sheet` | `Tab` | `Tab` | Next sheet | | `prev_sheet` | `Shift+Tab` | `Shift+Tab` | Previous sheet | | `up` | `Up` | `k` | Move up | | `down` | `Down` | `j` | Move down | | `left` | `Left` | `h` | Move left | | `right` | `Right` | `l` | Move right | | `page_up` | `PageUp` | `Ctrl+u` | Page up | | `page_down` | `PageDown` | `Ctrl+d` | Page down | | `jump_to_top` | `Ctrl+Home` | `g` | First row | | `jump_to_bottom` | `Ctrl+End` | `G` | Last row | | `jump_to_row_start` | `Home` | `0` | First column | | `jump_to_row_end` | `End` | `$` | Last column | **Key format:** - Single key: `"q"`, `"/"`, `"Enter"` - With modifier: `"Ctrl+g"`, `"Shift+Tab"`, `"Alt+s"` - Special keys: `"Enter"`, `"Esc"`, `"Tab"`, `"Home"`, `"End"`, `"PageUp"`, `"PageDown"`, `"Up"`, `"Down"`, `"Left"`, `"Right"` ### Example Configurations **Minimal (theme only):** ```toml [theme] default = "Nord" ``` **VIM user:** ```toml [theme] default = "Dracula" [keybindings] profile = "vim" ``` **Custom workflow:** ```toml [theme] default = "GitHub Dark" [ui] max_rows = 100 column_width = 40 [keybindings] profile = "default" [keybindings.custom] quit = "x" search = "s" copy_cell = "Ctrl+c" copy_row = "Ctrl+Shift+c" ``` **Full reference:** See `config.toml.example` for all options with detailed comments. ## Performance xleak is optimized for both small and large files: - **Small files** (< 1000 rows): Instant loading with full eager loading - **Large files** (≥ 1000 rows): Automatic lazy loading with row caching - Memory usage: ~400KB for 10,000 row files - Loads only visible rows on demand - Progress indicators for long operations ## Comparison to Alternatives | Tool | Format | Speed | Terminal Native | Interactive | Search | Formulas | |------|--------|-------|----------------|-------------|--------|----------| | **xleak** | ✅ xlsx/xls/ods | ⚡ Fast | ✅ Yes | ✅ Full TUI | ✅ Yes | ✅ Yes | | Excel | ✅ xlsx | ❌ Slow startup | ❌ GUI only | ✅ Yes | ✅ Yes | ✅ Yes | | pandas | ✅ Many | ❌ Slow | ❌ Python required | ❌ No | ❌ No | ❌ No | | csvlook | ❌ CSV only | ✅ Fast | ✅ Yes | ❌ No | ❌ No | ❌ No | ## Related Projects Looking to view Word documents in the terminal? Check out **[doxx](https://github.com/bgreenwell/doxx)** - a terminal viewer for `.docx` files with similar TUI capabilities. ## Built With - **Rust** - for performance and reliability - **calamine** - the fastest Excel/ODS parser - **ratatui** - terminal user interface framework - **prettytable-rs** - beautiful terminal tables - **clap** - elegant CLI argument parsing - **arboard** - cross-platform clipboard support ## Troubleshooting **"File not found"** - Ensure the file path is correct - Use quotes if the filename has spaces: `xleak "My Report.xlsx"` **"No sheets found"** - The Excel file might be corrupted - Try opening it in Excel/LibreOffice first to verify **"Sheet 'X' not found"** - Run `xleak file.xlsx` (without --sheet) to see all available sheets - Sheet names are case-sensitive ## License MIT License — see [LICENSE](LICENSE) file for details. ## Credits - Inspired by [doxx](https://github.com/bgreenwell/doxx) by bgreenwell - Powered by [calamine](https://github.com/tafia/calamine) --- **Made for developers who live in the terminal** 🚀 xleak-0.2.6/RELEASE_CHECKLIST.md000064400000000000000000000112061046102023000137300ustar 00000000000000# Release Checklist Use this checklist when preparing a new release of xleak. You can also create a GitHub issue using the "Release" template to track progress. ## Pre-Release - [ ] All tests passing: `cargo test` - [ ] No clippy warnings: `cargo clippy` - [ ] Code is formatted: `cargo fmt --check` - [ ] CHANGELOG.md updated: - [ ] Move items from `[Unreleased]` to new `[X.Y.Z] - YYYY-MM-DD` section - [ ] Keep `[Unreleased]` section empty for future changes - [ ] Verify changelog entries are accurate and complete - [ ] Version bumped in `Cargo.toml` - [ ] Test binary works: `cargo run --release -- tests/fixtures/test_comprehensive.xlsx` ## Create Release - [ ] Commit version bump: `git commit -m "chore: release X.Y.Z"` - [ ] Push to main: `git push` - [ ] Create version tag: `git tag vX.Y.Z` - [ ] Push tag: `git push origin vX.Y.Z` - [ ] Wait for GitHub Actions workflows to complete (~10-15 minutes) ## Verify Automated Releases All of the following are now automated via GitHub Actions: - [ ] **GitHub Release** created at https://github.com/bgreenwell/xleak/releases/tag/vX.Y.Z - [ ] All platform binaries present (Linux, macOS, Windows) - [ ] Tarballs (.tar.xz, .tar.gz) and ZIP archive - [ ] MSI installer for Windows - [ ] Shell/PowerShell installer scripts - [ ] SHA256 checksum files - [ ] **Homebrew** formula published to [bgreenwell/homebrew-tap](https://github.com/bgreenwell/homebrew-tap) - Automated by: `publish-homebrew-formula` job in release.yml - [ ] **Scoop** manifest published to [bgreenwell/scoop-bucket](https://github.com/bgreenwell/scoop-bucket) - Automated by: `.github/workflows/publish-scoop.yml` - [ ] **crates.io** published at https://crates.io/crates/xleak - Automated by: `publish-crates-io` job in release.yml - [ ] **AUR** package updated at [xleak-bin](https://aur.archlinux.org/packages/xleak-bin) - Automated by: `.github/workflows/publish-aur.yml` - PKGBUILD and .SRCINFO auto-generated and pushed - [ ] **WinGet** manifest PR created to [microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) - Automated by: `.github/workflows/publish-winget.yml` - **Note:** PR may require manual merge approval from Microsoft team (1-2 days) ## Test Installations - [ ] **Homebrew (macOS/Linux)**: ```bash brew update brew upgrade xleak xleak --version ``` - [ ] **Scoop (Windows)**: ```powershell scoop update scoop update xleak xleak --version ``` - [ ] **AUR (Arch Linux)**: ```bash yay -Syu xleak-bin xleak --version ``` - [ ] **WinGet (Windows)**: ```powershell winget upgrade bgreenwell.xleak xleak --version ``` **Note:** May take 1-2 days for WinGet PR to be merged - [ ] **Shell installer (Linux/macOS)**: ```bash curl --proto '=https' --tlsv1.2 -LsSf \ https://github.com/bgreenwell/xleak/releases/latest/download/xleak-installer.sh | sh ``` - [ ] **MSI installer (Windows)**: Download and test from GitHub Releases ## Post-Release - [ ] All automated workflows completed successfully (check GitHub Actions) - [ ] Announcement published (if applicable) - [ ] Documentation updated if needed - [ ] Close release tracking issue ## Troubleshooting ### Common Issues **GitHub Actions fails:** - Check workflow logs for specific error - Verify all secrets are configured: `HOMEBREW_TAP_TOKEN`, `SCOOP_BUCKET_TOKEN`, `CARGO_REGISTRY_TOKEN`, `AUR_SSH_PRIVATE_KEY`, `WINGET_TOKEN` **Scoop installation broken:** - Verify manifest in scoop-bucket uses `.zip` file - Check SHA256 hash matches release artifact **AUR automation fails:** - Check SSH key is valid: Secret `AUR_SSH_PRIVATE_KEY` - Verify PKGBUILD generation in workflow logs - Fallback: Manual publish (see old checklist in git history) **WinGet PR not appearing:** - Check `.github/workflows/publish-winget.yml` logs - Verify `WINGET_TOKEN` has correct permissions - May need to create PR manually with `komac update` **Homebrew formula outdated:** - Check [homebrew-tap repo](https://github.com/bgreenwell/homebrew-tap) for commit - Verify `HOMEBREW_TAP_TOKEN` secret is valid ### Manual Intervention Required If automation fails for a specific channel, you can fall back to manual publishing: - **AUR Manual Process**: See git history of this file (commit before automation) - **WinGet Manual Process**: Use `komac update` CLI tool - **Scoop Manual Process**: Manually edit bucket/xleak.json in scoop-bucket repo ### Workflow Summaries For detailed workflow information, see: - `.github/workflows/release.yml` - Main release, Homebrew, crates.io - `.github/workflows/publish-scoop.yml` - Scoop bucket - `.github/workflows/publish-aur.yml` - AUR publishing - `.github/workflows/publish-winget.yml` - WinGet manifests xleak-0.2.6/assets/DEMO_RECORDING.md000064400000000000000000000054751046102023000147140ustar 00000000000000# Creating a Demo GIF for xleak ## Recommended Tools ### Option 1: VHS (Recommended for automation) [VHS](https://github.com/charmbracelet/vhs) lets you script terminal recordings. ```bash # Install brew install vhs # Create a tape file (see demo.tape below) vhs demo.tape ``` ### Option 2: Asciinema + agg Record with asciinema, convert to GIF with agg. ```bash # Install brew install asciinema cargo install --git https://github.com/asciinema/agg # Record asciinema rec demo.cast # Convert to GIF agg demo.cast demo.gif ``` ### Option 3: ttystudio Lightweight terminal recorder. ```bash npm install -g ttystudio ttystudio demo.gif ``` ## Demo Script Here's a suggested demo flow showcasing xleak's key features: 1. **Launch interactive mode** ```bash xleak tests/fixtures/test_data.xlsx -i ``` 2. **Navigate cells** (arrow keys for 2-3 seconds) 3. **Search feature** (`/`) - Type: `Widgets` - Press Enter - Press `n` to jump to next match 4. **Jump to row** (`Ctrl+G`) - Type: `25` - Press Enter 5. **View cell details** (Enter) - Show a cell with a formula 6. **Copy cell** (`c`) - Show feedback message 7. **Switch sheets** (Tab) - Navigate to another sheet 8. **Show help** (`?`) - Display help overlay briefly 9. **Quit** (`q`) ## VHS Tape File Create `assets/demo.tape`: ```tape Output assets/demo.gif Set FontSize 18 Set Width 1200 Set Height 700 Set Theme "Dracula" Type "xleak tests/fixtures/test_data.xlsx -i" Enter Sleep 2s # Navigate around Down 3 Right 2 Sleep 1s # Search Type "/" Sleep 500ms Type "Widgets" Enter Sleep 1s Type "n" Sleep 1s # Jump to row Ctrl+G Sleep 500ms Type "15" Enter Sleep 1s # View cell detail Enter Sleep 2s Escape Sleep 500ms # Show help Type "?" Sleep 3s Escape Sleep 500ms # Quit Type "q" Sleep 1s ``` Run with: ```bash vhs assets/demo.tape ``` ## Manual Recording Tips If recording manually: 1. **Terminal setup:** - Clear terminal: `clear` - Set appropriate size: ~120x30 is good for readability - Use a clean theme (light or dark with good contrast) 2. **File to demo:** - Use `tests/fixtures/test_data.xlsx` (has multiple sheets, formulas, variety of data) 3. **Keep it short:** - Aim for 20-30 seconds - Focus on 3-4 key features 4. **Features to highlight:** - Interactive navigation - Search with `/` - Formula display (Enter on a formula cell) - Jump to row with Ctrl+G - Multi-sheet support (Tab) ## Optimizing the GIF After creating the GIF: ```bash # Optimize with gifsicle (optional) brew install gifsicle gifsicle -O3 --colors 256 assets/demo.gif -o assets/demo-optimized.gif # Or use online tool: https://ezgif.com/optimize ``` ## Adding to README The demo gif is already referenced in README.md: ```markdown ![xleak demo](assets/demo.gif) ``` Alternatively, upload to GitHub releases and link it there. xleak-0.2.6/assets/demo.gif000064400000000000000000041412751046102023000136700ustar 00000000000000GIF89a1'     .<$0 "*")$#"%&#6D%' &("+')!+%#%$+CO '!!$!"'"#,####.$KZ&&2&(0''1''3('2))3)*+)*0*+5+M++*-6-E 22222622;33156=5;C8T_99D9:=:;D:et<<:<<<<=1>D?tCGJCWDEEDELDF>GGEGGGIIIKKSKLLLMMJMNPOOOOPEOh&OzPVQ>RQXRRPRRRTYGUUUUVZVVWWXVXu#ZY`ZZZZ[_b[[]a>^_Y__[_____fblrbcgggggognZhinhiigjjfjo/jnnonnvo{qqput{uvwuutwzcxxxxyty=y{{y}|~~~j<֍험Rj߱½ľ|ʧԅ! NETSCAPE2.0!,'     .<$0 "*")$#"%&#6D%' &("+')!+%#%$+CO '!!$!"'"#,####.$KZ&&2&(0''1''3('2))3)*+)*0*+5+M++*-6-E 22222622;33156=5;C8T_99D9:=:;D:et<<:<<<<=1>D?tCGJCWDEEDELDF>GGEGGGIIIKKSKLLLMMJMNPOOOOPEOh&OzPVQ>RQXRRPRRRTYGUUUUVZVVWWXVXu#ZY`ZZZZ[_b[[]a>^_Y__[_____fblrbcgggggognZhinhiigjjfjo/jnnonnvo{qqput{uvwuutwzcxxxxyty=y{{y}|~~~j<֍험Rj߱½ľ|ʧԅaH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄jѠ( /裐>(Fj!@ ,4ʐ "H ЀpH B $*Ȳpj "AC 9<9elhPXnPA+@<=x2 ;f FZ)M?̀/G.3NGO? B( )`(#-@00-Gk ٰ@3:$W"C+p '€ P `uwPU2<?T|3rЩp.Sl?pBߔ 0 `D +&@ty9 ` Tzko'7G/Wogw/o觯/o HL:'H Z̠7z GH(L W0 gH8̡w@ H"HL&:PH*ZX̢.z` H2hL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^׾ `KMb:d'KZͬf7z hGKҚMjWֺlgKͭnw pKMr:ЍtKZͮvz xKMz|Kͯ~LN;'L [ΰ7{ GL(NW0gL8αw@L"HN&;PL*[Xβ.{`L2hN6pL:xγ>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMZָεw^MbNf;ЎMj[ζn{MrNvMzη~NO;'N[ϸ7{ GN!,_<b .oA .l0D ZTƉ!Z(Hh?(+O`2D1m23!7*YgA ^|9Ȉt;ӄQ s)ɒv-Y[vN]lA !,_<H@Ȑ)[P2k`64H† FB ͚3IJ*A$@vdT`> !,!,v<aHP`D֔)\P- #8B%hCvlA#1Ib"PZIcC>Bܰ '?*TxPdz V?KW| Ǎ.g@Ȃ 2+{UX6!,!,!,<aHƈ-ڒ)[pa Jք!t$Pb-i6$I/pTMс֡$G >: !4Vja@̌e4,2#$>{`F̤2psuzb\#3_#u倪Փ&A;N@8HQz-cuY褄-lOxE%}fr4dA*/"jT H/lt8X W A(I"Vh =( tO@!,!,<aHP e*C0*h!Ă'&dU1bȍK<)!4P5!Ck xA`E 1B"A(`8#HKtbWIlZICBL@Ai*,A9{y#gd*cGeĘ!$ $P A #[HoȁSM=fAR'®,[8 /NxP!Jx#A;!fk)r8K#GTj9>B`5Igo&;N&E'4 Z0(L+[t#޷o5+ [٣oyew(P8Ų }W\A Dh#Ü=$XMghPg`cL鷠mй/؛o't潒en^;?o' _NzAP0@Qulmxzt/yƿ& 6`A(DŠ oDX;YƑ/i qsjΪ #@9J͚uXrCĞ*`h`X`C@!,!,<AA YSư!f*xb…BH/ ^̨1āUBBMv1 UTFh1Ɠ-.O=Ixt¥pnAw$A/zacw 0iUA JIʼn>׮Az@ա֠zȡ$!bQ° 4x~κ6 ͧSW.CH r4@Ֆ88 5Hc8퓃h,0)vMz$P$ SAY-NNJ Cίߺ c̀M/$0|$ᄉ$ 2X T V`?!,!,B %LÅs)Sfp!,<H S!Sư!f@N4hB7"A 1> "cA"n4y2aHH22U8AB ;{vr1eL@4Tѵ Pt5KӤ(̍T(m$ "KUGPۺI4]WlF04q+BXpd;DKR^$ٺwn"6d ^l 29\FkZF6O:7 57 AAHQ<  *9C '!T&dɎvx"΁(;3DoX#j yt$L䩷ޅr!,!,<Hƚ%Sư!2ke44H†!JX1BFȑŏEn,i#ȐI֚|a&0=3c|G쨠dɐE$p "}0-X#~5u$BRjX %H!,5<H P%Sư!Ci?V4h5dBH 5FHq X p#ɂp;E\$17PntE[ӵ (ơ#7%pL:8ŹӃc"́ŧ!70FիWD:aI8DT\%Ӂд#5 DW F</b/N8r߱(Je{a : $2-Bm϶V.mkb~r}88sd&u]Py˺0,<'oڬ_W;A_@!,!,@<Hǚ%Sư2me,4HËl&\xa!BAA%B;3TȘ3q)$=_.V0F7̈oX JYrf$:o߾ S豛:vʐz1[×ʖ-@Dcv̲gÇ+*l+ %]4(B& C3ɾ'O E5ےOhϛ+:4MІvy6Χ o߾<{7w]ƖG$Q@qn@ǔ tyG4ƿppT0~`H"& $N U O@!,!,WD"YG`m `„ :HVA0 !,M<aHUӔ)\ڤ #:XBk#|! 8)xreK VY#0}>uo 1A i^>CT$' OvFV2#JZ֌×~Խ C~TZiR #Ui<4yʼn:􈔱^f^c$vZn6`-`(Zq97 9 '^~˗YO7Q o)ARdT >` !,!,W<H )[pa3]^4h† FHE!JX#HeGhdJ$[b|9 (BfÔ(!0Hxl,X5=tuB*4 -,) :P>Cṇ.䁆m7N 1ɤoKgO_a4#5ϧ;`p` -[*lիS"OR`Z*.2m޸E:f K\cE G٠|dhTAB /t%CX#jc[@ȃB  #eLsT'CFSUCntå;B]epRDGJ<˷J70'ÈK2[u#:ݛLy2;ik7c^?eiߋ#M`}vCޭW>$* LÅJT6!,x<AAVQSư!CjxU 6a§i"#Ŋ5$TƔ]< \46Ott`B/Zem@nBT+׏cծM+*:e3Rc"YC8\40׊Gpգ^<0Vo;y2 eʢ:AЬ[=JAÉ)"T `L2=F  EoCH= 7ք(b߈GF! !(c"aG;dT>> !,!,< AAYSư!Ci4wb…6(/*!D 9R$ɒ6Մȑ a*;K 7_//4HB3|f#GZr$_ [nu-yrb N:%-Ɍ8'#lX̘YCXOP$8 uCC<0c#wκt=Ik_2=MJGNwW3nڤ\{kV:t?'po[zm x5KAyȡ YAT` RM2t !`!BRHe7T!Xc&jcLHU@Ȍ48H-h<6!,!,!,<aH (Ԑ)[p4!+ Jy!$"^ 6+!,!,<Hǚ%Sư2ki,h"B!JX Bj8!j,iDž!Wrl258Vc1 b&PHb 9rzIXQ3&NPF;vm;!XJGu,PwهW)1B5tk"!̌G8tӕٛ98˞?oV0ȘI@7Ӗ&@+mf^$[&iFȈID>w1G⇧֔)\Y / JXH P,+"/QR)C+Jwn!$#ՈkfhJ~fa!/ԙ0Z_Q NC'Aa3Hp=OU;`2[eŢ4xt1A`9U CBNi\덈ƒ Wx;g`Xadm_$r-+ gڌUR-$r& #ן wUO@!,!,J &pT_B!,<AA'PCÆԌxbBk :8q <(ŒqBpܸ!c)!JA"TE…9U,"ȑ8؅z`&J+yAcņ-M4gIEa|+ū~bdni uَ}te=WD/ vkNj U6k7se)L*PФlʬL,Da?tH=:b-Ҏ 1xƺS*$JLG+? W|xɔɒ|"}gxoX#rsDG$B 2@f!,!,<AA")[p!2kp,c@00*J5yeM`xA&{f)&AEj$ 8vj0^f$f߈J! `"@1udT`n`C@!,!,<aH<֔)\Y #LpC NhaF96QFK a '9^,d̊RC+xRYA̞88:4)F"]4U[VM0k `h-CLi]*T.Q0* g_ƞ~QRC'J4hJ#TL!,!,FaHC@!,<aH&Ԑ)[p#+ JDZË#J$HE7r$D;txA+CT%J%eɓ 9[@hQ Xa#(OPzţNnǵ+sTi^hJK<.D H*\Ȱ/JHŇ/jȱǏ C~AI"S\ɲ˗0cʜI͛8s %|$<@>xN>3 YH?t\LŹH*Sv*Ȑ3'EqT $` H?Bأad 0"v>?`x cB#TA `4CSA]vu@0ؠvxpB@,J>d 2:[P@[$.;ఃdɛev !wB~w7|j~ G.䝙 @ ? ` 9pC yа2N @B?|D~6L. PD@2R?~sN.K#4 1Adp8ր"n/9ސJ$( hv#x"' `~5A03-p2 Qs@x;U[-fHІ'A cQD ?̃I\7&-+{X?~G/`W plAT{cT0!= @̀?ُuP <`BdG?>hHb ` ,*)&XbȌH2f:Ә{4IMgFT6nz 8IrL:v<`z.R@tLpHl:b Ta=܍(*qD E>‘j`@>t,ؑttp&!k4cN`@mcܣ{ ]cTV5O<@e G$_qЯGFt.,=>yLj~Xk ?FP hH,rk5мnu3Mx{7}~Np|/8' #N[\x/sE򑛼('O.ygo8$"hZ1@'T`@/m,^րE+ 傠a" ! RB;,pCDzՐR#KIP8 ;8|U=C ^#a'D!z*> (Ά?&V$H {laƋ 6]   R^wOOo0ЏO[Ͼ{*zH +=p`BWp #^&`&PS`Ґ"Z @ <` h@ 2>U`,˰u'P7;C w߰#`kFIЀ bA"dP 9@l8wJZ`'F+%1(( L(BR$+tB!~ aB CL7'ex2T8anHB7z|8$P:8A08FEl=8Ln W0X}Ċ41@eN 90OԖ,] e Pb~ I<XqPcL<ڍ#` c ` J ;ß\+pb)lLXen $\PĮ]- g=QBLjn n ]]6A@ K|#P0Π9eM`ֵӌd 0Π J (p!pà^~p \$^X4j b^x`6ݞ%L" .Q @Wn4#blLRQ7 E'U/_NPP.~( H~ wO3lxj@ przNwԞ 2 lP.s/(`wowoN+Ewwz_8K$y =@ @ xEHLo<0]_=ԉ/;vz|o-0.E:p Z^!^wdhC $`ȡſ-8Da =~c sY9}ΔabĄ-T03gM=}a8~ʽT 3>`)*2D]Ch(x(< g4 %&$6bM|OX0K4i'w\/!6-Flċ\;?1D29F'$(QF 3'}@QR0wZ9%hD-z( Gb` )!.ѧyq&Za -230ZTFHGG gǔˆD/RBP6X*lL6P"EI%R(5F@Ȣ uX{ZA42A~EԋjVSQ-h<ʚxvKh F/^!PQG<Ѱr;jZ%?va\`"T/d;`Pa^ݷ(Hf gI-?2H5L$C-IgJW8|,%,g-lXT]xBo%a e1omځnTƋ \P)vQq04DS.MI"RD6dHq9p}#k-1 R '֑G7LȔ)kaj5ER2.$<3= @ WxAQ!#@\Pp!S>A2'T`p\(~'-H2E3JB^ ţZP@<V&` o_W;C)2B07n+@2[$BSh0C<d$ 581Sl\ L1=郄Gz@u\b  YA2!} P@`~8 : ]wH <hYř <_fre\ƂdEfz* Ռ Dy@KČΘ)& 2 RB&Yj5F I8b -" IB@ xG#2@# bk\$yEjGA%L!4aN16LX84! \Bzs#,)mvжV9`4PF3w6X)*%`I-Ĕ`liDKp(=JdmC%0\2z#~V7d'W:Ǟ0RF0IX~ZZ zXkjXVM,kȀ|!u@dGJܪ 0B@JA֨2YAnp-xV΃TC0#KN7U>ؠLZzQZpF>r3c3Q2q p9vc- Ɂ$âhY=H8Ա%M? @3ڡgl8Uבvj$qjBu`Apr|_/(W5v ]: ʺb\0np}^ \Tb;^p!R(-`jl}_ `S,qrwN(Ar #@Y-ȵ8 FpN"KS"FZ #˙5 3fFKG;,t @&pE[v;!S@ E4vsȰg[dGUg d@> p1d>8a7J#0yHš @lqo ֠kW220p`!1Ӗ`h`[ȓqȀ>9hwr'J=jS`r(Gɨ 5bF(1@x( Mp%]p˜r}3=g$Rߐ 4#$k|Sб틴nZvL gЄ22F: wЄ Hr\Fh uk4}i&DZtJK0r r5|xS/1lf{Fj2K j |"MA '3"(a T-@a $>X ؆`Z"[4ȃqȇo#y7Hπ rJ 2q9( @  X5 d*PL|M4=8ᩄm91.P :N$H&MqgpZȠ0ѥjh,zЀKSFgxnx BWtB)ݻ2?`5`8ؔV"S(|C@ Iw pH%<#9 ݵ<9@9)12rh5΂WM1{T(] ItMnȂ HTmֵYU' 8 CSRkI,ʂ<ْn p!SK`R^VTWjS1(z^h"g!v00-Y 2%y`jD 'y DPzUSW`8~ʙ" zhRzX5:O ߟ5(M<)|m8,ʀ-6TʂX YÓLh->}Cā 0c ۓFh&&$Pb)26H1X+ Y6$zX 2`N (ln~U'ܬ=e[Iot +`FfZjٗ6$ڑٝ>[,8):|+aPS@^i);%Xhb>mۇ0[E Pjg`9TEx8ОOP]$^wpn/hd #{\hhj3KuHт jh w\Sո02S4}}Z'tS(1$2$p _d 0`{:y@8pxr>g?`5 +`xS.:`S`Pdgpj @q[>%%1X!m$!_&uCIUQp+N8ft1|+,8pw qqP3twmUGg$xl i6W;P3c4<쁫A1Y ]XGd*OX􂣃B2 +[oi)́ Wb  ϼ遗lMP&(XA9 7,Uvʁ-Q=,H_f[DѬmv,j],9F8wMF)e̽g(ғ1M-qHaù'+v5Q ݜ2=4w+Rc4ƷOD%;oGdݚ" D$ѮQsŗ<G&%> &l(Hx{wޝJᢅ?ӧ&Rh"-Z8⌟SdNk.n^&\!֮>wճ5a#ŒBj`C92!v--vgm-k fB uo\ DmX46=B"|NMP2]x#0BܨB<ݍNтÚmkdȤp`C:,bs *z,3C/B7@bJ;DF 90CW:YqU;H@AD*<*p %RT#[\@4PB\+Trp@*7G%: ⊎Hq8dBΈ3㰒F.͕ ]4`6\RDMlG'!/h3F@de-5 h33Jt0Cm$㈳u9%I<LX9'hhB\L a8ԒWdf0 k䀃i<'5S1 B3 p|Lre-*L N),O )ēXXKHe8E^h+@=(?/  ~&#47V]%Ȁ 2\0B|HRK†?l0)P8/(a$86RpІ-H\ C%#@ fA"br\Q 7)dP0K ,?Jh5 ȉHB`lFb Kg9+ P ;k@^Hs0p]q$*Hb|B)+y΀sBX }C>K8d T?\Fч)pLNNb򍃬2{g+^ȣ 3qo(5|XD9" A`zL'Z` es f6b5&rFT 70N@*LK Q"qI@cPPgXl!rB߅. M*`UHO귨Jo]c\^`kVڣ < 9md%8(YǾD H@Eiau fA@y ~WאNJAVc{*!"Fp(+YJ4x|%,aENt (RPDPxgw"@ N ,FHh#Z9ղ5G ̠Qrc+11;f\# !-Z$$ FKZFC,@ ׵dPB fX_%,bĚ$@dS{Y,vD~2,Ȩd+C,rm0g#/Dʱ(!RG5uY*Yg g&rf (HL>,PdcB+Nr-GxENjFsɤ5)ASO9.JX(1E-A:F4 ˥=;jBz`27"*Ԇ+ \*M°ZoyU w9#!Oqbr=Rz=kȀ$ [#o[/26H¶~u늯K>.??/=|e>t@C}+w9K{="9~?'G9Ɂ7Ϩ3Lу ߻p9(?`4Bk@A4> FN V`@F0~ qe  F ?pJ` `d `9S܁`lA^ @ &FAPL!@F<V!  JDED` `v!AR] a!F! @Da"v B\!#VF AzTVR (0-֢-"40"//"- ,E(`2&2.#363>#4B!^D @D2ց6vc4 x93A4E 42#X!:A5^ 7cc=2@&6&~A?*D2|s ?Nd<ҁTaBfa=c !rd4A+NHDKN "B$Gʁ`l`OBP.%3XF@ BƁP %<HXYp0b6;Y[2$ @. S%2Nc>V5f#^zUcF_ $L3^e a#> >Ҥ=Z!7Z&Sd :!.c`6ch:h*4_F9r&e$=ffje@@&^DIem&L  $kMuURrdi*O eqme @E,tSfDLjFcs"cmZVڣW*mH %@'-B.b6>0fC:6/ c eJ&<&cA&܁0c#D&a;B(h"'ƣh4pB)`Bc8 A2$(:ʁHB)P#;Nhh",9h(dd ?z&2Ψ غ՞#xB8ۦ+b:,>f6$<=Xb-##HqZm:Bhr@(Cz-|C8d oC)L$B' l7C_0C_-0A1-"' 2+*̫>A'̰C)- 04B2 rVC Kcwnb''Co2pzC;i.% x6c1=l-B6?(-f;/s-ާ/s0r@k%`0A'C2C8C>Ӂ43>: R>Fm54A:B"C?9>C8,.A.B>:9@?-F`,psLÃ74x9<|t8(C㒃#C0CC?C8?4bFz:90tL=$t/Q7$*;6D{@ A2pWuB0CCCWā=(v>v5>R[t=,vWj 0p>C8=d|C>lvgC&.:t8X1o4A#7.A3(*~Ao4:0\xv>'4t5v8 s?Lg"kC8t7[C?$|0}4C+`t3'wLt om663,IN4>T#09oc+b4b:b߳3C6\e104A B (0#j:C(A?0BG â+F!G. j3,P5A,C8C؎<#Wl3A)P-0j(8 $¼߂!ۻ$|C?B03w.4x07xC,< (?>7.3br#Bů;+0 ߂A?" t:>lW<.wjnHC?<; *0(}..D=xt,T-hǓC(`FbB>|Ӂ/=_A[s5(͒MCƘPE#M߀V[k*fg||liJ, ÓXbH%v3`tXsgT3ZY4$|1;.> |6.oLa: :sVu& C`Ҡupݵ0DT1R F  Lh)|+c' #gf5.P• "J&o#mhX0hv_s+2hy(L! m".i d F̊ ?:qdV/d^+(bvg*EFf7Pp8¬@=ցF`bts& : )N-k O:|AaKCAհ"1(ɯ6-2~$>!ѐ.(E2 Ad381j CtZ?a-A_h-HhzV%i=Y4H`q BLuA?Þ>y  {B/8"fd9 p4̎^009AmD'!Zӏ~XH]B!Y&jHK΀bɤb2hjՐZڍ^V:fPFH<9Q8*HC[l瀠bq !0L&|B>u b9a!i$TxxC`,O(i>ǡa砠!:}Qb 4s>4@-|驴u#jCcqLOtp4YJF]1Y!4Fr)`hO@pY'$!眉aBR`  qc"# Z Vlr;̴h[cdЌP~ # |` j V>˝3"D)ᦳE+0jnY} #L䠜ey jU=5W9\зsMs0doc!a) {:x|*7HDɁU#G8&K7`Cx6E$![L4gFTN.lKPw͑>]c9O9C$b At2f8*CP Ā_ؗAO>ұ!iþ=a_DM_>X}_>a bpV5 }G!G8X5J|.`< '.vLc̈a<#e>񅠄C(aB!rbl PHҠ6Baczi0,ŶB "!τ2 A/ %Fb`q @Ajf 渍d'`Ѣo ab!Ȋ*,`PZ޸#GbJh`ZȐP(Ai"BhBjX!㎄vAjNGv!l_ aHgX%`\)~nI~ZA6l(t$Xҁ+!GI!d ,d8$Ղ @QXaցf$PgcN>t'}o2Innvһ+D.i hP9 4A9u[!xl 0A!3a BfR"g C ![A`!B+m7j갻Kn 0TC(vm@+njDsg ~``h ֊JFq T1F FB 2aJ]@ Abl f:nMeVN'a9(bߊ)jZRMӂX 1s4(A`E BOm̱ ɞNsG4$ ki  bG&t!!2"rSbZ Ҡׁa#lp DOg8 1]rd&$\ 8fba;G3(4`n (^GQ&P+bTԀ p"(cބ8cϸP8Tf::9Td Ԁu9`k<<= $ju Bo.ֶmb [dqY"f~Ql8mB!j)'bZ bx(f)^P^` L`E۬B q EƀrgAtG x),kgi 6s!m% |:&Ί}L\l!"v| U /w Y,`΍6 Q$4 l:b#aB2 jQW!j%f Ap05SDҀ#oHra܇- !!x=MqB/V~.lwo`aYII@aOXH"ӠЁ6:M0<,@Z䋅6C[WoJ 2 6sBY uYCD_n/BA!rlx+)oY^ {IgV(X 3 !LbE/,5,,Y@J6X.a@DA f/l0gYDH$q"ĤjjWDa(X @%eh  r B " F! )|4w! 6H WApY֡@Banq }#dhIvMÚ< X0`(*A!ĠqWAG QThЌ(P6lN>ÐF Wf Cy #΍3_j<2L24%HXfA`e@z9 %uPRv+w^&L,(9?0zc3M҄>à#l4=m8%z|IIz >$ t^d濳)BW3O5.vgC:R+3ZirbOi/ ;py:"zt#7z`dTs>piCN&v©!dWFg 3<|FΜ>40q)9H-Iw9w0mgrP}q9]H!H4x3{ g40L2K! :yNġ砋1cy|#@+$9PC0@$ 4Hh𑉦Tw 9G2J)`0AbԘ\i2S Jr&6 &4 4bHCv3mt#̸lr#mlj +xV؃32!|PQyW<>^X F! M?e;b1!vXS R)p]Ie 8Q}15d|ICm0M ٌHX$&:at,,Db1o9'F c% J#9$%~t:M*<atyGoHb # H<4| A57?p 7x0L)k%'< ]dt@3m"@6A,S ^JCTxd=;ĂS} XH61mr4ŤxFA1L$wБ?Aԃj!btЬttiHbg_VG8p()98OIВsD%CPVQ"ۈ#O9זmIulw%ܧtlp%qy>ҖBggIIipٖk mIg6r闎#ٚr[yȖ8YnSi闦iٚ}AG}ٛYʙsCOwA+iٚi:iiY5t pqC~ɝęY) I6Je$,|7Ayw"wgr$:٢s%!Pv ٛ4":&BAB!@-bMa!R_9SaDzFzz d:djiZhgzl q*s|P!T jmʧpl:#@u }꧁ qZy M`%_*tʩpeꨟ*ʪo_D1aꪷڨ<DH]`ڧk*`0ry: ;FCڪ *JnJYp*r*Ɋ|pYZJj:ڮᚯz|W5ʦ0 z _A kKe +a'P,۲К,;204{3 0 5[4[H`:SK˴MO Q+S;Ty*0T˵]NX{/ekP;;0(Otm{NNsKM{s%6P{+6`MGkq{z+kz{+N{;@˷&0sKA]kG๟i DsYQYB/`Ɓ˻뻿 D &wr$P +Kk׋{%/ ;(k;{݋틾j+3K+I'+l{'p |#̿3 <*p|8",[KR*#`p3,:=9|{2|-`)!s4  P*h` L F` r. j4 @ Gpy瞐Ɔ  0*6k@ #|o `S+ ֤k jK!oGPNA}`| P# [ .t(kdM$+ `pyp  t.f 0#0n{L0_z aPp " x p0 P0cS p à i`$10}%w |U "wPH iAw @jP QЬqD  U W 8~p>} j 7qÐ  0Ŷ W[ )  ? p( {辆ZL[P 1T Np"!txK| $|@< '; (+0z`|w{ aP &X(6,&%hc!C $jVTxaS)>X0$a#)`<r0KmThձat ᄔPAzzŋy:JSc2yDaZѰv\@oJ8pX/\1ZxaB..bȋhj6DqD?ȑ1'{8a >Z`CFpAԐhɬM2Viz=|3'HpNqEIcZaAtI$8、M&6xth(Unfnq8/>%u՟i"( T GRB P[m bhVkmQF;pXڡ%pFQeU i:LD@CTiQ(6qRZa|^Pv6P-U!|ž|U`9jRyM(fjI2vhJ9gU4(B0>I =hr 55 E`Ʃlk#3 LasA9TX` ,K*~$0(`H`c8\`mMb[(,t&@-,H H``P>Q ϑ$@%C` jE0,f\nuܡ;`9.{c AXHhOvQBm, v)P)4Cml*U0Ы,2$z=p*TяGP #B:r(fU_)t0l 4 8POƩbuЂgЇM8AEW`OD,gI \X8 `DV8 q+8kJ 1o`BH VB S(<ՅT w] Xi 4a( 8P* P1&T]>v!6+/8*XF0BHdMu"¡)@:LT39'<1( X(x>o  :XԆc 0;n|!kcBCL#b G?(T_F+&@(=Ug@)418{# : psu#< P}xz8=(|jc;[r\``y!z|3ȁ؀ikx@aأss]؇˴/UsK/"؂I`Xd/RP/h_x }uZ#ˈ>-Ծ4'8ra':Lp(:4Wl9n̅ 'n };ExHd (V`y0F$ pPv`fɃ@v8| ( 'xi`< zf@ 8^ClPGlQ @ ̃Pgp@Ix@ $ (U8{9P \@@#yi`T>#lcK@!Akdp@y8ymBө]`CRCn , |x4P8aOe0EfH#\zc[!ִ5X{ D] 68C/KڽܝZ*Rȃ:}x(N0Mfx#:؛%jUFI}ՃND5gF(]_Os(nop Ej&8i;\~yfx,{PpWP!>(.2=p,- /c0~(HqR$3c/uL`$cȇ|UHiHx0i8)Z㩈IL},pA9M#E(* EMFI{ЅF|5:ށ<YoJsI+A؅T9 "rXjy:9LMG`曽N_"`T Z dsY0MܠJuFD#t|h"Y;D0`lЃfpN'Gt AknPh޻2H}P XJF^X(5jPs@4k|t*le[?Gf!){HFN A@A}..mj27۬Np@:jLCH)mH-oP{^h Cx+Xx_&k΃Lv[Xj{1aa/`]Qy!HH'~#:FE(&߅؁\[ovSY:G0N&|x8g#t0A=3`lI}zʇy`/yc@݁20{i8u#(pBR 'K@Hr_LhGby\HϞP<뗬I?c ߾ja ip#zPH"B%^VT T/3 ū+W\q98p@Kpp#\{LHsf* @:|X$|`AIR"'uҰ# Bn ًECD{c(=2jPňdfz<`P8v\'rHGoIXqEB u;F}uqD-4P/Sed1պ8q##Y9?d| G@(T07 Ӏ Bu @;@#.LPtB# bH2:\Qˆi@N>ACO` P4Bi]3!B\G%lN8`TA?8 NL(T0=$8cUs[ĒO8<rJ 09@ &3""pD3C6K |G30]`=0/0`?wtС [2'Q'% &C CO:OiG-I`,D36D BgU0 8sO8̓j# =@K>`X#P b @,@~ 5G44 ҊI P CJ#,[ yh3Hƍ)ݏ+?CO),nQ dؙ"@'vUP^;3O)2FME``6B3 ;xb>E %(;=/HPx m {43ީH#IN>4 ;$2 *Z5.-.J\HP(PRL4EW@OtpDQ`\\^ LA bp+0V@^ |`B! H? @.Q P089Y Zpc4(9 4@CR0` G'JpR#Y Q7Q 3ٓ@$7 @Ɉ^Ћ@ 9Dqp{ @')A˂P !8a%O0Q-N( >a 8&vvs-i  ~f HjCdX=@ۂ :|#@. .{::v$G0p pp؂7Q7z@6 g0X `U)@ `S/.yH# A*a. `>l.Ӹ4x0iUuVKÆzTr ~G(R] P z i xP:Ih$U\.v>#- QĄ, F($! xpBu@!& 4)[`asa2mar Kr#WH yd$Z-S>rx(e=7c AХ&7PT3`"<h AXA<!=D@9.l6I"AD"c[8 :)n1!C'1 ;tF"$p?$cʠIOZ $0r8xC0IFP$)$@x"Iv} p@D`@߀1&dܴT6O4@Q2JH [ i]tb1rQ灎c8AX= ,Iv@J`;0]BvpB21tH(R~9"P-a",'T@&t`o< դQɠ*!s7؆}?$u|| tu$"r/h{CyP Ё# n(8,r ta똅W@oE֩R{vp1Awd>0@ABpr %$7v`_+,<Jۤ tI(?5PA@,$tcq ȔA z1|˔=E1Ax:9`ڄ H )0׾vHmuxtxm P%06C,A0$P!lX9l>.:B@@"Pa @A>2D`5T$4D9A? t h=TU \L<*؁,JB-7OOуH*P86p/T@ V Y p.lEW@pY DLd $lLB? tDPaG d"0H!C>-0@BDJ$E؀ =8A? BL|D0($"@AC>TA+9A Lg$̓-4@r< $tALALB:'x$8A:@8gn|T@_)$Ap.EYy/z$> Cs4Uh g9m(@H䵔B4*L"( <. .0 Im=@3X<P Ddv!t:`&HT\.>x$L=>C!@Pudm^B<2pE @I, nCP՜CpYaCb6HCB$l^AI>CLa<PWzf/ h= "0M(lu>tI+`BNA )liSr :B8CT+:/D9dHr6*:Q1pl4'H .c ?<@y @ 0<PM:x϶~\/B%8%@8+8BپB\D@.TBO t BۖmQhm%8B=Bl:C?;CƬ7?;AfP 07DJGdB|.9$.ÀPt>|$?C8dA4:98 x@U:D<XBkYSBJ?71]J=pCOpC@m I[fo@YCE>LReZ2D`oN9t.]C4 =J=xJNEôozp΄*4` &7$oT0Z)t)7hڈXK2 l*/nC@}tO0ь?G}΃*A3悦/(J6D: DRiBli?x\!:l*8TՄH2*AZ} )+4Ё>CG.xHIèy ,@' :dD> IC0.\*g<<$<2|;/zC+%!7:T) XC5:Ap¡L:,$^%E *A4B!@a C+Ȑe> ]-XC@ iՈXuE+ث: 0,H0 Aݔzp&=+V#,U-tc D:+@j+#8B%XA!+5*T*?D 4+vQ@Y`hV7C:9- ƬC:6zƈ 6D(6o% t.(Q,C躗'C:10PA@X8p62r Āw3 u<_xx'3lQ3@$'N@/9C_J@y@@B9<9ĂDpW33G0#Xh8Â{!hO>0@)ZOX ]0 HAg[ MWT TTAЁ<@;kp<@~#Iԁ^TOA8GA@^FK@;@Wdx"M# Ftp`ASF HxAW`0g`0 p,D䁢apX ц$ G6}a `2s|&4 mR.yc2gͭ=mxPׁ]jwG*`|* %Bq`CKϬD*J < j c#b t)K*J 5*Ȩ-,=  M#l42ЁQa8' G6'4.4"H@ 0+fsANƞ|`᪬Xꦭ&xnx+_BA"Y.ˆ<೙ri-ƇH \ z!pP.X5&ScxU[( bX.'L\nTPWP<@u٘^8hJ@vYT A}aD,/DA>b7Z֡l!ZskVGpgpWD[n띗}wmUW}QI|yo+&YYQΌʫ7`q~gwCAm 7^O6a!2Yܜ+^{ 8^i5fM~he.ձNH}"]xo6tFfiZiUj9Zey>af\})M ozn<`!qs> 7Ca7SB?pxV]bqw}%X^^cZ0(ߞ?__)a'k=UTR"~YT񊵂p* zWA ^9A~!W` _#bc;JP`w[UCAXD#ID 7-{( n߹ JE/~aDуvd(14 bF jS\ -(GiY<]^ G9odLi3>nDW!7=&T$"I񑑕%HNaO|& 7VCuJ 3FQ{&iI7Af,cˋ4).dr9 >Frs 1fK9ӓFISB/)NNtHr=]  f0Tȣ YB*6$8 A`u@X8]!G Qpi$CIuHz (P#N(Ћz.{DQ( HК:D!0T9a0R-Tv)jB{!4ZQVh;)Tr!`YpA4]WPe``pػˮ,6Ɗq+FHA"0ً5u)N BZW0p)m"ZA ,V`p) "Ngã[ XyH[PXkFC>w!/D ~תbŋxr^4> 3(8B,1yH a{||HG"$pNj{ခ 밇_ Xc9Чh <^<`f` z렄 P`VcX.j C;ΐ` ޸q =LLk` 4x@5/htP2xC`!d|iz1eSy8jMdn!9Lera"Z*Ќ5SAWEKAe{ `yc PtIhEPO xE` z(y2c y0B|8THFO&G8Cc N1Rk@\ ;J}Z(Ȑ l#-}xCOaE9H9{̂ a>U r>nLO&x Opu ` P|$ZӓM|@>l ҫ@¡x4/ 1ҟP{ qn[AE:q < HG>rFP=!X$mbAJ /XZwg px lUL" &,p 04lЁoaVJA-.#!a@Hgݼ|ͪ!9,Mv4/!ЌIAȡ8tA!*8?60B  P@M7tBaѪ!-Nc!z)԰우``9xڐ!F>nLj` 18"c&azAaTM.MA 5VV!A9PVa! !t\!aN`lNr`ȁ@8AĬ0KҡrH!a&r#)a0`Q#Mc:ҁPa!BH,*A*a$p o⒁Ё Paa! (!h g (!/rrʀ$<@0Qξ'َ! M2d r",`סZoʶa mNV-^l-{؁3v. vh`%ȅx" ^=TTS%>sVH?s%&".Kl`\ `v`[~ ~ Q FAlA`At@A`~BU` \öJ`0q t@ 4Zt`@&AE AB+*`: v@JBԘT ҡ(! (JQv\TAt TB/ ]rN$!"BBItf@H5'>` Js x`5<at/A++H ܴ X AJ, Uq܀@rl H Rtx Vav H BMV8vf,Un,D4Y cA tBIA AXT%k/X'+]INI Y^5MdA r!D `AEA(^4* X $` * nAl W\*| PA@GS bʪ4 ց`:CϠ.~*2@6@\6rtvLt@.+ m 0hYB`a@5B@fkh E L!42D i:@-jtƳF.^` oALBa, 0@1H80`.vx  A*h"0 `2kb[4V-(FaxY*aF4M΀1@ '@-\b* b' `$mb‹,dq" ! xdQv *Zeɥ$m,kP@i hբ J X!SǢ2 :hQ$ Dza@@0.46 oZJ afhj,3x :``i|.@1A@x&[*1+|a yV!(`*^/z:\b/q8&6 ! abZ(, ne`:a|#BQ/w rl(ם`,j%=^ ࿂ey@ULpTy\rH Ja\Q_܌:Ū!@G@$a `ncmh(u 2TL4`XA5(aWf"ZL-alLr|CZ'$tA br4CA •!N wuBz `Rn b!v 4 ^n 6(gX  t WaIv@Ƚuf<A LQ,zuJL B%J"{"|cBDV|*9l`7!B")4` l Z`v!׷epW@Y 14,5n6`u  ,v` Xh@QD !`mO#zADݔa( ! r5 <~X_7vGYp abSʼ!aJ@eB4@r ޒD0 Z=A#cM 5Ndof D}R17A\]`_-5 d$VA;>ae <sTP !f@|`=L xL pL| T,L=al@2ʠS`Xt }{!`aJ n ?Aەn^ "JqCe#gH _l@w/:腛@.~81)Tr-pAttXk, U{֏'c^b>ZЬ_Z|u0[тA+& d?[;cNzEAN GǮ Wh.𷍆0Ezr U7 ý  M/ J@D(Љ?t@G>O77O@:S *BГ7س , Z4M2̲D$aL?tpl #H e$I7ӊ 4g*R ydޠၙM8pFA r32[ ;p|U 5䤳O2W `MO bV!0@?) l?"ABV%-CA+0@J.4D * pcL3P-;@A T Р"܀+f+p8#D+#aB8@{`EL BL hw9M1T3*pr+%EO/0 Q2H5sG[ K2x=;|qK>0rN?i V2I@H"sy"^,LM Sm#J/y@b Q(0\53]"P$T"ȣ,ssO:.Pf_r-=;s̕{e7z-M ibLQzlLA?,4O, أLsH0G.~h&">uy0=ÃuU.H#$ /t {#p<`q3 (&P4=xD`~ L ! 쑏 E$-cDNЌ{HC XhJ O $9N*nň088G) oȁ`H=!& chY<ŭ QsͲ2M95yK)B/R@ſlppR7 `uc0,4H> 3< f8p!4a $̴; 2~5jS.J=c`@ {|uEALt 8G>2 dE8qo""AG>! | Ft@Dlp#`IxPVt@ev0x2 >ԡ=  X %tM[D_ɟ`>AyPdq`;#n,pa_ݻo].@:P?0ڴ=΀j2& t Є8 *XEdD IqB$,XpmI@[,p~TG>z@Dqv F.@|`&N|aVo^t&E8耢Y(Xjԏp, >*ecQ̅B x1яP4A~qeA{xjj >N(]||c z $gƩ0 y*6se")@E7p[N ƍ8 pQ8s?tUt[c8""C.:M򵯏 \Xf#Bp,A-})N0 7}E* =?AP2CfA p 'a-T9"+?z 6e%q<G2NA,ʃc ux@ey:8E@As5$%6h/9AZ_Ax(x/ !|ȡ 9!(ILI0nc;9qI x $ZvP+~$@"P| Nt{e!I N4-' PְÁe۵zQpxvpk4${ Z!}i``'3 z(p+ $@ @ !(@ٓsg0;E'hwNbWg zcD~P&?1EUo; ܆%1q=@6IPM'yk Y3i `#0D ` H'j  E?4u| #V" {x`a`{#`BTP^' %Ab$w p'Pxv{[F I$lep`qЀմbDcr [p[n`OPA[$j K!}00gG` ;ڐ pPҀ 9g jqbyϐ ǰU OP/P.BMa %/S@/*'Q.Q s`$sGp#` p'0S  t< {p(3uDeT+un-@L agr: P vqPtP#@7wU0\1 Ҁ@߀Q4`[P+ ^W@{`BBf 9f0*$zid# ` Pw Gp Znp "?g1`  # F` -ˠ iXUP@| a(a `ՠ#@P ?p N2?PP^*` @ ր pGI+ V@N2@ D! `wd6?o7ce8pGVb[ƀ  Lp C* 9j~ K$p.0#P I"! !`鸛`#ׁ &0 J U:a Ӏp`H p>%;0byP{%pd'(6 3 &H pʀaha'0@Pp>@3 ,2p) \Ax= i8(wIr 6 _#z S 4!Op(puWiYC !)0(SXWЂ/  afDI!6yUwbЛ`[U.Xyr)Q,Q`p ` 31 p p151O1PI`T2 cpuMGw0Uepe`P'.<@i"7E _ ON{Ip$ P D'@ c0I_ Y@6d% ~G*e @-4PI0P pxI+e @L PT 1XW0yg ֫[$ B I נ0 < 3 q4<  Pp 0J6 `Lz! ' F/\y P%{p H!?:'07 D0 xv P ?ȠI.Y߀0:`MP-P5DWh 0yii@<_w*@~9 0y'#r &4p'׊rr[e` PPU >qx>Pązp>ƙzv$)xch#`>";f @heP:L@L`A$ YYMqI,@re0ev p Mbdbgh ]r[yQ?~[ " >p/e\/H1\ \1p1STS$y ׭s\ R(T? P`$@/` L(+Pr >9 !j_G ڐq׫ p 0` p } 1Az?E! PD`5 ` P p` @ pNt'Lp|Dp FpΉIz BdPp LE )9c 370 "Ca>2qPTj ՠg6G97V T àA p #ב??2,xӐa1 Pu@E : @ @EV E8 uEv1|^ˠ9oA z 5s-o:C0<@ ;r 0 RS2;8 <Q   AI:PFf. TDI+0`t*p#qW`I `ϰ c c  u`I:@JjmnȒ 0  % 4io sO@ 0 cK ԀPߪ` 3a *ҊܐȀF)?a iVOk '0Բ  `PJ$ځ"Y $$jKhO ,pAoP.E* "nzc5Kŋ$D1ЃBb k 8p|!.\IGpUЁ(\sៅL`PeH^FOXXqb0g[iNJ !WIzd2*&~C/UH;c˪I&>7UpD0мM)`~' |h%a" '` =tbȪh /m0} Qepp[î4(&.50_ͺOtko*6gɈHfNg#|#'*Hg2c 6z1@^*>ڣH:T`Y`<&CƲHpb:ȩc Ӛ QqV4PJ{Ұ`H6֙AbȱJ-{"aUd',cf,h!Sў&k $[&V -R*(2Ć&bF84 /P8b9,9"슴 SmЮtP4DG$HTlQň~5 }JG@1\PAN``Qꅉ4st$qa(&Mی@mM*#N'N`Jg umM ^ؠNBljHpxx̽6P,BD+ oFߊ \r֐Y(p |k+0^nb=! pG0cm) |P k;=(Ptc')zA/ XE]NBPf {A0E98e;twC=(F=iE;X\XdQ $| Yn,*!_z˹Nh!|Y-hQ "bT΀$@`c~ А CU#(a<EQ?AAށy=91|`S^p"`|[^CAqo 'CYw8DB(FX `\6@:pXx06Rg2g<:@j=$x LA_z`2`(P(-ZNU.uv97څ1` ,2A(tBK5 ٧ ũA#@r.(Aʉ;< ;2C r]8D(rGa1EQ3DH*T \ sw.vx!" +OyFl˳mED{ m3uk+8@?8P&Y^Ҹچv6 Rѱ-9b6uHeFmp\A |Q&WTl wTLpM8I@Jp$赯U>.QjyUš=yevqc:AOWhQF.tO#Ouw%ؑ.Xz~S"[_4 b:•p9kIy{\>͡+xYZq! zxW|5yw}E?zҗ Z3yԷ~T{EpI>.gu{~?|__*=E?WwO}w?~ X:q͏f?Qrwi-[.-*4kd;쿷@ D;Tw 0HHTH*TCy8pep38ۓ 6ܑ{UeL,LUقIc@[07eUVXRXIRU3p#cPX8AP`@c UPURRXQpڋ"X[#hB`:]h`P$՛؂NЅd8X( Hah^Ab(O'PAִ"=%8X^h])x Ozb9R0PҸ U]#H8R8h5AQS!QUԌR]-^URL5N+MeOȬ0QXMUL=:X0eD$ ̓PIPZ0fQH7= -RWR,P/'hVd.O\p pDd8Z0!Ț/+VU X-0<؁'] XR(H PR0u 0m~x;"8U*%CXi]0 EX)WvͅNS3QTB /%KU\mQA ]OT X]Xc&XHSM݀+Ya D`pHc:փځAP%ܳLZ&,b8IC(껟?@u #Ȅc/ȭhٖ$_#xɠI Vfgm{nXj"氊y& tU ŠV({|oH_L.@mq`h z@ rX 8J8hXȊph(8$hb: 4I`\Y2>ȅt@ U:a}>!I 4.uP x4ְd9Go( m;&(U@ H"QpPi  BLHj ݞhUp809pS18ceH8"_ҰXLeU`a8J8.΅"`ށV gfȖr)A8"m)p`YsQb|&@ ,Pde! r@ > C vO5@i@h<.=p’ɊjO!\ @C]n!jir6v|C>~(]h8j ΃fvwNt|"rLbzX(pbjEQ)3`J=`l.0@WP>  . Y, 0,692؇|ORhFRAj 4[YNȅj^0:T}OQ>ŸIq=. -LVJ;Pcȇ{pՙ~nOP`0 jG~@2n4yQOVN<ЀUhN` io,~~&= -a(JPN!tF`xnEjc&9GĸoR0 !r <LRppCJPQ`VHӒgPX[!RQ|HHPsB_F H|GjZ8FӀ<~gPv؅LR {FአU ~pn;`Ѐهp\`tcI~qn IXabIEen 8[8jph0 `3xT2l3.0 xؿ*+3` x޿_8njpH(ܸ9e/p2}܀>,ȸ$|@K!Xtȁ0jFsۀ-8Y$x`  0$ (d ~_*# 5Lu0l JmA@pHl;ȡC`}!珌ӧ-ElI/Wmޱ$C{0p_-"\ҽt= @ L ez)ZD ߹2K\4*$Bo*I2 :3o ZՑQے &ӾhHVNUSFAAXح;/ml8 A(Ͱ5aE A=`akrTǗ# =ϾeHC?\!#)-0iC",SU@ ċ@ G,&G,CE 4\DzA SOa@!|`.p 8 E%T /bEu+a/J(|8JҼ8rD +`Q#Q\{l1HQ< Nl!VmQK:i 6 02[lT -$K>G#RCKF|O>|V<6v1HGTP *X@eؓ"3 "ps(AuO:ܦ !x(_ e <$K]aa*-\Ea7z|62 h*Ёna<`w.G lE{$ HU^hd51((  {d@Xj@@MxGV@q`2uO$@!20\!Z BAOhЃA c;pH豎NP7G@=(1<(n|aM:50q!G;|OqC"oLBH@qFh <8h`8c`6`@1XM=gc|4A ač|8º$)r#䳁C#D\TI'M@Gpd\!0+0zc ݷ:Nh&JD14@H6n .@: tt9X@@>`_9z Np 7 KU<# @}E&;4Tm{/*`p]{xEhZ^HC#̰ 9{ Wm|iz?H p ipU0(8­jp 4: B.`6@P/ >q 2"$1 |TC Q2?E?@Y#`"6ГR$ҠJbF)-4!E8eXHCEq ȼ`l]# !| +@KCsBULia `xI(@BPU7/9\`@((`JPvgX `CŸ0G(TI{$0 ؅:>g 0+ 1o؇rD!`r8!zgER4't$,VH m B*D˅ <}nPECcw n#*A>t?ea! |Bx82a:%X뾋`}| hu4jG @ ~{D{H"l0 0;;]4$ 8!Gx`F:<(L8°m KrXBS]Bp\!Y<r.=}ӁF``{`ʯ +Y@ _iO['vh LЀ_Cvd^o,.fZY@YѼvHf`,x-.~КPEhGdmu|@ǿo-i D AAVgH.O?8x{=q?C|I<6B$:āKh@'<(=L <!I <x"1-,!\=DB@>!C= |a t=!00" =@ `l-40"DC+t>He=`774}dG=ԁ L 9Pʻ^e9ZqBX͂}#TV3_&؞deh. B1D <+ \8. '/p$8 xV_!$=B#%T*:PЂ1XC:' G`7-A' T=X49Hh 荂i4yC/49K/77 7"LA\V>p*<@ 8 9C+0AP*94C80|AHXP<<9,Z@B84XB(; 4>B`ł l渪'dt, !B?AZB:LDC ĆjF}A~C(+ %\ŝKtH(=x44'$ C&@_2LU~$ `y dK@xƒR7C2)‹7-=.`e\A(Pk9z7C2A GK+H]$܅'AQ@ KY;B(G|hC"L Te\{L1=@Sn d_D2T4k:pXG5 Gf&*@Z&մp>.8BqV,@oYV̓.41wNhs ZQ iml 8 &C? $-AD:pB`1<|@(C)xhb1DOA+ J7$@)< yC8 9' `\9(;ZH(hl> 4q#n@.p$cF pQ~T$؜*|$_H(!HHl":X(#꤃7|D)ve>̃'_}!8&O?Ѓ78Y(b8yBƶ?C) @054H@-̓ 0zN$@W C=XRAT$=\:Y) d2P@ <.pDS<$=0e,NHl?C Ё(U s#KT#}|᛾4%-$Xƞ*('@G2TA<08@MWN,Ev(1B!>BPV $'=HB >kVeo_ZA,LV*@X@jBs>qVV%'V|vYx7TW/JX>,Z@kCW:jɑB <Ѓ3#|WzisD! ,5\>@\@8F+@$($h$C@ gpZ$>0$2t 6 ;C+ hDJ3܃̍ݹ4N>Er4).@ !W$AKB*Lw$<5@}>13l0tR"$(*.0L@4wN4,%H+np<$)+ 9\vwerAA@A'0ŘaVGb ; .f̈ޔq8`W%)Bʕ|t!bŅ=A`aO1G&'{x9q!F"k1pćQaſpemUȓ^:R$‡ػNJFd*cTFX!v<%[al )q HLDXjR +6t3(ɠ(vxN2СN n~|A[R,L# i``?JA*ܢg`@0/l :a Mć76)^AHP&4'bɸZ9Q< tC~Fxpj#ch`QfmYAl$) `[ЀFN/PE T$">IJLtBk2YjO0&R=t"1 g 0IVjt4Pz]'-sHFc.Ff#@ãaC$¤X 7PiF 2 Lc"rA$BjnT|فscEf}O+O<@Aѳ+ ,\0V`@SS=*ϳ!X >6# t9 k%40#O3a)He>=#a ŚX {C"$1=~AH)$`GCTR@$$\ t0 O9P@-p!/da?E+@%_ @=[؂:Dv؇?H% \ mXQH* 30"g~6 #$Gj#d,08c`2Dv V(B3RDp1ANW"G*xHT *Dx0PQ T$^XCE#ȝCrWBU B_k—Fp4`@@eyF,2id@>h '%~x"eR> la=1oAO%0 O0~ܗ^#倽C)LqŜm:l͠<({ =w+1FPdtޏ~C:(#Бvo@(“wI< #DʀuH[/O7|E"P9/}Zpv1ɪz &98tEQR+pB-cHC"t  G 2`oءЩ@iS?f+`@HGXNZjfAP ?nm - I L$PaK$, Fm@, A6L DJnͺD @zA -R6`댠O -!.0`Z@Ё؋$~)~eV(n NРf@JrocAFN r vfȁ K0:.d1pha7Ny4 jvoD̄n @|䴞 0$gpm hAaJXG`6QAiBM$ ²g 6 ,QH"dV1<@ F&@Vl<g!ρ-aP!@>` . R!P \AMܖA  A>!. "A"J PAގBDHҁ(F`a)r*T֩@``$EB `|/D 7c l`4|a.*1R^`&at|VRo,i>){h2Ba)) iRH`.a <P`a/ !3//pl+#v Ma%bp .\e. NfuVgMg#bgR)%GFHjC`1 kj2$`'0^@`}h4@@  c4#kb&`<uO^@X@ XD`X @ KCm]S1jq%nkV$` C ` :@, k)V6:H k_ϫhqsz( eu`( cnWs*8cg :`O#ot1w@@r-t@Dbg$w~BjV1+@k}QqҠ`0 " p4`v$pKel`2b*WZEm,v@ +@kV*$|G k+vHk`Dcy7qVjT> L~7v5uxpkW$i`m[a DJ DwȷG@ 9~,y?H@ ZGYk7n@x 큜!5nj,7vd$0*, zp@eij'B/.4F OS}.C OcI@t6F -Fz@<HKv:5BAZ38:fZ}:5XQ H4/ԫ'|ڍ:+#tZQZRښ*cG^$sI izOtZV:vbnVɧO:dW+ϴj0eRܤ""-ZڴyNv][{:۹{X|{۳K;{{ô[2s/{D!CBNɧ*6HP! .|!<%|)-1<'`5'ٚy HR|@;}`6"fXmq t} h`^:m8^'yrc_s u1 W[ \`%O^=>0 a %S޽5u m_ӽ%齪@ЀP ~h{ݫ< Ҟ 8~ _ݷ ӝMY@Q} $AL>_G\^RrA\h@_=ڢhX` A@_=  v^0v/kw㿝O)!`!xM9+ (_-~ Ա…:rxF=A@:<*ƒ $=0cASipQ)!aAJ%\^tС8:ѣ8h@,9jY gR$zV#eIcԵl\{V9_׽tĮW$j(cM=`bC^u}TE -GO׃m7ТG3>x/=_G7(3}hh ?znҥa[$$?k X {yB Uvr N=9Vs@NUt[+@ B[ԡ^)}hc<ȷp6bm*)3$:$O:|h()բ [5&>|PB =TpuZ8[h@l?aA1+e$--M,Pң yhh2<7RvB5LG2 .N(A'-g9tgi`dU#ȊpQ5=p $8v RSkY0I:$4кz&ͤ3>?8'Php8@ñZ5pZR&-[V 2F+":PgUB?,0y-=P#JO /0Z Dr6&?7?ܔ1Ā2QZzc7Ԑ@Z3: m4<ސ+$Z N>XC ;0N;}>P$4t:D!Z=P=ǰ !N2X.zmg&!z 4`d3WTGzvӉPH5GJ=ԍ Ml}0?|Ull3/3U<@7S5TO5S5c 83d6^ބs<(6>Qf$nBNz0,`! "P9t,AEa:aC37c` "uHNA[<B ł A4rc2@ x>n6C=ŭ0Zb.H* ԠFÎ @` I&[%a@'яobE5 :e-#(vґoЁD֭`x24ﳍ1GxdZ%ǰ4ɐ\Pנ= !v *ȃv Cx@'AppcؼX@ eYXL<&7sF< !eZZ"}}x@vc%jh]M붏sHD,y>*\I푎+,R ,q LH"d*D >( .Ԥ^8{PԤLgQm̢G:А@iŠl a~"Z]C" b DjO`Ԗr$E0 h [ ŶE;Hя$EmHbXT +B) 2xf`( y ! G.!txm[)Lh G#hk "IIR6@Hg]`u$<s8E/'0NPQX=f:D?E@@8;o 1|"?cIx *ItAٸ}sb`² FJTce* \X3/x l0 Ԁ$ Sì+X4`fzJqbujl.QTA$P^ 0T.pWE:` d${B s@~ 7m~B-O:\W R+lB. Xlhz_@J@X;` ȁzhᄂ# "x/;:cA@ @w@p9@ 3E) >@ H{7Utɀ Pgp` pp B +;@`Ef"  ~1WQ&I % 0 F&$ :t@p P 1ope]%1HMcr Gb% -AP@Nհ^iPFzPQpްP$5 M` 0^!ӴHP!T %F`F zd?d xP I@ޠ`10BEz@`7@. w{'ь P cN;&H@` w#V (@`p @C]Gp@ .@! : HpN0p 0:gSpS!s; >pAq4pp1= < ptpHŀ  >t Qp3"p ZBv[p@ 4P ͐ [p``@ +|Iɰ@ PA%F  ti(d d+p,d G+0I% 0 CPFt@;0z.i/`0f @$A)  L0hhy0 RE%, <$ MP 46WA) 0 Lp `C@ I" GQ% {0TD@ )"u:;Po@ z E>nvx&tXG{0*P g @ F ;o(Gm3V KeBj2 A`_@)PoJ(4]Ђ -, <p ,@a8y:JWjW 0{"@piL MW%1Z D'p `lqpOG@i 6p@EEP*IP i'Kՠ.qƐOX%X9P6YSS8\P p$c  $ VV 7 Z`RpOwACw|i _`f& O@P p@ 2#, fcY4$@lǬ-;r2 IX p"p]3l3LG\e8. x 8`|pU>\I@qI I 0P 0cppPwI m#p48,`$pL4.iX!58Y1#3( ;P Ii(c {`8a01CW;uA)%Ѵ{h0 c-*rp [ k 0j~ gIR yA0s PҳA.8 ӟA'pbḒ@ 0-P Ch4@ϐ$#@0EyePк񺃰zu 6PK XI|im菺 i `f {_ 뵾Sk惝`y`lI`F < w |6~ H4 O b `ݑZ*p``* E{׵bFPqI p A-G)zzT `x^̻|@(/x.#Ps pµ(h{6fL@@T` 0 eH <4\PF2-ռJT /# cKu]>Iqa dUO @! Т @P gp.$ 0#пtNSP`:g|s+52d]`!%'f # 7I)@"`NRtR HԠ;P;pHE0p 0H 5mӐ{ vOA[[.B1 G3q!NP9ǐث,Yn$ 0PйZ3P}d%! JL" ;@+Fu :@CYNċ. OAAmc; c`}_4pa"@ь ϰ@ ~N.]`$* ;࢙ nG볦6y+p@m 0ð> C4'30O0P g W8tM} ol6' Z s oCpfuA(0; D4 򷋇Ci!p%ۡʟ p(>ctFWH+,wOwUb?OEeB  -m%f* I+BEbXRG1/۷]U|분'z,OHb ; @b7%@"=^)Ɗ@+,3xqHT"@ |"A)\Ňp)0pFD#xB@XɇY^Pc"cpG&L9,lL02D0f#b2B|¡N(^?Bx JaJ8!Az-5{a|Jq);@g0&a;5`G*|>آ>cS2'"VI7t`}l D3 &ob]*2. #~@:HB^ąhHHy9""+@+\  .!ń14Ê1Y(t,,143BH2) 2'P:X"Fm cHc]8A$2u\ք [@,3t/A{6!(.$ pAp 1%15ȁ p, c$s X|фYр$ z݅] 19S{Y& =⁜ tUP K$HdwU@x0c@A]0=& PEq{T* HG"# hAp]N\`TgFvHq# aЀ HhT赭ܫ;4ЀWd?0v$ R9:rzME `J(ʄ K=p8CX|hP Ps@Pp { xye|@2H|P!ByI؁e؇>&h;I)Zyے;~΃/@>`|0'@XApp` L411QLhBx@080`ˇ/h_h 6x{"p@,3]!u8VP 8RDQx*ۜvIOcX ϰF_DU;`:@djpmȇ{؆EIxdS9wYke|\T \^M5r VIyGUNR` @rpHyK1S(oЅX@t؇] 3'(gḣ*@e i`*tc\ vg0c2- sVSㄜ[0#Xmˌ θ5u`1 -SkM-2[`*PE]hU_s`Ңq*tV{@mtn(=` AX]s0QI0iZ;sk!x3kPK^ qK\W(% b8.]EWT` ؁* k蓕EޤX X2Ӏ&ۇ{^)58*_ [CY-B}pA[:kX#ؘBN''@ Ѓyp^"c %%* 5RЀq^x`'Z*CЁf%Ņ0 V0q:&5mq+pQZ_0 ~0`aD_1ޣ ꩠcH`r@؁F+5KG`}5X#`bRҳMm|(%>FE-X,'Ha28 }PfBf(z h| IEP#eC#|im to!  *(Rzu^oؘfx 8|m[! VEe‹&E8Ts{ЃxMƜ+_퍋 }0p.I&5Qq[8EZuZdefhRYМ脽8'hS_o YO t0`cc;":n  kf 8h 8 0e J0cCpx1YF+\;27͂p3.@(K[:0(pT =23HTʸ:xX88X28QR2 -U28 hhf<&NPG! <Q&T:'ĀC X4!ɒ8 A vt<RH-Un8(12U( ́*pnfk8UPDmf<0}/&؀m/:( .A2q/ X.oL!(<8U0-lB#o0D Z8- .DV00ڴfsIP5ɒ@IQ)-˜8<(dׁH;t(($>>HOv-W{X (oXx4p4e`IP p0PN[H!xuj)p<`xJNL*X9[ ?!(xq;#MMHA 0]1DSQ%H$@8{>RC׀h `"W#Ё D#Grd޹0Î#u/eΤn=6yÊWs@GCFWRG]a VhL (B8 +XQ#r"C#P8pB 4 #0 '\(٣K2 IaL*”TT(I E?ĤPO)mR%IERp6D y| חlye}(عK9՗0 }Yf.i2?`zj\ t@U < t DH!0<N 0[8,`$<` uY:!؀ 8B)` pȀ ,!P45 (Pa  V̨&-|Hc0Ԓh8` NT7BÓ>VGi E.ь[) eHchFVm4PBF+Ё`ho~;diPD,hNdew Eաx->9@-JQ %`.,Tq(h E3E,#„ s! w|^* C+`08:AX/D,nAJ2ȅ'Kh Fs"M-\{V<]A @]iK>N nDn\1X |Bᢂ $ͥ^ahJB#$7X'`'$R 4F+XZEx4#!T .J D Ё!ZA` !( !|Jb+B(n ibXOw]$#vwCYbFs"Tq\ Pp/b@A B]4YRLY;t<; l9C$(<_5N$O8 A'>X@n<$XC/lxB:<ߩ l@/<_>18AYס?$cT _:A*t=Cɜ% тM`)782FpaJ38 h & 7%!^8!M av;P ީ&T8 C(2tB=7NC` 6?&&- ء$ Jߑ)?C' :^. @l RCޔȠ9­ 810 |r.a/,@t8A©C1l8 0C".LB"x(D B>) & +A B''P4 B $-7`'fCP%B+ \|tov&??4<FB2)@sR LA5<`"B=4%C$rb9C()$&lC`&V!2C5lLA'fB29' )C>@M(#pA=C''P"& 74x#L*lCPc@%'$y+ bB27|l~$,@0j8 ] @B:0,B"00H %H0@*:Ă!HVJCl69C?B`804d'&P\T@/ C+H 'y&'VoB!>-  )zTsV%xl'2D :܂!@€bB*0(+<$!h@8.C5'pBtKh$B"p0@A|j5dr_*LT'{tr.x$2d  '0B'qZ>+H$#bLJ0t@Х8 bX&Ta^XA^FA&  @AY TBJ @$ 57̀44xP,@$C?`E$,oŴ=",2QQ@)2 A'('A?hgF@HƂKT!$$=C(@|BDUj, ?<k5(0H@6pg+$d @B>:$n- (4&d"$ =,d*0K؀#0Ll`@@:؃ 4=$`>C BaT =< *K = @B? 8>C(4,yNQQ';:a38481P ;T0 ,C5f7$'@0B<(; "0$$=Ă,@xq,`s)C?x(L,@U($?l<0 x:p!0A @.B?&=+\At4@ h+0<O2P@[ c0C,,0PH @,pv[[$\B Mh//XAhx/T?UI><(<C:LA "A+I Ty(T @3$ AAA0 CWZ@b7, 8 C `sNmOn?H 7CA" ' H6&C\?w8I1D?d?6C HLCpOJ8B1,5tb f ?rv4@!%rA=Nc "aD&FGM:G0{v\ޔ q̈P#3̈r TrB 8 nj=ݸc+^gBWQ8[)ʁFEɷ.7{OŖpDAzn?@—X1Nu~& %j@k7xl0 qۆh"#}E 脊(~-#`~(8r>bK"H0?Zpb{̅{Tp@=2>0/"$V B(83fsP&I0< < `rx"ŻX ` +)>#ro_(@'#3;N50Mpt€UpA܅Xa>:o"C3qs?, O 2L4|`'>nQ|me)2<;|*EH%&4$XA'AAP :`Y}D3A 9l.p~yKF󀂜#>\~$ IE?A @H$z(py<I^XY" δDUɷ=! Р.&4!\ΞDZh!x ¡ 4R' a4a (hG@0GN`"Vݞ5h` y Zƹ V<s?3b0!a@ @JM(KXB 'HD@:N Z_!44B.Z O 0! &2 ദ B|!]RTR!`¡=f& vU|2If)#%,jcCFEcaX b!$ 2`!H$A$@\v?,Cd7:qg nnl<  $@AY8K<!&!bAX օPWu{m J0,*`!Sxha<); [&UrH  vuI>GɌD!JAvj, } `sziz TPTvvO&TȁN0SJQT@Qw`CvԩvAJ(faRa` "^ @AA$J+,`!8V R7ô!$P!OD$ &hlnX  վHI R_'6` i&`~Q,:CSo"Fxn oU!SMR֢n10"F` Q$0\X@`֡`X-o*nJvv5 B` XJ !9$%Aa0; _K(̖xa `dXx6$!Ug4@6 0&C  HQvOc@=@c(T.B= RȁE@@ab AtaXA`1Tw+젓Xa  AV$p8r@=8ux zx0"z&`R  tC$c5?/.lW&VYϣv*% ,` x`I@*x @Vh@<@r`i `ʀzl] Yh}b@0`a%A;VJ!^` bm}4a_ -? ٫ jVPd]`r7 i`1@<2AN33 ,SyR`.nRq@z eLU}U9͂@bЁ x2 `!+8h>!$5nA > h@Ah:"6 qV` 9 DmA $@ʗlH!ta H<6 8C ʠz!wSbaϱ] : [ HI:vt@'waD@T  ` v$`` B #B,)F d+P[NAڲey0Xa]|r('vh/ĔiZ]!c߮3H$ |l."*Pl)%?Jd`AE ;Ê}H%S0ʀSCF"^4 }rGvjVphܹyK 6, #yK% }Ӓ Oҗ-UAFpwC\?`IVǠԾylQŐS:xSLd.*lk;'F>@f<8H f#n1 J2/sN%T&e1'4S Tcy:[ |DN*A Ji*, G1W5yӀ !,UT,P9&k '!ut6+P: zN,(t7 ["\)A:\Fe8Ds .@/##EMЩl:L`Saa@$T\N+* .T /GK*\`8b6x̋+W|AM> 7C$?cM$A"ޓ *χ\. ˞WOSAp$RN$@=7:xNPBP0s4U j "0M@NN:WTKЊ: $;FXL,ZF|6jpȘj-D69M=…3!B -0KԔ<a;.35y?DSl(GwN d|xBatyX e? Af[z P'(C3G} HDΑ5ZA{|;`q%ziXA5 GY v i&}C B3D <`Ӄcܴ7$Y *|h Yʐ9)h S˜tx52#2@58t S Ӈ3ħL=ŎXNX H=¡{Ђ d=v:"yz:XS?Ё0 |X=11l@;@.}#I— # 3͌V>T%R@L,*Ͱ,@rP=rQ oR:H+m < "8,m2<=R-[ .е3n=nA}EI_ FBMƔ}  (Cʴ,xApt )bN/@AD |'$钽}M! )ɿ..Tb{@n`1W{..b!da&Ha ,cQsi(81pPT[#,p I4Pjx?6o0`87g k(:`ʹ:AF5 k4#@F5|ˍ~cP@< oH#A i@ 4#c`@$Љjҭ$t@Na81Ԁ.cpC7PB8-*P#]X/b0Uɷ9IaD2e _! Pc9  LjeV50@Td# & :a\ B T "SZL/m8 ^ `0턘ֲe#[_ނ@/XCw fx$>(i \# YG䶹*A"87$:mWIrizA$2^i4ZdشɰCĽa#WPpbamH l:[Hp&tT#  t#0?8o*&` pWGu` lfE{o Ù$M;H5B4pLސo^dj<ǣPuċ"  D oTЀ`BT˫q$03 'FՓ! z*g?e3ҢAflD|v*(0B<{2tr0ƀl /oIႯ0aW`!]PVƢ/~6* ͯk~.Ђ >`r h`^XFdCNPS~6 hp]PP֣bFwB '*_ (6`*h$K;@6". 0X g=~ v<(. `G@ :e[:{ׄ p[MNX~9/;`Pak@"0*KawMR4UPNc2xii@46h`U`9s[PGk($4  b e[+~LM&#a!9hpH$,1@-H(p` 02E fx(`@Hn puPPH@8  Ѝ:щ8nh0X`؃* fFN?e^Xh 9X1Sp:i)6i$(3G #Гe3'+)``[ }u~e +8ePC 9Xu# p~l8vH? eЃ6\|bVpW1Wp9ncqEV`&`7' I%_c:Ec"oY)%" g9b)$1Y(\x/Кty9yiƩY),/@ ɜ穝@⚕I$q@x3ȩ '׉Y9\yaàSRΉbAމ&43Z@:'8'0Z *E*iBc':lO|B;E<\6> y$ۄ;“YL@al[PdU>>,>²F@;0<C;L0lBP1h; 7L;@)D@:UZ<| F0qp|ri\` pнԽQ9 y`AC—,xPEwB[ iM:5i0 |LjLNp#2,1Ǔ0',+нCPLn?\1`A> 0 i˱A?0G`S0{\GH<`i|Ad \];Z>{uR - D; .ʟ`:E>*F9MbA TWrG ]mdaBQ;rI^mnMPV}  Q6% tPm_'pֵP@1E`&4 @n}"p:v00 f! Q; L`Em0 90"N /0ESn4G %aAhSMM bn$4씌@}%P|sK}F+AF c`Buߦt/:'\3 EvvQ%iA EdBs ,Up/>zuצMN@4~ 6rLD y9$PPK @{= 0QðP(~F 2 p`B_` <ק, aF`^ @w OnuQ;Fba] رJ!>{* p fd?-Zd _oz4Pǟ=rC۷nX8|TP>t UKz w,->a8x 'vl>jVP8C`I6!1o1Q^ILvϞ~0vdɓ@P޺gR,vUу{Nl9 ,*H72>tTDZ:v惸ƈ-0mSv6P;'\uSJŘɪV+"Ė%#w΃I NIopaV \p z "h8^ p&p 7p.C#gsjAXpa~QVC@Jv@rҡ^F'drAN`j@XD FbPa(" !ah2n%B3V.+ WLZA @ 2b͐ NGc؃P]DF>)v)r rGJEv[=zр,miD@{<8CQ)jML€jQI:E =2lB :HFD̾r4xC9 \ځai0ƠG? qߢ0QdE+@=ф8b,5Ұ,HIbF<4c.L1 :߸N]epNZ^M1lT&y0I8@şTXLpT-xȇ7J[8 |@AVP -Bo55, &$R 0:k!ԁ BX3nXFÞK Ԡ.p:aeh$ċh@:G7pp+p G0CRsq1h.\@ŢQ ;EN-"Wi@$ 1eɔʰNπへp/ex;xO5нXPGWE^o) я$kJKя@xB(LaЅ0aAT;Nf;8>!@C=ydC0wW1 I (?za҈C. 9u/4H [hF?1O)+A1xeA xxc 1dt{x fU#zXNi$9(+UPI N. _  'vh:FKWCV @+ȉΉP~Pg(ظD`|rЃZ >:⠛Ӂؐ@ՠ@ ؂IЀ20 4jGװ{؇± 0 -VP0o0rT{ $}$䋪{267[7hpG03=3T Hs03`4-b0)K{L; I4 hX!#;^L##Hg`${v8-s2*jHx8)A<54`Cت!ɶo( y>{@0E;tt ɝ( Vs Cpgۅ '(; 9}PiZQx8{vU| X_؇X gx# %v ؅HnUhld`X؇ Y~FXHj„tX@`@" o@'`>z .Dt8A0!m|Hfpe؇pA'82 hM9N}iN.v+ zHj,E @#O 'xuA( 8Ǒd#| o`z؇c\ D, ;ۂ<Іt oy<Ⴧf8 (R}H,CЀC8o|s P ᛇf ^Xp.BC(C%BC8C0yJ`1{rA=tV "hl9#( !+8s0 Z @NzHC J|Vx&!80D(U0KɹJ؁C0<^Fz j֍'؀`dJcZx *a)$X85}C0NH 'Stpu{3A L@IWkdP'ضP@HM V0ux K_PHOH0XX2xn\U@^23֋x tX3eNopRj$ȕ"r$Q?]  o`I8 r ,Pxt|]3-A`^{p|F-p@.I-x20t`$xع0р*HO$gP{.Mz!ŀiѧcX!e7c5@=&lpTxT8#0Hk-W@Y R0xp%h"@/G5"Hف"Ё((عN`RXt^ԺH,>I80PCȁ\Y  Ё@=]^X 2ԕȶ I/ H۲oO VHt@P88]`d I]@7V  ^ [V,]28) k%?iIj>9!XzR ]A?آ˜;#0$ `2 P g@XqS]a t|0 |8iE~8(h%2pEx^a<V8v) ]CzX l bJ`&iDXUB@C08<=mѽPZ2ٹAb`5 }v9PgO%=fۂj XۀCaNVpW-f %r`}hV؁LG8+`C$[H5H[m{ b+ĕ8$OH`H Ňg(؂qi{FY Cn+xg`(ip :.~<n>0":sѳ09#؃>a0բ.@?{J0LC$|cB6deriv!^XX\ܛ3IХ.'ѕ 7QaViL T xt &G50Ѐ8WLՠ*tU|c`z`dUp~OIpP5G& Xm@oP@ ˇc(]8)p<(]!DiyK4Ϭ &p,!QusXi"0oS}Ϊprx02[)h캎@ux2JaAP32aR؇ u 0c@rȅVj8 Axu=h ` 5LsoHi(gPXE^X KPt(Iʎ)g&Q@޹p(#8(i>pHc pX;ko_ѤQP}Ѓ@΃j@p<qZ#8g"$ bhBPG=D$P$ Xf`^@5g KD@iL0rb[PTPQ D<Ԃ`w$ ,` B~H=!jE@AAI<%6xQrD{JP`"ic5tꆣ %Ha*&h:޸$"7,y(,F]i`|(~ fe 7Ct``= oEUяmgCX#4nґl.hQ_{bP.xc U €Vs4#Ƞ-``H-яt|.L1Jr52! i60Z tV&w{e<7CR!p0!*:dpg j9[F@ HbǀEfROˀE/2Kˠ0|4 :,W5$ X9 dAт=CBT B3> @plCh=pC,B %It՝7|]l |Z,@289 C>H,X{m 0@32Ђ1XG팄==(*܃=TC,G>P|O!5G5$A 4̂qCp11PW50DŠ#.d9ºԁ?rìɁH>X/ <̞:C2LBSS?/<٘IA B1/Ȃ| \/* H35DE P= D `5LA?P?؃'쀤Ġ7[1?$˱phG ĀV @?8|CTM @? :$QpŹ>hf,SV?$DI؀\m&t&eRj GTR D ePL N;C LSmJQ ŀ BA0PñwW sJzv7 4fp[b,?G8Ed*:ʆR>BbjByȍA7AR4}i4tptBZUM܃PRgudT}ēAhe <0(K|5NC( X1|AoIEQLGW&p# i(@Ua ԡV))x&C.YL Y ܀X @@hD j@V@HA\ D@@|ȐdB+B tA`֖4lAB(%K+'OPAK+PlJ ` l@Ae#+<@AAȝK'ALlA!|A!J+A֕6 B)$ʤ~$'WPA,A ?A.N@žAdWN@F봪?A(<4 PpB,H0AM"n(:B ܞAo k&lL| (tK B+HSt-K||!(m ـtBƢ@EAӎF~~-g@+nJt->  8!B(N܍+tme0L/$$\gHB+l֚`MH0,T­PS$,AO̊8K p@W#Pf޷z-B =CK3B)HLȊ U<+ k:k0n  &vblƊApP!A֔VThB)!̮An@i@ pHXM1-./Ž죮X@?#̙B0XAA@\@XДc HL39ilc6qmx>Ol< ˝ ?c;=dz{FaK؀:@C9sW|  ct=; <|s8 ?393 h @Hw ?)$99д $sLE KNW4ѐ@I\p|^V|?<{|s<ۼ{9T4S#}һv}'pK=[ctcO2k|<{ד|(s+4¿/J TO<*{L>pc1@@&e$W 8@0^cj#y8@(8_Pk ~6@Z1- |qСC ~wV~K~낐is }.@lS@%H/ ltĀ O@(0_A paDgB:hcA4bdA҄BmX@c ;Թf5hxqB1r\Н6|z&+8hCm̱eK"Y$ƫ%,`HWc.PH np ʖ"p[ X$`)Olqq֩zrh8- ξ5C9t| ̈Q q^8"Yt 1ܝ8Y#Òc!.*aÎH\tA2Zn)k FC]X~$I]E J@ZE>ʂ:|IMZhĂ^0ke )=uEX fF#$J2T4N8v@t^褗eQG,x*˦xHu`KfQLHtAf|OU2:l@T7U' XZ]Qcc] `UTX TaQXcd༎ṇYk m-ptQ*D1PXG5ccb Y*`5]EȆ2d8@^!:Aх^b x cH`a+`vcT!B*B_${饓 CtX3 bXN"Vߪ s3ʼn l(a,"p| i2>^V٢η,РGU/ [(Y5 :D$9B':ŗ.6΂.$X4'buUt XT,gRhiFUJw lc;1B,=o)ZF@:mo|?><. UAq .pCH%.Q$%CeZD{C(t$ALTb3Ql-P<0?сG:яg";qH#hA $ ;3jA~T#xp %]sWø$ cu`IzW6虙. AX `b0М8w<cIè徎0 %Wr|@" ^:Y @*TN6IN) c dE,DcFfNHRl2# DUUW(Atb-BldHd"Ek T \/*UppCr R AS̀p2"BNpJ`]D> Ȅ!$!&PF)VXU'VGޚXU[Db*ش$U|` \$np`=#~@*H)s;dR H#4:/LG(Ƃ 9 q#|U:G7r`7ŽҘ$FǓOU#DQ aw}P"(q͈>҂  z|NB`|B~#6`40)`"``áu!0$j)2q 4zH.zIl4 {|`s`؅ tb$a]E˚PFxHX)BH sAxG6POxb6ы)'+ \Ñ =xBTP J4 0u](tD(vpv$8!p 4j' )6l-nfi !4rb` `Jtt) $-`/a N-'*`A: c$(X@!V`DF `VL聄^,`^ $ f((/1/`.*.:|@L !ج*!pt : D(d0v|pgoȁi)>J*`z8t: $.#:nxp z ,F -'N`pA`@zlmb!`00&a<! ``,qH `)  l %(A !@b 2$`!az @a bH  0 f Nf!3z, H4!i#*@򀟄 $` 1waZ1h&OTa o*FIA@"ma  a4NE_ -;"ˤ&0tjLr"$*`(,&`:l0kD7< ~EÁ$ aA:a$D : >SBYA2b'@Z` `d $@TpAq Bpa^! @xZ9Bv!8 !^36nl`L?HN^`a`! 20qs!&!; ! *#4V ($0)fn (e f "-"YC ԧ#j $@)$a5bv Hle|L ) - ri9!$fwBTVv!3fҀ ~V7bz!$`a h (cGϻ<4`oa Px*\7 r42v 3wc쀀W Ғ`3)JLrmlbfס *`E4wx 9 aO=!&@ a``e@4Ά@!AAQuMY!UE.)AEl @&b ZUw,NaJaAJa U_a 01C b) Pa \  f " A"Ƅn?"^Z B ưH ̉ Ё쪡A7)UTW"F pȀ'у,3N`v`ց2!a=T h`o4밵|n!$v@Hu^ZS L|Rb "n^ 1, s}b`Y_C!a9]aizlN`.=6`F|A(B`Πؿ!vI76 v!bXBs)? rc@4ɏnJ r1;aXaM| BlʏsD). wň( ;IX̔aH@Ȁ /ޏZ>T!H@RZXw:@(B K;=aLT]((:7B Ҋ޹  { ΀W'fʏ: #ފ `=(`@`Vb9b`!bdssN^,|ٻN9䠔7%4.Uſ$Kcj B_' [&M>[Sgh@t wրܘ/zza×od0t~&@k7CZG^t}߮^p ݰc@nO-+y8='h8!gmn)@?F`O$Gl:5Lmq `.S d$ 1 t]9Q&=xWJ p:O,ڇ45' 4ЂCE eƀ( 1#3p7;@A_/0.R ܈ /@rH.>@7V!H$ :HAtC!4p! s sZ (v$c5À3O,M 7jr 0#1  [B8pC1e`?  },PN8|˛CFu*x C1 n1 =:O2d+_pN 19,`õ=< 6,0? H/ ,5# $@/?>8pc6pz 4PE,s5$ 173O>bVӝ=5>P`rtF?xO+ +Zo È u,L2L/5t7IOb=t.-@7W¡:?0N!Tc$F_~ L17[\NgF 3 "̪ZMp:ZrLnrxD)>! P2 BGBAEK f2"[E>[cP5Z&7%`H` p3GS!ԳHG8ؑ dc<UwbE8/xc=@BVkH(|  1A?+aX'}(D"\8X *Q%P 5Bŋp P "@DO:'IZ$<FBUc`h BpuE@IH` T,$Q$P< Ji.`D:AG񆈳G2@!  ~"QÂ`ҴHR<,*O)Dh@2/a!AG2,=e 4ffiQZ:Qc@WN8l ^1dЋ1Ц(XAM>xD 0=ȎLqp@}X6$X##KaZX؂uH:@ @ p*=1j\qWkHHk |#f捲٠ ]!|#: *@ @dpYq~G6PPCXG)"lG=A< X$ jQ PЌ|X]=!A#`LUWD[!u,E?y".u& ۘEX uť N0 pZH`jFC8a)Vp7=`\F`$rru,6J}I%PvIáf08;V`9ƂG2.,PC3u-J&k(jμ[$ `G5! "v:PԠH HyED$2Q"L f8` P0` |PJQ"8%-VR HpC0-wh G6p"P&'AzXG0t r";p*؁/W2;! ۆ` XGQ0`@81'$#Bhބ6CPP(Tcƈ,Zhsc, Dy4%V_x:+,e 4,LɰtH(4iI F >s0bOCP=M~X ]@'LdЀ` <ࡊDppdްyzb <:O G"0^`0-7vS  * V  `[qG0|X%&E,'0+-ppL u D0c7(0 hS P P @ DPB_`(>_u41(p ױ3|_O`{v!%k P 0  ˀHu @r0Q 08 Љ ``]Aeai4t$ ;vWc?0R;PX: @ _00`z "  &QAHMT`:K qp00*x,gp8 if5C- P@AbPP`hG P`@nqEK y UBPl]90 8# G g{qzDq 1(!"bH"`&ذ#&Lf p p& Dp!`JpO"" TKgd,,ް0ypk%`  6/e@Q 1PPz 6A"%U#1u9`$uu:p-@ 0e{ ``w^wB , #0P0yy x hGpӲvwP@1@v\qՠ䘞p!tSϙ$@ Ǡ0 ȷ |T  z \0 ?m ڸF TxBX 9Q>7P` YpYu pӰ% z_ [P;Pɠ*ɀo!@]RQ? g3pI pWR~ڥDE + j0 L1sZa _e 8 QG` @ ШϰPz:꧹M0 lіs` vZ{ _`c0@pj: A I>$p .֗?^U R%` 0:+@ B.! ` ~Д{ `P@[ k3@-&D 0 yjlN %P*j$ bP. 0˞wbk-j   [04W~:-&P4bjBON`ǵ @@OFHH)R \ R > R`2uһ w$I tw { 60CՔd0  wpd"!Gq UM0 wgxr@b,73б&a/ֱ p#0T k0` :0@ J p S"_0 "e jap=JGTd]@q@ht !δʄހg(upA q1`p DS G zg`Ц/N  +P P0kPS@q MoFq b -|e _8GPr9zXS"1 Y- "s^~q zLPpB_Tlqr"|pc@ + s{Z?]g `vj @t% &j []Q tp iILy@ Y Tjb [ 0(\`z@vpCxd-v *}@  ;,j, PCPW!iuPdpzHEi6Zd0, :aB]| j@w0EПw"p0k@c}G0AXt@P*ppPx b@WT vƁd[@]02p01# _cW'4 ݞa"5?a]iPPua<,`bO3^DXAQ;0Ĭ0 `i`٫4r@j ^8 e@02נI0`Pjp! y`4N` bP ) YIH]YT `Vp p䕐# p{ 0 f`Ry&A0P%2PWuj **H_p0y ` Cw N0dĨ2 Er pG "ܻsG ug` p WN*4ip ,|]ES@ z TaqP EPQ0-lQ@ <i -]E@Ct ? P=@ m9`Pr켬kp vP=Z]?P8pvKl('F,@|5 r0 b/`upZ.5P,0-G *8 -,*,gx*p,CwSx5.;v D 2K}a p+]W&b*s dzOXKa"%pӵ[%ZugS{.8. p P!g[0-_u֦}5 S!J" 1I 20wI 哘/7*#G/f",.`?tK&'u7REoݖ/6 JT|\(EHb ; .@ 8ؑ#3G4@q#YP(QUڳPB EɪԸ,YL=!nƄX5r߬ ځ*jѥ[U? u7T/e%ojA'f WHn IXE 9n$Vbm`N:4)t?nz)CzeIΚNvDF謁$:fT@it9 zn >* % Pp^ȯ)ENDq0hhƘ @A H/PXp,GN$@@$ X$j`$q <3?{ *& A<(@ pЄRb t@bQ$ H`E,jZ/,`b(9Lt@?:Ȅ4PTЅ X8h@i` V[ -4! `H80a+J*`W{Ұ#`F7x0 L7H5 3eR0<{W'N1FॼV|F@c>.p w-o  Wǃ![<x` "Li{Øʲ `2houB4-mp[&w}nt[^  ޫ^xG oc[ gxpG\+OBL<ӟFo-7蕯\~Y!'._Jo|93y^#dI'4t ?=!: ?O[unXsWb_u)lWq_.axKlg% vi#?bp <ہ!=椘6YS&6< 阛CPK7=-L /z\{<`_Ww ro|^Q~<z *_}B3?ZdOfcNoANc_Ao>i}/+<>C>C 03@ZS@ =S/+ ?[/ÔS<˽NP@k0[c0۾2I668.9)B/BB^ xC:HP#HC$,>+"205"؂G2( ? L`$0)z`#`Id=,8@( ,ߘ$O(&DH\#=C9zP@hA+xLDVԁHTEIdDG,I4H?CE})PԃL$ 2;ZCIy"H&0H/+ D\:H8'py`C&HpDvFmrE1FGc4]L^DJ5|)c\ė0ITOI1G"7&JGȢ!#HEc<@ `&HU<"Id:> IDCIB#(A54@8((I"HEUI*E }LIIx_SIcXLc$9!0=`I WId  (JCH8pEIL98LD&PIF8D5EjdT0G&`,KL4C%(0L@ʌyLKM8y/=H"("ίT$N ف#`Ńhġ,7c3W\=ظB+G/O160&`}~Hr( P{ (2 |r8#腈ȇ*I؈ PtF[ HoP0'(O0~'( px Ix8Hx} ^؈݇48.3Q=$ERp0I0 $M}ءҢ:OxU(4XȅE&xU '3>~{1oA]:Ph=Z 2`\ERzj*@ hLC?-9ER{U*H7&')QWP (H!+sz`|7# Ѐ&[(#МA h{H#pTrіSVhRlIXYh| x6pxU:wd/iowP؅\Qu7)m[q{`8xT:  9A&$gh' 8t`O~Mp\iP؁U@p:xUCgH` ȸׅ}ߕ wP?+.7y c_P6j߈KuxZ4j($b2'TkPvNPcIP~"(v#(,dAP^it`C" 8pXxfdh5Z}Ych]>r^X0 I0UxWx=ٍ)bHW@~)ЌWLjO30 8؃Tb<©r\0pZokt"xd|*X[#'‹B(q"ʼn [I5yOEÑ?ĤyޘAEɊi`4"l4FAp濋eZ^uD _29rPZaP:<( ; IeI/HW K e+eaM a~ն$P%dH8(^@Ȓ/LJUI^sVD<,wȉi4' JQpvfM+"뢆Դ6DăI=Z@W>VxTe R ܳs= =RC# %>?%c1Fet:t >8P DO>F, N (Ҁ{"0,=$cS McCMxU5,TE;PE:s :BH0I:"E( QG1g bO?@# gMUM%@:|c2,BY;=:̳9,D 蒗 0K>ޤeE+Gl9,hA:  4T@PC?s%BDhD3ET=P /\D@P { /$M5a dҤBTNF@H[5b P|O LCM+N|PXP1/ȉ${c0e@iE%&<8i&8Wl=]e@@|Q0Prh<ĆwN`MyB R&,hF(;X@, C(*g" +ը.p$,` ]yB?(N51"x!=#l't<3r(`?a58ecLHM`GiaNTL &%atE젇!h@ #Mp K+`HZ$0rӦ o^gB1f'}:W tP,"'"aSp`a&V yX PjH$t@IŀB,Ua,}c ;XE?1g`] P ԁ,Z/<"4A ezRJ/eG8p n(%=U,*ǀUc98zQ @~ifӝ62j3L"< vV@ ^8AD`jbTh^ 8,/|p. 8xQ(q ` <wW.UWs!tGWN-$/@os8<f4pBq 5`́ aG)p`ކP :Q 0xqݒ1U4&<ZGs |!+PyPBѲ4ЁtP*Cڨ 2U`G:>M0h(.PpPa!!BbI\ F$#M2G\{7l@$AD"X@i]-}ʀL?1|T#/P B &B VaE d(F>sCh2)4#N#fj9V缞@#CP0v *aux DF-tP 0H9^ {pA|H qV`:P/La$`}c!2juHb/y+c &:|5gJax*Pa.`u} 5\,vp )< p "p+4Mp[ZKȡCs?Q0`3Pcx?B1lb"hY {vu0 MpX* y,LXc.:Jx @  # !b, V3 $s$X ?@!|A+?XTD<A5@3PNe haB;N `&Ѓ2BUlXmAEr%C *4D9BuÔ= 'A 0@l! XCT ! C.p=P8(=8:A'27|C 0P)| BP P7`yǃ0BUD5'lH=p#=0> "}lNYTE5¦۴ H C0@|6 aq?܁h!T?@D,|$B5_/(a|>7\I 78#xBBDC|TTEC,0ц5[Iɥu\(x,|0<` 5<#4.}!AIbtI=9 t-8\2E LBJJDèY'm==;b9B7ؠ.".óB$#J:S' 9L^ 4- @AgCh$0A$Z!|#x@ 9,(h0Za厀jX:T+B>BR809Pˍ_7q(͠HRDlc2T8vm),@(PI @A2C=TC.p_;1@.(5ZI+ o5C2AF 24C'4kD`:,f.*7܁t#C:`j 01C8B)C5U@'=,oD4_ +%!*(j@u=0=*rC4@CtbHn/ sCkzC^H18.$ K1jM\c8lSD&i1!8 <ˆjBFdˆ*Il=&,Pc÷> @ ??!]*B>F PzB/|ECF lЬS>D]C#@/|]]9,m \ B\@t([\f\:]%?`A  !CvR ^hpTM@NCCSCMx,R?LXv"`v2dA'Z+`@s="e)NvN*8vI4l(Cw%~Si 0T>&JQ8ЁA`1x4`a2 l@z#9 %NgIBD 4x0`nڏ!OW"1Az40Cnh],U,An1x4t XW5Q'%R`t$AB) > x2܃SPBl t& TK'0oay4 x#l##H-0$ c?j>0PzND ZGZ$P <2Ѓv<B%J,B CJ̄t#|٠#P@|=CB4jIˆYDzԙ>@!q t!(KN'$@o@Ps) B*+ tyx@2HM @zǀ:|{ f'C>C5d6 lU4SN]аaThdU5^#0@UB@XdiZ~[b5Hߡc%ڣ\@ lVf<ĂT > (FH@ t'Eȫ!$V/0x_`#:HAuP@T@OplC? <$vV8'GClieC3@AAT<@0HS2l|AvH l:1'HB>HPS& l#Cp=ͼWĂ-b2U_D#Hpp VDѣO NRJc_LƟ,:{xm=0r yfR`&% BEjQi ၆ d A"{<=x{1c˃ ԡ/ӎ^A@2048#  ˗̆-H'C[9A㊰weS ۣ4b|\P x*@(.hhVg:!AI$ $PSE#@(xڠ 9$vHig3\ A6P8IS#*` @"v14$~xf1(pf208жfpYgM{񟿸|i.ϧ"RyA&֠=V<,U1Í-q1Ue]041g()J:o <`H87 k| #q va\4M؁ 4 ۄCpa+0_P2h 0 F༑4Ao P7vыp#P qpcOƵ&(BGhs| @ԏ4?Q !P?,Y( z#f##*P#p(0^+{TcV$x=a 8@IGQ2t$ >`7Vh7q4TS?b|``2vA}C*؁4g4l { ` jTAhF+ThT]lt)1]0x@+ `bYVN4G8q 9(F<ɸAÁ'G|hP2N԰FH=f2&dhi? KёnCF.g3@I@-il%o8~*MxtBFL{`8(,g=!l :R|T'01qcBF@`@tqwq!t dܕn1)B&0 kpz GeoG?n p> k?Jy[ ICT`B~LЁ`, L 1Uz(EЌ0 ND'r!&<{8ы D P@TA<< iҖ5b5I4h1L1_pS" :'$ű`A QCx8Pr%"h 0l@MЉ ƒ ۪ N.> 8 {nʄL08•TĀ'ȁj;$ ʕ1m&U'4No0D As:E,?}L dF=fgp.MbǐZp=X Ct^-TΒ 爣xHxL,G"c2,eW`kI8 sNa+XIFQ-뭕:'cIrpc"%PHs 01X0v0E~ |y]9Ha0JxbFJ`wʐHP F~l+89[g=&*p]K Vv\AFBt uHB3|C ?xp$Q "%ce>2Y& ! |pQLG0` j|'@ ̀/h@ޠ (aa @d ` lX xm0;N` lp < p m{Q U~'$ r~`_ Q6 $b ` ,K"  LP6V@"s' `uDG֊ G~  a b"b ʀREh& Qq?%? HQ&? 1q' B" A I m+?b` a0aKj0`2q XA߾*#K 1"p q U! No#D-s "=b5[ P򫠠/?` (-"OtQp +"V;;/ uH >uʑ9x`CUB?B@3b>@=B?ߎ}ƚX 39> R4">o,OD'Ej@dD1Lv?K K#BL T^͚(B=kkK~~ﷹh@lX ؀Igsm$@Ƥt.> ЃS  J)}@bkkcw~R[Xw{؇X4@7xoB@RB.8"F@cxw_8k+fxY˂،Xט88xѸۘ} kABkw" 䳌(oEQуtyo"YCˆL($VzNc 9T67=^4`dF79!9MRؖ- []B5W'+yH^]ySؘQ_'SyR9v9 ւљْ9H+(N1$虛Y'F՜Ǚ39'ERD:T-A١kۧ]9;YՒpCZoV@BO@#L ".%*8`t1Xp esDb4 ?8Xz m &uW /p ),`bZڝؚ@1B`b` 2ڝ> `|Ud:@:", `.5`0X866UDP%zJ 'u 4#'m` B'l`v zrz t{; @?#J{YX2u@uJE ';tzW-@۸ei/ 6y +ྛm@C% 8['T[vG}۝z*w`NZO:P) T )b+6EK\Â)?ȗڽWu/<W%XI[w>"XEI 4#X#x:c* Lu~75L jX6mE8HnRcAf &BaztF=ꠔ@aOHayi J!҇> 50(?aAZbTfa׫ַ"7 tדUҀ f, H!A`:wױWEZ X// <Avb^GAƎ@ׇ aHU4DTa׷!rF=[I8T7D}l w`"sT]L)l{z۱ :Za :+ V!vA*L6h[  !ҕ^HYJPaA: ftx }w'.T@ tAxn H$Zd3 .~;zj s5tl +FAsaB :{!>5`*v``?l2sA5vav lF j)1 ra*^ 5ȌF C`lxŊ0lI8k$/(^\Yaбa ;HPC]ͼBmXp Yi%1w$ޚjRB%R6@Qu̚c*EHb ; .b7%B8BDكWWTxq㿎#~+Z'Y+vAi͌8̟uJ#k22׸cٕ(W o#'>#Dr{٣b \Wm[מ^+௠Bire@n|@\W.*7f: 6l 7qƸv`?P!h=EvLR(lџ?K< n7|H@$Ч.4 F?a=QƎPiӊ VZ'ؐ#ʅS4 ¹OlQAhDyҝ uv`tt@ B=ʁCe<2yЉ~Y/)7%uW^H pbRpp T^y ]`_PQ\R [`1l~@Y$8qL >HR $2!D)Ȋp@#?$AFO5f!-l` ( gZp%1 { 3A" A f\!-Tz#M &`vE\8A9` 1lXG(aAx͙G2 *vG,@ KexD:챋S>PdAH9`(R>(M#H;CR({(HXEl $ch60s%<99(UIOA| Ԫ:p}xH XrPzy b0j?D8#dg&|HD'|` h/z_8f`]"`& fPpRDk#xnfD%^~;h H  )V@RavA$y rar-$ GG>(`@ ;ϼ Ӹ7x $cB`qtA'9C8X>Tq!'UЀ/pi$z1*,QIX&q& ЁAH]'@4y(`SžQqY8 Xc'A: A!DaQVul17VC @!8H vGtT:TE+ dD/ A5O&""  >_}CWQ`(@E?#ryD{@bQH6ΐ=w ,Hħ,[ee 0 `c `/f7808`+p$@8 `p& p*P 04 : " pst0 P2 60KPnI- T'dPBr#  c>P`@a#-`"RgFgH ~vu!1a<U @t0pYP~wBG0bB)y @Pi0H1N< /V6 P ;i`bVi١U@ d fg ;PXyr0cU 0ϰ9QUA\Q 0 EP0g % '` u ;PH ڠS.gW,DY I`":T[e.`_n$ `0t;Ddrf `s$+0PNa@@`IdqI`3Ls:0p]m e.Pwu0`%`N@qg{:R MpwNp 45y~ M|0$ gti.E ]L sw W:L% RJ#Kh{LL-0D$ihsH3 4(vFoW d{4 .s(9/ @ 5:y ː @&@Kٹg(҇ k~YSg40Q2{yྷ D݈ `$ *YyqNrlp%0 ) .P q ` Zݗ dzy~;@0 Q" LK ȣG &P)1Ą :Qp7p&8^f\l#9 .#9T,̀ Q 6>pÅQgn`0EP cоv rdp EDpNPw0p!rc30% 0a~ C Զ 0BQ x^:0PpD ߰;0uy~.LHzUPp @мDCWd ?~ M,z `0}" 0v@P Z u(@ 2% FPNk LP) _P ?K0 + < 0ppe`~ipG `ODހ@ m+ Cd(! yK_>sLt/;Џ֬c~[gMlJbm[J$*N /$ WjE`,W MP0[d x <`~\Kx" ' r@@e`3 {ڦ {`&ܾzQb{pc l :g萟D Ry g0 ' 7Z<>` 1j7g  C Yм;$ D`09G8~-x!.31. aU%%pAGظ0PC#=~$1[?d_JZ׏TCΟ*:R  AW|@(tn^~\$J7O_T#5בcTaKy9I(/!(z.|ڨFߞx!'^͐QS{xNtiv` 8ƟcsNGQ! I4[pf![]8,|Ipƈ;I::H` d|iE cr &yFQ "L챇 TAb'$VaJn,f(6&"H6A=Ųu iiEŎ6(ßo*GF!d$L@L}:P2GCѠziNXna rJj±IOB=MfgAHGp&.AExAOg| pI hf)Vv`6dYkּGŸsui:*wVI?hqΏ>nty hB i't|" AUd9'fI8AۀrJ`!ر'\``ybeBha@Q@_i@0gX~`\P4: ^p=0b J^)(B0H"x( _9:Z`{9v$A #:ZdAÛ<P*P`@d 8@G]P`Qc`A {$ T 1$ `A  v 0d 2<P>`u8!g8A L"P#'9L p  ( @?I+H@BQ ;"\` V0$@ |oh4 ta,` {x jt~#=J&@E(p |(F?qXCd$0*`h# ؂'ZaGxcH ,h3*<f!"eh X=! .6O~VGlP-L&W>ba!, p=lnia [pV`v.\`E-5fTPg" v`( BSZԲW)@|"Nh=" :Ha'1*kR GSLpkGvS(@aԸ^Hc O<<uGP=5e0O:#d4k9Yd}#(x*VrԁMb:摨MjW Lљ=fY#/`!D1 8bxBĀ&t´*E@ C`kC{d&XA80]1Pb3~Ѓ9E{D{2(R؇yxtwXId=Absa H 84(IxP*8&o؂S2(@CPC{4 p8o-G9!Nȃ:p+&*88(GI"8CT6QHȃ4'\`WaX XcC,s0HK A:Pu I<:.XAc XxJ|<n!"| 'x[:x](GځC484I p\x@@(8PNP(4Z&<&-2n1sixz5&X"&H5(IFOՎ2^p++H .(\Z^(3`FQZuA2xT$@!)o 2XRR-+j@oڇ\@HIXxX X@&ep@<d0_o#@oR(h3`A(>&um-ˏU2:ď}(W!K х)z(ݘ i:p&"m{8%0(xoLLi}I^&y}x)RpX$ʏTӋI2}h*8@\^h̿X)= Kr,rx,P]= rb :Hs~/I)&,@& ah3XoBыNP?s _oB\l‡` a ʴ8oB} 8߸z-QޘܝYPgx Hͽ^ {8);)C.bJ~P6mo){-d|PU ZR艟h&r`߀g&8рˡRKDU@j`Dd"d v`R&oD dŇY`V5}}ܥAͬ~A{F~gS["?8|0Q!=ZhS>}Q!t hQۜLXgRQoBeB8^3H@ ]Dx؃J@T3Jꬆ63p.3TljG<1JRxoj8=XPdpg21VAȺeHe"(0*d(\pa(  Yi0`,dXm&<)^HV▆Xexc:(2&9cpg@`XloVڰpm2`,ច](Nfp kp]( Cdd@ccXph3hP.l c<]LЁ6I0vc Tij4d؁^rqo(mjOACpXx_ eȅasLHqFo 9q`H9jelkPCMUa)Gnpl_BQ-RHgXHhd(/fhs'Ύ8'i@Vf.Xf ie x dpi8;`yHHox8*hclR(&XXgᖆ}߸ -h>VX=^dOhmn~wkYe]^2rՀUh (] RE>Ձ @xip˙fXmg_hvexz*Κ*o^ad1C9HPprex6fxp^'9iPN`(kpd-#jx=?5ic}ُ` hxP 'xkplQAyh|p)(#H&(.x@liX#2paaxcq/XЎ20_`'x@ܣ~ ؂2ЁXhA#H((i؁.-"`V0XVh⇈GJ0/܈G P`I0hXF 4H  E9Z$Ď1=wDWn Fʜ]ڰMƴՠ2Y%e8jA#]ʈ 0[408DGȰwޒA}baPArGL%uBNdw@ 0}q/c=Od4``Аb%=0z",PF0@Ā0AyD<0~SR]G7.@8NG…fl1#8 <FG8PU`F#$M@ :AUфU".D$L.܅=S08dD QFpB#]7Ҕ/\uA4JDF4Ё*MJ h[op3غ *xA$=K; $,{nFF{Df˪~ Z[]6n%J hp%+( 1Vog!1c]֊hSN{2 ~/S[o slA8$CB ,4D :`  sF%(*KpH,_Bo+*l-0Kƒa+D3$x`t%BC 4 [Ό[4_L=5'7L"}$>JPTkW#F<=[=k={=?>@1QBد` h$ 9TSX4?[ѤE5@ G< b/wT.5.,yc^<0x(.|! c(+ P@8̡cUp@ȪAajJ>х]Szo]W U1f<#Ө5n|#wE Zx+ue{ G1#yH(.Dܞ"WHIVo'$0I#M-D@IHQΐ# 7JS0wa%ai=Yғ*7GwËbż~y4 L t T j洪! NPq* 8ٷ ; q`f-푛cUn`^~7sPU \gT0n~6bi=9 tf$9i' :ΊS;BAU4@}QƌTa$Ju ԿSq 'Ix,:([N7+ex=5dePӞ9AމlsYUqluhWG6EHPp)Usvسe$MP@ =SxRZUUG!8]hijԬ7uQx)Y%m4iպr ?e3#8!^F !0e'*.V2+jl`*$yp(PpAv_:DC[?@_(4}!p-4QP G0RЄAtb vЄ-<p8#'O" 6@4D4[o ;a/O`Ap:<2Ke0B.܅IB1z!8upDT{2] i?h܄ .&&c^LcHgC$g4b"|4mp#ٰBV;Q/PL#S;a?ޠֈNt isVtp6 Cܦ>[nEYIx L9p$ BKKi*[H`NW~KOډB^7#Qq җ88,a>q6pL p"Ve.' ycTЄaG&UzntV(8xG?Q΀!eG8JG ~7?&|n!V t~A `!˨>t1&ج?0 4j>  @F([g@ On-Vtp `M @= )ؾc"5t}+8@A)?@i@U") (G_ـԁ4,,ȟ?;# 'C,`@ɘ(CAT x]+_@>x.G>95mA3^.,ee 4у -_B\ A"?plA.:84;? h@'=% XTCV8"TFT@X.@ <<  7N08A8C8d8(h <0C>Cڐ=1UF =1$=tQ:$1JH P=C8B8؃=0.:H4=C( B?Oz,|>e8=c|:x:2c$Ѓ=.x>؃X897܁h@k>ZN[X;C2TC:C>AO<5= %>(?4T=)8?X!=xC2=(̓=8F`Y%9:9XPp<(e8$C2*+=샃#l<f5=A@A/H6xbz;7=ú9A,!`C@7:C3|At8|O>g8X TA& ?'Fu:g8FA f:m:<4`&6 >>C.>IX(=C5(MƞBN0C>Ct])n!Tc\=, t=O~.0:1<9C?HŸ2FM9P@3w:'pcY?7JA:C:H1|C8c]Cx$PC[J@ن/j3$ 7C#V$$h@4 CH =B|kc : ZH$H#%pGB>n[ <h>lA`<#Hc&,< 4A~'H`@,*,@K4$AxhuBЀpnόBT$ 0=|$C}RC?CK=@QQ6C+kb<t oPB62-L'=#$HDG5' @1A@/+(Ì.ph@P^ 5,80,,l v@A ށR}xt!4RHb).$@h bYA.C3*@ tJ@p /|N,$D$?R";pZ@LPk`@hZ2;t6"tc`-4pB 4tFԆ@ς*W35`90cIDmt($!,=᪰Έ x14=/$p`(!%;44KD9BAzt@@B$+H*+#0 MYA1B1T*D\R˂#$@Xd$ 5SGB@Of-=>Ӷ25b?HC /2C)`@Fcl214A\-YH?H8L<>C@O}P>$P1 7|AfH?T;h4]&C?Tl@T <`a:%OfKt 0@A¦ҁk?#&c@A@|0*40:BL/I`XP?qx7L3et;TT@Q@>O l #4^290 pWX @/2ȁ|L#`֩(:0xcP $$4!u:4@U6C x=XC@Oͷ8&8hx:`A s7,z9Al-@3;B 8 '4<ܪTt B IL1C28Ks,D+T / X |O?8.*.++<5 \@84.l]b@4A>C`MC?BgZe2^{x6:-0C:ԁ7m&@"6f`{5,>.9AK.XC{4Blt8C 5XC,46hk20izC5LL'!H*>X@c|`=µzdzK%;k'lk0|1$@P_A{?N:j aB*gO + j оo_H*Za'`?V "-yXx3\cA, %LR P= 3Je0&[aWj_y֪I _NW`@/\a=C3:ѣ/A 2@oVt'ʈ˿.hOP'A_8 ,ago L{ET@n7%͒l8k_XII6a Y :go @3D0~$D繓0@8J&h٠}‰#ol^{B:(ӱG$)-s(G ,2!ǐ #a v4pEzT|p\= P!E upTpq$."bP)^9y.LW^D'.'KzXQH-Ĵ@p ·]0iN 4|Y -ȇVa|b924L8a{¹ÃZAshh368D\ ({:t9($A{qUQIlH06@iN 6Hcc$Kw9xi-f+* g,?6+`u$UQ&~J=D"ߎ  Ho~酠v (b).C{BXg&~e YH{Cş[<%cE`t !|5{|άk4{9B_ r,<)ʼhm(?v WcZg(ܰgA7iE,Pb}W>tev-Ёd8BG b<{cAEAzc"WׂHO3B vFZ:FBk6W+ c )IJ+;A:`LQ 1ءM@T;A{P 3TTf/pOpp^ `ũ>*=E%`BU\8"" :@``x|ZLb =!Hyc:11KFoЕ<@/c8ĈҐ2@~fg]a$p(`= c2ҁt#'1Ƭ eP`Eu܃<0rt@*}H 3Dl`IbZy'AAT%G> 01Ho^4܌;8|NLDh7 X2Adbg !tւ(вS9 В$'  J:#CCaӸe(]\#P`-pN p0=؃A\ xƋ1>qi܃P ]C7M$:5$!r BDW=0Q;/tVhAQ@ G2 &4pgTD&"aV0A[A߂<`I(PpE)AAZT""u <8qPCx.;0x40c͇' ||al?Dh9N ( .A&-(P0k &`>F5*LeE0G#.xp~L\cXEs=N#I3`p$0F[PV,<*A;\Kvz`=N zx; ?(!MF|k~Rgzn B0 OrH f50>.j# 9$`#rj( h]؄puh#xI@Bv*BXeX,P 2*ƊHG%0^ h^.F/JBa (@7 $o聏@ 8 2Z`O. ip N@ъp,IPPp`#D` DAL>:B3<ȡtOFfAItJ`f!&0uҭ J:N_B:)^h!Ba`dD X8 t1FiT@X2Jw!h"ex@ $@ҁ ^"‹Hm`QAڪjFұ Jv^`|a J (@aa  Z.!J2QV@ F&@n VV #7baA p)fp`8b&.N~N@#"6`&" !a4fiz+4T2RZfh>'(*VJ` rj|J^ T@=@؇p1|%!G!HΡ pd ,a}9kyRŮ#/H"td:V Bo8N.8د;:B)*$0EZ N \d.4"##7ނ!:~`HX~@ha!~@.cS !:(d_La((l0d@42ESP F q P\n bB M - . $D9ޱV,c<+<42V@\@ Z !AD`!<(P ԭ$&.< ΁tDQx ! F`v<= ,h!zT :!40! F*T Ƞu< r Ka,fI a* W  x aܶ`lq-v5Z2V"fcx@1¼s)D AA1Z(svhv |#83:ȁbB:`:1HbĀ /&afSv?:@"9@# x8 ԏAvh 69i'ӄ NDaQ"d5I !V3GXT|_JN V?0ʚ h6B *^@x苁(LFN#.+?tp@U*T*A P  ,|\!"4S<*n G> .8#B9@X `r x@: FKD@0@psA`uȡ: & (,!KN:@T%׃*@0@#w஼a >{ ($ J!=`d4'gE@0 $j .X4@xn8v` 8.$B (NZ&)M뱉H%@::*40rl bv$` zA3 1<+@l2J:@ $  @g8aYY  : X@C*8Ž5`jD RfAi~n:t`A1Sh|$AA#70 N : (Eg ga\@X A@`|@@ "V` =8e6e9 b ŊF@"@:B{_^` 8*= 3? !&arm@Vd*ۊ1A @9H6v":jfB DaĕnFm`A\J( BD+ r ,@PP& x xQ@SRDHY  >d!6$!0@4`bҁtɗ |a{B!iP VtρChr!N X3fNGlzt!AE JhcϡA` A(5aT`Mѡb O{FzV* X@AiXN!i%1>|T&lחE w F2/'֧,)V B*&Eha{!f`zD ,AN8SA{aR/ `bM*`ډUu2@d!^F$^VV'h Ν@ C[:w㛡=q#u4[ Y!a+ 3žM bLv ^>|(0BHQ._jh!1Z5Öeָ7 /-8{̐`^>rժik I۾yҨ A{HXAÈ!~zZf,M-k&G.^-0k3jMŇ)c2tN. R =r\śrS*a={23DkfK7mZ# {bfXAnf=kbk /]/P^8 w\.QA'u72yh J= 0;5 H 6Vp#ؘ q .2>#-₋+p  ʋ&@ ,>㭰7>@ 2p̕\I% fn*@'%6:MLFwgS À.=ɕ5es%2[ FW Dcnhs]$t!蕺@*L%\GNz7NB !l=Yq 1@<Î'w;X bseb $2?+1?( p#4!ꕪ̰.(4a%!O:c|eK |YC֪pDsl2?#PQ< yp*-;[$9C7 P{Em@DD X :dAȅJ (T0 2E:Z/0#PGҳi*? !(z",dA6C4蜈aM?B8g18 ρqYEw`p ؃O8F(ޙΐu>BciO).@3:KeL<[L;ۏaWW?4Ogdf0iml Yfr1{ aP.nΎ3:PKZH ÀeTp]ETVP1 ( n >@^@OMEP Vx"W\&/ ZD JyAI"XQt@-@!/8ưQxB PAބL*@P'<J;؂SC(p"ɵpj8V( \ AA^>Pg)@RZ F`@ zDD.%6@ .HM$@l0F`~Z.}eZ6<^ "MC59$իFpOĦ65p#{B) c!8&~(Biq;4hv&]X~U08Z{!wdÝd`Bkkt1(uQ:O[ȰmV+$?Qkc2|f@5L*D)6B~ ;1 nqkv+]B!_}톏b(  oa!#~ҷFx?.$x`=g1 Hypd3A܋>']2=f6y~m{AA5\$G3@NIV~j PK|GѡF!TTӕ0 k yFPuE'k6[& & hǀW+`5|F`.ޖ9&s+ %`eWqP9/W#(TYQI I/փRUp%zZ\((p I@d-I c(dS EaZoD7 0xD!wvD{vRvqi . 7/0ȉ艟(HI`APNKÊpdNP` sȅ60p+X?Pe|Hlhh+XppXGuhDx}J$H#T$R&FH(Hh(xrxď xYxA N { I 9k0Hqܧz&sQBI$T@"vI5i79;ɓ=? AnwD߷QrǑd /ꇒ3&~F'ק) 1(V]ɊaɖEQn ИkYx|AFl%dirBٓZ)y{)ɐckf Q8\8(/hNd$r*`{pjS4! b"@]@ 5n )6 ܶO"]  Ɍ%_ pn l6 _@6`%NMo8 `TnҠP㹀P@F'; `d &'P ,I Iù Pa؟ Q<c )83i3 <++  _ ФEm :+P 8 M 0m@!m2iD @8(@` Xc;J1@!" a{JC!9D眻ɚ/Y3@B6L6_ҹ:!%[+iJ|ºNrʧG U_ !4Ь`ƭ)$_ 0fm"ϙ8+pI JB( VDh6R ypE M ` jHl %a [@ ư N /` ͠ e`nA O c & ` p'B @ ` 5;$ O `t D &Ƞ ?e U 3 @$U UaM P0 7R/p12;k;-8C Q9wͰ 43 p Nk+ [2N p a i/({ s `<Cмh p(S{ k0C pS\b  u@>32[k@ ? (k \Kֹ gœ ȰB@J4`N{ 5 hŐʝCG`#M~f \1~Ԝ3f N8 `Z WbQ@]F(s%p  Mfq@PP9g2?'U '0] _ P@!|n1~;p}zN gPlBB m/0D:P F5T'ppW[`.0 N @)jlR_PCd` 5eW" [^h_ 4:` 0NsR u c.*}%P y@00 C;@ Ƞ0 4 Ps 9`- sb=8  E@|e -pSp 84p ;vڹ` iU`F `?l+-\U @)Pet` 5}0p: (p 5:P0(B0 (yQp%`.Ȑ$CWr Ϣ0 f7%6P@gi=N0d ݁a? NZXp% p6PǀENs%J CF]z } }yL ^Zѣ&}0ӕyKE `{ I+/ P j$ `z:p9q C 'p z}2IÀ pJ %z(``^W`0p|@q0 `  p 1۾@ՙXaq'r!p ; h>! p d` T&$pg bxpp pqGq Y `zP5$0 9 9&2€ЮV`w ZT 3 1 jG @ ;4 wpt`@_T@ a[ wsz |NyO DVp^9;PAj$@eb .`p:憰Ap:qi[V ? &% Tߣs`q=!PA, Ow+ PcEQ8:WEMh v-<0$%]@ 6Ȑ]:Yǟ\ aD&9`  d>@vC @#/,h N` {!eh ~b)9Axl'35>8'"CEy`#@Ǟa@rHݡj:٧/d\0tΑRŤ Ģ4#{T! cI vC؇MXRV-G}tm N&0 }F!ޢBU!i#ǚX|JBN9aPA{ș=kD|I {)CztI09(iVx v# DgV>+eXv%*٧Z]:*:aX9pРht NƟ@*":%=< .^؂tg$Ttr9  ws? ( ZpO#-ԉ]vF[@x=[$JS䝎$*Q: b)UY f'-:8-1L>#I `8vV8LQ7  A& > C{H7Qm B!m"4=x$`f*LgXc dqzL! R%x\ @3 lE%# V$tD@c.PHVɈ HoIԄ@2u'`` Pl Ph?AcI> L 2z±U c9@ 6-Y{ * c4gQ(7A S考N! ]iD'! z>Br$:4L ]J0$H1 3= ɁTat`@?xE #ֱGoQLh,#LC (~̣,rT"6P`BL5rLBhяflA<'SVJP0v\a,=&D?p 4E'\PvHOa 63$ F);<.| qr-"4( ao8aЃ`-$rU?&ZBRވi(tN\"{ƄbRJ3\lЄ#, E* b`]1C &Dyӵ'a[cеz`E^K O80tV\*ߋ?,`,O;i[`d /0`np:%*| .Z`, < t"=f%8-p}x SܙvHE9B--Y`P Kz4+1$pbr 8`Op V#*h=VB%pD thд#h))/0{zDjPYMi KBD3 xG#^ S{GQ50W@x\52=0:WS?ul0HFH}ap'J8NzH`&0ȃ ht|̢L+'@vIx`p3|foHXv,G3X׌EMhHxdh'8Y8[|Xll;t.y\.8t-C؇o զ$֕[ȁhԋ(\90D &؁V؇u <"R-A 1Щ*~HYP-BɄЀ5EQ+#='[ 8# 'zuÁ> E}<Cp/'ȃ*-n7K 4L,MOāFӀ;2k5?}8AELŁ8ETE= p\T(Jp3SGMe\8~XdkcK6HhOoA%""\ȁp|i`zx cۅ:Ht8x!y:I'!{HPP`Hu2ȃpQ09*`O&( (\Z u|hi/p=HX p-dV9?(}yHXAHHtYP ؀spH5TmZ XP{|Uic mRAq :DX8|c"`ÈW;&RkN;o`0ULIx((*=KDQpI`DtB؀go=HSA6=4pP"300rb.WWbZ E\TST\cG2Ep8؁؜UJQ8pcSEO+'0IH p r[ IDiRP|u%~$ y&khD/HI0'P6 x90x i؇c8ӕ:N8(v`i&!(/`x`Q>xG5+>?>, E@ߓ(8n( *T8 vصzPA!ogT$@?`LHХicG.̆GZxf9 8!>P_A :[ T׌+$]"<"H['{(_sK/p8)fU8ld4[m 9]tp?HN*,7 ;СNгO:< B$.r >HQ.9 5!??@HY ؃Ud:Y[$ʋu?P-2-Ю. FP$H^p-g=0תA# +`+ IOH nqh;h ?-<Ƙ{? -*]($Z&=  '@9 Ht'EL%VٺL%`=F?rd@/$ p8?zA lV.Lc(8 d GXVDQ T DyETL \8B R/h V0+b؃| .pfJ8?1 oX' "T@ :[8D>[0 (hB,;HB8BI"X?F[耉mT(p.!:"$JUcNhWKp{pM!qc!'|$Bw-1-h SF?vq: pp`aa"@Ivk : `s#NLF?@F c2=xc;_`yPBOePydlyt.*Q 5 =! aharCVQypB5Ɲ:0HHJ#pB33p 3: @40ts3ps1-$h\R<~l#tFA=4|J:zc XЪS|܃܁C>PhA Fpd PFk:P:3w'aYh+0qUD"VGI٠0=![=`$( ~`HkA idLg} %7b z4B i`SXY  4u0Oj(AI;IXM6:A`?JHLu$SYPƔZ Aӥ vяu$/yP)`$O%IZ ?X x?n➒!-@El.f!C``B 8{D.%PdZ;B "HqRr`)H|QQ* a_b Kb2'@\OBx+JPDW{?QpQD%xR W">ɡ1^&C2;jߨ$"Iׁtbz.!C¬(&# Ia*8Uanq 2!$f("CX>G :|O\ #bBD͗Xl{ TGRGy9PB `@L`|8jfC*M*/O4V-#x Cx=NpMU='LBG>0 (  SуN;q}#l0<_*x 82<2݂ 0@,䥃5J'Ji\:HH>كV h!dtH@ܝ= L?< `8HM0@B13<BӐTYC+h?`?X,<.$A.@P=ypa?l$ `>$0UiH($(=,BpC, A%7 =X9dtIChbX07xe18A l<>h`A],t TI7 1r2$*@6"`!0pC>`N%08 Du= P%T#8B\@ |I:A@ XAKV*HA*d%@@ T*TB*p ]K2X74C/ԁ(.CX1TeX"-\ /Lu2p8PC/t̹- 7 .%5p74,l&eVZ1B A/,Će/^TB3pV垄.P^*$$ 6p2tA]f^\&BXP-eXaƆb~2%X t1de^[2!7X2@g/T/Bl,4'2 E+\#@h|]?䇠1l>v>~ 8 N H 6$EP^9I fX&x$@2r3H(˰T0b$*Jh,/t8G¢khЋ z 32 E *xPAHbÎQ$ ˉ"ܢ\/$K9 ē/$JH"rRB*>+"C3LhR* "Z/\-OhXhD!u$ h;<<Ba'[)@Ɔ0gb^xW"1៦p8مBY.`bR1d:Oᢂ ui(ǟ|NvIgPvǟ~Pa wF&Q]06pI8\bR$rx5'N\ 2er rڝ'܄vHØI'`c*Hg"Hq偮v8Qc⡲{Xjdt@a V C~ڡU!WKB]m8`d$H k5#(Ȇ ܟY%WoڽgڲAQLb5 ]8+2e k#x |BF/Bv `f3aOP&31Ձ01aAi41"$;{#A d#ǀ! {x9t@o<({C `-Af #cDl$,!d6XCӑdH@@:U+PAt1D q|$l>ҁ j#p@ŸNf~阄\4tL G.PscAԐ괁p@ް>4],^?ǜzeUtT 7@p!$uG,R4Ka]>yAQ /F:ы-COA~BV `y. t ~ # :f* ZG27]XM;,@F3qPFhx:y$^X LX s2>#05q{`C± #* GG dihXeHPPX,:>0cc:*X@ &7@ C X@ (`;@|C482}[@_I# ( $r0HhN]9D@Vhˠ> 9!X=QT>zNH$ $`M@P pmo!asFPZx Xq{ #qGPݭp& F;pCI1@]*Du/Der)TYq=H$bXPTT e[ip@#_~?ku  1@zg~Z~!vǼ!,,` $x .ΪbЁ F t`n* 4l)h`X.<|#A0̪4` < fg@B!a4G: !N! d : (@J N@$ ҡ$@ ` 0.^|4` j!("bdX\@V'l R`h!FqfӼ/':ru*`R  A*Mv" !VPA x hp+.`*q h@|@^p [ Br`ԫ `+q`Zi D֡,V#!$sQ CQT`odj`J`f,$aց : 4 <!r ho%^` $\MT \BqF AT'r}!(!$Tx x pZ'X0Z`**'`:a%!'b$f!x J ` ~h! `*@;wƳ\@g 1/!{x<7T!t@.a&DĀ8I4s A># "v>B:a!!ڦ Ҁ &b")!f hJ2<$BJ Ԑ!P` jE(8F@z.haH`a 1" `rm!l""AaB!,3; M*A@O S'(m3 Q :@6 \0)Mt1h^!"+ *!~*!]!PۀRa`~&!*@g<!x@A%%&O-Q` vAe9!!FN66` :` a@Ta`0oa !,/m5i6 A v@t@.V!]C:3*'$ a 2TSa^,wl 74v&TA:"D3]Bg`n(`5+-JZB'@un3aLu!uJ9HbV`r2w(5yK0z0@rf!7Ba3͆!H )!!313AfC#wo @!,n'%x)8'Xa ֬@t(>"ɁJB!d \vd1zg`^!D2ءJ:RL|FA1!NWjJgbh@ i`CLls~\Yaa@j%!ZE|A@@rvaH\ WU!bZ 4)t>n\  L`p@^paL:y[p xDڤza%GƛH!vAa ѹᣤ !@!zuAFTv5Ha! ʆb DKj_i+z`AΥ(!'2da `m#byF: j=7^:!wPZa l3|#B `r ˊ`gbrI7Ϙ!<BFa@a<>vϑBlF i輗X"Zї( ![҄06;=ˋBH tLmw %`۶}!NaqLP!"ۦEYE"` [[+TxA7$HOX8vuX CIɒ+Ht'<<<'"mt b  8RŐD-`qrТȅ#PM=U@tKu5c:훵\ATd>- օ"ݽ8@hr30ؠ9F tM%@]Q2{vШC5^Z \cҬ+[Hunj(Wm 328UX4r{AJz+ݹ*uSÃa 2@?`' ?x:sx!, 6IU@>E($ 1P1WdSM|4T"1Ќ?TPm.# …=qކ6T&.T3/V?#`0Sdƀ*H=4a D֗Gu`{ ;L:P@N?|HTy`[|xe .sE U%'F e1p7TBN@s(3Lo􂳱NC@B?|aHT 4CjhhpN( `# )B P @"pPY49' e& ʼnQɴY N؁a*k4@).jPplc m:(011oPN|bB#Y@cThӄNxb<` Hj ~<1`ia|` ƅ WKz{M+jAD1!6X?1!  Fm?._%!0Ԥc#TpAUvpQH d@'bU5,v@uDE>A+THF>6E(֓lzh8HQRjV$CT2"=1K $!0.< =REpT 8\Q^,: p@ta }j@,D>TaA΀o!$BW^W!5vǻɰ.V`,AD$8g,2 $- kQ19tU0~">`00xbo 6< B"ezC!D`]z$؁o tkSP";P # b`#T (!;o;&(' U{ @%2YM&ju_" p@ww u AG =U@ ~zG !%0}3"jS,6 @6aeXmip8ax!@b vpXa kiaet(p 23t`` = bP%wk{esw GKK牉8b't#ЋU>H6p@QWD+GP6& !P B LMP`X.7'р(zN #f m[Gv> [ `+`)6PG~0LP0GPeR '8`La(y`_pyf' 8V( ܠnJP <0h F$pA >gP%A0 *P cQT`1{ %( W 23-s,%3U\iQ03`nB 0 Q Pi#(0 %|7Up p ]kc 0yQs%z78"@ հ pހ [ "'& Y0 ̈  ?#rAy9iMap  ֠ I(+ڢԧ wް 5 ` P"&` t{ khС$@" @p`E _`':9w4gic `J: @pD#P<  \B#idc6 |0 0B$ E`$ `^:0 4 ܐY@r`>* V"𐨉: ~;ÀiQ` ܐ耣  ( :p` 0 ̹3!려 ǐeP"Q` ]* D DQm5w J 94 0 AaA`0q*[ muP 0 vKc Gʮp Uɐ ٧ 0Àr &X @0 8߀!nX; Eж,* z U`*W @۠ " Րs4O`x%k0p ?#{ V_*๠kɠdO P {/p^Fp(bFB i[Pn, J!o0q(Bw00 RguQ u!Q@1 Rpv p [s"p4_겪:Q}Pd{"p@ W`Cp8A,k[gV?.   W&7 O:dZlX)`:L A@ e k{Uj|x_y9p@7k˶L,\|az 6An!AC^FP$5ԓApz@E 1`{0YD!DP ) Aaz8B}Q (4P' 6R$@TWiP ML< \*@29lJf)pĴ00!\0HAӜ a͒3  9@+3P(ʰii 6?!!)@_I+ Bƪ5 {]es@=QUB$$ λ3-ÊѼ$"=Ȓp6P bӂ<ȥ4!N L0# BI|]0䰹@|VE``.=g 8l+E.O8+D |`piLcpy+0+|] qPlu!`ʭ|D817`p@p/`@`V`AN1G`G-@˭PޅaUN0lN PM`DPNɈR;@ ep;=;Ne߉ [G(GyN[Np-+(~(PPlU0pG6p M ` `P?7^uP>%Qn&( N@5nPM4qIC MpehPP Msn:Dp?EMafG гCMHS^0PQfyP0V !t~bGN'X~MP+tNWnN` Ďƾ`!HNXn~ `d֮wG@Ծj8.s`It껞nAPn#6` RsێA0x I3Ҏ.kuOIP ? 1(wyy F 6> +WpL"KhNpmNF`!t~ 1S`Wf"NT(GP6Ie@ GOz}P1Q)D31ڽl+M|6Tu:1PyE,MfTcJUBN =y4#ǔ_%Zl>G`ZQV[lvMK>nDjd5Έ\s~z^zp'r/)$Uғ?wʒҖ||eI%%t+2iYr5](5QO3#$Ƞ E3BӍBi P92PAI #D'PI `SƳc$%ցJ$Bȏ(p(cc=$  A`k'LF{1 UȄ$t@F2(1רEP40A&j82 a4ako &}ծ& m21Fс7 nF258 tH00!~60 = .ЁhƒKN#tBt):в}hB FP^ C8OÌ_ 8;k%$o<LpA?0U0 :g+,_q n.XL$C1K]_@hpLch|'phKC4>9.IU8> )\u8@ ׸=GA"qp\+aS* ,Ӭf#hAhzu؇}0'+فChujX&y?ch@ jY v?tb$'o?0"0P~F @'9|z!Y*Y!!L:8hفAht?kA"yX@czAІ~uA<?x[ pX 5H@ͨ:O:|(~(x@B%d<>!'cY,Bj@P8AXJaȵKM?ZD;\_tA/p_A5aDXDLy[/؀)0@I8<~H@IYɅ-eL@(FksYY A7A#Pk؇Yӌ (+\N8H~c};A09*Е9!de`G"Q0~5JJ~A@N8x90+9Y{C/ 4ȃ] Q) ݇sf0SC(=3@؀-px]NDLB]c(p,:o鐤)rYy0LMW03p=X+=XđO.؃TBG.X!<LX;xN kj Pdȇj@L ń+#|@  z @Op@]`5Qh1(^p`eu X'ſ8 C <+er% pR&xOY X @`8DTjm @c-0 O1`+ER]rH*(pC@z0` .0tq $&7]! {PHeDЀ& { Ѐc؁h{$Q<A|T,U *M'X@C؇m`䰁2t8|P"UaUYeAI 8 `]g@Jo8-ԅAzx؂mƂX؇l }Xp%0s |@ aVpW} }y؇{mcpx ]oPh\i؂HD`?:&):Z&X #/Ё ƀ2CCx%ٟ2tcxy`L8x Ţ؂&8 Հ dQro]0Z+ګ$!  xXP؀%'p!I;P"ۃ0 b ُ E,H>N"ժ:zQH$ЕRP-h]H&+( ZN+x8pPPX˦m ѹ!^\)\pÆW03+EET0ع3x^@v(1 s8x2odUr0f"xYRm(HXhiOApp؇T&rX4(tHAP%pȇV*2$0Ѐ p; ܚ F)#p HsbzGpps\P>-ЁX{8qPnq LU ~ Dt8fgC0%pG%4$"aP[! p 0On@ {H"PUX`pB0G|JpU0' nc$pUPUKRUX&bWh6@*AOpIm0;sv`N`A ({Ze/8pkE@}@CDs5Z(Ţ؀ A=8(eCP:lP'"#`)N3=ȁr4.{O3X?"={؇1ȁKBXvf@O wԍh\`xTFG 5)/`.>hoTp3 u=HpG.p^X߃JpgA`KSs@=]b# -H0ՉWDqV?ӵߋZ̟ul`R SQ-Z :xe4.$l,P$K1@?4@$(8=BH+ a:zx- r=P P)#H`5N(O Lӌ!?tR%9 ?-T7p lA=|ЁO8`E=Հ[p}?P [(:C=ӏ=ĢC O>LsH( [($=$^aLÍ(LpU04 !`=Bs"p_RP0g|r/`@*%Э3  7s)20?$L.@=PA *>PH+ .7fp@*8K%7OAF=Ds99'Qo(9L}cO"=⅂C-lL4,9QKLb,b4OXdH'<;D\t5^+s03:lh.@I:14 %$i7N`yP#`0X4Z19Й A'5(PhsG"@,s!+v Z>[Xc@,P`; ; 8䡗D&A`<  @+?POBV%> xD6 =>ҘYa"̄PMn?lDÅJ*Bx)O &,C4Qۣ PpyB^>APE3q)5PVC?Un`4G0PA-x$XG@4kitj>=葌\PGִc ;H"5 *pDp\lsb W8p[}'@D`?쑌]AX =nLBre,i Hc^]v?&,> f9ֱ 蠠  6b zT;WF3 `D8a=,/&,P[dM'Jau#HO%̀7SAHC<txQ<`=$i%DU@+A?D`Ȅ${,MG+/(E,AilA7A]P?p(%[`} 7V ,x#-^F`UH} +cp\P8'sfk[ X`‘j< 0-hDဇ2n ]Am4aX2~HKheʞTMo@X @qT$ = &>@$Uh!`$0C/ Û 4@(D?$*C8q<&@|)~N0@ >7=|b@x8%7BA* ū@C/@+%^NA@LC(p>?@=(hTR ,@'=4O@tFj_&; kLVX@0*(lPB[!H h-9`B:1AB'$B搡RT\xxR>lMZY c:! -%1@'|$<@B6!MV$I:$T kld'C_ZY*!ZH]RH<@s@ C>B0):`B1!`$S"BJ#BcgYQ %,C8ā(GŊ)A F҃qT>m- 2 9#2A8*|F8J3|>S&=hZ8#j&ؘ5hƬL) <@c(\x2 0@L'A,x@BC"0&FD L-2@C PTI(lҤ$STdMV\́ [MQߘ R  _U $ > t (@+C?` 2 >C+0A8`|nj 0x `H?%T ]o5!X4,(>4x@i -)>UP""4<.4,(d( >Bm\=C.gH4G,4*X20? = 4n"TP&o/<D,Ԁ @(C?-n:W:@HV#%4$ A؀P )@C5`x-:.@ 'i@5HC)Dk0=tpzm`@B?4i 8 =*F<P`R U(+kw,q|C>H%71>l.Pz@o0|H; @b)lC30B   dngqxJ/ b@&C4 HPA2AA3L04AX+="]$,x +&%_R& Zf- sR54$H~@$Ãdf. ?yۮ<x=xkT4C" 4n7LB5$Cx+bb@ S>304uQ  #@v@ ,xAi($A`<$:p@}=dB,L.bȚSdɶ\LrNU}UXHX.kKAQ@ .*#@T*t $`7DJ X=uBU^!?H}29-L $ L| x &%D[!D7B" Ɗ {$0!lL <$,cA"`0 (2GX<Bu78A/7)>cPC>ttoAC7,$Ӆ)J'% L 7[$#x:A7|8]‡83Ϫ(8`yAX| @L_8$|1(2:xB BslE# BFh|nn! Lo:~H8"-8@4 GCA!l@Eui< B"@J#'$B#,.4T$B'JL$+B|C("$B'Fm@>$4,!8|@,次o@I-'0 X" %< @…A"N¯K $8:}A$@U$,#HBA3(@ ' 聙Az0xsK |D?삂' 'A"V(B'*D)cr!0B!X$Ŋ 'br]z>:U0lX7Q̶~(=7KTT;ʼn:1KVLBcDI:̉ U& &Yku֟@C, Ú:q@ p͟$@)ID`1N@P8II'y@VѮ*CĨ`Zdž`aŅ5U$ ]"SYሪ@K '{& 0Fɥ Φ\A2[ـt“@* *B4{\|Q%.-gga! 0ءdee M-d02d^%7Zi`!ǭ{VRV( ǟ{< ~p2.р(u`J-o &A j誊O9A6B,cT! |1pat-}1tGG'2C(@ƢBZ[&1J0u8׀qUu ]JAg \շM9,p h-L]"Z)Bh#+É 4zɌ=@˸'Iő=|)" <H". .27ÑW1q$ cF\Pr ٥o&0RPc0%:`vy_kifN^T9fara/a5c^Q*x!d %Ӆ<a.=I>  0zAJf`{?, aͨF.$Ĉ4 &ȅ21a<"Z|"oZـ*Qc G ! i(E`=kp7#>P`L4"C?H ؠ9$0a]Zp r oHc;?*pl| 2*яaP7$KTE$ЁRo6ItL(D tw۰1rqP7qQ<6/ #T1|Dβ}P #4 V!Y +F^-XcBp?vny2y Ia/\58 (PA$ O"w~!r P^d%A@y tyT % )]ۻl {c@%EabWKjЋX|%B/a]Be{QDRn/NWYt l#NFr0 tPb,@rYgSX)(aQۨ0nUy@ L,04 h]4!@Zg; '*@lEZ /b2BxuoNE.2`x l`@ >Tɻ8pp x@.$ <+ ܻ^pJ0`'2 Ƞall!bP.4! P ,aXSK9tzb` +.*3 xq0E6/k.G't7 %( 0Pa ܃` {0`b08xf `e*hp 8n~ c)wV Z.{Y"+xL"IAš M+ ̀6Kd('6PщS*;ܱJدF2|Q`$`0I{[􎅝'XƲR3lMN: HuE5 A~Σ-4B&w;L{xAP\f$?b'=րF xƮLI3G,$^50 z F! X8q+~` % rHo in B0ڞLIÒpXg -|OT?D~?``A\" 8B5p5/J{R7<DJAE+`- n 3/ @ w?Ž.}$HA V0+pݬv:@T/:;T)*#t'+3:@ t 47T@)9G)0or nu-8,QXN4@X $Novd<@ 'gp0DDyX1JwbEXt@IJLip~F" #M-1 u{R+BMW`tH7PGKr=LttTO@KOJŴHQ4NI0Ho4WT`Oq?/-SYT Y3aiQK`| ڴLUTsW4τTTXPZ9Gx8R4L>T3:+Ol[_U)P[AN/IIX55\]-M@xXR10B]_iUKiQ]MC_yOnq *U\O]oX/B ZyTNeE'B‘Yw -qt7yjj@#L` &hv > $ fNTv TUXB `` l` Vn@H FڤDEq7#LvpWL v BW# &r k$"a `Hsq.O&wtC #dnbn`H\Fv?a@vA`tu5Fl lpV{G7f|6L G|`c @<`o94~@}OE &an2 &a OH΀"WL @p:tCKv%vHA xAC`F97{0! W`"1qs^&px`jaGrE"|5##}- H ^j ibbO R`,@6&,(_@j~ Tw"$*nA;s[MaF*!0 F/TDpګ0[*vAh A]aBE͎@Z 9&/5c]\`>5Aw &aCNSfBa \j84ȁ ON*RW @{B4@f$ZBL;NN A"b@vXFX ~* Fn -Z vn$lV{*Rr+x4С>@Aw D _O`R$1OiB<,,QE3I\r* !T@/T#NP~f4B86?rDa ؁anAaH!`.aa 6a d,Aj*`F/X5 "N}Ờ`ЧAЧAHAH`aЫA|3v[B.P'/ʠaFV@a;R !ͻCx 5elRJea*Сa|, U@NP:O}ҩ2?]Њ8CDAaa2.DazU^!!088:^B'`}! }>+Amb֍+H0j!aH!=(AK4$ΡA{%*F a1`լyxa>zbYwoK+Z7/ŋ$c:{`A񁯅Հ#(Fڷ/! #)N0ЃBBxU[H\a"7 DPa! !¿ aɚp tW-SGTkƨߺ EV(?=$H28xbp[4 $hp -*OYO`gȂ/eQth@Ɔ-w8(%|A:p C;+*Th-JyQKL <o!T ;&4xGF-AcHL0FT@{?\1Bl!@B8c"0)VDtaO>PBH=z)Pc> oAM:* PSI ?+ ;b=<ěe9 0€wLQYC6h } P?wH0 fCls&j=ihI8C.<Plt3p9a>P<, Yg:,!zќVÈLRG 8D$q@R!?T@E#T  TA"*Q AK a?$Al$8A ;`2ƶ$yMP%`s0=c r$.BAm% JG!<% ,FLǰ$RIԌm= 1 ( TӄCt7L4A#ٰ0 h9ܢj4˰K,gl/L7xt40bkxp3< ?G%TINMTT&^(cA+ "E Š"+^QTr=.^8\#K1{8A 4'j4؈7 E?1"<0`c DAUa Dnvp0|xc 8! $aqt<z(:Tؼ@[!9$<#`EL^x& F ֛#PzG$- ,bHCHs<:2:Ѓ"lG|F 0G: G-PJ@0@a<M >‹ p@%8VM2iZS,x` :({sXV PM-5""A*P v#`"A0n?Y Op= a؅^ TR+9E?|DG?Xa/H1qI9 -)HC_R DABA%1 &1T , P2,` $FT?%4r# (1V`'9*p< x1=Qp#xB<8`#hB NV-} . : ! `F=*0}Lc>N! ~nz@T4}2quwDR+\@-*x TTV9@r^\@E1X@|p 8$`8$80রqQ/:`l?ob $jj\$FJ(%\ u qpLI0 18*4G/(wQLj0l#UueAY" P>c}(2xBЅ{oy@&8˶QUpU0?}3};$p|uu24@x@O蘒 BO̊ vElJM t@t;ceFqsѝ!C?a2@ *N` lXa[ a j1= `* # v{;qJѕDqH耛E^#<=<(n1X!(w9"!j ȂJTmUO :QA '8QpC , 4зV_уx|Ll`G!6A숻H8Fasq7p &<`@Vbla(ctcc p P(Fj'pNGbs%e'e%@ ev s3 I R2}Vi@ Q ɀhS f@]-DEQij 0`GEi0oHjI:#fd? '@djP1mmHn4Bk) M%%Vooo$|tD +; Rr!')%%pC(I P Da6`  .,KBl P]:QP1 @m: 0tE7/$@ڐH1 WRur$L|HGnET`%`WS"0T1 wWwM#%#0ڐAd rF<pQ Wz3y E0tX|Dg D'߰{cpĈ7/7}ppkp [` _`O1z b s f&,f{q&`p>PjA)Lac8Vi P J@NPP-`@ `3PP>5 gb Pi [ @ @2  xS!RgY( \ vDp@ 9,'PP @icwx! "0 z0@ns wez XII-'j:0 @`pFpǰ`9Xx$p UP_G]r!n ro.ƐҰMjޠpop{"@(zseGq 0N6y6`o-B9PE's! ;vAP~NjBDr'pAPp4`y e@]!#(r_v $e0 :s> VMM@ ;w7/{}jh . rppC9{@yve5Tpɀ Q@ O0H@4 X0 5ap{Jawyr* g $ d P" |@~e<$1Pq gM GǀT phF&!pWRҡsy/,ПR ujǠ2"Q y@ 9N+`i)z6-'r%1p \,| ITw{- 5:E}ԤoW4\ h:C pPrsD{QG ( zڡ14 '6@F U֭ȝN'9e'TI0M9D FMl*$`$0M0ݧK v'P/9Uk@PWp7PP;x eiP!lGoD Mk!lIU~|z" sKn9 1ܐWT\N *FL0+[S Db?c+p ±y P&mmN @FaOkAگ$q!` T-? )$ E]:90HI.d$HR!lOC:TJ>ob4T8Dn"ݣI_jxX?C< c$D*T 3d#/Tp`_2)i߼p"*_<.SL.0PI[S"Q?pNJVℋ}Z0ffz߇-G '(SaOIT(0H~Z9b2T =Va|!'+!>Ĩo I1B-d:wS@X)H8G{?+|4`! 1OO(0P'[! |蠅N؁pLDY:8BΠ[E-Xt+AMg ndm{yri(c{nA1;~X)'ڠ zRa ` AU=IB)!(*RY0‹WTbVSp/4A | \0A..C$P! 8/!pE`a iց k\ x$Ŏp|C`t =Fơ nBZȡ @G/a{! 0=a k?*@ Yn]LeG3EgY QC@9a dH5 !P>**UiE -8|# %G(@ r=<>YX7 lJ' A84Y'\T#8:t?<N)ғV`c~Wj4Ss&EH!Ac4#{FX!37a 6e7r n@⚲>!r1C ЃԀ?Qfv)Z![ʇŀUsQ /0ƚALmlEE*:N+P! ]k(<L=G8PZPA =! |"e:FrTUT87-?C(qؑfKTd\%.P<7E)LeUc}Ll3@ f68PDN&H7X=,tp=A0@45aBdA{c(kotp|4!`1tT#(q# #Y;%x4ѱuRҒ(o (52A"[|<`s" PCPB1pj\[@ Q Tb\ؖq<\؁YpP(`P"`37CFG "Q#0J"}c mǛX@~hyd-f`IDP!`XÀ$6`vaF>[A`jqxh L0ipڦJ @Y `UqxhomjXAex@ Ay@!nG/pTaxHw.0jPLF0~c Xh1`ھLz!{\00GCdccBV0+0$QŭʳgUz(C Ӟ j.vn?BD1鞺 %C^0(lu$}8}9YT @)tdX;yjD$xp'ʃm;{ 0/u|(ؓapUؗp024Ѐ1"i!0Ț}`8zX6I ( wJ@$;B 5@v$c-&Զ{Hj-b!x#؁:BHdI Y=r0æD@øzS$KC؅&@ʺ;wB#@yHD[0p;y02Y 25 fz+0+[s.. X]4(6]< h .8ƷЁ&`tL# X&(*x5(HG~Lˁ&G@H$~}GtD?qpH-ۡ#J$Ё=Y =I|ف'C( 9DG+OL(ЃE`ɝhh$f"-0N`*H00sdH"@Ëy0d؁+`:(I,"I>Y$J~ XLGHd"H,Cx"G&h#;~# |\L~ @I5N(˖l`ѴpʎȾDLt &@̘̅ID(0,䓄pML0 LX!~עWWa=b% ds y eVo%VlZ5\~X Љ \rVx]}µێ[n 5<\Uڰ؏͸U⊫PMZpuyWz7MEx؆X/Y|Rizֆ8kݷ \|IQmVem|W߆S b h_(F+q$PmiԍrYk$ :\ W``z,HuZe]ܐˁK`zL 4a~`n`j`f=)xa ^لDa^b J̎aOUb1"~["&v!b~c)"⅀| [>Na'mS1b"Y!&c,a:"p=mMdE݁SW}9c [ ^C9F[, -Ͽ T(j eP*ط_.fc݂) cnJ=gfjIefln-lf>)bl6Ji5l(؂@`u>f!(xnh{*}n#'@^vx>h)8*R#աP_ j FՄed&Lg~V fVi 0h~ʖ^ivj cj(jVVlf0UYU\Ư~kkkkkkkk& &Ax @kf}b6ɾlǶ{ lO؀Wl Vikl=؎f"f&ʾ>j.f>_&n>>j#fn~ G(o3_m\o]oV7h~f HL h/ pP p#8-X j> Xxx XXH/  _q w pW>p VoFQ"83Pq=f g܈q G8/P PEЀ/8h/ H#or*P#p(y2HXktso o[x؂4GHp, #>|/h?k/p$XAop4 40A`P*H[ 2hꎰQ@g ߁3`iI04pY_ascQ_ud> x&U3XvıHs=7soB8gvƘxtZ;tS(P-PtwxwXxOxtmFI;9kwı; X#xo2  (ujx{t?߉N YHY! x.Ws+ioxgoYA@j@jbp)n`(m @!frf_\ fX0:HG]/k0(O'pQ0@o+Чf{^˧n~KiA|k»"k$H@/c؂Wvׇ'ׅfW._{rd9!# mυ)|"O{ex) X~c؁.O!<î"(`8BٷI!pD5pڲ 9 ?~\@`3nߊJ qG "ePVA,aeOuQEJ7Cd\fB\A"Uj4pQ%;9P%2mi q;MN"3Q.cUhLc?NDQ >@VWm $-lP2j0Pa1n!+# ?DڒBX)֩@*kT5UpY뤗߸!6c hS3yb e(bL~5eA"cM/9 I3|re/486Qit2`0ۆr0;@@a?8A% .I^c8@!…1GgN}I 693trٰ@'=lAL?N?,0pOx%Q(H54 0:L$0hN$rO>xϞc XFZ 9sy`?i?`J&B:{VrЄ.OD, @tb?19T NMjX+h7ަ{< 89(EdCȄi?:| @x ={B(O>7 :up3O,@J+?#1<|c?wQ_ 1O'HҺY?0"e :Ys |i?m4 uhM@bs * A'%sNW Huwyi eeA'H@ ylO 3wDctyLS9DQÓX70 xi0hڏ=Rsp3?``lJ9sc`" ,HѼUC 3XĩuPq I@QMy9 !z -U` vOohn^<@N0T5ҀABG2G>BGڃPF)6|PWXYXG<p|{("Bb:>pяOt$4A #  :rGPaKFdFc #=S)a]`:!R`pZ>g PcA :A #xY8F?\€T:TAD AT CKF~JHp{ h_O}[4H {"hr2hP#|) pTQ+8v|2Z5яVRw| >BG>AJcT` TW K$1PڡGr{ ×d#0|lZ |#:G ?!ft$@pyc t T"i Krk]AQPҁNS I` qJДHTg+@2=| %6>9@* ,p FZc"q@ah PU8s8!P$9QV }FpK?^|@8f)Q؃#J.< ,`S 1@/P=pGFH_IAЙie3,ް(<`6~P X G&\؂$ [2G80Q@ MX@,50 9Q(- 0rMʤ{[xD?` iZ'B6m X@G+"d| ?SZ" %+iF l 0z# p^ש79FZ]tb_8DJ#buݜ\ ?b8Ep{$U`XE'0 b@1R$@UD6Ţi<;B] i@(&k/' {jlsU H5 A$ =؃i0N,`@/Q}DsL,J|Y?[T( X.C,@,@\@_"A<BA:9-\<@"l UES*AlA:&-=:À= X@ -0q tšcl L+$0O:ABH<#B\1,@_5JH}Q؀ dlQ`  +| * #/1+8BS؀lb:G /@FI@?HC<*L @l KBK \x8+L>,B:؃@p2@@=#JA`i(8JM0#8(@940 h@\+<_:8(XcLЁ?T ;l_X2$LAdH@܃=4 @"^ɁC  t P=T@UWBB0<Zz5xP(bk@ E$HHxx'F_\S/x 2܃74`5N JȤ8u XUB6C)8 U5X?X( lPh ?(2̃T,5AY9 B 40@~ҕZ 2H<~\ i=ؔ=|@č&#Hz h0'h,]M4?ibm LZ% @TBXE@Y(I]/8X+P./T X! ۂ21 \8=``ǬC30B| C&q@? N:B83<.f,B8$UYCP&qybkM"&QMO$B,6؃5PdP4\cH* T *3 <@@<,B2-ci8[c `S% @=0=xC+}@"B.Tin&,fc ds&;-̂2.TAÓʽ2*HR职@jAy o|:!C8ԁ^k )@GT-H:4G?Ѓ ,=Al:XЩ'#d 76 `D7M g,$hn@n: KB|=8yBf5=S*r JJ/DBI8삅/Ho.in4G9-t@@'C2taa 0´>(!%&C34ÛEl59# $@59\ɉɽ>$AZTЈY)4@yC8$H x<**+n,UBB* tڧjA0l\@6 DDH+j9.$?@ 'В'C29LK+?T@@=(%Xa@ }x=܂u 8ƂL{ly~p*$mvI̎lg@x+x\DHMJh2 @A?]8ك d$i܃$Q&2E>-D2 8G4FJCЀ$@`:$FlHijn ĂLBxMnK @n8mHp5@A A:4l @ RC* B,(=`T,\h !ep7wɓ/8q <$ $C=($TpmܺJjy90B8-4 >H0>:,nntZ)/BI3$fCOs.H=H@"L )R. L<%ze8$.:Ĺ4d\YW$48A>[4@5$oPC>̂  ',#7ңp 7p֋k3 @X=q<0h5>$b86L ԭ $eB#jZ-2p{ZH8@@$,+چw:TB'oT$´VcEryK:z+Mx>빢#,PE]3\yU1ē 3iGx:ןy#&*a&-,F4/6t  ( 0ȟ8oމ mTpc7~x_>-X n`ߙ-Z0*)k N:{4' 8o:fË7Ԑ_5-P@7ohKWd?͟* 6>pY; I:l@U -:IGubǨpUv[2XIX0" '~qс6t4 !DBO;Nư7tfHbģtF M27t%|Fya`i)`n2fXyB Ag@\`O8tPp "sСG ,$HZ0g&\ O1Лa|k YrЃ{ 3>p&ر"!4`-#dN٥Y!#Hx`tAc`3ҡ$`}Ac2O:!jT)jD0p XLTRC9՞jX338pq{f߫ŸsNL!'I J‰>]x{$` vk)๛0 #qJxBժ|@.,`bpye2L#`b H.@3xqq'Y'-^؁3؁$s@>v$`W@)"!ēEPG<2@22Pa8G Pes@ra0=CZϕ>Ta40 =$Zᤔ{!JFoGx '^v 4h~J'AKhH dz+X za%h euaN@@6H9P2yʰ@؇*FCwiPB$ ]#A8oV(iNH`lPTg`?|!r`!:C)8D:2A]h7Z!$ {$# "4!,2 ea뀒^%[A0*H $&2hP&@Etx# iSPph*m: G3j#MT@@'ر@В7g9& 6]HCu']kP"A\p((a M(rG .P%qpC X=^c⑮x``?0qx@\O{@Q u|qX,1e0ap?!A^Ň'12I v8 cN6zN,,ѠB/ n^!x <&.="d3G  8'xQ`bYA%A#a d8H: $F0sCXP S 3@Ͱ=19#xP(2+ A ]%쁁Ȓ[058e#.?HH C%k0 H~2s"T02($ 2 8EF?A`+J 4"NԌݺp5adEJ],A``^4a"6=Xw$AV  G:D ъVXG07!G/P#Gt@Hq⾐¶*`4`)Z-"J12a fv@\An, #AȠ~)hbp`D  1fK|'A bad ' d"f]4/RaĒAl@ a6"X()(B2PpC"(`$aC` lA Ϡ@0!,Cʬ J2B4!_0_jL<2!N*$af<@Ș';=Av&3$a>@2@&3GR$s@ *B_U:%a!yxc ἔ0 D Bҡ6fA( 1@&n"@`~4HYP Bďghxp!NA"*LR.dpoG */r!J؁b aml΀yPbAnAp ), 7.)c`!OXt >-cc4 lΡG4`<* 2H>WNAkna F2*Wт@&*4i`siu l`aT8+ȢQ@<2`G>b]KP`"@$J` ~ Gz5` >A@ }]/a.751VoP@iRV/`^!dn bH` roB@rapK pzavD@D 6WvdDtA.% WYu8BaOD`a `&aE"$GW!9$`pyObYrb`:t:!2sy!6HWy `hh^*:>ٛua r']«ʀ[(uAY;`H"b@ok9iaԢTvW*`:a@ UiAڑzd>yuazD (a@Wyڛinr8K෤ZY@tA:Y*ra[!>b9ă;%K<@:Azav XI Fu<,Mzˠ"Yit! q'{PR ?Jobav$b D1au` ۦa!o;u#("n4/BfRh;!!`ccz5<HDt hA / UuT*+j'4bzd]8H`! a#cVxaN!V lJ, 4nP. .#`bLPEo`}%0`Ja PB$@O}:V]*D9f\` 0`x F@\]NE 2ܑ08QNiU BK=0Փ!0Uԡr @` r 3 =oZ}WEwQ\ѡ!>JSVY~҉`L< (Ty@G>]#/aaN[i 0mc@I@^^=^Y!cٻ|ҩ5 X ~l8wc+*g˘7ԄW@XnPsjy[jA߰'#rk0G hG8ƞ<4-l+ZO/n8?!O+Fg pO2Wlpv9ЃI\)gĒK]4E09O.:%V/S<57X@#p+41M8c6.*а(@4zX86|q 0.e|(4xc`..f|+ؐG3šs( u4ӊ,:' 6PBwb: SDB P#3t% ?BM Tj*`u -.*&L4yҭr%8'Vpء@׽ 0Ђ=b 0Um>fAYkbVo\&poK0r+hn}n+P?\/u2>hgA_YPCN“!Xzv!L`A-G՜/}?t@'?Ѐ8%b8*-B |DŌNv!K8CGPAl"@t\n7Tn HF^2#$`p!Π&&"0A 1@!1A 2|AKA% -2./J 8F< C Y3 h8H7,``eJ Np H@Na ;[U@L5/Yu6UPC=M'`h8)`,BW,AȄp̀ j=E,2 B.x3䋦10$P D%B8ъG! AIYI T{4+B/`<423AР(A"P7O Ad\I0Nʹ VB bx.d"cEP -؁xD@( M)ݳ-Ё(Jl35H2%CZ4 ir'|ḭ(mJ=]U:`B޲ O}F选V 9h z < GPnB&8 ,K^p2 | FARb <[|KAgxo0_ .B_2 tP* E+vP)ZEb ^@,LnFl< >)yB0BMBsA,>XW_[Q>]h^&qiCgG?Bt"F RD v<&׳ FE! 0܉lѸfC  Bt}x`F=m8;A(,p 'H x0L"V''$"`} 'zH a\#铋|`E!RV?w/ʨ|t46!!A]AAx1C#8,Ҝi{=_9`> r>*=Z~np܆$ ĥLt?ȑWHc0^} CƈVn0\.$Ds«uC#*l@zr8|lD1C#G(Q!phjU^K _ YdF-pxf#(01({f`h@gn1XPn *p @ǰv3P@Ӡ p$&\i 0 @wȀ ` @f/rAzD$pq;8  ʰ Ͱ 0/`ߠ `e8 uҰe4epi@g Q0pQ e[`  'P0 lՠ,a/PZ!j$% ZqM D Њ @*p LoP 0 G>G@ ,0Ԁ@ 6N Twnx P v e հ0*QȀ @ PA YN 0+@T*Px0  @ S`vCx ,PHpW0 Wan|0Ho ͠ b1*I z X pm^ P+o1[Wy4𖕈  v @{0@M@ .e@à @ xa0 b _|v0q` ;)%  Ԡ M)@)! ]0e !>pс?QpNjhFP&B\zP`4+adɰP_ew q< ހ`rTvƐP >' vF`|; `i*af P pP*~1® P pïA$`]ñmB ;`P] Fj ;{^`\5AlNg8~PƊLkD@ etp@epھ$pZ]qH@"_ T _/QFPPw@ (P;;p@΁D )Qʙ%𛕽  DPg`@pGp8,p~"K_9wy  ]`p R ;pit@(8^Tx*BD aQ DPM# فX{*lYnn㒣$ F@]6  <00!9ewp 9 F86 4fa78ٹ@dD0 ͱp.Pp Mt: {pe` p> `p {2V .>p&2v![ <p ` EXp`:=@^E  `4컯]ApS~JX,` (9p@ Vo| ?2Z(4PŘu[gC|fG ؃Pd_Pq1"L5.քp={:F-BãtD908K|h:{2jTb@+Ab!t 7 - Xu_+,Z*/AG``.AJAcR`MRDzyäG.͟! W=Bܲ .hOP?l79@ q^:&$ Z_ݽGn V[ 2Y$±F"<9'VdYª{|;G Bzy{'/* X hjᤄj% ><@2gYt0$X|ֹB$1ܬ[^H¼H7`N'D{iH N|z&+e Jn*|.W^VYq~Np⧙|]~:˥?1k옥d"/a'LI*_zCQo) ǟ/>0ȰƟXt8'8 5Inȑ% 0<.AVaZ"r'4dD`/b(a(#!IH ~f%^iXPpQC$#ja)z[*>~vHo< ,%R'vFnIG H(=y1D%,ͬqP0Іp6hM˚IgyD`!%嘣i arN;v1JHG z}q' ltdg$H Q0iŽc^y\d!yh/:1@ #= ={ ʎz:0$U&$2uC@P0aG(Ȅ z_0=0i ?ẽj`)``*ptI# >!D-Qb#L9Oy\#.{!Sj<T*J+pWW` 2euL`(6t ,` *TN3UNgAYA"W@d GV4\p ,A,Lp?0ƴ3NvQ"@A1 'vP` {#Mx+tX!fP  NQ`o3L=v&F9 \j}B"\"q`FrᑰB%f TD!}?:};(  DmeC>A  P_A ls]QZvzׇX Px ot8ְd۰1TA :QN3!<5) P 4kM:A'_@v4J`) $@(oB8`EytPLc Yp3PP&%ESf&pY`{50;p`.hܦG`Gh{` {Hs"ܐKɃ,?K`(~i(#`5I9 (D{X)0!V*hB<؀-aP08`[|4,#aa;΢,ȧ = H FPb"I* ixxIO`0ȎQ 3/ӪcPdF R9'I*xh2}Ő t1Xs4K0DXv0<8u]ꪆ3- ' Ze~*8S꺇YVy`2ɇ pЃ 7'*MVˡ2Ktm}`$uM5Ğ[h'htcpC,l(Ϋ@!X{"-0 `0V'm p^(dhϝ9zFXsGpWp+0W@_Ir AW@TyGb@=T$RѤQjpa,8Q;o:Jo0`mPy^{ aQpX4Bo phRO.``yp-H]t```4.H@%d* M]!-8Q0|(Ӂ8sa~* iH 892p&8QԌpbrkts[AVvc\⣬iO{%&j8|Pa` 8D^d2ĺU\IX&e`a`dP3؝<%>d`դa&mh8CYc}P{6uxfoQ+e`< :]`U p:bzgb6uo(ISeәd[~5|WXrh>e HvVXWLdЌ T,ո#؇uc@d|؇1ІN>tN`.|9٨X`xp8XɈ<(6>!^oIh."pk-p0y`]8zȒXcbTXdXp,d|@ X6 [cem=nN$"- t =Rjh=|p0a!%2|0w>p@! %rSdf#XjI6g@9Oexs؇s7$OO3$Q 0IjWy .ppT2XbpI -`@| qtP*xX~~@ ˇ^?;(r < (QF}0:"\yx% GQ.+e >HH؇F ƨrgL͟`P}C}x3y(/m1s$χf`]4jи 5:( H1y Kq$M'jQ·{rRpH*72 Ugs=Ue8*,qg$ Xm `[1'DHqUpP&qN`ctĀ ]qFcgmZ;4=d[GP"`qr]Is06Ǡ:7I )S2؞ [ȋ`h0a͇r;A H.Ch-1?E1\`GaP yHhx+1Ta0}`DP+G +M@]7\qAE7pq$&Rh"EAQˣc;p Ȑ(hRgP m BNTO8 td DvƑ2&١hEHYژ@<rIeU<i@-Z+vUpmaQGS(V,YRc:m Dƭkcfe帣n60HQ1֏"]Ik.d$8Dv;sLҤ_fq<59ڳhn 0#*4Wo3 D]dGw c yL@?;L?ĀQQ7p ?gNPŽ?PBF?81&Ĺ^M5ㄵp'UaVQ68$ap69$J`b9^o<I\Moƹ;auJaih7~(}=@[;;`"8.D#Lq>̢epԋO@)É`͕k=;x( OPSm:Ee#>( 9h 3(z$7}K,  1̐4#BhYDkގ.e/XJySE("8`؉PAT p T p q@FV!+8!c:Z^ "4(šsꦨŊ1&2G"GF2d:1@$r9"%9@$>"ua/t BJ GrpCF+?1$J;?4!N];R#YjF-2Z` uB(*P\B_!c(耕LgFMBFIM 6C-&@G 0 7W*dI'Z~?HblWp#( k5TĩOӜu$iPqSԨHM*ـ Ut9UU(,/"KiQƴ.fN,*\*׹ҵv+^׽` /-mMĄ:a}fT,8i{@"(Ar-F68% ,k{g[: iYK`a7[KVVlx@rM#n 8VgmE͋0wB \ׂ/8sU[b$ buSK^׸fNwRiEV ͬn]`-U@BVn4N_!f;V7sB0Z쁑m, "c͈ [ hĨe:A xl,!w'$x؀ T"'X<LH8 y8lAAP(aUD`n ** 1E6' @gJ` P4|6%8$0A [' $Шjժ*sa40wt+5! ^pE kHCrR0 k#0rp#E1*cQ `**x( jͧG>' Od@~y#IH@7p2x9t_2`At4+$B8CUC)tX]}AE@A+_I)t@( 9T0*i@$y$ljY.@ 94 T@77B T6`B3ՉA',`&L 0T CRŸM!$X8.Y8JBPK$L7 ]'<0@O'pm10@",y4~]!C5}l.T9@,|U,H)_3$Ak26l7Hæt#`1`l!lJMT1>"9H#(e4^BZ\AZ$|4$,1,26x4A2h#L6$ 5XF.14tah!$N'c"HCIh$9xX<u%B3@!Q>4>.|7r4Bl1lPPT T#//+BpI]VE<'p^׻5l 8#uU H:C?C:?C>>C?1P)7?48e E 8Cڬ?h==fj&B8Ȧ?(Brn5ПJ ؃7C>L(7&;JI$7D5,n4xl@7#HD:C>LI Cl^fl@pHcރpf@=kC3 l7f8< B $Q@4a#Ct#8 X4>9RNM T9(,@78-BB9<ҿQ2 @8><=B |q>9fቂA3lC6tŽC:` pÎ|]%7e{'hCa?5dS>#ۑŽi?( .H# [:x]~B h!Q>& J5):OpX%)9A(9HX@R,_%-#%:uz  Cf ~& G6f:PJÀZLbϞ8fe^f:QPՁaz?C24As'MB14S^N=T,Cg~&h> `6he4,mT<@[V 8/`M DmDm?\F@6מ ܀ yAF,=B?b#&<Jx*$ܽ7A YĕA> T124@"<. m* (iALh$t07,T%%nP1QJC 8A2C8AC>B-Èn.@ ELC8m@/Bt$$>6(dA&CE!(0-Zh@$A/BIpp x,×n0@Pp>C&F!!g P.4[, @>?/(MC5+(1BtA|–=l,@(;T.0`D;-t74,`L>DL7Hg5,1ـ"0%PA mz0@'<T& u0D)Pqf TByLl!C:0:N+fN҉?2(B0&=ǂ?( '( Pl@1?,BT|OڀC.ƼN -K#۵. G'7؁D\m 4@ 3;l9D؀|lALn570rp)tox ..+@ *̧!|AiP m[: <@+@B%8!FT;B%p~#\ @'88X$B+t*<2vB(P$N ,ADV @,@ *`)*BiGf0?B9l >x5hC?T v(\"7 p.<%$A./AQHn<4=p`@|~*t0(8 N5=Ă <\(9C+)`@[A7>T274A ?oC (($*F* ȗ8@do@tv$IN,P( 9+Jbkbc@yp{ $@w`R2l$C@!Hw\:~K /C5Ѐ$XlX@@Ha$ M}o 00*K8 B=2:+c'B.9OJ.8: B0n9@;+=?N@@Oz|RH^B?|~N^4=C(,MA'xxB?tAdmB\8@|$4=xB PނQ RG(m%HA%e\0@/\.\A x/U[6X[rPH@^8 CNw :)x2, 2l@2xB,HBT H@/DP8mwq{>d4`nB('(4C?@/  @BL`(1M@@ (>@QasgF4u V# A]:W0up(a]}a{yj\0xɍk:qT¹GD^HM`z钱]va5D`d` G +CXzE6HcL\AA; 4g^R^+N|Ǟcxl7Q/t8j9{9# pp$p*t #B3=1sEP`C:!!a'A :2E/AoAڇ2P@#xCv Xċ u]tH#; "U65c_R(3@  ڰ:ฃV4xPx>y0HB5RTPXb*\"Zp p.L >* GBL) G.@MGb <`:9'#] U(52, (L (f,#肅.~ԋQD?a6.5.PE?jH@ЍCCBTZ^&LCuNH86X M3fи͠T#` hKd:Ȑ`@GP1 2%KF* K#X9Pt-T`AZQG[F*|ʊ"lv E|kaL >$G$[Wlv * M,P%~ #tvCr ||dB3>`h_IAhLc AG8Bq}<5t!c 0C@#|\z'`/Q P.P=a'( F1g p GF)$5| c0z-tF0H*܀(Tr0K @aQHDL >}Ck5d*&JժJp Vh*H_fpD%N=D \`U+8xa@@ z9xpNFXHV{C+(b6ꏎ~tb#⒏R:ّ`):<`b8N=4E5 AF(1p‘`jjռ@2_CU 0αULcE<#WvpI"j@\A KZ`#XE/)x 1zBA=ao=;r0 G2 0$nh` 9 ჶ/ [~` 1qI\ [w0 {RX1ҁҁ(gDD h ! Lʪ @BvHla_8@e:! cR G\ jri \a ! rJIT(TVALÈPaaRa,zV\f흞L fqq>[*،m1P6$^@4`$+@H, D bF DD7@QF&1!CbJl*‡``j<@E"&Hfjf ! P x@N ReZ _5ʆN )FD+!` q$^@5D‡`brB`$X~b@a 6V,`."($H(v`+0a>a@``a 0JdD,@ jB:v\@2ZX!a@nGd0;!20 Jab<pȖ):W; eCIH 5!Q/!1F?°0;,l@+ mq+@ A hF4LPh)&mHT%1Pn@hװ  LMA}nZ\LAc!q`bdJ^2L/TA@n!fiD a^1N$` R$p1Bf 6 4QB&F.6^S&@QQSqqvdV`nȁ68*`!j"U_`X la{f%fAX{kQ^l Y EDBED:bH`&!jʠ>@&&r@Q+T>FS0$lj 8BH X Ճ@+]BAD )S `!fʶ/E"4DMdaց(ӣZ`ga (-Dhi,")aF UU`K`vkJ &Drpsv X&R459;af%H`-:I U!hAaC‚;u~ Q' DKrk3aa NDx :hETwmto*H#j(om( T&"@C7PJ:QqQ"e`) 6It !` @*|/I`N /&z J rl aaT t$^ L*AZ t`Ԛnp!O/`OYv+`V`KB6E(@a NB$v$A$T`$@ `APW 쀠`*C"! Ll`9)$D*:7@3aJg)f@(*@$ B t_OBގo6Jҡn(`T30D0 AbXJba%aO`g:`AO:U`zz` (j;|JT RaZ ĻLu ,Rh1 D(wH*W 1|#~yT0@g!-G6 _Po̦a0Q@`$`k IlRTHy:0$' 6g&H:aTtPKỲ q  _ Eg"pXnQۆFa*C`9jh 2a1a!&a ` <cȡ pAE47 tl &"$`N$<@(,X$"!A 3 nA:Ν$>Y$ @",P82@ (,I nh>&F O&(બ@ajF8TY i'-츠ǟR<* U0¤k?O9JHZ[ Ӡ%i/ hrl,0&,!(QsZ)@cGvKf!t.iIUD0X\ Vp QR0ŋC0 &|x 8™*ID* )1sGr-du?|O#!O8`g 'X)E9Lt_[[4?@u(AJ\` sO2p'y0?t=zP@S $KA$ҋ?A?$L.`=P 8 /vJ$& *\$@ /{s CRR+uJ1r#lS\?%@N>`G I\:hp ]#$ TH"*2 O8#8>ew:O:h@ Ij?窺O I+vȽ4vՀ ep  5V`Bc89,l{? ?vLJfuhրۉ= \q#Pû ( 'RB^ʎ p9sjgT`AQM.-<"M.2t=Bֱ!1vBŸ1f`h Ƚ!R*0y V0PxAu@i5J΅.p#>ab= 4lq` ˈbz^-(|XQq–=~]V؟,W$/z0[! x${> &45QH\D@z 2'G5:ǭy@J J|Я~ ̈́&5SA,`3a{0 p >e%)\ &؃#*K..@S/Ʌ#l9q,bNt~*.Z$fK9 Zeh.1a9 GpU@= yA0 ȅ2 I?5@(: iIIH0yHcLC#:\!v@; UEcP,7Zip))la0<8fA\`ZdE eB*WHLt(E/J{Z@-$j`*b!ULP ZZUF+Ҝ5DNBWQCD[ƀd;5fc1&PE/\ *mzьdL5UĢ.t1Vs`ɐ 9#*VUVpXt*$hY" `glN%sFҐ\g-D0_*;h+(ѝU`q,Byxef U?6O`f4K#E$`F^ N')J@Q8,0!!<2g@XWp'!|>s[@ E>Qev8a @` =b a Np@^d^w?/<s>p|яt=yJN&z&'<GdE>OO[}/;dj#elt[%۳tAGP0/ ;y~@ypzU0BGwwh3$ q`&s*0[ P2d#0vSw4B{>WdeӀ 2ķQ`{&uo0u%`r{!t/yVu7s{/ сxMt–1gtwP7B bCHv3c+LtP8Cǁ?b;@H*bp7C/0@`Z{+aH-Czw0 Wr b*BEtXzr `gyVwXw2TVp08CHwlWQiaGPrtKKamRK!q՘qꁍ8qp!)׸L՘h>1 AЌ͢LV!,X*`/"Ѐ@X#  (FPu"Wd)P( !P*9"*P+PP_Z)!k-(3+ MSDIB@퇕^ *-aOYi&s!Ж)+@H O0!yLѕң1)2#0/u1Y"JH{:I=YߓCЇKim"G`Yyq \[n on!y6SFI*3ЙVw#1ǐЙEYٹxPdY[ٕ!p4pnR+)9 Q*pU'Y۩ ٟO + MPrʠ *` mJ  uPJʡb* yx#g;` Q0+X )*3*` [Ќ9* ư G6 p8  @@QOZ ȐfV?@ @?]ʡXDz! !귟M)tixʧ Zqd 0JĢJ-"pʨ/X@*' ߙ `AJ** :}(s&Gi詷*רjʫ`Jzl:K~ *J8՚Jڊ jz-犮k4JPȹ,Z;$a Zץ(@ړ tOGC [ K [˯ۥE k뱼 +-ժa9𤋮vzhh7)yJJڝ-_!kueaV+JGy6 4 uD#@i52L`M'g ˢL5}|2Fo{{'3KkUZ;LM@g5i:<{4{ˁ9̂8Щ Eƺ"kV׻M`KQoE31',i9ZE'f[0NiFpkfL`_;K"+Kfڼ۠k |RF.POVKdI'kA @?Z#,lJ;* '4M[{!AHuWº =Ep9zI᜾iZfjǮw`>Kf & ) ptP!1pPp!;ptPuɜ p$Uɞ\ʠ,Q gP 0itrS ipF!@piP aeB y aP[?;0u @ pUNȥA0"\``ep P@0̥ C@̝[`̱0̜D@=͜ W=.\eaT z08 Ύ6`pB& 1? x([1uQ5b= }lfe@NGP 0Z#6uЎY-ՇY7_[`vT-ve0u1Ԝ\\wL uKpӥpPVȠ`MB  (P!̢P'p=Q dMmoG``(0`F e0;iUoe`7kӘ60IM;b`j;VPi`ܝ;P`Qeɟl!2`pd-ay3@"qۖ<ӧ˓] %=il]e`Ap)LvR' &0.lPbڧbz 43˱:@>Hq `œ+@X 4 VW;* tNF xf&< Lp_P ]0apP!" _1E,z$4t\bp E tgP]0D< " Vy4;p6VEPa.?_&:@%g^3KáF:,h@FC: R L0D < E qq жӑHy0H E'!pC5C oC~E pF"b ;(@ḻ: FABCPrb6<DemqaO$!pS+>P9@ B3` YwG !8Ap5 Q; ]8G8$؂k4*@bxy#|!& |t/ (`0/ 7+6p:p5U @!`1DK ȴ >`K`)#!&A%'Ќ rik*[/ Sy ǐ p lo 9Π#p]b9ګ g p@  Yp° Ƞqp,,`aQ GMC()˕=zD^ncȐBG!8B=t- M5~y )rIX ҸAt(ax!+8AH:OTZ`H $*upl dR! BOD*- 9b:s(A``f*H{p{BdFaa-\`|Di  88O+`3"O8|`!i`<`(@ FF#L`B'L8&`Ơ:/h`p8wU (:3Ap)H \ǞԩM h:= cG(' tb0)FVn?fl  ,Q Z0M 7c;%:@4m#kVlT {cӦFB.sSP ^8@x*0D!x.`5pQ > A1ŋJTP H  x!&: dPF6 pA4{1VX. x%@S1(0B@A4iheNH@!H D8,$6TP@87i40' @QA O8r R)Dp9Em֨ (H`u됄a<8#|(CZQHr t0s$F@3'@ GAb(l! {쉠SFJP.$ ;kt#@miNPabeihNPH)Q8$ Mpbm285 + (IX/ )n #& -}'\^R!zi*ti hQzA]*9qFJ1 _PA Y1I2qXj@eoG,&i:\i@-Q". rXs150es'jγ&/@f@e wpk)0#`r*z?*0{X %ad=X`-Ow:0!S$D0!d\vKՑ|8VӀ&D%PD >E* ZEDQqQv^8u#*Q ^I'Gp( ~%708Gz^x# A ! ] `sZH)=81IcPց^H|O]E]HTlA:1 C4'4-( VX9 (9Ɣ1yCn;A_h%zC`!Ip `P'J00JpUH o&8͘eЖl1H%c:&,9/(XX$LtPC؁;"TZ` ؅/(P#4.< ?1'*ȅy#4) h` QdxOJ@hX6I%0., Hjx؀2p@o IԸ{  8{ ,,@ Hp֋x*;qʖU /p:H:)88p 8:}J8\pp2G)xHxW2ӌH0R{H8! Q('< 8ɪɓu@R`Zۅ H=eGP[dJzí: 4 |腴#{*HH}'y4Ջ:>z`2y@u nKi(~x@@82xcpklZ8 xx\< ˲<c` iH<V(gzP6F.j @Xz X\ y8 Ď d@]@u z´X| "0hz訄 ڀ-Xʲ< ?THt 9Bt8AP-U ={U{ ˫T`CAcI};`RCnڔ} xۺHBiN>c,4hI0΄8 8C8C8R8#c[8@ɥI䯢9("k@I_g3ȇ%3ΘКTumtX]P=pm\ϢqOLht sH?~8fM{"܇EH H (ZszQ|U?%bLC}{-N:Q"[\#}/|0DXD(ɻު ŜS  `]ȇuHx @:S_T 8X&n/ Xezh$pU mG&N8aEDpE H``O,{R80{P ea [Q XY"Fx^ۀ*O>@8DVd: 8O0ʸ{ȗlVP0 hWD>WT;;-).m z<6Q؇gxC{(gۆE-:`~("('dt-h&O@=dbch\Š me~4H=vxC@PM(̋?888;tF>8H :Ԕ(ۨ;kX:PE!}ZNLyAzoiJͅCGX]@H|h؅~}\{h]A ؂\ K&he Fp t mPn  F~ uMC8_L,.騀@!F蓐@0]iƣe}o v `"]aV(%2N(R` JHPiP5S@('i 6@`Aa`__b  \Hn0Nh O0VNa" >Pp]P3.lPcsQG |2r| 8V[ߌ|k (hx32vx0&C`/\o96:u!)^ @W3xj+G:\DʁqGHV8dM׼JBe {5{l+7m<h HuZ(||Hқ~Hp`*HĤ\nj/ ЁЁ87H >/ FXOpg>|-ӟ́g| r/;#琘윇sH|d۲NhxY4#pNP{Mp؇]`ЀA@~H "( u{%ȳr,o4fJUAHA~8cc0VȭiY78r\80]`\kj@ ؀/`Y[(AXvCH@Cx-)Q2?tJ?^m {#铀UvP x{ 8PnCV7g8 N;]xPaHz &k(0EQ 8@&-\FU IHMʂb[ ]cU!8CS$`9*I={r|A=kLHT /LN: 2]u(m֞*tD't FQ#IyO8jHt`K+`=H %08CE Zl3V&AA*eC u,dA D9АT !P]a@GbZ [#`Bt`Xyt b1B}Qz:P (sG@2́ v Dx< P)Np8ҠL(f~ @ ~A̢B f5 r bq-Pc O> 0Ocd&A/6# ];WAfBP+ރ(/I ``: 9*'*`R2SA&B͠M6c0ȇ.8r#Wxt` ;`$=bW: BQC8 exe Ktā6nA>37Sy *[/x,j8I 6uxF`PPG+ a_Pd샧 8 Hj &4t =ztQxS0+t@ 'AG80вxAoR- NZ8 r dQ1*BN H!#ƅ+N(H%TCV'sE+Q = !8 @ rW 1bP[pI$ pcy!* 1/x`G{̲9ґx< 8"1>BB E?Aog? i0muB 086`NC*,L )C(u@dzqMØJ[eF%vUdrk׌)jMFPs0O c:a vD5PAn6wc~,P>NCDV`f#ГHI %.-@]pxѼ71aV1eMF +p9Hmy5`H`H4jz(+8;ht"${$||A(÷&Sz@؇7tB iPQ DXWZ@=PG E:$f xeX`T Y:)L~>xC~G? `a9| @\Bą ( T@D.(@~p5B1!.Ș!#!7|DE܀,<".D0!l=C":dC☄􂊔=ƕ@5mG{?0<$b{"20n.C%X,kTAQ/+R tB9C/h7bCCC?î$D=H#ވL@zcl7x>ƺA6ƵaJ3h7R$-$>C:$ɬ LB4ڃ1̈TCz#@ց @ɬ[)l?A?h\7@C,*\ =#@4AY'9|,d.8A$41$%@ME,Y,xOl2<pD:TpCY)F3NL8РrÌ#P9؁pi1 x> tf^H3: 8.1IpgC>U!3 NJņqYHp HNΠ*Bx؟z\? XX"E]rD4>L'RI0\9 $AbPJ8@ppЦj*3IC |$ȁnli +̃?Bڙ*mɶ$=1#h4 0m[@ȁ$04IЀ~=,T6?P!Qɰ6"A,3O6ϯjfT1T"L `"H$ݕ@rIжڪtY@^$AH!lp!Hm Ԭjɘ [ $G@ʮ2#|ʞA񬏭~+΢DGy+iC6?+Qնl5Q謦6P[C˴ Āa$ӝDnjKCTȫs~k@ $A,S9mg=#;p 0Pf% <#PA i خB PHB  -'.I|$ўА-FmLaCƇ*o9q.I._@ @ M 0 ( h0x0 BX? ،BP \@\0a=@ U|Y%2 @JI,9c'-1OUb3l#Lq&13(z11\G?hg +qOl-I[J1%7GXJ;Ql1WGc̓.'113 oT4!KqC0r3~'ě#I S'9 2;.w )fp%*)! / pI( 331;s34SI1{ 4[Aar8׼81 2+9zt :r:BU,,/5?SML/AW Aa0¨N0;tT c8EESq:".G/?Ԛu]E˳8wsB 4& GL30#23#JR7u1u9!rK1Y?k5U WSX5u`d045:A[YZӵ%[[5uM5x5]W o`8ab-5d۵PtQ)=3N$uSÕhOhK5T?ZkpjCv@ATd vljFep `vnw oO veC6vkvlwo Ivsk vrGI7tgc!ka1#T{qTgwzOnvMw2zSSWwܷb7}{vZ7ucr~'{zG7|8#}xT7J)y" @F3 8]WQj \@xl[L @Sku@m \UmxȸCW +wjuK5 |@Uux_NUJ9{ydmjem[UQ8[c9VW'aW9\H 57022Ği2 @8Pw2,p `8 |A,P{zK\W h@5Цφ,@;@;XYu<T`$L H@&3:;:8@Cz1 <{ @78 P@llT9˺%ȁ 8{ @zcwAl>;< AL%;8˯ :Aʿ4lAx@?{w'iK@Jq<(PtA4GlPO/DW =J0xRq4sJ@|qc-zk|A0@{w  m0N`8@ֻF,wh>LMhA4}n ~SFY@|pZ_ȁHҢ/k+0gӹV |***T71@|B@@2sWh@"P8Xċ $1pБGvF(Ɛ7]14yĊbDCY,YưCVT8Ie}ܲUh- J*@'ry%?G ̉UvbًAɬ$5yՁJN68Q08c[Db1n,b.rґ Q-|Ke!*~MҲ:[AE*IUߊJ N`mq"Ef@ &Yk#Bgӹ#itcf TH ;:$+Ah#QЭaITl _A櫏cZĂPe:!&!ǚDFNx@8${~Q0~6в 1tgV(cpL&Ic&'~RPAffzajp>{o@'Gntv. %~ ǟ{fTrҠviwYֆ2A{8m{HV6(1X zmr8J PZ'ewHo= <۟X0#AyuxZñ#jPfg0_'q'B'od~؁!D#@AVPcch"pXmEX pX@ Z@@" xQDh <8! -Bg7@l߈9(,I_{^<\pu3H]=vP4A"X 4fa>8.Ç4p0Bu%7ēj90 ?"b(cLkp9B":&PqY> AnԡƆv'@p=r(4v ΂NB)^`x +R0Z` X*zUW j"]0Ab[c[J =| ؆?` TB 찇yly.P]AD)NX +G>h䀁 `(  F ;e-5U1ø0(&ɚ179<<ႀq@2`[-'] xBE\􃍮dz 2Z ,Qta/\A:p*Ѭf%q8\a SQ-.|M@GA - ModV'AiUZ+xT)8p"b{HuG8x+!`P^ .D^A 0ll xl`? @h$ ;>q"F&щ&<ȘeN!}-io @.2h0q lMuXx feCp 4 { XJ=Pbqܜu!1Ά D-p]4a9@`b0D̎P$@``~/B l`V K7Hr/<(Cou aQ4!`N4D2n/B@֡(A6`d  @d baʀ I7@1RgJa0 ab@(F! ":ah*t`! H VtؾvAleBG&f!0xʀp hAw :`m A@a&|`nzA@@Jh!=@ebd Aaj-`F.h` `DFƠ`Xɕtd6 b A(g mj`}v &F` ت$`F0` `$T#;! aNP- ^`,pP@5@ \x!*Q!L p*|!N[pa~ x8xn@Ul (=HTcI`vv` OF@xɈ0s1u`}B!,J@ZԀd Ms>/+N`!CjEI*  l0 b,'n5F`9 0 i P`o J`+g@xO/l9s䮒@u@P7l` z??autlVTLLh L` X`!H/-if &l I,C7h: l P d Z ~U S`$]E.H 3 {!(16ADv f PsQbxHև :  nrL$!"/t5DA ::!  DbAAv+< s 18  Ёlmi x,@`@pI:@ Zi tA Va,NzL] @` j5! >_,sF**q:%ab+`',6R'y$Z)nn nLf_ tE |`^ b2+o L[($Ph/WFm$@:RMT`B"l*K'@Xb(4A)`2vz!t(ᆠM),ҁ !¡HPt`aTQ@V@bArv@Ɂ < 0+V:mv(' !AQvsbG! ց42xaff -nf&wv"fJBa8D hl  Wy^ T`ahY8($At>y&9!veta# , i.Z2ֈ3fla8aOF( ꙶ9fM@5ffF q" * H".H[y 6kn[:+H lm BH f $DËon Q a ;a :@1Á2n Oav1-p`QM]FD2C@SqbaZCX FA2 ra z%:q Hڧ} 8۳c aaAvPanoZfdm U7l3FX~i!Fn0! CXݰ ~~WDE N ra#ڽCd[8gP`!& \RH! Fh.v1 fJ>Lma\bcggvhBv` `~ f@d Hc Iȇ' $/T5x'I‹"Jq(b{⸀-7(. R\Iy8uHsl@1ȟo÷J +'x0߰&UQ(k1'iV ;`)4ޔQ8^qс$ G`!.31.@a,#xq /.VXNۀ4 68(r?e hH\Ab TNݮ`%?zBD"$`{F@QL9A -Ly(PByO,E͂:< H '(Q|3MrZP~.S 1@=<C ="OzAm9"Q9XIPO:eXQ EcOW" XX*G g ).R=D^D6|M"# VF * 8#.xc[2?0% 䍐T<Ѣ-,P2Z?ĢJ+S-C-`12R 2s!D}Zh1@ zI^(M B=ψ"̲0:ls X8*9|(O89՘D$@A0=FQ. 'P3t""`9&|+4!|T.O,%=`mvaG;s0, (sEJ NDcO)<QM70RT#.ҮTOy8NT_h 3A+)3إV[o5WRuAAC+<.p@ #`x\b fbt&^ @pLh`j#ځ"=l`%G2h I40 h&;iJP9lAH!x<* VL#xDp3bBN /K"*P$@%'#B)\<$"Ɉy`D:ȅ?!n. mlh2 0K[mh:ǃTR*cr8#M$c..ce E,U/? 8'i?4I㸀n96R4GqNQuuMCa^R!`:3U '8 9ȥ j ːe„#<) T7!UpfZ(Pxqx :W @RH0Q !ґV$A\ Ntbz}>Ĕ~<(-Nz 2 [G`*0z"!|;^j'BPVWˠ  = |p -PqQ? `7bCW pV {$ f{1 p(ifꈗ[PZRX&uuS pl02*+ [8!| XP^3W2аqp@DK@ Xp EFϫCW0TQ͠F+tp>a f ;F k~`SUDdi` k @޶F u7 v c(*qG Sr K>A|+ |B%$t>Q z[𸰰<0< E ="p(7syٱDP7Er->30; L]q[ vQK Ҫ E$sqe 61#7 (@>quErQV =żAcf Z9@gD/hK6^ y <džպ5DS7 M\35 lްP T[$`j=L3@-`X51g< P5C X`/=@0?١; _Xې_1, Jk h崽x`V {0&;>fp'} -A8@\ f >80{p'&s i D  F $ri [mM j PM֤ ׃ж1 l Ga1 ֐p%: J si00 G# Ȁ p@kp@ qg٫g SS֋ڢP7䠤@ ʰ  B@ ʠ P+yIQ5jmڪ /+0WP}|֓R|} *d Ǡ UpHT M|] !t  M ;0׭ ʀ [P;u֢P⹎?y; < Pʐ P1{8Pp .~R> ]+`tp } Ⰰ  pN0 UVl]ޤ0Qpڭ (?Ơ ׇ Ͱ P=+ypWrF/N+0 ;`ܦ=qܑM w Бap| 7 .* -&cꨎiN p֝ 6P ;@YY0 @ @!5`胰. ]c@0 q0A^MdY*pN P H `$L 5  `֭0 iҪמ֞p vAW5v #"N*p L@}WҴbP`7f`Qg?8`p:apx%q@'O @*//`LWpBh"? 2 PYwȞ6OF1E_P6A[ = !f=6n P"p #3<T W/L:5k4w/ @'P `@ >thぃ,6PȐA})S 1Y/_2 !dK"e  T·WTQ'\Ѡ (M[Ъ yPC sPFn!>X@-z`q ,nTLA@=S}łѹʴ"FWg&N0(Xrr"Tˁ\"^`}e l 6 D(p8>" Xh5H c2Zhj@HH?h-n`9 mJ$(*th"#DH G`G€(H8NphI҆(mRNOW= W{XV[wS ă[QYo%4@ƟfЀ4E`*)gLJ la=j -,(W\Fopeu'#qۅ)q'A**[y t٥z_ ~h @.xA:jͽnX`a)@0yOiֈV֌f$[sM!8CyNvA$?@[2O2# :Ě( *0@c}Z* ѰԠ ?lg9`4ڐ XNPY 4@̛PnSb퓞)^:TubSu UFêSRь%w"5yng>S d5Z'F°45:W=97@~4P Py΋u>0TgSuʪ:(`gK"UPG(*KEزF D-σUPk,C(JEV0<8=T s, +8s8cw81TTЃ @ @6A h-$a&`B8 `A D `RA XWR Xrk>P3xzB`;0R`#IF(#JPa $ 0V! nҠR,:B-7 _PNbVN‰Np5$ c Bws,#ȁ> [yn8|g8!9. #b'@M$XLءv/ Z@ Z Q܂up.L ,U&XEe(a .Ǽ^!h whpШat`B =kOȖ|gA/@f-iNX2'lzhB yCԚ] aO@vPAx36Ĥlxf0#NT!u(ުN;hL@2iLxT pPܢw8l. aP^w A X"tf1PcX yJ`iA=_lϏ(1#Р X-2ӡ䢸ʼnY@wn&-Ey:#$.0[n:,aQJ1p6:q[0/z;Y .|_@߇0KGD/v`kδ 'l``&/:= ?@; `?Ӗ؂? (U>: ٕ2At(0郄RrDP R8xI`ۙ^ ^,U $i @p؁؁Aʃ*\|~ȇ9*؀>dp`1jJ-:[Xʂx\ ؂%>LH*>c#0,`x:XBtX o@IXqC &FQ]X[Z](oJW?z Ccӡ4ĭ;܇PIk@A12AHiCh@y8Ӿaؗ>lBUS:0XƝy8p_pi` lzELOx{3GcX 0І9C 2~H`؁A3\7$~C@+HH@: IȏN(?{܆2XDFPs;8J+أC(^x8H.P=W (6HP˟X=N~ |Xdx] j]x -P~`cЅA`Hcjt4 &?{8~@DІp@Zmx:(L0__pf؂d؇<Ԭ@W9"i0fX8%[2 ش|Xujd~팖#siXyXfXj(B>Li`};coa@C88(4̷؀2(O]cXoUȇs4Np4HSQ5&!DU @Pe@XdH~ xQc0fpuU/j (u0SV`gT2` P Pk@ hcT@&4V|;@nZHOPlaORp(B%D}X JxH^8MXt\h| [ L? oLNd^R l^ a: 0U؇} ~ CNe0Mc-ZT\ *Tc00t0SC8q]RHo^|/p RL1=KW!l!E7 `HSj@Nxx*EUp2@j؅5nX؇uHP0{Y<prETjUkx2`ihZ`H Q YP:jjY$ H؂(Y* PLЅ[8hqU ]X8Cv S)@}@b U ^`p `{^J vh0rVaeL`%̄@i{`1`i:@ @(3݂۸=G+G0+pT pK^~@l^ ~~5:lރ`Q0X]H/n/dVx-8=ݺ-v u|Hm 2plZ&PkC'+uHCCX`,87.)( HU uU(e|hna8|ȇp")W59(8T.2`{;SyK es0{#`[>k vo[sЃ+h×@D((dGV 'zrL@43 z :8=[- @Ost s^VOv]P8ZcY Z8tUdY 3a_<`%l$xXp Hg.pU0@)H?ՁoƂ-7~2=dtȄ",0琰Ih?j V64k3"qɁ% Uw1xU؇j@ƚ&v 4"zx=6]\+J0 03TGlJBvWо)(wT^88KWJp)bܶC _X MDp0tHsd-0 0~Eɖۅ}aIw}@$q%UY-Fȅ}pЁxWINtu02p/'؂)Xv2-Z+-rhbcF޷(>X̟ OPq1a4v 2u[E0!>!37\س>,@ ;2xC 2QF$8 DӋ? cGt$T4a-#?Xc0jRmo1 |T5Ae2| %cCggBCN=B$<@?GIPlQ-s"l?('.80cH!|Q%bN(ԼOP! Ӏ@0Y7`r:7/ X[P96ex@Bcq09sE)kU?ӌ8 Br&B|`PP ʢBsأP'Ã0p Ks/9֑$c {ukF̃ej`9t &1 #CeHl 7I ,`2]8#vF;>ၑXh#Z nȇ'@~:GJ`tBH@1(‚JWaypGfēs\9ate汰$ZXrcWhbx DE/<$XNcW/aU=@+L\a0i%x \ &Pl=4R!=8&b+^kD0R6&0]FtG:,Lb{`Qړx$zA rNxhfp9#.hU"@BB4A AִGi 0<JaJ`\ie5&[Fp<  lp 0U#@>! ZdUzIb5+1D0+o"S†%h]%00rA s/ .q>x#Nw+oTAVP/PYU?,@ y`C% hԅ6bTga Wр[Vmn8j^TҚiD޼ň :( Aѱ^h):yXZemkwl`&bi ?j$ UICx'ZPCс(@0`q[@ހa P47Ծ` ;?KnX?h~` ܂ 9 'ym4 @зK O'F<8b;X`2c:WZpy LPs@X`@Ò8FTᗂǗwF40^! hO(ंlx2f:j <(Pp^ C!Oh}@3hH5l:,9X@B?CWK{` l&='Ft<A \Iـx ̀M:@Z^A}(@:.(!5h>lC ~:\Rd&fۼ 8*D;,01d>RRJH<$S\̚4 /DTAH-"5g;5@`I|lC84=XaV=Tt/ <F$:C"HQU:*cJ?F@ ExL94܂=|COE>8@':ܼR1 hb[3\8bI|=4p>9*=Ud=@Ilt-^T+QI؀1ڼoErݡ9<AXl @CHH&ἔ_eA@?:Ct%8Jf<,CDWlcQH>e)X=me+@ьQ&'Qb 䁕B8Hu4:ּєa $ aYŘ^C  a *8 X2<'uMyfEzI14<1<,%<,1L.d1C+Hْfjp@%++X@0#5aSx,8AF@ 4oB+HUTlA &@LP:TR@'0qi(Cp |,$j-@!> |@Xkt &[XtqDH,kAv>L: @8C/4>'A =T `֌ lA,$=.9848$&xOI1 $(cy\U,.t]U}DɤnEb7DL@>ÀB,xBcA4d@Q,@ `JfE X%4_= |@X 7$*;E&(M=#PZOb S@!V@U.0U=Ӿr ,#t-Ieh]0H@ '#j8@!#^iFĊ.db/T @X+@K5Q` D[DBHAf? b:ep<=lAG:bhC?Tp$L9x>l}U L@*U?EQh*U@B@AЂA! IT$ TwsUw!8A=t(h46ȁ 3Ds/CqtQ @? &C'#/Lsh8tH m@=hHT~N3(p B>$]IHhdĂrv'qv' V) u' lB]<'1A~@,?@!u<B"rt@'Ъ#oWEt4i@t'G>B@8=ƀ1g!HU2? }S8d&v"o `t=X@=O"X IUpA, ;B6=Cfá&9>b!A= ,009Ё<0|8|(f2.JA@p9x#@h8ª+hE!TBp  [\%VژZ@X9C;2G t Cy*⾯2tAtH7%=?zo2 7p6U@9 iC8Vx9{L B?C(D6C>Ѓ.8 i/<9|õV5@j>`B]cTC53>PEوC27?TC2l]:A<-v-9ZפCj<܃mBB#C,$4l\?CizDK`Qj?C5L7k 6H7$D"~º*==upsP:H >4Av@;>49H|0-Eh )cAX>PS`Q C'iߑ2Ie<<Og>9'3Q@ܽ{M328უ_EL yG!pD=c9.Ɣq9t;G$O3Q|6>C޺:osա |Q- gGËU˧ #cI-tw,C/ˆ3?.H<^$pٹ| zY?{޶囧J:U=r@\\M]@Ôf-8?xժ׬ÊNU 탗,~Pon覚c@yfȁ! TN"ف g'(fxA{5`o  禜v*EP6|^|PH ei!F*`Gf€)B |@+``^̈WY|8=}T^"SJ*J@ő.FzI5Ur`GR'({T=5oHy|)"_H#U|&GDuYza#gdJrR=}bN8Rx8iK֞uZ@1/SUeV `1䁊*0g>(\2F^Pi$/:a#OEIe|ajNet$a\ε4pIzxV( AUXaAgD$`xx+D8t[D VȪu(y/hQ8M4脸p"T)ixfIBNğjP"`y$ѡGyY|T9.dE^hTg 408|E[TlU7,$~p䶎*cO T/r;ڬx6F"EbB{`)[pЀW.`Y# ;$vE #˰ 5pjX]LF@t0i&]D6?$A,]#<,4ۨ\E`z +j@PVI$pʀ@U# %e |puxIbф`P |x="1dhNKU8@1*xD8V0Hbg |,ª:؀; 8"ED|h'}È$%2z@'|$d;ļLfBLX<^pDдA 9H3&;B @*e4P|` TZTO}"|f_*y&Z2ݗi` .>$ )I!pD8E+їM >$C"aL|)J0#gEZR4*8EH!%( 81fg*WU2} A DȊZcPK/Y@ 7 ԙ`:!Әd4Er)IUCz&] >GUN6DWIZ,/diRs{#|*W5+h_co(uŴ~7HŮx D  ~2p"'B Q4Z-(`7a \dS~)O"@p?.xeCA3r1[N1p("}WPHa+T % 0_  0lWN 3bi-jbEyM6 `ь4 ]ڔ+x"4P&x͆v h$EjKMe(cx]RV(ғf`s^XEh`= QTMV2\0ՎMҖF5s&֎F+rt0b6,bgШ5miE([rcvҠv1j;xrQ[9Rӏp fg>3?s???4@t@ @ @4AtAAA!4B%tB)B!14C5tC9C=CA4DEtDIDMDQ4EUtEYE]Ea4FetFiFmFq4GutGyG}GJ`HHH4ItIII4JtJJJ4KtKKK4LtLɴLL4MtMٴMTL+ tNNN4OtOOO5PuP P P5QuQQQ!5R%uR)R-R15S5uS9S#" TEuTITMTQ5UUuUYU]Ua5VeuViVmVq5WuuWyW}W5XuXXX5YuYX+5ZuZZ5Z@ Z `[5\u\ɵ\\5]u]ٵ]]5^u^^^5_u___6`]5]@ @ `Z5 ZՀaLb2ovvS,=AƝF})-6ӣU;\wrrwrqKsyxݝ[J}Eܕx=y}`}۱?6 ZA)s>~=V?~ɾX7~d`ᓁv>[C!?%_d=5U}c?1_aE3j]Z^G ֶ9[\|\F k cwcy_aMBCeuvfF\@ɫufu_7vU[(Cg90!B9dPDj0 G[(5;z2Ȅi9G"X].OсYܳS&!\ $$;T&ΎBpt:LG%9j2M>34:xH󈂲 I$GiO8#"sϗZy[*Oah.zPO?5BERX:1z(V :HDzP!0?HrP(!O(#١arhYёFbѰ J'NC?*Ԣ?H"Tv% 9Yɋg qkP9{ L>?bjΦnB]'_Gv#hMʉ., ّ.=FiÒr|!4c3X+c@x[Ѐg|Q=,"I3e-Z $.!mLr.HԾ[ި$Gc!QCh馟:VAiGzGd(FNʬG)Hw839XAy2ZcH쒎0:e7ٓsytcMZ+N #Hݨ$"G۲݂ zBcw@-؇oxB cQ#!hAVH1[! 1 tcQ#K΀ "E!wh9q AD0h/" ^ n}"pxP %#Õȑ n5pl5qAqz)y44sX,-J[#8G%(rP0[E 8:nOd`F(="}8FfSKcK%#FP pIAG,=g0D$1V#ʨdCe*WYFB e[ȱ Hcǘ&8\DpK5,YYczPC(ĕ<4}ATx%tRҐbQKS؎5H;衡 Kk}N!5nkYހ&1ᾐ,I0U@B"ņC vՁhα(DPLtne=X5_b;54VZ6f1Ϧ)9QD2ΐ ]Ge G|%Gtd.sH ) :DtsK N$<" =1 ȁ^`lfG1$<G娒D+S :hZIaH$(ъ9ϿPFv14wQf EcEhSPk`]A6=8ِ:_ HaJH 7KL= QT@t I r I jw z@ ng.^ @qFcLW t4_@y@ )bb0nXac  }"32v.cTiF$Yc`w@, ǵw 4/?_w& qvPi b sUd  O ^+j@!4!s5 +0w@ B!I43X8P c]x~b@_*YaG :Td @'=r sfbt aЄpx iVӀ6LPiWuyX<s"DIs 2 Gz y)àv@!Tp1,geW4{^e)ط::sS( X@ [`}!9' U'EVt*J`~g QXJAU$ `t-?dc ^hO"bvFkqr2!DG"bcXtWrA͖b--/h6z@':"c0&a@hpio `\唈 D2 a@ "P 8N1bgؒcpu^9#hC(#f3&#?#be%SWV15ɚ4F"f-:EٲAI de_ݡBUYZCOIZ!edH1uP5y7+[\`!/(Nx5 V1B D6 @-!1rF,|UW'>DFV93Je|G)kC` ސ-hbbQgg2Z d 7 㚥Q!B!( `-prҀ~:kӚDB$[c*-. l 5n٨aI2#s0oթI!?co @(NCC^xi u;#e!#X3%-y MXlǛ`S wҐZǰ躮.| 1 ip wi5X31d&ؽjн1)2 0 0ܒSư \@ z  ʱ:,e^a; q"-%ʸ k-e[4p7K5\">|"q?xSd957u؅62jp ְ\,HrA~}gkk JS L1c[H_b&!A4T@@с]58E q)4z`" _`yTdaisDjUf3cR!n} AM8 Th-s~e3wp#3$v q݁zJ01c3S2щx{ [ер1 ^ʀFiL 44+r3 X9ij{5 )&i#`6iiS zɄP 'e ˉbl5_PtR J[cƧrƬ@EfXKKz+q[p-& ,_N~ T0bg <6Y 9k̂)WPriPnx wp }IlGӗ p ǰyGT< ! a 0x;Wvǐ P Ȃ0 @@vk 0 U p Ԁ)0g4 l@! [ud&GlpdlM 2<Ou Ӑ =ۅ qÞpL&!j *ٺ"v |M PqƼSC`q̴ΒB V&s} Ջqt: ёq +xAaG6YY duAB,@iPRZJIO>a<蔌pddבD) 5WOaLFXfAz e1~ d0!PErǪl= nQ ~d+`-&t≴)3e"+_%¡ ![1 00Jp -?r+R@auQZސ&[iܞHJ풕{g#jXs!e@ qG+t耓dtl'/n aJgҸbYpa&R z"0-?XJT,Wh_dő\NO=P-+սp @ o# P PWJ :4Wip57P% ` I P FN` P  @siF Ґ @z0 0 ǁ t? S? ޔ<둜GZ'B5w0JfMPt4nq v$X'zb)I[Xu 4kn%Ӭc֒"%EMj,Lr4EYk˓52#vԖhRr  5[6+Z:BKRP75pcXr*.JqlԝgaڏZq&˵HD A*[*Y[/zQO[Bu[_Q5QnR5YQiVރ*UF;fKjjlr : :vX9c*h 0ԛf>k3 YщC Ov%[ri<;#m3DSTqE[tEcq˲'3IP3(3P-2tHZD"YD5HC` E!HHԃ!2L77:C -I0[C'\K; 1%oH9 O9 K3K#Q: UQ%Q#34A OşjHMk+kSP=( 1PUHC0PV([cW.I"UY$#1P;֎8%#L=JL4T@+t4U#>"΍=C3NR Ad4IA3I'^k;b35*b`&>!CG%NQ;@!C52֐V'A<6hVziSmu({fkD)R M kTKmisCFEWG28W~#fW;(GM9jq xƚ6irΏrC}tK7EQNAoZptkI@P܃~xOףcbLÓu!EXqn&⫷zMZvi;bF7|=vw}5 eDN3 /u9ZFza K `h42{`-BkqZQuAP+K=P+da ]BP35"5!;a}C QC8 0ĜHHFRd%-yILfRd'=IPR$e)MyJTRde+]JXRe-myK\RL!8D1yLd&Sdf3LhFSӤf5yMlfSf7MpS$g9yNtSdg;Nx^&t@g?OhA zP& UhCPFhE)zQfhG9Q#iIIzR+UiKYR3iMiJtOq0UC%jQzT&UKejSTFUSjUzUfU[jWvUUc%kYzVUkjxHUsk]SU{k_WV%la{X&VelcXFVleeYfVlc1YІV-gI{ZԦVZ4j]Z!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,H` H *\ȰÇ#JHQ!3jȱǏ CIɓ(S\ɲ˗0c\'…{ҕ@`"ѣH*]ʴӧPJJ抁> Z?8 Dlժ/^L Uٷp#NprmC`/QZTC/8h -VV Oq(LZ* .JsAwlԅ W&[J+VUv*pP8(.p1_U#m૘O8a}?uBD "tC.@7Q _ZНc4V|(z0` `RA)HhA!w4Ck@|`B%.O ӢR/ 8@(peCbP%eCoa3AЂؐXG ?LcwBs5sl'BqzGwwܞ.4C`ׂ )~#1(brD$Vfs]*mHNq?fz%y!Lžud%_%z&WBԎ8d*i\I nےz0k\ۯo|3)G,,p(##l "W/',62Hk&/>VHlrJ P,uMtWB[-{+3PA=.:mp׍'cl&A+] xs&u ) .0.5ˇ䓻v ֤:8,;}xꍯy92H^Wv<0y 5,#\2#7?zҲ=~_5w;Y1>ܼ'& ;??׿ R ?nw/Tǻ/c Ưl)n\˞Vṕ  Ai!D44a M8;= }rSs{5Q2; ֜bNꖓZqN'=.QaD}#weƩxS3^U$mlcЍ{djX%SGAr^x6'oZyD$6A` D>A*` R8 Ǟ͠ f \Pm"r4n40/ L% "eDȢ\2Y...L0@Tvfn kC Xl03A 0@ "8Keh=uBU  E#33 WzO,qgz UЋ@K:x `2؁V`6cl͹X@sUHÜmUאXq40t `&^pXs@ cm`w'A89 886]fQ ^+؁(fvXA+ 2;C t2wx+ A7@cT!j# |prAF[fta4!x8 GR `xU^T4˝pmLٯЌ7{PvI+ammt/^фX`7:1@T ګ>*$@#C u~W2tXSŀNHDg]ocѷP|{d<^P i͐hBpn"0 pWq VPPt&K` Dm11` \>J6qLlK;}#fD ` p! @s`B0m@@R mu `hT`iR| /@u SP@hxz0 p@  S ` H v B `H` : Pf/# Љ%HPs`'@'P ~ְx ET@ G+`` 8E j B H r@p| '&/ #0 H+`ppw ?/@` p 9 pf;0 ` G ho` dnp/6,)FW8hް @ x/ wlFސ0 @(˰p3e@po `p(Ȱ`7ə`x0  rp'Pv!=0ޠ BI @` E/@ eВX}I0 v i'pǷ - C ȑ  @ɐ@0@B ؒu h1, w1H!p@qrp18ȴ<$w#<$f@LpL[Php 0] uX 9r \S@'IL `d3ްII@:/>{jO0 g/P`aPSZ1@UGF/0N Px<{`4 O`I&lU rzG'1PT[% fs*!R~qP) *^ LP j .@06S P20 OEp @U~-{Gj @EPv ;;xpew/+ zVzAA%'۱*2g 0 A{?@ ). '06*jF@G+< 9I^9'!' g(^)0@{ 0 pDp`z@K;~͗vL@*@SE   _P@ I0;jh,K 0 fst )1 C0F?k E [ 9P_ UAIPӀ;OfBɚ9`G@(\V ` {KR 3؂7P @p6P\ŕsTp` 0  @i0p]  ݤ/`A()nh<@ ބ/p׀l%0GH P0`pV g/" 0 M }4l Us6  ސ B/`b`P  @,`{Gp|/Cq0 Pppv( B%;(  @c, p@ i" 4- pǵP೥Aau0 N.کт ezH 0 .]m4"iP(oXYW=`4$++ t i006#PNp yTώ В`WD8@m?`' ۘ , mp`I=s! l ͵P P{`#pXpk.ww "F*Ӱ<8adF P Zdbp@pOaZpYGpf : VFTi f;/$%ǰC|f `{P V ` PRP&  & p `@fG0 @ 0[Q 6U(`Upe& T'㦒 P6opp ]op @BEr` 0p @ @P g/ ` /u %pa1$ ^<@ l` m+ 0 Mg;PmaF60 ET 'jN`fh u(iJaApp PӪ ð @gAh P`#u> ,oګbj I@dm  ` P0ơ"'~=3rF Ef(:`즜0PuPtr p,A. а!5G6A Zʟj8=PaTla˲{F9hݣʼnIz=ns۹YX%(ћ^:NDJh?{r5 @jgc$x6 Ǜuo@`a d&u#=a{#&AAzĈo@/i GAf X(ğjg`hfII'YtRJGPpbjz'gT#G E"rrqPC{!ǐlLAPr$Y@)jvpna :YoaD0б*iIgNC4(B'' rl#VMZ2w@ &ȇ]^ ZA bap0Ğ487'xt}{h*j=9{i~Nbny$n'xI.-D!4Czad*pй'/e:o=$`KH i,!gY\xd*g&1=ZaHAkAbp저Q e@0(!)sGQ:~'zv ET`Orp!ӹ…jWx`mH n@.⅋=;+ "« "WpP V.al$dIȩg[@;o+4(7pdm+=8CD.{la D#e0C"I`v A @  C @G&XiL@G?!Y&GxBU 2PY#h* O԰hBzP2 1>BG>dXjNH0 C8?Xq*])KNcpV ?8Ghx #zP=&X` EH$GE01t <=Rz_b"cB5,TCU"#  HZ@^zkvpB(d([GI |h(2 `'B!̫J!(Co$ՆB?ZHE`h@U؃icG>0Z`i ]`E{*2E``C4CJ?Ɏ0@'@9⠁0~ ]J bG dk'<9O Jb|H7 0a74t6HX ~C ̒v+p r@ v HeU1tkq+Q Gd @T G`"A. @K^ DK_`ø¾P@`D`~]pEkjDh G@Dr0aAX#C<pGStܬ a p 9[B " $1 .$c b5 #)xɎ?ҁ@ 3Ё1A.e=J&@GppsGP4C?HqtD!D#zs49P9 ]Xh$)i<`IK1d="&H ` M[h?Z17ɴ` {XrmeYrSA   uQ@2@8i|*` X(`YA,$j`P53xk&a4I ~H8³AĀ҂RPɁbAkB`(/8`xc@ "]  pCO=:@$YX3|0 z!5Ssx8$ep2`Y;(i8=`R$d3A 3I*xJ&?T3: P2tQ 2Xht@0aTq$|RȄxO*9RX&(Jt:(ZJmX[[dr츅j(2 Us(\i̙;ЀI|'p`LH= HI" ,ih H|b؛tD'i  8xZ?ZC$ xhB# hC(K9AfyIXHr[B  PcD79p ؀a\{+ p `h؁Au[8#M0MAN l(zG`dHu8XX$J?&W +8;Bp84PP?zϮQy(^(r؂'@vxdLԱ P A`0@akkP-(B ]8[3# t[:Xs@[!AHGsHph!haOǔc8ЀI 8(oC#{`R؁uVh)}6M/8! ]3ԁ- *8pQH<Ԁ̇:[K` (,qBUہcۺFl5@C LHdz`lk9`CeYH5; cElpst Ѐ2؆}hiIQ{GGUyFcP**1`F-q8Z8b&HI(89DM*]Dp"ȉ9tу4pȄr*, _Oȍ- Iv XNhaa`VeŒ6K;->O*%`Q fIc-3л-Ox,U}H&8'd;>!x-*؏p980Ѐ X^R K{8\d$!C +( +Ρ@5|P--P{Dm^#K79 r \[UKS 0"pĞu<^8YR\ZCs ؃6P ?HЀXW88=0/ f #DǺJ`!&p 8R0FH8;R5HX sx)S`8![|x,FXC7~Pxz?Nhk&' !J~@-(FX;4818A{i8TD^p(u Hk"7^F-AIP`\K&Hk6 EHP (,r[>#e]uHɄ26f™pK Z#2{im4jXD 8:Hy*(=cjpHcX0X~tC0 )]vP]f(p zOAPRh"87vK<CHb!ʓ|H288Yo >5 yڂ 8Ef2(.z腃B[t 5E#H]͎Ѝ[:'}$X$jj J4(=;H5'-u78E`NG%|o(Z6*HFh0rL=*XR(0$_4 oP"1H#c>1Ok{!mNʧ9Y5='Y* n8{{^F]РxW`PI 00qM. 1>A3 k.3= 33.8/*chV8k#('ca5Q 85 7D`(XH8 c\؅^ЅAheQ=@*]upG "*Y_vrITH@=vh4t$7 ;Ej`f<0F-ר[ŤJ.MT( !tB5X0I{HH\#.<:X~ $S;&!bċ$bj~Þl8AY -TF߱+&h\&DshV}VIw *"E˛?pLBHd .DpC%ؼ+pC _ Hʀs *Rp~9C`=&[0X\H (A0-GEɛJt=L>'h?;6s$:4Mbcc+c1 tϗC%,`6K$7[x0 NsR844#=|4[ W霓4sEB}a *B /h@XfҧW |f#&&*c_J3LJ2e~! ģRhs F`NER'qP_XO?+ :bACDU.3iJ$'Uy9yD0Dۅ5#r=JE%4a\I0*-:ќO'L0ID JQ  Jpt  17cZ`4P@ ڳ*keJ#ԠdG_'$HU#adl[?1$u-;T TI?ld6 RMBr5cH30͊sr|F07̒k?\W+0xƻm Nn1 Wr) ='| V. 5@V[XIx`c *"$ Xp܀V"蠊{0 * .@3@`= RhPm,tA 0 ]@b60D>PHplM>/T#B"D ]Xr  pCXelHH2#WCbQm0IHu"aE,KC-0'h@:5a12veFAX#`_ .r >қ08B"0әДf FK^ $h mrSBd x+`(rӕ4D"LyPW4FQ5a)XIR !LYD$¦'h la'xi2p_,z CNJ^&"e HUOBzTWRzNNC't1 L!EY:LE%, l&`v'$IAeXDlԾr Vګ t` X:JK )brx@G,B .}P*@y(bR4<$(:kQPĻK-VTA!J]PbT!9IPx/V2 66-I)҇N$%,~bAD<*91L@)$$-b! 0X6U*r 8P%|.djDBpA H;" & %$;Td*P{4D>2́}@R<>&@8 8$91̂R4(c:YAѥ;hJ Q$B$$[=Z<No5jV'R$l60X;7h-o#h@=us$ם%h@4e}0@AfT%} XULKBķ Єt$hM0`&&r&% 'XסgЄ#}:ENt+*%Rw_=NMdC>nthw%@H6bT@ AGE^5x7_ M<;<ޛd<`K uK@ܿ)=#wcMSz֯#6wCK3A7I`Ğ"rM`u\%YdI [%5a=E\%  @ D,*Ġ r `J$ @ٌ@] D]){ada 쁗ҖP\.Լ![\!{A:aWv!B!F!:abLBO r6! @F"ՠ!)a "J{p!""hAaBn-v+&(f"DŽJ-&bva+Խb"SXb(1"ễT"A]lH&c&azb63.E+bdL"[r@?qcAcA ?,B1B18p Ed?ڀ<\G~@$IIJHk3L$JdMd@'dIdO$MG$LJLI ePReNdSΤOdU"JmKbSzeWN^%XbYTeKZ[dV>*UY&%\%R$T ]N%O^dKae^ea$2 4fc&eZBf_V $f&XH2=cMB ?d$m2&$&n&ogofo2C6o&qB$ lLu^'vfvn'wvvV'xy'zNgun@@|u''gurPgnA6ugeJ8:Vgp ZhV(z(~'{f~zhV'A|V'`?xNhzg(Ar'$yV?_(p40fn)vV3ri6@?p EA恛iΩ)ҩک橛h(oAi*.A $nvj~j Sp**jA 3zުjS*k9^?L ⪭*{*+6xFik:+N*8_^k@A**jց I«+oڪ,ꪨATAzA4 p()ɖɞ,$ H ƬƬ,,Ƭllܬ&8-2->`- =mnf6*2-ݪx *֬å@|ܖmlbm~ʥA",jnpmB䮭֒@؁jmnҁ@:m (oXNo¬P,R.N*AkJFJ.x t/g6دB)0Ĭ,!D- poϦl l -o0A ,0$! āR-oXmp , Ӂ Չm2 ;0&0/AlAmkA"ì!,8̞0Hӎ !cЁtp 0B lqR"{/6nn[!, #ڦ!{, -0_xpS'A(%l3Tp0#k2 .!# 1n"ǁ o&0/3 .:A60- "A?O3kp282E,94?.IV;crFOqs8I9׎/FMr61#6// ,3@C6:8bi4؃=CYoi6x.A+,'1H4,A)]-H3u]u^#0+B2B,Am:(.B(t-g'C5C,$0<4X6+cA(_ !?H-ܵ]B 0H3'\46n+b/dqA V-/n h1<, f- _ nc,HB-p]TCew0B,v5.wJ7l +uh- &1#AR .$4tx#,`Wvˬ(+0+"(7sC&tmm6lS|1'+#(3. ".vhςv/ʁ |v+0Bx5WS?6A 6'?.B&0ylӆp)1$ B((0 -(ClvӞAP$07m9A>oA"1c6̞xpBmv),B+LsԏR2]W9`r)H#k.IA3B)3IF B+l;vdO{J-;487FcVl6C>Cu6CʯlS174>L>7=Kx $7r,̃sC>IBѧD?C.A,C?C<<uo<+}>H<CLo@>, JL$>C:BA+C?.x B2؊um0 w0X> >9؁!B5D3?<${0VC,~íxBC>'(,L >~?xC&I!ÃS, <`cB8KNE?7<{<9xBx)[#<|?$@cgT~7@Ig/VC/uO!qCB&W0s*cPh0j]Pg0 ]~CEK#(sޮ/ _:Vj3*_;B1ѓ+!>U#&<ɑbjB_ F͢d\m&&!iNDk1K(+1h~y.b[v)cLn(3j䨠їD<L6ff\OVcc}{ɌNQ)уɸ[3X~\ja,ÓZgta : 1C LfQ R+IM CA( X(NIǞ}}fxqGhf~DR$TCZZC]fR,`fN=cPmeNJ%!`I:Ux4ש`Ğ|&=,wI&.0|DЪbm/8;[-G>&V&QA=GVȐ8J.ХM/bE8>5oJ9;v)By{yG9po#=gV'Fͨu&US{wsثH>F5jv[I1atP iYLv<[BG 4-a@FOYY羟5$g>"VVnd0Z’!:f~sSⓆV3$( B"s]b~Hw@'̈u~^r/0f)WYR ) $!Y w+x+a qP E+)!]aOe=ɖԜ\!d0 %PIWB"@~?n!Gdn+ #F a& dTMH`uqҐ@;C3F\68a=Ip2 3216a .hHc Aw@H)1P愁RJ&c`$Ga]=ڠTI3:yD}6z5Ǒ5#lю9#hk%,)^0BaňnmjR7T']ݜ 9,O=Ů=_ CcJuU>&dP0p52!k)D5[ɠ\C1Ç7Նq|0uHcP=" XHWc@O#zZY|y״nS ՝8+  GRlķ'!aab! :_ ETK ˮ?& |T$ ZV-GAȖN8!FŁnNm#Av,YHo!,3;H=8aK!]p;qEd8BP>~r!Dqt 5wa. 4f.N4 <XljWC GpD mDq$xčxxqvFhmS !#tL#"JB$B rXNJOxFB 8XA;`aY.{bOa/v F.S/ Ap.5= 1b 8lRbk헎9Q#ZQb`ҥXREM@^(/"\$!A>R CR e BxNa1ۜ-t8 !' DyzDATxqyyDCCGvĮv|~  aE[7;P, pA:!F?P(A ᧳">Hl!TMByRh*<b8% hIA\V#7^ "Ni[қ7AT UFn؟b$gn7^7|C!ba O΀!~gMF ھ΁ ƲѕA U,"EԀbbUO,ЀT eGAP-$ 02N4%+ 6@r1$ #=+Z*_:VT<vбퟷ;+ ϓ:j$o?|{FơI$(=`sޚ7o!CؒΙVӲ"AP͔CRr(D%{yx/߳,vEՐ$ءCft8$_8NhTMa ֒{OD0S1zLO̔V`甲uÑ9Qxa >I5+3NjO8Rn+pih)3MrƇ]e"H2I+: EuVA<p\J Ⱥd!s ]g(Uگhc2 7RIt>tEJl1H+N : GVeɨnT9b50CIz:,݁wVqLxtvX-dD:}djPxc qnauB gidۋJ8xb;&7o#J-@A}pQ v8tY\$gq@<)OCVd|_d#oqK1ݕB8H½ VeI zHLjc$kRr?PUD !tŠT*p8AE@ r#c2IpPq8 9d³헒3 0IxԢȑ{#Rv"4;) @PG64";q$p `V2acc6R$ĪJ`!(1dȇ4$Gp5dGZ.4!2/._ih#xbd/c=!cI! pDH&$YKx2vX#(aG05rD Tp'Gli4b1F=aEv+59=蠪hTC"hp thpo5vhnSz$[h2;Q, i7`-Q`6`[h (P{03Av{ ,aB"v$Fc ;x>=2$-q=@$הyGIAb' w>u`Xp.ZQ-h 78X%&bmx z\߁rg'hh0/*8"&a, 4 Wɰw;y@ L g3fw`]1@c Xx bq"D@r@lms 1r@">;!v{ "mgT Qd5' ` FpYW*U4iZ a~h:1 d0~hfݑpSV#Pe F 3$!  i@o HbF#bB&M GW(@PO`td@t鰓e( )tِP Pӱ>",p+p :S-1R瀖2]v _zwtjw h\Z 7hI"9"7 mvVՀQ *d gVɐAw {P oဖ#~հ Eu4P x*?b3"(][r0caL)vy3"U^P߀sz ܡЕCzYq[sscb4 #X%x`_i e Оә h hZq +C1%oyN8 pThg0GjLhy $cIpbHT:J2VyϐizЗ^9 L!pE Y* dbMs t° OP' MwSFPh 2b qcgtÌg@;@ @"bBz ypKZ%@4aq$µ-#"Q{u!j#C E/pp `'c Z?H[7-;:R;d`LYƗj/\Krx.g0q@#:1;2ip ZA@őt)PP 4n:^6?^<8N㘂)FN5N9`0^/p*`WY[]^~/ U_ngV^R^io'P]pnh^c>w}-T烾"SNy>b>a>+nZ*P.5pd}R#^.5w^4 -@-)뽾8.-S.ǎɮώlN~nٮ..~A썎~Nn^:o` 14 n8pR^,0PzR3n'ob^)1,_3(1"+/CO!+E)K?GN/GM5X?]V?\ "^5_2QoYmqn_bq/V qOa0 !o/sOc=L_('eC@pl/0Oo.f o(  EDt j2_'?ſįl2gСE&]4 (DbOϦ]mܹ' y%κ/gs>I{vX : !AsA#, 9Ll(jaBK4D:@  ThAn$ KqH"4HPPX,TZ`R+BjTI0sL24L4TsM6tM8sN:NO@tPB 5PDUtQFuQH#tRJ+RL3tSN;SPCuTRK5TTSUuUV[uUXcuVZkV\suW^{W`vXb5XdUvYfuYhvZjZlv[n[pw\r5\tUw]vu]xw^z^|w_~_x` 6`Vxava#xb+b3xc;cCydK6dSVye[vecyfkfsyg{gzh6hVzivizjjzkk{l6lV{mvm{nn{oo|p 7pW|qwq#|r+r3|s;sC}tK7tSW}u[wuc}vkvs}w{w~x7xW~ywy裗~z꫷z~{{|7|W}w}~~P$` x@&P d`@FP`-xA fP`=AP#$a MxBP+da ]BP3a mxCP;a}C QC$bxD$&QKdbD(FQSbxE,fQ[bE0Qc$cxF4QkdcF8QscxG+mNkmM;JnZl1 '@@C ۭV ,lB eJ|A\RN-` {F,KLq^oOmvL2&q*O~x~x:n)~渽:z'<<&8斾,S>y/~yg4 " n_o*9 {UW.ǹߎz)̫>o=!w񙺟žKNGy;_,?MPxk $ |*<S+ݼv/|3 wa*2!x@L l`Aa  4&:v(T:cL.aZȀ `:dWPa hP*^1<`o#G\i,oI HAB# CLDJ xH1X`;*`KN qSxEF.%/ l@#P<@af0@LU$; 89N&F( fv$cϙN.`|EWՑhlD2@79 7L0a2x$/@. L@aa&ʜQ@᪗4wkA|$c Ci! vU8hWP8HlTVFϠ(Hos= J'`=Q(R' >! *bC(rlNq@^AGnAr!PC(vlIxc1\p Vp_IH[IլCP yIf<P_4*B _B`h]`W.(AOhl0NAU"(v`b:@Cy{H7e(@bt`&)ф@YS*` Vl3Ү@0`wJW6@:tNv=y. O$@ L~VaEH lb:Pp]6@챏G8q{LAm?aQq[~q~N;0 `~@u" ~ppF6 G`9 H; G~6p "RDP~pH0M  00~&*P0 8Yu wP~Ѐ eR3 %XS Xj`Pja@CJ lj 0PX2hU 為E1z g` b8 1P~P ePMЈ008xx䰇XxAg@ PzȄP G : EGKxXy0@@ưHYR@P P/"o%X G[(JP )IVlNp ،?@ #i~u *XАp .?m7kh~j+`uP :\  \LɐytT$eLp/@G_gӰP f`0 RPa4`14xc4)}N(p#`!50pG0  p* ps wp 9 *( 99 :MЀipm0@ pP^(] @ @ Ǡzh) ` pe00 ֩ p6 ` P `~ހ 0 /)' )9*  .`~ Y pA w C! @ # o`i  U PЏ LCP pT@PeI ;p+ g jʦ1HP,"p Ppzʧ"0`p)Po P:϶0 * ; )x@* g '*Mpe@ Fp"o 0 [SЮ ,ڇ G,R  zP G!0 P0 z M  { I P P[)` Ԡ o :'#Ip%Wx ĺH y  z(l3z0 Pu  `0@ p : P|Fn Z II%~ Q)@S pF f[ 0PU D @!%[ z hXVu F8f ``R`~u``Pu+p| VP 0}y` ``S_YPKC  4  <f C *! ;. z F'@ ue P ) @|@f )  @9 ' pM_0 y)$pӐ b@U@ l+` 0  @P@փ'ĺ`;!  E$\ T X bjA6 lM T [L`E 7p,N'@ " lS  % 0 <BRD< 0 ux?4 @D,% | @z$0='qH.𴳀ʏc@j Gzn) 0c7L % . P % `u0 @ `[Qu `P3M]׆pp?0 EP[g u/AU `q` ` }{yN )mp `*7PE,Șy { P `e 'w9jEl}- 9@ t3و9Mܻ$'@(Cŧ( \``|i&p p@$@veGufji$! )߹ 7^" @P`" p@cS[pp6, I)` cpΆU,`u۪0  0eai{>C*[؎JA$p PiVUMνJ @ @`ܰzL"0j _ u$dPO{ LpP [ ` `0 Ř "( H Wr.yN  0ހނj -cdrde :.#`Ӑ0$ s12𔖼ЉZ)6yp y(BDp XtP$ߐpPeF@c9`p.)M.n P ͦ6@ qzP5vx9)bp@)2NА }g-0O: P0zٵ"`RX0@[0 % JJL p_< xF~[@ ~֍$ [  iO0%pA0,`D? xi_5:_1RF(  C]Sg ]B<1l< xY0C$N#kRvpr\%D/GTCݣ$' Q3=tW6 lCvx7 x=DT osذ "Ug ?@!/ R5;yT;6r/DPbh8R[6hr ȧ8w[I|P?2R )p0,X>X!}qPc>z'/0/T&I 'aaH~ )ctenşdX0(ă(At'@s!ZD {d1&`dI~#C t2`ZAnDd@şg\( *$Vp(x\{ BUf9PZ=۹\Z5QÅr`P0u1DHpD&IRÚ}a> Nf%tyRBZ:^IVfpt  LXK. )n b*)WX+"Pe@~,*+ `|\8x:v:[lqXkX3 (?F5b$"rx2g(M>_cހ$0-L:ZS<` k'x91CP 0r !F( 2 ß!e=Q vJ(dhh',$PN?R9NkA0ۙX&4,>0d}D0,ViVe=D3 99tII48A`]`CeJ7q]22@r΢=$rMLhIFCz۬BU:`kj 6`Ʋ*gC%k@8}"i(h)и !e{6#dtV0` #\X0$60Ѝ C#uPbQppcBZd+F@ ٢ G5@l OPmBċP:HQ 1nmu,~5o-A&z v.YHP!Bغ#c`D҈0q @ aErx4\@2V R}tIE9q %˹JA7$/xQ .p ̰Gx * | W 3/.0$`bBDdL#Pr8LÙ8F>t>!snP@"2'H>x(u v@/"a3`x(]؛RtЕD OQȁ+.DT"@Q'o^H[t-H8(-:|Eo*{(08HZHΗIy8jFkm  .8~p<)J#xk||]8ЀHIr@MC :@W'{8HWK}|]-+a|XȃY%'L e$#8 -5?Mڅ;ɅHID3ЀRXUtejdp \؅D`yS.(ԛL>k`}@Fp:CJ5ʂBָMꅷ+xr1O@NxxuuѪ&GU@pOЅ]`}y--7;YPiNP:~hdB xm؂+tԉ*Thj$,${ߘ8MRixhL/@ApؐMd$2A]O2}cf`&N-˖t0Pu_t'8}cı = xUYX[a(𪂿=-D'c+@{ij"-ֿEo@ccxhAT c3GSTx1909 Ci LCl!-YYb<tZxk "Fȁ6e'YAP$Ix) y =CX+|Q8)r4 Ѐ)H55ԉec@}'"06 dp#=4I}c]Xр(E1Z hhX`849*B<Qko|t8᭵emh X8ЀZ'H0ЃcXOcHJ0N i:߁ HohX88]HBVx [HHAhIZ?4 & m0`HH< /O@kHh&8p{AزfL¢ ln϶x8X؀.Y@ o[]UŤVQF}MW9@(` epݖ,@)(. ,*O\;j"XyJEpaMretPFjA+ -:YH e82q9)#Yz{Q2XE{8L0$R`I>.Cf&` X$DIAK&amu} I!8 `@|*ЅE)$HYZ!v7'*`@XdX(`GO@vjH{ pk Qv-EBxm-D+hP ;@#m]o؇ )X=#G3`.JHƊh/4.E9=./8()ml"G:I؂)0P~9`0h-p)@ X J 8L[` 9wxi9>A~@'΁☕C؂(8@Q),28^(<~8/xu@HG`Zh'Hu.)IH~H'hDYH@G [HD[2 @Pǁ-h*lXA&pDv ' ق-*~uou@,0rCP(]~(pq0Ah*9X?\C]rf|pȁFۀc RH*]қ0tx0@}"(hj`4HpРAIQ'R7ƚ?UMw.Ajd]^SeʖUpA3|lhaР-S@۝7jC>%p 7TRBB&O p6 q&$XSbh! Јb$8aF͛[T٣WD'rDPL‡XfYo[*KBa-BO PwIQIrҖehMU|%QqDtWM׿j K̼=e"Ll? tO?@je7vӑ}:?RA GlDI4j?1Cc+C9MsG exPA=Ǹ *b?4qD0tb3xB'@PO2 :A ?4*4F8@>D! ML'M4B ,$r=j@A7<Ŗ bO?b !Lq?<$yBA0pf+K1\$Dz8+ARI%0+ b 8h8 .q8S ߫ Û7MhGbs?D[9>cw>xCp|-<#օ=ǿ46pct>y_sQ r?HEQĉ4=1}^`AM?m1 F79p Zc)C<`[GTT{=P>RYE0B퉢fl,N)"V؆Ȁ#9"TfdNaEzoP%#D*eGT^*Q1\4rEd6 ulL**>ɟnGigB:U?FNb?A ``> C)|ilAY@'c,p#G`4'Ba</|pKCCῈG+{[* 9 ^`:C0$Em6$HGuȆƬ:zA+V8 DG,0$ G+rQ*H='.BFnh HشG>a4X4 J1PGڀ(%1 `L)F6 pdbx^I))@R-`"8xAe"p.@#Q +\0VSQQ TpX]sA`4=)GBPoh- cmH9aF*<&E3 )갼4 7?E]|?F& ZG@&P91C> bC=}tW¼ :ԣ$D5qs XgIFIÔ_3&P9APEwaCF l0P=@5*0]  ô8'0 + G(xPR4 4OJƖʤT#tDVR(A#@a ȩc(~ r$q!Eٚ5 ,l8dD̙ r`0@(`m"EXl+Tt!,ɠfb c %ND4H@( 8"y=ڣ ـ):AH3bb FcPU`A"d@IJ iD7 $!, d Ƣ  xD& Ed\] ci@MdB"cP/ڀacQ#;v%EVx D@W]oxJ @]^y@]>Dp@@@]`.Q,`DaNLJ pTZ0V&p&f ) &Ef&kJ`atI &ifo`pDhgJAD+>g&nfvfh`f lFEo& ̀yZrnΤwևfmNDx:g{'#VU@g(|rIpvh2gE'jf>'wZgnmV(EmftZ`Ypnffjl{ 4h|]hjrJsNh~vArhEmq極-gb&"֨}y*(E9(RihD=C22鐶@fhhF ʍ}ht')p))F@hK1詟ީh>))Jhw>\ǚiuEd~nNhJgAP\N2)nv9r*bjvj*R02>jjj몶vr +**q1'J6*jnk檸jƪ.n6k*r+df;Pkү:kkjj @B,A"H: J,+X+p <:,6 wbF Ь,ެ,,m&-.) >F-B@ JB-Bqֆ-N؊-JYڶFۺ-&f-29.CTmnmѲ-&nϮb-zR,@*0.f.3n袮.fŴ G..@&.o N/IFAvA ȁzlAouK/ޮF@ہ c /0ʁ  4 @LҁdoAl0WPhlo O p a W 0CCp Ю4GO1SW1_[17^0U41gqo1oXjpϱ1?1A@qqq  +2#o0/r"W2%R|"S'3o[2(r(gPq*2-rӁCpβ-*{F`/ s//r0 L11gs4wp Ӈ^IC9ϱA@ p3CG;6.$ \aԮ6@4AA7/}A7Cq@?E_4B7 docG4!GG?2Gч$4Kt?F,MDM2}264Qt.gorQttp0O/5F2G3+T{ {?5osV WsPODuX7t:{L6 8!Qs0h>CoC:C >$'XC+AXBod9zK?ȸP#9tS7'J4}P40$B89imG4dN1AC0:<$:S!;<`3-HHP5HzA,x‡0JC,J?!D{kD8 >P~$Hþø.䃥y8p+r ÷K{.#Ԏ3A(H 4p¬y5t(G A:>C A)y:d'{:AtZ+;1J.|A(NkD5 T:9xC'ļ4[u+>0$9.Ѱǁ!$=EAA8/Q)$A>.90A)1GSuW[u0=9>!A{C>𹝳<@~G6}AA,>+PW[s2C:} zx1HD~F4}0@ )%8!"Tc(ټйC %8Jg>ƌeK/adgo-Ѵ'^*tECÄK\q)]'_j΄:<8lكy_ (rB5;(-\dMQ9k"c7:fpH*f.rYآZaCh*Ву&3,4JԐ#g C`Ǻ=F)ց'sJ"yNj0H&|#X~;4p(AǺt&{F5XY瞩&1sZlwÓǸDvPNVT*6 A\J qhƸ} ANSjАÅ!I*gs, 2vS NIͬ3ȯ8aƒQ8b];TV$!]gSIuu])xj4dsYGp-cJ|JQXp#e2oZǐJ:ʤ3Z(#'oF0"ctXиz ]Щ*,wc\&:ba$&ag}f"rVj _nmYvInY8̢G8#Pq@HD5Z'cTx97-s+`;P=v:EcCJ1C#]3d ~䌑ua%s;#[C/Ggăwo<;hzprvgIؽP{{tDsq[]JG?bmqRA;/@]j`B'Hs7I(d)?P,E%\qp?2Q0r4iFG;f()02:C1P\En1֑#WAv< qJ0zTjfa>q { wHԏB<|v ]2 z6⁢ ~^SsB+A#gjD,@aVĀhNg?4eccwP$ Q"τ8;|q5&LDq>; c]?Jq e8jF?촘DhO 7v"$28@QJ˜ JQ!Z(@< 0 umÜHcR2QwHhYe_qQ9gB3;̢1q9-"O>'-!y%2CaQ&2#CTP [Ł ,$Rl!@V|£ ˮ oڗ-('1`!`S0r`A.H2D9*Alsr@_`E ׬g0^ H'y`P1TCE˦ BfFFw,=p+#8x2L' cK)%A<{=A.4ې3|NǃղjXjOк|!Ȅ0P}~j.bC|/x5saa.ECip vĠbF]F5|;3&n J%g૩ҁ#R2a,/֠F  Ra %v0!Lݼ&j,`꧑B"Qތ-j B FLBC՚JT^0 n ˆxȠ H0$! ĀH* jO0 !s>A€ p0"ĀyI 8'I!Р_,ۼ- BJs @ f! J,NKFW!T! ˙0ARKxh#m1K! b0Pޏ +#ZlfJ&alPJNNbn&NFȁo&p0r B(!>#G@8jc+cA !wB0A Ld(k$pK3 MH҈!ɲb!6i! IJjr.D% `"<2~\aC  Jp,Рe @ ? (&/| X_"n`"@aT= Fv(a…y ߜ 䏉H6rDOƀf %/Z0jekި9%Ka `e?0, a!: 002h@.4mjZ+:!BL̀@!HA1,+B, ! bA@ɽ^1f !\DDb#+ ` 5W\2*3@B I3@*>_~ aaZfa4@DQ(AA$cb!a"k5 @RDHm&njhr,ْMAJ!eHN$^nlaNB!!h*mRnh&hY¯8 :`aB}*4a%BTHhV]' BAc*T $AH#R8)!i- \ŵ~etҽb5b 0`o fXឆ12`; (A!J42Wl75;4! BMa`n₈ A58!"_68B Ra8!?! !'bE!O0AlIRZk `I9f!X% @+\l)v1ba.$s#T@=k$"?| <>pׄF:8 k=W@Ԏ+(^`Lbv@$woxa8Q$ɀtBcJ $1KBWJƲHn!JLa  tkDzMfljN"!JfU'fZBHzf`p |@Z!"x6xd*QUUׂUME2/"8r n;DavHA!%$aB@ 7@ ,v!/k M㘞\ ]k)"l+4baxsl},lB!4Y?'j aaN@!GwU@iaO:hfY(?);]ۤ>V$f  f+B"?+7 [0F<9"فhJw(F@K ?Z<[<!Rw O|,6ъ\NgPԷYBǦ |QR%L+遙W,:;'VjusJ( Zh55|Ҡ!@; Z0[m " (B a.$B]\`9uȷ/@:1D -%'* F`Z` HOf=e<̙=0!̙/4tCR:AC /e"+ȘÄ 5 rFSQ|-: eT&Q(0vƝ>x >C=z 3;hC0  ;C3i6dOX 4N6d3D+!aʋ@DZ!_!?ըI_"3WBO0T:<3 T4r!t1=a $ ΥBtI wgEG |j:t$lPb\ DqB~$0IP\#IC`L6[Qhx0KۼdqF @-xLG 18? yuG5xtQ :F#3]v> .dl0LVMdaiQ2,bd-z`_¸m(=`-B:$NdERt!L!jlYaqMj`B)~@n(a3!! z>d%b޾ sCD]d^f<wu<! 7i$--]d0ĂU u `AI'ASx a7 gVP;0AF(H#KTSCJg\arS 08DI P FKWBXX?83Xuw?x`bʡ@Im u/"17#s=eE@9q5!c_EeJj,m̍2 zh dAd"6sd킥2hR&ʍ4}:a+SG[0)L!̃1ҡ%QC^dĻh/H,pCdLdF/_jh<9:Dqsn & ddiz@Lg$fz Pt}b0 'c b2&A/|A@p%&qr@[- jpua<4d4&BNt2wf_Ce0VcB687-8 =Aw$z.qur0 !G`Sdb,/|d2&ujvT| Pxr{;PH$}@=Ax4uH' @TPt(`y@K-HcRc.&` F%0QV$7Lvp ED<~A%t Ӱ~9e ($W Y 4rH ' p*r @.g*@()72"x *6 tR{ ڵ jo `|! -ij6uSg𑱐 Az @ p  w/Rb Y gw p P @Y B 0 0 D  T @@vpuXP^y b 0S %r">i8G9 a5( SYjA j_,ugiR Z.q ԁ}ZVq WIgFya}i 汜 p "r Ai|j {bK!@!b  S o)ʕ3Mzd>hƱ@A Yɗᕑ+r XapXi y Ir di/" A1qypWcnj p %GXe $0 y9 0v @j!/@9 a9 w@@tLp a T7j) ! fX w\b:eiALJg$`ቕ4@rPꪯ *z*US1:bi@1}z/>%,z,[gq0/A@cj!fuu*bL}O:!jhjE:pE0LДAP`qw@=Q|ZBႯRAP51Y{L i@bq A0# c\SzRbdDA$C:a:; bѲQ0<ᚲhp:+drw]5C#6UR{uʮ$ <8FQSFʢi@ $h+t,.#i%i!iyhbZ/{/˸*t"3e`.\[1Whk H;jqr@=G(fz@=iӋAN.EoԴn+e[SjYqN,0 *Kʐ^؛*GZ,dRK5j ZQyXG̈-\Èf?Ly+z$#Ùyy[8MjOs +ǚRVƫ RB%EvN4@)bO''ǁ ~LȈ +y ɓLɕlɗəɚG!TLʥlʔ#P*Py ˱9Y.q.s^ vxX@}.Nnm`Spp0 t4`[- E4*XKy詮.0䫠 ߥ .R V8G\.ӎ5!Hٮ~ A_c\.E.f [/O8^ = /pa5^ E!/#0N+-/1\R _/.=?A/~4 10MOQ/Nnq(?Y[]F`HgikUpGqpy{}?b(P [pp*`<8+ t] B't/OoǏɯ/Oo׏ٯ/Oo/Oo$XA .dC%NXE5nG!E$YI)UdK1eΤYM9uOA%ZQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fcȑ%O\e̙5ogСE&]iԩUfkرeϦ]mܹuo'^qɕ/gsѥO^uٵowŏ'_yկg{ϧ_}p@ 4@TpAtA#pB +B 3pC;CCqDK4DSTqE[tEcqFkFsqG{G rH"4H$TrI&tI(rJ*J,rK.K0sL24L4TsM6tM8sN:NO@tPB 5PDUtQFuQH#tRJ+RL3tSN;SPCuTRK5TTSUuUV[uUXcuVZkV\suW^{W`vXb5XdUvYfuYhvZjZlv[n[pw\r5\tUw]vu]xw^z^|w_~_x` 6`Vxava#xb+b3xc;cCydK6dSVye[vecyfkfsyg{gzh6hVzivizjjzkk{l6lV{mvm{nn{oo|p 7pW|qwq#|r+r3|s;sC}tK7tSW}u[wuc}vkvs}w{w~x7xW~ywy裗~z꫷z~{{|7|W}w}~~P$` x@&P d`@FP`-xA fP`=AP#$a MxBP+da ]BP3a mxCP;a}C QC$bxD$&QKdbD(FQSbxE,fQ[bE0Qc$cxF4QkdcF8QscxGъ3 GHxFꚋArXDoIԃ2+"iȅ=1P#gh?A b@#n1ǂ*1F? 2TyЃ3(#j5r ְG5 ?iH%Pbarp"}?(Iz#mveS?x=M{ȞX=ba@ŷE\"חC}~4 H?c }ev!Q̘c(: mmlkݦ|=dF#dn9^4#N:VlOaG߱? J꡷aoqb阶ylo[Ƭ@0K2DE tuX 48D jX?nÂ(:]8,v#, T#ʼn.c!ݎ"';C>%W?Nk+d=A;]XDF7tR!f'ޝ^f-9<Ϝݢ!KXcBͦC4" G?a o(#83gbr 4t|5PvhF8a02&p&Ah&tK>PwKcۇ{&>Ċv X&zLH2X|^4N%=(2B(zAP/.p`4i X_dh: l {:$3*IhdBXVHQP#3 %*ӾV( #kJ6[CF Rp(4QI` Ĩ8rC4y뺴P-Ets4poJ\Z ;Ƚ;8OF ƾ(:Tƽ333*h܋"/x`ƻs ǽP؅t?3ǻ'5OЭgtǺ40G=X"Ƭ~G Rc*Ȼ(FtȶЃXee؅V.ȷ8AXAx$jɹBԊ!,!,!,!,!,!,!,!,!,!,!,!,!,!,HP HX#Ç#JHE ^ȱą-B ɒp\IB0I3 8K6 |/ÄHA1ACџ%D ٳD5+4"9E4GGM24(Ivϴ|Ъ+p!xkVBۼ&4h=r0FȌ!!~/ۼxE * 8p2|@Lrm*p^A rjz;Y_0PX`A &pz*C  H i%eĸ1ҍ>?JZH#^ =TRaꩣUe!CsD %\$.]VXE7D Q%R@pAĐļÏ&` A 1p kLR'?rBHY8ç>ĨǞ%̱qB 2P,٤#7RIb)ИsJ#?@#S?8kp ?SfhB δsS /`L^p$RI%‹#TG'/Pj!1z& T>tcK#ԒȪC&ݼN75?cK9ﬧԣ%2pO7L apn:bR  *V<a ;0ҪӲ;#Cc2ʛ16/F { C%Zq 0*ʖӍ3ĜLi#uFPı83A =H ^ )0g*'-A7~ 740VMw&;(Z4>r"UBd~ *.hZ  .<ș*!d .Ֆ0 ŔՃ4l2Ђڡ.:BlS8'wA^&0ПW {S@J.92)l0 z1xu򈇵N ݐs .*%b7R x<Bo t ƣC68AM8''- -0a6(Y͑}\ j< YD3?/s N{$o⸄NTQF: `8-w)Y,8qL  p*W% Vpp#yf .)%LN2 Ҡ0h\UFZY0D4JR0d@ lp_GW@t&aj_ƠEUXslr^b!Q @0Ħ8XVn%p(˗ y`T߼KRR QLCPK,D%KJz@(aF&}ll-ڇmԺ /Pl1גgBnBnLo+!YYkMےPWLyAoC{XU'8 oλ3W߅h h˕`FVر~S!෥^aj<ޠAt%f` A  !q 0!+071^X @p-sYpPV bkjYp /+=\*(7A\-*Y jWBQ]Å,XH4B8 @?<lH61 `t\aI5*@| Ab ?>:e x(Fmz[pt PE8Xx!*ȁrcՒk 0 t#ޘIpxK>QUI Y LR{@R(@":%&u^ v[Cu%2:С*@ Ml"peId@:E`dkmha?Y*!&D_ !h<˴;oKf0nB*R֙F˰1f9; gj^{p Uu؀ 8`w @A1)v VxG`E< ޠ Ȁ p 0k^9kzl[5ژ{w4= ;h \ 8` \8@t;9eP\ ݶ7i4>|eMLPN Up0 p[\!N ` ||P[jU`SУ#9Ά {0bqKp)cwȗ)}AQUw| 0Z {P DLt&PWT 60@$`К cp{*Й09@ cy F_f XI'\ R >.bV>|&)+i=Q. ę5c\UMՉ8GYkXZy! P b~p D ]y ҐYpް D D{ 0&!+p Ecw+qH{40[Df8TeLP `{"yP@'0 I 3pM`I0`.@p)Dd/QX˷|0ı0 !Њin>@wL_ ַji 0 0yu[0,pCF @a,Dx&b8pf.a 84"ѷeA s'^HavIɃ5` x@p; @}IGA`x@pjz bhp؀P_8U5(//OneHK 0 Ew  0-P>HM j X_ `p6/80c܌(p$g( +B`pĉT*Jd$ȣ d9Д@cF  AP Lu%@ i : ""0Y# Oer;%Ti$ ry7Be.fhEfKX+)gi mgD [[ ep_Pc1X Mp\ppP G  MSyu;aQӒTQQpB/Ѽ8VDey${Xp K!V!hbb p7 @M ܥg/0uOwWGGp p  a|[hoW*P F*>_ {7KDRv M e4 %@0 p;0 ' ` E$ptPPQ#g E^"EUP eX_T"OPb < p/eP"pU+S /蛾P+P 8ѻ;̳H"Yul\bQ,g+`z4`!4`XAEEյZ` Cy%_iMp%eq"XdH$mP.#x,^%UьYa^~tx_/=XFN@B _Qb -^ĘQF-"Ǝ%I4ʔ9nK.%*m!Q?!B GHEѢGϨTZ= (P$AhBeAVZmQf:n"Baΐ!dcX`>\XpbĊ368$X!:tthѥC&YԪPѻP H ;XnފM|ya 2YG\;2{_ ¿|8sKgXF]쉶 kWlDb|sXCiq091g."JǞ}F$10h|Fh!q?3uɧgA"BVЈ/={fqDQ2}Z4L.Ɇ?w< Ae~fC8+k5$@#O礤"Ȇ/A'RrHE'KLǀa*x8Hp2+V΁snùGYgs^K150r)eCD N1M١[h4› 9coyX9c V9p~9N5Au 9|aDeE Z&}IGt˦9LGAm5y34B9g/8 ǟd$ Cq@<ɇVC9YԣAx&Ci+ tdvrò[D{Tfu7fe3 [%p8A Jș1Vԣ ;y  d/ZDF~Vf&G\=n[7:uN98 i/$'ȫ%rT@8|1D zJ[`4hF~! ylh~){qNMڕR'+r89i?A;@*cX2713bPqQɎ[F?1/̢i# #Ӥp$0Is:#ma 4AdcF0ce1H@ ']0 V_`v18y hXC zqp r`}2lJ?/ F^Bպ !Q8Qg pb C@AG9ri(.^[yއ(6+cـbZiF䈢I"P$ e8 'CCdG!oCՀ~3HPVKcL2 ݤ,`D($ NQ5`0Q J1Xd PHB=D%Z N|aFƶGrhc{!$ o^BC4(5MEp`uF RPUB[51 `f:mB:u p#@4dp" @,$0!=@^^A[R%,RRjF  .`~`1Cd` +HH EA!9^ȳ\x6pQ ^0H2 ^`*`\tE%nnD4 or2mrH7ǜP8.<&&@PGd$&a|p4x?*` *. 1w]v;؃,=f =hW[{@}.K+x!z ( 0 C8 Cd|ЁBT3LB IA&l@#iIx|+=87 p@0܀1?qdAfx^p \` ETaoc7|(x _ TiK `Gz2P{~QxW)pzKy;Tԫ8pм H7}ÅJl @\J6T 5XX|4> YcfoPXZ(vhS[@j]p8?d c d (W0JxWp+8P `H q?(sW.0 8=+;W01o>Aw 5p>[ X%ĉz1P$X_ipaЙ-/ļp7W{Ћ^p jt5Ha$<h7$SkT`N1 7SxNc^IcAeV tpoVpPVZQX8#mEdc" (TpT HY}%)xUT))0@0u~=ᤁGhXY ce p,x=xH1Ѐ[Q  H@VȐjT%)0\2+#ڬ*:챨:}:V h%01 @N\$BhR^mW([W X9VC fTrO(7 ]&B(]7.]3\+P҃Sl"6D^`Uf`VHx\2Pitu_ *HioXv 0HF#Htk`v& #tz@U8sJC4PFB#6U7F`]UC-_sV8hr ` ȃp{hXAlI zru-+FsrW2LCtSF0DEL79%;`1LH~ؾ]؂8Ιf08DXBt#h<z,0șX\N22a-A dDU[U}E< ɑk%N;'v2Μ·V  ^I"8n` y-x(kUGpk9f9)mxl93Ζm@h2P6,p^-P ȉF|t8CHy _J8O,"8 8N^HAvJcokX#02bGH= D@ Wlr` o|#/(t1pD0:ʍdg14ClާU;)8F8wiٰR yHr0hn 76@~HjIXt=88M@2E:!.| J0=`lsTk!nj؀C( L{GX @͡&]M{hPÂiX[OJx 0b(p0Jq'@.A7gp^@iU8sfiH˚p-m'/OrXNPch4?͛12dIYM;A\zߴ)=#{ <8 i 6}j-LVCr+dW~?LRsRC6$7\XE$ .fl;m \T‹#&bdHq / /{X<1@1 G $"J'0p1H'o $0(L$y8 K%PBsϕ m =+ \Y @/J{ XpYb c1$4dްC #/>լe2MBe>ГL!DQ>X! # U\+[ьC [G`?š-&mPC*?(t;TK(>SР,#ͅBu,~' 67ib8\pWb_zITD'4u9Y +pahmw^VBzф4 @ (c P +@k؊ @0+nGAVp3Gtg1M_9E"5u VCZH1JXn=u#,`AaxJ8@x+')fq8 a/pؠ\`+/PѬ= bLq+ Mi)Ȅn{Fu`BW0adH _= O{+@.R"XXz 8? ;(< xfVeFUm'"AHW|SJrwwL 9Дɴ7¡ ` G>7 k*5TY xh BPXxH<g* * WԵkTܫk4fY,ĸx\q1:[J:A5R< YhDSH ]`C*A @ZX(Ƶ(Y Jm@S L1,Pѱy]VЂ @Rhxe62?f4'A D 4@ǰ@Cp]j8'+a nuq~'8M,&I^`t-ISÖ|G>Ph6ȄPV|]]1#Vp#`Φw'y$ьp0 W+Yqa@?kZf0 QL~aV{~Di;{}O@;Uki<=P9<8EẀ TGV$ qA \#lnL/?$C?@Q"C8?lA8& $'C6:C>Pgb] ؀EKho. #8Ac>.? Dt$ X <7@BʔcZOmd C1D1@ %C?4@LF?B?܂?CA_6B$Ph&4P9޼@o0l Cx?X$.?<Tʠ~*@C?P9'RΝ4< cv C\ U D@ ,XY!Lt-H@lA8$:H,:|;+(ЁD P@j5 XDD p`f0^1YM -Mg$)x5,X7h,UMA\1:Dp1(T*8A—C8`@x7zI)A8݉|DVD@neJ0PjX/^DA( l@` @9Ѓt!+HAX5k0 +Zv@ |@|  Zs ށfA@8ϝYҀ Ff~@EtbplC22&0i_h5lZ,Tz ;z$]GA $c|j 7 ۠f^h-^ Eֲm|_]l?|@dlW?@ WdEIPlv%H,j.RBGFnl<چ@u J0@qҵ.Ɏ|tn$Ђ./-B€*݀P'X/~B$AV#|B @#Dx"P\/$@ L0|tBT.w] CC8$ D4"pQ8.C' ]*NY.`@˝4 P0/  K}&=C(HB&TC?XC<<v H 1dGy$VX>*t*L=p @41x/B'2 =\ih 4p&WcE]T?C/Rଃ4X?@A3|H%Y?DrӃ?@ 9x7,4RN @(CJE`%HAx  ٵINB3PS2۪ 478p.@476 'PC'? 6\7Xc),8A{TB*+G,,@@H*p q8hBu!arLCh@@l 8k @ghiDNhɆ dk'@ @8Op|D/Z3r8-vI UT@|ƿ ~  F|Ȑ %PqEG/V`4!Wt1 /$^y K:`"#RDH!D/NDtDC8fƪoRUZq TQB$m۰b%Kvۈ+WkiҾD,F{ #b [?g^|X / W4њQ HԷcû?C4 Q0r (;rd7Zf׮ٵ#@a.o .]S:6*zZ! G,;L\0|Ŋ yqerC\^bۯ,({1z`ttaJ*ȇ J)^@3xy=\.xWR,xC.,< A?s"?wAv?DU! -5(>$04A|Wx" @%Lp= 87ׂc^A``hgga'=h"o'dG$~Al9g 4J>S>Jpq*Y|8 \xAŊk͆ƟIX"auA'~r2HɹGXH{б٧ ؕrιgLX裎 q"+D_Yi SD3\_`>W )8 fnǔ4 ]LPD` <A/.AP+N`/@0gD`q!x0.`}&"W`7A?a6*O|6G5mn9~q Hb@H  N@  T@%bg 90(Tq<*x_aWq# deX?֡X c V$h,:a 8-r ]lAn[\=h 6Z t( QPW8b*L"b"@ `rAjJ]2" U@(~up2h@s X*p/.t!ZE(+" )@`8"O`tcAb[pBAP0̖`؂lڂ `DD0QP a .D=?+3HG AHf,]HX? A@cTB@dyTDtР{S9>W ' y=?1=H'1 T!"A`2^6@sCЋ}` 0FhCI1hՅPJ@H6PD0^!p@* t 4 `C6"YbNb Y:A =lpAj`u.8`6xlA^ prgU@Qp(O@TD !Y+r6/cAf@̾ԁ!8 HM8A6UlN B U<瘅*`Q@X}X< 6Vy#qD{]!^-@_H:I{|"P v$2F5` f!@!t^a!dt ! DѲrn`` | C%Η ^l>څ>>`7*, "t2x b! 60&8@"fJnev \|``*b@.VAd,`f>Z*x.Ed r.eL yHJ`B a! `a@!bNF:n!!):q,{(NqD d.fWJ yN`a!bR 0Тar&]LiaK.K@-$hP&a.MJ.`)p@4$@rV w "H*;H`` ZaVx.G,wv-_p\KL$BLd"KR8P `14F^SqP7 :4@``@ A'X"Hf& ĉ#Д"Jp{D\=УLn@JVDKက0z(K(_nE5baҠ  z  0>OS5Q@ !$(i^eƎ"@ `9Q#&'~`q"A s>< |yal,cW?AM3H oA t6.vKtgV \4"`pAK$*@VdA tQn$_N0$at,``¡Ta (YAH!VbTA!RE va@H`#B@{*}'>sPa_o༪(s Lv_:UgA N` ``!HB1&e`@*  IBЫL ij*|P ~BdU3kMv.Dax>M@ B"~lRdK"``#mF@**b*"ns'R M4'DLtކ"Ubp-w"Km4V"&6WZLܐr-.$It pe3ˀ-rUWrnM(6W'ձ*lti1L71(lSBlҫvw̞LH YxWsĆ3t24'Q7y+wErBDA ׍!h`^BZw&SRb *I_ߑ/+ \Iht@PF r#l@5ӭ{u@5Y}%8ECHF,]\)M ]uvT ȁ znp!~'&A4aHv̍إ1]&͡^A`{chBD! Aa!Y"CO!<3a SBm"``~>P=D ʺ4UH5_ͣ'l5`^G 0UilF` axaO``OYZ$!t1)-@ <X b !0aFE"{{qu2v@mn`䘦 7pen!$v*K VȡY?7`! a!@>jTR |^H%P&ǨSáxa_o(!! !qA$ JΘ7*  QYk[ZkD ^ @^ .d: a!0a T!!dANk j@L ^2!Pb5zj)Hj* S"4>sP)E "֡v4` a:B <\ 6x@[!<@$h~"`.N`` VpH)*J@ f@@`AArAZa!Z')a@\ <ftA" ODMh5Hu$@M6̈́7*ɂ`yӊ֊t L?!!Tp xF6&ln@:Q"M. UjxDkW6` {S  ` `鷀 v& 8 W~ aX Bƀ v?C8YCz =lB. k`Ic2>Se0=  LeQ tH`!T`$`@ !N@b`vޜ  *k{ե>{KLrl8I(JaN J-NBbbn3bz7>)aԮ), /uY `P`W]c4!b67Vк8p;:|xpā*! (>X1H+*ppʕ0F|80DJl(q7qb$pH̨94PaFȗ+u$Eŋ-zz7 08`cȂa5mMD8¨^!웵cvR #=:'br$KIV=XL$!F'ԕR+;R(Z0DJUѧEj7G +S\Q=LɇЃV^׫=`\0G% 'Pˀp@BYT x_*tه#,ZPXO2СG,q 3#&'? =Gc0`C0$ a K%\H.@@y H#\Xa𲇁5 U{DiŘVAB7Ëq'1DB.葀 0prK(xP FK.,J;`CF:KQg\ DPp&4@NX? M&.{0pobq4,K#lD' w~Hk*l?:Ϗ0wC?h?LF7 "^ lk 0r 8$#R&P4e+%p P 4 T P0A N$07MhD/ % *=< >D`1$?T|:_~Jp V 31 ~+Xʗ m$塁|"(ӄQ!3_ؓ# Hp=mp=|ÒucH<$N?8`@[)bV0H K98I $ 8@` A}*aI30C_xY$CޠG:(2#%XA xi#MH@3jHcXȷ1 z#<>$ ㅴr43 J3EǘTA #D4 Kjq "Pȗ? k#!8Ђ*d? cIX An(V*D^+ w . hCb@ @.h~8;Q$] }xb*Ac?laX o6G&(L!?P2 X\#  ^a `i|1A.,}3YċJ@Rtŗ6YrzO@}A0D`'أG'J ^FhwX0X;s2$nC jW3݀K\PÁ@JWAj; It:\Aa ) xcbD2qN< G2Y`/PA,I܁*pth 2h8hD%GDtW\'3?S=MP`}  2J>  |PRR)?RJGmG?aa;Fg1QH u91~E@F?&ۏuG?Fsx` *D<k*PpC zTt9p%7O~VtA aJ7aCpduX5a Uy v8nP0FZ'P4! #!1k CW%d: \vOlNTyϩ H@͟Bʊ504Ř%Kx č$,Z$Fz@q l|H^P MJ1e,uպC]E2" 3!"*q DbF<+@ɒ<% @V؃[KJ @pV9xRVTpZ(Mc9NE3(`a Wh=J*>9T@D:QD 0`.Y|@CN2 dS.Ɲy| 6pMօsT@tϤ, _x3R4/H&H I'[6pܗ. P `Zsu%@q+ p F!@,Ge>PDP : &3 +i X".PKGG?p*MDk*0 &(N;ul@:2#p+ 78~.4Rp&beiDŽ! ԒzP'@ : @Ne0 @ @>$ u1v34" ڇ ]" b T@؄/1SHp3 0P`p۰rhY@`Pd` C`tHU2#‹PR >>RIVhΨN%!|  |pG| TX"P3  -$,eT /gf>hJ CJ biV5I\+>A.LՀǓ *P``q1LSʰ ГP`7%@. {`7`&` e"VgPix1 Xy(Q gyGL@-p@, oY*P Oӗ f%$Q0.% G#"M - Rdh0 Й8 rƠDEH: ܵBy EP`&=u?Q|@o""'h?E M @EV"vy ) [ gpyp`qgh F`1 @vy}8Vu ` &2UEE 0Uj "  X@y(dPY. @ /pLtbqP%0".$A4t&\+5! cIpYyp TH h γ%q PP 0 # :g88@wf-%49@J#Β I T.ՠ/7Xp ` [ u 0u.*@`%/( X`p%af 2(͐a,F'pq0a b?OGNv[ G0S0PM`)\AGWtq"&hp V`& rQ4e]l')w *;,(+):4p/M9z)QXNuy.+(C+p{yAO{~vV+0jA+rm+z4dqE'z~~wvswPۄsvO*?TYnKx[+{"y >P;qk:t'j$lMhvWT:{*8!{?;2@DiRv[v `# fƈ+ %wrgd}x2b|R5Q$SG2a-*ӄ@ Ƞ `ɠ Ð` /(û'ék-J kf\8򴬛T \t`ѱORN|KL*> Z1y@-*M0pȻtHV' Ű1Q0a  cE2V !q`-G0A`  @ll dP,0 `lAd>%i1"c%VR_>RRh8+?&IlRPM>`5}k"c"J@ d  u t);0+PP @ p9!+}( xe( ~9 $C-fq@2&c0H p1HPP D p2 g N!P X U0ƌL?`2 1QD'G CQQ3W Qbz8.CS4g(A=FH0 P0y] `q - 4:Z4 P  gI8ByJ&Wf պiJ}M%& ":{P-P:ct%)D.# ppGuZ+P"@pj@ H4 G/oZ+Q:6ZIt E k RV{F {p\d.b8rݎڝ pp5+dEP 5D0 @DqDIyv"%4-"ӼKE EP]TJPb[ ]$ƐPl/Hij0 5. B.j- %metҎ 2|A,.44,y$PU%$FQ'U ⍝0le@r,tviH`$ ['%f.EUE d' "Qc ꫞%!I%0: 0Aľw\+uKl!E4P!p!`bDs P&\>Qqe2tB&yp uPDɦz  y ;5ZW<\ I0%fQQKohB\xh&PhK% oŠo1c<QuНj) [`L{* Zb P ' -Tp-" QV@qih`3@!z0 &PV$2!f 3 M )p pPrS v  0 P* 5I'pPi Y"O"afubOG\rl&O { \? @h p"B6^X#^TX`BPl"!@ C _8ĿعC -Ht$v&"b qC>L0 D9‹9DsBw`hߝtH@UHˎ6Md!~"QHc#lR+IJE*'< n₪(AB !0`b8"QaX$~'N(ήAVo7 a\x U^ (gu .0alE2s`avZYEN p{w^#iVRTkpyE4AHWdaB,8`WP>ŕJ*őH"8)]bb ( Tء& (!8h"&Pzph&+4I"(+xye좳+§JxÄ* ^P!u9eNU!y+p'9d*'XfV)CaP c駟}t' )04R؃J|8bQ"*M`L?q}"t<rAi0i-guIhЁ{万?HG5U`` )~w Xy) *:X` 0P,B|Q{<5  ̺cSu+Iu9WfC% abP.A@ZlB`qD Q?X.A\_X' @#9qGԍЧ/ jD)jE؂$$ J L`gHE0_Q\™J@[֞~L+<2"2e9u>!$~+F1C => ޮ[6e ! # BT?H@\j*0 óqqM Nn*#g%:(u0'h>! IH7+zIDpPРn4o|N|A̫r% 7 lUk{3v04 \<ՍԄ{"En0#)U7h!׎u'4 ˻oob `@@$L@5. ;PB@Ɠ6xG\?u"ÈEBL{ɑ&cZ|l' |/!O&FύDTU?X@ ?gFNr p=T@YBHDT`{Vk~ȇIP`:q„ 輻`+G9c 3[*Wpoa  T@(4:; oXJ(A ѐHӐ 7xHɫy=H9:Ҙ z (TޱY3EbI$;`ЃN3v ؂Xc8`Ѓ^0Oc03P5VLPNRA3A)HC#;:P( 8X.i]YKC؁ h RC h+LXVx;Sm̠\)^c߻<>c0^H<6 0sbI֠8jճ)bl@-R-Bys;cQmKeDiKF13x4MG6W":H?WB ;Fa 4'X^.P)Ҫ1ET2vN|[mC V)PSP? hEƳ4B<>7W: sݒb6!WgX]H.X!-؂( ,-'z'kgZKg)HU -?O\:2av:(Q""hć\Ё#XɇpHz0`8p0P]j-0Ȍ|'(Hf舡OWx}bG R`xm/8R`jR؁Ixi|P`vrxeh-> 8O EG IgCǓH 2Z^ܑ | H:Cp-HzȅCzzȇ" P/hQ ,˞l𬳄MGIaTxn+x&xg2 -{IP" &`~x& 8"r (`k 0L@[cP13 $x8ϋ &rn=6ds3@rIK[G`Cn$TbrP@Ј}*yoK; XG9qp\23@9 9{HGh?#݄u)0X|Ѐ -c- Ĕo#' W crsў/"0;7jZ~ )P*̜IƸpmI΂_C9 Oi,$J]׿Kuj˗;y 3> ~FT!uI~41ZaVR ԝn0h0H/pl@a,mH,S0TP u&hbATb6xS4 tS=YUW1@?< "Z`E%_` {TB{+TbL$ _Ic%=;“E U'YWR RT /r *A$ /\Xy+pC1+.0XcH`7rX "8@ H0`^ۀ`@ tô(PG^I>׼0S> /9lpRqCRh?C>`74S 9p2T8&#I T 2Iٰ-/73( 0B)4 6|,KhIRSBX^q`?C$\ȪCpI!\``f"qǤ IP(g4 87&)D'޳?ҁU/l>x,-?%/$p 8 gCL0CPb =47lG T?(s; uH?Q戲b $BDGL?J&`Z+d 3S 6)J& ȀzHD@|Txc8 A14w&h?PKAҝ.SBיG3, P#L lՙ甤$`]@(*Bo#7 F8aXp8 rHeG&!]0챋G͏$@[CT Dn_g@'//UŠ9Ƀ 'OAA`m gSWM&- URL8$6cu'T`E1~c\+ct.`0@, .p!*\܀9%^8¼8@;+AlA\-r @%Rs^U4a?At`@vlHDbƠG:$={ 袪7è-h_qċ_| .$T .t k%5$%/Ǵ $"Z,Z `+@Z i$#BJЄXc#`a:PBE+fA\L L =@ = L9 =|B 8Q G 8"=+`x=  N'lPq-l`G QHx(zBY']+,EҮy0nD㔎L)ey 4 $g!Xj$HAL2jiKQp2$FdYO (F$ӑ_#$pJr|3pJbTҙG<蹎fp+Ji13={{dŞAw!o + Ө @d{dzI|{chIDd5K&(q rNs)n0NN*pB Oa <]0_z3R| 7XGcQXH>0Av(i 8d,B.Gn1P#R q pK! Y'NM5ȂT,?1.5A̝t207C|\ `ٸ` xXSpA$@ 䉬J8>a%@$:!DQT`U$C?H<@l!T |4A A|AALab5~0 +8H,yQTT@D@;UBD9M =AXh@'E?Ѓ?Z| ?=b/ =CX7$J/8l C' g$uQ<K(< LOBH UV%@ `_B5-.@X544C>Ѓ =T:>T< U)5`(hݱ# |1MqFXۘ@ : *8#* 6ChC@AP C2FH$65t =>$$ -*=@+C5h(?싰<5nMQJ(+@@> BT=GI!$T@X8 87@,.@,ނU <@BT+)D6HrCJ j+  .XQ#͝d h@C/pC-z¸2C591,<(2,Cр  g |0L'"6/ I* PHA LBʜT  \+ڮlѪ˽;=8f8,R:&=@ =hC /!{j>>Pc[j1͍Z'H-B1J#Ⱦ#rO |#lAC  m t lD,v ܪdILV_]F6]nj |Ƴd Hv G~@ HM<ʨS^.M` *X…G  E ]r |T%`eiy*] OzԦ]uowiBjm^1\\Ool/!J@bQG`/}00w j` Kao @pv\ߙpg  _ b AaoYaY, NO ,Dx1 (SnjlA/:9XsB"H=Et %?Bĉ,HЄ p2 A$ B"qHHC?҃U{0) `;4\w2rJ阥B1x Lxq9J%K܀w%R,)U7`xBD(q0<8h=T,lTcnsZY$%YƜWQ5c$z7`X)D5C9lbA2LC5C" t1,-P44 2>3(4\B3# C5L$e?| N4)KM!'>?X@cuEJ0b܂=bC 0@#/]5h@M=CaC-BP̢74`HV6g\$V[Q@`#l#4J (XPTs51PA@]uAl@C'"(-C8Ab,2H1$$@?6 T6mh#_$g=?Ђu@BdA4@<>`&D]q;C0vZSjb[Ht^\/0B%)fh?i\@O]W=ɚ?|.(ZY8?Lo420X=7'h@,@x 4oRꄥ(Ew K +?2TlK 0dl̂?@A2C,X A3+ 9=h,b"}h%)l­ \@$vf\@K2~]@H#p۸}AAۢ@@, CEUC)Z 50 |o#j 6ng#ꞄX]z z8i|i ?B8LB? @:̃*2•%:3#$FfD0JEA%B*^!?&2v@g|@׮tX :#RN 6SML:A껐0"Õ:, UbN8-FXP-`IE  6ؠ/Da8TA RA 4% [r C% Xl IgxOj)'<|Œ=`Ӈ?%‡l0+?Ͱ̺'HVq% 'm#7^'LI Gp4S X^J'ge `Ȋju @GN xƟNPA 0Ɠ ބ 4ЀoGEWB H8_}Pp6WaڴB=\IE9Y^ ťGI+4!udJpqqOꮥR- pb:/iV 48{&o)q<'2 G_ W=A" pGL`W``,㥒"B-+.HZe``0$pp` cǟcxT8p/G}iYň>H"|l'&6X(x7>= Xb^IWr$O3 :&GIf h) X%v-B'd$cTP}أ >&(f83BLq[ sX?kD@8 :{+P*F";3\"~NK4s#? b'h01-#;h N{, 9$8@!:I` 240E9\$#^ W| P/\q G@H0G *8`` P Ģ P?P$ c&c("D J,~ U!\ +Ps `HՀG) gzBW{2 xTȱFFGX$a['8K$wuv_pAY-5uGJLKқ$z?xcJ*`D2B"vt9Sx[?[ڲpQ 6&Ocx15,E2y?_b1)+AjP^$ V8L,W8mp`Ȣ%<z'^#|;'$ѻgݨ~PSwu{_|W|?ї_}_}_~WOcᅬ4 gPRAT"8OZAKA3pC!%4FA@0p@a%l'@ 0ayjR"l!J6P;XPAa!@ AA0!,p.hPvaO+|0 PP g `@` @ Ȁ RB  p S q Qi $,d 8AHP '"L(AnaZ@ q@?X!a U 0줦h  1Qs?0bA$A41:A! >$CR$G$K$OA , qIP Q#KԀ (()2)A)R)(=;2 ''+0c!Qao& Ҁha Lђ,Wq-WbgO$!%$!!Uցp AB ,O35 31o!R2 "!aY939[  rv6!saWs9ײ S1Mq< eQ<PQ0?M02@4QRA14B-'B/t01ΠցƎAFC:mvA0E}oEӁ A!`FF= @GsF9 (adHq:3!֡4JooJQ8aNt>VtnA0!֡uxL4Ba OAj޴L]4B`~)TOS/,QȁG PSS!O# nEk6! SIXprnf %3U7o&(  V" !,!,!,VR H*,آ0^XHE0`ȱ#Јɓ(S*|ІD0cر&! ̟@OfdbB H3S6 RXfQW#H%…/];ȥpK4*ݵ'_p‡ !\Z+Xdu iJ~ 3~8YH[kT޴#b^&"̘o+W;w.r@B9@1 ͭh[gH+xzE(6jXOp>A_[MNg.E#6F2hq`#^SQjὲdY!*\(A'X(?eh?4T ,@8ܙ?Δ8di/( wRR)JqB+"(.Fth'B-S;>A 7)x T!R+#Z?)$-t;2,$ݤN+TbRJ[|&Y> +'Q)Բ3-2>4"A)&@x9GWYQ I(AgJ# =X3.sJ.˯VYb%' t%t}1G'44]<O<?%C# Q>(Π5dr3l_X /pnDAnjqKq@o~Kq 1N7yѸ>^(nrK*w R >Q >̞_lP#ԣYS3IA1 NSs*TaYLs#6 f. d  qA 2?^L4oORg*0KL ̱Tt,Ju+38pAX8D%M :&I6&\ANlG($A$ XWLDJt (& ;`3i#dʍF b<83gIZ"¬C2dU1L~C-qEêjRN$/gͦ0!9Nt3tBͻěߤSIfSd$+MT&EA1n"47ZD;cB?)Iϧfdͨ]2%c4i !SN\/0A3&ZTlEr* DԳ`TS]QE -X|Bf̝ATavnm ka``E fJD!(F]{ y\ pbe,=^b{ )ӜHlӡ*@ް=1|c !ta|H!$@ʹ7H/YT@±PT1*a)BbSqrCue=G< Kɨkq 0LGT0yc E@9!l $\dC9@H?GL3 aVX @\ {d#\1n`,eD+ PY <40A~$c =ȑpb* K'ưbM D@YZZWAj9 Q% G>!tYRp*R= "͚YuT]̈qDM@/R +L)ThbCeұA4:$cX@+!jPAs}Q?0d=A9% kc+T. ib.7~18E$9vvc -q~aG"$i0"`Dl-׎ Kp`8 1:Ja{V`..V#GF62@`8! G"hEX89Q v"P xF.K4sxD%GHn ` dP q"Ӥg$v|.@>| Pb1U`@&Nr&_1捜}MfB3BPTd JbWgu'I` J|@h.A-$G5ϳ8R/֫HaAn`)cP B|sV>Qp+p7@{%NU %PQG ,p}L P F0`  p P v#D P|v 7 %@NP|kw4 yww&70]>U p p Mv 0 j0(0V p  f!>fi+W {`{P f4 Wւ*Vw3p| H 7.gH_Ŷ ԇ``@ < aPgv GPi741E`Q@&d0GDGtrA0Մdq@*؀ GKC` jpy0 `P@ 0N`u*$VP{`k@"i>Ve3H(8)!G0-'4O*% F 6zNs&@W1GLeasZjQaHiVI3$@FO3&LP1dY5% HA1<6) p6Q#@CJuPRQ).vv䗃 ISM qY?6}5qc(6@IߴN)DS~*$K'! TT^A4"N)'KGWL.x^''&[9(LP aQ) z|i'%:~iQ!7Npps 'YMu0 p 0*0 p F0`p: 8au:* S4 @  y`Vzxw#fHoDb% vA1x2cPlr'` fp'0rj&lq*ڐT08 A0^"]׀ @+p ϕUd5&`Vx=f\ * p(` ଣ ` zEMI E Ыx p p#pac{ >H*0wf `  8& c[P{րa> 4  ;g C Pv @ ql5@`YQ]` 0@`-q%X-2HXa!1$b8py@w^w ch t``P"P|Ip@v`;RM j[3apE _ZA$7 %3P1tRЃAZ[ N(Py0LWW<v;@|VI@ Pp{V0@{N]ӂ tQ0\= R@9V D/|@PcRPcP*nJG 0 րep e rOQp rJ';fP Pl "j@ppk @7ƍ(Ö ~tL1p#pGU/P7P1dB=^(Lp Lp P" 0 ?ۏ t;0ř`Q7 0%I6""`A "@"ƀ׶+) G [z4# 1@ ьpm@#wVP&\p=J(F{N %a|x&5mT4WS0` rThp rN!pp Zϓ]ٗ [r`* MNP RypN`R5f&we*AtQ&8Є Xu!&ר2c!` [ހevPtp_` @ [ T\ uDa&''ASyAm-80Sae2>g+ p@@`*p;yP@@ $@ߠ</@@pT5Ƚ!fxawId0z HDzntQD,>pu.;lFy #wPuPoP6 C`eO \i7!`&&%)IJZ)&$V(Ch]A"˪_bP+l֩FNy `3TӃg-ֹ+!pxC)(DcӦٺxAmۧ0$3 6[IL/^I{g$n#pmڂ5]m#"!he_<əsjg@Rs dIg5:'^mz{kheH9GEk-v[H-xĚQrH"*z?bѸǚq4㊝$LY(?1"d􏻡,f_s׿ 0Pl.*wE(w2Ib+<Y*eWВoCy+a41dK671nV@BP54A M|JPATADD{1A,F6Yh fFh+PYIBǐA$9JR '$,$% ye,e9KZҖ%.pܫ$Q '[,[t @V|Ah*JI` E/V | ,?aG8by?= hpH?:k6*E2+P_Xg+V؈FqX+Z ""dI0FW``G 2zL\`,'x/ 3D(/xq -kQ@5S2Ā .*G`v( Ȱ| E+Al8ނI| ĵEeV!fK+(8, Ob B0Dc3p8 TjGzͰk3 QlĪ Wo`r[.@ˀ@#(6lk"=IE>vAc07 bAt`L+pTy$!p<(+Z +>8  @r54AH(<@+ڂ@r8BЀ "4V[OR;0;-`op)">?V^+\V|F0|pdD$0xj]+6 T7+{+ъOlDOL/I#(A{GGz_',yc aP. {x+EH VB%pQ HÌ*xqPi+v`[ Dvĕy {@duz3z#X |4#Xtxi Ѕ  K2p9k8Ģ4{T(P#P?-Ӽh BƓ; 8.C)8gn<3+8E|H50?x"K[, #><23(Mx`sؒoؗphj P~{ mH X6/rN h!*L(k4s8*AK3TEL?^0P\׼;TSjE,؂*Jr8بX**:#0HZAMTr@88 ȃ*Qx"(Іp@=Xϣdtj8^$B<+TpTp'x&WxJpŁ_@lJX 4T@WUDϳӭ (:`@R8V"׽rZr+: (2*p PUs;9(4aT U5\6:BJ[`Á,ǺauZB7;;@J-2sim1؀JٸCڀJ,B #X0KV[qDDCLVB Bk1%{eZ 6hWٿǒ Y]ٛ:]ڵ`]Ł[kۤ5+ې5ۥ;Z[5 %5ދ[[Kּ uJۨ=^ϳJ\¹ѵJ˹M=ҵܕ\]|[ܽ [[K]hۯ́"Ix?^ű8,-ڭr0+<+P_Ph P, ^?)P_+\6'ܼ8i6E0Bz4$e[`ق XeDzHCPT)fA3t&GshƒG;s\*P82,m<gB|腂p m="(pP#HޅjAkOO!c˒8#s!0`; .F3?  P`| -P0|HWoL8hC6XM3Ur\(p(;ں-5PWGc(6{U΁𺅁g|g؂xHDTY#)@~|{рh{z p `"H֛00F!Q: Ŋ_ȢjղX mv~4@%'jGcJ~Ͱ(?:ݙzN%½]D5_m\y"5J1=~=^(p8R\}K~m]}yG3LBɕ0?n\+ /^#Ĉ6h"^"Ȑ"G, ƊlBrD ,`e &REL B!P}pU 0 P"ALD9B#3Vj"ƒ+p knE$JHulZ/Oi7QLڱYir0VX"R (w 9V'0i,-R<>0|nC){fc 0c; 8.Sɑ(Ԃ"+9bGڷEC;?J~ҩĂfG҃/@qV}QBt=rD QV2!.7DR /@ 5'&%]*E1'K1fw9 '=L' 3)`?Q X % #dL0B &XV*PA?<  @Fsl bu7`N(ؓ1h# $= K Py7B(AK?Î5@AP&-x:d,ME=}8:DG吡^P6F嚁,#DvO7c:@4(u׏*coBhS G+y H1%Y*u5!8^B\hb% o3St w@PdBjH ~iy-xX"H-t۟&t`Cfa3@tG?;@ Cn ^8I z[g 7AA X B $}WZrgBC=ӀGhX L: pb,jj?v' ᢾ##f %*^Pa@j|xFpb@G8 !8G"XF k5\U86W@FZ9DOn=ϋkW |z]<(t$=-GQ5Ǽwps_cK0}GwP~x)^6.C߹3~w hf+h|"1P#M&&KMak/6Bb/ 55$T?}wƿ'D0 !W u0]b'HR1Àv@bm7'lTȢ7Y1YVBM݀t2uP _ͅ@C8 9>,ēߤ4=|C>xMLhHګZ7BL?B1SHU9B8pI $ґ* PT`iǩ`K6 88v@Xo/ eC @@`[DDp 06,x?<ʁ-DySCbmD#,$EY܀ !D؀Ћ+ Q%DL@<,\$?8J5yqˠ  LU IZQ B, dP3B8$:UF =,Mi]$*+L <XNAlȂNZ@R N/x M兘.tBx '4HԘAH#b^7#=,3Yى8@iaZU7(2,C3t?0@/11|c?̙YNh@,'P!؎XV%eZ.Y B1`E%F)ԩ@tXP] IP$2p=̇=x?nJsáȂLP%0\|]Éئԫ,ЌA* & @PdB+B tAEf@@v>xYopA]De9M؎0+8 hr Elbl&?PhNpNXDD$bY@;5l@#Y \ٰJuN[l\Y=z*!^ܑу,fZMy%-]h9E1P--FmH8-IXR,uجQ-~qmXa-lEŅnʔ*\|בmI<bV<.> T~H@C0@@@h+n\DbC8@0<?žU Y[ "\agB@QPB.-܂(,5 -8?.4C5,VX @..dF- .vml|p|#tG' p'@ 8- uȂ#K 3e?PC~$GxE+ꧾJŌIB6C(b(yW \s@47M!֎ĈO+DF*A@ p ̉=j?P&P{ C&$B4,(C)$# [AC5HSBx T!ƞ$ʠdknHr":*W(u 8VV: B8$K<lAEX_"8L.̼ ܂= ,tIRbT]@1]L(N(LVxN]kPU4H G엠<ʔ@kqB$B"0A1`k>T? ,@$ ^mFX|d%seT*V%>즤rcΡ<# }PBlpCSm: 7tN",9؁q-91zBA7dBP5h0@WMqLK\-CT@?q%@2-@A B6>L& ?$=H\#Y!0?| d :j5LԘ V$rEM<IGr+퐍n$ ؒ4@,*B̗3V h,-J,I#W]@!@tr<$1e [yPz B}8 08؃0 P @R>X *4 ؁ Hj\9DdFuT5/D:6e D}x@D T| ĞHH`ݔf[T5ޡC- =xX<h@A4ݢ >'<"X=B 1Cty]0@AXͧ_T"+PF+: XA.z]ܐDn;A5'77Hj@C>0ACm!oCp 4(ABt{ 4pMD @ZZ1 `Y!-Y,JƢ8 -n_JCx0dw: G\o7uN> ||q-xBP1_38?AZC\T{C@$&bXD۟H%(X~1B7 @/X9|5 c?*PW5BhEQ~6B2XC~C3?,>9X1F ,)6 T熀qXA(/$ 7X@#iU$nEse|@h@n^9t@nt \VĎ~D @ܐbppA 4EDobXчxBbI'QTR% /OL&͈4a6\aL%[$qR!.,9FMG )q)!.кhYgQ̩s͵@ݺfPvюLxR*ץG7p߈{Fٹ%eƇq2a;Xb䘕emB͘9Wlۓ]( T(o-Z}3 4j#ax i@dI[,r䱇g["0VDm 6l1KWJWҶqrs 0:2f0" CH":P(;0B4ib." фWPo0F /0 3ѡ:n&zg{Ӂ%YTg +2%3qAE ^Ь y7QJDO\:aQ^й-XxtIsY`p|D%rFGxyőT\E(TA\\A:_AETQ2)3 @YQk3B"{  #:Zp&Җ,\H ^\‚#E8 "F1ْ: TL ? rɥZt({!dɧ*eoP|!GY-r)(. ~3Y ̻ 3@4o lXacUVP.+Q#J `g-^(}2Yt0Z8Ú~GYiLՑb vE+^yJ!<|o"nIš|9gybɅt b9Ə ni3w j`: pnN\6׶곋J\9+#C(08AZ|Pz8 \l#я2 HD(1@<^ tNp 3DRp+ 61(/}¯w{`>֑ `|\ #… >)-E0js F\T%6':":A 1lPH_&`aJ<$c_*N x`(ŸDVpTJ ,p `-A[" 6qlq3@;>Azaol!G?AON#xR.`Å5)iZJ5L(4^9{}MT G,P < ar p@zA(¸I,4- h~ +X qW7X (UiK`icʘ7쑏Nd,a}!+@3A](DP2XY(sD%cy;`3mXk'edw-MN^op-@GXP@\R)V@[$جՙb 0yRüo P鼴m{[ )x͏e SJ[hO\*ԁiBT'F; f p>ED7hfLЅ8h?nP.D 7$ n߲X@(<F(95Lll74B;d8ZA&fmM-ڊ.;n yQOerξ 2@񡁓@'(rb$KP4ġ?~ΩsH?07:D.jyxֹS uX)E tX-غ״5W,ȦCcVs5M^<|!DݙU 󒑤{$"zD6ݾ%6$3Ɔ EvĚι ,/X*"XAh,0`N?{ QhB҄T6BB# AWT7pY4[lA*da a̢ 3I( `}l!l_{/H%WF,xr[!!;m%QYCඇ{bۑB+>,Rfnvtwh^pdpi0.20,ú\?Zfn'GE D#X`Ox ] Ra{)XB[NjbakRKT=r$3N$b6  t! ~P`@+T` /@Xc0@ aPd@  !h'! JP"hǿe aA$8$@0@JV@P 0l5`!v (Frȁ>bo#"  +! "Z@" N" J1ufZT a@! ^ `JJ~@ϒ$A>@$B !ifd~`E  Zg`(k ~,@]A-a@l@aBT!vBDA`^+V.eP6-"r"ѷvn ^&!$szrA{`P B!a2! Ԓ-Mc6NZTb"`J >X&&c$ jso  J֡&.NDvb x&H %@t>@l@` Š-9&(6b̀%b`Fbbk*T46*"b%JR"YpXҁvj24~&\bV^`o & X 2D! Fb* H ) VLL+i 4F!*44!TPz@h!ׁ=u`$Q1 J!{z $” VS*X*Bt/Bᖢ'U0P`OO4M".  !!N! yfar*^BaHVa ad C `AAf_ũN8*IdX.`Τb0ob$D5b#"LZ`R$`J;T K!J/`/")mF3VkPN N*A. XMxHNhMN ZT(H&¡A6XaȀa4!0!7FXhrAAnkt*Pv9"sn&l:dah q),lwuW;` @^ ʠ R*d@0"Hv` hN 4V"H,`v * <  'Wc"YTWƭ^bu;M,4ע0>@DD*Bk@*:‡%"7( n($S \4 D/H3>bc5>hB@- fMMռfM0֪WAMT%eNXu#LBٰؿ YbcBX@Ђ"K͔M+&0숵i cF/tl9$b8$l h! @iia`DrS[8 adjT~^茛ň\!܉$L8 h&nܓvs@f DPYuZGM`Y$wNDV:!޼nAaX Z<s=|(r VL\kܤM(!"c!EY© J@# %ybrmw[Axw OjƋlJxfn4 |RD$FT!H@ThQY=q x@: щJ"QNX.ĆLÆ+`g+P/ wIt؁rz4` ҁtNnMdTGlwc v|mz!$U`Nc$*&^k`H Nb֊˼\,F_@F! %t `n `F x`6>̡k0 j%waFFbxDDx 1 |w`l`&a-PbG+F0… :|ā.XPB(,@_VpP GXr# (SP1Ν<Ŀ?+| U#Sih75+V$f՚ԍ8hLmQ%Եlu]\2{nޞxk)ԸmxXąeSv/#h\=}ٳ 8pf7H9d!N A!^6^4g*B8q*8e/B8XS4PB# WX?Em8H"=p &p@tNT8x8`\0 f]nr- ?4Q Bx29h / BM0@+Cl+B & #*@@?mn86>\0URH{C&i  j;ٕ%x9𼖐T *4ДQ=1-X%\[DjdJ0>xp {(`b AZRx $p`b"<-K>1 '94H/? hoAMHA]`h@wdECУ8> NvmZrEE D0B ԢV1m0r{98ApbHT d;C<drCp$$ԝ(hp3"@EpDhf(ɒ )ѝD+ꩿ7HArq~5z $$ x>>l$ A@{"!H=V"yV%*$A[25D]A*s{0Hi @ R6QLG/ _~''#aO a=D! !D|8E\ Zpc19p:WTV̹:L8!@<0A !P Ͳr< t<V@ ,Hъ2}aRG?H\dB0nV*f"@U `ZVHíbu8Tp8T@rN#.@zTCq |ÐP tЃ~mt)C䣍`vQЄX,Bw0\ D$!< y2)ph{(?e.P3KzUʣ8ٯ5 $3V s줼aj?PPQ @h.B|AS0?ъ@&5 m/! NV6V_U",G*y|&psFϏa  H# %0p0/&Q8ыN@7!:-O+3 48*  Ȉ G)ش48\0;=k6AIp2`.^Dй|D`%m >d`-  `ޛ \Cp@A ^@H"$%@>\HtۖWF!F>e0@(`#i9!bq 1Ϸ{6 ;N V G9 @` I ^oȑd_, lHJrXU<}3]Nr_{4Tn$[@ VF+P@XHV % CaVP@& x9y,b`2Vpfk;9_ l |0p^Iv@h P_` `6U bD 2vG4-\"%p l,{`O8`l+;E4rɗ# `]%@ w0 00OOS[OW c0S96:pdDX*"iri <t%5 )@J*GPB) J*ZrXa?h I Ա_6hz02k({/jUN0)(]U6p@A[0 u;wAC\!4&``t qeY770@?-&e\PVU/'@7!' VRJǷ]+pFs$a'.`O- (F;*JEd!|.{S;a'?B}t|˚⧼{`AKx7}׋Z|뱻gy&@K;mkw|W("$qQaWeq/PɴS!%k-{VQKQa pps> { s0H1_P  0]9 PP4Q `%@lc9 `q &K(o: p P G@ ʐ ` |o+ 0 • γW\P*tTN jgfSp6p9"i X`!*i pW8)+h %`1>J*y`Nn`f , &@K-[e ",\q]!.0 vlG@,@ e@s G]0|p : 8û0F0=p0y02M&bu0e& ta1"\@`p  `y \ 4Jk0p@%` P : B%  wstm< +^T&> W  -"0qg (,R@'=Py3`;;' @30 D & @ e@W*= 5S[(YbG P_=]@bVGp p2hf1Y:٩si*(pAP0ֺ 䓁&I<` 1g,t(@2\8$ 07^-I:{-lJJS- _`_8j9 +O 9?p־gp 6`M"` d:V>]1-\P@ ,'^ u1"IJ0'@)ɰ Kp0 P @ r@Nq6xԧ[`Eu jPX@ՋAk9j}3v.`(7p G' z PpuoDa%  Cy&) aR0E c͒s7d, J!{p!@չ" `V90  0 uPE !L~X0X{ <uύYZe=&[(3 7p8@ ;Se+GMm'0_[@5y%  S; Ե1]67 _^e1h^ Uf"o/RS`Fʴ#pҒ>`a&@V읐ђp`HbP@0@`*:c0 0 Hv* u@ .ɼ2i>081²v'-N-d6.ca.c@ {`3Vϻgf |@y̚l *l?xC] ^?vZ{  TE>x W -1CՁ.q󊗫{Lxq̙2EJ@M3:KaŎ%[,Y$MY.8R24g OŋP@02za"&Yl'4RضatxKŊeq5+U+"qTi5 (f8uk)fGʅ__^ؔ$@c¹A XX2X=F.M[*~3.0-dAj"!1)QN9㖋@i`(adz(J N0"^t)JچP&)$@ f\Y0G 5Ig{ֹf`Fz@H!aeP~БFi!mn#>(G4W b|atT ~GXP.yŷ9b]pAh#v;&%D84o(B08,?± (  h[ R=(X.Rd)Rx* 8 e@8hdPCT0`.a1,@9 %C#pU%H.ڎTc <؅яPH^P؅?a p-qzIprIo>/'ܠV0daVvVm,JPʩ?:m4T$pf8Ё3A x`{jHbK)_QQ9c=f>'Ʃ[a 4X{# C8A 8 QҤgE=܁VFŦ(}36:K5GQal&`=}WĝJ Q@b.a@a9H`ןA5ɊRbB$ܪ.pVf0Am5_ =of7|@M\Pj<X@!"A)F %P ,x>a|EiOA%`Atb8KpQFTt *G;kd] 8~o"ݲ Ȱ= l55P-8F:qpO.@dQ0 hWx*QW@Q(,! @}ݸ %"9P |&C@eo>A>Q!zD@YXqA!Ď\#XB7A< &! BX+`H X2P03؂YU9'ڢIQ;!4Ap.$ A@j@ -Lod(x)nrR!frf?;BHYI*.aO87YH *Y@m# fFbLcL Pf8}y`txm 2x*4J~*G4y`BxJ0 z:F)ǿ: p0@ yC2aq  Vy|XnV=~ȦP0G@45`>*@P|-hHlpN{For К.0"G MH""xq$"X/ x`4> 7:oQPH؁- {L,/3Ț/d'ׂ01p-&b3+ rX0$*;y(0c~HIH4xU)8!}ES!:-2 =д9x)`LB %ùDaTP}_R4cuh 3$렁ЦrT§LQ{CuJ%`ȋ.&Q,HrOH~LV8~*XB 2Rp Qe+(wH1 Q<ERRNih!|0&LxP c̊1C+-OG@`wH&Tȯcͼ1,v %`4}`PLGX ick!* 8ټ"nb XHJ7,,5)@7UR!U1⼇~82GHvx ADX00AOX!aTJG̯'8t`PS +! | Xr 84805dpxOЈL͔.XA8|8r^P, h{)< Hm )YltH؁4Pݱ$cS 8J~IAy-XBh*IX !`m`AH|m^G``JH. 8̖UOq 5T0zXO@Hݤ8V+)"Vr4ꍑA4BhO(I03hyLpxHh\k8uR`-H4(oaXq/>-N3 'XIk*B)]8*5;tBea/؀-f'$r{2 C8 6A;Hū$ʅL ąq#ǎ?j.ܰ0`=,#^ [u΅fImS6^/Jlg0v #dGTB +TX .\Xƈ=fۺBU) =m˚u+}ȡ \C{˧K"D zou?OPZs/ Us/p:┌렶VBO^*c. TmrNQPIaPܸ=.Hw,|=6 "GNJ0V0D|A; M1H `@Z E B zDCaDЂZ>X ]B?f CB0tJPH+I8 F:40$@&zCm9A a$g 1DCEB+8A?yGvV9Уt:cbBC>jt ӅJèn kJ9K18j뢎ʫbꔙ`yNZip: + (뗱nm?Z-F$Q w]4UKGJHN 乤fofFӭ jeE )G"<1\wujf}N''dY[H6 l`K@3u@@',:52{͠Tl|>TP 8P&lh`3H# ҫObM8H`N8@M3JtQ6xy55\YAEr#a1<`#U85zH/!‹#lN.;U>T9x/"q 䁁dɎ+е /C/Abz눞pb84&8p( x% g=XzbT`G03}puKt|2`pHp+4 A8hE BN/_*QahNB, 4@< @R'D>" ~& n̍Ϻ@`bWā@+l@`D9J+;p }lO+6V{I Zp`e07"\P $М=H {.բȎ(%p pG$-XG:<?tSux^șȴ#Ό\*J -(5Q=(`p'R1h{s2Ȱ44 (|O:ٙ.x9LY'v8L H*B Y. wL̥ST+ഥ}ex[+^Y@&4zE E?N¤!^0ID51LL1: Hxb G$ xzo&T-C.pa> pAmWbV@ +z VA_Ohsa =J;d/N | TiN ٣ ]H#HUcc[`=)/;pDpP ! >vwW@_PX"JW'rbED$}鱠EPV"F+H Xxx"8I Az+T-̠Ͻ ggJ4߃#'`7HHI x:[lNNH3oX@_|(Bz@\P&Cd>\ 7X‘%6@|68@@y D]1 &892}1>  T@ 1$1C5T@u٤1C'@|9~Ȃ^A @T#A8dm:!4J̷@l"7B1G{LL4/-̟ b }%ƣ) w(]``nDUT(j0=<<أ  xM<p@jw.Aa(_xd!`Wt`p L@'UB^pD@t| CXlڪȂ(DI991t=lAN9F:7BI!:tB;P4X=xCE`cxDe+T(O~[Di^|T[=Ù >6"eX^1 |qE1 8eiMP> 8B1E1p@ q¡]-@mlAG~A:0 `!HB@oI|HCpʓt-A,@5ьd%jK`:\3qىz؉pʈ?t|@T ٠iT7k@\HaTW=1{$ $LnJ*˻t!¤B (0 dVK5-ɉȡ !C!LΧS!\՟x2"&r2d%bq$J wtD1-2F|`/DKF+M+]) r3( IdpW(5,H`h׵BW>tb>v/zRtC,H ZZFR"P8X ?ԁ1,.:5;(p9QNJ.A!D'p@E*0 h,X2D,du'7CfCfo1@.dO:C PR8$>Cj?1Oo@!E,h0nB18*`feʁDGsP,t-:?7pT @p dӔ0|A\@fj$45RߵÈg 4K@*H\ w (J b"w<юVTꑂ,] @Dt.2f9"jHxՍ9 dp€rDKED˅\l}r:bJ+:JϸVd0\csH ^'133M- A.z.}fv-`R"|BJBBFz$p?9v1@r9Un$#wuv$>;] $ -ǧ=x@5d28zĐ¿B2њ ,'FwH;C8$4 |t'R8p'010p(H̱Yq@pHtc+&F@$8G%5d}# W3ST:8q[9?PO<@w?d $LED E 8vEAHHfpBu ,Y Gxz*p\ ͕P8<6ujTS;@qd*UB]2 VqJU-6tJJ*Hp%JU+b7bWOn3TZrQ˕)gAJ=1 E}챂BDy8|Oh|Op$O,XPEpË7РFt';_ϧđ |Qg>n* |44b101M4#yk\- n.@zEp ! ,1GWp$ i"]h&ElG)](*1#^#⑆>q8ԐN8L#-3|jϦӣmt|>@]4Ɉ e*$L2OH;M#S T9ӎZ1G`E4ZeVMh *`LM,'j *xch 4Eq.UG4Xr@t5XTAt AX]ԈC=N0IPhB FZE;8cA$0>x< )%54 G+!-b۬(S|0gnY .X8٠axzʅ !ty`lHDiz' +d!I~*OH…W`xF #^28|a:dЅjtхx!Ȕ`z1FA,a4X6H0lpq#eAOP[ , @$*^*i-OOR#Z!@yi>7@:Dp`ǘ&*آy0;4a`G5GzHK`p08}n=3@@@p D5r}bн"}OI[1#ـ 4 B2ъ'l*vTXG>7 `D\TFT{0hH%@!.p\U0 t'rӅH`؂2Vp X4@8> /(`l8"e/\"=ϰq6#C@J=J ~$% @= l :QICT  Ap$Wxn{2Q:Tp&H\xlb`_N81#uI( N@'LL.oh` !ұ;d'(*S:FU;‡WbfX\T`/ʛTJ JoP^>-@ 8#$Аu()IO&MxRս` p#.Ȅ+wd@=O !]>+l4Th =` 1b^eX)'!稠Ms0B4R(TC![ kD%'!*#ȃ{, bik {xena 19N'F" wkS4b XA[~T ,ew*;B.  Abΰz|/:#p[`\wFᦎA ӕr#&`0*jx)"qsP0 J0uX 0}#v>:хtFj #S=ґy܃3n"r8e&DmjeK\Q뀪q)iPN`B,g uqEszscPݭg* G}oR h3TEjc^!(wo*˳3kc?/v;E7L_|W|?ї_}_}_~W~_8AQɿCP @ AҠ#@#"#$p7 @ Ԡ)4@0N"=aAf@0TJ@ BFOa:9&G؀;؂&?xCp  W*Ve * X奘 \O9x(BS9ݸ)2O`~⊵R(YWRe&?hR-ӎ 2-تPӞG7Gf&+{pa#@ccmnS8lӈ )$O;J <2K *>xKȋ0/Z~6ʣVY1l+xmO7^L)t3<3c=3!#.R8I:r#f`$K%R0CpRTw0V&(r{p63eVn>z{W}[~vv%Q;ĨIz-O=ax {$ЀPJ`, #[a a_E uH\8z"y_{ 1WzH-{"HGLQ֠b PGXE sESlCx:0@+|HAB::Y,ЅJ>AHȘ*)pWx yZB2 /2Z6#,@bPRBoeK~"` ED̀$RlA[fPCܤ'Ɉ-rK,( p`I66=rMlXd&`OB˒sKaym!ɼRs\F I&DBE4Q'Ct{.V'M N"D!H Z0T C^E"5>R# !)[;4g=Z  iJҌ`/m)DBT FgJD"9jHu 5up*(A\4 \Ch N,A@qX0W*tJU%I%@ܩA>9$+ _` {`G:hGjA@ml](C3![zC:JQO+4Z**p A(t]aHRЮX !"9@$55 *?~#%G'4*:am`>v4  *t0=ဴ+YXTP +! +0uЏ+@E Wᛩn(Ep$A'pB.$01{c IhBS`BQN(@k.H&ȳ  zp@|fx+p޸p$rtddaX N^$ jy V 0@"sJo~kP(xp-`o`sq< VbϾ@P5=!N70F/QI֑QA>`X2 *l> *"xSu6J8bR TP+{.#"E.x ܴC `m~cH&`t`871r0H]7k!vbp T zGRœ0T;p 9jXC?aH-+=!Ȅ r1~c 0>+0z<`B Y Vb>p- f`. qB  7q:Pq[Xte|'4``[)a`$2L9Q{0P-{ vhW Ah1p / c"nG!lA$j@Pd G0)$K(P! "@N-j"P<uuS&w/VNdA=f /X`-Wr$#,wU [` p ]yo]p OA  : 1X`{VP gpβ@r-rJ"FGr pz* y* w Gp0`P0eN_`_hNP G7#0 0;hRc3tG@wX9bA +|Q P PFP 0Ґ 09 ͠ 0 P z+p0@  GT g 74 h>,fp-p {07pqK/@NQ V,Tw 76 U#tis|_fs  pp `sPf@p hy$@ wx6pr7(@dKc@bvLwoi# 0[ ( `ye`'  P6@Vp0Qs$0 ^R 1`\ 8\ S&`&!&{q1N$d#_ hcY6 M9@k  F f\)P0OedfJzJA1`7gM7!1)nJ6Prz #0AEeKȝkIk$0( A#8p!#pcsKp!pӴS8K|:'A"q"6M_'aZQeOȨԦUS6AAjr*8СءyQJWPզU7%Z%tfLQժ%Uz$tQ|!W*Ӛ7рWu14YY#*QׁG064  PPM+ rk7E(_5"с`pi&P'r1p8$p0 y oPM* p @ F@0  `$!7 1f0yU*f=J5XiaRk%K$3З6G 觓7wt6!`sK`y@ $p(@Yp Pf]1{S,@ ɛ/V ˁ k @ p }(賘 @ @ yzT`@ ` peZK3^9BPh\(77r0 zp6ں+'@Ր|,T@<᷍;a0 כ"!Vl4U,V1 pkm(;\{Fdt@"!0zPq!m`  R u@ cp`Ru ']\HFr `{> 44l-}#OGPf#?\A 0[` u HP@}u$0`y p %S"c0 7\'0C Q:h4n(+p{.1Z 7 #l vXa Q:p X }O}wS=D(g/`$s(lWU=ra1ˆrÔ,qE@P G< p-,e@P +0p$,Sr~\,Pq٢p r1{P( mLRND<~z @"]9 @7 ;tG "б]ūL0Ta~p @sr f`7Ѳ@Viç7Udz@:EqK`gP ;P 9`K4% 9@7eD  oPP  M>{x P;('Q7}Ȍ :"p Y- 00zb <@\E0 "rY _ 0@zc#hdf0iW;ˉK 7rF- J0Qp0 ov"nFXe 9yPtU`Ս(0 @'R+0>0M=A# `cgG@ ~!NhE+q3rpY `# /B= P" =ǰ@4dZzd ;p@"{g7@ 1cщ@#xc8h6ބW9pKꙐ uؾwбN> Sl~ p.ǀ tP̩%ԃ͔o/G iGl8 ?cjFlt>ԾuN! Ax/44 . $p& OiPFzSBzR-p,5!4$p'W*E U_jo Q}'Uʬ(O.XkZ!ndA%Nep1PMtFiJxN:ԬaM&iNV1ъA(qaO_Mg;`OT? ?CH/B?ͯ/ z`?{'9 ?OPE DPB >QD0`F:u6zQdH M2c:klR\vY@h#Q/0bمm 6H p Li(3 r$Amp&/_tXt`?AOHODFS G?A0<C x4! YSEۅ Ca`6CSd$`|aj_ ,c7@1|?귓h&يmT ku$E[$zÉ~fT>9]TCV(؟#01HcdJP":a DZ{QGXXd;IvZwʇgJ:G;c? !>яV$F c,jC3)F!Q&7F6fg0еk:?Mh V\T:ׇF.L8tC(f!PdBiW+;*E(<Y18.J!;0W10_lN Ү(38>9lAZvtBz%5!t@CUh*OU% qD q@ Ȥ V:,΍;ޟ EAkƬ|*^θD!o~o4饫ED@>Fp`7ji_d3V2 k3a?|QЄ& N`1_c2qs|c7A P!F.d ~r ER5J-t_sp?#(tB`VB)JWҔf5iNkz ?sza`8P `@("4p@uk1'xS!8` ɁD&r ~2nr{8"0$`q eX? `  "Ub'*D91oebG@s@R380HA F1 J!VG=7H8xE  @a٩>@ׁ?1 Q:'m9zOsBhH+ \# \  \ﮰBP Gؐ^rx?A LP  XxB8=I9 #:` TC0: #4+a.paQq T{>pH f/*P~8< LJ /=-3 ؂fYpHx@`@"AxdH p 8yPP@0R?C bp8+H䀘  x+ `²:H= x};A7x2| `ai6:>c:8{H.A ;c;\0) ^pG 8h @<.Tʐ@ ,xJhRp2hV;XI| (4؁HJXp!r @(ahsFWxJDGoD3PE0)x?T=8C7B)8hBXl$bN xP 5prHtDӀN-ЀÇio@Ŀƫy+HÅJXD^؃ P y$t #ah=TV-;piկEqds;clkWPI\puVVC:KSkNs C!c (%o/]#r@Qp)I_t dɔpYX\ Tt,S Y[=]YIGI,Hɔ0cYD 9Cp :W`TX `\ V (`3"XLdjhQ g}h39fsDU(זD7h;]ᅶ 8ſm?#@AȌC.> 0M{hI\5h˷i^E^I4=Cf^47c?}QӜ~\ ^4 _ c`sLL`f c`$a8,4a;ָ !"Ia$n0Ḝ)Ɓ*vxCX*Q<<H=cl3`=P'p H6Iqu]XqtQ8d.lD7^8~({0-(9nЁњ} -Հ2`^Pa~ WU»Srl^=Ѐ0`>OprTeqAvh ) {ZЁZrHcDc<@zj{8<@[ThTpLHXKƃNeCEG=މGpNTY()N P*`iɰ-^ލ'iԂ(O8}MLHfE0;.]c0XVĔ(W+JAHu$p^ 4Bd7 8.H[l$#LS,; xI2u]5^kBIp5jЅ:m5 yexXjh\؂F@ x&hmx7NqgKl6~.`+IJl'OcH`׽;+sGXD+E4Җ? GAy|=hH>m>Cc0l5#Ѕ|4hî-h8#`?[8 dP Q)XD贂kpLIsyt6+pξ3^bsxddhv $x k* Hc`(DKy\]=cPW8^5?zǠIl\Bpvb/5~`@v]YG*@bcX(uH\=c@0P=UK@MA+ktK`Dt$3%$X`qkK^Iww@Ը&PGVS28c4[w( 0"&ܷ?pzDP#ȏ8p\P +pРJpDŽ Y'hGV`̚|EȬZr+ذbǒݪDp+&yBE  "+pQj1p Ȱ"Hp'b+ *AJ.4sK(G~}`D"(#.4Bvix{(fBIWR>@XG%8EP(L̕ Mа1 AqW0l52>4n< ;@¯8TB1Ԅ54Q`QA2| {E*4amN`tI'`?lӏ4#Bv",s )N?1jPF5X! i!\@bP`R[#e$7\uI%NǛݮ@ ep X^vT(P@A8 #+{ !1O @`:Hig X6+fp 3IY)` B Ux%U XG'*@ ?P6@X_yḇ(1#|4@A<'pd~EV|u(~^SY% " qc[`-xyPx- gY +D #!?b 5\8!uXH_T%Pm@`>p60y)A1pB0Qծ *PucNTLbD)!iD 28PF>zx Xǒ(.<.\^<@L) R!^6=W,SLPX fT ["{B8 cp@fPKFBWXE}M l!`}&# \e\ .6i@8 *2 EH .Lwnl3raT7HbQ#P.r7~eT@G"T(n=|c@A03Ag :RiT$PqQņONjn~$ +l@3ƅ1t T4+pyA$ 16mX92Q opC nxCy{q`|1 d@Y sCp+PQlQ1vj]cp GS:F{[*D xztrW)|] Bc0`Hpݕ_J9:b n`XOB'f8m2Z%ы^GOӋT ` -|&,USMXcfNJg#V*ӥ*5&Amj,H ~dE{~,'5jQj0櫓uj-(M'}&ѩ,#qu߭,՟Y*)iW`]T.Zؐw؀ Ei쥠_ ~4RXD5E J`G g  $ԁ @rC `!b!?hX܉E!Hf<'C>>!V| |C?C!}`ו7>a>C@VuL0u"T)M4)69rGT@"9.N:dBs"/΂=TC:AW9C5<92]䀛ϝ#@9[С^#4ЙX?DR-0?P@^0td $<tC?0B `hȪtB?4b( `uR "6p9TD@H b>\El5C/4? 0` Q=<81Lb5TU ` 0+J XX܀#d ƀNN2HhLN΋Dce,:T#,A3>p B#j`C?Xq%RDKހ0@O=+t DȄpԼOIe*6?< d,=;]x:T|?9Cdn5B"LVlH4&N?20`# |-| H$l,#Ikr#@EqxG}6P^$xO@@>C' f:C)C:P ><Ŋe@`A&>$C^V{N*$$Oh鹦%X^ިL?f~  7C/ :(O?L:C@?H 9kezS'HhgMѣԅdR@"D M B\hP>°}"ނ8.8?$2X1<'^^h@(C?4z?@ 0@,C>C" @,"'jD HTHFK\ x |Ȃ` ܛ#D+ Q!Z=@6B.X:C:ABr,H@,C>#@;P.5R84GZ@'@~RY5h'TB8kIWNhڨVB(7PA8=7lz$ z0@CĴe?!A|C|mĎA`Bj;V}]TγQ@lT\ @.bB(%8G++nRA_+Pl}[o@܀;FҴE  $H /j 6NHA0g lGeB .q=fP$.Dp 􈘬@HM+6I @*Lsyq s8!#2(R@rJ$s }%G(A = i:&K l@ y(w|,\I_*2LrJq+CBx43,|@4H& 83;J 8PokU-BP҅xj % *'X@B4-Ђ$Xv . $D BA.-,@,$B3X0|sDYA*t'HAhD@h0;L#|0O1 <'4 FM?A/=TL0:`&0N2 ,Qe'RI$t(/`HIHQM1?a"5` %$$B`80*#'CЀ $%`Bb?dy5WoJC cCHYSO.Hl ĦLGN`? a @!= T\c/ KLv?tC %C:"I@# u Đ&\ LE5 4LDq'xh ETCqB&6`@@!# '7HB&2mE hĆEh!GiXZ/w XU`#ya|5S.A#l`i(4d |R{7C3:'A BёSqn{'L(pMQ `e5X͕cB̂?$ZL!C?B A:X^E4>)8W"@Y@[MLG,JHz #ĉǔK;(lO:u@\<s(+  A$w1P> *KE` XT"+XnA X H}:P}9#x =f)061OT.;h@y @ڐB|<@SgI1:u)aLW ,1Bx)<@Aɝ!$0<¹H,YynD%=,Td0@bFVreG^…*…8^Q/R D8_I'QTeK/aƔ)II!_prh,A0#3xFep(>H;a|uL%R"jM8pPa/^pz‰ {%\Ʌw! "ƕ$gfּsg'Q$ 0HXE 9n/2m_fS3kh0o.n*u8J9R%.:.IV%G@JP92$ŋ$+ʈ Pe  Tȍ'$p 5Xzb`r+ P)< $N( 0A8$b8y"A j"TT{1# +=++F` Cji>@AK.z V.8O,AKʠƟ|:D8^'IGqx oΧ~qbY:$ ,(-cB]/|nyp8(c$Dzi&z9&gp(Hp 'jǞ9"dy0WPET!8 y%1wLVI* t# JH 8C\CpA &1o%Ƽ7&(WhQW /A#ӹB Q B`T@H*Lp;)#BDT" 3C4y!j҂~0|tBԓ!\1 V >$p.*a&^24*^Ɛ p+p{xf4D ,*  bЃ?5IA>P mO!1Q+X/B^5t XVp,patA X9I`L+1Qzh>ZLn)(51|CXQJ3pEDI |v*kdR o-r.` p! _\Q&U՗0 `} QA1.,&e |騜2@X3\q;3S|J ITpafL@Y* 7df xcDN垑YB`v>?"{>@EahZ a$kYeSkNQ-UG؃ЀzAqVgzjlA6 |'I%C?q(XlNFST܀ x?+0 %oC#vQ{[0DLp&+qZ TbciTA64q 84g'c}4@ނ9A:Ҷ=R𓑮{/ a@@@N%!9"RB~!  14t @* =mAxdŠ#G> Up?*4xE֛/F`  XpD=-Po Tp@@5>K)]8F.AT` ؇ 1 C"1rQscr 0[#&Ak@Gp/C%>k|D̀P. #,1HAW wr绌7k‚CCq<: laq]Y\/t Eq ^ *DӝL9`-J -T"pD2 K=CC/y B %Fk*ԡD(NT:LB(Cl@A 'W-P^?R=V`_An((`?vH nF@po D\~x@XT>D;x\H@>&-VjZ &$*$Dlֈ>0H<,p kH,`k ofeDa)mVZiPNFBZp.&Т1xeOcO YP_E%EcEWY^ІYF i Ͱ%Fj&e e g }&b 0Ґ p+[] ;`*#*OLJlU^ޯIJ >!m dWLjJbI%0kP-H4  v@Pr9fkME 8b%bJ*`"0B<TfAab Js%D6 q@ -Ti: *n "F $@P%#y):!rXPApTDAq0 dLn2'ri0H!|຀/". ,A~g/>V> -|hLbrfЁ4@@(b&!DDt!bA$\" /a'ĈJB @@~ TI *k! O.`:.y'`aa@z 6sf 3a@a39֡fň2>L!K ˽@$38Snjbr!0`A (@l`d 2ŤaH @sB/s>U?}@*<FBAet<s@֡aء(([* "R a/` 0@A^Qvn">N 8# F tgDFqN<|GC '`bȉ>N h-"" >lG./TmC*n2HE`!av M !Ƞܤa!,*!8ؠ Ryw $W>h@Ǥ:#jJ N=* h$GL*"`P㑓D`dA?e`Tqm B:C C:dsY t`Z@QL`!FH| t$"!C|`tQP`Gv*$qzٞM&gT`,*QprFU Vp`<@¤98`@)ƈO/[ߌPY+yZ ) YZ^] 9 yZ[`YҚZZٚS0s* Я_P7Eic ۮseuet_ F7dsMk_% f[,V0]EVG1IJBvPLz^(v`:&N@t{YfqiHبcc;'D[ḽ;R f ("׿  RL a ~% ! L $ @⺶ym>&\ mfaU`3K- o.'@[x,. \"(g Ë$C.E`Rz+݂-tOn/$C LZ[+a!!e/'y5 2S!!BIK bak c@A++%H:.}[7(0%:Aᙺ !( ȡ$44R]H.~!`ڠHXHTl #غM3Ȍ L9#!:ab! $ Fx؏':7bHJ *.I(0jk)(0k4/h|x6 ^M(@Jx=h zɀF&AT >@}瞀!Eϰherig!XDnH Ua ؁z>!48@8<.F pWWL2!t E!_0KȓK"s#8Lk c0IZ`5K"jR=cX@zռ֤F?":tMWF? { :+:q/U'Io _XE CG!D=9GO^)q#8  *R@`Q(|>\*D*b ] .@Z O!c2x "H@IJ5sD.@Pc: <0 *@,\~00tAi(8$H'kHe:u^`   #x(\@HI`+7\^iq@/|c=S.v 4`8p!?ܓ<]2$pӋ1߰O8EfT Y`L*8 LI= IT,{lxJkB@BMGhE]`fË7 \/CtO?%65D4p* $^n>cM#LQ8@/.ʤ*/.SXq/%Pٺ6U&\pROm)C''Kzxr6Dj": L`FT(PD_Gr&pa> tM&O7XaF7<}6pRMuÈ ?@ ? 6 BD}B'pG(0-GC ]?YD`t}ڤ$ x }p@  ߏr+8Io ء* \E!DB4CD/z&ApSTLؕi\p\Hp4d!bxP+2!jbC Q1'S$JPz<=P>2,o98|Q;L >-*/ bE`x#cPT@TbH}h ܭ@`B!/`.8`D J0-|!  =x2y@@E@rprpI%T<8 1gd'ܰF/ p5 007i^L! 6N h*Arz(CfdO@XdPJB !"Y|hc2GD0Q(F >Au  {c`<01aK9O=vq#A%^4G< QyW`c,C_p#sW3֫(|X0Y@ !@>0<b9(78ā@G40@9F%<V@`̓*'im$NrH?sb|@4 * rbiubMk,F<{WX `r!RIJ8Xp` Bۢv'q `iH!C:1 &$: f8 Op 3yQJ]@P2Un\2 枿 $DAL29pXl&D<"J$ ᄳI`(HcǠ(3H3ö|K`8*gPA g@ν#:ojţu H`!a;8s-zj|+`QiXP l `|~{6by`\;>P )! G|}H ![ z@ t` 0p 0N`Jpb^R@p U 0^T8%Vr#Y {\5z[ un8dV[#iM`*hL" Sɐ0[0k :p,kpg 0!00pX-.p{RD4/p.!o[\\ P4%@8P"8c3NXa  "N ` pM z [P@ L `]s-f\" `0-؏: }1GsQp+{T J PJԆ P@U `J PJ]"" b@J/IzmR:J~R3=Pt-MK%=Q'G'KwvF,F tJiRqPG*@PpUPAGwt'Y9aGtCIt&}DZ2G=P4EzIҘRsZQʸҙP8fDcDFV@giTADG!Ԛ;j>Cɜ0;)>j$@Bғ&R1%:.3 Aj.@1}9B @LO'>usWP7XP/@W6(d ~MqF[a9(ٗ/ZcV:9'7:I. !P(ef(PlsAD2:2QAak\06 @\$1A07 OjH'Pڢ3̀o S{`b ` s o3 d ܠ G?W@ ' p"x.*Uf6!7p4{0@+/p?Y3=\ e6+I"4p097L%x0k@gèpV dfE!p/ ( re?($!(0&'r".¢*5d\ T  U g^pӠMګTP@dlz0$ecUyaa!YN|`V%T2Vv6/zaag ?G Vߐ reTa;& b7&0:-(('q"jb&a]D` @& x> 2 *p p*sp*@gU*BY2s^Tz";1rvQ&Pfi9qV`)+۲kk V gWol T@ i{C5;] K[?*ו&"ceT'ZU#@ ep;hI N@ ][0ЖfPP?7`0 0NpM'mNDs4`q5 !>89'}d9Qs׭CI*@zycXx,N 0TH`A+0B ^%6 dаKD\{]݌YkȲo7.\ ‹$NXE5nGU8Q?e `и~'m2TX`?OVXyPR# # ¨W%7᪄с 3v2+G"\0Qv3\/bH&,ē8,(QYdo%rhgC[ (G^8͈Dž Tb6\9ޯ"duu /WRf \XuٵwdxqЏ]I>0'Pɬ--j։ns-0=BKh˕ߖ÷JJ:C:n4N r |IgBk\Npʼnت5$ɪ+^A,p)JTaJLCsւ( ("r |T0DXw Ɵ^P5\!k \+| n,H.@,2C{/sXb[Ɇ0@@@ B[a]&ܓ:|*rWysb|0[p^q8\\b J9+"K/v% `QTCd'Uf[~` LbK_/p}gjWD{#&xYAz: pP"03 VBw9\ `c  F&>2n;` 9r 0@N[@``$QԀ 6&H $ 1q! (0M|qYY(PC_ I'$2:?1& QBHLf\2<p6*a6/@xHœ6M~X)$Yj:[s(b"s#-\  V<@-(5R% ^8e2NdřNfj3>9Nz) w:NDT>9O3@'B1K#PdԢm{f5yhM5([J)@#ND@'ȏDDC>9on@UYR./X(ֳT!T0dqJ04lYAWaN-#suH(?YV5rrnY~v `g%YRYvJh`;(fXc8 oe؀{xCӨ0ࠁ>rP1ұc\y U(b 8TBY J|M1E`-(JT_ǝdb9ҁzV܂li!9Pp.xBTm [J@{9J4.pq J cp²dlj84 |A! ;G8@:TKEܼ d=԰J&\b0LDW$IRx 3p$1{ F9q$G5ЄcQ+Q IVT1lcYPA0ڬ}Lm$ߏ<(9s 7z`&2P'b?mwt&)\cwktA4@ؔb\Xkqw%O"3i` '$*L7 4(ͮf:[ [%J@"2A &[x1QRH JR휨3 ~P# x7qUPLt?<,m1؂MpBܴϞ#Loj~,yI.N,q 9PX#N@$4a |'Y郾SbX{Ch!|;8.'k*N86kR |؆-;pЃ8n8p2HxP}} ȃH(,‘jH@5*:Qx@pCdPN˙Ix&0Hp dcP-8D`PH~'($ p3+(q 62( kr8 oUC(":H|@^8{3zcv{JycJøfOWATH Bɞc;S$   X\WT ȵ\ vS9 ]i(ѹ*Jd{ȇ XnQ1B}9eb _ W(p1?3%%JPJZHҙ`J&H9pȇy؂x/+Hh*N/(`ѠxA0";~*6̀ Whr9  p͡epHx=2uU2`2`s= #R0.';:PoHV %CρÁ3Ł+m^YQUI^؜ Q/`h{@5`} A/)tI**Q*'pZ& +)+`QVف~` |@Xt9d4tx ܉fD~Kt8cmʊXY۹(  Q610x( ]jYuZ q0k)M"Nh'="e( Rڭ_u U1{PXto r 00[h F݈ '"1}3\d@:I~`_L2x-p^Xr 0}DAS >b!o (j#ƅ(v y ;Ya,(>M@ 4x,XH[D:RelI8x؀cv@&+ b(Z\M|# #(2u@mp2CA\` `=~x;/O;6b%aՈӂ_>fZ2Ab:}-1pdeގx AjZЅn!`qIC<&AQ`x" ég:'Y)I)G s )I/ H3qɾ)xIeIR-POeX{8`jڶom1Ze {dN+I?S¶/L8̓9TEؓO:mL L9H=B"`j *TT1pOQ *Dz%&Uʡ@CϐO>2?| #9 @ a1O,s/"8PJp!u71 wsQag@CB:!!p G>o"xЃYIa;@V*a1 ` @hQ (OL?]0i2(c 0U2d ؀#_!xH>":¸xkF+1p `=$(ЀAO " lGuN+`/%{,L-)` .2M# n+WIKX'H ȜW&ɕ[r#Y8:Aꉮ I"HI3Kf<)?}*gx ЋT4zPe" )+:V*V'(g+?ns^ZlC1S0`cv`QI0l`;Dp 4+AsZgWLҪ24˟v+cy 0 67@!ZpDy#>AODE >[S*\#B'BAIYK`"l D:֡$`8 h@?7afRCa8>pRbb&81\@[XvAX[93`h< I$@VH <C !pЂ?T9Cb:9@^ D3NaJ:eZ@XB4q~#p`҂ 4A2G0 `h94L^1OWk~;% 2eS/X@2XB`B^0;SY)'t#G0/>H+PV2Î_9fA<|(p|#$i|bf6xC4wwI{ރXa)0҂2@ &R XNgh.K?яo#w?B@,0SͨKt%\֮'1`P"7'&O[!ʰTif011lrFA `XQ'ЄA MG0)DL*zŨYRG C2`@\ 7T0 bTQP C(< #=t> P@w8p%Jp,]H% ]. p D +4}\ƒVCL&Z8H&酌'$:T] B'P:+p$C0C"<45A5-HB't$̛JpO =L 8A"/B" F&R^* PJTCtWtbt!݄udz>0!=O:@0@'+` B1H))F5Hc*I+]%DQÐ#&|*^Al@B,=Rx4I=-=tgaVwc8UXť,( `~z4 Jj-݊=(Rt $HpY h@1 ` eP6hx6Pk. pcp ?} T"N @AB+ Ĩ X%@BArB'AJf@H޲d|AH,bMA( Ix镦 Ѐ4D5(@uu -,=`,b+A+6d3~܀x 6 R#U\a. !H#/h|Ze=Zh9HC. 7?t h˄.xa:.C? C`JA1 Ì&čhÐA%,@ D+| k8:'ea*~:(4eA$AY-|W( A@4AɭCKXœ,*VG]~@) !h1ul<yܘM€l.8A58 >, Ѿ ЕGicH ~D@TJŒE2 ^t ȉnP-R-==pD4@(C`C/H2[0i~{݉ᄁ5EWq. H.p0 :|0@ ?BD2#X- N{`%n 7S?EkX#BoJA(*2e x 6CIB,C.AɑB`? !7A,4(քf>UhD)O+Um6 ,!p[/!U;C)A}oC:'Ȯ?|C2C(01Pc^m%BLTgG 2 m1ǔ,KDC@>B4( C"`N@0@$C>V 4P OT ]GapgpR.@YIM G˕D'< t;.Au,C'CxBB<<@<D ]'A 5ZF47 |-T 07[t#$ H<00A!|?<耬h@0@$pqP)G#q I`(5ה5؇?c(B h@|9<8B͍-=9CY-8 4@/5|LB=7H=08JBhD  p@X8|Fh,X8A@vh@c4CP++6m.T t\^C,ÑB?C2|59j[_ @/ P[V 1bN 4.g(w5,<2|vThX,*R0TԐvTBzwGP ?wGe@  h:3RC@ Rz+8џ8@v*y+u~ 2pfr U;8HT  F\\ #xB <@AIIBpgW{RcE8?q9CTK5HlK~gZadJ_C 4yRuߦH̀ҹ~Ɩ7͈/E<BT: wǰarؓ?afbJzfznzOG@rq|()SVyZT?:O o 6:8 226t@@?A,UJ473\ļwfu(En?m(p8W  h5:8 C82Ɠ5@7ʫ<7{\j,B| H⣡BoB*fW*\%<0$K1l?57P<|tDju?*s—|G V ׀k ` NaG}@}L%ԵEB(|$m|Aa_p@cئz8YA\徥N]8}/ȖMB'4ZS<ABl@-8A x$+õ60xąD/j80"S8ā8^@qx큰)VxcF9vdH+v۱?e `E0Z _ '`ذ`enPђf5PХ/&B*^>"q %J'^I'R +J|*l\\p` ʼn)5hy1*E0^<0Ο`Xȣ7zTOXTcD*h굣l! 8U)(p9zE՞ Z&7~5|{va3vYxɈ TsՎ5 goDZqĨ+Api+ J̨8)"TxA+ K<DZ*%dxTt$am ZA09tq:H)-Dom¿..83,h(D\)΄pX +,\!_  4fㅣA&&>>" +eh T`N-0a L8pPẀܕW`Z29t?t'BOaO`V*A|&PD!E!hPoA 'Z(h .^isN0x x16A^^Ìع!']߃s⸀=߆nH[=dHV'旧 zqϛ<:IL!Gw0EN?AF _a {~sc_%j U!$4i N PP$Q>"@-DČdpE"T 8 ]#qs,)cKT$H@\0aU8  A7(*!p縀H/ Ltc ( h@P".P@8L$gp@Y݀w BP%(y+a*?1 Qi >'I 0эnR!lP:4I@I#^SM.IfKl]BT:院DIW$I$T6~eU:<,{&+(,@p* BPB dihuTIiyB}! (d3$4gL_S_?TԊNT 2"-iM l!ƥEQ@ pB5:~"؂2 O 2EY+iR VVH*T  z@ʷ"BLU N T Q8`H!$ d#LB' `8J$v(DZ"#L,;bC: dD! ja€<?aHJ`l#vf+X(DA U Nªl-+<@ uba{Z$>ұ!j0&3@>DT`1n# uM.`Wg1ÿ+(sD. lij$ Vj?x: N0 G?I{'R/*L W :/v1*[(亚}"ڳz>H1ӴAx)ҍ (? i6@R9)^8||9ںЌ⼢qRσho,G,< HYtC,Di?R|U8ZeVXM::<"T2jM1%XAeD^ anDNza 2H"īvK,^P-"ix'lxaw@c(T0$]솘A ֡ v`OOr'$aH ʠ$v nY> v`Clvav# *F60.!b@ Z"` 0AJ %* !ZVz%<ar ftnPt d\aK"Ktud P@L RZBa!zaAa&`Nf@Q|aZtƮJ8ڢS?S???@T@@ @ATAAAB#TB'B+B/C3TC7C;C?DCTDGDKDC8V4EO= 0B`"pt#ZF@>+ FsZ!"^ZJFA4#ZH=aAfԠHQ"JEs=*!TTa*Y LSQaAaAtAAvaVt# faaxNAA 8a"Fa"$` ` ΠE9B aהAU fJ7ݰ4|Ha8AE5# xo X@YsUWlYF ^U#!a L첵EkYbg>Y1  5A^AUU^$A!a|rV%!aeLe;UMUuEa}Z+] 4 Vh@dQGPF7 f @ʴk+ մJ#@̣JnO6nm߃(r`|>QYa"Z6 T7@aa¡r{Eoa"d$tu+7xrZ`#^VY%wWzzz{54`?@F|i͕{ f"wiS4= asiɀe g`{7)?v\TR١} 0aTq#80)w*maa9]w!aք]3 _80QgK؆AO@}!S{8'XN@XXMсK=ra -l eMZA ^ԀrnbK¼ 7[/ !,!,!,!,!,!,!,!,!,!,!,!,!,!,!,J H*\ȰÇ#JT(bExqǏ CIɓ(S\ɲ˗0cʜI͛=xaΟ@ JѣH*] ߠ"TQHG'Ӈr,8p,+BA0``x`6 F5)A0ҾR>oһ$wH!境x+ !0Ϳ(#.FX\t]?{=,> +ppA$Ͷx XѢnȉ!bHЃ 0A@RꀂNh!N`,(ZC27 A y0(w2``0`Yp'@v7TAa5uЀo0$" &au"PNA~PP Oyఐ"0E8p8A(JB tpH(bM`H;r$zcIr<1 "R5 ! E#B38DaP( yH< L:УęgB[$ Ty E&jư`4(1/z:!d|*=a#h&= dLAW⳯>J|\ DpT{8t vT%a ޸dq =Ukmzd LB2"xs`HЋ}Y' !MqLC fUX%(TNr|k@3bst`c ؓDI\E85HA{Axx *F)vP #X,P{p <`t瀃4PkX  &J%?Q  \02$`@G0o-(cЃ a`2K) $=f`SW' c dz6h# C z VW V.ФCCv<04#[:ZL𱏟bw^v?ႏMЅ@TUhA *pě·p R s[ @Wx0. t  \0$ c3{BEY,Zr*! TW@ztb9%9Αs L^y,FqtՀ5J(C8p5Nho'>Dt. ³*x <E*< .x+\ TAD,b"`@D:܋yX*@m^v] 0r|  #H/$PO˺F8a¢n?ah|5 ;Nf_&Eu > J`v 15p^;$kWb|PY HA  f:AkpdnU @Ё 9pNhudgv FPv" `1eVobp>AB0rEo]cV.'`u& & Fipjƀ/#P  ArE `p l% s) XՀST/$ `TD Mp  4Pۆ#h8 9Pe@ EvPuC(  &@  (X'%Gn"0VvfW rw9۰ ĵ'p0`b_ uR^ ^^HpsCB >H0C`" WC0 v0t':?~uAC@AIj0z`o%WҰ;w+ F00[@%g: e&9AL߰h2[7 ZB9p\`y z\t;aqP @=b#;P P _`+F :Pp)_`~T)RsyP8Gg'0G`C[uIZ  Dv_" 09i <`_ ,tup4@yre_ "8 AU*pPuy{"QB@ WP;N@ q"`r az`J !0 zlhO!bvIt :cp IP(_W/处#B@`xoL@3swF@ p<)%@ d,% ` [   Wˆ[@Xn☜ʐ0y3Rn `g; `@(t` $ .Rjw b b]` n&FaP@  U aj6A uqb $ WИ<&73r@%pࠥrb%:B&a}CY/0tNə ` D[  t0 HP@B IԤЗykQ9 8qS@  "ap PtA(p@pQ!P &p@`6p?PeYP >Pg i9 `ȫc2wcfK 0𸧃` d5 [TX> rW/ PAס@ff 'W C0 P` g*@U8C4+@ sP :pU@/E\@A߰W&ggG@ dcaDC@x,S!Q;@$ pT2Q80|'66 Ffp   ;P` P*4`D"_`P)}0Wp 0v7 Yސ °%֩ 9 m(q̮겊PM " Ij8׷ Pɟ D>Hh &6S1pv* yN%E"`B Lf< p Ia  TP %QM%JvxUpl)BeepGgHK7w'g N=v `w`4}ZpH w{Z>RRy{  Z${zp$l0@ Y%=Ӱ@r`6 PTGg@y9@_]t`ry< `~`Dc|jI%~O&+߿|ƿ>T1^fQxQ'‰={Ǯ ]*\Ӻ#gË}2t"L\(:e8r@-mƟ5ruU؈(~tفֈB{rtҁb_8=4 }rEY/Bܢ8{lX0 '7+kDG#ׁ^Xenß IL:z\*T\Y3goh<증]!e+D-=nh:h(Cm`?{mcб O0*ttI+70X\m/ Ag|ʼn t9tHY`49 B{?\j`HC"@}nqa}vaRL34zaiD,P<~ Uu$`'Xũ'Hp@nabV8A](!&YfA<眝4Ȧ0|YR*CU;^`T¹-B{<ĞttXq( Q&I!pWp)x=L`k/0^1!d)[Gk#ضo_e &hUQ=<eØ{IDž*H/bE@C䶪`v9-gVCaoi$3CxAY'=;gTa`oa%NagD'zbԥG``%\I3jXY*8cI&jhyDu褟tA}'8zOxΆFtjyf)GØN%~68b"a=}hFiB؂yhqݥG ʮHQ> ˂v0 eVg>@VP,Q Aȅ?B@QЦX *H> Y@5L;P/ "X2(0 ha,ЁT&$ HB 礊BzFA4#d*Hň0`9Janrqj b8#EY`'$-/(;:j)I1˓qL.VGo|H (P> Nǝbaka=z,P^o&@MÅ D؁T @0%2vsUr.J= ؂? {|DG<0PcX9Q gBB}#2˹Wp.P 'x )D@8L@ BEůFhhI# q 4хl0& M( Th @ ;P@΁#LX0 .  BE ALs0$8A= A* ?a _jg8"VtA *LF 5 U6BvpL*(\C4XEBpG8#l#1IXAv,PeD8ы&jF.9]/ @ȁp]4 Z+1+0BVL+ r4%FVt`,@; apaG8XefCx(EB!FG(@sjE*=< n8<D21L7S`xAp@zKAvs "PH vp#`E7A` _IXT T.qC0`1 =$# C20# !Q `8=60i$AI)$:~|cC@3$OHnI7$p$ќ5v1 0%AYFPAnaaR!D,AZ<Yxwabn DdUQI>@&Vl0Kwz'u$ֱ@hl:8?Ρ\@.T ے=% H` 0`p1:HSXA| }00 ;71t]՛R 0op<;A SBߩea8?нxI @"D~uӠ@p ,Ih@XG*Pkc5 ċ$p?}/o lB }o+z+QkX3rQ< e!R@*"qʣ[@RcIb/( t^tHb~ Zt909Bh3Pп}@E S; ЍhxqU`3֠KP_IJ?(@Y9c0y  ] 5i PZ35@r^0h$svV@<  (= T (R 0 { :( x_i0ܢ᷒}306X ; @tв3G85p-A9- Ԃ @jˈZ-z@RhD/ dah؁<Іt ]{H`-/P0ȅh1U xd8'(SoC(ɵKJI؁HRtH)1]P/-(Q{j3l%{op&2TKY|vco]`yG~ķD>* 'y` * dH*xQЀfzy0 dЅ-Ԁ.Z T3ЀÅ# \p+8~(W؃h TH.8B K PItaЁza0{ 1X\]H~b -2Po'@ sH35 8~8IPL( kc"h0+(=4HCP[Vh Іa`ИH7RхeGyLc(5Fs8ӹA{` 8srkC?4d(`&؀ 8k(PH{h 9RP'Ip*dHHEP>H;DF" < t؇X1嘄 *$:ρ`  ,poL PxCCK ;@upp؏X< t$`c7g+!@YhؚX 0"b! &Hi -\$h82 2 ;@8x"X@D)h ߎNcP 4hRkH0Xc}@Ua. 8Q=N Ap@XPf<0 u]^P]xRa jYs0m=1PRІ|@ @Oe c8|xHLr8>" .}0p3pW(xHWp=pT0)x+XG0OnDpo&=KtU(lF&P"`~x̉)=0^(jp<!pkh`X V8yNP${N%o'^3X#P"o_`i X Z/cd$} x ]N`؅AЀ:hzkeU@U#IqYd`rcЅ:P0 'F]}heb< ߆UNrm4d]P^ HWt;`cP0kX^|;` >zEʄՈVĽ^F :-* ЀXP8ȅV=b@O hRЅ y-8pX`hV[: by= Ach\ i@N(h$@xc R/0Ye wujX a(tlU00PXqpBnydYd `sRhY1X'1CԆ]h08諀6 /gֆ=7 @ CRX٨1Zh9xR`v #)a^hx@.]%Ot7I sf8[d{P}&F HG28drX q~ '"v2*p~`2h? H؁Cjp?}7H 01P!򼺆/GQ=Ph!vPSLV(|0߾TQ!tP߲-$`p̟&#~p+)0V\/*ː hG_/#Z~b C>njSa'd>W"s 'O#WgPp&"VHVTĐ.#tw/ P(vwI'*pJbx@`$,pAHT317Dm DW-A@!tACؐPP P>thbY 0zGr LcsD=u,F`CV 0?$A! CPTb ? tM|@ x(Ņ0IP8*O/L2$;M?`Бq9pw 1` w3JI>#AQ r C8QH.*XEm~0Y7 c n&Ti 'P+$ j<2 #zW[( 0H,H"7ƺB*a,BEdE![` NR{&jB;ԑ0پp|s``` h' \ܓ*(%(am`¶P0jԂw ]9D\+P7 &P&pm\2$,Ix 6p8PbLCRTP d+`J-Dp#BQ!`pU#t+n^+`4P[v X4/,p"@`AbЁPq/ L@e,8nrk]tFo8[WMW; 4ce#xŽf{]LY 5!:[юUE jV"ؠOCɗP/_Zh xef!6(`kcg#A4 TۂŎ Gl0v4tU.l?,祱(C%\L17ӟNNJ Aq=8V8zz;խEt"TK voC0 Ϊ 2c0~`a WG:/Y 4#t=lSڼS~ {CXթq1,_9$ pw^̷,qp2p{;Q#FDu N^/. \ ouApleA K".m+v(eMo/[+[)G\C&-M򨭀yvjT#o-TESzr_I`:]ɨT:D ӽv;VM!;/۽L626i"/S<3noW_<Q9$?=݃U|{NӞlbZ_{'=Nàt^Cq_G$=;H#h}~)l??ӯ`h ӿ? E 8o@&. 6> ?\0^VAv߷| _ ğ ͌ Y Ơ T `[` vue9A@ZF@a @t~!!!`LeA!ơ~ ،`!aAMX@3""&"."#6#:b6?6%A&n&v"'~'"((z4e,L+a|TP@ m"/b/b'KiU"0&/.#("xͨ@ !#3V2^&z̈́ 5~#6(A.:!@WiHI8Σ8~؁umc:xx#56?&d 6VN)d?ȐuЁFn$GpHnGI$G*BhAGAHIʁȤMdLjjH @IdNޤQ F5 #FeTfT6b6p?XRPn$M$LeQIAԁY$Q[ANށq%CآKP\%^ܸQe`d\j]@4@Fec$`fcL!\x^A_.hredQʁ9 dV&fb;ZA&jkdnLA>j!nndi&lBCdfYhҥYA,e@b&wҁbP lyyd +sd)BtBʹF#H|z #āQ'zA gd&!BFRh ,!dA{d#A*%-b /$"4d4"TbhiU)3)"^eVn%\xw'(GBBu(i0„bdGANydzN%xhVF$*nJ#(((؁)9.U.C2f""Vj%Wz CzFj3lC2"$܂2l3&z0xL)9*n뒁zʁ 0t-..'B2|#] Bb.C5 dB,pJ[v*a#0$./hA,C첂JBz ®C<}Xpb0h>0pA~/%An2xo.pfڌ WC疍FpBB#t--.d!BB)1f#B.E n >.B$BVCf*:AA(l݂(I~oPڤ.@M/+xĪfA" Cͧ1S2'`q$w4%ߤ,B,.&Prf؁# .B32C.L惆Bז62{C' ,€"̂.%(1LB^-,0DK?C(P9C+HBT[-K&<l ̂4C~H€0J?T$3\1 P7-0>40Oҁ! Mu?ȁ!C삮t~LHHo$+?4>C.%C4S(;>C]3ޚ=ǎ.=5_6 #f];>N%Ձ!CC59<*PVIC5F B5<0Xx:EC+4I:PX&'dv~TÁP[GXu? 2`M4L04W$\6XwCU 0tZ:|WCWTGt8! wP A C)91B,l{2Lkk${ 3kCS(p @TcŪڿp:`sbD(T?|##36[gg܉oݭY#C7I5/1VK&HbC󄆎}-_ّ*3ϼ u+YtyőGUEOW]QS*c2*G9 w prTkX E_2CbF'6LYt mOhX=c(@ o1[ !o$ШYdzga-  G@g%%l}(xYgYb88+v'I 489'f%"YX %萄LBCFh#O\bœR<g i˛8 (a$YG`I c 5E/a: 18Ca.R#f'$1m1#3bn2{FA2d eLIg/Hx^~f}lPeTvaGUQ͆Xc{aF]y5pDǟWgEL5ũ HhЎg/@#|C o!GǛF|ցgVHCQP+ *3Di9bxFt@L2GF.L{@L8JXh0Pm5c~ȹ##ARw0jb$%ZujĘO<oy8'4ji.2$+$g:gyB#G :Q<98y1((F,!@4`cqFiJl tb5p‚9-1Id qjoY&Š/G)VUL9~BƠx.5H*;$ "лpp5h8uմLt0|cwb#r`E:|x@6I`#B Fh`€@)"ʙj0Ua"Ja#٩1r#&0 tX(('>E$ E8A2<㐋elX\\ `)ĐMujH;m =,z <=n^ W >s5+8 3! Bȑ@lc.a`9;  r=c0!9wk^W$2d8#ac` 0NЙKqd>q'G"CGl9Hمa H,3gJV0hHAQ2z>6d- !p*#oCW`L>3,n\Њy:fC@B#)P/HpӋ2q x?S&jK[HB!G zvE<KQ'؅{S|^ )$c+ƃ|^O\4]M(H2\֏Y3z@m(V0`'|HALA± Jn *zXT+9mH3PڄS/ !sأ23*x Xʆ6A*O]e  XG19FŚW bx!a1%iwo*;, ҋND89 aEx>:] Vfa(1RgTZa0Vpr]+/d6;`z[G]ɀxDBA4#0#l. "b;endBF>vQ Vc—u1 恏[k`amg* Ұy5US >1|0t ID̟b o!v.C"JP,~Q #x'GpA`|{mCG6."D%$`]m0"`!m&2$a^+ab$p#LY <7BHa @ڐ ewXAxf .c%&AxA˔˖.;,na&dkf!@$X҅ bBDwC tV$Aa =v BFoIa: (Jo^?q)#!2-nAb44";!(i#`c)ȁ@ȍSZVQF5MXlT**p `&a:)p#!b6!#@NZA1LN^PN2+ b!%d.I % fsa 5 2i,J" &nA`-Ρ+vNήPh9`22m"p4M1KN2$!DLJa/ z/A0ˇ 1a@ȯ\F+-`!"ِ0Ae Cǂ` T!11Ѐ 〶 XAK,j* )3lGk," ,\j0r;Ԁ(F mpjNT174ڒЀ r!mA!ҶA@A,F pnV&Z4*a(Āc H>"oGXR#!I%"Ma8AZ= Dx`oÁ@Jbaf(EJ!!ڴ*S`8aTAVҁmX1!WXa8S"vA(@t(cdAC NǓR֡^JZ#R/$AA?āT<\3"=v-e"y&.2"n!bS C#$2]Vrȼ(KdRġG '@ p#3@4r0+DxMl:iVР] +@C0 4A,g 4ؼG\I`fT dORKG+b0#6 a! 2d8  "i%|a3HB3LG Oga e>'t'&0w @j $E{RfBB$a DCC4 EEg p`Y Ld fCm.z'82XB9%H!.%qRF{EJ2ڙ rС 9nܿ)bD(ԡc眿Yzx(Gav}Q#=(y_247ǝt':gvwLY΅b;x\;; %u <3拘]I23\ux(߈-'-4 %o ua8n=Q6AFL)|vQwv.‡/3>Q3&V~hL?fPB7M᫶FN PZd9)R2՜9 ;"{ gx[gw_jK#h0b.h?$|AN?°DF+09!Ox<Gv|3=t_(cA D( qzLÐmG!qhH6A+ܳ,at[HjH< ّE++ !s30)zMf d,IT(tiBH2(Qd _ 3\3[$9XZc,+ʑ?z,d7wG.:A#kGg >xd6K瑓3Y@d %0aGhpr:vIv"$#5 >t >BF.Y?H٭ 0$ #G|a(H%>ʙ,/+s y5,G̓'dr(Ş] N0?,r PR2%,PtqKf> >S0+ H=N:N6dÎ==@=;c8̌0 G4-ؐ M$ ]ML R8"xCrb 7>LGbAF̳N(_QBա,=6qR3-I ʳ+p NVp#<`BTJP*˗v OdJԯE6.ȃꀆD C FA pCA:6$R#Jvx jZs`PF>CT)PCN_("/!YDYNa`4͇bsFUc!(~ШF } hK $q~N ZRZ0,|ڤ :Oo8A€68ě K {t3pVmeG5VhpeȄRD[#+ !bDFx"YDf԰\b Խ3idD)w0dd.tc,"4OCe%õ.#]ҍrG{QٵvP <[eV#+Y,fq?Zr9X(FiQDȷG0 чSpn{_DKV\ eq 17+v"ntHpYKKϱs1$}Dºؔ\8g! PNi8(0j|#(Act9r]CU jLrPf;pA^ySyN0.2C> =mwRC~z8Sc;ȁR47Po$~ G5A|rQP(xFz_21/ X#c68ͽ{\o_: G;H+B$u *7zP@r`0} E4 {PmExU @pb*)ސEEqzVfs }<1(h ҃zdD@zc [46 afg&i/D r 1@gxÁ{ \VPqQ!ZxN{ 0~cx<{\h;[` { ۆ 5zy'q 0*gOms Wh6r Gm$V;iP}ԗ3`}r@ Q|Xޢ xҐ L"5ɰ ږ}ׇ2[;Uf 7 'Gz7i&e@ ( kC ! g mT kpq@%T!U[W1Anq Z>Ѓ'@ GpAr@ buK,p VuG' CEҧz7")r0qpwhd,`wh`drJ7Zd`d gii@H_g a4 z@'AF`.d`daia`)uhybo@DiB.4birubw|} 0WAq%F-qj`fr v~:p99: ƙ:ȹpG:)ٜ͙ H,`^V!%ph`JchpA9IbcDAUgBbb։yB w Mz/rFgp9%v@ 2Zqi@>cWі)oEw#:b"Wc u[4q LʕI 3 Oe F0vr%J2S:o1xVߘƚيЅ^_ 6zɠ'rH4bj9`@*c J!XqU*td0XyE 곬Jqj$FV|,(%"I{f"~# !: -ЀYCI2a;-)5PRFk:НBvf68۲*VG;@JCq6[k)0t:$`,{X;W Ma+f ;V -˫2n*s4k[zP)rJB!A5A:[0+RG1۹; 5') e8`V K; R_{']ۼ5;ˉ\ fK+m+KJx{Kڨ;v T;^%ppP Ll  AdQA pP')&|POP`1<  `@/@ а ʙĿKOQLPlN,RĨ%K;u/;<>]@veopp!;`n9hLpR[[r}(|hxlȊfn WUPqɕg\k ]pÞɉpbɨlikr L:lʱp1P)|) ]|ɻ|@e;ð,͸lBL4p'Pۜܬ%Ll޼'<4 |\| /ٜLj}mMH@_* -- Ђ;1m8 3 a;,:-'@?-+mO},4 8}VN9Tm[]`}0 TG=i -P+ MNJub 'n~ ~M{=i}em bٗٙ0ٚ ڡ-ڣٝMڙPڭگ ۱-۲=(pڷ۹}ڟ۽ۿMڼ ܘ-ܢ=ȭϝ ݽ-m حm۴㻾K;` ]%mmcI-mn]>6 ~M= B:;p: >"(.">rԧ  / 8f=,n@v(&RGv#Iܤ#mi:P'(mŝ㗝 q>橱=(yQ  QϽ-md9mۅ1pKݸ 74PRA8~͚#|G4ڨeڬ>pȀg .v;pݽ밮ٴ`žN~.ay}v߾N.S0ۨ ١.n>Qj]  o3F@ O:;` M`Jڠ \ -PvT?OC/  dk D0 T/;`X]܇n~^ivFUDgkOuow-~yOooRp ݮ/N?ܢO-M@P`?mO> O/ŏɯcjDo׏}1/ɽ>Oo*Q$XA .dC%NXE5nG!E$YI)1`AK1eΤYM9uOA%XBQI.eSQNZUYnWaŎ%[Yiծe[qΥ[]y_&\aĉ/fcȑ%O\e̙5ogСE&]iԩUfkرeϦ]mܹuo'^qɕ/gsѥO^uٵowŏ'_yկg{ϧ_}p@ 4@TpAtA#pB +B 3pC;CCqDK4DSTqE[tEcqFkFsqG{G rH"4H$TrI&tI(rJ*J,rK.K0sL24L4TsM6tM8sN:NO@tPB 5PDUtQFuQH#tRJ+RL3tSN;SPCuTRK5TTSUuUV[uUXcuVZkV\suW^{W`vXb5XdUvYfuYhvZjZlv[n[pw\r5\tUw]vu]xw^z^|w_~_x` 6`Vxava#xb+b3xc;cCydK6dSVye[vecyfkfsyg{gzh6hVzivizjjzkk{l6lV{mvm{nn{oo|p 7pW|qwq#|r+r3|s;sC}tK7tSW}u[wuc}vkvs}w{w~x7xW~ywy裗~z꫷z~{{|7|W}w}~~P$` x@&P d`@FP`-xA fP`=AP#$a MxBP+da ]BP3a mxCP;a}C QC$bxD$&QKdbD(FQSbxE,fQ[bE0Qc$cxF4QkdcF8QscxG<1nt"?V|a4t8@;B| C蠆3A vd!C92rHP2nA =t!tD+Z 5ғZcAJ&9/r}$p$ҰF(q o45=̃;hr?q/|a c 03A G.GH;!yE=f!J3!8¸`?Vx!T !.]ʷ߿ <È,qBBrIxA9. 'Nܢ2ZP@V-qRPb q˞MOT,q0n N+_μyΣK'δgקg }  ã__;~Ϗ>~q"@e9_&(~ w`U?mUAN_="u"H_&a}"r h2Nr+8`a ı)H*T RXE+D0Prx@?7" a(C L F& c <XE)V1 E/V |bJy eX ` gSJ a&Bp ah-&qIi"G8 M*.|¦fF+aC$`s" pM Cl@j+*z ]b FЉa @ ]肙PC(V b3HQ"ʈ' @a݅(CzBEא֡}$ba e"":RV뤅1 QfcDa*:a6'pv8@aɚP`QـA d]-֪U,N.K28 ya{A C@ aFk pUt FLC,C$ډXtb /H@N! u* z?Z U0A~^km ], ?6 '9 R$̱"cĢwRc`ϖL{AP4Qˑ Lƅd61H\W@WRbAXWHgB':z['}1,5?e7 C8 iM؇Yk¡U(؁'֡lzc2q~, `~@+m#` fԨ$&!{BǠYhHp4(#s;;d_I+J6)R@/xkB |0C, m`+J\8Ji۔4!?Р X6q$@M0ڗ 292H-2h`|E:U8p`GBIT` -uAH7}-t@ɚB6o|腽a@A(*oe[. DZaLΒ![ 8žj؁IYpFŲٱp%mi}$qe7a: ab+`_ ްl2- w EB$ vPpFy)'@mpPI6yp?^ AXpʦlÀzRix@q'0zIATl '~ll.{&vQ g/0D ` mjqC p(@N`yyw̶ P0ɠGyh.% 'N ? wv wbG y Ұ @ M++ 0 e@*`&0t(@ s}[1p 0 p "@E(p 0 2Pq ѥf+   Џp pNU  Fcá`` P P)r42W ffNt׀ {\RM7di %$PV Iu0p Pp` |V;p w` d  @9 @`?2q< hq _ ?#P``?ǀC-I &J PC`n90ٜ[ 0 JZ(0~T: z I TQw\P ~#s`1``#b!tBu {p2{u\'[ IPCq`ǐ!s@EPհ)'XxM: ze Y54 ;X#k;Ф U@ [pMбIpp4`= @ Gp[ 0 _BWa:"0r 0UXp StH` XQ}۹ py @ d@X _ _ЄPekĒ@`0N 0 /0ۋIñ]'v<`   ip3(@m Pbв1p$ 2ep C`n e20L5|b d1H|Wɰzq g߰U 0 `8wX`2(~gګ;m( @bhp` @ \ϜPc,@v=|- %`0 M OáV «`Ʀuߐ(-`lR Pw G@+ P$!:[0y?N{7/p=600 [ QaӐ|P?!@ E`xojvPGi^:RbD 0 T9ơx] YK$P `> Rp) ->`Ya\ 3k7 82s|û_"a z}6M "p 0u äIz\pevBI6y%p[̋_Ȝ ^% B֠q?W) bG ʱRпy@upi$~ 0:C!j]#ՀEݪ$ŵGV|;E .G@ u}ѤgqpxQ2r w;p~r PpО' gᥴ [70 `njнxǠT-ůZN L ̘PDr. w` wG Xpp @0 ^!8pQ[`zNx.Nzl'?x@P?G"OD @/?/0BN@ z]@jU0=F{b0tpG-@TpFޠ!k MqՐ @n,ے ` :K pà=)0:Qp: flbW @bcU@ KY {@v$*I& P#rʢ$p ] p Ͻ f0s& Z 9*U 7,0 r p dÌ` L( YH!k_+&=? *b7t rƉ# fX"]\?I;T,/A֝7 _ b/I1d.LUG yT x0_PۥÊ*FXNJAe!V@;-hyNS(2(=A%pUC K58=zLf ˒81ASwň! zq^"(X@ uiBg.#y' ߿PʐDe1{ɣ "i@xj** @ ğixXvmYĆ,8[`; , hƟV GAtRc`UiXa(XWXoР% ꀯ Pc.8$#VIi] a p7@8H \09 x%+dl<G>1T@HNE:q~dO; lHt!xByDsH?В=r2} G2B16fșQ:EG,x`G\E5h"L@pʀYa#LGX EX@Xd6]jba(v4iA7,o@KZ)2 (x>ґrDE8A^4!#F(1*fY3t=t  sI10JO iA \G0$,@± Le+J8j:BaIH98r8!T`=1u&4JpX f68p L`YTXn"'Y!{;@Kp88RvЬ1(0d 梂*Ҍp_b/P9>.gvv eX0ף" Z^{U't c@,0pDǎZQ%}\@J ؆t0 B;>n ̄,! 0b(("h=A,XfJ Afc_L3bHӘ7":I`]4ډ |%窑lrCf>D) H:lcupЁF /:szJ?GUS렌{xCH' Ȅ 0d0SlU8&4Ң:@bG1`Ƅ65 MD\y$#3죈7Bq x%q 0bOtkHbPP Ha+BqӔ=!P3H7$8$X{d+A-r0 cPpAK+^ a/?! 1a,g94WuG: ! !УB0Qk@Fw*p )7Ap`>MCt)D&A!Xݡ`@y# ,hP &`A"GIƾT\'*pxFV@aۂHH@]#7pi W(B+A-O .`J0+!A qnS 8 РBsf+oC$@s"@P؆}@h(9`G%ۀ\I5RYpjX2uP/rz@ /t00 0 گ^؇mHo, Rc&A0C L 1oPC"pc,R@`ji0A8aȃRȓ. HHddȁ{r+ x:J3ؐcIpRnڶ#pdx] &X&yY`&9 ѡ;c@9 ) >H < `RY+JyvX~2=#Jt-}/[^iɺD# ȨJ*c0{'X81KZ2RSIh` )R1̡'P034|q9{0#88 pRt\a pJ8Q{(HI'428“K2p m^(S,ٚ=0 +Q^p0^0SWx-) Xz-?`jX*`Gx pQh32d{1ppy`pձНny*xP0P5؂S {-:1ȃ$9҆x,0 XЅNx/9z hF5) 47 8*P9 8*@y o+eуh1UHGvn 2N*&z`1O'&dlxĄ)yE*Pdm9SUq-(ի<pe Aym+ (IS :pQAU袛 vȇV 1:`=p؁faE+ I$::УsS3h!9]p\HAtC`)Ng'88cȇg_8Y]0 Yc' QЅU8]`(hk @!(%xۀm9\|A[-P/ЁsAJ:C" 炦,:E220n Ix6 |1M{ԮhY `{H 苳 X xx %^XdX ;̇[0`Y$KRpUQ4eKzC(@᠂baxax} jm!Aj gfĊ p\> p3(Wsa:݁ ك8JQGP?8 Xx0pu z`"] ;23懲 <Oii Y ~$H hc x-x]У0n d`p ( n݇p=*0*h=PN]sH JIzNj &/ٶax* b4y ȃj&-h ZelEJ`HV(7A y)eIANJYPU)HcdZH zHXT3ȅףx2\XEfnhWv9oz]xp nxVIo  (Q ')Q. HC؁XphiiyVj j(̓ jxm#Z Ѐ p{xċHu>q.HYt`cPl|"CIXXzA k pw-i8٬X斀nRXʆ-Ѕ^emP`j@}҈pk`@ЯnH&FRAfj8eT(i:걁 }Rv]y @NzU`bUYJPnl[(6 Gູ>H*@|X'Hr8c(T'P@U#0:X|ЅX,+@/؁ ,@2 -C{C&<4Pn+&1d+| 42(B2 ه~;DzLJ,b+XQG؂5CB(3>._?WTQ?OkW.(v?V C W*z(xi+@ Ѓ+m 1З|L*\-tL+'*~,&2/؂/IDhq#`| }I*.Vx/؅ /lIN"\s,)*8-E`WEC'jtFRЀ Xx|( HCi4gCH/BaOrPe9i؇ss*P *(7;hؓ8Sp@;gax('Vuib/X1pOn P9˿C 1A#Pmx08sHze؇?::~|3P~+x "IaG8ؕg01d„aXC߱+W'LH\B1& ˣӾ~J9IdN% 0*til_:FTwNOPlX߭'IJ19!t9{1)!ѤW sP a g5:q>xp(=su(_2*aX!D,6 uw/C2JC( 'ƜTs:2alΟ0_tf˞@b"*DkA:A̿u4Κ7mc5e0>BcL>UO2[l0m92}WMڤa 0 _9O/%A3M?TCyuh|9[N837FC 3Ln-SP"l1̑(4[d^/8 /2\ /q\\:A 8pA( 0hBB=`; %CP:zP#M,$$)}Iҁ71u޹ ;=x2$ N?$# -p;cB?` B鐸 ˗z8!wG/$8И 735l²7vtkW$NøN?𠂰Q8@/6ԫ`A`;̢Û"G3J$,W蛌8PBLYK9"BXv? ьLa8 "ܗ=S2%]јKṰ.uL0h:}#-\(OS%$-$CcO8S $cnaE|aG B0% 7@ΞP H7OFÄM6YǑa7pʝd{"n E?1@iA4@\Fc _)w#7I]|C8pHB}gш=QDk 퀗@Ǽ1X8`p )FI al@fU  qEQ zr؂5%b6 p#L |`ؐ` j !2iT7qIp -~ 8 >`Z\ȀH68ר` L9h%$2PAml ܀Efd 8BE k#:a*l'9pY*/F9P? *_3̟8èp*PaT`DD#j|@pED!*=D+ JT!D .6q&/$mz~v58@+0o{Q H@tAqP@M|@۝ 4@I[ H55ȁUA v(\}^J Y@ |Zl 9_ A$@[kNAt I Xa'aP$T˹ ʝD/b/vQ<7& Il/>i@|/ @=N2 l6845vi1A cֱ# <\ <;2/*$6 Hn`H.$JLF:78@aF9$4/i,GN$E(PO5d-8 ̈M9$FMBdC$4*F*#l#.K$S8$/*UFJGz >ZvEBeJdqe5B%$_ &E.+=~hh&g=Ur.Wyyz'{'||gp5Ci!y{h{h| h|"hz yh(N'y6(Q@ ~(("?*V(Xdh¨hZ" (ި{(i.yO&i( vdiyfꨒv^iNʨ @i)Vh܆xv)xt@jV iQi(JAAL*V^*f*AAmARjj*ƪj NL*Am8)B6k6@.*k2kBN봖mD쪯vk T xn+pYԦ^Ϋ+ N+VjTlցkF T l@Af@l+ TأBl,R 򪤢l,Tm@4,̚kt--&-ҁ>-쩦*^6.-n:ATAמצ-ܕB( @3ԭ--m6X)Bfڪ-rЪAfԁ&.nB+R&?`.B@E.bݍ-Qդ:m,-..ȁ Xn節@Aix*"␘nn>ğ2o6^䂭Vb.emn.֯/hoUmnoزBoί- p_0m bp//Az㊰ 3Z0֒0 ;mn /lm x® _k* 7.Vo_  /o;&R1q [1۰3Aq_/ x"+,Z-A($('2d#Lr*͒-p B)(.-& .-!/@4031/hC6 3s4DC2g6Hzz0- K+.-/!'Ц+ 72-q(p:B 2K$ 1p(3,B=s$.0+!Я ?sGpE/]+Y9,z+pG>gH.*t)HGrށEB90MFbӊs(44@B B( 9sG4$KB/O -%, p+dBCc.srKqHsrYk?( -am:4](x S5Jg4 tz 'C>jC,*p%_rā xi69ā,Hj:0<6Ԫ2mpB4AT9PsjC+px qCvۃ2A Cjv80wv>$̵$luv2A:7C>6x8vv9PσьsBB:6>k00  ԁ('CmC5<y;m)>(4':!oy@0<8>C,xB:t518vwBMopB8샇oxˁ!$C?=HyK=9#\9xž /5910 }'z#Q5$;wv<*14:B;:9Ӧ,+p_*CmC($svz2 qwo:q'Q,.ց!o0i9?$4{o.d ƅ#<H:4C_0:x3r  ,N-!C}9xrw}5T"|ܿsm{̭y} o:7q漩Btyǿ%h[?x޾̎3 p:vp+ @@`Y $$"1AL|%绐-mG(_b!RU&젮b vO3 h$c` hh`_dF62px̀9:hH@P`,iY?AdDbdX1qfRG|M 'Ң9xd" j91yJX)&d2 ! ?3 + [9y9d4/9)s9 amET( g,UVu.;`TC+97=6(ݙD>ap:!몺 b5 LC=b`D:$"3_hB%RI01` 'c>jᏳ(S(Q$[ Li@x;nɈ?5DDvnAnx|Ry($qKa=FA(d\O() t$ V %MiD85&QMlr"밬db:1 B/ǸKX3|DF 1 NL sdB 'C_չ~#t8:$b r`7ӥs &!LhEEl#: Gqo#87椧`5ZS gq3"A ձhM9 l<3Qt()I٭ TaH@8&Z‰|5~т?y IF9&bF?ڳŨp,_g.@'Yư 70B oC6dOTaB0FBLIyW)=~[,`~T]蚋|Cz!iAϛOb:{Md~Н5<6;@,ha4\׀-[L"bbĺXKGbA*n;L͠Mcҡ` ` &0` c`V`!NZdj4[n",E*Чl C /@L0dD# IC<@3A"030A@-%9X`a2"yB3a^i anJaw.hkT3Nyo ?bJ;R,[#Yen>A!Id2ׁ%,#?RU@.?w@CrO'8]UGğ@7`L#W php8BX@ n"4Vfs//3& Vmr! d$ӂK8aY_!rVs"4!X ya'Aeܰa+JAMO+'.e2T"n,0k3'qsAtANOeFM : a$FC*JapuX$ f4z١!9!7'8վ1Љ5flt o1)رr A/(!Vf" B1F !-7YmvjD@-Be}PȮ-f5vŪ@J"I$}g@tD2!@oY T%[n3Z/g NS= xAt LR z!P3J,VӢkV{Toĵ0m9bs5͐87`4%u|5@2/ay4GT R#v \KecFj,@; Za!{u"#/I #FxYʀ`"vҏUKehvaUQ%L$!XsK2AD' jˇ4",|Z{skʏ|`:~&'6X`p+۩-:D p ,n]xLs\h`{ #2jVPf"]rB !1Q%pXw&^)J`NhH{hTU<.dUfej DiFG;y3fܸaɡȡ,!^j ٜ.aqtBK--Q}2hi8Tr O2+f1ϒ|o$SL2! J!f Pub >.c?!-$XD -cvMƶ. B_IӼN",A0zlYn!F74T DX(Zm,&՘"$N)b!=;IU9|hC- s"蓍 67Fk(c %$%aD,3Rq^Prhy"LA0XamgEB!PHUfaP$fthIJ%MPJ =?P& 7W":tbA5{/?|\)4j$yL A:209#Y&,P:z߈)wi1˴&cͤ#G#FwfhVն%fH:dX&,D)I͙3XfͻJs]cC0nX:)AEZo=| qCyܿp]EA[+E̱~ Y (S #W ;(brH'dj@W<2ix2O>!sqQq99CN?t)O + y!jKHqT{'ZǸ*Р% eQF_?|-Ǣ"gȡ'#b%@>A%q‹9=cݠX9#8KȪs tzLrAݬ#oAp{:qcl/0H,@A}C"Їp (ǀ?(C4PHACEH 41DBC"x4QRA !> xc\9 E 07a~T+ >eU*F|l:OG<_"+F@ԈɫYS)=Cs׮"//+JG)rE\I5~69D5(Xn馼 "!t_<i:bP)q 2 6Lp%YY5AJQJiУ 6f_-DvYHp}±X8^s!(7fCJ: :>YJYǣDJ~ q`YuA:db*9J YJ1(7#uyV_:x^ y`lqz3"3s깞ZEj\0C!z@8;Y:)J:ezplZ*JģY(X>Z@nNp p0up%{0:K!%KP';#%fXJ7+K*[:+k@\x^S-A+tO*Ok+bQepG@'ʵ]_!+ɉP%L˲IR[JR!kkc!<xH)f+Aut[u4_J37˷Axu+ z%v˶k$K16)JKzw{%XRKg+뺂6Wr8۳@{?]WK+Ļ;ȳ ڲN˷[4!UkQ[kԫ"@"Pzy+@< z ,[e|  Ѕ!T`+-pPX#:! l79l<>7B|3z 1",.pФePlONt;Y|Z|:#n00H0?ꁞnԭ޷N=Qn 叾N1k"0~]ʮ9n칞4n1 .NS/p  _% Q|9p, H9G. 5 6RQB;`C> B!ZS|^P0Š1>=U p]/ZU)ZQoA^r%Z?Q0C{OdOo`vSP {`?n>O /@n  _ Z?=OoO8;   8/Oo׏ٯ9f ۏ/70<q$XA .dC%NXE5nG!E$YI)UB!Ax@J9uOA%ZQIO Au  QZUYnWaZWLpHHXXqΥ[]y+{&\aĉ/+Ƒ%O\e̗_difСE&]铼*<"-jرeϦ]۶-[|4A'^qC(tsѥO^uٵ~!ŏ'_.g{Ƨ_}p@ 4@TpAtA#pB +B 3pC;CCqDK4DSTqE[tEcqFkFsqG{G rH"4H$TrI&tI(rJ*J,rK.K0sL24L4TsM6tM8sN:NO@tPB 5PDUtQFuQH#tRJ+RL3tSN;SPCuTRK5TTSUuUV[uUXcuVZkV\suW^{W`vXb5XdUvYfuYhvZjZlv[n[pw\r5\tUw]vu]xw^z^|w_~_x` 6`Vxava#xb+b3xc;cCydK6dSVye[vecyfkfsyg{gzh6hVzivizjjzkk{l6lV{mvm{nn{oo|p 7pW|qwq#|r+r3|s;sC}tK7tSW}u[wuc}vkvs}w{w~x7xW~ywy裗~z꫷z~{{|7|W}w}~~P$` x@&P d`@FP`-xA fP`=AP#$a MxBP+da ]BP3a mxCP;a}C QC$bxD$&QKdbD(FQSbxE,fQ[bE0Qc$cxF4QkdcF8QscxGA ! )71 k )M1p1aiX8, c<1,P de_ vg8> 5HBP=E#⠐3!$=s|=5K\V ulG+ԠVvTMX؅! њ?_,EX{=vA[J!dCXx-MiP ض H:8]O?0Aږ=yzPB>{ M{TG: vh=! Nno5=~c -Cέ?3좻Uo7;3aH/iL0qL "P@dX7b> jXʢ#F.=aD"vU$f0A|*G8ؙe#bG8B Pvé :!v!>rq]D ZQL(qumx[w="c*S ˾wvD zcgGs.94:"!DB$+!ʷ8tt.yu N[nA"L\:c!a; {ZkŦźU.̷j .ݮv1{%#֮ο Y7LMY^j[c|7|hz>tfMl]mFڪqFso9g=x.!nYl{fCzgsuwG|й?f\gZ,ȐPVCga)h dGj`IrMt_,8fj`[m7eWAecbhgڊx9%mՕ(wҎ'FAΈU>n$|:7$](gIHZ1OV#ATV}r!UJIC:L@͙9@d'T 8y!q2Ҡ8XԐ|C3"Xt$cԡ^&byF.Rjʪ0uj{j2+e$^Ji%WN+X1]Cj?K@>"35c=r rdĵ9nz˿,bv+AeZe!SU1r%ƣ %f 93bǬ+ߌ*e%2[Xw>Sk;ia@`'AÉ$,v.wo?`"I+2~='0"'r2lG*s\AOј7mP[$zMns7Otέx絢>EkG+鰻:܄B7 %`> ?bоQb?wq?D0:qq=bǦ53./n㵒Ɉ2@)IkeSjY`;c]YjRA\\®J ȴA(1†IcGb1@;Q/nXmUIx@ !~MAzO$IPbp3h2Up/bnh@J@2X> Ykb qg?G:526)AzFs;E1I##+@-Q\t̛Qkl3sD NP= N c8ѻiAęA1|A' ]"0 =@i0_,!fQ@:Q?55գHD08Yv)MќOEc: Sل,?JYnbic%=&o4d)xcΊ jF,J ibCD'ıciX‚, ;.Vi9w$0wiM鲢џ3myє$7mL~LT@/4C `= 6rX_^,#Bj8?6lpC9!KaG)ǫd)x7Aw׾==*IKY|{m\H92ޙ6_XdH5RB D,r1iCpXJ+aa" śPC](Ǩ G1 NL&jBXzh)@kHiv(-,{cA~iA&:.|-j:kc(/2#8 3\w;$B"zgńa`óŗ$B" j%V)Wkn^-`)rMudw&HX'2x~#vךdF%r9I_$DdkJB"2|\[yyQ^[cXpu'ld.]h; ?T&p0BtrX|[}5f /{ R`ve\@)fDa^&Ep@&D(f0 B [vS>"ڈ= FxшKF )F+f0R *{CGq(/"Kݐ ~ R2nZ-F;I9C Ya 1?"?dVl( a !V{+ژ#>DA%6X-ʻK-/\D E`yD41ZCr)ȣ%h]ն4r-dLwoh-}:gc%QSs\NgRJ3R|P&}h矏kEx>k7dЃL92Aڭ3)5K(>9z*PQ G@tW% @0*)| 6BE`/as{?iaXRp C)2Pl@XD6PjR0Ab4A/`8 ))L\ȑ #)f`cӞ봏xИF ; zt>ῌl^@V2JZ򒘌L!GRL /|r,=HR{b(T2aX5}x!NK $#'#Fr4*(DʥC]Y>AGM}` xA-pB؍gڀLB*-kjS(Qj8'Ǯv@hϐiCfRRg>F Ԣ84IePJT>@spbX@ p#ͥ+ 1HWP  *pNrAt{GD#qc #1K$ ` q_g7EU fp7F"92r'RNXJ9M` M08Je`GRd )+ JK̠ԝ[PHvYP)=BZ 0ANfZ;qoPDDHLV$J~xD J"3!c%B`6- Z c5wO4ra$+hI7 ND ,MHZ_wX*Z #/D.ނ=18׽b _<^8ɩv}Rߺ4 /#o|';^Y?.{W!: &b 2[[+x?|/1}GoO}~]PO?G8BHϿPl~mgs0|4t0Xi@ pptG|w[@; gvP;#*8 %&, )nF!( Ȁ pp4~peWOXuPpGVp0l$@_8XHbDž^XVF1SG<Ȁ>HG!@!GHSx%SX舒@&f!~y@8XhzpZh%zpX8hg@6p@؋M@qhtЂvh( 嗌xx6l&؉X< h1_0x_Q;Pxt ,w qhXu`v8(Rx$HYljȐ )56v z@%] )z`Nd!Pqpipphd,0 0Pp 85FY!ٔHNI+mUyzHFȒ,x]X,gW'W9uIwɖl#TyȖX/YfȏX, xèɋJ99y xc)w%P񙧙#ɚD8ym-8tg+9;%9 %H0` GIHy XFqНމj w`hp7Aw)0 y򹟧z 񙌷jtПɠ rP (Aٟ頞( ʋ XP 詞v靾xirI)؝P j  zНP 9$ .qyX꣟إI:WڣXJʤ)h#xVIؘXy)$jQ 觇:١iP~w5ʠI}ڟwN@:Z @(*@e@p ꨰƸ ]8ijh2:ȣРw q8)ɣfJPY0 vYk*4iG5`;p,Ġ @PBF% 0[ xA`cz k dP9N p;0 + 0@MP x*7 KjLpcZ L˲bg  *˲h `z L[ e cЌQٚc;e б !; c`p H᱘{эF* ;r 0PHpAk vv zP:0h}d@ d  mkP 9i @ 6(`tp` _0 *K[T)[r ۰ʐz `; E*pv` A_, c PK [ EZd ñ[0 I? дw[ՠPP H`:; W Bpq h|_˰(0@LZi0@p)/ kڳ`wLAM @ ٮ.@5˷P:hP F @؆j~ _ p q M k ./PPֻ0eOXxء ~ zp {# ѿ /x|| 퀀ðٴxϷKqu `=]O? k@?]R.?; okO pzp /_ M? d@@>Z5!(@Azc +`z_5@r (Suq| Ɍ-]DqɌcή{ r@&yM˗$QO~SROdH"o=G9CaTX''R3IRpI α~$PJ%`r>m\TG%Y?oI/Ti:gnKO:wx@ݢ93El5#%MՋ'`z6gzu3SN'vɯKiSX!0d 4(oF1'jc|[O .F8HpBj 4#;cn#X  1$46:Ǔ1Hx0`PX G'ARÓs$AB#x I4JSP hT!Hhj%3`|aN9b'@ĸPƅGIs L 3L `IǓ,ZaPRId#ҏdTݥP`)]aA6|F> 6CƘPDj0͔;x'KFbx9wLI`|;:u $|51;.|nn@Sa:@:YVu ÐsI+"CZge=KCzha0iapAAӨÅ'3b'C#19JKA;8(^.A盯i5u* UWoI*: |F4$&c8kyIWՏJ/{'Jk#p9A<F;%W3JYVЕ+b]cyV)=Nt'DyEZ]q$PYC*'V^r枋 2Aql -\0/h艇:l/)؍F0 l8s?A $  #3vqFa7xYpi+?Y84`pchEהwP!c,bx1<& X@)xl*9$dpU G8(a#9 VHC8TC@jV;TQ}I?17(dYH TG)XCFbHF?edC2Q^_@.0c}#\Ho- "R f!P`vÐSU/A27;e/dJǖmS&V`a $ f4/LX f$I|q.D?!uo y L! T.ni.$d`Jc/ T8ыʴsԏ"C2G6|A"ng*JfȒ4PUv3Ia=ֱE`rf&:"1*UI/(C9ĘdG)c">Z>5ei-Hr9t2P D?d C2hrԣ( p#`5GD|a! zZ7ݨE\ L?4)M P H \a0^YҗGQr. 㣍10˰8\,H#9+̈FlIi([0wmkG!^s`90Q bsB@dKJ禠Lj)b/Tg@>0= 0pm#2^+_thP :J\xCX6"Oa <1 l.y] ;A/KFd=+xnD쀴xE </00Dsmo *h)<17PRpN@0DW9C(qIUZC`xSꍘ*)F4FM9% _eISPA`%@V=b\>Zbd|Mq<04f䟭`DPZ" PG=ڭqF}!qxb >mn89x [8 ~1jwSBĈcMć ʊylG.2} QŌ3B1 T)|88mP|Gh: 2("SuЄ3Є#S>10b3nćVHguFRa(V[İ((CY-; Lhapd93GȄ]8{x !2P80N:@ pMtj`1ocʨ tLh{:L((d  NkaG<wS:LiPL؂Y`Sk] #5b2XHfJ*"@REG[s8[p1tA0L4GH=yO!%RA;0Qh< Vt̄CIFćc->y@Pbi23iN# }fD)1~h] uPugɤ`nqv0:P;$y6ՃzGp{/`#VPc +('6Ʉ:$g{GpyDHQH.(Acs"1i u(1(i|7_HB2I-XB]exP]uK"FȄsj1(1p:C&-/(!F4&~j%܊ ƾc)>mgJG)IуJߔ cj )C8?œghgwp0@p/zΎF R>M5qpmqXj138]$R AXa/[@M1~15@t⒦0/F1cV!*AYBOͽP<29P/g7~0*ɶp9<{+@8x"q_vF.C3@hTW !bO13kSJc@+1x1`gb1HJ2J+ z@H4E;7XtY|դGUs21@Z w1gR-(kޗ _'*w1 e'4PUܖxX`7AR`:F :?˄ygPcP3oe;0}(ov0 10vi(j Ia]Ѽ~}59%"!N%%"`ڨ؂r,Zc\_G``)\2d}g 2gMtI U@v -m4y7$N?JxPGDGBN2SM:lӝ!6$b(vM5=>x130B C *0Xc(q17r7#rȑ?_VPl b 0`HBSt >DR5D9%gO]?ePl CF%` j2O> .0i?l>#$SM?S $%sO+8K bV3[{;AI?0b3zLϻz' Yǐɜ"0q6“ɢĝh zHaT%TC uh$EDU"3:(B@ чg艞Qk"0,·$#tgHceRJsIG()TCz{\8ܡ`" E4gP: I?)>odjIxzinqO&| 0̘r}DF.&:X"}k((#R @!٫Hz89l 5 VD& Ź*Ϯg0GԩuGC(hG!\_+Fp*MdB2; 9a<,vN̚"dX+nT#wTq ̃5(*>%i -Ljm8AE&i =QVm rHN``!1gX&!yԃR&1x @D)n]L'f VT%Xq[.`:R2nG?4/x"C+ngI\"F at.Ӭ'LV  ~>Vx(^BqiO\!`Eq:xlB"X9Oi(b|N:KA z8=?;tT'ZGM(AagzO(l9(ࡦ p~Y; =ӹ~-x)nNb΄ؾ׹PzظQ с`hCX9HؾDWmk)@HRxL(5'P޳DUt`vcR!vE+!L"w u{ޥa& `@Sy1FA)hK1 +եvMъ-  V$4MCZB sB\KFg}*'LBA.#-!g""$X#w+t%E1s iT({ҷ(B=c#>#x=hQdri0 'A(\2( .uu% E' l<>Cu< b;ԃ>C= `= >Y9”%dr:C; ?A!āAaDe^,ڞLA,A Da.J! eC>@ ,L-DkAԁ&QbW_*>*?-p" G-?DAj*ꩪjj*֪P jk*jZ  kB%vjJ+&ف>+N+k|̨+:++@ܫ+k  t]jŠkRF+LҍņllŖ,+Nª*$8Zl,jځʺ,⬯q B!-B뺲¦ ))^-~rڮ-۶mRA B&zh@-..M >.Fn: H.fN i.jŅ.A  ..E֮.ޑNp{ֽL6RA@-DF./A\ @d//otįNn@ 00'[屮 (0GO0gp/D</C0 b \ 07' 0 3p0p @pk%Q0 Kq. ( Nnltqs@xs?lnGTcH1Cq۱11 q9m!+I@@b $rqq. ?1$&2Dt'%2c)sq%(2,+Dz ,2.i&r..-G*2/2-'-_r/20{/2 Cp pl 7s 8{qL9q98xNCX3?134=3@ @&3s? 0@1 @>W0=0?,GC=s c=03J{rFK3Q3o$KL4)N40tP5{2PsHQ+?tQ4 )C@qp8#@P Y i^@@#\5 ЀV@ @[ uTavA'c(pB`ۻC++931#A 2 8#x'0AE6kk6lǶl6m׶)m+n6-#/.`C*@ @^7^D5*hu^Kw kwskowk1 `6?l?*؃?>:{!?==@G4$/̷? x7?8GO8W_xVT/8B*HC\[@ u\@ <8 \ @ @Cc S<,*$ h 1H' S2@57`$ }0o2@w|09ǹ92h.X߀CDAX!X DA(Tx{A:?TH_ @w 9;)lA&@?Ђ2C(h'C5A#. 8Ӽ2_>gokkP7/H\ XH г @DXԋ+>D@.A<|[D@7v#7L4@ 9w2`Al4w83%K̳y&??׿?Ch@%Ux]RaV"q˕>xpWD *@t8ԹgO?:hQG€BŖNWxڵ!$H"y#4{ު H 9*p|xi_r&@|G &1ђ+T|&rqa%<{l1Zpň*yT "Tj׿ P ,`b* f(T i$\L` eR4Ç_n*FVoH9Lop@*gTi+/n,3LS5l^x&BŇ#ԡ : G`@ԧ<$> Hl<G9ΑuMe| 1 Gŀ#"a'k6& PPBav|TP`Y` DPr'USte,KYΒ,P2rzdTIG(pWa(MvT!ڒ1{!\2p|Mj49CL Q:q=73YIt& \ NXz4AXra FP{;YBM^S-F1RIchaD)|.]XtM=Dk>S],Ja3*)z&>4GۻaL{BnfFT1Ă #0 "5a#*zHXP@?ҁt#@<=1&hL 7."npf.nG8-*-`,`F@`o !"< P //3A HS JS] &$T_@!;Ȑl ]PF4] `fa X !:s V`8an * :`9sZB=^ FhF v>H,pB9".tD'*rHF>x1PA5 T4fDtD), L'r,CCC?3GudGV썽vB);嵘BtI@P~P,@H*iHXrGtLc L]KBMo*LMᴼL4Mi4NOc I}¥6J( OQ(P4((pB-. SJQQ5Uc|Q\AHD 4shN{ M L*``  6`X @0@J0 rDKMU[5[` \5n N\al#N'jDAT )t!N`aDa &` <3\A6d\*MZn5aT& 2K/Q̀UZ*  êK)T(a/ DvkM`K lk– L~  D9m'D@&n#NFcDEafD=28a@~FA<pH(`!m T8AZAzN/%$tQ7M>$O|4 ~ @ ]F :! @ g{N V 6D(a  `4`~b` ޯ'>gbS~? Nl`nj76mKCm"> r& 7e`{ja@ HF&/N@$6a $s781h0V Vk6DvDn\!T]b$:`& a&*޵FK!v`Hvaa a !raPIMXX~x2`pn S 2ˆ(wl6 ]HYOL94`! *$l/g2if0 ` C;#N/D(n@_| "u!5ps8w33 @;J a 0 ` oH,2!nFYD ƒ<T[﷙7Ż/ Pcx. Pakfl|!=:K_FVS!`Qo| WAr(2"qA|QR!3{  R]Q \AZ|kA  A>6B d!J PAǣ;0>&a4V-=`ӁSEz<5Zl HL|$(*@1"ud7%䄐0SZU"bڏ Zմ-E D$@;@Y Ȁ[YX @So[=ץ2(6@܅%a0H9 cU G6X,.@}՗B |mK'ވ2@TOB`C燂 SDÕ?QT)S>K8û~Ge #g~b۞"6 o)>0Jɏr|23bߕ 'io vIɱW= <t5̓V?tOL@?1D?a~_'t??¾/?(xg/|u T.!'X`Cx;V?4ؿo6<"3]?O <࿅ :|1AJ1bŊ;zǑC6$I)["\2&ƕdڄL:m򌸢ƒ=?,/p`JCT#:x@Z/\!'ұbǒ܈lRjGm3$\rv,k"޼(UY/sBŠtJ)ثH_̔2nBb{]^& z.kΆqmn7گߎ[mGٜs=#F R+ޙၠm Ħ?衋$!=wz!&!p`hBHB퀗UxT/h40(Ž0FTUP-,y6P-I, &hq@@zet=P LJOdS0? +P|8h_>'A|{+#=`1N*A_ $q4=S 5%B4Ç 34TS8 sGha)J@z<^-1w`pH$U=q)8PQ;YB"m%cJf3YNFS `+N]| G:¼䰭1@ ? EEHA v4$BoA욑:( ]Fz@AmP8Y`-= ,`H6@JhPH!9ay@:15#|pp'DU7 TtX1$GH vM2|@7a$&hvK< 7[c@FQ~TCҀ5kTC8y#fDJGpW*Ќ6B v ,H ⤽.~+۠:aC30oqb2uB[V#a@O ac8wh̍p|v[#Cli % >@e\81x(.8V_PG?Ox訆=行Mò&#(ӑoЁDv #f7hŗcG5ȠȅH_8 тPQ GeFp8i շm@|<@F LD'+``8jXvtC 0ly N PH@}tH 2%rhF H _H G <@64:S8VnW$ &Guv'0*nqrp"57 (  B.@C1||)pm+,  +`poH]cM@ ;0zg! ()UP,P  XJy,seޘT.  W sG?P6GsA` F?I [` .| 9DXy 5 p P `&`8@pP { {^7  7ZP y&Ma$ `rSN90< E%`p P}rQ\ 8ɸ@\~ސٝ "Ppp_0 0ePO ƀ.`4AjX9 4:;/@ @wupXT9Ps Υ30- %i!  `F[p' pp;x ^p Qg7 DYp`$7 WUP _!pG@xa1ytt =d*!%Tϔ!WW H I0Qpް5 epqJE P$ƐϠ^Gw IE* %wmPm ,L m?$@ j1Tz@`^@.n3"TI^Nb` @ ܙ* @& 7{K=`zgF\Ë" Af ҠQ*I`'@P 7a0 Ebh=<`C۶ F a?qֶĖ1i w 0  BrݫaI_I4G G*`+@B0 1w@u }uI4EpM9^I0>'*oI r"A [cUą譥׳ z8 o!bQ'5@tK%O6|HkȀ@CH#AeiUPƟo t% Dž<Q O(k V駯sCP|cAp0^xq@+8a3xIFW"@p\pJV XsU*D+jb(jra#v"'#HƟ]g/(#u^`n ;֡ga[mY8ᠪrp9&XL"X*Va'-G(]٥]IƁg0f(|!C'x ̓D8VAvQe6#vƟ[ !#BaQ' \H6v!cZaDbD}&V`v^p{a3=T =&$'RV#W>6V@8d,U-6Jp)|2#"O:FC .x챏um*9 .RМ&`D&+a U ZX`V h7D ^KX@"g$PXrXk(p ` |T# (JD;|#}<1B +0. Q5@ N 94!E= G)vb<1 ,) *U 0XH#p4ւl8)#EXc RbV@_] t|#haNV dP+B."ncCXi"[@V` pvY{&q5PhH~4pȵAt7@ۥJ'pLaK20ɘH(`} d```܋ ,ۅIу <ܵ DL%=naP[`f ,p]DGANѿ =@L JGl/X T"(9 &@ 6(,HF2pyЛ "ih4u R|R2FC4jtPYfuF:q[=챎l`:W4`j"eN+ B,ȑd"G`R(sR[=v1냔`4۬kK\0+:\,\4nj 3A8b(*( PA ̍rbH3[n[i+5THl+EX@pY\:V#W 633v 祪/aq܃^08.^Y8\ T Ers\ W 9 ) pSHo-$ HG"zkw|=Bd$5.$H!Chj/hQV ǘ0ph@6?n!ޅF•~N$رH t!!rXnьdB>1P Lb(t5-;|- H`$4UfUh ]u<0`@PBȀu+"P~&XOx h`Y 6븝# i`Z!Hu`JZ`|('@2 9 Vi8I ){j!& (ȉ(9|؅2?|ؙJiȅW+Ѕ/c$1؎@&Pc&pq387oi8Jhʴ`[`x)P ǹx0*2i/dHC,m`  j*"I&9aH=ÈPxCD@鄛 `/0IXPdh"H8,!?'9(P'` 8{'8'Utl< H4)(~/`QJpy乎9 Ѕ|AY*U@g`D  {8A!()i1 v#Dx:` ɇoYNP@ 0A`ȸh?ywBU@X(?:/5Cȸx6r P[rp=qc`[?H0i؅.yjr +؂ H3xW9S=HSXj(eJGHGJ =08d x kz/c#F80X[ahxS3 T bH/] xHYi,@LB0uP8% 4@5hGPp$֐.a@ЃG A'H p t(Lcȃ$V@{؅pXM+MJiىU8'xXX5SzB(~ xH`16˻` A LPJ(Љ}0 ]DEX A``402N " 3P8Tk,]R s@mRp X@2 5Cb2;r Xj$X}3U'(Y02d~1@>YX#pGe uƘpE`>ctHP*0*rȄ&8dxQu)ZF&X(|Xh؅?!@7!p(o1AiGXX uHX0NJg}pp9 E&ПPss`h Cpo(<=}5IQDxXA5p`-1@XުCH ȃ| @8`{#] \x? ɸ&J.2ORPXj{'ap?8 A'Q CEhJhpT=0GQ)Tus z)Gx^.(Wp3`_GdxU{<k؅XPj8 -`@5QF茔a@/{XLm`ddYj `Z5sarX+ xpحtUx̲Ɠ~Fru|s\cX(!ߊQXPXkojccj{ã=UP z=:[tG^0*c-o.UЀ0ta脣#o(C0{;>e& (p]xX`ԛjخ^sF#]ȅpi@bЀ: z ,C'jȅX(}Xo :Xthi;{㮴Xu@#TgYi\1ZcheXdped܉IIcȀck;;~1&^;`:@dj@p^mh։H<Hj\~Xup"= SVI\{N( 8HyX،hoЅX@t='{xVg\od`vV Tc\t v(g0c2-sV\S#ȢXݒbj*&c/o,A/ p$i X8[x*]`' >&`]jZAHz* tV{@m腲2n`IV AϞs0eIа^3kPPA_^\Tl(e Pq_̧\iqŅWT0̥ɳIV z koЁI h YG-/`1C$ޕaIpȘ RLOр-~A !bWz=",yk f&*P Q^ @"x`= W2rsQ"?r{~h#< m@=GrsX nwY*`>- =zi'OrT QcHl]W r@YUI/txư.rV"*;H QEqRwI? @c狯2ؿ }PDafP4 {h+wI`:Q  i0Q .`st! dž*0f "!]!:Pdj'xN!C@.ߐ$WJ' `XhPC@J=ȁp^s+s( }A_vI/{zq/]u@G`/Y3Oꄨ8'ӝiÛ % Ibg{"%X݅LOv$kH%88] e 2qMpR_ )和 GlSI8cNiHpI R$hh'RiX82/zTQf*QyP,w.PyqwŊbDJ)cUL;!1!UyhF61sD4&UƴvC%M ҘejByQZKS<ի2](HSЮN4=~'d:@FݪNj۩Aն}!4;kv3WH lzR>6+e{WyVL1 mMիhK;ҪͳWe+j5{*iU;[ %n&[a`{+ʶ; NA R8hwf13eh;z nK^zU({{\/| T`| 9!QbaP\PoyӻM«agK~51Yb*F?g< D-8 q 1q###9֡|d#JC?G, ]>a fp+\ H5?_ů?񎟾AhC$(=YCTi@,hiD'>X_z`` 6_C@@%#X@@^@%IMY\C 2a$tBz&?h@(@#B8, X?TC"B.9SG ?L<6ab >@FHr?XA FA\@F!@p@ D@|H HAF !H9@`9` hQ(@,C2@=C(@|=(w (C+l.a6rc7z7c85"D@: @$jb9.p/\ / /`C \@ p+l..8 <-@/4LH00?8(3C:NH#J8?ˁVDNdOO9:·(XA< B%L/ ?VJAX@ dQ?FbAdPJ_<AM.B&bkjzӓxD>.\)diBt)C/A X@qk ûdl@`>$$6TH?HC[8<$dDl0+ lOh%\iC+D @BZ ܀j@&܀h_C[l'̃=<@$@BA$=.l`>C,< C>7RFlA|9#Abm*2T6E]B** ȂU*+j~鼮j@Fx)>jf%6.b904,2=C:;`?|@B>:>L?87PGX4=` >:{oBbX^pA%|p@ܠh#A%p,XȂm o^N4C8 tB597T$ TB891<5C5l07lC57x\p< D5&8D llJF@,b?ۭ LT@\ɾ)?,?xqm,`qr c4ШA*2MQl Xr^u? `=AԍYkfs4BB%g>[Y*c,3?EH<2P9lC?xC8-7t@? =C8<7؃`vfwvu[wOfC: @9t;xk:a wGH0] @8CФŷ!+0@$=)# lAoW*Su3xB⬎ M  ++$ ĀP4C+8B1lx1? {㰯:c@ 9C&qbC([p1C24(# ;S;/)=.B.+8BoFs]c߁3۵G4@?(p9HC2xuD|C?'HC3WSCv XX//? -_L2H®+{,amL2)<$?C?7 9>܃= WzK+=n@ к p@X„ [/;=h @:Bɟ<ʣz Fhz+(>PT!a&d+)h@"C>I:c~cVX@ς| ;CDm܀V›GsG,7C.P$,xl EQo(H54*\C2E:CxsG* m @+ΎB·oG9 rG*°?G,E(| {xUq>te4fL3iִygN;yhPC5ziRK6ujTSXq .\DdJxcJ.@0˕=pVT8zG86|8& G? nkK׷uu@:|xRƮ xpÉ7~yrH_k/p qCt\dbkࢲbӯqT񏞿I;N^!bt9b'aA2I0^:p'Ac !!DM<U\0 +nL" A "]yE a=%cJ 5ahB(fxM!#`V ܁4.YV8 .C@B =љ\a @Nx ,A0 V-)8+^yp 6M֙6P&F@?/#Au݀Xt}"~AX}hZAT@*>Np%TkRUJí.g꒷\V^3׋P ހ >&]T98":^1É I6ߟ:E˘8I+RJ^BX?uޙ}>8ܠeI^`ٷ}% j묵&QwuZݡy Kh>FH;皪6o8¨\3|pἋRL 0`p$o$yah΁ T]}g6=j 8VT8^a $ Pk]&<ܴNzYe`yJ=Ѕ% <^) Z>x|\ G?NThFA3`R8<T |y=8d0g@B@9\ \B%Yx5(qh* Dq n: H {#H9 &T ؇7Qڪ # d98 M@rA0H!Eh%FG> }0`Yf.,V8@|t=>#P'$dh̑ 4 c؇5P2]E?Bq@xrX5, A ,$YNsBZQPEɟ+1J ?3Rvw:\Q8x `0vlH:pšO6a#TA G8#s9mCªRG,wA^G(@@!bcxICnD:Q 2 ЅH7ӄG`",05B;"WS=_CTHT|L0$"1 (xA,PJTcaЉ$A@"W&$G?Ar,#kX>[hJ} vݴTQ0jtE-h 3T/T?p zcܠ1 ` j#@6!it9aGkp"aoqE%X=ey*;# "@0ZkMӅ4 `  j\ 0@[D`X! iV3B|&f8M &B}0*G>@1ժ[A\F(X>Qc2||ǖ_`a0"C8 t@ t> u8)5|]^LW:(j- 8bиR.J,[my{@yx]WP/'N`r<$щt"A`? |8<2 P |?Q1׽MbGT5C_r:8B@,%A4>#$$X dVQȂſ,DamC$2AoX;8Da jրD>pT $iA&e3z!vO'@oRiSp >G " HobT &b/o4PpH1* @ @8s0'sPsl@@@$c3RG3Gl (P 960&V`ZU\ef`Uhb>P[Μ&fj6CjVRV1  hk%0pn cj"q& Ij21_%)CQ9,>(''\qcQϩ0>PqjpXq'`jQ &qK0Q8$QLmq'hh]#bbt/H? <01.1jQqDHLF Gj ڊ cT)"@/r K//P>bNȡ!?$!$14EArf26A r-cS6R - "4K/WEr/Ю/Кm\09"B ax2ס(|> v@"! (tP ֡ !DD`+g?sZ,*c[l@h@L@^HT)ԣdT\A "/¾ Gt~\ \a A@XN*!2a`6֡Ԩ1WEs ,TJ͚.\J/z/@ʴ...PHtM'O!  @`!42! N t4!<[ JCUTS" -30EƋz L~H/v h0LDi*! Pt~zA4`)r@x!r.1y΁1(`{tTU^C\ fD7g\UT/m-܉Tnu+L,RAx,TD'aActc : (Hz(!Ё H\͵ FcYh88N`=ABU+hċ JӴŇD,bJy n#v* 3 '6+k B D: Xvv"E `[o( ߂d4@$<43N^/}(D,*t9 ^U73n0vܢe`&v^`ҡ$X 4@[fH\!!` Ёf.y* l WW}sXy9BĢ/4iSF`Vrh7[-lA P+.U~xaР``@=a  &H@\`0B#P>a$z!΁%pxgN@v O.< `"j "A+>Ga7/ 딢c6+:ut @ArAaNV@@oaJ3!RX _`aaBaՑ#YwDTbC6 JfxG ނkR;^5J,ċG1^!AL[@=Ar_B lHcX$mB5$D@ FÄ Dƙ[: WL fD nWEQ- vY @G}#@ ̀|h@% >aʠ l< aB@`s  n ttt]گSt"!V@I[IJ.R)Z`Q`~{z!O<#wk7x@D _B@@څ7FͮJNq&qFP@⣋;hUBT`07'[^s(;hgȤ_XyѼ[}oQhb軾s/(&L\ ) @l j `0 pi_ A”w^ $΢ЊGޛ$`a `A :ȁBa aJgz ^{Ԋ}@SN|,*(* k~h;.@& YGtR+F΢}Nc!ܪo:Ae:1owVO0Ll u Lze^q9`/T@p˅pyUĿ#<`ZƋ'sɳϟ@ JѢ0XiJ(a#oOR(eFBғJU?2!p8Jݻx˷߿ LÈ+^X͹x1IJB*AOnxvtJ$padI'W!kIo6͛`tڼdetB*9a}[cHߎ ;Ns=+[r{_Ͼ˟OݏYttc9`6Xp?G i?@ .fpNfdB 8̀ /  8Xn!O85س';4>ȱ@K;xr< q!eXVdlIk&bh*f@>*D#<gFC #b0 [Ĭ $Sr >4рC  8@5H (N>ǁX T@8`A'<9(,l&(D *\qe[Q KjtD\E\< 5.b5Hpx *d":(`=SF3+: rQ\FrXIuqB֌7G.J*XPgm1VT@9/Ř@ F !8B 4A뙻24<ʈE <X@e4#:c*Gh-3( ;1?S“gY=TSF/oBܰG%@E%p\fpD!3 I "9yJPwk` G30r(N (8P4i H 0d$cSt e81x<0z` ׂ2ȁ m,#(>q^p4@5.lA (xP l 6Xlp0` `csS eIZtmPp6-as, ^f.@6D_n^p`I?D28YInvo hBPԟ5(?ʢ]&4`K HGJ aHJWҖ0 EZt16 PJTIqЇRԦ:PjTau(+Vwpk\:׺Uok^W~60ijTO 6d'Kٻf7vV}G9Yr6p;Ln֯1lnTP f`@S N0Fq%m{{ ЍtNJL xh9[VNYC]׺Wd 4a؂l`ؓ4a `\d.'8BCD!Ͱ7l2 Z5[}AfA haĥf8í$.je`ӒUhv[D|ٻ) O.#+Oه.XK> 8hNX] ;/4G7ؐwYƀqnk;f&%8~IP>qID/X*!28(vvv<X>фp&_/1@#A82B9>n /dZG=b `^ r#d%nD%4XtdB 8E 9@.q1l`<?v l84H'I8QXhx;>oE/0h@#w#.v1/(  Ax<.d Ѝ ٬`*pkidO @juz|pPi`W&xqYJĐJ0P  w^b'c  YyJ`ݐl&fy0pw U @`j`a{`#`' [0` Qi ` *MPiX85A-7Vb'c *&P x `W WXVE:@oTEa:9wlX@3@x؍G Za2 b'7b#&΀Jblrͦ P͆pyP4 [6a ["F{ xR4x>P%"I Gp6yl` apq<`hr6^P2 x0Zr=`VbP l\A<IÐ@#0; cXPB  yD |ܐ ij8٘vX 2`0^q7gݰ p}lń @^0TUYsiPI!0*깞 S9pG ,h `  ` S PpyZxi Z'[ Of TP@ {p|ܠ `@ @I>p ;|` <25ɞHuY0Pb^%p   JPP`gc$ EXZ` @P db9dJ [ *X0 O 6p(}Z>$8fh˧ 0Ps p2f@ 㠪o@ o*g0T @xhJP``_p3`X'XWz?@@ T6@[P1JPp a`9p*R^b$v^ E5xUSV ][2B`$pIkH"KkhXb?060t%#{fA(Pz8kS {^]k^xSYYk@̊+tv*U<5[t\۵TF ;d[f{gOYhKPU ]\Ewa|۷lVF)^0G`;[^Ies@{.0ҕBX~;kR%08ۺ+8!9t`+yjQQ[U[MgګG)6{L#QQ(Pr#7[88"07."kF-p3k\F,6ai_P*࣮9T%rMp\5 p;4\,R y6N0E8:D(D,ӕ@ ߀ p PU ` @ {B P P[xƲ DN |'(qRNĐ/_ bQ00 N 0|@# اSܧ8 _N DG (z|˸L8@FV{R1v7!#I"`f9$tp @dyP * w , w<$pc "i˹\8Qk / Q5+ f/q?LBqf`f "A>(uZzD %0p@ ELc< թ2KIqy ,zZՅqÑ!IJ'Ǽȝ0 !sȸ& "V im"<Ӧp _ k ՙ;sC p$\}ڨ?8pVp1`ڒF0pf \13V@ a Qk"r"AV`%p  @@0@J#@P p p}yP-/p \0 l&`> :3ma c&p2 /pp"Ci*1p Ò3>^m}g(P& @>pr4 &P@ T fp 5. z,Gpf1UІǰ f ,~Bq{-c{p @1Q fB^ }pR-@AgJ! @`*# c!@ߣD!aоNa& 3`:r '}3Q8@Xnq!&&p&NOy @6p) [< H P'J_"tJBڢݼR0j`:@s ^APP.I"6w P_@  @? P_@p yS1Piʠ[`=7׎`>@۞r r_>F R&ak"& ۾.u44\P3WìIQ w`Sɻpt0 ``op7M(j Gpl& -_L9?Lj&p 9bupTڃ " D 7Z1S>Q 02QD-^ĘQF=~RH%MDRJ-]SL4_@ʞJ9)z:2cf'bX1ZiUR.CqdO*pPBGf`€ZhҥMFZj֭]> <8ǁ7n;N7Ln_# KJX>~۶$hc3G<HƊlh :`)$.0A0B 'B /Jb{A6 1TX_`+W~ÁUn0H`AHV>gԓH=*!2KK/3L1$3ADDÛ\a^xq b!L/),rKA4RI'RKC~"pRG':K$KeUW_5VYkr1 ;`@H3g4ՈXcE6YeNgMVgGR]  Y]u#DtE]/Qoe]wVT-& Xk!Z'`[x[F`#V$ k`HHx`7c_ Է| 5#zSeMy7B|E^?f[x-v)# 5 PhIhDGĠ"9l&ld :qy%ZvY=I uOᢂ V6$vpt  0a~aǟiB= qㄌ gu_O&]ᥒ.01 "Cuw! ]Lي vR vǞ~x#Ġ&8jW8G!d+H`9A>}` .Q#PZtGtI#LXяL@s:DcոD0: THa0y=+Jp 0, C,ETDX@摏uPH<`с$qdG>AD]ҘDf25 F+^AI3\{E*Ȧ+"0?D/pG `veK>">ILQBG5_cpuA<\A"1| P2E:R.H0n';+x@ bxB33{ZDRn=tVB <7nяd, HR܃D?p#G@Z̒ծw%3 T@ CerxA1\aޘy"_a :{0 @&'2PFJ/xUuCSWq-c=֑ʼn!(ոEN) X|x\Z:@r9#W:sDftOd`QJTj aC@Wu`A(L cXW8hhp5.*P= :@|_$ngF3NjQv$DLXvAxrLE-^H "5C ےCd_AX0? A~ C,cX(qd`Pr+] !iuk^{g Lsiʔm\@,:{MB!83( Cm` ؇=(OF@ D*l{!\G?|k7ᦹ $x; V ]=@AG?5^^1'mSyTh$hQm2@pmj 誀1ax `@F`rRNC>v-hS9_a9_%u^`C;-ЁX܁0eV3=JHϯ})O:j+Oq2D..&^* ܑ39c:xҢGi(-`y I]|T'{UCr>5c-Kݱʮِs0KMɦH:T1d"Q-UAF:+{)z;1ct YI(GEց%XHB$W])QDB:*\țHϪ OR5:WRpԢd̓Y`Y] u؅ x(amdjpʂEڤeϽٍzAMtkB9GHٔ/"2$  Ѐ8$;s 1:X]m$C:ppȃ87NU5TT L+ tb#լ1Vl9C/![[$.%P-|0S peЁOȁNuXue \9zƺ؍Z^,c9}M/ޘ#Hs $,h МpXd dP}HCh f`~`PQR}`}Z̝Ze,̴`h=A$3`ԗr-8:HCHQ`A8&0,X(;`/'I>OIЁV:ڂ4Vu\:*KB[i ĝ8k43l&TՀ$f< (m{UyDDzH8:08cށCYXe1+ '@^m^؂xIj@S 8a\ȁ`o`h&\PzG Y&Έm倈Fx x x/jYl.8KxDYZȇ~ 8(xx?*X-00pv;ZV꥞X@$<H0)`TAMY @jT46g8FgFua^j91Ȓ'Sl2̚7s~ߊ.<0RP<"Tl(zRN<9D]3b-4@?|!,Wm%ʷmӯo>okW+]pS%pjpq GP!n+! .V@C\ ܀JY-s!tBO?AAJ< |$QJ9%UZy%A0lL`.:! /{9E?1\.2r8R LdBRaٟX'@=<[ 0 `?@Q *I>鰐 eB AN?A++Qg1,eMdRdVATmEJ4NA,/P]G$GV'P| =N3[cZ@<C=4 c1.)9Pc 8sF]9.!<2%\W8hE1P$i-(JV"+!d2<"JBΨœ8f 6p01e=\|~pP~QcG 'XG2$&3`!r+/ lR3Gzzr$4&T%K)YҲd[<( m)Sm1fZG|1&4)ivB86 |@9қuR(/NP_蠇?r Q,fI@@{@+>j,Pum S P _4ׂD = %(44;@!";tpW⛍6 HHc-TZ .+L8bJO&Ƃ47dM ,݁oGsu"D"۰5LD3 {_F|'-d9[0hB@=NŲJ 0Fk`Z~==E˰>~>?WxYZ 6Q˅$ 6{D%X=0%v:=OI  ^TP~+ =bsJo~tX7Q (h?:ғ)mdCēyG Ԏ BT0 V \ќX`(`[nV{r0oc?3Ds Rs`AP '\/ vG Oq0SsE΁Nl4 c *kCq|AL$3_콆~AfH=^4>TP+ u!z}9aa.@ nP#=ԁ?4Vc m5VC?h5f )  DGU`}h]ؑ )Rz@H#W) 4lCxE@#H- #HV_Q'XT!8(@Vؕ?h;:C]YP,"5nžB(R*X,'XA @| B1nH8@ۍ*.B.x.TH$587v4 -x#<,t-$5P> -A2-F@8]"WT6Y@lSKlR `S ,d%"6Lʓ ,-C?p_Z|@L$ d$ 4@lAFT ShCJRo@@' @`[1 ?LCj1U[|M%_e)B`e  )i854BC 4,Ҝdndg~%H|}7cHHz9G"hƦlh~gȉGbyYRGlp V IUB&T!$$pu^'Ȥ Kv`fClk>l'|Hz^ v~J܀,ND &yF@x |@A|DlpD~JӠB`JPaVeB*CC ?p -p?|C ( @:D? @z~)4ʂ,]ha  隞P-hC dd <=4,4i,:(242B.:7B5C>AT'v^Pڙ l'@D 8kho@A?* @ Ѐ"IUZ#7xB@B:B(ĥN&>0< `<̃$@Њ'T~*+f|FYV @ LVDI5ZYE@p#8AqXVZ@$@sdX% =$C<hC>x3C>P +˶,X+:|ijâbSF @`+4`xc< <@l ICtڮE蒟 eL.mGa Fld@0fI@mt ½M=;+WtB=9~-!)O (, Dm*i:XF&-fZz PA,>C?A2'A8. % q#\@CJʡQd2F*ͷ 6'0ѥfZn=pn>< foB?З/M2d ௜SB!žA@C@0oΥ1<08l?P`:r?1:RlKHLiDn iX@ $Y^#ŒV0WdOh5h)74IB1"PtֲFA-,MBkEmK'ʜP`xGA.ΩA 4@B ${P &r"s jGփx5#T LXAL m .C8̃5?H b*xC8C>C8C+<@C:HC2N>$rMs#lb?t?4,`n4@ Ő:4D? 0 ZI ?DZN罂\ JNWjC[$ 8*?B]t'\l!LB,@@@MB5egT1pe@?6`\ $Sf(f5 k5!H@mCƀB nW6qlo$w\ XX9E$`K"sޘdR hOtJQUq57ˠBR7^zu& 4A<]0t&o(Aت $xbD+,Q]VxgK#)E8*Q,9煇7yo8fKt2 FE"E.XRZё]@ yWv/gkDZ@|c0 x5C5(V+KsTE#U5Y1-S@/\.l-8 +6?XLL܁:8Ap,q\0e,!=(4C?4ڿґi|k=XĽ%=~FHbH8|' ЀH t901l,ЀIC08 @8ǿ~G}V4@)^#…W8/0>؃8p`9dI'QTeK/aŃpx9rfO{VOZ3IP_u6h]SB3fW_;lYgѦUm[oƕ;n/=p+VBe%A$^PUJW!.qTI1=Zx Xq`/3 bYu3kéH;qZ6d``̞Phmױg׾{w?^ F#lBўT{P` .^qĕW.cWx1!@j >V#¶`iZ- 48`@Y`H'|2D0m8 dyfp#LR%l'2=n; >G 0K/8b\TAA’ @N2gaX-j#Q(Ul*Y' V{atd|ؠ;I-SQMUU2xJxك.]wAL^\pQ36࣑v438*dUI* P@f  ]& za ßd=tx ~n)T84څn!IB . .VG ."ׄD "80YjEA tՆ~ 830 [? $`[p*0.t#ϰl2D6KC '2$Jm ]>iHl^JC%O0B @@1e+Le.1SF N"yf51reZlYHt`XFL(qi\8MyΓMґ$7π^s|I89$@$IB vƠE10m4̨wYJ&gDOQ-FY 0ċKRv!޹QTzE8@(M]nЬ0}&IԔDJ x`LAUx M6DЀ_)V =3HT\ iU(YXXeCQL7[C'`2la+ X`L6 AТf\$pËT`< \$I.6-JPy4 n'=N_ 1Ow!$xvtHh5P! )N>HXb6w!iJ% TG @C`0I o#54 .tCH9A"ljX2 d - eiS\Hv( @AdxX*gf/38 H8l:@X< CG pa &o  (eQԬ?>+I$B*pGP3WXV :Gt6 B  (&9 HzIT@ 8 6 r%><L#dtp7@rZ: L @} TP­R1\1b1(KgK>@O֎©(Pg([Pw過sLMtsp &G\:!>!R!no# 6ZlB Di>0Qa'A `*M~';a4)͆ L *R@b* tmDH^A׊3.rt|A 2T[n@"<-u!1uJd&'j0A` ,31=zA6>s0+Us5[`@| n@6o 76hn d* y9sr`&`ƫxr@s;s.s;u`@$Ah"5Y=Ӣ JQZZfl$P@T`SPp@Q V# V`L62Ϥ$`/f<3DEŠ( 'EDE󉠾 EB r`jMCS*GG4HԞB)ӒpPVJ,Di*$ >! 0+W a 25%`ZHr_辴@ b-Nf%\y4DIe$ ^!">#iPeBm9q )LN%*r֡Ƌ¡gY6Gȡ* PT/jv;nJc0L wX/(z(V^z6Ζ-9vv*rV% ! P` Tss"ӎ0|AZt! Do|4yTykZ6N - ,` !ha6~h M~q80"tlkaE_ bPI G0 (b@ ,$*䄪&J'6a>` *!na h >u%xfL6hOL$@QA|L`@ v V"X|eq?- 8V+^`aFQ,0aa\u*t>79Ŵ(ִ`//!"P"J֬1kby$މNFATA=a(P Sb܆xbAjxUr T :.h~]AWb&;øщBϢ/"0 d *1l =8@6rɦH_.Z XtC#|)/tc4L/P=$!`[ 2U\taBbV !A=l;yHX`d$C V*/:.),f`Lc$NGZ|!W1=V6lfb`Np!.W#"'4`xg%vnG-,x@)X@A"WK|Qv>a> .H@!E"`ϥ`/ H >~@yn1Cշ;ATaHa0`@0_ &0(0HaHa  zAAF V(ҼחLZEYA& ZfW0R~x3h]Qlu<[W̨ȍn0 ]Dоcb`Jd *}߫PA>IF>1\"$% +A!]LEv9-+ha iԃm[C]BQbx偨Z{cq^*@b{7~jt0a耎1z4NSIC24>~뵾^5AЋ'͹P^D9d>~l=8F+~=!$)!+!a33_Np#:EnT0St[A2_rߡAA?ʡ_I~KiDNJ, 0bb,@ Nn\~Ϝ_ I>H;Nȴ <ċ?<) XLrlNXO>}Hp|` W0&EǞsA F0XP11 /@?5 *N?Ē =OՇb*b.chFN9ٕ 蓣3ݔNvӍ3B6z%L9 9;Pv×|ȥE=4wI 8 O8_hp.xSO:<Je> iNJi}oCL#Kt)=(C#:P@kqbDZ -ij)=  SAGS BCL=x: p0G M>.oo;d-a4-Ȁ%@btӀ\N]l0`&Z\R0  ,hC[Q?(@B.O8:tp$"tO:S& vbMvcA-=h1P 1  +?~ ?x34[f LE6cdA 6]PElX|m(.iz<@>o|O|c(1Jd)\<89 ׎3l7ߕaK-ܶv( v2@G?< g~Wϔt,A!BH0(䅊3H&P y \=4FIH>lQ DZzA Jl '& M LT @ | 9(!:0R*vmm0n;ZH: M)L+w0 бCؕ @[X%j tL_?H9aPhLLcըFA NC<{ _{ @̆8E P(PB&]5`dS ֐đWi)6Vd@8EP VDߠ=5|C & CЦ`>Rlx$ .X h@.j #Ll (KY${>䱘$<Bc%e1Ɏ:ш\/N"M TO+X3|HDD`$ ͦCaQS/it1Fs1UNH!Dzu#9O9kLЋ )kd6\laznoty[&uv}R;2@gOu e]cG]\EPw=Zެt;җx < vPXH=~||$` l!$a,o_sEA\"@P==;D/ KwҕKTzәnu\wӭ@Ǐ[L}t}| ~/+~oK~򔯼/k~?Ћ~/Oԫ~o_~o~ /+o4x#t Сԇl; j4ۿ'<xJHΏ!q>O g ,}pw~i0 |a p~(#Xcp _vp 4'2XwE ۧ GEhD'rp@wwp 0}j }b0 p :X\eX5dXDxz kxjxGhwx?d bv` d` 0Gw  ` `( [ Gz PV~pv@ xxhh6g "  p g ÐGv @A P?APQP}rP P`ه( Kj hX}t 0 A@ h` ci`]E P}v <83I- p {@ 0j0zH _ c Xe 0@`g ! d b@'( _@dY}z c0 2Vy!wP တr~ !}7 }_ 0 /HЈ' (gt@-I1@ "H tp_@Xpi]`b` `q `~)~iIz(!p =9wDa(R ͙ ) _ K) `ٓ}g ֐ajq )g@ w(Q9r@'_p zj pD\0}jGZgԉМv z"zP 2F `/@ t Ӓc@ p-Ј?zG-! Hʧ}i R 1 M` y'` %a(z 0aj0$ ܰt@ #) XXE꧳J$0g0 Yq@Yp v @I j𑌉8~%Z@ X?ؕ 0 FY Y2ׄZveh2抲~M}z( Khr@ Ӓ U !()qj5kkazXz=? A+CK&~~~I[M kp'TY+d)hဵZK=֠q }Epe =^$ q* .˸Ӱڸ;18p "]䐐KJՀa; @P @X˻G:p ]з詋@ ApK頸` 8"Ђp᫾3 Pv 4{i0g}d0t!,!,W | F)&@AtO=Ր9#HC=ȅ4q@;$yjPJ X"O:(CG4 v=P\ G'c#!tF+X=sLb!г-a'G_ctc4$"GgB1_#!3MV(Îг-h?xғK:wdJ83x Qjxcnj&rcBN(fprKdHQ?֠#;J=xFcϞ4T" -ɱ^2tL:ܣi)R:txxVe& 5Z%ErbO8z-= D=B(w2U):ޣ9&0bCy$E'0"ɡ-'8aېXW(iā?8rE+>;^"s.>'̢gp=X ;d&$gjBAɩ-b0mъ?ހPtc6Ezrޣ ܫr7ƪ$#,||cO$9x2CgB&-Bf?w.[bbc̲9wa`WFd?O,x*O Q ;"!$#)F &D&r1?\eld tF.kۖz7Aib CBf,di@/`TԀ ^: 0 \1o! cp; I1Hy Bn v~ł>  Vp iHŃ\P6ġ8ek7$1 TCj1'E8#E;6QV W!6ɏ aEB2f"z]VH!"1+RI>da7"TX<&.'?*mGH ڈPdr df_}Ax̂!4P-z١rȚ6pjC ə!XZ*|f A7:J-gbTJGRy\$p0Gq2d4E*dSj@f14w@k5ogG8QѨif3$oʘF:СEOb%[2xOWY }?*VG+B31phcjŅ'h9Q*x¤p8ac;kCƄob 7niL3#d VL‰l.qpP"*bi aEf*(&夊Z=R0>!H[ S2H9A xAq cK $™ EZJ!E5%ǕJ@ IV 1SjD qgbzVd& N1/!EDi<8Nɑ m CfX C(rAHӟ\D-"jDb.Hy75Qr4zk8!;Dx)90;#=ʸ"cH$ "F8J&bڣWF4 Y pc2 7v1 pB&M⇨Ƹ8!@]i(`7֌zc!1$o ,bC6ai(b8\d >۬0!jEKG2 +ZJE4|>0ד;AO'?k4I]Z?! K7!a2Mr2yhrڒ<0QcE9`O;bj2FGاa-,f $zR0v {!R˱'W Mzpc2u Dz c6 #&q?KVJ3 0 r;x28z@0'7d0 7q0 hCf$Ar3V'0r/sw@ 2S/id`F\f`Pt<q 2#q 3 ҧd%b6YMEgMr~?kЂVS ńqt _ =V&~gfv#EV/C#?; ?&S2`2pk[ g6,<_iP S c  U ! +@ H i)[gVL+ 4BZsd]zEHqy |x0 ]}P3VVMK^*PGsG s@'X z<Fc}-Ac aDr( i2ux 09Tp0p 6i 3 p(zP>`2Ax7g@ b#'Ȅ0zU> @ R5 fT<8g!c s?Fx{r)vQ1I$6 1Ǡh Ie3g9q3ʐā% )>vcu8 jUgga~F_+6 p ~ghBqi6?cX$;R0Q! 7' 僅;!LXu.x @ FLW$u @  b5z q #_1 `!<"G0FrsܨqV(|D?s:UU6Wzq;zڏRGu`)PTP&_  EUec70 j3P8 X%_I' .Y%z0 E{'P$x4QSꭔ dP*jq@D]$8+S7[ j0XPekb ' )2|7L4^xyHv rq[rHw֠C0Di٤j w'ߐ*Hz@T 0ʳKI`a+0w#DBwP0E pTh ͠q 7h1Czβ%XAu$)Ӂ 034Z$ k@qpV[ ]gy$QK:8`w@3.f7icEDq0 I*L?J :íELv "#&0^! ]VT @ cwE  R@$ pC=4uP ZaCN) R 0ez {c}NF#`t: R%Dm Ib@+`yQ=F1c %p!q,+1ۂ#p؝߉V  p+zAuvfP aٺQӃwc,RXl!w*@ϼR 5Bggp.d鍲<& ae[j$qLx` b25{es+='Ixo2x Nt\IzKZ)#~!7yBl"xR5n1&|qixd ~7VcPt()2C~QqQvK+wwPub++'p 4csoșlw&cT'j `kƶ=;] Rf r^D\@ +!'8 !1PNls7 -> GPTP 1e3ѫ{%rʏ0"8I lB֖Tw [7@0!v u,3f3+8|'! @#: =#.}0-krF& EUuTֿ8;"y@l"b91HAZ]8dy-:}≗[m n hM,bVy} .cR؊QTpcQNNb:L2 ]uҮPa uc*"Cu)~iGmVmx7@#g Zo|t`UU=G 84ԎyX Ӂ 퀝B`e &!3Q`w&u <:_bʆP ~qP\lE5<7L*P|'$;+=. ^$ %v@f/CU2k5G  nїQnf/S`4b L9_}Fʠ [ >f0͂|f T!Vs~bR$ҡ _E:f# v 2Sb#:ґ-gddE9DBgr RV챈 m"Y C>gT \'iZR#}d-fChQ} ٞ5#tLk vaQGR k%!{$DCXRr 8XBmL;+'ш 1Ɗ θqGPj,PƟ\~e%C 2zfQo[zBY2Gכ-FɐcNǞotAV{Y3bIu;ht<4/HU r/PE~i  /'95(IgIQ7c j衈&袌6裐:"_` N($n Q i:-4JP2p84rq;H, v%gEQmM7VF aQ.>9 jdb8F6tABH:rʜE3![aIafh(KC(q "CPY8$qa{:"f2`|F20/jtб.ŝ,efъY|nH=aTC 4Aa _3! Xlr\d2EB![Tk2yTig`rd ]xQո.t!D(bhD}c$R0Z^bEN'12@Œ\BFc(Mig^'G,] '|cRlhU21fkK! 3٨BqMGc)GcB!#xdU嬊5#v`ntljG%sׅb;yi * |bQ;pB)KB9+IH=;ǩaNHS`o}CJ{F2 TW&2(xEl#_5ND&dQ]V2Kkʅ4&=sN NX $Ltg}F&6o*/.C)P141* HzCJi!RrZ+j(4 d(^hfbo2$R b @YJta",9oDxI>ºƫ̤fy[^):C@0XamR$ /eT9Ԟ4{HD9.=/ VA,_~suR!pؾ:!Zє؅'dė\'y[rѩa2# B S I4?~2:Yb-n6zËdO::3:h7)5J;5RPIY3x?R(PO;Z=XXGL:YjPVX_ۅb C]Y[!Lب](>HAI.R`;c_zkb r?X-fV?K!<kQ+9[0jP[%?A|f`?dV`)=Ajh[X(^cP`A2O{ j8[hAv1X20.CS;`0T(3er L𤞰Efa@DȑFȹ?d5 ]PkCнN O$ė*`Hd =&%X?ePe"„[; YxKBcD̴ʚ,Y.H\j\(RR8i._ĄSՑJVJR 40,CSlaDF%p pi> Yj9ZD!LY90Ad)q Sx95{?KuyX={G6rE`Eű[|'id]pAI8xdGT!4` 0\ yX5C @F;ؔ sElM=H(j+(3\&i ;b";HY ͪ'4  H,AdGƧ Of̒êa}p $j4tϛA휖41C M($EP03d4A MO2@=1 U !%4$P{˨'ˍЊE"P2TP;HTLEJE#BуEЃ; (e E쏞0O e 4EˤR&rQ#φ 0jH +LϦ8Я R i)Ǭ͟1M2:`H1RDN@MR 4POq!9I4pUЮ!)%ML/݌47lP/q geVлM$RלVfY@8:M+y h@. WۤsEW@uM5Hn`m-Ic4A6lsB0=HMsni.T,axo;\Z 9VH2Qc9F<"º[S uЂƐi ?֞΁},j@aB ԡCI(!vo}%62@p,zԡeٍ(Tsh LÏ: A āNxoe{Pe7Yi|t$Q%ᗿice?֘cCSb>Z6g u|g~x'z!z'fsNL .^ƨv 9i°hxjɩ"M71A|)蠐@C:᱆ mjmbۨV+&KnӞJ @9dƮDO['mK.ޖ`&[B ) 9X6<,`.q:4vjrrq bQ< J|'.XB ?00 ;Ms4T{r+ut=z/A ANћJ=s|*5d7|u6PϪ^px/kuV]w a9;(;:xN{/,{⍣Yx8mAk#Atc}tݤţG9x o >~*^2_ӸXاA4 }duZ҇0do֝x7]pO,' F' eFȸQ0f:a RzziNn7=wdd_, JP@PC<@˸_`f02p8 0X0G|ܣLqX0@FfcsLz@>0x!Ȑ:|%I˨ a.]s2 PcvЀX pv!/8 C3Q|@CadH IA)xrtFJ`I8 ~<`& {yݪ F%Tdt$bTʰqc:AJ#ra [PߛLa@Mfq3@wvtD( 800HĈ>1؂It4'iMBo{ yiRYH.oB ;@G?aK7lF?t2;p &!o %Szppc7 G$@ Fc0!u~5dp@  L ` uSv W~ x|` : }WPj'# @&Pu'@'P (ְcx@ #e0` 78WE 0 H j@PuP/v #0`6H+`pPp v(@` p 9i;0 ` G 5Xh` d}V'6(FPfi@ *z@Ii`pQvbp @Às7 8R @ hv `p`5(~ޠ O )w0 kVp'Po!3Np5H jh@D jH@pL X{0_}7kɗ0 &'g ](d@ǒp pGPuS&w@[Hq HTgyB b&'0P r)@ P=GpC#wLpL@[Php 0]nX 9kN~[ ~ә@'IL `d3@ްII@:(iO0 ,a/PaPY1@NGF/0N pC0F:/:k %E [ 9P_`N(S; V Bi09u TP~;@ ami < s; +[&cGz [RB9 z0[{fK  J` ^^p 6 ^ J` {^=P @ & `1^ Jhyp H@% F@ S@ w`swF6;+ :0, "FR*EKjg:%\jFbQ } q}" `Ji S棡@C(`<`yP Ipb`PH x%ŭ`Gp|zz(Cq  @i1v}( ' $;>(  @\ p@@ ˂K00PЫu0 N_ɂ xsʱF@ 0 . V;aPQ(>hX<@\\V cPC`(2 (!pppp0Vp @CBE@&r` 0P!p @B @  'Ё ` C(- %@}3 B=@Uh> i$`t `0 b 0 M`;P4b@60K Ea 肾 cN@_h Cc0App P ˪ ð @# P` = ,X8跇bjඒ I@伇 &n ` P 4xꒁBw=Rr >/': Pupt0ɠ" y>d L4Rq( p.b;R `JKƠ MJa n+;:0 Y'кivčQe}z# a;'` ` @`_%vÀ `p;T Pf9RdU]'66j s`@ 0$P` !UPeMP 0Y0Ю czFw P* հ  DPa 6a˲c +rкGoNjU/&#("طs1Ç/JPgqtА\ŋr5 @?iD\Ǟ-6pAL&ڐ'&QER1ğaLXG׾ {FY*ńQa7d@qAUPȣOT0"}sz9*IˠtːX.ʼn& j<`b3ԊUZq0 8 "9[\ =A,0=Ţ$`@iqO`B,8_zՌGG:rgH 1N1 !X `e2 (hti <ԐgFX *0IPoIp/M -(x.xX;< tJ A*" +$B/ @XihkH2ǜꄐH ![dTa41ZA]jGh$a {c,t!{pD| Uq!=I?\+ EJs"دd,%1 X?XGgqi||!`ᾡ); NoD9 ;`:Hc$Րq(%pF4p0w# !y@ PvC()/@k `S2Ѳ`8! J O IYTcB5ችѳɃl#N9 ,t`!@m8#XX 8Fn*!Mp1cD0?Q G<`h N0m A8 P?ma\Rj= O_摌!`?@.G ,4 MhcAf`-43p0N=Q} >c@`@ ;`G(\@N-~ kܡ(b $\3R4A6 b h}zP2z #`ϿU1ȏ@(R G@boP$9 #?9hXS$c=F )x H)X@&C%ֲ `xn3I &r؅C  X(8n[1RE X q*[2Q!s+H!@8ꀁ 4 8XI 0A ><9 PY&Q 2ЬXha{+ P Y @ PoXf;ɝrJ 耯|(zG`EdHu8XX2kF@YKȀ Ȃn8P%psw;gHzq0vhzFc~PwMwSxP<Ё^X~ h -HQ/@cG=lhߪ5 S201i؂AЅc. cр.Hy Pm-Hd Zr!AHGsHp[xV`+ɥ8#` qv 3:X{hBr@dkрA< G23y Ӏ;VԀẆ:[J` PڸہcR55@ChL P.zй`:9`eYhx5-OHi{A!BNp]&V*p {@{h^ЃhqrxS`Eg`MSn(}r g0 wu8XbrtM wP F[, *chV8&# '8ca5pQ I V!D`(XHڡF \؅^ЅAheQc=@H{rp!*V7sp<ɪtfၝq{%ق.,|0xDc4ئ?/l?C%;1O,I7[x N3T84p#?lQBPO3Wl  -X[&$8q>J3B_o1~! ͅĈҦoh FN ITCq|a? 0fC:[qACJ)(@%o3 iQ8P$ N P_6fz HpH;JE 4ڨ *:B-ĭ'0I$ J1  ɐp o ą6 Y4PFܒcIggzEsr PCH/p/% 8X[C:K-IuɎ$@CQA?$B!Ak! ^q p[#bة#|,IDݴS۠ 1_x5GJ.0 sO:Ohdu 7jˬ:x0p@t.T JOAlʄʺ$ hPC [n T8ouwo8mC?-#>ݜb Sآ)?T=oK7.[c()ǿT L*!: ]bi`p3t o~*KP㪋yE$ȵ{۴ M(:ڄVW6~1pfh Lh<[ZY\M. 0S~N܆w}kUGAa&Ħf+Vg0mfZe#> 3N@A$BB? ̀CBV#=$<;ZE#@ZFndvd@~$H! $"JnI$ƝKcIKJ$E?ƽPڈPdQ&HPR.S>mpS6e3J$QfeV>%U^eWBT%P~X"H T%Y[e[%R\֥\[^eN%Xe\r%E@%`]?QYC \˘c%@c"@g&jg>P0dmfja0@ T#o&3&pigNAaErgN&cPB'se_NSSJ]&jb'j2?$uڡe %DS^? hx'~~''h&?$.(6>(FN(V^(f> \}n(([((ƨ(g(樎(())&.)6>)FN)V^)fn)v~)))))Ʃ)֩)橞))**&.*6>*FN*V^*fn*v~*****ƪ*֪*檮**++&.+6>+FN+V^+fn+v~+++++ƫ+֫+櫾++,,&.,6>,FN,V^,fn,v~,ȆȎ,ɖɞ,ʦʮ,˶˾,Ƭ,֬,,,--&.-6>-FN-V^-fn-v~-؆؎-ٖٞ-ڦڮ-۶۾-ƭ-֭---..&..6>.FN.V^.fn.v~.膮.閮.ꦮ.붮.Ʈ.֮...//&./6>/FN/V^/fn/v~/////Ư/֯///00'/07?0GO0W_0go0w00 0 0 0 ǰ 0 װ 0001'8<X+mGl&x.e0(i&Pdn^XS>vxP3:[3 T;ō>%QH5F[$?'vm\gʠLm2"[xn2Əl13(?%?%xq"&Qs&~d22T~> &-72̼eDƥxd1[>3Q (aW>4'&EJӁHs23c'v4elz*"1d!E3 9Kd?1gk22Wc>/Y'dDQDir l4GwG4HH4I%I4J4HJKtrLtLϴMtG 4OtM4PwOt P  H4I ?RӴtpUHH5 pON4 @I5YYLw G5^5``6aa6b ߆ @b?6dG,sH6fgv`!;fvd<ei6gק6kb 6m__#tAi׶kLl'u Ap whus6 TsUg#(uv| @b_ rWwtUť iA Yvx vou}6e/%g 88'/AFوP 08W@\@\rQ A_8Ј|Q8|el xG88P4v 3y/8v䆎S?9ׁ" #cydHWx@9 <Ιӹ Xy`ԃ;`آ3PeT;WW:h `2QI::zF @:AV# A$Q׺9?;Al Hlzg;HokHcׁz{Av#Hl;;;zL;9o{›PA @z:Wl|ģ80-4:CեāA<Џ<T3z<<|Λz8=C=W=zk z߼Շ:k _G},;4=|է=o}Aǁ:ǁ+/} كӓƵ=Ϻw>w~3@{=O~K~؃$3A KлhC;:|7~3z{[z?ہ |eNa_s|}}T{:9@8ő)EVZ9X)S2?7T=- YZ-*Jp;3E%P,ұ3" fceWI2$K+5KVxCQ7q/x00'q,lHnZ}i/0xgv߭*+ÐgXI44N'|fUOcriȐsLt2#%mwO$vY!2#X8 ]K`JA~ #u"GA<݂[,BN`?Ѵ B Ani#-!3Ao"Radq@`?q#4q^#6FZ ݬj`Ll$vhshDӗ$#)*J1ph 0pH-O,#귎RZ! Qڱ$r&aN@Y<ׁu (U7RP0&Z 4lA((7|l/.g8 SX-tcဇQWq mr ;FjU30܆$p FSҗzsGcV}b".OmѻA-+B;AYaI0e-Euxc@K4 ʄ,#⠂1> 0>, ="Kd H9t ¤@P`A$4K pxպ9aW㕃$1ToH#|c  )x#X2<EC_sE0 =nZ怈n1ChG;h3u խ:ܡjS xnC jbQ Y$judB h71A` d(9PଙrhUqI̛K5au`82lzPC*B4z@Ag  4aArDMGoa7I,`jg⼂C!U#r`Y !_r9+`8jSդ[v@l#jBEg10%`+RA gp?" 3#++ 5my_3! +cWq#=؝-tΎ 0a:.Ǖ L ^1`\15pE0tWWn,P:|Fg_?t/ˤ)pF2!^!8k&b e;+o7P}DRLw0 mX8é>A2NO fa aaxB&&bРg@! gGz H&),xθN%\nfTx|Gv (aȇ^B BҲ(߮-3I ĀdJb`AlhCbaAr h*±8i'VƁfؠDbi  4e 4Nl!a؄m!|`"`BHߤmmm.©7BkJ^n P!m BX>`i`뼁ЀfM i91SLq N}Cl!ڊI%a Np.@$ F!gf ֡ZD!a!Ơ~!t8! hX >zBa "`)=! f! ʪbG d Ba4^B c! a`((bp!@l|!aD .v0Hn iܐ) UoX5FW- baUP z΀ 9a&k!k! K!q< ¾ &)"&F!kZ}?"A+ ưag `K2*G du/.mBb ntzJApB"ĠnA@4ĪbdF"g."ƀ'coRs+b<Wh*6r#D0a0!a8(9`95qV<"lzmjvT 4`oV.i"Ե@"-`FmqpC 3+A@ "&ItAupGbrST (8i4K4 0%@@r46RynΪan[I(nA(aQ&4La j! ei!4[19!xR!׸jT F<fA.SBSf+) N>4}"Bo1VV!A0vQYpKggSP "'fK < A+gpF !F!~s3F^W^ai0#gB ~gƞXV@~S J``$b/V@F(AXN6ek^6l/B vAD a{jV##g+2da!'!4/˶!:!Bc5%Bx"Ǫao$3Y- IF67ĤeXW}k࡞&(B+=7$r q"H¡ 0'B?=&tuCK.5 b4$+܉ W wxx1A Zը~AW+{’ |Gt$cΡ}"j`LZr-%KT `AL!ԥR ![\:OAځja~zg+&bVpY逅Qwϼ1ůۜ9+gΟq4]]Ƽ/L5@N LjfCj><EGjUa#&$F pa1s.# Pq"?`LL_1d ZjҖ'ES!X)cKw((hPO?:dh?|QuɁ0S&sK[`Zt(k΂g9dH2xci9pDO?T saz$30C"@@i4'G:;"h:4n\!N83:\ASNE66QSHiǝzk%S?G|gbG;CgÂh ?@_&&́8K~iL6!HfzE$hЃa8h^C‘%蕨H(y$c Ӕ@"i'I2xH"F81iC|9)r!R܂ulCN9䦪Vx#{xcȔP P61ވJYAF>Ag =%̕j'@YzɳA5:b0 {03 :fظ H?0@wX)ܡDG R 昢h3L [CD?)/'яG\Rz+F@ʆ6ġv4 z VA\9p bH,d0͈7HxD8 KtLq3ȉ!38p!h9l@ȸLɫ!qpcHzx Ͱ,hP}k3ӊCr u[*u1lc6A h`Dfї@Mi jj@'% C\!Y7IRǏ,X];E#X0 +aA4c5Skʋw+J'G5akPQ&A#  a(LwAxFlj@bFUk"|[td2r8fYg CԢLeM`Hzp(ԥUXJCG ؝: _DE^Iq%ћ)S#k`D`W؅aD/nR8r]IPP|aFfGy"w ^)C&n¨a\WL-sMP:a1n}d5'VKv,"x/qVMV5L|( œaO[?$q"0$+DƚTG8|+cԐ, oqn<ې@k ˡ@ 1q`wAAݠ_ 47# %92 /` Ud דDcGh6CP" ͐]rTSɰ&PLD%01Ǡ#Sv4" @mAp]61pېւI ᐇɠR0 @gPPxF5I%IQtALX 0 ͠ bAeH;Awq!32oORdji` ɤ3AX8 tyi5ŕy q @P&\DMu  : U(3#:1F8LMGې z zߘ Zs3o %ް :0Ҋt`VhրpzxGϘc0 m1rWPjNA1vM+ kHa:# հ0d E(ߘ;ypP  VDo#A+0!R9C1=i TW$WUi H0*jOV YI#9*0xL@Nqu2y8 Q 9gA*l T` c9 g qI.ec"PE5 Au` )wp%@<3u >xtO 9)sمdQ7ZC*W2"Th ! /۠ CR~.8! ߀` Н}6@R=miICA@bQZ` P ZZ'"d aݠ 0AD8& h ,FA3 oRQ(vHJH @W:KJxR!-4›hF kxO$h`KZF9/NW9 elrd#Bm$X]Uu&P2qa^SʃxY^L 0a-#v ֘y(Vm2;qT 5:sH EjUqp\tOˢ20jIʬeꬁTŤRL0:.^eL3Q| YU#B*8r]?2z1@g[%!Re}o Sbuě]q * D]QZ Vz0/a]1bOSp0c b j% 0#1` 8@[ T 0?P0 ?@0`#F*a  ,&@ "XzZ rz p md P @ pP+$0 `kxe) M%*\?l 3\)$| F;BsZzq 1 UX'X?*R/~4%Jp9, 0[x$ P ~ et$ Dslw1?,g  Q 4\ x\ $\z%[ך vߕYZ !< lwlu@:r c3ķ AO|;Cu0e* <$[ *ܳUf/!;zß3p`ެ|b@ք?]R!* ,ʀP:_y?LvЍp1%c PD9e¡* ,Mˋ "m(<† AsWS?L\g0  k μX bk3S`|^\qzМ „K_=;KΠp$}$!@0M @yԡ5/hw17`79#z1/!%C΢1=8v "AYAّ 5̆tO)]fi!1%V}!-stJh<ڞD={#ڠDL2dݳ#ӂP[{"TM=DfM}mZߜbO/ʭ*W|SCݳ}1QPC(5s=usG@0+6 qm$ 7 >Ϝ 3;Me݁řwpGq0%&YN=-r+9p >-܁/!Ӱi}XTbE=--ZqRZ!!PzF`=>}t=`#QN! هMQAaN_m2ڵnMm뻎PnvݑHc.ERM4 dMΎ,*O'ʍa7%rرE^TP.|/*DV|xy\rS&ϖm'<^0#ʹuVwd8=m2gjisռ2DcQ+3֨"tXҰbL9Ʌ>T+*L @GAC+ Yt2faάw;x5|\WH C)hP={!LN5A>iZF(RA&1,ͶX98HGqdHDs\^90 r :Z$a σ"g4o/>lX!|ۂH=p o/w&H3htc0xRn:`=<9;葎[쑌Y#i84&fq@G>ab/>Enq|}Tz(iL n,ChvV[);x}XC:"\k[X;mf1mKR`t(=GQi?M1X>{ V [o`x73]t𾵑eG0?f;A8+T32H42 5.$;9h6B3@K3C2C/283N0O:t@7;BC2$4|CS S800>C9#7L5AS>h@XEHExÅ:90 C/Y;CV̳p+;Ci>/9<38lD;E9DK\K>J`D0G؅XE0R`G{5!:8t7̴_4Co9@3۽+dX?4ȿ{ApRE0d2ߔkMOc8VAapi-ݴ3oScHNȜ;/1E;$[h65etR8GPtق LrP3=Ei 2;\`Z$YsHtP`IN@cxDj0ESB/98@Iz-k3S4YV DaЃOtx] %ixN7pFQ2˅\c-Ä\#}${,H!4"t8o(wDEF8`PHCCuDAu-r EV5o؅cLYppjOl@al{pH2N}PT-i\=SL jGIIeocxK5i8P{/F`\oX1h ZC[ҵk/J0pxHd:n%N6;;]pDCr?zhoH{2CL,:L5: =@2{PQF`1@F0>$֔i`s\;(Wt[\J\+/5(ݬaN-8W;UU;99zBl4t8?ſܲ 1.=@d? T;hd0/O 48B#;HY0zxL4p؇[P [zdC8\}\j;٣0ʼWx `m[{Lj@h^vR%5fM74X;pHE]O][pȇt>7DI(܇mC<RSN(+zXt[m/˫?b`AZoP ?;oܲe}٘K~a=K%;c9 AT ,J98NxWuЭX4ERxYEW⣇sSԃ5v'ET"=z:p\\0uCVAN0 ]/JX=0DOxfZnOi]TьVp5O0[XT2tIXGH3櫕e7SGOXER+^p30\hIxBK_ZF%[ߝ m4~[9{v\z_A_NشVBNIAs10[rxjX4;ȅ+CX?tPDgӭyP8;]^[YJjLm[}؅ 698bvȿ~ v^38POXp.KCXR!b^<3V &hV.pEX()@ pDx5Mi@]JxOaH5ChjZEh0C@XtpnkPLJn;Pܪ'lz?=H볆fiD8˷Dz=YμZV#JZz^`^ G+U}Ibkrd:TACjx6Yfc0Z펣kp0|iOB{5]އQʅQxí^%[5ެnrXk0m5i55ODŽcp>/-XL.>zՃ/cEC1;x̨j`pCm+^-rJ[(.ҽ1ԕ-Y#_l19C5xrOpcClRlKk1c}9)  Anц3Tm$rdmveV8ZƄFy;8Zp{H9V]@"~nW\L4ȭ&nO0ǭ;݂gAb2;P1XLOcvڅNPx2BO PYIOth-Zm#M.AD뮇D91@,<)6|2-A,.zIQAKGK168yDvMe跟Z&6GO#HM‰ 8dDkc69h?Swh o̅Q0߷Er!Lp!ÆB(q"Et.^rC'eHG#JL>`cHZg/G67O=xտGC7* BVI!{Z%GOFA(-,zB#h?`dHNJ:rw/П0WJ'v0*Y p=¤Yt Λ2Lwg/Ŧ/a3jYǾ+f ~bcT/[GϞtWӅWMw% 4 {|w/XAu~<1EV)3\a}G^A9q$AN?3M+ra~VyP1_B?# 1z=wUv.š_GdO,j?S]tTrEj<>e9"G(|CI"dسNg$j=X dx" =:ZO!4DE|sG3|elDVSCdaD탢' zjp9١?ᨥ44aAM2i3h4Bd%(bt"p"5# 4BlD[DI؃yēzh | ~G'vT?ְRKxJ?VCO,#'$7CIm$ܲ/YF}}7#s5ur0LLtND=1rGUD(!OE5 ^?[#:7dH,Ira1Þ7+'N3iLꍤLU1_ p%#hirW8]}] 2N;> c>Pv߈aў 7Ioq/ c { ܒCvcIux]N|[|#v:ǰS^4k4JcWy5DX-wYdhX4+ viCpM"#1Lj)<%I[.B/<ȨFC 3< T5N(PXp&%d>yl]$h-r#i&aO (mrz4RgG?nqFO}FӔuÛ4,89B+PAȟyD0%0`T@9R,4_+D:)2ȸ-hL87B)4i_SJp*ò|IC cQW]')7=PB&4,D\O][wD*,=,AbpJSP,.DH,!4,B\x7@OY8F5 0<0TcLC ,4C'Ċ2B.$0Z?A.h\ˉ k=j$"*-B,5 !n-Ďq+c䂧VmLWy])  r_+,PxC.&MB+L.BOګ "BqOJC؁yPVU4dq~AY-$7P,Hg՜!聚k7M =eR)Ѐ%M2㱇h B ]c-!^!Z7"q{_PQt 9q/GĚ#O6g'Sh'g\6Yj[;C+hwYzOќr3ws;w]6= c?u 5Q<v{w5i+Ёwyw0mnBl:vZI]z,݃uw~~ _t7yw_0+6l 0-K7B#5'C(8}nOxw638lsW?xO7E$c3a?O%5C@!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,Gb  8ŋ\QB p‹3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳMhEnqGC}JJիXjʵׯ`ÊcŊ*Xv *T` )˴Tw'F˸ǐ#KL˘Y-]_|I}fCgM۸s;Zמf[g~8gKNسk.Y;W^9е_Ͼܝs0.=Z?s~&߀h&x]FiQtAkMXpfv (bLEpA& (>b"3@`,>Ps$]#iH&v!pv@*0x+5|x#E~@&~.p)U9Y /VTp&8 Zp8C1P .\W&HZ(Ztv駠*@NiF !jr !PpFcp 66кd*a{p"&|J%(J+8mP+8G%@p ˮ&fl78bŸ"T&+|ƾ .1.{h2.׼b60<099>'8B~G#(/.p$.`żX{b &0,9s p-/ް.QIW>7d}V@"*aCp*…>砇>q<+T∩:i6._ ) l-)ӫ26fp.7M[ʀ7h`0{圛rD/y*IsapA :?oP  (f"A-L#*>\( PtG}f~@+`ӟGH~%^J܀ ,@T`{H4¹fHW r{֪vLH*Z7AP63D@]I6Hpak3h7TAsj3-*a+aupPIB#(< l~Jb k@2'/lp,䂢t LrZb( IZڒ &fce. xK@Lb Rp lp+졏Rȃ r6bWx= S--Ir.AYt5!~`5׹N N|;'R.+qQ9І- ,xV$y jȢ ~!kҖSlyp9$& πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMZָεw^MbNf;ЎMj[ζn{MrNvMzη~NO;'N[ϸ7{ GN(OW0gN8Ϲw@ЇNHOҗ;PԧN[XϺַ{`NhOpNxϻOO;񐏼'O[ϼ7{GOқOWֻgOϽwOO;Џa]XKzWrSAv,#$OFZ# 7J X` 8@:`  919whA,Q_pQWg"#8hqv-:;=>CH<C?:Ghg!ZH o؈ٰ xHP׊w#ڰP  ؈ѰpƘg/ Ќ 8 ٘8zv؆``ݸ Ԁ8А inXሆ8g@ И Ћ" )ڐ@0@4i Ygk JPXx3h0쀋U@<8wVƀH90hhАpxi'ٕl)@ȑhfMPaHshaX`˨ IH]֘rF(@H`X 8I[i hH IjiiHȒߠ Xؕ{ٕ qV+@HI s ɍ.P@ f )gȟt ?Y Py~^ 湙@@ڠŘjV%̐֘ J者\ ]i)h x) :mJȩڪ`Z %:y*ڤTIV[e`zښܺޚePp e0ڭMi>HHJzJZ@Ehf0@.3",*()X.P'HS!TVx'%me/ 1XU@UDn~P P rGkYۗ;JH۳>g`aa1ShקJ[+h &UpM_40_~x=6]l۶bwkig+Uq7 VaKhz ˸ֵ 2h6?kidk!`~i;[{ۻ;[{țʻۼ;[{؛ڻ۽;[{蛾껾۾;[{ۿ<\| <\| "<$\&|(*,.02<4\6|8:<>@B`&P}522{ 8Q?4! t!QRW= ؐ'1 3(ү's&?BӐ7Va'0Cw=%Doqu(qPϡ*RMb6BPR(3P7#U`+hU[``p!p #t]R$Xۢ:_.RP7>(;XIG6-,JA00SJ7Pe]N 'DLTccGڜ`ۧC2!@5RJI^w 0/as(`m%"[' R=8p":dY#A2b 8C9}8$;`݂ f7f:8CzS9#& 2s80=fc>?<> (s'#F;a= İ3D$ I&$ P N^ 0K22RB"P?@#3&If#n#\61 23Q858@ d" .(2RPwDLA"+PA>H/+4_C>:; @{p"M7. ޑs1e?kA/Dw0!֓:P/;1@7=35s/NneNF3C `0I2##5->;T%!&~l!!Q@("/A"; n"rN8w8E*pma+#Mq"a)d(&B" O ! u΄<~=VQ"*-N@!v:cSOv2c#/)WA#oWbeo- !lTvyo}?_?_?_Zt@ i9OiOci ď*a' aq+[q %/W3AZaܟrpgv`jg  q@ 4꟠4ՐY$:+F/rcF=)IP4LCl%G$9 ': 9(Ǔ &DRV9!NdO( IS4wY-H5re\4Jҙ;THGjƖc\Yw^y#iZD֬Ȧ7o<,YϢ&]:eաF[G2;F&9C'WO[ԗE;喹+]At69v^Pcx^1!yy=s?)?a ؙƟXȘkv#2M J±g:LokxءrKr葐B ;I<$cKF! NiS[p̟R'd6l943M;)CdF3:X|$'1d{С>v c[GuHqr“lM8HMg{Ʊ;cIGN5SϺoI{Y2t{lr:d g[pIoN,;t6٣ػ P6o؇?J.% c' mw`; PG0wm+p3k;֒4mr _23BZ. L;f<ɈJR E'>14M,Ɠс H4 Aȅ!3%e"0v$9 ֆvp 9EЄ05ЁpbV`c#}B|,~121=38--r;pv rXnHۅ1ȭ9,a '9CNaH8LJC Tn,+Qh`i ;tHAA X[ XoH#1d`K=AkLsCPiRpFqǁOpv%{<I}TLJ) IHtI`COcX 4ڇp^1۱Pλ+ J-|= ;ø+$A#+$CFkJ{X隗J΋e6z-y?{RAi,dD 2@zj=p3UI Yהe 9f8 4}AЋnĉxtHUȄ-4W t;$A¤ KED~eix546urFAcu$j> ;sE[HbJĸXlsi";(d0ՋIOYY%َQ?8}(Jި8Ys;XP:>T2(XHAZ A [¦EYpمI"Q /ll[S:f4/Zd? ur>$UǑXDљzj1} t(m=.IcAYϩ kzTvȩ5tjY ;hXCBϸJ?ҩ;v0$C}o 2P-c `XAAkcHVCO8VJ*uG_se_ Ʉ̐x3gy?/y ˙dӼ9sGg.cA64cX1Y_{+k{x3፥aa< Q&`L;MZ;OPWlŠ Z&a8:s8*zEM"D:!} 95а ukFC[[jO ܀QP~QMfjĈ38)AE׉$mҷe($xz tq1I9\Yѵ 9@p -(MtZ3!mP`h=_:QUT2)(MRޤpH_-WIR{ЧY}=أ[̟P(LJJ`<~;8`A `) `EW vaK4"lH@sfGӃ!Gأ~M!. Rc8Uweb`j-Pj&/T9'O &O(N8[Z!Y@k*%=EX䤅 \sZ:~jJګZtz)YLI]umTeueXTi]:ƹeM,] P@=j0 1z@ &,#AD-G`a2;ؓ0.eqkI,)rx1p4ᄆ8/t1 9z۟^\^3:GQDڋdzcxMK=EՃ1pCHCL3<F2= 5($Mi$a,إeC PEkf/4ovѸ aVJ*΁\jۤM$q5PbQ]s-3 5 {hbXI/kn>1,x ]h \Xb+MfYVcH4_DhXlYL32oZ,1tPu!Z`m[NCƫ3nzn⮺yOUQa-@psNc@?Y Y8\]pporcHAYo<6׭Ux\\hXQHnF0څ\%KUehV8f>CMrVp-bdxTd谀q #hFhwI=rc@!h"*Z?IYZaP?~H~@]a}Xit&[f`Vf4j6|~yp5`ha$ЃU{]Ht-1oYp)y1"܇dZH ֜,L߫\Hcz`eHX(]p)U;|4zY&2I˞{)XݺQgΌ ejk4`j6_3`&[X)4dÜr )G.VjE63߿u|r(`O5vC/]3;g揞VtRY[ެ{3'Sx+߾ 8خ]z,&a`'K6\Y_ǖ0ƕ=$3럿[dzGOGOHCM!g;%׳} fHhs?9;XTΟ4=egֳζ3FtxEV;=s= t2rwmbH:p2>,?֤t$ݒ?@&ZdrA?dgQYT&1Þ?x2x#= .)5,C{.=I:&;`ޅYtY_CM6$@zh;w xIǤ!gsO$"I?m<0OUj1rixm~"@wO+v~a:/U"Yf\7/ nTbM?t9J"qfH+x-r6- ,f\07\qy?T,ॆ'LsL,aG K,&HY#@i %˗wpK2HL(1M#U$A4"dF 4Äbv` 2!uW)Jr 5>zx$ȍR ,G1TL,z .uOF9vG1%$jǢqFAj(cvZ":`b,a U+r%pAQiF1Ab MG솘SZVNM&fAdv'"hdH ;Hb\<\Qь]pq =z&ҐQB˅'A caHR[[)Z,8q fcم5B DrmӠ\#$Ä ނ JUH'5r{a;)2X Ulr|E.vd:d%Jʬhk y@P'dhMAhWK\3A #>SU:"7Ë𣽤wwv|NFdd43;@Ҁj)'Ӻ)%߀ROAJn]H3RjD0}eReS(F&v^IPR t8RIE_)!J Lyf}N&*Tvp*⢣ѺnaE''4u +Rg$ b P/RBTX {'^!WE@S=L.r(>͞;SDT"rXCxJ4|y9 v -ISíTVӞ4 QԞIp+jȴ0F7Զ5sZYuIcO@EO,c3x+ c7>鵳R"WӕP ]dN’ؚMhm#ug۱sw izwRԾ.8%X;sڞYPo~'cL|3& !,!,!,!,!,!,!,!,!,!,!,!,!,!,UV H*\ȰA9j8Hŋ3jȱǏ +ʑɓ(S\ɲeG:0/j(5.sFO{Cю8DNMJU!R$;&bթ:MLMˎ yv9g9t`ڃwѶ+y6u5yfpy+pZMHfcr)FR5`q Kf3Gg!f^Śu!`._:d ǁolnҙ>:muM1=,"!xQ]z8WQ#C829>`>K\Wn r?(VfToU8BƖ$!cOvٱ$&%Ary =x^Vx"ڄ%?Ǧ56e2M; ]@,D``znF?/chH1 ~t=0QI DcPF.b/ H&q Nnm G:uC_@z$ `q{M78!~* =ԚAZp")DEU4,+d Ɏ%R3EÚxREoR Rb1-8aj* ?8{`"91Ȅ! Ie;z'^ IHG.  I`BS{BA)'3t eD,aƬ0Ě&W,@8IcX*&ծ>(sGXSyT py3m&M)K ܶy+Rwjo}ʂdcrPSY4!+M.ICETe osSVU%tM#h+AzCBV,4lܹ5̝_Z֡pTr=ĺ%+;-)-8[1=̂Et&pfG):G3-³]v 2 , ;#CwN.?`Ň2 /;RiЎhbLl`̫̔u|`x&]U u _>ah2ՠ=|6+ sASֶ!z#?FIL"X܃zCv>=]9`%/7%G:PHSrcwS{n4r>a f?r,|~rk裍)5))jV<ρmn#;፥~ TD9'bA/Z3=Z~ѷȯwY/0 5 qG;J0GA8 sj xK{]kd6wiWSv vL4`25QHwTgwm*Xrx`3o=R@#6d0i"XP G8+T:SJ#z`Z*q.ņ2":/INA_%pьu4es6S-B|p'Ab}ni'(!s1C,i0H&..ߴTCP{17,y /۲1$ĈQ7HRri&Xhʴw֘ۙ["#h\W$p3lQ 9j<1}M< c{4 |p3Ţʜ a~ĽqW Ub,l׌g0 P?c9v 2Լ+!0 Tͷ' \v0L;X<< md0 w}ѽ&%:t"=O!$}('qe|!,!,!,!,!,!,!,$X k srҴ:ǎݝv8Cz7;r==r<(J.]d/L/?<3LEg0:v"\ztzfݢu*դΐ5h@!,!,!,/X 9C9Bn^Cz(F=GND5dhQ"CwN2j iϚabuџ{f B('7`m܇LBA3􈜿cRUD ~WCdȜ4CMvط#CF*ԕZ]LgA96!,!,!,!,!,!,!,!,!,!,H84 H\ruÇ#JHŋ3jȱǏ C rɓ TQʌ0`@EŘsϟ@ Jъ1ѧPJJ63,%bX-2u"N͚%K浮ݻx%#T a | AF1X` 64ۉ"6ץam.QÂGoC16yo {E -rz Hν;e0??w^E)ر;7U]] $^u}t`{E?uUvq `~صb-@ `AdDkLEA^_cD3 @T GpFQyV i@CnI9Qj́ ja1ŤcuV]`'Z1]'A4ЁJ$nGD V^P:Zu eѧ raչaJݮsй+;l+kκk,, ނ(mH*&yR5T¡9dH¶z Azԧ:G:A E s$y~gfre*%,ͩrl86T N.r8`@zЬ,6Gl9;5?R P(@Os#2&gϦ3P }~ǯ 7,Q>ؿ__? %`&A .Ё4 Arp !8B:P J( V@^Є"l! w\` tgX@xJh(pJ@pg/"*SD5dv[WE#JԦQe8'!?u7k3K  D8 4PU  >HF4/ܷ`6 7}%P}/@ t@%0~ pG@_@ _;I͐q r_4& ;(&' w`p &Iɐ+MCtw3 1`/֐:a3( ?`y1!Y#7 {N[?P ӔQƍƖQ@],2wm EPS0M' 0ɰЦ| `{ j4~`ɶv CIV7 I&pIɸ@g^$[B0 (9@U@DQd'fA.=r  t p bVhk=__P JUF`3 Ш. ij" 2p#CF @ 9#0+1-q4 ?_zY < ;-8O?#007P *9K*̫5[ݪ _3s"`6+ 3a8](:Џ40 @<PK @ Xhp_P` "*r-`) , XjUx d@0DgB{ > 0*@{pHeeJZ ŀ 7R @N&f zbհ Y'!}<0w U0%1 1AC-ݖ#رGti/9|e4R$H pw/4@ snQ񠚿ug6P Bl19Rjtj/c„!ҿpg#cu3᛿YKX*#6lH_oבF[+DJeg0paOڵmƝ[n޽}\pōFI -Z\a34c5o]al(QP!?L1VR}fo#>`R`9 Scviu90=돬 i ɂ:θǞBl gXgQPD! %G ]fIf+t`VXpIGL{LZx@i^`g: $ғdG*oİr*FpW̨^V0+xqLTL^y"p"JpÄR3JxSap $P%BGxghdIaJ5@a4}oJ&-9oy$u8fR!4ʯ=tG't}+ۇ+G\fйeO aL@ iW^PدLY*|a1*e5,h C&z'#& Z)8$|pơ1LH |a-*؞h(%PYtpi$%:1 =8Sք#WE8qPC+x.Q0x̙Ѐ?O# 0xBA@pf è0  ORO9T@EXJ(t@}BrP9f*D+ "5lRT!s( .ArJJ x#lds:Ԧ7iNs:xuұ+ PiPJ@Y V_S'C P ԡA`GZ),uW,$#ST@$"`G7F@ $~Cdr~i)HC 's@ H P nL!AA"L(DTd`M-](4jRBI4j]ЁZAp$0p) <1B(B@OP8`e=XjAo]} :AqGB1X p[D.` 뀇(vj+Њ =S#51Re`:6-` &HJx} V :Io#@9D)E⽊ @K.4m2*@"pP1wZ n$9Zxp]$5|' E<ZWf12qBa) 9Oiuk^6O րG) ~ 6.Z᠂5nC%G7^p =`G;PH :ፎ1l p?f pVծFp_׽wt/nTY=B1զ'0e( l,$.D+oG8p_+5XL$!xȁ"0C7+ j fE$! ֨0~ްj%YP8^n dpЀ`."2PO@`j`Y0ppH>d$2Hu$#( 7X臘 > (,df_8@X./Cp%8؂N8H sQ"fiP64 oQY4#4a7!dj8}1~4+8IA+ XC21a#\؇p;8@C0-ؓd`8{);ƚ ۂ&.N I낂` P"(R=#0P{'+S4̃`co")K:BW)8@\9 Wp3I$cJ(JУ<{OT#҃Zh `pph=8-Ф - hdc=c- X}V;\rhx&oNXsI!)h4DD p4:5p @Mll((X$tyCz` @) P MA{L*S" pUxSK = p3@`HyiQX 0( x^c#xؘ0%Q^KUd؁U0"CЁ&4=!(8 6`soЀ=PztHP!K]pR $pC؁ː+Ԁ(NCJCsH!& @ԣ Ch x(5t9 Aa P*(84 B x9o8:6Җx) `HZt.ІCD(k(I}5Y}:H~ @QK HjŐ}BIcA#p#hH.<3G 2=0TI0^p=h<)1B0T؃HT<J (x\Ȉ|2рeopҏKIjj~ta@/HjrsЁ&po(4`tInc 2MfЅf kpZ~8jk]z`0(?[7m RkB^9M9 Yvcpt(`]}(pr) S_0 ? ]/><*ChPCk95)1<${mh}\xd}#18vȔ"m$s j­dH(Hhp]-iXx#ho 适jm@)cԠYjjC8x8תQ`µKN\?\m04-huG8G f  C~[XᲑ27,phcjd(,cc\WraZ([{xQ2؋5jkmƚio1XrXug" ȃT~tHW~VR x!-Xg`yeȃ7>@  T#0lx3\zeTqy8MbiK`jvF@yV0 ՙ NDb˨¤Ι)UfmH :- ʈw:#D+BS jR@a󅃂pń۞lzaRvn8ՠn& O(p0Ad j fJx l{M"Xo ro& @V[h+`ipQ=7ich؁3h{X CZ 8ӛ{M2H8bNqE`D@<:=RK(ss<027!a77m(637? Ɂ&I@$,*؂`1XQ5@k : PN8{O((PP*Qb,؂+$*@LE&ȁ"CC#;'+voP-O@$HL(` 3I#م4`u: u:R`,HAy44:|(xD8`@16^hcZ`ŋV 8f8`B VLDO0H1BX ;P)֬Z!?~ q!H?DxJEMiVCv4\(; qBEGMҥۺUdGTkBŠ؃%~x,J;-Z;x5@:T`CV}_q0$z*VrZOz0.~U(?$ႌj*,;)?ၻVpK0 b P1 J(IȂ / Pwu2=KʯAgűE]t"ݩ &w-QK=5U?^ &K4Sa^-/?QF  Y 6 ]<`p!Kǝ[t9GR`B2ݼA݃s+؟蜖knM׬խ:+|y鬢 {蘮sNdϛ',:8{vV*zK]<ϧξߩ/??C;~xg@(pg Ʌy39Aނ;OY?N"n;! S.|! c(Ұ6ϲX򰇰OX F<"%2NTM(E+( M-r^"CEL8&ЇE1Ma>Xg4hB<$"E&"|$$#)IN(2 lBv "!JP|R:~PD&uGhRTNR)qI]򲗾%##`<,UB?я}2}(=Ng(`;ҨT>6Lk D&>}'@o(M >ZMn*v|hs>YʈJg>I5Ps >g I#v`c:©L">!Ne#-(P*ԡ ԥ2(aJl䃚j8qYnbY8Lrr_݆ bc8cCUsFJ U0GѶ^+s0MdjTlc >Q$`Xf&ѵJѪ=ղIZ+e4#UAYR`)6*ʜ-pjW>,b8FM}csQV7mN; RvT'yɝA(oSq*)M{Z[䧴=03XOg(j&QP)<׺G87ge?JwCu(',7^1QE%KZU㻛FuuC 7&kzf>3ā洪astHG1:zt{~#UFڏ{pVN6Y>araUSgp &UZP<tmS5׬E |-aUCn9k-(fr:UlxYm{PynCha6ʁn><>zi#(bkZW,-N :n~a)##'CSܟG8}=cfz:xFqVۑI{.Oz5Jo3ޝSGh^ym?9lsbJg_"и) >񱓽f?{jq*f;lƒ(.>L>hZv.Kouz'?]dy[DisX9}7i63^0h=s J-rR7|ԝ(./hɓR.ބ3ZW66̽sZ)oygxqN3yy)FGc|: T}ֹqx- /\\F? B G3=C?D>\ȅZU탳q>lq]>;LX?d: ⟊A=C)( U5LXEډC.G9=ÄM]t|9ET(K6X&9`?U- T?H P2] 1 4ESv^ΜKe>8\ ʟy7=Ӊ= ?܃URxQ1 y D<̜;5Qhᗙb؄!T>MS>v`"00/0 A YuV&Yi'&4j)Tm`+UG,Yes&94W|9K{-c+٘t}cW%iVT@$Ad1X`ԤєMs}c}ۙ"%4$7Qq5$C N}\G^1$CR͑D#Q$KN*ѕA\H=0$PN$UP A+dI]$ҙRHjL:UF<1OLQX%85eZ[b .]%^6msdT%`Z,t@ciedV P Vcn&gv&AYh@Gؓg&kRelΦ$kn1MZҦpgm&r&rB6B'tFv` .r^'vfi?@Ŧttbvy as{rY'}֧}~'yާ'z6M{''uJ&&>to&eFhVA vl煆=2ȧ(Pڃ1(_(樎=€(i$@f6a N)^:h9&V)iYC1閞`O)) t:ڛ* )Vi62RFԤVH]*bf*nj*vj~*ꨦ@ <*P )T`J+&*k.6+"N+V^+fn+v+Q*?e P,k++k+++l kkk+kVZlf,lvr*Ɗǎ, \˾1H \ -@ Ԁ @B@m-"-,ʀ"6-VF,lVm,6-ֆ-N*m,ۖmf-ښ--FmЪBm.-%6N fDp@ trVn @殬NtN\nnNbnNn֮Nn. J.loF(oO. o/Nj.n N6z/ov 0/&n?L<̯//C p@r@20B"0K#?pO002@ 8j0$Spw p P1RC/8C3& ؀_qfpXqԁ/,2ؓ0P2ö?14-tg 2,$ tg32Pö"012\qa187L! / ?A/S6 KB^3|?PI#$L1s+Kq'2%`$'3?!?@ 1wr ?L+O5O@o0>϶ 7(7 O M =7A˪P^P OxvXWRqPS SQN 7 g7m8Aa7P0tŷ>7P y78 p4PioFRy!ff?@?jG@_ ĀxeW?42 iRU~opP -18kCPg@>7<8P?9K~SyPxPO ylt 94h$PЃ</Pt@l~g :׹yHWtfts/0+; ;/0?Bp j *os;;w;{k{r3C{jǻ)Ļ<3Ͻo}TG}[Ctg=k:2&{~C{δO~ ~0 d+B6wL?W_?go?}ۇ @t W@ '@8`ATaC # D1 ldC60&aѡHFmxt"F fT<9s` U2y Ez$e+̡O 0z4GBdN+v`4RZ1N=JFDԯa [cCgX Иecdɕ)g|rΖ/O-$-pf=aǖ=vm۷o :2è)pxq5#T;Qs3!aA86S\;w|sc`/ 0Rj#?فB>"#O(J0 '/C영BsBUB0$FPB_2J8D%l'rl[M4L;C9,3RE)%-K:'hN$S3T0_=u;Bq 7U.堐4buW8=7s902tY3-2'dVic6[nɬYP QD]f Ry< RHM#8C;P5R5`jw3CaE_00 ^`;̓>ԘRMbmeGkẊ 68bf4!R'_:/NBJ_wcg8̚{![&NANj0 ~-KTI@;t`!~xbZh-2c[sB`>iclAb](#xsCh^MX8Ϙƨn@MX0;˾X*}ߏ^yCdwX?ǜF"4@lñE rpl529:7P6IG(P!hd`p'aGq)Y =npgIA:='\[XC21<90&6]8ֺKCYtdJX/դ|7R z e҃ 9I Q& Q!XQ_JFC:JsXqq1?P}aO0,gA]jw#nF @t7쩇d0dX'@ZV7/I͜m ]m-<65$ hH)jl&5<l8"ʿ{CrA6wL$CSnjcG!Gsڱ%,EI d9 [I?܏sHtۥ3630A*x`A0 ctXs R{p?qqO^]c÷7=5n̈A3Q0\X{ӝG)`W >`n9셯,,< M31~ g`<α i@hol}5j-CϭƃQ\hr<#Gts#[4|jãҀG>AP:<+) <_۰ {8a;r!AAh%DKg:A|j> / [ &#0ʞodTy#sR4'!Q\Bŋ`pԷ^X6C!HP(kM̛Ja .oKA v Lp"4aȄ aΡ`<$/:L!>0@A h$aPϠցJ *8&<@̶!LԀ!-nA0 pf$ !! 5!@FkY  $qh8$/&FJl@.{݌`n+nBL¡.M$!)0Nf!A b. z1jΠa!arTօ*H؁4%!2]%~!42E#5RFr#N+@X/L 0\+ >(20@NЀ `&֤ $anfA` $a n2 Р,f UҠJoNвԒ-20&ZaA  gP !vqhX!+ik=pL vrx- Ft¡Ω@^>a2ss!$ 1;-@!s`0(&S=WNt n  45}nVH,)JA08ahLLT `Jaab XLI tT:ȀXYa a +.)2~4Hӄ1a"B[!4:I *@ (!!D l !G_QL젮4 2dq |!z4tr aMw(I4BMLȠ-C! J4O Đ!ajLb! KWafa t5Ҁ2Hҡ]E$_nd"9#d$#%v"$ ^Z KZK@AĀ!J1& !qVZHĎ! FUj!A`ʭdzTajT[9o 0/aX <3Ӻba2Ф! u~K *k73!2A DX Fk,pk`nN$! 8/& MРA OS$& ; x9tSL`2D5 `ReU`yݎS'jn $jЭVx, FD~%$'jD3KnRߩBy/J)K` j`P' S$ 4eJL|M䆁:Qpxɗ++ezeVXAA.L`XTu $KN׆ۚCJvn`@L@П@TaP iLNv`M8$XXQІ*әaaL <ꇛ'@ ke%aN@Jҡ$GAڨVyGZVsdN[Ɯ8H=3 (!9A x !~Ɗ񤁰f~AǠnjz$^P2AB5"/ȁ`YYbA[!*4ce]k Òaؘ6\rbn#.F֯*t!(!ļA*AOdk amܸf)NO Z0+4zD k 45@nãiS֤v%mA| L'ļD|dAw sFlwnjnJ7QW dw ȎИ퀁#O—R.M ޺7 7`aE}SWQ PZsHS0&!&MN9fX'PFa ZxMp83{1z>T_v  FMfAO'3O?70:+AK %4k 5@ 4! 0m?M4c<6dOm'f (F[H^7%2dΕ_"S֔a]DC2aITrcyyNn!*ΆCh o ;Lgq嚹7Nj0 ! L*!1yN3kH<Z|;S " Z8Zf=58bſS2eR0ĉxN E:wbGI!tUcj]?ilTg ؑ'|P?`4 #J;f{(͚H|I?aERSR3y{qL~… c(*TX:5K1jsfԿm֡ vXd~ؒsaceKd'r8w˧3ϕjV]Ӏ7pwP2-vn޿p"(%Dq$OB5AeS\VwwDC w't1 PncT~9̃O84>O,t1:ͳ we WTGrYOa TM&3a`RN6hh:@?HL6c6@Shp:)3ͣ6j  aH?@ڂ+'-d(t0 q>Ky1Ci%@4Ojx <?RbM&_O8ɘt qN?8#VsU $]Dr8`4H(ȭHzz.b C bH4 #g<0tvX'?Hy1gc,wab3OK\ݔ;TBdEFq?Pa_FXd eZ^)1hQ *JS:&U}TT4ZE)KT>KUZZ*Wt ~ ?bq<Dg"ʖ_խ}?1|0 ȑ$3bEҘ/Bp6sXѶiHZ Q! &BHBind|2Gh_>nqV'!Zzh1[CV4`dLw"xr#J~4'1_LҏG6 FrJVp譚A?&7]hc8Fž S"&hJ883?n U iXF%֩)'(dTȁ auz]$-" ށҠ8(zE?*D 68,"+aDO!߃Z׫z6U&5T`O! jZͲXBw?̤;WɦI' yb4 ?fxҸŽv!$g0;02c!-qi M8J4 Md`I`"89W XL"(ԤNQ #hqEA3V*.T6^< Y|L nV""d8FI1܂DHV\Vl:6RImq[[."qm>R}s0bP@\#`P ];C)#L0&ƒ16I="rS!&UW1ĂK? 2HDB^΅ʣ-By"3uuFB@Q&n#R0 R7 ť@K'e'6 ^pe2j#٧AA( ! &F&^dm! aeh4S(}UFqP/T1P~>h8v%DlQb#F-1 $1c_@ !6z g -!u,0 1 t ΢0 b $Tn14pP,,X3 P^@lb!("aI3( hΑ|`Pw$ԋ Ba{(qcb勌0 PPLN}j zx>x5sZ>{B~.pm H ďLUj d@9 t1YqQ L[j&PGъ`UAS6 O`PD}pVT&P`=vlbY#i`s! Lh$CS&u }dh0Dx5%z 0dx=[bAS&`? p!U(EWE%|iT{`d@s*ڀ``  (G vd_cu`@]W! ! $g6!D@0۰mP R1vIP aee6Jq" 2`##B/nQ R gp8pɀr1"1 TA ّHL@ S@D, Bpp0d`'P ހ?v,>6ᐡTgPqj`/ KaŒ4Ţ15 g`E0uC0 #1 k^#};P ,u^i"p r߹G !iuy* I\z6۰UzP Y9 6"Da20[yਅ1VJ+y6հ.i V!&"c T\P\6ް@Ъg M-z GX*IHjMi9' i l˲'zb ӀWqbםaKvGP[,2pg` bڢAHϐ^Ri Oq0P82$I Ӑ7"Lb" ްp'wuТq-Y#VOei6`Րrh| s! @+wx%p\О)+pQJjr@3/T/6MMacD*fNPK Tt`jEP:Q~UI2#P AW6zv@eEEo`1}fa% F/ 15If1Tѣ]t4y) M [o4@!Q@/6Ou?'`▋f s? {ґ7^u/"" ~SOs32!XA Â?!(cg!9tv'E! ⁆Ĉ(SGdB9zuMz{<.Lٲ4#.VqpG`oh2A aDV@bG$ر }@)G w4 !XIQ^//y!L1SM6tM4$v@1w08 A~K3sQEs Qv`RE t:S "I LP36-BBPADuV8'R=C/w@-5SJyTf'*5eK LMc2,wW}O-!]1atPZ@$8 O& VeA?V9iV@gV{:hVziVihiZ.ziz즻zl:N۶;Nn>pmq^qno3Z;׼qnG[GQ[nmCio|vݖ<"hȁj6& w{c-}}w}~~P$` x@&P 4n@ }L 2P`=AP#$a)da KX0bPP;a}C QC$bBm; W@GbxE,fQ[b~Qc$cxF4QkT@ `cxG zP&t0~Pr%UhE-zQ -``ƌT#%(?ZRT+eiK]RT3iMmzST;iO}SUC%jQzT&UKejSTFUSjUzUfU[jWUUc%kYzVUkek[VUsk]zWU{k_WV%la {X&VelcXFVle-{YfVlg=YІV%miM{ZԦVemk]ZVmmm{[Vmo}[W%nq{\&Wens\FWӥnu{]fWnw]W%oy{^Weo{^Wo}{_Wo_X&p |`'X fp`GXp-|a gXp=aX#&qM|bX+fq]bX3qm|cX;q}c YC&r|d$'YKfrd(GYSr|e,gY[re0Yc&s|f4Ykfsf8Yss|g9Aا/CX(&jҦp!%$; BъV-H)x_MAX>5`ߠD Lj$ ! ?Б `$ Ax-5yv?OH!k}#~9J\r!찇'Đ8!&?<tH9#N\<[8k:X?< Ldz=aȁ^'hD( ވw!B>va8G 2c9#ptArto=`5>~it؅92w uDkzY3k {po[׳itP2(`3x? ϋ⚽GCa3p;9xi558Az2AX4}L؂/hBr4@\`@O2LȵطtmG2H1d4NHz84`8e1+{#3! 3DKyP:j; lO8u;PHXC8zc۷{8AtĴl`c@Fg3uO@?=rFh 2Db3OhV8ۇcH:Nx=BH@֛X(1@+G׳ygLiFk4tP tDFL$n4G:8/cx6;8-dEDI:ߛ;Խ(;jx?k7CQCNJLJj;HAt<1ppd:.:ЃEX=k(4ǨK|<32PCH3p{P2fe:t0Dx;P9{mtP84 l2GXɴl.;(cE[XwqǽF`Q9HĄ4CP ػ3a7擃CAL 84u3r(N;<Ռ.2Pt臐LM(7{w~=d֣͂Y:~o<8CmvLL;%8rؽ4xKlkHQkzP:EJO}}lLQr}v̂P#P{>SErҿ6󷠴iCpA{EÄ[5{Qt4H4}F}.58Vu3x5gY@A55L(GHI=KA4D9;@};EQ]US*}0T5pUY}U;e`XPMPS^E;ЃZ-=kTJUf" :47+ZV7֒L ^V V[ oV9-bW*Wp95"b6|N XirVhJx;A R#EӫDg&4hSX!֒Xrm7ua;`> Yg̎ rYVu]֠5|]Qt\5xeP}p,"e8X Rz8|99ttxcy[z EW=ٕ]@D38t1؃X==utB`[5l:xe[]e9%ʅi`iJR資Y[55[vvQrٞNz]t5ӭV`H{ܽm=PizX,h\ĭу ipEԒA@x\489PE Ŷm;d(KuV9t8A`7d\R8Xm/A`~AjHVQC85^-9-5X:]^olT`d,?  MY;}襟ﴇ\08rpG.N Au@tGLvXQTQDPBZIth]݅}%|?+z_;:SEMFHC;E\Ƥ6IxE0C<x 4Ql:o 5 U&Rk,Чm\jZ%^1 aCXDd4Xe2T^=PBeTfTFaSee 31fe>b]\;?r״'BUF][жU~ms5ӳg2&/(X刕l4Gλcvg5CVc-f4XeOED3JV[eHb~ [聆~$^/#-8 coSR``f,v`O1hPKc+f~>痕^ {3@3kr `cN"eXӃRC6{GqO9f5cJV(N;Q3F@2Cv,R6Qt Q4`0SZkXЃV\Rgr@t8QppfL=`fRSV]0epHioX;HB3GFMcJbe^42pLQYso/Pisa c0΅cnOV;Ot`V$r<{ 44ԘFip6 Fqo`ppCmN E1@RM8kcr'ѕj<]ܦy> $\6>co`a0ޓip _f kZ&YtFQp_ =PCx`Ndf@@ JdD2-Ed]eR` 8}CU}XZ$Rp\9iP6j3 LQfOxn590inH-x˅/&?w{}uUH:d Y@Fzr̅;LXףj6=``p@wxPϏ1x{vhTp`Cכ1}d@`䄑Y0օRiJƂ `RX74Y/1zJ7o\t/h958 ]d4VU iP:VBN5=O:Q t5I;窖4iIz]H9;0i/xCFp2Fv3ؼOx߇~<-E{CD-Pr$?{HV8EvvjÈ]p<-|CHVr "Lp!ÆZϛ!IBJ0{ j_+;O `F!|4fz =Be$KnPf.t"-*0Ķ-Vq 4(J;x/fpiD _A<wHDpT#@gK,dcvЃ;&e^35xz}Q٪$GcRb-\+[ַS<: l,x=dE,s=\_P8D,Q!)QAԠC,"NgZ zuf:1BoJU_$"(sZ{mg5%u_P$;aH,`!jIMa#zamJzuC!P:[G< T!`# Sf#!C1%)fyuj-:4>1 k hα8kc# W(EyBp|A!mdYП&8M0d*7c=ATCDRcdXrDgj.+ t#U!BQ n 5{_+ÚLJPfL XwE}TI:1\n߆{uq7v2-cEُa"5QHFG5oa}8Vi ?f2PM,l#KWޠcBT'##܌I 094MB'MpPBMH? PGjDRȁl|\D]· K95tJ>l]#PM)!Kp~ dN< ɵ?xA2ԄyK=|!mp(@"5&χK礁A\`̄͜=hEM̧L >b@?`"Sg6`y#Лe͜5P"X=4O&xAoU9|W>C)xLQC! mhYSRBd+#.\ȉ=5ԉSb E0C܁H'\Đp[+܃=?ǼADC*:H5QD%CbRف*8'tnuM+t"-Bt܁Drmײ3UG"ht-x Bumu. C5(Cu0UDJ$* 1TF"x.L1"RpB.$5H0ڥ4[cݍVA YH5dnY E3L0N&-FB$J$J,¨ցH-PC΂ <ҁ!,Lg ] 1LC5C,4H*] 1leHB,B,X.`_0X8ky1Xk-B.0_bNƿ/x-p0L2)h""bҁp-*`,|(Xeů5$.!h gRGn.#ZC3'TF%P/5,`,('o-BvlC,B"io,,Ue,,D΅t.XC\]BtuQ.F~^`0-~-K2C U) *hȷ e.p1 0 By'r(JC_wM]Ȩr IUb-D+fqX2 yU.I卖*[?H_a / ?I`aH- ScDt tu%!3Vo^*B_:qC83uc)]I1aD3DYZW-+t4WJ9+F/+SlqAĖ]<&D$BJ+-L3*t@4;wDW-K:W0|B FDC?E94=jj*AХXW8Z. ЧE1F*5=:L(u]u(s0i)Ҵ^` S5dsn&%дIZ1ߥ,#4uCVh,FuetH6^tZ9vB6I70°nCX "ckr3wsףIbY4k̡i;7b 2P v_wlgwyU,7m¾tQ#|w}tG][}c+&7#]l.zm$T0&cx3j8Ox t(tk5׫c {ښQ@'vm7O@r{6^9ֳWߎ࿋Nm˟OϿ(h& 6X6Ԑzfv ($h({a'U({(b}$8"{(0 *6!PaPbH%Nf\v"B(!CZh!7:vH@ (@' Pv q^3Q{sy'lx唗^xev駠j)&C:Pfj@)ZLJ0L9=h!tͭl$YYx{>z|&M=zkbH-H @ <8 @L"{40CC*P 70Lp ?89;!-[tN^ m&E*fՃ‹VЮ,/+&l6/ .&z ?cu_"SO9NpXĈg8?rk^}V(kG#5, uED(IB@@LG $IHfGnH A qPd }ăsB@Jpd U{4SYDH-ʡst#XP@-QwxB;uZ rtÒJqF(2# /by` *x 2zj7F| LD4%lChDldGܡ,PK{4˽Q9ˀ8aKdK6™p6HA-!NJ0z|Μ#:mV ~ M)OUF3.{ȋJt7.{i@b=4iT|O k ?Ԧ:?o^{ vԣKpW{&Puΐ<HU11jب2&G<1'xL4Ar80s03, [BO@ vQMh a- @G2tOJG9ؠMtdAvP^`k VXn5ݡ^A\.8bS6]RRDJ EWȮvz xKMz{(VGB!*E\9d_C򣬛 )v^έfP{yiK8 L B p ٢Baz ["pԀ t#;kwGib=ET̅H Дld=R`m6(J'K2hNի D5 Ci8@ hAЁ&4 hE9у~4%BW҇t-iL7ӓtEQ{ZӦIMi\h0_-H aqbZȑ2M:@XXBWaƥLdXuMGg֏VZ&Q)^hY%+I P[ 2/q$`֥U,@u7G~i(?Sr =t aGC# ЇHOҗ;P-[ j=K ⠶%Kà ; Gl<yt^H(+ p] jIP&tB== Fw$Jmyc z-WyAT[B R0\QϽwMg$K*0,eB 0H.#w]&;{?')!W=o6h.tjBtLZ:TK`?020c''w` :2 ER,P1U s$4b4: o >p>0K0`L>Bc2pVKd"䗄JL؄N Iv!"G@}fb}`b8d)1 Z P) N U U2`Us`?s9H` Y5@ Y$W20N 2Ёc')P=0 lsՊ hJ DUݠuԂR$|R' 8dScf6$`I`[8Uq R8XG`p1 N0 yc}"$z?r$E t?~E d rP0TmJ0B= +ڄ3v8r1tA daUs N `(rU08MSm&%_+Y1FWb$,h%G:9o$> '>6tz / 6 &(8 %G e&sޣZdY`R#N e mpw #NaE1pwoh ctwP@T ՘PWa}t|kZ0awD}>$5`$5P ؀ y  VpKEi)Hg&  '^(Dٙ^#YJP_yXI0o1KKa=Z_3ޔ +JZ P.@OKH  Ji)GIpXs VMb5, P7` 7pKJ& Vp=l)G "Vu9^aUs+, # W>&QgVS6/\K @KR$~$ Ƚɝ+]#!sۚZ5GPH#aJ"_5~¼@ @5{L 6 1V:f_, !%L7B p9[5k-^`mQJ@=\`ǔ= ЋV ܳۥL++F`1t#U ih ZĐU+(d!I0!H z <#RC%|56}Jf"]@@ +tΐ^@ s RљSK߻ъu ;[KpƌPR R p\@Չ}"2895%si*L | JvwwP_͓d5a&NV 2h %\ u<[3r3Se|۲@ ` a r ;L"J:|&F @U!p5PO$Q bӜ))ңG=Sֳv7VH1 Fk!^0imgu0=@Tߣ5{ _w Ȳ'|ʩgR f{p0:IOf$ t% 2~(ą ؂u` NS=ud  U402P\Rf 6)K@3<7675&un|@סW= 34N%d@ĿF_ dQ.` #| ,`$7[Unή  (=P k5Xv`[(*mfC;ЅQ'o8 BQ;"@4t;L&)J&>*RL;. 3 7\_"^Oi˱B/kĊ '[p)a _r~ߦM/deϦ`O**3"$Cc߂g > t5xn'k0~ o_7vN%0 @$?/ALr`I y0U{@%  .%` % @@@ DPB >QD-^ĘQF-00=RJD @  H]x&ND3VC N0V-'{ȑ #cBiW\uśW^ ,)R1Z% 0&q=25. 1U-1u tΡ?^v\3փ!}=vmP|?]t՝v`V )RXgڨd\ Ըvƭ*ӨpFm&.mlǙZ &lǔZ F KD0`4|1GJgIǟXt'VugnQNtftZaZaGzZ:Yo\.L1$L3ό$H /Η:O2E} `bꉧw~دrxIA>y%M{N' 4QBA=X@}H "P[Ǟ}&^1Xv1-B'*crerA`'Ai@ My祷^{}/L9z,2$wD uǙn@-?F;QRpJ 0xj)T}N)R[ѧLg@F h@~NSMV|CJ)n ]mxآ&gt)GUZeV,ner"H"}F@o @ V)<уtB FH: O1H @.rDBJӈv`Ar|Í}IR!ҢhF1fTIn"dN& Gu)$n9C#Z} Ob^+<5rXr6X53 &Q 5 _c1Z#*ֽo)_:V%hTh?̏qpkǀ n$O〝10%CaS#&GuPюw6&h*ZcE?(q/1@@Жh jAa3]iEQzXJ[MG_.wyhc=R`I7%(AЂ @ h{5@ K37 P%4BJAO6ЎN TiA .x|PO C0! P(OOCyj*P r=0$3( fHA4ewAA+Lwݙq/J#[N{Q{!wT=p"4mc7+VFr1qp7/k7xE>/$e)fL}/HK'o{t`epDx7^.f@Tw|57%} W:e7zַ G+`w}uw{@!07 c~GF6>O~t3 6}\70hdyw/HCP)??V_-fUO_Ƕ2Ӏ3>3,(2[D @ {:D$sK3 T簿`2 > 7B>TtAX &9#hA81$J-ԾX7'4$ѳ~Bc.̣.(K:?!9CD B,8G|D3 X// @и! 6-R\- B`8zBT$XTB@\1x;CSkpFdl7؄>Mp(O$4SXu-#%BDd ШWčըDЀՂАIK|(35@[7zЇh u 8nJ) ru `CXE(FKBP (t>J/ MHM< MKxB̀D֤F7%0\4@3G= ̑gx9 O0S@?C<|z*u،$ *~@̄u ?6Lp p,Nl\M| 07*ڴM -#%F>ENt=P(B؆W?W*aϞAYbrghg REd7ǹHt<ϐ6J*7KF`PxWPDԂ!NDi œ8Aգ 9&т}xvROCLP-N/Үl˦8JExЛ 787%`Mܤ$MS?u@N],T@q8 WM < X~nD4uzh UϠ%H\h2 `MxrU-Kf] L+ϰ< H6(P>P O$N/Hԛ֖A4H< uT@ٔI!Q&W  -o¼Q @ &~FO$HM Rܐ%7-X< ؃ (ٓEV[B3\?8FU)p`)#`whWm25n!f04M̅ p6p E\U\ pGXh7 X Uղͯ|?ŋ,NV ̹!bhR~>Tw80%g裘(O8XUB6/KX-v;`M%8NRlZyݏ݋D[٪, `M<h]1ш ʼn5nȂR}puu@W谫*؉1UR@;̂M(7xl_%x?PBx<M߯ X6BB40V叨V z^EEȈ `q0u 0@%\-FHHhC+-6%Hi D*HS؄[V>: xgn@Khb>U=^DļL7 50g [^8\}hR~Phdu0ωĸ8D$FXBt SC  ĹΗV@8Ou6 ūԈNj ޸J.}ÍeG`]& eΗ&kl&Jke #Bd Ȃ,n XZT֧w;u#:NFDXasAM"4c5qO G(V3(&xQhV$OV JVsTw'VHNQ`ROI pa/p`/X[K6v^_?Bg0 Yz$W+F` ( + u(=2W=YPKg VFRk\("nj hp0 $+2(xs-h1"@Q{o0haɔΚ  SУ9@ͰS r ?&Ʉ)5LbO@tCo XcxE@Nx?{O|p0F+rrC`ha;|h*j f -I<#A `Ϟ$C(ZL9ݼSfyL_xB9#CaS=&1c42bJk2tCcbns0(n؂Qr.G> C!^heHb T1yM``J[Ir$$LRY`! T =3S & h0Dg.oP L`/$ [@M6 r)$(%F2Qycx /P,ہSPDZA4:h FDN\`NRE)xH"&jf:>V(L0=qL >%)bB<@d :d3h?"'B)ґa# |J 14epF7#DhNqO)@NQX3qTxXnL$5%F8yUI8CLiuXza r|d@.ӸcV(J e(CpdT0E4#8g!N-ncTRTq(T k@K-@IA\Փ#92*Snz`MEZܧ.L!Ϸ_7`IhBtG3hK S03 s0C,e=1OFR SY"hrĂURu_8IWMD^+Dqw%'>=̯> ҟXڢeh[2 1d>ӌ5l~ 9˹tQI햔Ɔ;crKD+Fv4hLz(-ƔMfӞ4C-QԦ>5SUծ~5YY焁 @AWO4haCV4:( twkiS־6ms6-qTin?ȵi_'+)l|{AYp( |* ;%Nq?|w?qK!ϸ-n#&GGyM\0'87s:x74` 7ԥ>L D އO }x0#c.vn{w|W;~{ϻp?^ygo<㭢v[W1hظ:=<=s=0mt}y$D-sSֿ>}!J2QRwCDFNBZe o? |/i >P_(uH= F )m!`a'0 nFCHe]ğ, !Bo54`q%`":N!V!ﵠ*RmaCX!nJ^~R 2 [F  bb!Vo@5W!".΂!^"&!j$&NV)Z'Rb f"*bmb)vRA=ܠa+FJ*/b_rb.""!,6"0/F4^a0:}RhtY%49 H5N^ -:)@#>T<"N^T4aBNc:d|" lZ3:d#-$G"?b$ Ř_7}v$KG#(Bչ%Tfd11*5NXOE%p@#XX֥PR],ҤeLpR5)$&t^@$&]ȥL((e6[‡Rn$^& ^H @)<-r"Ԃlʦ-B0l׽2C;CRT(ԃ::ClJ U)\D %@R" g#/&y iI% #2q5f]if [-C= L%  |`M$Q B2U>C#Vۏ8NUUDpH9Pz%{%'By|taP= דx|ڂ:;tvHX@)_E .(rH©C98C]4T0~( C#VTYW;(7v-c)(+ThQB(h5'h(Ad@h-(Ad"B#i^$hiL -,%@b&&~H()OiB9VAj*~r <\*$ízpD0͡$Nk霾?FG$.HsE[Gf`\F7_J`@lME#E9~'dR7rd639W%.a8(nC`xl<.+\6fNRR^k{`c6x@`Ƨ'@f&оM1R>C9(l CϨN@0pV3ԂAC$ѮAYC=téC83 O(O@?rgN6Ŭ"i[TI+f8 )T],tC4EP^-|gA>C0@-j18@Ԃ21-T)-c Ѕ;hB hAC# A$nprjPoAnLe${l;C8NՂZ4eq~bή_\ \Ml;&;b$1$ӗXPH<X)ɜNYt @ ) gmX)V6d&e_f R-xxB=SSHVԫkLmNn=LG%00J6HkjsW~yˤA DW]S>[PsD p@ه|$#?z_.O.؞Ǽ'"[ dE~k]a???@F Tha† F8aE)^Ԙ#F?r8RAPeK/aƔ9fM7qԙӀ$$XƋG !@$``gUWfՊJ {tȲϊEZdߚvZIջo_?7LqcǏ!IPD]TbLQE-5SIETY]UUam5We[gV]q5 Vؚ2Ejgv DDқĞY0 5YVumw{?:G3<]IG+ cMp4`M%viiIƟi"AYutN% 3>k*0Y)PQ yd`n٢'rąXrمTRi%(e`ZbYOcO([ Y[rtbe@[&h jRcG\ /beȨ`_fcǟ[]vع\kX;ε'RgsvXaɅ[T?c\P)kx`8*TAarxkk&0P /6>{y-#/aO@QF̕F5ROBgIyd( @}CvĹ"\#ZCagpƼ`ߘ'A:@zq=*0!:==Sɞ##e7 @9t5 "$'(JBJ pA:ъpp CX, 0+(5%XK\9&}8?8CE., @Y[I kױuaâ?Q9+xIQ3:x{ b7B"}5A~C0*tC?g&ґմ5H@QV2*"ƎA%JBLIH!aLfsB_*ccJ1;t%Zhfx;͈|#ޥ[)c`U -]°YPb(/ (AVNA.0'Q-iW 2Hr/%d{D[)Ƞ,i) a-wpRB#<`:po)@!I8jGj(,C< UY8Ve@Au A v(4rEl[.a weIb3PAb~7 A@ D(0 0,B_@]=HbQ*AA1<0@/w `RpN zji`c'+A`P=@ҁ-b:ɒ|*%.(>,{LLQA :a &L3Ga(ՁrWH5}6**s%cMv38 0z:p5P5IPXJ dxZq oXcv'#q}!nqoTc0\ )qA e30v\MQj{BZ?wIXkS %KҀ$%EJ$ ,($4Q0p=,@RhTDpʄdoyP^Nbe3 @Oy;/@c1 9ÂL*Im;%7]c z5yrX}H1_ ~s\ sLt؋OUIynu9w?l̗3|'a$"ǝ}/x0!)5s/fQ_cϿo-(z;z!-QzϾ9w=KN{އMnYbwįDwe{Da}桟}uRѺ7zEk~?;9'_vӟWN/N0T.qtN/%p+E 0%$1<Ыrސ&A`Q& SpqQQMo{  axw%aa '3  !! (11aq. H/'8.1QW%WlXQ%% QUbD 05JWJ e jQ!R X@1 j$ =ɱ ^²e:XQ!xW%Q=q: R' 1M)2z(@ !TMa:Dr&0:<:! @  Ma/`2 (p 0s # .s-5qM:P/!xpa:3ڄ6:t92b a/d+ `@1` \$ 3aRВRE9E & .Q2S r^%X @ Ho/3׀# 2 3 ;`'<@ŕ? nih@R 6VSQ֠f_3YY3tX`/9!\A\YNM('hcG²! EY!U:13#pORx;GX0! ,it=Ee]CCl] 0w@`/[ TmtK3I( C$ X`/b`_+.&MMps]`i]pH_!mhSDC[$C7ngNC$C8 %Pፄo 96/ҭ@\w/C.A!\GhU}h5Mt% U+^eh{=kj)ħJQ$@a@0YTj,ս;:{s-[331` |]p~P` \&9~o{ϛ(=w틾Ot#UB3%"[ %? /]Su#!+0s; 7$b*_ r$1l{i4q%%Co ce􅎓Qr,#zN搩Ɋ m44YEۥ__ ̿@1@1ĉ+Z1F5zǑ$K<2ʕ,[| 3̙4]r$PLB^4С" "P,@C5:} 5ԩTZ5V7pdɆ0*@!C[ۺ} 7ܹt}q@Ν;EѰj=8Ō;zs/D |4ǜ;{ :] 4@e>f;:ٴk>W2žV0XO 7><1F @% Gvܻ{n4ҩຸvۻ?en䧛oz`w%VyyҀaag\>aw~~b"f5ڷ0Zc2XҀx5^(niFUQijIhvyj 4j8Y lR~ @M,Of*l( CN?I *B>mI*@=Zޮn|zĒ:ދ/wj^ڛoV녫$/g\ٙp3*ĀI 2]Y2?,2|'Pp,a>V%$X[1N?TJoCu-ZMHos+vn=.' wzs5%1{w$ovӄ/ȡ+8Cm㯶y Bԙl⢯Z3>}&o{|O||/|?}OO}_}k?W $-u%۟~~>N4w0?,A)4d,*p lJp/ jp?p$ +jfe49@\yCbH#FLE&JqTT8+FX.ыah4qdl߈F6Qnc8G91w#? ҏ,XPp1 ! PE1.Ljr'? Pr,)OTrl+_ Xr-oyKU40n3 [z wl *|D4v]QVX ΆfQt |y@KX JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μYBrկc`+#~ɫ?>=㷟Ð!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,N H*\ȰÇ#JHŋ3jȱǏ Ct0 Ll!F0aaԸa'Yt"D͡HH(Ţ*N2meթOH5XԦS!6؊&M"TlYd } 1m\woݻ%cas & 0#KL˘3k̹ϠCMӨS^ͺװcv(۸sͻ Iu[@|ICmn9:빕 چ E{zkUFnhg)}^P,hf: : 6@.@z9.`]f$q 6L(#4B# 0ѰÌ:蠂6!wxbu?( /dC:,yYT!F_@fNJ衔2F=Ҁ#<10:Ë8!O0HC~62A &gҕjY]j"gW! <0أPx)iZ1顃Vhe)R!T( 2&![*ᙝdzh8$z0‹:4٦1*K! ”lfg "<) (n=ֻO:]ls>@Rvb=Уi- |=gSo߃=@1 $@8 F3lO/ k9llϽi07$Dc  cA'|O>>tf(8Q;p\$0) dM/7@uhlLӋp/(&UCԘi7"f+젊30l0I"*.~L)8?pXS|P7=TCz8[[,8yX0e~LY sK#0K@ӻL>`Ae#1gehOj@0q"e^j$= ,`60J0L9Q^4>1r4pf*0t|XG'$t9xH89ȑdL!@Ao ^Hq-Uxяtl1DPQXXsh {>框kF81O 3eG?x|hG9Bil!;hBbz*1-~P?eBPicҰ= ̠9 9c`6:y 2 ac#i'0xDAxeƸ;я$@˸ɪX52+B)쑌y*A H@̃@dP9g5#a'fB>ʬڸG8'HDۅp< ~\w (eB' q"0VO`@zY H;0 ~QDsȇ*04xDow\, (lP (4(Ҳ z ` (' @ CS:Ҡ p3e@X0D@ 9v: 2;@~WC a EYGep_&t0*p;(Ru$*@#ea @ Q ;r $V VɅLS3 w!PD0T {uU٤[pu P;H@?*PU`;0/WCO/ @X u#jPy 0@@# <Ĩg<āEh$pT ʡ6 $0 c`u=w@ )! SPC8D=cP̦8 " 0 0 F cE@#i=`iHP-&tHGyOTI. nr30tR{u`PQ![0#NQ aQHg`c t x0 ` _`0zf O@v P @s |lW bp@1N@P|$cD40~inM`#P7@"0q p W0ኝ@2W0s8@@ y3 hE hP t t Ne@|Pq3z`!(Pj neQ|Vɀ`춥[PA `dG0D3'Ұqi O Q@% `dU: p1@Eh0 O b YM jŚ@Rh*p` 8[ V.@nB` MJR$u zG p T-@G0@`m ᰠ䀬 IZ"t >h@>n(T Cư`G  @R ᔪq 0*:0.5R$  0P@iI3Pzd| (#G1`;@X10;aO9e.@4AAk; ~6h!ѹy;"@U 0 T}p]C+* ;0$ @?P6pMHHl9V %p; 0 ;@ ԛ09HjH#;@ 0pp%Nl%dP0@x(zuX tt lCpf`}(019 D`=;} <   :U` t0 uS F+` E࣑qpi A˸!:10/tgPKI2@zGe Q)95:NU 04 hP~6+PRp°svpD3 0* E1Q ` _Py6\"@cП @jvd 0{rQʧ̧01Gl 9uTȴw^kD,cq37iKc DREsz ˖:u` y ,p8@[4s +@4 q k ஻Pp~ pE 暞 0O+  0 w 7Zvf8:`_UBiA ypJ70  ()Td%D(UVOX@@ y] "FZ\/7U G ֪79P 8 K@%06!0 XM.{k{!h@|` @pͩ%:b Ґ 4j @;E3 <-):zp,% M! gpN0 a#P @ *J.@LOcl`Zeװ?'@n!8$XU`8ڭu PM0ΣG4.pF 0RP8p0@ E Nap dP@N`;P5 ,C@'wb=1Fk$2Q +]l€"UX60հ0 pQ9/U )5qT U?c% YNp(6; a6@igA d :u( W>GDW} PȖE<p}Bz'0006Oy0Si0B0l!p 0Pn @mh*P\ˀ@k<mpoepI0; zeŘQÌ;`?aFpn SÁV|tbG1`P\& WM0LdAUcD_va`AO¹`Af p+B&[3E5°1b$[DXՐP?JtX,rɺ{غǼ}b[Ԑah^,3Q4o^aǼ'ҡ5`/O TGO҃y{(8^>"cP^Ɵt 2:"|&,0ƞ|eBi qj]T{q!$腞s`D0rv% :LgThA7p%iȉz`䌛p`H,o0҈ǻX@!eL\ d*3~'1hcZQ~b HzA;dFiz&& tciX˻[s QD:A[ApfPmgdBTZae }2C% hǞiZ&dS9 `(q&0$^HXI Gܠott9 "'V'*\x`oFvaeL_,ʤLhzA->?8" 힥j 䥏1:p*۟^v YkZg}@.ň[Av{YZk[1B Q:nmZ1@06 jΥbi=7B"j<>Z ʗ& ;aR;GX>(\xa#F&De@QQvŞ~Oga n1@-n V_CWS g@=PO@ß$X`ciҠT`- Gh^|a[e ! APAiB :` Z3Ĭ:qKVB.gSł , aC94 "Y c:G8 0RLN֚N" [P` 20&*( T!<@T 0"C\n' DAR :LBP\^RTm;!TD #dUd,Y&l!'h/u2tdT`2SeC$IIL\2B٠ y8-NQ[AsrsQ!id"HAP0h4 ʐX`3Qp<`biB1K{amC3+@ f"gj['h:@m);ql![% PQADܥMaY8@PE,YL6Ҟ Q0N5}"aP40O| e,F!jVcib/JI !+98BqW5qwx;pˈ'GyUr/I^7yus3Y6to'pI+CdыN$ؖ ;D0/zyQCD!A ^}3l)ck]n utvK!kWZ;޽^l*<_P1ѻsvGLoA]i;s 4c@ŇJ5$/( ϖ:X/ӌ<Ghl ~Vp~|16~ע0@UpZ8 4`w "X X1~"h@ox@"X@ s#p*`H8LH @#pC@܂#  d ? A?` p-Ёt)`}k*CB8dBŸ*({@h¾ H>hB( ` (x CkA[ cE"VTXHV Pe( !H\Pi؅N`3OZx2UdV8EQUfx[D>R(a\XVtǸj(.(^hdȅE ^E&(X R`T=fp0L0ˡ8 <>e`J4P} @2 QP4ñ <]ih=bХ#\AxrЃ&=&PtN=8dɢɅS{ #Rj`O'X X5'HP(]8^X(ϸ9 Ӛ9-ЈCP D(8yzGUVREeĚsu HtL р: QGh'#kHD09A8ip1KlOHN[P/P-؇|LxN-HUDXX~09|8t@ׅ00dC8gx-0Y~":hpIYed`O U#!HL8N~ȃ䈃k ɇm }8 8C0-)UDdr fpJ*(4y}R^4 (uCPG8- HobU (`DCH% I0X`P=(0A]I{EHH 88Jap Uu-I[Ip-pr~`p`iOPX8=dhII`xӔP90}|hxP$2'؅8/up`8] Xh,/L X p}H(`CyH/x@5ehDp Xx`"`^APVHrXsx7J'A p{X;@%YxR |UM HA-YiPcsI@cAX,pM xZtdcU`d@(~XY 0 z0I[N2-p?1y8c0 xOv8@hXb-$hc~nxb@@XuX0h% 0m. @~ X/PH0x͇d]CPx"h``V\P _`V6v4^`x: _F@ H魀tHs`#KQv'jM'Ѕ|n<0DhV "i/}"x88Q'އt 0 2&Aj vXPf5 &NЫp OXy|jj؂IHypdHk }hX,Ahň^tqepXz;QڈPm8]_0v8Y&B[;~o(Lìf ś-H NPd@<7 ip gHa1C(`HSvPXph<C]AVz0h5`0}Ln4=HmY j&8Thip͙v}8Fx8 V LXPY:"j(#C iрxkP%"aN H"LVah@ hc^2tC qmlXDY]QoHG`^`("#spA"Gw ot0DPe7y6Z̜G+2^aH݇P耹{igc(E IX¸t@QHtH{&l_ pj:0صZ߷0>E}(#AQzoIOCZ8ypSQx9>]VHyk#`Ho}A؇o h^P{Hexݶ{OVG"erzP{m?H]$^VP '8o(|$Da^Y(\XY$btNhe,<(O,I{xnE U# Xy0XQ}NQuq a. KƂ׎QM)٩a6m2!^(h B!99/m/6)\ *wlv5qѢMH^| '3J?`BTP7r5c@(ܲ /, L: 3d <`> S-"F2aer73 \=0:|O_ޔျK4xo-TN8Ps.y: fAtz34rH ecOs 0V+E|!Md$:#/rql_ s$C:ñ|4c*rxdsGp$M)x-J{60`8@'?q:xb2 N@058v |#3 6 lx08`->Q-TaAXMPpiq` U.r̂dGjE> ,_ҚDyTQ'(r l@< YN!Å>1| 02(c #/hta+ x H@'q=H$fr 2284%HZ\#O(A {M0[ha’F&O'`T {G+ul8-XY5>q좁  J*OC 1{x¨UaF1 ‘CTV`zk TJCazQQ]TY 8  uMGjH=X G(Q4.@_pH8G^|c4 Wx)v!'`w =B1D0 4,U+\|qp`Y.{"KG8xā0 {Ѕa0 f9U\0[?yI0C~q( ŽyĂ'$x&b AbHBH: B. Ԫ,byVڄI@{@k $2*8pma `B -+. lje -x8:&qd,&+Y+hO#t89`=B=r$ @LClE8`,@QĢ>3ܣS`f D! , U X 0eL F+;D'<%[71eLx9H'~gѰK<%S00BX.~bX!K]5(nOO! 䙿1P;c *Pn P!FE-$IW_ W܋x'P&`1:&P(P@X5p EP.c` x@+;G$ c\H\r1A0E4@G2TL Ъ$ 2$_p(aԟi [h@ (y'pOOh<4$VD :C)]~1; A3Hʱ>C5A<&@4j<@C:pI Z =B0@ ,H@=\Sh$@B.@"8.l`B7 mA|AFlau:H =C/$-`@kC8P=`Q+\.C>plC>HC %8)6?6|\ݕaB(!&R1T@C<Y>$ $7ld7AD>| ?HlTh@),_@=x$x`CWTqBԁg= <$&> =lDA, <\Ḃ7P9$AFA\'8 |Dv9l@tB恶ekAHA "HxC@,4@ @5C@ AFP`?x[L'YDP&L#~ TNϳE 904f,Ő;`|@Z@?$ d GeTh!4b"l]A$ S94Aу׹C{0\("{8=$ 085F,Q>BT>[PC5l6RC8@~" 1ؘ:@!<+̄2:\H'0E>hH=(?<C@(i4rp<1"tdKHlу!TQZ\Eci,x pÌ}ly C/48Dh|z4b8@D Ìt`י2OTpTC,Օ\ -P=,t]>JJQ#!cP?9 `ikL4QڀAi8BlRl~1Aͮ C @ 2CA`@'|9C5K̀*lC8K50qZ@/pCmJ{7CFmT`PVZ5`NpZ.#_A`6P5|Ć4xd)/> t .Dm8%M 7 CZжHVjDa1޾a`h@VZ2AhJxNĂ5l4tjj'l! 7:TC,$@ӕo)ʦ~7l-),@C̆4B榫û.pC6|0k-#H65^4|!XCJ -5LB l?, 0V@,@"1A @11$O2}00C:*$/A@QLr9Q! H2ay,<" 8 J!C"O!A<4AX"G0@ԁؕ<$gh h&os \- 8@}2$Y<@xvl8^3r(%_$ q4Os5Z)3Db% l#)2AJrVi@ @nA 5&Du`v`AT2,@ hvεvN u9=Eva#ew5^k`xDgKA\[h6M\ku`3h6a'b[#Dc5`ulvfu uq'm27,tnsg@o5bHxöpr/xvtv]'fgvxt7 ?~7788'/8~/?8GO8W_8gxM4w888s88ָۅ۸* 6M x5ڷVy yR;8__9t98 9MouC9X*ē{CwyW9t+Ĕ:_c9zy3DyT}oϹy Vy/:ƮH亮 P 캮 : LK[IL $3  Jh;L$£`pA@@ L{O@C{Mp{$$@CW!dz`&A;{,$ n$$BĀ8ALBA{8IX<@*q{OG4| @L !;3;|o@A@W{ʰ{ALD=;_ x}ݑ|d|Ap{L 8A odo:b:DkM>tBlN>؃.WY.k=oY@|R{CT' Ѐxqk0,pi'@CI(@@kC3,v"?9X?C H,(΃'ŮX>%@y kVAy(@ \d|VdEB/40_?i_6T8p_d 3¢E u6>Ë5!}䒰0qZIh!OΎX8AA8fWT×^) ,BTAVrdIT8I䚜0pgY v;( cC'vǧ etJJ>w rNP@ITI34V+'(6{1HȣsJl`{uHjA{B C{8Z&z*̚}ЩD0r1j_ ~!c1GclPxؠ rӛy)%y e%f!}֠gEƞPɧTآDx{̚*[ąßt0R9GU J0`$ᡢ*H)O*@Ę(a)JpdpI(!(vhşjm^؀AA0 ʨLhAP8›{q 1 X fZG[H\az,I(p|Z(jP?vx'-H`pjU?< &X+: & `, P?Q@EV;\]OJt j#1hi4@9<DB<61*"P(:Ml* 2b+0P*  XPl<H&кcK[h%i@Xhؿ Dd#8 621]uBP =v41 &85@b,$8Fq2hF:|H1Ё ǀQiX@ұNP$bК0@ȣBV;(`!*` ^{b `@'"4VFQI$AC> r y؅ NSK=XEL&l>!lC PS *(@NHÉC !8 ( #|̧HrU fU j:"E (p0xB5qFJa8@)pGF<Kt`*olE>ĢR:$!\_T6`NTSi$#$ A:~hFn) PԀ# M:!*@ J$b`+PBp"A ?0a,eG/Cx$0T K& 3"Zc%y@)HfPؠG;_@t0O@d Í5@DA R3֡G`GKa e`La Ff^T3яQRjk2HîlO98A z5,:᥌@IPTt@ bQMXdY@`G: ~DJl\un ' [y6x88xyb/q åx4}_?!#P:l窈, c~Ped$~r%@{];,L'4@I 2b=α .$ CʀcHv!'ɡ$eq;DZ;-H@"C}Bږ3`99N=Vф >,(d$t `"8:Dж7$08ATD =%3N@:3MH'P #MHw?$рecȇoS:nlN,3aяp`/D ! !Mm`ac"@v D |A3AB. `A"#hvl# &"ZP`AR V .~`!`@.hD;VN:^ n!6t! A`2:aҀ.{&, 0a8Lnva !-蠶 Ġ0@m90@nc uJ@.ҡd`f -BP`$P#\ch@2&!| Vت~(vqzCZc0*` Ae`6 Ndƀb&C ΍yAZf` $ҜA rh<c@&ʏ~Ib$rgQ!P! aaO|!" aV :"Ɛ+P`8)Ԣch!M-f! bx *@ ߒ0:H Tr`qtdt`^l t@r@\ l (OA&ɵFWk @\ [ɡ6la\ b0OW""H` r`nN`ΔZƄh6,jE? B!3.&oAx&H@T!P`;A0BZض`*#`={ +C²֏-sȡ)c@` :* @B@2w: D _D$Faq?] ZܭP$!W O`&$.a(`r(ehA`XK Vc@f Yabћʷkfܝg\x`yvX=XK :|ΈQxCD*v7iNJ+D,H &aGF,Dp+^0P̗Ơظp!7ꅊ; t->1e"*2%#ao?{E Ca榥Ffc/]Lgˆ#^e') GGˇ P|I 0llR?`NVH ҩ?xt^X ^h9Y8?F3^6B}']"+V>eh 7m=щU0Tİ`3?p:Hp|  0G- v#I 'T0 P 15/S @8O8M7u!X\aB6O:I '*@C\O+G/ I;肝nq]q-zэH`j!]C4l!3܈p0 +|7@Fg|,q+DHzŠ!_$ :a+@W0A'GiqF-tR _$10dHŠ'tPwTFIyD.%LBg hqFj g P#b4&k+@" LT#B.DFpT D|xP ĒI[`F# EشPp|B HFZpQĶ0|@2 [jt"*OP) [ :l@DD`B"A/D wp`m C8X8:$?,!v(Xj h8 E&j!(p! S_a@!"BLH 5 Yh!`!R4q( B&pCfW'ACO/DА (S&pBh#6 0@ hb$h`B>&!X:oߢIP\13DD!'5i(雇&)Iw& 54W`? <݉τRT(jJ+L!*qxJJ$U%>C_6KVb5UcCɶҵt[)µV= W ][޴,0$ 81`'ïq Z|a[wmT 05]T⮶1bq箠!.DjHރkQb0,@`.H!ܷŽmNXpHY_O+QkzҽzFFҩn^7$ F,P!ԝx^4X hVEHцB$ӉوyӻZ>D*ThK3;x1RȃPA˜‹BӜA!$u(A Ț D cr`yL"HyӢwG:A G& j("ez&@6plM'1d pҐ7R$ppӠԥp  @Q /q . A |@!xDx"W t!#*  @ ޼1"0 #.z|P `P 6QX 'Ґ ,:qIfW @pJ  0 խOpߐ pق&%~|ȳ5 @E\ c: .ۋC`n' s` k)Z TB j¸ ~ ; [Լ| |p3^^ rP̡jg @ Q E@Ћ E 0Ґ c Epn 7S 0b`* HМ| :@ PBÒP*m :'!p|q"0%pS~Y.'_Gg߀Nx1۲\|y Rp+Ҹ#3`%z G  ZG v  p e 7ְ Po3p E0 ` [0 ?@!y_ pujX60ɀ6|Mp ;{@rg&N@A KA)Eh&k0zDrIr2HER[ɟuh :˂PH'iY TYA[[%&N{8ᡄ꩟p&>8{1p1DZx*a!I(ࡧZJ-2͝h}FaDag3$ӯ/LTH?} vavR2"22DQHJ* &;_ AF:y耜~HaBY8L =GB~g|IҀR[u]""C T(*GdAʐ!zǛ-DX{G!gN(8 '' r2Vv ôeHOMv\%ہ|BT"ᄰ[H`{СvH`UV#z!bBa] uH fJ|G:.݂{` Cx)E a v`"$A#:[Ga$C`*KD51 aG.e#CP  €)n-d'~xȰG2:RiȁN@DP+; x!;-J0tcT ݫH!A]h)[ Da  4O@D@ xvP X .j C'x,lP0 9P?ACЪ@9Q 0Bh5@0TLOx UP`~ ",N9ȍ/< 7)̃( t jQ# !& 8nҋPn)@> 1ΰU%\H }#<9 74*EhdX㮆a/|T 2 )4!c0xBpA @p1H@V5p#dJSsG)$P4EK*N F?;|')ǁ)Bzl1HHB,{p-g A"2BP3AP!):99ܸG+0(qC=[LaEJ0x*AGz9ԡd8iP9SZ8v @?:T>B'Ap1Q cPr~É/Ё)( 2d0b4@Qǁw:0,O`qKkJXxY=:ɉE߂x/؂5fã D-ϠuFbpkXmKs C.L@RD+ҏ#`4N'HXLt p )ɤ9;ȁp>{LHetaXe0~1؀:ˇ{P 4xYr㙇v tBT  2P#vsx;s`cxfӔ`k臟+ۉĀ~82 -,@H900C8L<30 YHyxAZL- ^4V;L Z^H cfȋ$p@If؂f0< 4ʆLN mpR88XHU0pIjPc2/ЀHoh T*NЁ4؂(J:u8fuP6Ppx+l)5(R'm @#pp H#H4`d/V`4h:M2`: p#H"X4 H!/9ȁ3(ԃ p#p.XkEѓX(Ty `ExUhUU5 Wmur]$;mU0uX.r|xXx P8X$VtE,|SKҟ" J RVh  )]ԙ A\ ƽ[Dq9ɽ ] \\ˍ q9\5\M[]ڍ=) u\\)ӝ݁ ^^^^^^^^)-^]_m_}___}_H___`[#]5B^֏X| `^a3   a3ra` ^^. vAn Еf ff~Xr,@"'bSb< b cb ',F3fbcpy:0%0%>F.c&vbBn҅?nb4a&cԥ](Vd@)4>F`+~a )e<P>'@bV3>BX)LNFdAe~Cn HnX$L;@gn&f&8hb0/Ѓ"v fN&hY G2(n6#f|6Mہ{Q(-C5շgփL$wBqh"H&07<H/+( $t}`C&xGXnΌhc,xi|f#`vg48H!($@!XK#b۵"&Ji40l.jnF `&H|>"hix~a l;C6kE#(An*NzZ" yaH*&ŗ.6Ix${Q뢞(f6#Ѓ/ iY浖k& 6$xG۝PQXpo˃Ixڇ^wBԚ}H܉f =Pn20ݝ}0Xz { ؂nXrɚ}CCX Q &IK܇!&Jʇ gCX|9rDU(U ` 8X|  )PBoIJ#Zm 2U!8hxo9AsUq::Ne\p3jrp pz̨<1XXɅA  0}h( ozt'*ĐEހfU(o{qY~*>Iߴp"^:^l:Jj{>,o@*pzcj8! &'\p/ I`z 4)(Ρ*PBxwjIH xt~5@hxkp  {HktOv`G:j{P@/J ^@{8 [c\vӐ涻fvqOxXO}p cuPf`Rx_4}/Npvd@8"0p{@$ 0vk/HQwlpK<-N8KyDlW BeH,n؇uhpz `O($}Vp{bdi@rN'8Jo@i ĐKDyjf%AЀ sH{jvNhp@cOڻk:&T󇌊:աPb  P%Yc$ɒ0PYP%DT4)Bth5_:NhL,{x !]8&x!Dq_SSKbO ôBn$%H2_/0KV_4|A =`Xux,wS*f^սdO'-Ph߰ ǪA4V e{v|,U_WagcDKH  uЁ* vؓf6ehs-K/Î N?t #T5  Ih.<ӄf!7RAD.H ;" Bс!:puA20BT:>xH°SZ#Icp +$,q.$r?i3 .Pp>P@ᬣ40gГN& O>RA",O2Ü:P# =Rx 9W/@DXǕD;=oI5Q\G2xp8؀9ʀ >x--$c]h@*M4"dY 'vX87tQdH7U5 (( 0 >X<b|1jHcEHClN89H9 &aPfGIY0%r $.$10r"ʤЌz!>~)-+vH4k70.ffIȕ3G3@Ft3G"  DI +v@|c (5Aj$ch H`!3H" 翍=} %@[;p%H2S/|PM  A,H>:=ృ)O=iA+|C9q 5`*@ o*^Wџ#):he7A> `piHJQ`U{, vVXu+/t`*0_уLKYJ@G>qp!{SAA1Pl=\W5QRp BAY0[I4gziAЀJE8 ࿄c-:+ZM w^%7cC=ۂ 4| J.|0W>;~G&Ro# `?1tD#B3qt0:|$ḃ'PZ_7R0`NACdV]LDg!݅HcY Ε$u! tLpg 3Udc>REyQ2q`Vtd i`r o&&Adh@H{#M0hۑl DJx5`Vèva\{2C< *ǶЉ\!=`wlc?aPBA<\GJ&q0|p' T Ұ'{0, AxٝD8ĜpBh89!zH09C[?$ 7_؀!P>WX?0¶| Q 8! 82P0 l`{x90 h@"WT!# ,0tȼX.æ h@yX:T+B> ~809\?ß5pC>B@`7j68[$C`^GE>@6AA2!=TCK^A1TYJ+t dd޸5T? 9((H=t*4h4 B@xcA$`]8I@/6,J8 <b`db;`B I/9-l@:$PAA6 , $@"|-(, 0T'd2 h@PC?L <%nHpT@Pe$4xC2ȁ 4x-243 ,%ѭ$EnB%RG H' 0b|)<% 0@5.\ 0AB)"|7L& $ Lb #9  l>+G>| (L7 @jZd" 4VZH -_D7HC'⑈ F`I8,4@ lA'H > x2aRhD,@+l@ޡF'NA(NI'<A#H|8 8^?820P}S'̲$P <2Ce<a,ITUI PI\`K>4ÎT}AT<@0dD2l|H plfaΩ|B @/C`?& l:2 $] f,@b +B$tHH^lgIn |%$?&E$ JHDCrr>6lPn 0bd8*o H @$D2PAHh k0Tu=tV@ =C&`nf؀Ԯ\0)0zd PH@,C-]ɣ&=@e> ?\ 9yGX,P$Z@= C@V'T,G,@h;$k I>̃}-]T?AN _+$A-H8ToY1tf`(@/)h52 TAl@JRW@H ;9@oF̂t̂DA?-?ljJ&S=,4 B$.22Un:.h3#>lÜ^.H 3˄*: CJ $A(-8O9C>A=Ԗ05*)`T5 C.?poFL1*t1>?2µhc* iC8LN['4TI1H+l:C.Y? j4H4X @W:024 1P,̓6ʤ7 C.xCI]~.B8C: 'kC.Pr'3t5pRP.:I5T?C3va.D?B:L.fG,=p0BBη I(?\@Exl 0@FxxyBxE"C?`iF_q;>xn ,Gz C@Hx@LGSQ S!W<@u@8y, 5q(HT zsl4!9W.aRE Q3}u _Ȏ%("z.<B  ".!XQ*1ÃI+>8P E! DWuW3-gɡA[o=<C<30Z+:譾F! <@!A! O#HA7#d$xh afP߂>AkC.Bpm72/xQ!0da@+HiP"#N8 `k !f8LP/m R'#N C0L*CJW!0/hu!'BI`A^m 4XU뮽찓Y .-ڴWkMQY{ᄸTn7~Žc-o-U6P- rp:[j='?dOsLc;!u:w+U`8}4{=tt o9v\P[tIg5ѕg:C  &XBX 4xߗР-l?X 5 Hp-8!C,?8K F*p d! $`ݷ|E i]>6ph@`6@vXYA-,{a'<@A@+! `}S',"M EVY a2d Ї@TKE40_Ȁ@q5 \OFl^X%AphB, DpIlГZHBV$X:hJ*$; 2;[ b0;b5!"}G1ad i. ` cTCx H](àJ8,TP7&j `eP9\Ac(qOs F 6@^9p>CE`K 5 dF,M1ZjXXE2ь]a A$a ipPH J`2dK>ЅV&*<a8:Uh]=0]Ct Fkb(cUd}^`<\  B6@ d5zX ]uP@ ZǗ(4% @ a( H@];(`XSY S hF?34?=ִ<@70mp?>` e$`RpX/옇þ tA5~vؚuG&fuP3  s1,; q80IpLcLC\b9$`aa @aBa aJݲez.C@ e4&A 4b~$$@4O` n$BKСh@v @$ J `aF` L1dQx`5!Ȁ` 84!BA6!@P@ta!DfM &  `XA`(axI$1< +V z! a do@@Ah !00x`a X@wV!)@Foa$m . [fH 4Iav\oB`!! `1DV#:Atb.*`a  A  !L4\`hf4 Z!|`/F N `! ` R aJ!+T A<0/b `B@ @K !(a0%4,Vt lHNvʠ [ a@c` <`$ ֡(o#èQ*!&A % Z.dXA6ց `DAP X`̴l@@t <6\M:O`ʮKe R!T` 2Gc l`Fa>Cj!h a J櫊@H@fAfءQJ 6` nj*@Ԁ *6, ׁ$a@7*` p ``nx*`F! ^pgL; b!VhwBn4B\R@*` LI`V3#c>0$aoD^d30$n0V A =FJGӣF2:!\5Zz63p7A-qZ*r!א$mJ@u[pV^Rz.hP Q/Sm`Zmyb DyWbT`]\ a X@DPh!ʣ> 8Q=DA. ca DycըAwN`fc8nd@slx pͼ,j r42סPb܎J^aAv 7\r VnB! vAHnDz@^n* ؁``|!ZU! @0dp:/x;] aQZa,M!"Հv .#CNw}8X ai/ C*a ҁ`ntaYz ! zavW!_2 f۵.@!:J5a40,$ar,xPb?A y5/@Qv͎ E%ly;@y t`+.!aF  [!D%xA nA! a {C$$a!@FA A^@bEZl@vb /;Bl@b OY;Y DۘA!+uɁ=`N١@¹ *d!! ɡ+/! `ra!@Z!<7fa/AV`JAYa?zK:YN`A O{a /fOHxGCa 0 A a \ 0sa83A db!`! A\ d Y`l4`<ROo{Fnz!VB {+Zvza Fat@Ҫ + V7En`u6< !(X!Ԅ(ӕ7@BJ`rta % kyF$80AaQ[ X `Abyƈ- rR0ai?r"T 9rE0A3F2L/8[:`baI= !0nIS<GF462qN? ̓O8bl}4HЁضnځ=AwD.=0ų$(h=: laC#8?A !,X|As'Ap>ܡ E@'T7v`s.Hm  `@BS$4"@NOIH@=xXVbO:OR[2/P7sfD `02r`?$a\`Ѐ >i[A$P D {jX T'(4g CtB=Q2b`EPuț@PP<Dp"ތ CA #9XCz H! y?r&P X9 Q1C zc $:8ԡ5AHi(' >7 "?W  u@?vFCs`$(<4܂`S(z:Pt/.qY`;&"k2<`6Th+ 2(06 *>a@,: !p2):#0` PL yP K#UXFx`1`td*@"tcG@' YFR Sjs%`}G A@r,D f8aG,@4gPC{Q8L?J':  AjM=Tq @@Ф? (K8f8 Xö /=p<@S8?Qj  oFT^z GP&&9X Dy},)0ܴ$*0fIG3AG9u#KxZ]H@'ps0F"x54`: ]@/ƒFi; p'Y Hpbë}L4UN[a(Ƃ/ fg0@X4"H3rl X=a~)4锺`[ &$p`q7xe `ё5ʸ!#/@@O@O`@ k9m) ` @gzⓞl@t"' "00"53ʹ!4Q9̙1%4ɜ<BP04p9Nќd!=)4 8d9dh$Y ٝ@*V4$%YꟂpP4t@j"w"")8@C $U:נ%_ҩ1J$B`[T)y*3‰$S'Yfzhjlڦnpjb Ph6 xa@zS` pYz1z⨒:Zz+N|B3( @*Шz$( :Zz uQj9 DPhN00 {GZNM32;) PF0@]JhABuN N5NJN,;@"q* D N@{M011e TRO u0診 G6@, `俞kX<M@+;S!DжB41+9(Rq5|40Nܟ;_ j{W̭qcl `[|h࢖t^j;P`aqT [L0('pofj@![ ]5MAXlX1ɔ`Y)%^ ӆ>-MQyBP܅U0m%>Hc>L@, efF p 0u 0*$0 {!3 @pF0Y- '@<0`W(xS ^ ؐ`J Her`@ ް5`<PxT հ91< % E״n:@ 0*vQ,ސ @'ݿ<Kg70lA =@@ = b-[ zmj(0  `d V|#p_oGǠנ ܠی _ 5ZX$P GV"?=68BzM2 Ӏ[H@ u MB7BP @ 5 @UNA'PpN I6G}Q7%) Okm|Y(^!)i@N F p PH0O[*ZZ d@O $# F6 , pC hD2 EPCAY3iLE?@ Ϝ$. pR5 E^Ld q q@0 sEPt @M Mb;G@p@#a^* } FP2h<:@`!p0` U!Q" #tLp$ݎ mBQ1f;-%iAz1PNKʆ$ pkP@l@} Xdh`2 q[ h]Ď P   p M^*c^ǐC:vp`_50^||Qaйy$Tȳ.%;vxQ&*J@?`PN{$a&etK!2PNN{ ua, MhqVp VX1jrv>dETAdQY ^;vت2y< Hգ`s@oV PrC|KI*Bՠ@ [gGf8(uv0X{(|_ŖAE4'0 ZhŀnkP+H8p '! SA!@V@sttaHH#D\ G^x`{cş]~`cfRX?:@FƚX8D&'NuUYǛjt$  A|9ʓ>Ѱ:>z@y)Ct@<@C`9&+NtX@}'JTAv[% 0yBA}c ^PA챇zaX/Jya{ ' OvX b1$oz]AԌ.ab i|!sV"N;rנV0z z'&\@!* "zZ]?A>9%@`ǞEhdi|ycJA_]mr&e`X($68}1 ibHK@A6 ݏQ w9Uah-*+`$#Ƴ1 T`؇:cRF2QgnZպV(*d A E? he/(p=,X RRzru^"E5* ?nQCcpZDT =pKH4/΄hh`# vfnYe: V@ fжVcP@$ .$Q.8%Ǎ}JЁN ?q Gp>l!ЅFQb z@WAt 2t$BvAI:! 2Rvp^ X='b>HarZp< <F| i'vpBX !ԲVf`8,HF 0Jj@9 Q~pj u//>?qjCc "20@(яpC}(/{c5%*?BgCX:A 0Gdbz,FϢGm4AG, . 1@"=J%ld: Ҹ&aE*Jw@i٢| J&" 9P~G?J&:9Ļ< 9CPs)90 bRdWhTP@E=B .@q{KY &P@] \Α@ڃ̂MH]9Kq Oo;F 'x{jЃT?ZA^!5%b@KI+>AEi8 =C{+иIYPFr؂ͫ .ʡJ=>XN8y(ji@x-4qpЃ 8Y뼡D F'}YΒ1PC`v pBڂ}ۅ"pJ -H@j"|fiQ4oQ9!iہ:0-#P@, |dj81 y78IAA 9CϹ%#\!4 p:@h*oX<h((u-=Qz` @c.8 po؏ L`%*~" =tI; hȮ p3`@r 4ۅ-z @#@|kqLodxP̕FW9,p3-NPоh d؇d@8-Ѐ hM ,7xPrZpu0x>"؆}P+N `B`$IPx{hp ^8SkOP=J&Ѐ#s:PQxdhZ|"0(Ci4`$=(ЛYTQ @@H2S;Q更X@rv2( i xL BԜpUCHSIlM @XGChPӀЀ:P+VUk˅"YHPfЅfkpZPs8]z`0r!$) JIنPup^VzZ 8tUQcp0^J"  pЅه$cU8O{NM_B@" jЅejbXCPOk腆CsomjmUpxJa@V=b_I^Pt4|Ja[PaiyT mh{X^{Dhk [jDh{hp]8eH rXXkUh\*Bchf`]"T8h|Xt8c`Ypo腊j 4턴miH|Imh}\y[{  T, 1b"jx[d(C(Н|Xe^Kj8^\P z[,` \j}iX(O8ݕQ`dPu[kcH ؂g[faz a <) }@-pН8]|c:!',X .h|c]A<FfNj88' 4i{}䓚0eLxNeJΙxVe38ɦ{ 藖ڜD|9z!& <nh;cU8&fz@M1P7X@>DQc88lff{lmg*ЈyAc2mƈefօ 8 :fQ-`| c9#hJ-<6EyDP (#ipP28map(Cfr<#@o,q&3rع(PqHm#@هp-`؁* 2q#ؘv:&P| D'qω)fat%|rSȀNx@`tMo.$pm*p C}K9B!NHm"i'mj~Ejvp# ؁m Bj@"c8!xrGn_ r߁xzjowx|wrn/iuHLot^)x7B8T hywox`هu %߁l_7x7BCiy7| x(qQ4q_yiwwqdx}yy{@n'WJǟhHmm^S #Goɏ͟/1W}z,t0(Npn5|7A*r3}odHa6w*c=@s'7?p0H ~/'v ҟ'(00,h „ 2Lhc ('RhQ2eb#"G$ $ʔ*Wl4Li :a =_8! C$R+WhР"T%+ذbǒ-k,ڴjrqĆ Ql #Į7!\Ilqw-ü Q|x V8ٿ FB$#Ώ}vk4ah64,J 6l`ʙ& $\%,wa l |(d, #dP ly+C TCAA ctﱤ , !E6 t $8 r>P +H_, (Atٗ A*5! `$CZxՍ@(ATC;T-#$IMu@?!~p *P>ppA-VT#SR/τ $ o|>O[Jl^xЁlA?Q HQ @y`AY9 9( xo h ȁ* p0X4x5FC E]|Er#XH11hRtG.`T4TG#BX R@mX$ p?ɿـ?AP. t~P_2LBb# 7 G b{1{"Bp|#hP$ I$B";$2Dbi?а}@K vQ>0 Bb: ~A6set03A x `@(obW zc`X̃ze@쀇`J)`?; _rD8?jdcU9A8„@ Fa@ԷeCv^6оd(0-X@솃SH$g(0Es.d#4;|" +xiYAGUx,d@ PBIQVqLAC*}(#NY|`$ϰ()Rh E *0i 891  XR* TrAxB[JL‘p:d((tFl}T ܧ0s>W1> qU M!40^b `ybAO;tEHB["f'MtYe6A>Gzp@:1 !,VX6 Yqk4o)N_s0R <5mE"`{\hD:摈hxrh < G,0p}(4:ъK.x, 3$RK豏"4guE'P a@x< ;фBm.Ky q|"P CWȘf;w=/^c'ACP#8 >!r.N>? )H=8l`#_H.q4@B|Hr(h@tC(d9-(c`(x@@΂ "uGck=UZT!HQBC/8> $ &e4V[C0-C@:xB"&C:$A 4?L X=TȒp=x ;>pC<9yLB'aH$=C)vݏ<=yÝ`((| _$<m LBDV(ԕ:tq]G t-=C(C}A&@3 ͒ 4,8RDp lC> <499X9yl1ߠ Aq^G<_B'0_5`$OHx? l ěЏ$ 1C:֑.tB)9*8E 8YC8@U>=B)!h=B)Bt0Y?d<Ջa8CH@"dQPAIC>$êL`O@A(37lFQ`.u!9[)W`B+9C,0 <PH8C8HY֋<3$P.T,<hx= aS>aC8B =C8C+4 :(C> <q|=%#R][ TSٝ]lACۭs.* B+&" FCߝ H?Lp=1@xB>x9܃me|d9X^Bp4S+0ì 8@ 8AC0;Ĭ4RIC'E0?C.N*1> @DC!n,$ЏC)t_b@MALdEؤ?`CH$l>B)5t \X RvG(C݃$ĒKd= C0K (Q,,UAP5PC2@ =`^.D_: A*%;0=:3P(t -x$h]Dg~&$_)H';kT`­=(i:&EpDrn]n 8g' \.##Y@^v)98= X>n"8pB5C@i2zh筓]h24X80>08~B$44BjÈhvBA!T(19`0^ש=C: 2؃4e t.Ѓ754.D8:BJdрIq RA,^Q ֛$)7Ѓ2dbZBo*|2(ǎ*Cyq-eQmC H=8C'4lA,;T#\ȇ*h2D,܂?ׁ e&C.:Uv%,.>D+..q>bf%x1!7l>|CFK+w뻺 @4(4@0f,@ p$" ,El.W*lG0@04>'HA ,ݨ\kH,[-7CkT=ޣ#,@C?Bz`(:@`ʠU@B(54O4\45(P,# l!؍ l̠m ?l#@*.BUm$AA$ C:2m )Z ('qG$nFkpW6tB@8@@A#C@d9C]A*ĥeS1h@`Cbi&]C5$0:C{#$B/9BhAoha#C^/'' E]r,ۥRDoAEe n /' ĀI%C45_U6v' Dƫ q$<J'p>lC?8}60 D62]EH|.Tw:p$w'A)C&KxؑB|<<0<#(L+$#ATB;p' hǑt@ K' 1$$Ter@lԄ2>BTcb@譛Cl7Մ@b/6Uie-l: B94),B't<$CVrwf7-=07@OP=1T:&ąiRncp+,`@( 8<24` sw>$"6/%4^>GElv=2 $$GċwQ"h26Z T\T@4A'.܂14k}D?A5d({sU?p J.=z0lB 1}6qXNA2=gB@@=B(9Լ9$'D $Bj-CR; 맋 $aM&w1;:L /`p߮3AC[:bo*vHD0rԽKsĖA;'Ж/H4uR$~[X)=FmAIx5MyН4`|-Z804P|Ó{ ~ALA #b9j:1|cH(c=@abdon2d&Ц\f ҫbfiP0"AB@ IT.kiHBAÐpVC>K0(=٧|`52((@i':BG3I'*52PMUTA<}й3O(2!l|D09jtgX00 'pn6[{8 YQ#~Ԣ Jl]fZXa}摤dCPO*AL$x#c8[t{j62e`~9qțH>dtA46@̆ AvH X h8 9gfT}T'te|[tPbǟqѣjz}ѣY#WBlɡ@9kaoCo'V֞s}T0ktGT[5psby~PqbƑ 0X&hJ&YkBH8(! H!UHKN*DFH A.vpǻM(CP7طŀ*j`wocT"ـ"0T,(@| u٘ #/C{ 2|5;: n | ~6jSHb[:hSϺ& 3To 5}T`F$zֽ̓}3(NHjGDѵ}%qd$gt]@oBFlָ㮣-nli*+pǛPDɾqt3.~m" wakX ߦ&0r- vЊp$.W`cp W`A|}%rc B:˃o~:Q`O=Ձ=iPV;Nm_I#}+a܃<xwpwaiivB1yo|%_V :>80zʯ huCQ {H^ Hn`p;]}$;@ d7{~wIЏGA2g͏~#}~Z53͏v`oOٺMuo&o pү/Ol $P/(bgCFo@JHp `En@  @L*P D Ā rJN źB  p&T $! p  ^v ` x` Ҁx q @Җ )NN h d AhH` Q JE a r`xp ZUu`B ΀ tH Rq uO 1V@ ! g=l` ɰ{N$  ` B! \` ~$X >h`yq `$  t` "q^+BA H,  a$ q5&Bv (jNXlA^``f4&Mbl``N $[!pqeVMJxz$+G Nzt `fjgTn`G6RnPmP :Sga(8k E+7gR5W&v`IDDfv` V!Z%7:g:g%[$76`kS=uaZs;Iz16 x*`6," l M&Hv `3 >>`3a*.~C"(4ahGnZ3@b!znMȀ@+o!YP` aE&haa ';GI`'MA <hȡ!@.ρAa,fN Ih6!84CeaQav@d,jT 2w e1%(a ANDe4@vazA!.>!ZXwgtء+6 F4 >!ZbN[Ix)c#[!,`#IʆQN$ZRa`a}n;IZ,@aQ@?сPSLH` d&N.PI! >vNX!<ti ʟag;aVq{A4$`f֡a((uz@4p .pCЁu{>`Q#x` DZ*+@B`  "BxtJNO2N:A*r+ L!0]1pBSoGc!V0*kA-`>XAHX{A,W$3`vWh_ ,d[ϱʗ+a\C   * ~LC}v@8ϱ28=ZHF J@Wnh24Z!c?&Bd!z7 -` $x  (!#tC!EhY@|- x7  i`t~= aMن6R&r`:g!e4Nb`N@3WcAV5J`dpu*$aXׁ F: <!Wcd  No $y#>bH)X q `Iwҁ@ NbA@XK\C #·(Bl !WA$!X Aeg!&`fF @zK! `4@qy˦+ B^ [xV1 3ajBzfڪ׈a4r(Ā1TNy1U   "vkB:a!Hł Ҁ4& ;dc A9!`&gKPh?a\IY aa@޸6|XĜi`{gvO a$a_m*e`Z&@ЛRJAB A$a6. z]$qI-ęhx@<! aJȁ&@`Oc! {۽Y0!^!hVG+gӍdB$6*f!H8AlhWnDĻAFœ8zǛ`a5yZG[70(f!AL<`Da|d&ü&D {ldg˙imډb @&,bsBo=aar- 6Fp԰ɴB= :\ \4v$b`BLUZƘix`ANA(!剙=aҢ!ݚS& \Ղ^IZ}xZa nf׻C s j@5^@9|HJT-q4لS L'?,PГ6%UVU!CBnC+@\BBO5iU]yP ,P#Ɠ `C5` YN9J*NW7 3E#3`D[c>oXƭnp[pwB*BHY4@1ܛ:b7;t@>Nb|5Bĝj=L%鬣{#V5dJ0>OWE. $ҏYAqL>tSs Gpb+ 'pBW$#&-B Ү? a8B la>l89C'CedVJ2PgDB|sh89ԁ **›7CDB(0?PBE629@$cUQ>\u"tB`! Wi^9 6j8. 6VI:Q8Uvś:$P>)59+ O/-Vd4

Iy 1XD$R&`'̔ &1> 4E@ |Ca.b+|ҀGe&9HlxDJ"e صOXE0AB!>oইV`/v`FA+Oz)ǐ ,#E%uPQ`8I`<#(xF/@&td^@&PYL{P^2慀/Tfяsl rIP 8t+(,xRIÜ= ō~x$؁ t\]*   c2 $3bx56ͣA )h=䠂 v `G>$F& 60؇jcLZE@ `C24Hu ' "b9(q 4T* /D职ޖ*(A]g JQ!.Fk[!\G H0R|x,:O itxN<"6ci h@CQ>ь)(x0@"x'h Ё ^-;1cPu.E] Yl=/ /Elp$t @ef!0seXHG9J㲣 ,PB5&A˭AAO'#*N0ТۘG> dlO_U?0AVeƝl]~Kƽ XF8mXChZJ@nX8؆,9H9=dF5 d_F?4+a <:1OH0{ @ǭro4 Z= ceF07{8|@p|e a/cɧc13.S>p4T w9Q H,ӟ> C0v|kSskp>w|HCA/x|<Gp51v^Oji 6P@C0*a;C[qX,"F8l9 0 AJ8`0 wP 0 @G` w{p UPfɐ { pv #M-2Q& @E(P,ZII|pr'L,(`2WiH +H֠-'P`(pM@'Wp@R9C(Su& l'T3S N@J{E lj X2iӇHt~A!D +@ׄ6'  Dv00P 4F@H$@TPb l' E$2D80 `gzV҇EH 0hhE00D9 'Q0(/0 ̧+쐆GSP,LHwW} 8S՘hbi 5 1omt +LR?F0`@I `,X)$ Xㇻ3pv0ThliNuiP@ E@ѴU0pG@g aPNl` `60XKwi (߀ge  N`2YM XY yDbstyPY0X Mp*e `P4əyD`?;PAw)K 1CM ?0N0l e Gl9 D t10Xə9i1 MG`ɹF,; w yW\磘i G`( ]ovy':0.y F@ejAA (6` tt2ZN XI[ oN`MMrG'p%{:X )':4s4 0!E':{zi$NR$(PZ]1:@$psXJ;`;ya%0e  pX1 y o00ȅ Ȃkʔ6@| _Ȣ>|L̯%n gG6Hp5a0 (< .7.A@Q `yyy [@%p e ± Ncڨ ,_pwq[$`DpPCpu E<x j[E, jpX 2 gX ! epi qi? 8 }ca z>9 ^,l%}~@]t; D _q|ߞ@ iP`@/^3 4qgР0߼|vXX0qV-ɟ?`%QA)zcRUP': Cن z9UXP%YaZEAJ Snq"\y ğo0e+Tb.G a+eY-'OlsGB+G*XP++ه%*8ƞp`]F hnHğp3EC᠅&JT $2Y'lӐ'1 - IG<.=!UP8ZⰃ/:a&<pz ` 08{v cDj*: zG:]h {BV0@Z!a$bI ## 8)!k$ia 옇4q w.a*pB5ыUb@C@|cⴧ<x:+)&Cb/Ґ9` E/V4vHA% 74/V5@tÏʠ@ @zB54T*ց4d !%wPΥH!@ZQ`Ru76%O=T% 'p@ﶴD; XP`$a x>QQ+LJPsT8y]C[ҀN0; ATE+ҁ=x`F:v{؃8,)DBZ@/9(HaP= C`.tQA&ė t5E-hF8T R # .P(9{TÌ:+V8Q|qб hY%s~Beui'=w@521: ; v SV& (0ܖ(H4 )E)A @J%U_:Pax"OXߑ*L Ppzz!\GAPFv `xٻ]tlX#fYѠr2;%mɀBXAbX.膂2ۈE2Q :`mX<؇.QE(Žʲ0:* w+ J7 F! {$#՘1Xި<$5RL[%Bp {dB=Xb ̰AXg4`.p50. 3: 1yB;0>8p#"O t1Y$4,0`d & 7`|m+EP:P_0bQy _F`U n\A|G8䰀FQӡ>V$^ stj @E?<?4,y(A }HoI2*Xza] Gb6P$A0 \aװ6*ї^$$Q h@4-OH/fdx p q:'{x 7''n >yNsȇg  <@2Q $8@Jd{Qx}8P .Iu"Xաtg0S Ԁ<&3\!C(#4҃cu@oR*8 71#=8L8{3! )ڳ>+#'{XIxJ]]':Zk4<k%2"+ynQK{Pt-+SJL5N5Q.) ~(v@4@22 UhRx-X `e8|xۨmx}`CZsXЉtcyNH*F 7܂2;0ө'h'*B<82'0=Ua(3q"<^ɇH=tK3P[(|)I80 *~/軣 J!2+cCxaB|`(K>urCIH!CL!D?p38'B}88E0*% Nz1Kڀ*9 | opp^A LIЁ|XNA֣C0X3Ax2 ) X:tAp h$>hox:HtӤ }R`[ QpS:( DJ@c:d؇uɕA y؞2GyG|:)PaJ-8AH}2C؂t}p0E[phC ߽8C0-H[D:0D딄GOH<8G` **Ip RPPtUAG|88HAX0 X>3< }L]-XoH1 Y&D #aoH9o(Ț>Q0P |H<(Y`'e8`Z(Xu@D؂)cHXGRL|Гk*ۿ[L.,ux4xiXjvL)Z]؂R8 dHx6|8d\ U؁ڮNvx jcoxoX-j@ 8hjI8dw`oHV`zAehaxX4 pRH0dVmU0j8](HihrJ(؀.ЅcnPOboU0>m@ǩ0J8`oP]Aȅ ߁;Xo]8s`xрU~H0 *?sU0Y.C_aMQthS^mU]zr ]hmcȅ3`)tei8Qx xu\]07o'*` j ?XZ`(6 v`KXL`uIvȃ[Ci8I0Рe&(*]0]xaG{p^]3? _&q m _X. X IU0nx! (^:**d]hJf p8fb_ N)d\:(HXrw0  H#zx6&`{@EM{( xH 0 y/N P p#xP{"봆W|%e _5 0~H˵ٿh}6g/~ ݷH"8N]m8-@j:8Uov0&L!p ,``a 6`h(s/5 aPpB9$J'0#$ 0/D`! >hӾ~ɑ /j\EJ N\f΁6F$9{$g@  ~Ti˵+~)_9_ Nccug "A%4Hkb-ZlW|Pq"fଽyh lQ?nd4<定I$w cI"D}s>{$Q:\|K?7cFSSa+qDgPo7y]w- L P z-G Ϣ`#pGOy<`h~8K.] ; 8@޻v pzE ]D3xQģdg@ p_磟D9_ۑa~/?,X@t_`(@ ``A}պ-!S[(- ,\a u GPfXɁz&,CpY,_5\P q'E'b1r_:G'VhDp:@|Rw@M|዁C;\`쀇t"H5lѐWI:؁! ^|mb!ŷI5 Љz+8r >bm[%}9@ҡܢG2Rd^(<1t"".`foDy0)sk/&0yG9~#_-]YIHŒ#Yb.*D(;X!RI,\DD`_5$jɵa|=kD)ExH9hՆD,vQ !Ӄ$8 Fd4|`}Rʈ"+WZWgo=dNb` (Ӟծf =Tʊ],HJR2mm ρ|)j'FV$q+R5MP`_w2"*CYo~|~#z` zC,`Cv(NTC{u(C az\ Ӄ!fbpbC 򕷼 ƣ& '[ atx.o: ixcp|ɨ9>,7\mCpH60ּ#ިF,hR@XGl<- AE{>$d433q]ӹ$)P 9! r|ZVuC˂HG:wm a Pu_HrHC?Bm99d ŗ$ӅB͏p̃$ā<`!AR:C)C?[]!#A+C8M@3C2B?$+CnOx9430%&A!# Π.b)l}"(<"(] 4f>((R&]aKO#=и}C)4A&x;3C \.C8#>o T'|:4?1.d(آLA[(, C!uEB6n#+6,%J'B?#,!%|\)p7.GA ł'A 0$Zw9+Y"̂!<Ff`ˡ$M !<$1̃49A+L֤ e!>%>T$@  )$ $ > AEA(`֏:x-ƒ0xU>l<#B"O'(#m0\&ɡ`֑3](9T'Q|!(pfA%=j8`V4|A~0m`v@",O =PA8 09[0v$Q>~B#]FC8|*=pf%hMPH:潂>܃A0+$4,с=]&9H (C˝\'$2pؑ6'Xy܂?@$P7c$`r=PV.BX h$ZPq̂?xﱝ xB?C AW?>~٨ɝ&\B>s+\ÁB$d6hk?8c3lmmm)vCvϷ]Ai9^bq1PN+꫒3J(,^¢@,'( }AѵY0$߈.-͹J,'-0 Z4:$H*2)Ύ؁4h-C#X0iā6>>a0-A NϢ-`.C>tM䁬#=$&ڰ-;4"w?$]Z?8hr|µ'(+=B >j*w~+2`pbZ-"Ȅs.Q6x ,(}&>68 sZ9EO#Hb.|fe7IV ;EC,li Bde7+-ES74"@_+aBā!_a ĉ7~?d.#d}8`PʯP:-nwKñ:"B.6g(C?'Ԩ Oﮐ(0U.Wx]>$}A+C:xR0\ B.BN^. ^8_%j\ZcA7aIȎ r6/[ $"`<1m߬,B(pd=<VO8_179P6u$<(6C>H?IcdX6+P#hц%A^}9HaB~% X: `_lO e' ͂tA^/ad&l0w{7T'#C:LS$J˱[$ ā0H7!qAh(Nx!0ž#Ѩ*A݆g']zR>>Ʝ85[O}xB_C"0~sIFrvOy~ $8a&r 뇯DćOjZ\1%D44]5/B1i-hUu> g5GP  (Qsb\K,y] 1R{hL!o02jm a(~|9C{p$ Gs摔Ԑě~%/`şy™f{L"ACgo9g|Ʉ&H`(rrA=ft<KI ~|E3Zo /<`@A5 'E0qF  Cqȹ;@cCxП<%'E;(!VءANrc"O'$:#gY}Ωu CA$Ri5QK (4%ңJsA>&r d x-L';Vg#*|BIj0Q#PBU|s@vP!-PET| 'X.o0wC{]8c{XcbwYXM湐2-IH# `'s4MAaLSzLQpXCyftJ\:Ψt Y&: FF|1O(y(xIf@X%|fyXIo=no|QP%YiP;v'|.a{'8P(<oalOr$]AO@z4ɟP;n=jRJcHC)x: V&>c)ݐᕟLX$s'31c Qr$7x'Dp O[H$dxH؞Ԇ+} °1 m4xEw@?X)PG8$/x=("pn'bA)d_>' .-k)؏cp*yaܭc^tC2>ԍPX "J14p|hJlH|C zZE0P7Sxr&'GN)ā_&" D Aqɴ}!єf4.`F RBC QME)Hvu4@#4I͍8XnB%:!vcG'` JOsf#lOiPQ̣~V +yi73Y S ؠ`uQNǬceJOsFӝԃ!J I[q ͎Sjɘ?fEm'XSД5UΒT=DjĨq蕜l[SiοfxT*h`Ha{ejGq2u $uͷB<൩z =U̒ӱ:aV A1 :!c&{X/ PR#{<eCMp Aݭmdwhn`ݿ,CBDCnջa~ unvXD~]Jujϻ^=4ޣ>U! e_y/]ԖAԛ Hic:Ջpw˿~@Bكoe}_/w = z[>30 ~ A>+_*PW}>@(~~g^>_Op ֏OΏoO# ppZ +,^?ON)/!nsP> uo7h>P p6@ }p 0 0 ppp0e>`~ ѐ E "  $B`@t*`^@4@&LcGQ#m@ @*P4 ΀ '^ *+@T ^` Ҡh11qJ@b N:` Ҁox `  q0Qx Pn l=@ HJ 6m`Z @  V Ƞ໬ qqΠ 4  .R I ! r: wP r2$!a@$@& ˯-`x`Y`x qPqr+B*I`@ rpqhl*   01/ aȁa,` 6HAra 6Q F4s3s0U7`!Fv2-3ؼ0bj4'A@5A`L&ZtNR@w` t47qb`س 4G:q9aBt5Ta3F4 @ 23 2a& F "=7H3 d3/@P1?>`49RK*`a0 7`5 h<@TttKS2Qa!Jw./$W zAa uw ZZ"NpDaЁlQMS7 t! <ZD!T!Baء%"P`arA jUKp5Tv !Bf@,UUE[hrt !A`F@'r@'!Y x O<baqu"xV n!T@iH%vHl DNdA]$@ YNvn``,Ve;!VQ k!nւx$b5tjn69`^6Tafo@]!!+fm fh!hm`VA]suƠs\(@B6֠uhA&Tixu8>~d^UAaTMj eN $ؼx[riWxʠu dv* *6 C~A' C bLo9 $8>\!w V@H J <`t"aB aҀt#q ^b9vwaa @O 2nt7> Jx+ :a 9W8`<6,@,@Zǀy a|whw t!`oB! E&1v !  oZmR> Ns %`!o`: $M` * aH)`a0 "$`0iYaw `᠓@:*x`b¸=@LAn *@u` 8:`1abf4-> ; !6uDa |zI rA {  U`@ "\U >N<273T4IgOZcO:I04€r:i 1C[ 4CGK0lP;rS .T>lA$ܳ'H?4ZPbpP8N,O+F|-܂#qe!塀BfNS%$>@рqz7l#9`6@/ȕ'Є1Ȉ@"LC?h9(*H+PFk $S hI5q.VaUuK =9Rj[Cu!{|@JPˆe `$o۞\uBP? L^QR"Ѕ"#qQay9(ЄLn $B|HuI٘$吠OL 2)`4Hcpޞ NJRXf-Bܛ42$?ф7QXc,rr4a̋ԤP/}!P-LLG(Gh7*y&y1XiP1^r7|0P 0ѕ x\%/ QOz "iƗ e«VЃ  P>#NL 8`E^@Rc(dN]h APH $0HR [XH $#(#dI HtAHFR$( y@(/Y3+``0m-g89 >0 ; OI:ptCEHj_U' PB G2B, miBO qJ@T@@sal@ &@t3JŅSP,tȠ4: G3jd)T@@'ر@* wQ,p# {ˢ. QҖ*ȅ GPR @ A @-0GP{v|pU |8v[1 [ 517zˡXaiTPޠV@MP@9"8(` _R0Q)7 `А]p0Ȑ)`rA":vud6b y4+7Yc;5@ L#hƔa88r`Yp˲2=)q%F2,pNUZs }! 9+b#y,0@;xD`MP6\֨2 OF: lP$y9 WND)@(!  4;s@#`hs H7u V9ǩ P0 rUhQ:x /a#LߠZ!Fb ])@0AjTi['y<1 @ PO"G d`c#^ʥZ pG@ Z 10@ Pes 'Ah] lQF p!@ [@ @ /!p @ P `mZ [ P R ed5i Zo ` ecZe `\pJ pPC;PU^zPV ` ð ``* J uqڭrYh˳B@ ꥺ0 ӺTZ p[PZQ*0Q V[ i [ 0@ Y uWZ@f f5ʱ  Ԁ 0;}0`e`.昬 aCKPI uP"Б.;@ z 0 @ @ PERRZ $60 ) ( 0 J ep;4 Sp wKPr 𹠻"P) @ ( !V/p 4`E[ p'a"Mp9= ;X900@[#a !P) r M!+;1.Fb ۻ A* E~ c ܫL_[Z P^@뼡;"a %P89,tPP PL<r0,P)/y0 aa+MC${ C А60^M$Y\Q[,.L,QyH+  `+6T`(k81 H/Q10( ;&( Ua ]J$0˵ĽSr "ߔ@#1,+\#!6!J#PP"lMBeҬcdq@QͱjGE#&( z "!; 00Y#+d Wp,m+`y Ť6 lu Q*+!@ JP` PIհRd p^c=FXg0g$ps-Gw'i>{ׂ=؄]؆}؈؊،bs'!aً-',H٘4k)+ 'P rr}˪J !!۝NZ']a1,ŝܳ<! mܬM6׭]=;p;`=? Ѣ@APܬjݰ=PA/rC;M˔]-}DZ(ɝH^o^}B!B0\ ߽m0@B%~:͌!IEGpJ]?P-rgQEl`pj0W NP[}idg[@`c}*j L!_s$PjPg0g`;nXpq-zEʹX b@ڤQ3@j g.zΏD@W|!]0Fv czGr ..QMi d@%IXNy]n hKBdpOm:PhP)Gg='0[pbP4cn~[01c`ZP>uS b] 0'eOJv`ܰYD@&7 1P!ilG l?. Yx  BߚjPE kp)`А P;`I Ne]o.XR9EP5])ULz! ^9t`Е 8B.U`!s!VyʰyM`! DӰA;t00Gϟ'*B'_?|QD%@C^Xa7;_%crm 7G0l%='V %pCPͦDl\<VXFa8t`6"#Koڂ(ڇNٲfDxƺ~tUOJtg+m 0Pa-ZTT2d5yXpA2DCk ؁C֋Z:4Pşi-˵jJsŎDç\}3֋[XL9sohp"|9Fe(B~ #!^Z&X!ufeFp l}bo&[$Р C}֑D Q5|ib )h|Z!Ǟ~pA']C0`v/]0!X 7${XA cPB 4QiF_Y"iL{D XeX0k ^ r d#:tn ş"B}Q,0g#~[pl=%C%44 JI *'pH{ ڃ ̊>C&L9 ep{)ؐp4A-t $LH>br`v(*b)`~b.aHAv@_4Ht< HLNX2SD 'Xߨ䦻XPe@rR4΁~Bpb=T$@&+jPrFT `1Ct@ oi :܁b(A |%@`AH؁/|# b_ i``'hY0(A gaH4 #H ژ!8 08З% u@-X [րX(HFD1gL), A\ N( 0^DI1"0)Q3$ 6hB:3~0 +xG AEi<kA';6`E`N - D,|9& r0xe,P(6pJ`{r%#IpB0oH amm=A,|A NPb@>A `6q@ tYDN0:`.xC `\FD a%bC8"2!qxh1O3ЩgPpC;UX °-#ߑ a x#("{QX<2t(%$ ďXuЮE|>{`B ~ZbH8 JpP;@s8* KDF"' vp{L{i?cNu9P&z9 (g^u-mY" 9!j3)O-Nh<@>l!v>1$U}-!T chL {̣r O& L`ny&v<G,g gFG>XoeEE "bat0@ e}#M8{H@q(+<@Y4A/P!@O^! ܙGu Ф|l$HA4#/@gxƍ:AbHBx/Y@Qz-mmkr08h:rDyoM>$>bײ܂$1$e@jf@nGt[kFe`G(0W\ga^ 8 E .$_K¨z!e`< 1`86jR }1ЀCS9X@QH(Lh;88{?1 آb:7z:XQXPxRЁ6ˇ]p8A38X0<A",Ё^p 2`GXػG;0H <Ѐ4x{@{8 Q#RA3tB@C'(H 4 .6l5{perh?0|LЁx.Вck1 n;> <x0ɱD[܂Ȩ >[4Ѐ-ȅ7r,,rA9EN?4 +1?7Ӱe`<—w 1bFO# pZ*pаucxpr 80z11{8)Yu^<IQ)tJ& /@x`$ʸ,IUrxDк|HXom ɑJX}#pk~8xt WjITˤ s I(0Q?jjYYz0pN$IĀ"vXO(tzRN@ϞȪ<`V-Nt:K|R({-pԌ ؂R DLH:p0< dS'?5xPpJC3aO@"(QHDmG`J:R+@Hs؆cPF]CB o҃#EjpȴٛA!Vl6({2Sv`00@ >p-Ñ*ӛcPWDeWq1S|:[jV8`@e޾ڀ:Miѱp(Mc#Xȃ#j8 ؂*p/'`ۛ~VH%^yp)0|YUo|pVx*`iHqM Ȕu8L280pDd)b/躇sJIiA|0\*>ja~`[Д>rCp9a5LB*20b+01eds7jX SdA T>2V>#9}P۴o^zfo teR8v$hNP 8mc*;cqcsoYɹYe8pH.l̇|LZ|f9eK4c-pdrsiP78%cb|؇1XmXdY{YgfrhڀvO!gxp8h·l9'Zd8Nf% ns(p2ܗ-py]8z+f(np8m{ZXZbjl|"|@6 rXxр݌hQo6u`=C0 i}Ќ)H3hi(i {m)Hm·f]$j@ ^:P'̫DX [%Ln^.e>؈·}ȇ!4)n@o `|΀Pf$ 9/([O^ rH0FY58)Nmh~r?<'6cg <4 ^6l}=P"`pQtIȋsJ Q:J XȆd)X2 @M%!6\`(80dɇ̇uHl۶A9#Hh9z`fqD<ֆ~956 HXVFVз2؇!?pn(3|=kw. ̓QJF>(є2HU`A 0vc!1Pxؾ$!8 #؂C<Hd `G<p-bd/07#(H VbOwzLL"kL!Hy?v:t߁h&!yrGxف "؁?7dw H#Gc x[ (L8&0w 0ykwHwk{ac"!UjUywy&2('.Aqlҵ c.MKdHv%5GMWaС#aut7ssB:ԪW1^ȬgNx2tSGKcWʧE!?H9S9$䌔nto]|~|sh P4bPa`P,h 0ׇ'XyG8!``~Q H (cm`w/CMtj:3S> FF- [ 7kiSSp66heQ&dmM SL[$HNG :f~ 4 _sNl Wq:i@v0vG> G>q#+voTX60 c؇7O) ptȇ?A EP84l4=qt04 pRzçhvPnc᠇JQ]hvD0@aGM[h>z(V9" 54?7Zt64G |qTz$+'BP:~%Bs#dL r,Z:YtL4 <[z8"{l2$(7[Ԡ@І?{P@P>v+p$pB/"~(9tCTʀucouA *!}p0ZZ̘kPH#ꒃT|ɒC@N*Ƣy;8c$"(<P9? G8Ȱ1{C9-1Al .C` N&!*2L8ȁʐglpgISHp8h4PcH `C/ld.'1Gm H\Lruq.;ecT@ . K+{$s[Bw YN`EeC|c" ]H'я3zG"daLa;F*H(}ТH8(N>:_8wF"XcP F5/e0)W5ЀqfOT274A .62`$$\XSh*= T%@'`L)|\\ALx > ?!IY'Xa@%@%P@G89F*BPC)aID=T (@8d90$lx@*|H@]0MI8x=2ï} @p? 0 6#Ă'|d 7B @թ`j0:C";0$@ `O"3pR8 @1@D0@YX7?@ $C);f D H7*r{ 9^N01C2 H=(C.<_X@OX q 9 T*2:ܦ-B`&F |4Z8t X.n 2P.;C@p=P7HBڡ-"H"-7Ѓ7>( =LHA:15! <#B C:2#Ԕ?'W(A09JFX@V?)9tA @B+[v`+@V +\Y>`=¥EBh' N=`  2@&hGB<ŝl>d>C(6t,@ q|x` @aHiCx@P.1;ЁUA?ܩϝ ;P1>7<.,xB:hƦW5 #0B5 ԁ2؃41C8 0jH7&D͆}%&nUiɐ@C> DB!HB,_ԮZKA$&C5Y C'0X!hCC$7)> ./=.@B'SI䋪bL4C=97hSf^ H*p3ȍ@B(Lw|@@9$C5Zro$֊p$nN%oMƁ Z>TCx]Bd+9Ԣj$#4C82iC2XBbY&]/~XlCyDT$IW81P Z?m3L(n ? e%1P-zC80HXQ GDFHA'X]g@mV.AEp!Ā@7 8AnL(Y8HS,1 hHHC'쀺Lq:`B25t+B)>H+pTXnB@45B?xC@84|A/>0x>U / _dl4Z5@;%De[jU+'UOĿG,icM,5=vdC5C) f8j0@.j+= t+u{<@ p@ zl_ls EF7 Lidr+$T9C-Cn`=Q  0@i|"=h`'X`:C f_4nD T؀z JHtDV<=L٥} Mڡ@@, t6Hj\=؁$X'|B'lV, dp_$( 9<ܗYpN|>0 eK@U-EC(A\%= #"OlSdv!_s ,!:p‰dbeK+:/v'HP4p Ԙ:!$Sy(Bnu NsD:7xP,H@\=-HkTeAP"-ݢ|C>B*8AP8@449vҏ<:HB^P@XI(7ULx#3X~ X>?4@)2`3?:܃4I[?PL.qH0=qPZ8 P"|A]>p@p A $& -N81PBDuă_y 0P VP 9 =k%B/PZ, /ڀ@ ݫv $+G @?iMD@&]y0Ĥ9w 4G4`p[5Idqd {aDz{(`P`9(.\Ű`2ɮKW& T+@FL8Ԭ%B (w+T\h_5&X |X? ?^< 4I D)]?V$91t1e]‘:4"2yхgUHD)$VaHi<O DiN0ØN I`IgVc-'Sk mGd$oO&ق&E#[ǟGt }aeIi ```|6D#=1AH 2R(a ~(@L x@Xț{J&I(1LX&Ąpc8t|QeIg04@D-OO:yd`(褗N/ΑADU&V@vdd2^ Xܬ bQ&1{d t%Ipsg ` % b J4@K#h.M D%1PAt#PІV@M248̫ XDhnǍ 6U( n|<Hip}4`|Le Tdb4oiLk^xЧ TE05){` F1Z&DoM;8)L0B$pTcR@?UH 7/}xyD X,.ij-fЅRb'`#fq i2aLH@l ,4QHDd2Qt8E'  \(PW E((I ^hWq0i(l x=#3b&O,R&t|[XJ난 `voK |˲~:W;؂D[s ]mVCnM l%f rOҸG>⠚fZSPH`V4g3tl2||qɴP(K[(A5Plۀ/pء؇{,n-|o6H5P,4z̀yb= ^yB$;e,@yAgryD20Tk4yRgE+X@faolcR/_?1DXљjh1 >>I-~Iɷg >"7@}F@?? l'<'W| xa| pD8O/2ɝ* jCp&T`R/&^@0.&tlOfKpOCs:ap .l` |@ Ҫp P|!  @1i (-ʠ@VR.܋` n H$ ;3 cV   ATA; $` ,@?Q;8T< 82J$B b , `J:u>  !$!B$~ n2;gKb`  `a^tVA 7AAZa$iPJRA&! DJ> b L9Bެ ` AS A Bb"S^o`BL >>m W@  ( ΰ ` ^H;)7aR(@G4H Z cBbFtCɂ< ^g0:fFy΂\YcȤf Е >AK ܵ 2iRt`]aH@x#^T&H.T@)&&_i"@w&eAh@V!`!B#ةh@ mR0ϣeEiR o t{A`v !siu ZA h斝 yA m&VBLcBV@ XMZy`o6@v(@i S޶V e!X Qãs7Ёb!rAڃ4 Ḓc&AtC .N(&a ^MJ`r .t5!& *@ؚZHaA @ .5 @oDW=,Yl' 1&8TۨHU ~ @AQ~6 Ԫc L"aaAy&4 XN"RZ<@KXn6mϜB>4 a@@g tW疁:?>[ gvxn^{NǗҀaٿzl)}A:`VxR htaaD[7a!@6BwN p  a$!$fC6 a1VS3d'hՀ8aVaQt! @Ԗ;Nʀ @JZQiB,k<[dZ : `ZW0 jKl AVa h" \fe pI@* `(tAt` \xb"" GgNJ~Zl@Ϻ @)ewv DKT1@ da8nKp*-JAA ʠ 9Oy@R$a]HHA*NH GۗaUn!xh>`h  ` &@wx$>/I@!GaE IBd\T@}ÒMa &HJ`q+  }@aؑ#Ea\ Ӿ@u lZ$aA Iv( d oAf[@H6rP X]l val.Pl`0A EivUZb ywๅ; d G"_ ra Ebwi+@_'#`<0B/NX?A^,T!rcI ^:|瘸h qA$H/:`VhxOaD?oIGQ6Z!s@Wa4jpjѠQRuI0*7m aE pn=hxȟ"UE_@u P)Qܽc€iu,r)9{tl`R:A!Iƪ5 ag0 Ԭa`؀ojC *gA°]$ HD F:G! M 0?8U܅K*l5앸N&|YZՏ4pEL@DN;?`QV$n.df g +P)11sH1LU:'q.BB@s,6V9# l̍Ϟ9^y8 8锴 զCG)\ 8`x" e 6N:yPI+0a?E3ARQ\+ڳϋAbqIȜ!V0|>$R0m{ǖƙA u7A#06 N: Q d|ObAx@B A"f3,"x 1ъ 4ά,AI0\MAHŢ x?P@$Z,0#$tocx F @T:0H(Ii4[C)W* :?vq\D POE.! PBHP܂ "E(<€@R(|Hj`se وA4$ @0a $*੊\ 1:؁t$!}C0BXB`^[e7-؀$ϰ[} IzqD$6 2\v !'0+A;P=h PItOgI !Bt@/g@ 0~T1a 8"GdET 4@|):v &|9 T5` |A"e}41D 7CH !#9q fMdϴG jgZ pcFL$ xC @^eP 6OwͼDp) "B(=ot$;\ B H" (hLh RZdp@>Q\-G:AHmUNw!"^5 |gçQ_ATD|I`0WSA]H1g7Pjv0l ؂6䤊g,d;D4& @Gs'4 %@r *t@͔%9(bo fȇ(X #wA,P' .ASZkuoBځY!L<>#@pNXg+\@Pu(Bx:lDUQh4]f z‚N U"΂/$/379108|a>ቡ;P9(;>Qj`G> \d ydB:˃$=`a ,DA< Ht7,Bsc+0+0͐G3hC\9G>tQLBi !8@0;Q:A}!eg§S@!P]P|:NPŗL 2$`r`p GPFE6`"s e!\"z&s.`z%aF >g4e~ ' . wU JH+@8 1 {u%60~u Wu4g,@Ay<&"`!d0P@ }HwN9 r c5l6@sh `K@p `z>= t6;@ w⠋ ;RȀzgV߰0XC `v-rØ w H60 da@`F^q谋p۵F09hu `@ >z{MaFB)2up|` t4&y\ Dp 1f`z@0 %\Ͱ( Ƞ'9 ڀ(0!u` 9 <l? x F" GXՀ a0 ԰ (r%#y2pN +G0a*9hZɕr_ǰސ`#M~p  8Pﴅɔ~!!;%.Lp d [Qܰ G I 6蔔I 9cBp ׹`llS"i`7+%#jwS  "z@6bt$ - h԰ @ 0_+`j VԢY  ""@ C<߰I&G+4TB{dMP-z  s& N7F I:Ez a i: ! &@2f^"y00^$% `0nEDP]zm G)ѥ M0Y-BPA ` xZ t  ^CЕ]|Nd3 ;`ss %yper *xtU b~9ᝯ Zlӄ*@6 '  H͐7+C Uxԉl R*{;Pe9HT:{yH*caO  `E!wGk-0X IDyr (,HFu"e0  1Pk \0 wgP/Mzi; ~6T{` K PEG5:x\K:$'[LGt r= 9{#F(3(Թ*:u#T0,s@{PU:;,.фD6[[ta+X Kd9[< 6;}g싴[Nb'h; 꿹t\9@!kA 7q}DkP%\T0Av k7|&:k.|0%r 8N.ZE| ~ -kM\& EQ J[OPGoc Euc,aP9 H6\J'lA(`] 8QȆK-"\eȱ`Ŏ CIɓ(S\ɲ˗0cʜI͛8KnŜ  H*]ʴӧPJJuFu`<(BHC-*xjńDA'N̸Z "\0담 PQO KC:aʹϠCMi/Nl6Ȁ7nhU[!&B,zDQHAG1 ,_e4`p!B@]P(6QyAN$x\?d4pڀh&.iP3𤳎C%O?ިa{$u\pѰ8QE <4$h77Vp?U,P1PuHHc:A/TJ:l!8:`{l<<lp)!i7г:*.$\F:1N$F"B5POUPO?lN?0߬cAyN dW@;:c͔w?|(M8C% A"<tfv7M>фP H oa(8 0N$Y@6DҠ 6xppB 4p 4( xx9@=bG@Q#O/+S 6`hr[h. 'CY29[P@[.@ ᰃf|C"G 6@ 9$܈b 9X@0Tȿ |5$@q C3܀!pC8gCP7| *@ՉBcF "@;`܂ 8C 9cA[5`<7 zBƜ 'b `%G2&8!0aM Eȁv@ >o,&:u@-h@7"-=X(`9p GTc`4`bG<:B$X@$$Pf0Y 0~#;NF>| @ P  OH?1( ;h?,laXУO@P0 xP0`()*lpC9 AGa*Ҙ@ITTBBƹ(w;k<C*pcPCv a 覬IZ匸xt#ܨC;1  9Q`*pt|a(WHbp̃X  \|HCj8'֑2$s6`L1|u 6{.BA:Q\ccȑ0 8 8G *PyjPCftง4]OiЀ]4=8{lYZb:̣WDvDW\a*8V+TnM&7 ,*o|AL`Np=a` (r ?TJ@>=B9vhrB?0f#> T2TJsFFa )b v@ \{'Y 6A@ a/4-$ @jm!c{O񐏼8R8+*&^c<@8l #] G?İfϡt9:߹p@j˜AI8PaC"`|<$/B$f,=HXop($*.Xֹ>G_K$CQ( lmv‘f,r M/  Ew1x 0 z r; g2y"8$Xq".$ e@X5.  _T`  aP >BG , 7Pյ E` O Pw ޠ&Y,P=L}!uЂu~V@ux  .p @wIr .3 E`quD`q b)ǰB&،(S @ @ 3 p2e_f [t  @HPse P0 Sga* ` V_R ` /# URi04 Dn 0,P ~WA  @ z @YGBIP@ P6 XANP p ԘͰ`3@*3 ( Ygnp6a' `#UB;!V8hGE6XR~`00;@EI0#yR,GN60Ui%}E 5diMF@ |"|# T S>0v M`<1GG`'0 Hh@ ""(jj":q@p "940.%p @6}0yrp#8d @F %+Pp >f  Pe u *2M8U0p  @7bzdF 0 e|r9pVx$ZVKweZϤ p XP0 `@q@h<UEG!pIp$\+DBpfl!+jGGǶq!;~ PP(?GPFSW#:H6#6CPQ#*P vQb)=ʬ(0φZ`(@6VtE/.@u$R0ڱ&X5 Fp9$I 7>$Џ?4%@i`^Q"+QF"S+""J/c'my0m jl/F;EߖP0 U$b0Au+v+a$Ѷ"hQE&{e pS+  X{L&[ۺ8"{9\$O׻Ѓ;-p*[˺39OqmK뻂*WAX??! 03pmMqK ދ*AX˲һ+Ի+(x1;۽$܁'Qı Q ڻ\݄L,+ QS»J@Q'BI4I,@6a1,!\-lF lCEH!? ļk(P00kwaIa{`0uUfY*kmlF`$||.PQKt|Qks+N!Y\C+P XQ/Π2Ɯ6@2p2p4@Q , 4;Y  !) 1 ],(\ }[(JAlmլ!Jlq]e@>#ȃYacnK1l&e,p Π24^&|aE ^<0 Q#-E'Sn  ` =`aB>` 2پs,޼ E TN?T^v`>fl*ȌP0Ql Pp 2@ @ lp2˗p 2>ɴ2 +p Rf `p"pW*  ~ժ%P#e^,^ 2@Q7Ǔ[@p6!0\0#s Y1 qLPz,4#@P4 J.9̙ P P -p Ġ(1q?𑰔K5K(AE PkBS  g` K.kSqW? Ɩ?  ^  . H@6`lA/? P+ (>#0aJ (ZPQDa\ĘQF8^];wݺ{4ZpH  m*f *T ?r@cTE?M`.^96)\hf^zޥ\9~uK "99!CP=*YQ8pQ.^fhAVYO ?|X+>.A?VL\`Gߞ][n1|c #fʙl*HFZdP?KYE5ђF K"jfZrU)4b:/NdC0?#Ћ$˂ )g?67xQ GS`Ш\pP;J %xЋR($<J*#:mG} ^Fn 5q K&cc@%\pa(aR! QKI҉)-@$Dta?la<xH!l%zTB?I6 CM'SdH!9xTba$Ϋ t*[aru…[HxbZ/1`jPf(A \҅nx%["`jQ2`ک/ĸgqFni$J!Np!}9%G'VRK63^ Lx.`0bxqĆ •Äd?<-%8~09¨+~٦D~Ա+}ɢ91+gbqQ”SvNIpukD%pfqF&H9K}e6F,&P`I,(AFp<FBμ%\v%x~4id~ƙ#y-<f9.1# FpDErΨW(yyeIچ0Z8NZ1"r8gahgbՐ?4у (@2 Aqx`udhEHA ~ |w4[8ԍ 9[&b9C( "7@3DNRÁG90, ΤF0Zt 2rR azB ";@1C!̢-j3G@{(4ƀʼn8@dS4:-P ,遭(y)>y`?n Aqh$}08B[0G w(i*+<,#ȂX,CAÃHC҇td9%/䁨r ; 3!AlR+𝷰IĎ31 :價Ly%&TA), Yд:@?KxR[؀-Urxxf|pўXo, ,@֒[́{Tta]Y"43:0q=p<ʦ@# yU@%,qHkKbқSxPgxrcP#"zygJk|@ ) F mn60qЄLdxXЄq9`I8-q4Ҁ2HONTӮ0z5@dmpLٝELUUe I (FXyxKp*1Ctsqh c H8' &%ȁGє`-;Nb.L1XTT03L`J.Ѡn7SСߠڮ%C0w 8rjm-V5bUgp ~8# eՀ5ҘiҔˬւ5ԇ96@j*6 ` (:IQlqS*1H_r 5M9(S$xhP& eDU2.c@j1T(rXl:Dhf9(7:K5)ΐ`p x֚KI  Є$OSP;bI.8:ơ{  `kC 2͜ P.<2 bqxz,0 nӞXi 6),.S.o/,[U,?Sb~Ѯq m[v 1 `Á`W.H: EEH5~ۅ#}`ڙ,ؤp r(iɁyQh42̳ xq*uyT GpYG=b3T@qe z OBɧʷ|/ο0Qq)OrH=-}OC/]Pنn-LXZxe- HZgq $ }D~֏)XS(m p / PWE8~a @q(!C @1LT 888=fq`A1uaO7Z0 [ʥ 0tA D2pRp4X?)1(>D 8$Q%UZy%TN%]^ɐX 92LQ dD#^( hN=L f@_hG4Df?ff)å8̐B2xe2ibj0T+32Ԃ Ӄha(iz fn*gC tO9Lh(4ksV͵`66B(Q٩+iC2C"U 0)à^`&䞋.KcĂ Z?9̀ ,@Тz}uk 9L[j~6 ):ۼ *ٰ{]FB{0.LPo~P (ѫ p"a"sJ*hF)4A f-i Vp >زg7h,_p7 \`z/Р%N: 3D^2; <ó+<;߼% atP.^y.0pB %Рs $q!l^ _y_rh6qN]FU ;ϊerI †R ;}Nd[='9ps"PR#/TFH*S*",{FE8QJՉ"u6'r0QF3E@UD>)A/21^ܒ@*PqJh5 Ti h@T;bU- a>՘($=,b2},d#+J69 l䠳lgחD :|v}-lcZʶkkծ-p+є6k}+66ho9;ZmtrEZYVΝmnk؊69`w+~&If9k*75/h_家}~u+j\*w 0[7IA Ba`φLie 8 l@614Qc>1,!F>2\!C,)Su쥇;PV2,1f>@Sv3\;SC =}C 6І>4]f8$$(#-IS]U?bJsw9m;:ԝ3B(ɘ~5cXzdz5s]׾5 p$"2e3[ˎCli7־6ms^P6ˁ>I5ˠF7-otA 6 `y7-{oiwcAiSx@gd7$׷59ґa.9aN<{ͱg{0=;6>C `Gl+<=:<% 8:!:747C*<=+@aV]mɁ$$.B"IA+`C(-ȁ!$4| `8A-Ѓ$¡:9^&>,$p>C.HL.< 8b5/:b&?:1;C;=ZeCƣ?> B-$͜HC>:\$6C>C& 9T$F(p KC8>x(xP<9P0܃RC?,8)+9|U%IXC>9>Td(B[T&=;C lB^9<āRn#6C[F&P7<$_Hl*C>C5p98¡$fiCFbRC8f5(=&me#ܝ1:C>=ݫ6>#ݎ ACZޱC<yš:"B6xz 䍄Dv< B p$(2V"P*hh.$Aahyhvdr"(Z.h&J aaJA8+Ap7hnB? B(#T'C?dH9+#x?Bp?$Cm2+8Aj(hA))fieA/#p150ā!C?LCI1x !B2A+=Ôj,B>j4T%9C?C^:8*9gV% ,'څ]jc=x!H'$|>g (CTi)= d~s>ܕ3?`'rwZ6;k>&d4=+v#>fC?xZ 9CA9h) %$4(+8C2iGHd,\a(l=B2T.l:4,g:4C84B8C8XV'x1@EC8&f:X1\I99la*[T9X9^m+h-?"ӢFیC?(jA56<pBzB <$x=!1C?x#|.0D(\9l. 5COCP-+D7 1DΩA29|F<D(H2̂<(%+l4>?C+HOVf>H^Bio(H9o +$ZƂ$7*G&RhQ0_$%^p2JRB9AeҎ*ܻt3d*?,-1ͺ? wC:0cA^Ƕ ?1 }JG@g)Ё B&dRC?܃4P"`kE=4B:> A+\!PC?\x'o>(=LŁ "σ?9 9"'C hBd*/r5AQ%k,$MНfB1r&'p8HC2xm!` P& dB.C:dHjB5D?܂N.ƠɺZ4'w9C6<190+*ACz9CeS=-k<i C4hZ:Pc::jqy KHH'K5pd'+*Z#$>572B '_sW3H H3hV<B2ȳ$p7[>'`B(T<$ tu[w~ !,.-@-FԨ}'A7kC2toYbE4Ef32yBT?<`r$?܂g}?ge <'_44>.B:Tu+Ē"6`'x'.]|C&h63<$HrWd&A&g8J3$ ,P$>xH2C(T.Af&!<J0y'|2Pe)C8J M/{A`E=9#Q:|#z ×9=̂4='\< S3ցv1,?B(8'Cⷛ΃'@ <0B~ Ú!A,B.->4!0x]~?mBu?O?%ܨU?1$C(Bj A C<7@at,YY;F 'mwVsq÷(`{NI'QTeK/aDi(S6zK9fGeQN}4}"e=v_lVhDFoV٘j4V{ژ).4r@]j+8fc:;S+t达e1E AjݼY1zdL"Fҹu0NM;By&?I!ә3&V?|e׳ÛϟhDR%adT ٵֽ9sI@:HL5os:NÐ@DcTÐ~esuA~v9I<9'OxdgF1,#<5\@Y5ZQ=`8pJ<#E¡g53$S9h2IH:Ьo$!IKyFC2N%]Y'V'NйF`P`I.'Vhi.a1i k) =L@&;'NWdDU@%'2:g|d}Yzu )zyS}&p҉'r~J:L)#*z>ƪ⊩3{ꬶ.1}JjtG1Òl0{ry1%mfL:.Z hPȈCj3l~atXr#LxpQTc `X!,R9Q0=Q6Dee6 Y(8aȓYEev)I_}a!44hd9gȴX.>LknF?f'alQ΃6QgҸ @A 6{#n6 G~ruD.E$W/JR!$! /P-1xD|C qA[|C0聎Llx[&P —kd= RJC{>vfL< fs.u<:'2 GP-rQ?n1N\%1%M9Jc.`QWf1Kّt8掘.P3`G`PI1%^N'|{ȣ', Lsg{VZ0%c la[],n1 c8^{ H [hX ɈP"G58Ȍ k >O~S H.{tg xcÆm,$!3 !H@9RWVӛҳ `"L Xra7ATZ!bH/j(p@~H aAa u!^6H"Hbk.*j% ȡOWDd!Q fVB X#hA$a n!o!,kӊTLC (EALl K=FD$ aJ~Y!a,("& ("!cb)fV'$#b*''f)dk"//bF,cX2&)C241n ba; nphc|K!bCҀ|'!baE8b!ҁ"Q-`XHeL<m$$QCF`1CO$8j_/ DA@ q&puP@n}a#p"!z6O Qe[%棹QP7\߱5] 'o' FkD%!rh%/BG%J 4tN* FK=Kr%BDDOtGMbj% PPD4% QK! Ba  N J!PN #kTKuPS$% "Xa6N5Q@,h)c,")~0Ui XZ?*@_ W^SB cM@LOYGKiJJLSaȭhcO_JK/p do,l}D:vV ,5%@ l[bvYԀc'f@.6*( ,eG.s,wboe{xvo\Ts=sA7tEwtB^a AB uKua$ZWD UP"v]wwuWv $PGwwWx_7yuWDAAŶy@e+GDtxG{uWfa7,%wgw{urzg`P@ODww}sr~W}+~wuH XxX@w[xc~ xu%^`@'2kukwnu|W%w~ ǂY817quXmx:m}{8؈x:x3V@iP @؋x8`(ʘX،㸎縌x`$#+!992F81aJaXX 9ߘ9EyIM'H(CٓؐQmq9cVZ?Y9yA=YKYMِJ:yHUNayY9Ź `^8 !9yyY:yyZڟ% PYA 8=A&0Ơ BzY]aM7:q@or৉:wo::yV:z N`l TqV@ z麮:z9Z2ZAJ {[$@ ;-1;5{7%;5E۲rFQ;U{Y5J*]{im/ϗq}q}H{gD7*{;[8`-`[۽ǻ{߻ۺͻ{  gzT BbI@`g*w{78;y5IWA3` @!^5vt?c,l`-Z=>6V`-@A6>#~+`?U|q¿:'q~},* `>)U~M>_^z>  "p.i@i@cHqL o0?e߭eܭP/b30_6 mMFIȝ3HL'= 4 JC '+VAK~zI/E~8FD`*bhoQh0(:t ,T" *Xpȓ.VxxN"9ҠȝDgҜ*)PE&]UVfJu+Q[(v&.THӬ[8qPÆ3Q@iD:6J?`-N]8AGRJTX0V<БS<^M:l֥l@(LEP$%|bG'R< ZIz%fQBU{5<ªA2pt@ldI"B#n8µGC 8h;Q / 6f<_' +\Zy4XW wx!'όU'- Sy}G|}םODU?4?@#@`U+ض?$P @A L8wMwgCgH8LŸG (AzrNIgdT-)0PP2[h [b@8 HQj3RJ@=UD}pB$&O;?PABRM7:A=ÇR}əg-M~::iW.k/B-A 07-ͯ*r?Q# ) XECf 0Ä ME &`q;3pW.e' 8?P LB`@C@bHp¸f2$B$ hI0яX0WP$(#D"tsxb Zhna %`8 $XAJWzh!f+pE[PTI;[?fcMp I jx[{؃ )m?(&r`tJ   p@b'A0+N؀iZ0Nla`b0hxg_=@L80P C,-A(G(0*z+(p D*q?`=e}$ 0"PE?pz0ڃ WX+@' T(Ɓ ^p!r*P li{ *۝E9I+ыj#gZѭiAy QacynA;yE3>0SX0`@.a-( 'h7Ii z> pcH~ hVΜط0@~Bvc cJF zL$5! 1X)iV$S.雔I6 TVnG?  P@*a@ jܣLpA &Bj@_= 0(`8Ch@ a B@'JRHg4oH@= 5  6P{? E@}TpA|~`bRܥ rmRx ` A*Q7xvO R4 #H*[ E@ {+F!a.p#[l70*PT`\bG8lx".fYq"FUXbxD&qgӂSٹ19X{Ѓ.'CPp#E1@ t(h|ϫ!р(fyCP<E2-XhANxu01f>V4Kf/[ZG *p@p !0!k%ph% p<#@ 0 <@m eb+"H!(nD@pn(nyi 1CԠ??p<`pe  @ {*G0Rc02_4`% >@F ]pps >p fGs7^VpEÈňe+8P "Fs (4_G6q7=pƐRG*0kF'tP@@u 0 RP / 3&_% %7a`,yBI /`P p X lav鋟(mʄF( p  d '`b?p 09f ` ` j ܠ 10 3 < 0 pʫ* *7-`趣j" `4F_J!'`( ~hQzxDlXhnɀ|p7Ejlji>%0aі٧ *fg{@G $iEK)zs%(`02Pr0*? P _ p瀾`M@Zpe0Yꋾ S93I?+PQt٘'@+PyP@p % g @ X'ʷz%{KE14 `o$B@' c \>0FE! _9+3P4& 2!>!BR(@!('S @@ _ ba[[z_@; P_ y݄Dq6 > wsf ?N!{g, Y69 h`|Ck/[ba.! G: _Ϥ:k䬴q(M+@y༭@  `P# P LePt+}X  g  pD vEmno;?,9@I.qz] k 0Fp ; Wq \K\vc`} ]vV0> 010F,'%1!%@wR0)7 PIr !+pKcp!J>@|` sx$ >Ve 2K5N`" HN-)P_z~u0/P@ e0S-gg[?6 !p pq9G?`E@>(BGIДFvy1P v% jDTb4Pvw]V[׿epP0A+Pp.  [p`0>/]8{πTTLǐ'UOP6U0UP Tmr!0T@ pÿ _9 m.EaO[M?p<0v?pf17#5u 0 OFZii`PicF0.dCXbE5nlH#/D2p ׫xKC 3)QU Vr*8^O+QzrO{YQɕP`BVJpÆ.bW|x[LgFcƋ?~`~Vy[,yDa}XB>{,#ArL}b"a}}Fn9!c[Dpch(<ܽ{kc?fo_80W8Piɇp$şRIF81vx:'gdК#fL Ɖ$e?|Ygz'-Dgǟt8n2С| wog T&ǟs&KloPIءǞ|gV$G? |"L@k8'@0U~ e,"}zр,ƾm pt"c1x 0Dz`\g=LKpŕW\T0aWa %)"@a+B=n8@f0n@ő.kQ+ AJv4h*hJh8iIgtC0DJ4xtrrmdti t("* `oWQ@ YGtrY'jX`<6c)EQDs  Xh9*$u@G7Pp L]ElrGDxA!gd?BWjܱGF{sdN 'ƣRp#G.I'63aAoVРsw](ϩ <"$pl3 q۝8#D:4 Xwm&TҜ*o( e$;%@~ 1%B]>@t@- @cTaHĚ'8`hD8ґ] dS>|~< 6: G8,4ꠁΥOZCЄrmiEJFQDV4^@$ZH(r&:!+Xaa.|AGZF\ jt hc\gPTI $%G% Y8JFXu,YZ?!.CPfX.4@{-9ÉK[ּgkk VavqgyN7%j7I9X3{-7µ;Aoݖj+K" ?AP$'xELmЍ=LiJ_"|嫊WF(( Pf ?Ck9˻^4Ykfsf89؇1bgg1]jXZֳu `@ǔFslkFVY+ f!&y lhG[Ӧv}mlg[۾Gf}af'fwnx[ |G(@[&olAxqJ6n/ {J7\U[iY r*˃sƌL2jFM9js~ pLˢ:Wq0A|nd"t{Q_`U bߞJȭΟtpȃ ,J~$#|]228CD:Ȃ ?-S.ȢʩM~D=}1 4Nm1͸򒟘Vz)"M%_aU B8X&@O^{obG_~raͻy^?!,O`3u! Ҹ/0#h%}5@20(ps8X:޹6;s  2-RZ-c#G()YWx0 8;p=.<-#0G肼h2->kx*0 0[XO`V 8N8:$qZ"y1C+.B|dB|8,=@"Hymh9Bi|sYC[; 0Rp%AS(;EZ<ŃHz08Ah5[xrp$(pN|ux3Ԙx"8D{j0E?"`({tg (eCizxH :Ap`\T_y8+PWl\2q AT<"\p؃WppB, PBB8в4VN#IRl!ށ0~cȃo}79KZ4DD$`j1xoЅp@#`{jDnmz؆u 5xEHx t$L33M]|eW |M=042H,h+{p|`R`)0pRk (z3(|Op4͊hz؇sp|؈p_jX~P8tCQQDrzXL|(X*ObE:GJ|3<^ m7g`pI4I񁜼5,\@PI|+@8,@W0&7edcȒy,هQpЀ!/eS*Ӹ!0Sp*HyRʰ/́/83R"-(0G˼zO`|Vos؁Nt  >H TIpԼKH\kH+9 (S3YVF/R3=͵%U\Q'(opfX/Qv5́*HdV&Hp! 0G+p؀A`U\zdI(L4# ۈH*(I`E#hWuhDN&4p;0ZP Sa{G@A BX@GlPXAB7TWpt +  -R8JJ(PBh HAY(£8llqJ82Z> ^QjM\DYcr8dPH'A`8~F] WPJ}DdO&tyKUȌVi {8 @~ݜ̀%Z  0 hhC`I{ %͇tP9 ss"Mm0]C!zPhaXXojnUP{PcJ"Kn_.xBX3(v%;bOe&ƀVம ȁXdCxX]!@*hzVM~TZt:dLp +X0hQ0}ؕtiH{uPr'w z_\upТN!{@V> P3A3\@+oxP )HB0T. f03pX#PЗ qtlDbCt |(5K"GH#(Ap(%9*gx'xA( hPpCPH{8Cxh5|`"`&ظ &C ixOPTzi臙c[i8LnMx Ah.(uY8󦎍Dhf`{FHE޾*8$$"p8~A0]0H&{H"븚ujfjtFaWt w{`UPx=~c+ILHVZw.xmPH[؁Ae:No8^EMz8`r*H;q`}u,hϟ] j{0:2>Q+0,3 S 37IT\]fp+5@ ^8¬@hN)"! *t0 GVf|o783 Drи p3Otx j~N!tdX|ȃ@ϽL:xjR/dr8J+<)]p#`.Ԛfzp&NxeQHjv( Hw2k8zp!ƈQĊ)^|"lj7f\qd(*@ZnK+Edߴ4J1L5x$]G&HϝR5ѢH?> ժ֫ Kn%)VÊT+ [*,A_/VԨQ|G=XS6"o3;P\ϐ0*ܷG/W0g/4:+U6*TIoydT0Xەi8yGXk(ݽ-.^N_u6֎\%b;+=&Na)\+8p/@p 8ࠐ+HA #X\ڥ+\/8/VA |#&vA bƁ  /@ z[F1DS-`?<,}2iy> ?"26NP,E_B"?x4]l\~^ 9G3TcH&K x ==!9r=_A>w k`J_XcH§AJ+yLaz+lO@ ETM3(;<\TS%|Y: [RG,4_L>$]v:ك=2Mv1h>e._` >4`$,|r Cic>4aL?8 *pn ;HsO8TPG70M?V 93 ;c'#Ѓy`J{`U\qƴE 8!!HQɂp+""*؀ 3(4 ~ ńRUAFw]/ T * ̨#+$ 4$$K\υp% yz^#hGpcX:! OUsL```D'D RG)pS BHedA=1W#'A.h@W.%HzO 4D$I=U# =AT蠇 <6EػVHrUTza^X@EU ` (C) qQh ë;rjr#0ɩ!/eA~%ndeX*jiKZ$TG?-Lch G@e(AhiK[¢;i:Fe?zс-P#CiET`N8* " D`ŧE9IDX@ax;?3*x5ѓQ$@t88!Q + V (@f LH 6\C! VR<\F^rG:2N Ā=`u8—$yu7[!(D_ڨX'  ;(DI|HꐏuwG::@AfgObJ5cH ?Q1! [~`B+`'q\ 37`*o  10vjRъ0` {CGX,A3$mI:VbuWnj2  Lz| ('4}Ѓ B6+k')ޫе=#؁4G+#@8X|#$@p)b; ((HdN=8 M0’c@=;$kEiY_-x _'[~4l!Up`n2:@L`kH+کbp)s >$VP" <8  <\!^%"=l518*$j@?!#xP7}ڦ_kG(I#?BL#9H a_Q#`t ;P؂$0H _#rxP(CTH@.@1 "臽Cj&$Zs4S1™ Hla*>G9l`zIW%``PǞY4pM-jo{" XQ m pNP<.o<ī(OPU[  Py^(X hO?@2qP ȃYH$Gd{ @~ 5q;h`jG81:0$|7$= CP@' u]H^eDDȲAA*B<+CT͔X f#*C[@L (ۋ\JAUS#A$HȲ-p!/ Ā[vP* ( @C/`,}%5Vh9|CC$|24! (9*L ((@A V P AA|AAT, ;  D{Q8'b5,?݂?4GL ?04(M] 31̃?BKy aN| 89V,B d~E @(:-^  F-PC/5EoQuYC C/1|@ۼ/ 0@\8,l 0L-1X5?@HX$.C.|kФM0P\FJ4q“9FD?H T@"H7Ă* 9B ?59 = (\J?PBz@jpA1(.,TU ఍aC1@ ]IDTI5\JY?5ATF+B\|/T/8”s58f ,<5o5ij&QÀ4 B8.#y'׳8"@ <@p?C9mC'9lMA?>$-54LA $(tr8$D#}:Zd\d[0@A(?4*8hL:9j2h+LAǤ1rT)NPå6? V4[aB$ph,P 9 [ǎv\C'?BX):| !h!ۭ 6.&zP !0 XZL @?TH &DHk`h^@ BTF,OŀXoF@X \ĪfPlR,@R4l,l'{c!4蠐t l$+Ă!dNC@ G 'B)$>  ? ڒZmݒ+ `8P,#̩AqJd,YD ##9#郵bL Bd|(HBA ?,``Ш/^XjF%QjḒ4m+@?VL!B(` !B^Aږ ?o9ުB؀n(00 <0 hc@B,Ă$4- pB,A`@H-̎ިfח)bNm X X@ UT@[I!X@ X@ [Pq@[h TTYTt X M[@jb{؀lES2DHC`D\r|cDE+ -X!GtbЂ!}YR4{m h ,>d7PlDӵhUf$Ѹn:} `B&w20]@k)+D%rHMyr`;DS<3*r/[7&+G{tqhl@pA8A s/r[(It| (.C,;tDX>APCG>2t  {4JjyZ4DC74H&L1 栘"{/ TD$Hh&hN6 `BT[[@ D[+n5FD G 37.(=i|E=St|t; 8Q!I t'~c=llOCpkp,lnVvws;Usg3D[< j97D5IklS77-b/l'Cps;GloyjK| haf}uC7}Ww s;a7@ր3xoDBJSx[cxksx7D $@N7F{}}󷋣xaxӸs$H#A|8qT#y+3yK.]s[8xw6V@lJQy?WP7yy|[9FwT? \_wRdkq|wwo%?{8w??@OO4k7klkec8cW3wv7>3z(} l@vvzCf3ď}tWvE{'*;DO~8kOD~@oJT 3vYE,y"]*~}{~xˮwA3I@08@;kO uP``'jqW|%I&zq-ND-Aþ0 H$cq[t@,.z/N)[%7(\#1wCiD9<t@8?k@l4ktyKH-0@lA8Lo@lWIH4/n`4bмOkDR<ǞH I[;,@[7]m-!D{IR,‚&CD +$'ά]DB"!@KD7hǻ1ԏzct*B)R+iXr3Cq;3)C'{٨Ǖ8%YDp>%j(Z*R,wc0l$DWN@6 GV&&iִyE4Q3N6Q޼!+0shTOt#΢D j) 0`C'm0CJ.Qedn!(U68oD̀bֶ` UƁ `3F*QݪF/UӔl•FԧR~ă)>2cA| 夂d+ z*")H%,cЉUJ+>Y;m~Tv|%+.p{kQ".p$ PO.^W0!܃ =DӐ TI`hk.(^x!'ǫ+4b HasDrES'$&$ 9 6B"yǞLd(#\' { rF5Z(`pBIm:/;!UJ~S^S*e +4P ibG.y0Vu`Gu` hp0iЀI̋18hYiV7%NEMT$7i]Hp7̈́QL{{BA:5GTxqd3*)A l`bH`V^pfp+ 4B|aWpq 3p n=ovφ?P 0@l *(!Bw A`< eQ:blFp AL!6 lfr9r lh Tz? #24m+ &oTdhxALtXd( %~``cƓ=c]wu~:Q!ND(i&*<<`Y 1w+d4uOf%T-GXR_H#.G5(mȉ$8BeQ~j`v'v, F&<,`H@[?ppJ`]쐋G/( /,k8A"`Ty   C@?2/9UGB$l G+(1y '8pnR%P+ ` ^6 V.5܀ R pp $C*1J' 2+^f 7xr&H&w-" qq(ʀ E C"8 A`XX۹Hя| KC`1.*Z%̵aP$@?J[\ƀ?)LЀMw8Tل!_'x?|`ĺ;THu;*q40 3E0NPyo|) ao<%9! /{@l #֮|e^ `)MP<@Y:H| (@8 0pIV)C|FA؛p8@:jǶL,i4 \ "A  #. ,   "aL.2@z`*a@="y`R: @V&.4 L`^Xp! E,P'vapL ~Ph@!`A<WTpD d<@Tg ZAGr`#.N`aD ,`6~"4 ~hEJ* I1b`D >` H'aha4&!!*M0!.!O0 !$ a4/g6TarAhl)FΡ`ta <F` :t@as λod+# ZY8@!`-&AaT 6@AO`ar@ br&g$,DX`)RML J`Z!!apq$&Hv> e0a"A( :f0UA@"0P"/m1LSsl9^ ^  n lӝpA & ^AچtB0># #'՜ fq |ڌd^iie  =:9dB&QHAVA !TaP!$VBGC[`r(&! aal` aavaVa_I).B a`ar!Ax$f<!u//#|9Bab ~ : *2O' ~(@`~%}UW#UR$52u <`Id^`F@$UU]`hwa_h*,̂d`++zf?f`V5 faiGrP%af J` ZZrx X@ցB+:zx A8u aa/0eb@8cQb( [(!b6gOlfSe?K%vg+ ɜ P0ף$~VfD2"J0wj LZg~`kլln ym.@援$rViLa$ 'aw ()v>$BWHt!!aO`!X@wWaGaxmyy!z ,!DGE|Gy e eMlH@ a$#BxgWx`௠ !tDOW!9$C)/82xW|$-z:AVU% AAO5BRPa<0S!\EAږ*v66 ^L@^A 0m;j??:?9!pb)jJpLV G#m6f@ Y+ȅ %! HoQm J GpDl8 ҁc':@t1aqG8ԣ0`.u!` ҷ@-d: & @8 H[OqL"xKqYQGƔE=!<η Av 40f`< '&n!Ad6{̧B9M'a .0 ؁4 2,%]ҷ_e]W3|Q)VRtl$D}t}GKE > ^` `62㣝,DATtv!< e^ aT2)u@#p+ZA 8&N 62cL!x"v ,\Vȁ `UN[U/. ~斘``F@PA#6"H jƉ=jn ƶj-?pnOd\ț /%R$>[ ϫ > R6N@Fm@:@@@$\'8H [Ɓ ${tAFC#*x[7 Ç-QR iNj8sbß@?1>x0][;tNO6,4:JVQWO:0G9ʂAAׯZ `῜?{*Fljw^L߆DmQb2XH5qIe`)PHУGGB *xQ2Ɍ}CM?A";{tH0btY! /Z|ՁC  k?aE,p>| ,[!"p~\@Ys"PcɥH?CU?It 2?-TsF0$2?ٰW=C3䣇 h0M4r=gN_GZ 1P /{K%R0'/p8 . q 8 > /VpD *V#ECsc]+J'+p Prq 佉R *7,.{XpAO<<`Ad?i|C:5}a!(d *L[#鄓@7u7W|A>lA_a =$tX?$!TID3}F(zCec*V TAE80?h5 ! ?TQBC;`k phP Z=&)9dPe@$[$ 6Zi$8AK?p,I?pW3@G9L7}9dN?d`P,-Llq1,B`|a?\!=ޜ19l }Ȼ$4pjl7FADs(- 7* ° $@j#'P?>B!&/aVa{h/nw+o O9lxQ'^"U&8?0)WT\ fp0b@\ hզhG㋕hE_"Ʌ@Vjr%=puPKB >@c%jEkZֵl_QD{HIH@(%hP$/&pG8I@bC"6lG:Q {c@2fH;H $5wj#@W/rc f:Px&T]*% U-ӑ $@7Bvq DV80;-fƸG?n_xPmR95(} PЌ|0R4+ QTȱg4p39m8t<(E- 0l`Q:zLP`(C:SQ>H -|x)WAp؃m ȍ4@ZxW L6F+{ $H.z6@xp?A~ceaNo#x*:uNV(ȣ#p V@*\=Ay!АT8M*Tp8JDŽy/C**2=o,A~7 O8q'76O3hA~ t7a492a`pj`P a~r-gy{%fprTpG%2PZW6@ @`7/ЂXPT@r&ӆi``P@{B `&[P  !RdExpe Y(`N+0`g ,|py_pzX+v2(c*Pb(Q0D'{ +{?8 6l".SޒC`v'p .UqrxAl!H f@LWP QVj(xdAM /bDDyix6nIU)&H~vAyF9A099+@9# *hG)z)THbP@ M4L59iC%D()yTJi`Ԝ|8։)*ٝ6|?i`žyS07n@ hYE: )yaduEjT:aى:yGm7*q6  pAOei i㉒+IёѝB:ɜT@1C -6G^PRb FԐ[(^Wjlڦnpr:HW8:z ;Mݙ))ʒAa {ڦP0P6zڪcx*uʞB(MJp{_H:ɗJxQnͺ6Ahi;: -P&JsZ~OUGuè9IYG:Y*;1욇x3o8HJHoJ[$렍 ˭  [y 1;p{XA_j&8= `٘HJo8۰*(RZ)d`SKab"0@("T+W֜FڜɝGJ(`70GYZ& a.@X:ʡC0 x"oG,gՋuhL.A4<<з<vOlIY9% p S NxP P/;{y*[~9O9ѷ[@S99g W6[<` 6˷kE@K-Gk׹: -:zP9ڐ9@3W`̈́Q EP' \]p[IIˉ p>ae˲z\u ptTDS5ALST\œ30uXGE ;`^@d`du9J#P dNiz@ %(%\\v 0 @Ĕ0>0L< f ?q @; A[ O@ "S EA0 9!PG[ |pÕCE\MpAVő_Bk+ Ͱ` !8A(s4Gut":cEP mr-X0eIcP mK:e 00J9qx ȐBi:{p0bR/3}"\ V @ /rM@ X8/ 6ՐQyӼ&ӉkR0 , )'0ckM6M9\;m`iDwnl^ny+ zpeNV fgR vebfݯw歶bw,>|`P `u `} 60V ]GӲ `p<$Ǚa3$6)A@xC@(x  4+( 0DNJΒñrLW6(@, °$`M@@1s)y{!ǰIn#P"a_` @+ cKn^'7b pI4x@$P$-` | F0Vn8Qn@ `?-O$ =@P ."; UԈU> _֫ ;MC8鵏u["!r7z۷ tˇ.}p:u+dFN13e9_LuD F(cgŤ{y3R᛿Q<˗/ ϘrV\:oݹuH;rSb[UBٳ?tIVXֱgꐠ:s)&M2#J *. Pşd˜Fj(&JHt dZ౅xd`!+Y?\g0Hl hXNiE|,5 >IXHȹB5 O61^q#]|x W\b%)^iGpAn@G"R^8@8pɇՌP!T݁dp0Ys)RpPmNB?@ta]hJ!QÃ+^ zǛ-48B2! "Ј*t vA%#T`OZ  rp{b#0؏grcn56范x#^ƟG8H8:8ƒ Q0 7$Hb``; )]DC/ABM8ۨztY`9J~fqIhp4 ƨ8A4<@[JDvA`K0ax`tc{T罡+tzCru(y(.'+fp*Px@ J|pGX{M1D$U8#>DRŅ DW8 vD`/",g!pD@߶'|f%xavL hP!G:с{/ y±g0Bz9! ؠ(`:sŀm}ڋH 6 bzR֏uPA$#H`qd=haH.әB,*,@ap Efq&=l~c bXcҐ r X!@^hAZe*X( R"00r9`[җ#xp"tb(*$ U BG+]ԎwA &v0D#" ;@Dм/j Sq4r~~0}AЉ%Cdd~@>UL f#>=T > RC؃ $'Y')MOC< D t>{?={`B'VS= CsS )$ŁtBKB #Z_Nw (U5 nXO)p(3<&+,\pB.,Ț 5Q 8Luf9 '@`j)8*Ρ] `7~"'0&@DAT m,&?>h1/A@V!6@6b Zm88tȧ~/sȃp$˂V A.&qym5&)ـ @>a x|w獅 F9r)p}jb@3 h ?SNP RKQB@̳ |aPA|4 @~9pcRHmt.8ȃ8*cGܗ!h"{8HSl"u2\8XȇpЃh (##PzH]H1]$ %vP@+p VH,:C4BKCˌ=>ԘXd 19:JƔp@-j6JH h(HrB\EOX0}0X@(XL +<`/|x(a(ƌP PЀ: p,`Pv#PuQŚ@e=@.1Or'?H^| (nz#=CyQ 8HG 0 dC>pW53Y؃[ x.@XWx5Z{cy0F=hT0HG0.T^pJ$$0 t[Paj8$c[HXQK*lx]P(.fNkh-00f`LnC;,N)> \ b }\,C.Ufe)p!XB0H!Qp xhe8av+30 Zep@Vn(؂ڃHܗp^Vd p20QP- =AU28l#::+8 X<8A7ebW-Hh8HN'p&HP: KA08+bj@Qi->{ XY8pҌ` 0p j}`kNKqi  X ׁ\qbVO$ p0M-r@ #@Ѐ8qBrGMr 8=7R3 Y>o%阅)qRX#/qDe7Q iP 5bZ:(b(vQgPveOvUI{;ef~q@d 0~m vw>,7_g}mrvwtOww]̎yx8RFxu~GOex"|yr~xOj}Kt2'5Ze_jjPStjGbjykGZL؂Gx3{7{w#".ז"{Vx '7GG|WH!D+{Ʒdo>rNY덯kf硆k'o !Y}Zw}ogOF4"G)G}wWxGrodWsݗ~&q}:7e*ӿ}5\LEG $ „*DȰ!'6X"Ɗ5Z!Ǝ!L(Ȕ*e1ʖ+]Yfę(SdӧB0]ٓByͦ?ٳGR>s֙%5EVjslڸOf5{Ӣ\e囷f_]+vv-T0֮2uj-W]v2T{ d[̐5~tbJ,[2aSwfɢ٢t+𳤋ޜ5u֬;4c}_->wG?<჌.Z K}m?nq~g`\p vƟpޙtYiu=xb8!Ƈ|'_vGY8YJiŚٹ NWݍB}5HzR.ًNfH$I% SX".eLvhߌcFZhגn'g>l^jZ oBYr6iFa"b(EZI{4v 'v):玻'"}筠j'*fɒg:N yׂ W񨠩"-z kҷ.fm拯`8+/䶻j[-PlgnFܞMĸҊȴ$*C$?m" (v,C,,s\ʇ5k7K=xI1-[<2C}"/L3Jܶ cyo9=(#6YDo]ŝvNӭ-mu+O[h9;SKZkS˞ܜsĭ~ӗ/ xw%݁׸egSǠCXs(=977҅.zwߓ&~9Zԧzsa8K|W (D> s<7bcG)sd}]4@˓8?RsVnR*l8P|`h5ЂEۡ&&"PmwPSkG*~sFqTd^z-m!+ )e Cbxx2F#s3K^ aiQdE%ҨE82\\ekхFur?i AOJbvuF$$bGv4-ؽj$.#IOS&hM} R5'Z J%B7d~KRjlM|J 8j.{/3ghA7RE%04~'FdQdw S6ÉU|Ee;m, r d)^jXB[G Cԗ k;$,mDBI@$)UNR|.]#:'Qi]𥫸PT63EJY*BWjnBi^},d#+R,f3r,hC+j=i F}-lc+Ҷ-ns٤),c=.r2mP*Ϳ>ֽ.vrm)m*L­(5y+ߕδMS9hү-Hzv7`Z^V:U(~ϫ2WrhC.S=z#<R^=ٲI=YOaCۘq)`W{mXeSJ\_ =! I^UUMόI\\%}ھH]߄5m`= ],Q"ݒy]MDZRRt]`O` \6\$:E ) mm,!$~# ɝ^י"[b!_ ͡EBO9b癢] R![ Z"._Q % ^Z_ m %~2aQ,4^} mR9!& !]5'15+9B޴>n#2f c:`@F$#4Z؍G# , p].$BE?\XYO8_^}U&>ȗ$Fߑ!و^9MΦ$WYdKc@!YbL(_削e Ud $V@f%`dI8ea%爡$\#aՕ_^*TŘ9ab`6Y]aAJ]JWbV`j^bܥ=Y=MpSwj&kkfl]llei֦n&oofo^lvT %p&r.'s6s>s'C!\a&?-fcrֈxeBSf.q%hi'xg|gN%LzvVdF抉f~fr X㙌9I!aRPu\?6뱤F%Jgjy9"(#ɺMrMSFhqb=e7ED"m ӝk*6t>n*{ E*vb.&b=vR^yZ*U&j(k+fRkմbͩ[Q#~(V+|MY#ÚS&cڱ%):cSE*,V f&-ªª Q^z J\፯v-ȐئlϦ*XաVd*nkF\J^+b+$+d!n̯"B,.mޖqi:2߮6.]+ɲNKT-Zmߜ޳j6R\4nWBfhO,!- ,*Tf"˲K}IR˽bFsk$-**)/Z(6ua :ʙVIOBˆǤa,b.m/Z"GR.D닄+tin&/V oFأ .X֞ܞAo&. "N1n&j0 1j [ojZB)=.Rn#ˬ:FJ./2v"(zJҠ.:zJ&2?18p:- ,5{#7#-ڈm^m!.6vn /!_1dB'EJX$툾٢꒧a. [P"0i#2e4qj]j%0,[z,n /۬6 .1"#U,H"=YXmNf)*{ +Veמ>s;ը:a2#oi?/L faWd'b'^yrR&/}.u^GhbeJK_ hL4Vցx|IcgLM[A/PY't6S?5TGuɖEWfUfKTo5WwWG3ukjfuOZ5[S4~6\w0Lk }Z5WVA^3'_t__K}2Kv٦v`W6nb`n4z\g˴aUbj(~r]:jdpXkaO}sbum JO7;/h b[s#[[f7L&#?voȆ^Sv/['_^$4cսb,1**ktb?;|rBW1%96]<}ߧ?7:T}ǐ1V7lx}g *n.^xȩo2m꤮Ib>rW[Ѱ!^*2xڂx.o=q:`-(y+ ߲1@h[g8'7 x'yWk6wsKnJsn1B9y9voF29l[O)>y⎠E&<>Y<$^p.y ߹:lg[W4@Mn9"x ]Z+0".c]%Ӻtw;CVX6Oe;/Y(y2ooPdh\7{\Wcníâpdk59{vCL_<- / Ђʠmzk ī) zg s-:["r% RxmB.3UًFtfq2S1w..Vn-=4=jc=CxiՏ}?#:~K1=rdN'8)vO #=톚,jӭ=enIx,>o !w1'+$J/U7j(%Ӂăr"o 9[s7sa/+2:CKz֣[+'[iC+(+@8`A"w_C!&D)ņ?^)C E$cɌ#W(ʖ%kAs'˄u:Д.&U(CLAlR!OROFOS::+XA,ITrzu-Qf[6Ӧ4B5/ݻ9ό-ɬ l,ĒFF[AkVL-n262k'W;fTV9ӖrfގE?|\}/qe@a{y*u66Ή~ύ^~ϱwK͵C>c  /? ;̲N6ܰ9i/ M@Qp?V$EsB Ͽ2L@\Ͱ,dB CRG|>"oJգ+[JlIy|-L$B k.#F$'"M0"E<4E$q!s "!ǚXlECjQӒ#A-5NMR WUY,&U[W˕V`4P*X-)R=2Xe/gc\Av+-Q634sMWumwWy]zye_8U~5d NXn!]%ƮbV+b)7&܃[XI.QڑWne_8EFCL?@uta9h h9{geR0z{۳M4Aʁ_ɏs\ IR3džaϗq"!d'ί3t {$ئ1j_8,^Q.<"wb@3er"ʘġ!/h.*эr`XCFhMiJ2+b$5p4 =A.z#)&BLG>ꪑ}r"':|%r(G} c Y$URIY8DXJ\''WMsaʅl$$B3;,mH`R Oj)뼋e Pg.wUr &l|io:|O"Dy4^K-PmB4?Qf2 ' z!^0tfӎ>U%ɀ:\F&R0vtP`9.H"Ҥ=i?`SV? fVM6MhRGfa_Dzf;˚Юb yD$Ue;KqO@uk'Q+='Z3%R]tX+v}&ѼV|cJfF8E=,-m44B;*+ n >BUQyԹZz)aXJ+o &-t/.tmhr4 .W^fU.ljʽQ1WW+(ZW d~]\!w1 JbUpG~SyHD{OLm[y;$?vh>XrR'W=*vfΑb"g\2[ <'?:%ʵ' .Y\IeKB/sWOlyqqm:B3c)گmVTo~&\BJ}+'.U3ydGďt'm97ѫingH3/ /wpB] QM^^&Lm>x7$06;+4=ENW;8O7xSO~ dnOw}{TJmRݫ٦ ͽg[^]q;$5Bv7a0YSg>Ə8c.uB?lrCգP0M7GmI?Y*84swKnwҽvmx/> O}.SS:FpLs$! r /MiICU:mR<'i4MAs.01 A`pȆix&2,bzzKHO 7S$#%8^k'P.OGwmTawxsPrPU}.zicuQlE /j#OjJ*`l\OckaJ-fb%c$b&o󂎆O\ 4MLoVa/&p%m[5pp6m qo)rNqr-4nss;s;Dus575VrYu]ua7vewvlv([f/lY~/w,w%6>ivuxOle)_$O]tdCqtjڰW 8Tp}Uݶv[d6|/u:X闋ҲcPuACtV7q T>,[vz*w`+kV*Fw#C|.QvP琨:ɱo;OXƛؐ+m*QT5EκUE:[sAU:e!Uy:l5Y'y(uWrZtu&A}"do+E݄||˜=fǁo8o;>VؚűyIr/;.KFwWwW_VAhj҅; MjՙiQTO%toxwlö~ H=y&tlš[p]xZmls8k{f_.yVW$=݋@z)cWz/t'!3^;`|Zt51wYd6~qc^{kqe^lQ>-e[~艾>t{d46WZgtޢt=VQc^ꧾyk=xQ^%>8݁A[~|1۫o#9k煾Tj`aGhCcO3eУvg4}6s|h}wp9踡Whїݼk5 T#{ +\w?L'?I;h+;51ew?KI<z`<`A &$QC #FHq!ƍ jbȄ#3ZX2ɓ,[$2J![r|aΘ61)˛.yhO# :Q"SQdzS:D**W fJvkRfzdyfۚrDTyejK$V<p^WcȄ*mEǘbL22ψA&]2MWLC}qj]ׯf,2緾hجKv>0Y*St_s'mm=wسS]< ۛzjup۽P]uL ^7M5\Iv6)]^![*Q~ X$މ!|Vx |+YT5ˆۀ*j Kc׽dOra| )p[NH| w %XZZe"*։G#r1aPyN[tbɞIs`WlԤ+^ZfJ9)qthj`fru1&zJjJV+}BkvՠĮV*+߲Ŗ* tZ;-rk,j-S V'~kr.:- ;x p\A ڿ~`jq-оkmn{Yܥ)JJ"{.2lhmֻg)y-CHnaWXELϮV3U 3'1{}nff,x 62ںj;t,2Wci^8׏*U{lVo~F;=7w>ړ i9v/*GQ(]!/yg׵cy;VNp\V+m|³SOؽ (bCN| eCjz9!6@.)S@}};l ~(/_;o;MH8`LX Pj!E%nq+7; ."Yhq$\ 8#flrCИ~M`'0E.ZV9HAOHgID"% Xh ظEJ2d*Y))DFHNI yZ'7m\HanKc@9iFvĥ~.ɲxKe:33VZsx$ZZj4 'ɯ'8H0jmkg3Zf6cTKE'fTqh,Q=ad$djP#4H)3Wj.<L ;T C)ͨer ըJSA !.ZhWՒg>UձG êUEk]ӹTRS&P`"^ Fo%b Jve/jv͝#ҋ*gtNSzOeIV2mQ[hsPM-َJ*@?Em2v7Īn;S\嫦uN8eHId]ePf>2z$hnM^leX^Քؖ]pT,K+wYY;#8n OK[$_w pYӚM]S$9gg'<&2#)APW{/a3\qSb6mSŒ:=b(WTD&27q88P[Fy1-i8bK8/6~\'xhu(*eY|ʞ<\Oj3=Z>tCvGqonC?<7Ē^ ^pV陵w=غ2 Â3(ƂđiP+-"u]\Ιn _ZB^ݨ5lLRh=Uo~umBZe}%d؆ٻm}nn' sgfdg5^6~f7£t]c瀯\|YE1r;F]L=B ]3gM~z+:Ou0HwKo 6XЍiVol]|%RCf}&=6_P7}{SGn-'~nC~Vqrd6z'/Ā&c7>o~ \'|їOs{ZƃTDlo mUGvm8{WJ68"J6CET7L\~A7H{`@vl^|d;mM+tcG!8DVx3LHgpw$EBGȇs`Jy|fj](DX~5x#2;؄qvyGtx=mH؇Ȉ'Hem3gg{Y17J҈[u+O$MGGj'ɘ<.vM iAHApȍvue׊cxj0츉siWNȆ(xxempvgԉ2~"$N(XL~cyuh؍.lx$<ȐH䊓d[4vHLvh^I1|xcT@nt&`[J|G16XXv]앃qr'U86}TWNVYv;x4t{ve.VZLk}tT)3aH9py3Yu(mZ)٘ɏWYy9xyy*99irɘى9rʩƩI̩|Iҩ )by)i9X!5ImIIٌٟHY멞jʘ B )zٜʙyp %DY)#iϸțD:-*n&ʣ )C/J9:YBuJMʊ:J>@yZ]ZR:1zfzOJZJiJ_zdGlڦ ,j\*4ʤu{58  OJtz]a q:0*sh:} + XZꚎzj 6꥘Z*ru:ʟzʫ 0JZx:ʈꦍjH:Gʪc2Zw8j v Z::ʤAԪ :+ 纫kZkJ[;# Y+*ZG {Ex%k'[GOMp.C;!+9ۯʵTKVXzLW˳Iib+L+Gezkm ;K1:h봅{۞KKy{ ;{K˹FD* {붖(봵Kr{$ :Mɸk‹iB˲g~M˼6˻jϋ*׋eV[55Wx~(|+SYWUEWkZ+ZfSL[yu2E;DHxhn|\{siz)>'{iz`ӈyGj Y9f.)jdUJNil35iOTISTlq핟Ʊ* |FHٻmfpƔS\yq+Hy2vb8[vը֖n,Ёf>xk hae,Qld-QC*&uP~9\zbSwc/]R햛<߫r&'SK(p|f'ǡ ,&XlHRutɎ9 W$ ?b ʶVcH|ʛLv.ƌ\\+ΩQmlD ʦ\ǟ8?'kf7l*Ҹ8ˋLˈΜ,cyؐ έw7n|A\DR8oƼ"TiD܃([gܾ֘wbRrA'j'\\hI:_cȥV[bsI(]x)m*Va7/Xv ~,|]g ,j~"РU6wmէԡg~kyf`Kmr=_^loMxyԐ{Y%Hݍ6@k|V^֪\NY˵F~2lxɷKdFhzqw^qdwi衻RMHD-waTin om⣓> e IP<7W^O.ІެLg^# XʝN#XH>MZn=hgh,8R82E4Ra˔CH3͗#gx–[V)VY6Z!OMNmy͍ISzi >PތNfōfz{iq+ݯռF13h*њS▩ ˈnn;w6lwNEg;s[@2ׂvfckroٞ"rw.KOlӁ|om]m;;kdc6kG/}=N^huFOO\<׷M5J&\Fי7V]l6u0=ߋaƌ9{ʹJ|m$ղ=sB<2z$kȖa ~I Qi&GE0|!pӰ}+7+섮-&Gj '!嵮$$Զ= g;ňؼXk+!#&Ʈaq\b΄ |pbP_ؗ2QKPB1~nx΅cA":rX\$DjZܝders|&7y> aЃ ]Rpk)WɨχKcK%k {X b҅%%)1b\.RdIete`8*$o8DO겜%弦a-Cjd갹>N#B3i{w|%ՉM~{HO]4H'-TDe?40T0 [*}hf̺4XиxP6T%OAJ5EkR* :|`B jL6R,U@Ko,:䐆ƪrZ!cV,ՔU:wP)]ְlV2vӱiS搳)k)BքXSxkf[-zXeX•qe͢VpE.s˞"`*6J.ۙf+i;+[O+*7Luk^Wo_XpJ^,vUp::ǢJ!jmF5Ud=Ʉ{R ܣ q)R{oTyÛqn}vA0)YN6Drk NЮ m}[U*'I]iB-V':LX B2H9ǀӣX04WnFjȑE> 5,FNz@1W'ˊnw 龈:bdM\jؠN߼K6" fc4zS$TKZF!<]i`Ԕ.77hMU-ת=QRu&2eO%WjqLexElַR s/MˬلqV>9MȇVqߺqzw;Qf|mx}yPv2-kvƸgNn̒=nmJ|qmi|D'Ç.SIS-f<yu||h1g]f^L|Io]V:!|e]uߚv-[)#yfHǻ/Y igO| =e>~D}w8ʔ1?K?>:_&c=9r?xq$B"S=c1 ϲDil/ c|9+@pt;$F<;={2i;0Q%!BؑAd.<B>$8Rכ>  xbH:K4$b+4+s }@-$9 #!# RDcB̞k:C=aH{`Ro5$Ø+%Es"QJL&X,SS+,E›cXE E7WTK#ԏ,KTC EwB-PpZE$CN;d33Yph64[jgE[gDZ>m)/kEm )F9B|vGaAz@(ӿEXL"#TH3)fr(J!TrLBYTɣIt¿j I4GHj+;dǑ*l%PpC>hں7"EcNTH>Aԝ:D>,l,.?YlzPһlΰz8z<4rTOŨ k^ðLbD/QU쵳D$ }t|4-#YljR&.l>[1MuՔNš% BY ($tZO|ݑÜ]9Y0MTTѺbR޼>RVv >lǮӔ*$xіlUa kELЗP EŒm~~O+liem] 6?D֎/v^f1^^m.onɪnjo$~onl.N_zMѯZR4nQmppp0ղ{> ;D tp/ֆN뷆`w`+hU|jf2ߠsu]@_lEo=OnSVeVT%T?RTTL&Ĭ^ӓe}bYsaFqNk֌"ڠYG_,Z9t|*T~LReVl]ZEkX]HDyV @`LF5gHl*Mz܅ tsZ׬/z砏'v7}gm~ k{17݅UX`a|mEF[*ju&Hb;r;%f" )G>W݃裈ٗ97ch%Z(%iy%y6Ȥ]5g_¹W]Qz$jZzeyo/8h j2P 8YAziA:(Hebd*sJ !lY)!h[(a^zꚞ:!h([@B"yWFլ~9ޤr&?'}҉+ f)lҴJU$)X>;%:!{Z^*ɻj%*Ҟo>,j!;lgn+7vr, o2GU3^풇g|>&KNCr._1ecEMt?w7272fo [M5u-6oӽ~;7 W=xSpc߽͂;~p+7yS7n޶ɝsznU頞`^:kzKc޺Rf_Dy-=yE|n;BǾx__KG߼]~ۏ7y:o{ "[^ܘhe 0s 0(e-`3`ˢh ^^ScdXBiϒ]U?ic^)_,ݰ^FJCq[ޅyOBV/rѱ;&@CaXhc2(/ ̍#?EAIb ĸ|cWFG}#D2V biAA:dOr1L%%JSNMz _ &8AoY<7Zҥ0]zb%ECQ <.F{e1&jSo2ߓIM4'͆N[釔S%7cMluӕDf3k:sZ4j t!@ ̆紌N%J5EdP ӡl'e>Rh~4 cQLUsJrmꝰ̥ .^4\>k8zOA-S \Ҧ76JUd3c-8ְt8YSFtZEY3IĨyZH*աô*` KOi zпUє+inH1 joWke5W^>ҫ /;[WU|52U#nBI BN8'B ah_-MmO[eWhS >1w|'Œ̷~ x@UEfvsK`b&6q8-+Zokp4{MM 62% _"N&"sj ^ؕ+VTŲ91mHáI0$d Id) QvWp1M c";XzF1MJ{XiZ[eM2{*(͆sjSKghƄ&n+ AidҪ$K~-.gYyZUp#g%ձUU:@ Ŕ:[scƷ啬|cd!y]Η.beXƥ.#ZuXXvf9"Qyמ,b^[Qt.n ]M4Zd8-m{|3-qS>5%䓠o YHaaTXEV A $)nEi}=F^c*ʥgm|CL>W;-bb"W@?N'P5Y/w_yoGq=v)OAѪidCܳ"dB_}+ 2|ᓍ~ jr8)w_~ NSП~ocӣ~z7ܟ~[i _ >l\t͞\`d&*`_Xt: N` ~` ` `Wa a"6`2a:BaJRaZbajrazaaaaaaaab b!!"b"*"2b#:#Bb$J$Rb%Z%bb&j&rb'z'b((b))b**b++b,,b--b..b//c0 0c11"c2*22xHKx3A567c8nȁ4h?B)("P'`'#4A"dB.3!B+`hH?X=7NDx=74A7U^%K= &0H2(%:0B5>Xf[V=cb  feJ%iZDPefK&afYl3A+==@= 51!$(U>A',%@zs2o$b&>C"%92'''Dj&=$x?Pr<',E^=ځ'A\"X9PBe:$xF&$|BP'lf8؃A(\VQZ-\RC"T~TÐ&%=t$UWJ蚲)#%#X?B'Ê&&p 'q'X5HQ4T:C0=(:C:=gȁCN7H0p'?9xRh7CzC@=9H4:HljçJ1\é?ÝRjMBkj+;%=Bthr@*zq~(=1HRJO%hh9>&lír?X`&D*'!T? ?tJT B=0=pB,9xpBrC`A'F悆ҁ HC\3pH>#(R$BЊ&,;H00x?PaZ*Dl2BA(>~p=C+8?t Q#?\mB,|'@1`BRCZ嚡J?L B.C8HzkfR.e`+=xB=Ѓ=nrl-R(~\,e8C.$.:,PB:ЃWB&?t4E$H*E*n.>o6+zn/:D.-_jҪ.늤Z$pBGnbjd?Y>/0D?+Zt%reJՂJfze/p 9C8?H 25a#0Bځtf(7ԣ&v| =A~\*!\(CWJp+4dnp5~͎\6 n⮯ { [܁2 '\#l8/'DB ؁RR$+C H")>@Bnm B$m9=C)ԁíb07fpw0D$&],-Cq r4S3V0B09Tg6i5pb-7|(C5LC?쬲J71,6$&\l:.e҃5-F3qa1?RBC<—CW)IV$ T=*Z=?`B+rV5)i`9SdXJva렯Ҥ:59FVccCF x(`>l)dl)*C`rB+P9f (p`AhjA*t6`*_B($fKvj.lvp bpqbq#r37+*wsCwt"Jwu[ucwvk^JPwg%f`ڣvF ew|7 x;ex{M{o}} pEw%j#7zNj7o8ND$7DG5>s/ 0(<兇*_4xԔ9\gz~CĂ7|PxO|88)Hxx ;7jdv(`j.Xzr409[r-D1XCPSeMηj) =<:;XSFn:+7Gùxc؁K+ݮȮ7<: ;< n^p?xH2܂' 4>$=A+4wFn~*VF/'`)e#$C.9w9`/&E=4;V2H=lfsv7x/!7ό{Akw*+Hޠ> å{'rz溮ׄB [1C4M:<A{gV$of#!09|;8;jCwS 7cl҇27" xwZ&=o8{&lS&]bda=9}[>?~==dr#,;4m9R?L{cxfƣ?W?4OƸ}.=Ap'5zp'~!lN1gС#hdg'v(GD5g$hGm!sD+#:<3͓!C&"9 ډFR}LAÁ9!Gj׊Sq؇4涏ckb1 JpBk"xBS|Q0ɕ/h)g:7 0Ag(II!_zB0n1$HъES#Թ X/! ńJѐNъ\tSĕVJPk]BPڦ@A`2*4<#H6`pkr;=AgV~v|V`d$%06D k& -032(b;c=1 1ZEbVH+6Jo(cWT'i+z=nICy <*D?ĂZ+Ȱ"˅DA In\Ahrt:"mpwh_ A02j`^l1k5(2ᄢEOdˍX@0!%%!/HAkaƒ޼!'Hl gzaz!li" vB\dnGhK5!l\FEz !a b ^C HZK"H5M)/l'Ti5&+=&f8h~@c5^k@m B6֡2U`!a&o'0!%Gh.1Y~b"$b :n!!iH/(a\2qšby N(gJ9 avYȡF LjvI -+(  мvM"$![Ajjup)NphKn7N r_&rF1LJȇjޚa%8r' R@=.*K#P v= /e(P"' bra\^$衱o%p Kb6Vb JSby!Bm001B3/4CS4G2fDO42E46n% p"b 졹^cH0Yu^ZL+J#A2bv̈5LOY eNaKk"ç"F\#Rt; C…+e Zx&ia%"fhgHĀՆ6hƀ|e,(x %!0^CqI cxh4hHjp:'ƻtJ.IGrfuٟ \yz;pa0dgaN xI#N0aAvaL)ba$`A" A1 6[CxA"y2tB)H!ab%oA$!0dB,S"FB'j)-Z#|aZ %bi# y1L saƽ7?\yc'.$p&2" \-&雂-a% (c%>G1W(b',"N_ˮ!w!*\ G:1镦%jFCE =*s@&0vb<]ޢ-2KG+>1Db-I'+*$t!#! wA17#֢ g!e.*^Y+2 T&"Ā>"~/7^it!>-]"gR&‚ςtРZ d ('M:tԜ!s࿇䜱H uXyN3 yH ɒdDkRJŞ+[,U%ۓQ_ڹ寙Iv +hNnoD3qn !oVV,͎Jf:=[L+zB5zi ʙPa0QީO^μУKNpW~V[ژ% o=y=t43Y3'CJgz5F(Ov2$&ۄvSJN1(( Oy'wؓ2K"qdz (DcᑏA71FGXf TSFTK^iZH!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,:J G*\ȰÇ#JHŋ3F4cG 4($ɓ#STr˖0Y|93&͛6s܉Ξ@qdPtS5J SMVzkVXz vlسfӖ]-۩i#\0zɍ%K|ū޽~,8qŎBʑ-k̙2>B` Ruk~bV[k۲i];wo޻o=pđOn΁:APBlRԦO?џO~{/>׏'H}mv?IVhfv ($o(A-&(4h5R-`(Di)v.ǑPF)P(C'e I`)&VH Hl馑VF’1xYb mjhqϖ]x裐gfi禠~ꤨgrjg*kVz頳k 饮Z럁챠6ih촑ZR-Ú̊jy>J*(2cP[8`[&6؇"8lpc359r?m2sMHO>'!܃6ƌ 02B O?гپLӻ@W踅6/o:sN0b<(3a샏 6:]ɯD*Bv>Ө,85V^ ~|-(\G؈#N!B=SBsˊ3jxۋ ⅏}ucN%$8%4an.[XdfvkX*X7- Q,6qY>f0Upv;a@-wv{]:=|vG5KQѱ' Jhs|nc°؏{dh!d7 mkS2d5p{ Ft';b2Sׁ;O"V4cp1mG?&:Pأ&MP̋\G>ֱ -VC8ene> {<49ÂpF9QESQQg,mH#>A+H/ :ޣcHG>ILZ<)*ڰP"{h{5:q4[ZȂa'gvXL^$ezֽ(bf_>416vll[$Q23‰ BT:,f(raTF3ʓ0^DƂ0PnL NMWEui ,+m>ҁ;z-kIJ )ET1CkvkvX=R!K)o5}&6;rnEpu/ll';f5oPa״j-6f{3!2;tOD6x-vFzT,b>1։=;9B:=qFɉE{ww%s{9 x0nМ=7{0&/CsAbiVF:ֽq'^V`l,g|<xs!XY77'b¸kޫfu"<<&=q#LiݙgQhETLaJPC\5+,ܕ:4x iqUٜ8$hY]EF!MI %6/ ,`-VjTGr[u@-UӨ\C&fS{/dvuLki^L!DlVh66UJ68H.PmZي6tmtӞmnuu^]_Ǯb1Npn ..Et/ lPx/d[m㴺7@NdK Jx+@H:-+`+HKNPR8T(FBZ##(6'Aah j؆prXqHsxuwv؇z|axhw#8Xx!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,N/ HY0@ :tE3jȱǏ CIɓ(S\ɲ˗0cʜ 6 ̹q͐(~JѣH*]ʴӧPAիXjʵW44huN]˶۷pʵAܻx;W޶KÈ+^Q5࠲˘3k̹ϠCMӨI3X װc˞M۸sͻ ȑ-pȓ+_μУKNا^οoN~?_xSG/=|'ϯ(ʉCp=@Fxq'as!|mȡs@"'"(4h  '@<# ]qGq^ $]7@gR0WzgQH^D%* @@Yad*szW"(㣐Fߍ8&fa§k$W㨣N9,!1wD@$ |X!Ed2*瘩 cj&sJR VDR@  ${]z $q`Y >'/nj"GiHew1?tSxӎ>40I6X1c /\y; 6&,社& ,rÿJ++R>+g~8lsRI8Ho> lY3mo }p3q xnW&>gL(iylE *> ~0B}\%3ꅎqȦ*=R˯D Ҹp醲s3 `4 K@Rg/o|!ws1ƅA3)E^h.}ĸ?N%(IKҔ䤾5V+x )`;!>0!* ["A7E@l@7'p DC7ݠdyQ.\p + @'˝.4jxА Edl A}:{\% \4A MԺ9򑐌$'II+GKy{G%GIR2jNb{%FL Hp:`pшplt);G \( InrR(p \@/:gp{ /*q&:`"sׄfה@Ȣ9v{i,OGsL_pI X'3%Xhç7XHq,:U<{;UDE5a9F.HMRZ`;ҁ0A:Bƶծz` XJֲ wz8 8>A?hPG7 Mxt;h? bSG=Q-_+d?I(g)D@q!ܠ`@PnK" h\Uv[ɹ"OGƟ=OH#.Pa$MJmOPG=傘 <|zY_r ٙDK/ Y`W pE.*\Qlv`sf{ ueHg'L [^'%0rr{2]0 Pb)~ bb2k<8>1y,9H;yO6r[1}?z2;ܡ -h_K^f,a[;lqnCxr\s .pZVE`fOya:G N?A@(;B(WJp?rUK>s.m1pg s bw` 1x$O{hhk$\vM3 ;`|HO ZWG <\8RF7{j3ycb!_ `%bP`9h ~mtkX*RE0RR"؁D(@ظ؍7ȍ:؃8਎82S   S#zVa9I!JJpVQr 0aPA 4%>f8S] 0;zV.8PjVӒ~7B H^m']0R@PJ;%h0÷:iЂY!"k#!o? H 5CSMV_'BBQ`Y(\W9Y&%w p chi*] zKe.@$@ d 2P LY77\g09 shh"c$ux7G);%" pNyf ck 69R~U+mOIPSp xbNRZ0 kuCiqٞ38_7)->Y; q_f@nb< G!|v{j$2 (79DZ}"P !YǏLUVzk>w# V=P$Tx yXwF Đfp yLTN=֍%|ӸHdp ZN(H`~@;'p t_G)

Au؃`vc`G: XG:v4y= -BS K`G>1`H @  !?bQjP VDV X؂l``[ 0 *\a \с2Wc *H (q !Ht'xP/<" ,=a*0!h40f#L H¯=A'[ :1|4F6fyD4p"`!,*G!:@LpB'=[#]&B[ :X @-` _h!B̗8sCt@:c: $t0%ȅ?A8&ԣDz ]xjr{`Nh@Z"@eYF?|1D$ ‘gA g?A@ İ~Tcߔ3 #@J]&h`d@ED`*m00 S FC lm7!;M@3Dpz O='# j>O Dia tHb(x,=B`;8! @ htv`P45zS0 0 + L`0Rod pP: F6(PU 0 0$(W#`:9@c0 tE@S /6#Tt <360  $:g=lL A2$pW `|Pr6 |؇@ Oϧbiw؈2Pd Q4vɰ^!@ #pj P@)̕X8,"@z5 Y3dj x Iي`֠ !(P 01;[g0!O ptN &4' O <0,E"D-P@\ ^5;c_9@R!@7pj3;P[z|ٗ~+Flwq'wBw)c rh"`40 02e pV! Z$(_Xc"~$` [%v 0 Dp2Z$8*a}fXX`XÏ鰜A S@$^S I#%9 4Ҁư ٙ0G -@"F-MRp 90DZ/Y#&x`@  ; 'Y,[i|1rY@ QiIy "@ \ `0p(hjlڦnb;oQn%U0! 63_FF69y v p!@\ Gaj' h {`eU`-0JNt " ijD0!P GQX `k`~EW g 9N`p)yတnBp HБ@Gaa0p- @ 4Fp1 ` O z`IQ*N[ P.I0rw3 $Ja̅|$#GzUTNyp @<60 P\ AAMR{Mp1f' \۵^K"Hfvp gݲij52'VA J)u_!LRE^lgZ " 0 8= wMќ(7V3w Im R d  Q| ohqD\#ޠE3;(cpU#XU@6 9 U8X@ #P@ @ u4@ `L$f [v:, G`* P.ʜ* 0 ]e@ ;7? ` kH{wB# P0m[  4 wp*5 +puBC l ] 0@AQ Tq3` uU␱$ ©  V @ 4(+Ԁe 0 , ,p "Ơ OOUjpYO4  hj֒_vB% eAːS%S`6'aY0E M[TzX5+0$ z61$({14QSU[# NP 0 |'p?:UR iY|WY=n!{2 nI`n*UEUYPEa eP4, Ury #0 K[@.X8{k1Sq"C`:=! 9$0%)N[@? `i @N`a\V ]1S0LY 4`U$P`sz܂m R>T^<"lw&y i"p74 *0 PEj s. u`D"``\"RP`k `=Mp {n6 A"Hl. [@ ERC`!4\ʂJR0P@ ?Pp 0 X| UA. $4@ g(u 0 ]:PlN `i0_'T`p 0Qx0 `Pd/@ `r plI!e@ p uIJXԔ`^3@ @S`3@0}'N 6pUb?pl6e`R·#@|pNz]"NQGNf}XHPZټPG=_ύ'@Nalo.„zݒWTOfL<;P[0P@XF& 9pRg!@ƿE<F _O ,G@P"A0uJ'PQA ڰA` 584…6`ÉH$A<`SfF5SN=}TPEETRM>UԜ0Z⟍0Zzu /’%!D!ÊUaδJ^*BbGHM65gYwB1F0 VN{b2iIh̤.&+7s*^ǁJy.-рtC ڮ&\h^3[E$b] F5/3`E.=+0dh1U,dX/1 }xȒ !psb%Kx$agURt4eUWɑ-7;yn^$e,I97Js!q[ZtX%N\$;ӜC$e8[2Jȕgx\@"^iIOЃ.+D"ePvJּHGQl9ҍ*T[X~Pu4D)*,+ &+OԦTW?GԤJS*e UH (6e3-M4 1<+[Eՙ'n2m+#Xssc9?13|瘝I>@yЄ Ix& Me63? LXb洨$;ϥN01TOjl~5j zħFr8f]zq5fZ 5Mbَ^_IeWvíl/ϫS"{Bٍں=$QwPv2Tr͛<s*vk1OxPo 'qz>j-?s [=x^Ʃe9sVoNQ89xʗ4komIWQU3!,IVmMLV{ֳcD:6p^JIv˺xnK.vs6^?^~6 )`JtNk~9ơ_fo}q2"y24{)=?ߛ"L{c9? %;S ¨X=s<˥!ACQ#ĽSrnM"!\A" ô&ҧC8$( "=$=,+,/$ =kDCA@T;3=\ʺ4Ck=@V"[C;2DJ j'.lKL;>I 6gj B)49=Y>sA˫`$˳<>9<쿼)ӸGF`;i,)*7Q?k;>jCjé87Js:|G=6г\Gs3d)5&L=,N ,L|)|Х̲Lu|V-̜HYtۮuDDp[J4)yGػ$9=:ZăJ'wt8bZt&PTd)ObR]M"}܄4Oo ȅث6ɤ]eɨXוIܵ5ΔL|^uH^yS^x]We7]%r:Oܵ.m^^U_)K}t]Z兞IOk^[YLΘ[Yrڧ EZ֓__E+kˉ_\n|"-a[lTNVo+zɕmKNTW9&Pq)ݺMߍOK,J ތW,k" USL}bj<BCRHۍ4I$sɨi3ڲ^ٌEX]QR XE^U45W ~bblز6C=-:vRUmaec?y[,Zdae>YKLvݢ(v7XsG$S)/7$Ծ"8ȝųoCWacRl+:`uYuuX4d%!]@IRZZfl-gB#e`UEaft䈭;yB),`6=$DYCfmfobcdUPme?% ng{Ye徂b~ƝhCCc,hF֟hH*՜fSh[Va[Vڧj`F,dV&^6%wJc=2[>h5Ò=:d>fDi)-}mi .s[NX}ֽ&ꨆ메&u {BOR$ש>5hlLUR\ Qfa6ȴj2ޥU^"~U\8ec됵;NDNHY+Z@gB܋P2g. f*R5b`4?v4t{ j>]]*Ś7?JPe{\tTۯ7-4h$]Bf`7%fk.oMbGpUa^o7ԮW?pqbK„'lo;n Mr=wrwnrOUn!K{el-ϹqNfv[Un}rqf~g/se!\ɗ?]|=j"Qc%C[r=;G?qmUbi6dUN|RR^KGvcі6qe4lfyɅs\FCnswNLbVJYe>L-WZoOjtveurlhGdY!,q.@+}tTX#nwg O;i{I] x+tf^fj?GWWvNugyOvHxvD)S$Vcx_F\ܚ?%ZIg1'yߏwOFnſb|?u&Rۇwghv{F ~ozF)զ/jOui5`a+h „ 2l!Ĉ =N_=^=n=~>_>ޝ>>?_?ޟ?? O, t2M l RL t rpJ 5PU,! tF+l! ePE3!EtZ#! 1BC,"t$2l?l"Ӵ(R>S"=ţeTè- NfϨF"qntM(qvdAu=|#UADP|nX WzKW\j׼&-` [~.vlM){ٖj)hnٴݨlkvɸ nC{?Vt غ+w˻b{ӷiW.~+` oxqI|zŽ'?n/Nr|"˙4OoƖy Ѓ.F?:ғ3N:ԣ.SV:ֳs^&.f?;Ӯn;.}v;~;/x}?<3<^S<3s/Sֿ⣏s>????Cӿ?>?6   . 6z>N V Efn Vv } f g ֠ E  a!!&!6>a1!N!V!Ifna!~!yܑ!!שơΡ!!!Tء! b"!""~!&"#6.#F$!$N%^ V"&n"'&v"(~()" )*""+",+"-"͢-.R./"0#10#2&c263f3>4NcE#5^#65f#7vc Ҡ78r69ؕ#:#;Z:#<#ӽX?c#@= $Ad;$B.9*$C>d7:$DN$5J$E^d3Z$Fn$1j$G~.z$H$-$I*$J(!,>O& *\ȰB#BtF3j`cď~3 ɓ&' D&FfM]^taD֔)CFPjr| *YR6u4*UVAE,NkիUpQڐl _.͡`W_k჋\]a8۷J[ Å\he-4mcJ3,B#޾`Cݮmq2BCpU ۱RwO .u# ߢ•@"E מFhEZ -Dsf-6 +p-6ڀa$CUN!RbOP1(2<6$W ' (O@!,!,!,!,!,!,!,!,!,!,!,!,!,;xleak-0.2.6/assets/demo.tape000064400000000000000000000014321046102023000140360ustar 00000000000000Output assets/demo.gif Set FontSize 18 Set Width 1200 Set Height 700 Set Theme "Dracula" Set TypingSpeed 100ms Set PlaybackSpeed 1.0 # Launch xleak in interactive mode Type "xleak tests/fixtures/test_data.xlsx -i" Enter Sleep 3s # Navigate around the spreadsheet Down 2 Sleep 500ms Right 3 Sleep 500ms Down 2 Sleep 1s # Search for "Widgets" Type "/" Sleep 300ms Type "Widgets" Sleep 500ms Enter Sleep 1.5s # Jump to next match Type "n" Sleep 1.5s # Clear search and jump to a specific row Escape Sleep 500ms Ctrl+G Sleep 300ms Type "15" Sleep 300ms Enter Sleep 1s # View cell details to show formula Enter Sleep 2.5s Escape Sleep 800ms # Switch to next sheet Tab Sleep 2s # Copy a cell Type "c" Sleep 1.5s # Show help Type "?" Sleep 4s Escape Sleep 500ms # Quit Type "q" Sleep 500ms xleak-0.2.6/assets/logo.jpg000064400000000000000000002526021046102023000137100ustar 00000000000000JFIFhExifII*1&i.Picasa0220L2025:11:09 02:31:23;http://ns.adobe.com/xap/1.0/         " ^ !1"AQaq2#BRr$3b%Cs 4SUcdt&ETu5De I !1AQaq"2BRbr#3$4CSTcs%5 ?2CGPDaZ#$D B @  $4 4@A C  H05M@ F!  @&ܚP 7&n!#IY#I$,p&5 $@) @Hܰ ,y`y $}@V$ܜ@$RS0nTV"S"T& @)XVX@)I*VJl rjT".V JLJ!sGD2l)`mAH#*XaP ,@uCuP@ BRjMF u :ԐXQ$rèdI$: ! ,,NX ^Y9cM@NXP哖4',h5R$卨 ydi u&I]I@HjF哖jX5mAQ&$$!5&A%=ISPjRj>RԨD> ` !倈"ړP<  *j @Hܰr"5B 5P1jAHI@$` DR#H#+RM@)DfX V SPHF"AQHHuX uH` I##Cu$IjC@# !Ԛ B $:5&P $:P5 PB$@$2j$P5mIɨړPԚu]IړPԑ$.& $mI"5,:MFCH5j Fj6AHPV.rR"> )H$DJŕ5Xn)P qP"S"U1HRPBP BJ@Xj RFԐuj@!@P5@@#j5 j!IH`RCuQ&PHD5$:P$:P$:P$:P#jM@MFԚ,B`A5 5RjH`" HHPԚRAQ"F.:55MI D>,+T9 $A@BHjMGDDySb)*` y c@!H@`c FHDIHa5@ A$hCC$ID$BjMC$I u& I $@$C$IR@HA" u&I ` $:P5 HI5 A^X5Ha" @C$u$h` }E"5i $DB HI @%H@BR0*2Ā!Y#@DQ 50#V4u$mI$C$:!@MI,: H:PRj@&nY5PɨMB@Qu&j@Rr:!0H5$:NXB $L(I$]IHMFHrC,EID2I&MG$DAPHMA FG")XMC`$DAIY %`JdA,C $V."fp~cc(EZkpo/sWt]w=24in4k;4*{~cɯuoOm3q~iݴOD՘N5Lj#$ȶI>$ڳRjIy-1-jI~- G<1k?߯zÙ;#>+t޾WZ~(c6rK|C^߰1\B=^2;КgYi4U&X<#Ӳ}pĦ汾-cs;13rb@f ='j.9V La ab"&*sռжw,VBܲ6 8۵9mp_cٻ׼/ZM=^8fhï쪠2t9;u~x :|_^'}fЄ~o]&2+>¨*Oem|B4V)grr~w)>៉ܤ~'KMŤ{ [='?kO=*xݻ4u4VM2NDShl;zz/ گsq^xq Z?s+\^k9da~XԒ2F?,RHf D̕%t Lȍ2?V+XXH|B:geS/)}ھϩ_/\Bg%t3U}"0Ȗҟo<%9ЋI =2xʦ@uOSJB3=ޥ2-iasN>WBagEז^:m4X+Uݶ&l~*sUmvWϖ}ݴjmamсZܛsk_'iͮ+S5-8 )mij*#쟥g{2H kua,͟);!靅n.q_jP}056*j:ˌ}~ Q-e>>3OD^Yar $: G47m80fͬun59gfv[ؙϋU_O3+=W&YyqXw)^ۥ|<%vz_]Z2yaq1~iuՈ}ںF;+~|.R~>ٵa9CJyUN/w]хjeQjNAz%=k{oEu.ijQ^ُ6UԒ]iRItaMe,[=5.]FeHKQd Ee"G+TLp@D2I$]I) Ca" aG0jHMp@> D╀5 1` DLB C$ @a aFAdI$0$H!jHdH u$0 VUT[<*S/*[Nv-2tKzӹ(ƨ ZJPX] c>_149$µxNSK<X^{򛿺E[2ck:OUϷ٥pv:WG¿JE=Sk굏lu6;-8e~߸1}/~w>HuȳOs{sA'xbsިOթ}{%c?3Y}_fd& } y_%~ ϯ>sbl008tY^0xzsNkR=Sc<>5O#k,wXݾlē||O:r]p<|Rw{ϼ ٙ67YmRZWU?HoR̉kfD{K b\H)QZI. ax&Rki*x_- sʪ]hځP7D7KrsOZŃĖruI.v/Z0q{]˾vW#NMc<bq 9tG0Faj=2*Miִj3}{ٸ`t: O^wSg3DzfvR A 4A`Av;Si;W)2̍Kg^w."Ј$VWLBDH5$:PDi$$$"D"Di , 5&ED4@S2D8 X`E80 GX`" H"I I#`,x 2j#:(9H) ]R%JqTK9Աk)_`)wbUAff>ATl}z9 Yw]JO.{_C1PNrw9@C#0%h^>6րִVytWF4<*{x/5sEdqm˄DHz=O+TDP /HKIN^9r[T3hֻoaG=W]l^o*tKf/EͭOS]jSR7ԓ3{jxb5*ҡ9*kgogݙ{Z}f{ sZbkEj5aAr+,}~x9urlmo0{g*ȭ.Ķ`GyCK^W6ʥ.Ǒ20#e=A^j~ KU½Jpu{?'Cw ϑ:Nk{m`h xw^] 8\\+N| J,+m2ʦb+JL%etfD"{=dA IDX&0Qȋ cDH@Dr"%"$$) e2 H@ 8@#"!HI I$I$GQGE\WLS]Rd}M2ΥBs&o-`+qnI:yH?X|SANwG[8.NHjV̒?2h/^'UEIM5UVQUQfڣzT]o{4)ӥ1}./qkokl|2[Տ[}UUgUP=^O]k[s'I eH~SXwV2O=$i434ml|ޥok8-W=y7|q~^Ҧܮ|n^r GU҄{;͹ RP`iN6^/R}l6-,n ݙ@t#%/'~_akS&f;QZ]#i)?;K.J'0A:??P?U+M/qODT?מg"&eS>1L܆ wϏOǝ=$Qqμh ЬD?]24z0%a^  0s|_G\2Sx;*=^@P'v3=aYrr*Yc%k`O8Q#񝙓x%5 @#d#q8]K{zع=~?I(byF -^-;ޗeMgүF1Qy⻬q%ގ\hy`r[ǧ׌&oA"[#ϙ:>=dzxxޛdZC9˶=d5 8>W 4:=y2ilSלe-'{5V?c>~cQZ~\;w=GUM%2Xy@_X=OC܇oֶj҇ r( @uRm=7=T5Te+lW5KoP?P7 H>4S"ZT0ؚf ulL4VK>3 W-V y0Au^dwrF骷=@}g͓|E֪6AU`X|NmsYtv4fk>-M7ZRle5̬T$ >1ە4D-'qWhkx}^^a:>{} ^Ҫ5G_p󚫾EYov5y |X̻%J _5[YPM&i4/vUM_wCoPcTzPW`Y(Al+;;vr.1B7#h9rnmn-qPKWͱ޻_773We-uvTj5mc@ErJ,A)LW& ewKYҹo*fϽܾg>; ێV6G> Tqj8W']a>q|p>7n=u65Vb2S` N[*qxT)Ǣ~|?Vh+Kc+{9OF=K љ+yS'[5楴w™ϣ,F%꼺2h ^jg|"XXAV 멝|H6V J^VճضkۯpnGqeNZ]W+0ADh 7IC)-t=ix%o^-&beMXJ vpL#"z=Hu&D+H3vjHED"" s$C0 FI"T"P@$p!AP" F $# p@P,**H.+R)ɒTMRJJi A35Jucky=]oxfZr4{ThlǥUBU*TдΙBк|i:_KswE[ױqUQ* y@wя)}[I^Jͣg߇~ptѿuZ^ Hv쫬ȵۻTy"(診U&Dyb;W*~2+KľvTeq}o#. g̱=gJ˥ΥFQ[:M*J)F*lHkmy7hZ7#&B1/#>o>=g?ҩOS ^Quͫl<6cʨk{l*غ:6}{-S檽luf,o`7WG^ ?4:~Üz$t,r>e?,Gg}# FLʷ+X}tTL^7fko=⽗.SyM~ӯa¾Z3m+YVR-Y}ثr0Z0Y|+^DCnaCO9`v 0s6 ewaru^pGO={=~^JU{l%Y[TW5:;-a?|?ES{O"Tcmu: W;GO m$+i~Lb?2f3TWRڟ)oMIi8U rSn-(4tM~\CF8c9|SBqMsԆ<`t*GAyboTTgvs)讷lHsWa<%ʆ]Y1`G^rv)F÷`-lG|+G.6 6iw)R``90'`oW]SgKVYVCUuRdkl[0髌Jrٛ}ǪȲ;>vg02b)b/חn :#r(l؏=?zo[e_eU!ea]O6GE u٘.YMRW#Jtl򓽩#jݜ._*Z~DWjkl[~Sc 9汊P~R-ji/~q6=wkSXwrYR|It~qiRsRӻ{n@'*vʛI~!MQz:Ģ7/6`}$~i |)ZWo7dx R_毬fٵ ]u/.+}Ǧ[LX#CM,?X -7L4}#ҫ՚'b6.NacƷ?1{8er8mElkWwVg5 UgMQƔ A(3KCВɵ`Nj&?=ϬՙFMmЋkWA4Do^Ǝ>6?mêϲt}`qT%Er).#_BԎtFrxY²?^f>zG?.bbwo¯>u Co:`\hl Uڳ?FպC)3a11|5HΛ(^+qTVjϤ oHD9|^|O=mIpu>ЌgCJdiEWKoysUp(&w H AA[%0Z2ۧU|6ߓuAU_xju=cp0RkOQZi;nvr7t?gRDގޒ'XN>ѐfWkc|r6#skf=~֥_GVM;=s_g%[e7V[Sea?h#`'s }37pZzןR䷠oK:>b'n;b5vV,NN41pk\?#h# \.jڥ,Lw6ȳ+..OP"!D0B$" ō@ " ! DX06IV@$ "8#FQeP5, I0 GQ,ZK*dqu'brf~)-+| Tk-W4k:cT; A ٮӇEX+=O3dIFҼ?=e{ CLiNb<7Gÿy"ZV@ @<Zwߍ\&3mSӾnGҩ|0Ղ|v'D@OMn^=-k&׸L=])Ne Y5VMn/cimNgc][.MVe". '`t=v)øC0eU:|X*J8}/ ݢVo> dhӌN oY,my}a-I^cխW,pǷdlsX #f =Z7'S Xau BD<:\jE1@MoßpPYO5+QƋsLƮ6ĭT|gܽTa5?0PqJo*'A!#fܭ=I:&bNI1nsyɪKb9sH&k "yuL M`R;VՕִ9{zKbh0!R\tgYPpܪcsPk ur緻Gfc񼆫}{i[/ ՝r[`3}{[`!H|y cFk^@cbX[P7ѹ4j{k:]|T}l̫^FXѱ1C{ mYQFڷ(͒fI)(S]rn6W{:vS]uV(FъgB!e u<'e1i+^guNd;Q/BPaƲs٘JMY[!վ~NWg˦ʘsrڈz%)@AϗI;C.Zuu|GPy#.SͿ{7=Gwe (^JQXu;`Oצ}tsO'~J;ot`0]j o4o } e? ;Q9(4 .LIORN+j HG0raT(9<a)7MrqW&VK5Ү' OY=fVFGUzJ0 4#|v<ᕈxnCߢZ|>~u_)dyy)Q[TȎa꺟5tm2q;x80yJ/l$]+4L؜<'']&{f`u|w!_Zzpbh6gs ؋qUF"yh]tūK%%7Mӥ}">k\ױ@UI: }M eO11psޟ}WY=${FgTTh}*x?cOMk1zAkϽ\L>i=vGo)OTN]:uf#l{4+h<ǺK[D Ah #1W;/ҧ~pS =`7R P~rjy"pi\1Sj{;+%}Rě%s9 *:z)C@5H!F 0Dh!9` NJ`!C*Dq@ @#H1I$IDDJW-+Ve̾jX*gb10tשދ]ˌ'̔Z(:`tkN)#gWfs6Ȯ/o͍gvtpDƧci94h*/Qש7?ܬtQkZ6s{&{+%QY݂*I:7D!# ˎ\qOTבf+M^~#@g+M;dK]G %Y$sDI)MRoؾ my .X]dz*QVIJ%h[l;lfR127$JbI!Qmn ?JXOhg<7ps@v-k hŇ_==4w8kE66V8a=AxG"FϞ]Hf+،ޭjD+ 荖:,08%9}UhnQ~>iFMD' d+7ܥuK_VҜqzֳS៣MLoogUUdմjRRq2E f/3c*Sig,o'ຄB$FPj<:.Qa/ᵀaxN]wY$c׵sp$;_8+r$/2}aͰ]oߜ;6**?3v()XjlSWGOB7IMj.K'-RfJ٦`lU'd8r5.1Q{9M[Gƪ@^!~QHk=fRʕqh;7+xz*UYa{Q }m9t\.ԏ9JV*yyg>_8 j5zd 9}K@G*秐 OĸIE@'T,0vr94:{N̩ٞGk,Ǽn 2cYGԆ]xewSqAnSRC?NC9CyXt Ʋ)ʸWj~b9.3Z%,ʥ݈(m(y`O0 A{=7xs{wlWO3;YVr6ӣ̝?D66^uL TU'` %bA;<4jkʷ"m ū_Z.I7osUމĠϮ1xqbV>J]TaRUASMɸ$1բI u]f-Lo8ܡ8|4A  <#ȃ;{ћS*Sо}&4*y8Xr̫t3[mw滪`ȩA kI8<pSp7|}Fa1}?pr#uG=d=շV~hڎ;N-%ɪj;@!GSn.BUrWS+9SGjk+Km_ϰ>RY^_jg˜&:f+6q.PZR0#E۱*Lmj&I6FZs_K?b0m+},yvw/cjR=Jw{cO5߇zip}Ս_ZA<]7Py2&Y^]{vXAoWGW1o' o`lSU{HYW͘Rsxe^13}h p8/{n:.5%N= w,xc68Fv0j%b!CA @>'۾~XMx~sU[NV̑^j}c}8X9 @ ̙id*%@#e.w*[5M8N']{)^]WU͏=oO-}U }?tIMlYht #ʱ-%PCVW."+JdJD7+",Oh!*%8I4YI35[Ik:*Zng՞4=2;Gx*S'Ŭf*;*B_NUR7RPf" G0j_:F@5$-yUf)\d.[N6s]Y³!AzXɨ|~k+ɿ>6kŕZ 6<'-E`Y ZKa=ޥ>`|д׏?GoL}חQiC~^]H^] 1C=>[51?d4=Ӂh =AZ>S,{&Pͥ5}pY]K[Ń Fl}W,4>ym]NkcjES}sҕ΃NED/PhO`EA C@`FbD1AcGH"4H !A Cae (T#\+%b'e_RNmm 4To^kyb.1湇R6}UOdAøzSZUZZEUDU@sP k]&ڐ")f7J^bPI'6I>'~{;XsoB{E\wl1Sݙ§Le>xU89?~-(o};:J\Z?HהzݝF%JY,yBN";DE@0FI 2 " >۾XO7q9+~ jU=ʞ(ych@ ohӡާ5wĸv5 \!n&Wٕ EeAb7BSrEn8jrr!j@RMXY)є3q{Uś*{qVa>rjd2jIpy<`H aoN6(2ri9%r25~ uwo_=Sy<3q6~ExT)*\;)J+"EQ`k2%l_d[gikZ¯HQ=WU` ﯶt{#~'zni泆QN<ӗ qdpO}^ˍJxWSE;#(`GԚ6l\B'z~MFz'bMF{- |4ʬYgOyV_ ʕ-Qw:u7E6ksUxS` 3rB\ZqQg!PϥE[sg]1ת*!-7!=eU~Ƶ(ſ%Q6*blIZT_m U> ٢2oKˎ;>OS.ܵعrWw^PT9w=NWns'ۣ BDͱF7"*NK]k͕؋^y~c(|K4Uy1iT:O_b`V3U[Kazަb~/˷Cj[rwv[ؠ]7,{V־2ī2*$S/CdZC7/)m ؏/ԥ,/E~VRO2s2o`zB՜z|Ȧ(}]v|fBq @s3).OE USP'}Mub*D3i'Ǯizg>G'>dz]۾?Ms7Z[x5?4욆I APH L#E+]++YNՇLO/tYԉWy#OdT F=e\CKjuG_>=iE9،lQFjܑвφI%^EQ|:;Q2gXoڮY}[hqSЏU7}s2T}Z2<Ǖ6&O{NHɪt}X1{.ZREc\t[[8Nbg"F" pVHd! D2dV8#I IA$EYI%93ęq-LŮ{{C;|qѩ}k[߼PI]Tb,Q՞ ][w^:W|P3zqN"e0JF* ,2։ZyQ Ͼ]xY_nF]{@otiOHG(/>dry]f_Hҽ*O^i㯲W>'^QUvb((Y%eԊVfcJS-d!  R(]H!@|+(~{4| >s,Z -rW|žCrw{u4l{~x@uó3#ŧ ^nę/`PzO ¶F::X5:2O#ڟF͠c{xjpj*~jB֯}HY!řY72 `@!#Ȃ ўaUuh (8ypEItŬV1AMp|UJtR rz*?~/#sh]U찅;(s0߷3\:/W(n̖').TG3F׬}s}$XHݪƴc!RngGhJk@@Te!h sYWަV{<.?PH *PV [%}`̦&N&xka dT++Ҩ=ɸWkYU< ת*DK~& -xZ teƗ,iU¾U$s#ԙ!<nh[ry"l*ȪACYNB}2dY[ ǧ`AUb:kU %jI'\fϔ%ŮgenQ*9@ ;>'>WG[Ǹ??t54><(R|EGk&[!I H#  U/,\T҄BH;{"v}g_̠ӭ|y=;U;Q~+G~ZjZk %,ת^651EkvN՗v5u_[V[:`} 3ݗ"[qjAl_؅l_ Mtq$^|=f?g2{ϫQj-ֽK@ΌKgZYu[cIʪbuR:e9.%=Jz"M1'Bbƀ"11c%#*"VA"0@ A A ! mZ̖2KJ-HI#X:~b!?^'p2Voc*(>'>vYpP)XY߶h\stU%o>񷉤W7G[dxlN|d{ݹn#2]qUcNи]ѫט _y8於2o][mZrw hʻYuos-y,iѩFĦ!ܻEI7I$ Bd@&jMCR vG%(oUgOX|O@zqU7/ufx1g;+d>i^ݜ8dQx\/<,q)ofL5B4to|u:/5[s>we.zc\t6؇bȸ^䡵ݭ=7xCq :S%EwGrʱWP<I6}L7G[VB* 0H]R]k3Xsjֽa͉R~MO55Q/Y/B w^߶] ' i|MR[62sm$ԩ\&! )8q6teŽ]h{#+K̯tٙ^YF]Qy-e{z,gyG^{G YOp_ aG/k7+@fYv7xv~d-TBʼlez㝫=Q~5dn~#:iT/69UIRF)(n|Bn'[ߝ^O M Tt"r<j72H*A ")@Hd YeiEL/B%Xu"}kI-q~NRO+0rpߧQS԰)Gr/nľͪW -Y_'t2WSF~NbJџ+x[+2:t%X}LAYv+QQt 8[SE_v<5-KYX&z ĆHeb"`C!JF X`0E 2$Xe 2,qeqc+H#u+v?\^#ue?JT|FFwkܦUSW.]oǢ)b}ȥtbq[#h,:fqW^c/;g)+nZxjˏؾ| 7hl^qȺ܇==]k޾ɃMp$w#TiBܒk^[9liGs?f$J@EF H`ހCu:Q?q?Ѽgq!~}G4?g8e/Iٷ|:j.]frN%eG#x|u Mk Ss |z[j{ѿa#GV=hFZ5bx8>%Yai~ɓ"hz=ais2ղ-p$$td`σ.&ڭ̷z8i^?3_zl[ [t#=UNNNrYL&N"RQRo;:'wòZh;.P7wWdc%VEc򬥉,t S&3dcYEcuu8 mB $}Pcue6u=DA^I8ߨi#Ѳg7A&+EO+$΍ikocwspWWcJNɽls&њWf?q(B-eZ3IanYR:R%iJ5*K׃0+;~.4^}'-R=S~}&e!eP,BR4޽kؤmt>c;?^D׫{agI;ͽ[;$XNyO%%힗\@ĪDz,b*jl/Tާi>,Xbwa6W |Z,snʜ+=(- *u[^sէM8?%hCݯQ \X'W<`E^`_ 2̸$*iYoU]l雯Sŭ!,E:JCRJ=OhE;/GK5_f;,{ +әAJ:#%{Ab)JBCBk>%MuИbjaeDsGpIOg=|J!>)e Ftң*%j+>Pv?CN7̻S:z:], cf\\leSe$T|ǴMW5}1}mi Cu 2+Έ.2ұ~f«J&/jW9W!@Z͇PXJ{2pnD16gq_X=~XbUS$vf#QB.obMfw`{60qG+Cp\5ok¼:|ۖqY 7a?cc罶OϕN]i}#..O?;ESxd\7'ٟuy14buh ^"I# $!XH CA_GӶpF݃vO7bD_A䶤u11+Vn_EmXbX-SWN38X|6WU_@rVmʠl eW>;`wj~fĭ*FYH?|8ЩR`k6#%6'"E ̼$M6V0yΝ)㯻cLΦ6OZ#OCdfk;lт3>bfżI569~(JE~!":Rk >E+]jh-u֟d'{ܵTө(:rW&ȵ|2?J'y8W7N)._ K|n9(Lykk{G^w2jϥj)ոCrr[M6gqxubO31^jLsqK5ګ[Gel@Na4L,gNTc*pwm+۝mGIqGV2vik^kqjwc>V>ךhCeg/2ٽMڞ.3nrpxw ;38̠ȯ ,u|kCTؖ=ևTDGz4)>Md`z"5VZ:8ce2럙ǞV~=v #_5wMn%*t!/ˣ\/_NGlƤ9 T<ß7X粄wayڅ΁6o\/m*:PViQ3[r֫9tlV9f.nx˥dxle0r9['"zS}Q0ZVQRjZj9",e@^㩭;ڤmR+k4rͭ ]Ol>ӊ0ΟВ/Xڝb\OտakW{{e~ _ l\: -'4,{S͙Y5¦6mCe= y=,U(kۓUaQgLyϾ?{>;uEM>CSf>Y_EZ_uy&j3@%pMH0HaR`)R)EcH`V\eYS2ح7ok>Bu^Z3s~~" ј357Ur56j5q& AV:ozk(MM{Q8W۳?G8\kUgXcw mUڿVG'Pr66XisGz *P?\2ЕyZxsm WŤ>#bYIg\έM z=ďH eH@*dDh` 4H$H`d,A/qķ(fKgLv;' :ъ'mp^N}iU_꺘YtwkM{Л8{xuVtmIg~oF=֟u~m1,ՏI.MRS=$a97G::s~H]^etK#S)!]"XHDX!!!`$" 7M_kogzq/g>~ݮ:>qA~py-~Z,K=8&kQsا0R5=>s712+%o1,cv[ނ~fpq+^TWko kyo)g \urK~pỽLK%Y,99 l婬&EBhTҘAW=̀21Y:E&UZ_2b^TYV'7 1\Sط?m9K-#^4F5)SZɵ]e|5XSq\]Oٝ*LIZ;w] etKqqBճs<gԧԩ]1qrLMMji+U+-_+wq*U-(~y[0ˬ;WmR-" N\)s.e_>YY/>U˷5gJǵ,EQr(u{КSi+n^|Ҵ2]e Uj|;YmcRB MC*5w%GImiך^U:RbyurFZkiu/f%E QZC9$W@y&Yno{͚|~X+=9^;5V糮&"MOr{PK #rlxLX`p~=tbY6gN]uQ}bV`}zy={=E<qo!8-h8OϣWꏜZQ=Go)3$ۇL =Drja7[~rߌP7=m8eRf+>L,.}GZ!0nc]VVIL$c-g;koI{׳kR ZX-5ngtT-B=w +pr+̕(,PhK7JV\i>[.?*XyUUYXOyOk'-IxsXݞDt ϢJkQ_]TtWRbQHzsNn&Ho[*͗'|^v:aBM4'(5m8l]|Z#Ӄh12!N{x-՝ٞ魗̦Fw~Q<ϙO(}K>bNkb5Rr1mxD~N +ϕAG=/HWϗz?Eӗ 5 yu$LB  Gh@ d2uI s1K%TZ:;ЫrqK_kmL体<.7Mg& 5qZb9o(!lMzC7\+Jh}%+/? ?L.}/g͗ĤZN~ѵ5Sݏ}7S^9}?p%Z8LYKP@!2P&2@)6 @ "I qħ*H!Y⩒TK: J_EgϨ s^'ˤAџI SC}9(ӏC}{=~WoDӣ52q1w;3jАS] lJ}MYZesi6D$0*HmLm0CC@rs@L;lG5ǸI 'h4{\kkϥPlIXzN|߅`8_z d0MŒ ^-߲%6T?V#3¬kݪC?̆8?/IkՈZSvL{t yL=[\ߦ<ϯұ>@~Bs .1$}'FK-i]xzh|ɤ LvQ٥W]o%_D5y6UěǑC[@tw2uT*Ci&Jrԝ ]g[5[}a'z3!1ZRbVwP6K0>ٯjձ[FV;חٝ}ŚTKsPYU(v:jkkkeZ[^baЯ &Կa=y7&UȉbkVjZ0vHe6NJ${b4y kV-qSg4UD䮽nň46<|uXf0o,[ce {FNٻTۿC88d jO_.δ䓵{YJ֤?{eLa*J2<m Wq neN8.5dS6jqPzۚ׺"qTl|S`Nd:sKV<ϰFB M=߾Rklߙ߾sغ3޺~3j n+\pB?P.ܪ:Sb >LΆSתd+|,[VK_("p.!xw-׶^L~E>n߻~|d۾~?i+>ma=w^O+9oO=b--d}\zߑon숦4su1\n?ZS~G3gK˵WYt ÕL0aDX 4S!#Q$P AZ}eyeBڡ{~2\)3w tto>Ÿ}Pg3,>:rk:~*rk%ppdJ'iK;+x{>ƯBl Wâř =l,:.YK'' 0dC+dHd0@ I"T"Y ƘGCm:Ƹp\SaCF5Sl9W(]_w՜ǔODW^lLJf}?c3zJzyVS_uy&\[-٢l0$nIP"c 1A!c@ mŸk{Ψ w ?>qgz^gzn{ p@.7n70%fi{j{%N]2^ignC5=b&Z7I]YIX5aAUMB>&R1طEuO=MyڬıبqO]ؚM,ϭ^%E&]}{qit@fê蝕)4e eW!a˵N\g{ vr=[v߇R ?t*u%}D}ގ#Z5aJ.~Ӎo=˷Mڕ'Uٛb55?S7.ƾfNl%|=zE6t2UB[v_՗o;]?JP̈́9t15 J/VpU ⲁDebvV9V.[։S7>*õ_/=W73OD+X^yGw ˦ڎbSUmO+K?ugՌ߽Ac'q@= &%Hd Vuo鮿l7U?욯(f_}$_x Z 2KKK.ɖ9RK#NwP?/w?"'y?!|G:u_zWDmVjۙPon@#k'}5zK#q?וu:`Ć!%y}]fj.P;G^Ty&̻&̋8UPt#b4b_;RI1A+;^womdX(۰ HU@ H |8?Ѳ(AMMUu˺\7)Hf;{ʲ[+8h~iWD:ֵ6gw;UÒg)kHܥ991]u*՞Yo.ljV]+UiS܂vvzz>ɴ` KDF̵9JPA*|9*kz- j>@WQ**a9[iꌾvCJ,Yjȷm]C~UcGqþlzlBs]Vֆjឝ9vUtS-v)6mVֿ;\ʡr)` ɞGw+em +klAPrƄTvYmI^J/ׂ/WjDxdخcſ;[$͝JZf@Ө%O^]rF0mbloVF mR2b 0c:?ZeK=^NSf xzķ]kWm\Nr}93:՚o%wjxjiE^¹ۢ/S  qfT~'1FoTy{3hRјwg7~Ȭ;Ks1G,m}wp %:W')n-[YIZ2>_8Jר6KG[LQ[c?2f\\G}gs|ݮē\8`г!$v1 H#A!c"n?uګ8k.v~ZCe'eU~&boneXfLܠS&p$2@`C@a"iKq.!}-圤A&k8ڴ%m߹ޙ4k~%?'?d ~xZóBlykai'cl3}Z%+-l$nIT8aHQV>I$2 !I*ƀU}:szJ}!i]}gǤ[c{'yy8?T< a 7LWh`ο|i\揬#SiuǮꏇO }a?r4呫.)3=(َL(yD\oo°[+K65kSw 1ޕGGZ>GNǼWC:ٝB'T󞄆*9NM77P5TΦYNAe귩Z9I޼ۘ0]]3T,՟<2˷TYmiXŀ,`A,=z>8EcP,J d#V'5΁c3.cYQ[NNOT H`.;[~Pu`ݳm;r[Z=F/%,6o~[_t.ɦ;e|5jy-sʞ#nRA&}+0g%y ;<>^@}v`XBXnNb<0Բ+Qi䱺]ҦBr2z)/m<=",}TlRMop_Mr`yLg{=DT*/Moz,y#%[-89-k.u+wD7KG(nnG(ڈ<4k,̾ ɡI,FWl"U?̈́!nŽsn@/n~1&'dhu{JOכJXb=Z޽zkD=ZW( Ij]U}mV]DƫŻ?o56ttU`y)}S7_c @6l3vbd^ Ƶ<4[O4K;JRO-TZ3'1FL}2ԟ{{ON2u*KZ|%K"͓ϧ[[__|_J6U4|FYl߻zЙaj,LYii*Vlg>4mo_Eet>5޽Q %lR1bHmNT1D$s3(R`lnjdnLWGM}\b(2$vl?˗Bj;ޞj>m[èV•jT !Mqd}%ך6;?Gm*sAx Vjʀy.:Si uX5ZތlS[^I@ꞛ .j5k Oᤣo S9o slU#8g!nZB4/:+ >:#̂TT[N%֪V+ md@uи/z~ϑi9*pp B#Z8Fh<3+)ߝlx$NL̰ÑGM]2c+r`]ǨsYz}e=iڕdREI[(]ui;±r^k>hMd`ה)kR?G?TC\wnK`ǓdhD}MSzPR &mU MSx^9a˶t}6's5ȵFZmBzoˬJmǥ{t2 S_(>s6-ޠfSeG[)39V{GOiU*r3v&t椿jM-'$^]d(*'׿f=Y-^e>[72m|b O:򔮳a*ZYoWX榔I晼r1NFRn/Fg F/+`X| >h^C{ؼe-%9SpJ83?-r[ﲡ#ObB`I $ ".0I$,ce8I  H`X eH uuYkQ~^_VOO?3!3=xglUVE_ ?ұgzU:F<#9E;׌xGͳ=57ūaX~ʧ4e4ܞc㙃RhK{XM/u40O?Sst0O?Sy.n2Ռ"lQ$PS HHd0IBH $DT1,"@*!XiBȣ31ӿ}x1E ?L?A;WxP)4nQR¹}'iz ?OSrw~@m Ձ>qZ:~3M H4l}ڞq/?.@?lrf:|#ʿ ߓGed/:E&t l.qG#EADI@ ;L?P{pcgo7G#]~Ǟ9XG}m‡&&z`&E0 xn}G$t%kIUmO-_=GgqGx'٫)%&nk ]a/21ffk5eB&nF3*܌msKuCrJ?y{k]ɫҟvofJåuku$8$>ƇIէT6߾j9`__FfUӇV;%m;[~e廭y^=l -Pʤ{;pR.U΃ή9¤:7'[ #mMah7؛]{׆WK{)%10W#CjWJIl8;f7lG겫Ns_sξـ$wUP]lGB=BkF*'=ZְVYKP} zKs6dzi^:\kX3fUׯN?[{x5<_]x4R&94RAlm9 2 pֻeK9yG29٘e;#@=Ԓ9J'G;#!omc=VkmĽ=WkYU;t_W]wOϼ~uR-ܪީ%zyNl^)ho0F9O7 ue@W8 O}b3ԓ][tNl~d1s^ew7l5Ϟ ޽xx}NQ4Od{?(|bRkUcmTT|{"NK;; Ĉnd8}yMѶ" .NAK)2~3]N2z?h"s'f7^hUŰ,_~`@j/'_KBUJ/&|Ƿa`LVuLth`gDE q:$hA`p iA2 >1پ>v|}K/r-6-~gg'y= @= fLX.M!܀ɸ$y.SG3OG<~j #u>ae/_(n.p=|%~rbe]%JG}Jm>Ї_24?5?h1WS?|]e?J`&=Egg+f%*M)eb[h#{ͯ$`*m]kK"MMMnyñ|&5NYMjf[v&[(7Et6:`{}cOFZZXP`毭)Tڗx~,xk;˹aM/:†@*<&O+5veuwRy|uٓQgq+boTh. Sj +bX e >:߷G=sN<{4To~ò7yvMqWAzn[~lޏ]|ut=5eLCS).m+uoXVmΔl7f=r: 򚋆פ¯{~m +&pR ] FrMWk|3=MX8կ5J*"'g,7?aԳ2#@Z~?- YЭ'w_o3*z_Z+< gV>3}~˼~]`P=6~kb"֖i[B(#M~<4vʿQOirN-R֌R6mc+(Vo;^p6?|3!Wm=nP9Mzi>G zvoR?G rߞok݇&}l!0pzEcq I``& 0A%5BScbr}F1o얘d2bihEQ&TLe/$&H $,c$cI$2a$@IBD VtdC2204bVcUESCyGޡfO;j I'W З:/E5j@ g_g[3cJK?<.- 1}v?鮲u5UR1v4XzT㱤iq).,YEř8BnA*ʆd0p!`` ԐH mv=1~|io?G/0}J&#?9'`\z3&_g3`IH0  n)G=v/MW?m4m.lZO xO.krU)u?4T_}}e@۵.ҟ%5uS(SHoػLY[pa&Sy*JO5\X}Җw@|س}?lӊ~MUթ%sGC(+}avB7SN=d2_.(UOS7k{۝eb3:M=uk9Od)mz {m7|_߄V%ҥiin_kJ5Q(,]ARv=o}5OO܃fSo/'(v%ysG0 di'$[c\/^jSz3QMB\JhؔV%@k]^l̫ĤO!sayu7'9)]V7'"2;]vg~PĎx>Z)t[SUҽrm:7C@[[J4]߼q[VUjzMk~M$2jmL5e?ENk SW7o٩m[:,T*X#`oI8+{:綒]9*MIEquQ{mUgNxX·' !zh?VKx|9}ttgR^7&B 5WZx # CJ`|z%zz4_EN8lӯcN*9S+['us0Ys ~F*~e'Wzsfrq[:Yy7\*q-AlE:]_o~ӯX1?T]+딭7z'O#4'jáJ $tu|-(9n?xl%NЄZi{=,ehhpjYR  "dm̧dUf1 zvˮ>gzk[=h\a9F 0gSKϳ$D& 7 MI@SL P@%+($e2N*oæ=^g]浨+s] >6;|'2́7}d_(M/Oy3'ٵeisaV;vm~v=߷k>3.j-5W ~ w/{73+`2TVj?tgI'O^MY ?'(g:7Xd\!>֝.:%4Qc)cKh4X$!0@$X 5X Vv~`dWM`A >b|yћ_Num݊~n_P[֬9)pQυ<׍8k[յx߼^(W$ ~ ھ)>wm~ZU'\up#Ύ9^dp}UW9G{`T] O9G{bkZ%Icb arW*,&*Gܐ.㈆dY7$n ?Aq9#J[ ?@܍"cc v"`; ׅ3v,+Xd$P{}ːO[M;]`K,VOc;"`g2YT,tO~Cxm`=%xXw*ᒁyԵe( y;%$:OCo;Ϗ Ϋ|Z~l|- 1Ls,o]O[ߡ{zOWof 12jEQa.`\D`0J=r=`>LLk}~;W Q`Mo?zM5KQ_M67Usuu5 gק9@$܆ 0nd7& aO,ʵ,e)28,H= lMX BzݵL :=ڜa.Z8AbOtͮ$Or}?&9Wҧwd䜫'_C'(R5sMyd4V mgko:3 zvw˛ZXfl0E&D&TCZ1ai `ŀFA,aG%@e=FXG@ "FI%D2ꆖ@ˊR)I[&M8sTT&ږ^9ɚٌUІVjAR>D082NTƿ3êMkc>qvEKuNvݽ˒ GվYop|v^K~e)}aVS}y'ï@7(q\]hZri䯫.GpZy+˿|IfbyBvR:9 J!^0 a=D(1p &vKϭXBq>eo~,F7 7 >ɃS9p)`T!WXB &ؼ4ng"dFC~L)JjsU#> >h{H>%ykB*܅IS &Y<{+yg'U,;IuU}Kk\o+vkE?GS=j>ɝ#@}Jz8,ro#HwS;O6p=y':XzzzMs{HnS{iubU@ IR'=Q|!O:6}QR}yt拽oTy?g*QGVW.uӯ@U6P5X0GG<]vNR:/Eub,cNz-ɇhw.yΏQ `,tYϑd}GePjQQ̀sr Yh]uVr-lٶ)PnPyי;;w2~/h=K]̈́oX:x(a^/ e$~\bo Ul'~ߪޏUxLzxZݒB+ՃzsK @cXy\ {ߪu{&w~"VÀksl5 ^GBaf)m S}KvߑWuxȬbUPξPHVz<Ƅw`Fl ~<myW[Rv[V$vgBE/x'Sw.)&{)C;tOOtdz5Wkj@u|{.>eF$ q}rB5b?5nsuj5ۓ]G[]+ughRc2b\b*%K_5s$`r_ZP5Qacה=dsq$N?tSo7ߙXO3>9`ɩ&B`HwI$@a0 Z.iIJL&W&̋Ǩn۬Z9?zNwuo}Lric^ =29fqkFU^K`*vνR/cU(k ;sc5ϥo>ɣ>">7 ?In8ǧGfSk3P}9זi=i>.wSg]Yt*C+Rs]/#!ހ {_`_"+'>s?՚}ˤK>Tfs2G[|>q<J9½=jߠoFq9l䶧dO沝>`A3 QԓZ?hLo=KZ;:O7jKfYebҜmБB@daE* $L``p&@d;{x8{}MqYw0~u( Ϯ>BfA\돔dp`8TS$H2n66sU~~l𛗾 ?YJx(ϒ)+S\QuN.}ɶ JM)?v(ܗF!l=S1I}ÛC38wf _\1_d $tPXu8J?辙C ۛ;oON~SȂXPAo/ AMv \'%jv vI&wu/E*?by+^1W%*;vRFhB_wofexŗצ4[0݊}zo"uyk, A*T [g{𞿺GǬZG{u{{zNr[R˸RфY]DQ]vRlB[\RCN<MhgyyK)^KXubGhz`PڀR]y(v9z ŮDzng o/m@ )#`f2iO?Җm><}V1 -iyt]iUHzقVmY`TޫyXsPA'JwV&By|f jNF A;AFטWDf@T[`>/_-\J"^vo{g%J[V԰3wf(Nop[d{ר1Zl{R] [tC`$4'uy+) /gNײZbe۰Gu`jK+jl#jO~~۴dqVAGgg9N"߱{.a^xjѭI~;J/l_^z^āgRɬ.Chr?Mյl mknR|?!ڶv R <`N66&;k]z-kX/@,*~u *o/Q)4UOZٷ{<;#'KHUpW)21ZK[K7v#ânbT2zvڏ[d=w)bqG1|L'Eֆ HNU;xQxHISSVI]jIy6 /Uj0KQw,|gu>'9fy?;zel̴71/g]eWor27F>0<i߿_ BmoH?űF00SKvFw5EkиZov/N}_~xZjv~ln_$:8R9n̏ft [zujqYhֱq[a*rWqjSGn%vڔo+I6?x۰fC++7U?&f٤V[ yT_bsmZPA:ߘVM|@TyVa9͍yЎZAןPGO#59Wnz?_P9*r* IuU~G\v<Լu'L}{{Y"ռیLh~_\cgZ2'̛-RYke`7WWeA̤잦d;v+dY]T-U[Zj:x:sy VNgo(mnz2}&kD',*_6]Y0-Ʃ]_,+yVyzk@k+c&)?#ʖZ͖3L򝝒w1]st*+.<˭GQOcr~ߠE4_qzqx<ջ=Ma%uVPfT^{efoXo^ߏla |D[+0y m"0}uyy>%|$~kZ1&(epRua _@{2v_26Hh4=ʍ@zҾ!Q~,HZބvC-ޯ_2N >C4Ze}.\޼e\#0#ꉒ^^"&;gW0mVZx3֪JǑn^\%yN\J|zZk<`{}xhzZQ vYφm#`J8lt%J5߫+qO+gK#0YT>G _'%yf|^NE(/7h/^(䄟]~o>D@:Rr/v=ߋc%!s/5la_yDOA,ѴjT|.䜿c,1]xg7՛dJ?lcw{ }vlccbYa5ﻋo9$5 k]}hOwڳwnMmvv'_໕B576ȆMA$@dPA!$WS-+g+MsCݵS:Tد|ҪQ~Jb@PYUPK31UTu,ĀI}5XA]Gՙ-Аi 5 >OLiQy,_c7o|Kށn=χ)κFѼ9/Gp]yi^ ㏊ڷkvq\6}-Ƿ]kߟ+Uh Al|'kTsqSyt'uȥzyX꟤6h]%ys5>)W+ㇹ)PCշSvz]y# t]qlIuxZ Y.I՘z 6|OQoW]OKЭxKPޮ|RLJ+ߗ0e;XlEg9x<+mvۮjŅXe^uͣeE歂ڑVdU( *)e]͵nr׳W~% |P9-,ֶWf&ʽ|;xŷ^߄OŪ-)<Ά`w >@ Xɑ$Ҫ[ݽ27(P9U]9tֵ_p6mݝzv:NAUK h8mևC]n %Ot4:O-*7Q[(Eg""6` +:nyLj#GCN:dc~ltO?J5i2ޅ=#NX۩O?W{Pw675E͘ɖc/028H7 hY1QL5Ԅs_o3Z hUe>&2\G٭Kb ͬ)4eLILA$$0A$$*@.jQr/IJF<0Q:{ ?b1xQ7h{1xD)AԛW>srl HVygՇBuiQUU  &{8̄>=q=σU~GmT]'Y[_rʓ9,InNzWw3/>_v]<֝˜拮vȶ\dY1NF8ӎMSҎE֕nyj3beb$0)!@` 1X2 H!XA qu"P U$0I!H [a*! :-\Kf&CcVJؾ]s̷zk.y|7al<e%YH*He #Dz:ܞc8u+C=@A h"q_p٘N Aҟ$:^4.ֶE}<8۶Ci]kP-|zO;6+-uRAP2ńYYQ"_EI2E4}w Χ;+=|տղedeaXVF}wӼ,>/Xj:Sfj_e/16^F@nʘsQz̺w=zmp&Nc'`cWT!`Fx2|At4 죩3|UC9ӍwrC0g^<tb>G4|] =´o<3YuDrC'0ZreH;4Zm : ;R?[@:5ýגu&tRZecĩ$VŶj:$y#&,z~le8Eyry@̴|֚ː{O -ݜZNNOb)p.Zml(޾$ ,lM Np\;[p{e]fFC.;y ~j(UG@̿e>MąSV=Yf>n#F,,//=B DՅǵ^_aNf:%KViDcˤ $H XL$ܐ`ɩ &3DIĒ@DC!p#ATQ*FdBd A!D0 E14b )J%)#5t5e}.k[SH D42x^,jӺ>w)=ݿ YV=^Ī{: N8%Yb)=lF!K颟9<S,$ߔNtVo'oi'?/';d\쾰G-V1>H&(h k( y=vn/Zc=G@{o5rmO}z'vb-ʭ?؛l}ug,62t%i;vh8*Td|S5{ݦ|l\|z]|\\ԧK_2c6"廔RE<;)ĽȽZӡeߵI> ''MUbt\ٍuY[Eb{:)>S<kRUr<-hðƾ [*⌷=}@gp15 _nٽŧ`(RYPGF&IS:MR~z?R\kksZK). TH9˛WBer8#+<\jS`ϐm͐lPy%?qgϳS+*jt77/ݗi4si޴ sk42.dI>g.+2Yn ΢/̚>B>޿2+?Շ{8G|#1g)sms YopxIi ~747<#~S!s~f ??6t`cr _O/6*ޛ=g g}E',-oV翃5qSQPgC:L#< -+i 女euZŶ+BANgC-*$؋jmFo]9 _=OD=Z<'C t#SHo=ʋב7I$wKV7 P9m}TF<{ӋMصSRwc~|$g"ZXsT%Os~=JIc%R7|~cqSM-Tԥ{>$ H{ߏ}lɉI?GCukQz s9jwo9©MG; usS >-GvDt>;U~+ߏwb#띪h/7,/KV7Ztn-[B)/.$HIz= p  Hd 2 H`$ Faq a 1h$2E@ IDL H`1C {MVJQ)J&njnŹ215]Yں*ɔ= .ɖ5h)&ȴ%fgЎ} h*[- A5Y_ނ natjo~N\>,Y[Y[GBUPTSYum[kc'hht*j<%춮\ĪYںlX_.xwbsɾbe5U#ccc=fx~ Y5[y.Mc:8]t4F=J:inko\3mD㛄E[[ ԵKR9Jq|@z q/Cv0!78N&jrQ+eF"znGh՗Kk~8Wó]G\kHe=C)|Guck-ϭ#@:4@a3U[(ǽEMԣϒ?)dq VUc_Kjدө07}|cp\32[Ԣ@|%*MN'UYE3wfwM³s,6_<'ө)ECjzoo =PÜu}Sy{gDw!vW=xY =߷Nf3ԍISqMe|vn5Nk+vۛٻ8{d=leT<@݀mO751ndhqBI}mK\JiPI}mN5t\_<R%j@AK}v]>kqHf6Vݦe I;Ŗ>Q`C%e`Ax^uy_}yo* wi={p7 :x3hV mxr%*BuR %Q QvÕP8&z)BS&l4jFT3gm7ض:M}wuw7__ ̲],<W`5@-FXp/LQu#gk<=-/RwQB-;{܏ 3OhlϿgùUC_ʊ /Gƻdkfx+,PX,9,eԎ}<ݧr5}!Z#1PX.w+!Suxi79[;]W3fF-&yN /&V*[]['@x|-ϹԷW]UՆ 0A}7UԿF6myG5/ҋ] ;~)>G;kShzEԭm5nZlP xu}U'pNHav?:MR} ==RS)>}p8GdjkG! MƱ9_X':׳-^}O1>.⿬m8toyrSTоF7܆1ߖȴu80! xr 1<'O Mժo…7VWˋ{{yTF6U?7%̏J/] [Iv7ëEPZ 9WRVm=&.TTեnwOI踸ݙ;d❑^-SV,$ >8;̻ETRf'1MJ4]w }6%Mm{x.<Z:H%׺*]W=kewӟ>wGGt#n`z:=CMshj P*_w\#odnpҮ6}%vk.^AӱPe2"A&)2{ H = r Hw)1b$V@D EG!SAI&6 #j 1($h$ ¦(eZ4xq/5מΩT7 s,k# }$xFs_i}\[mIo]K]@Ё>.f#`|w'wҖ -]I˅}ʩbv5(I-mj[lVh\.lhDK=_˿כxcӻp4 hp,MC"0 մ+΅EVyӣQT' [S]3 hGkliR<K䥙~+7,T䦄s;y6ݘ,L٬j.ʮ'%kKUVEĀ @$l+'Ս`ˌ]-)%Ս\elߢlv쬫z: 6~$ RH{}Af!UAf$d|w>izYL&#±_*zfާ^;kSY$4OCEh,|uVPY^w~x;忏q~dǬq؝SFXޖfxpLS=Oruw'57#Wgi*-Xmy_cg@Ziu|I+[ǰ oM{O fc Ui)ʳM-hk0u)JO?6}vkU:]|IV#2o ^m VU.P(c }b:tZqtcFFZ-F*Zt+O#V2:2U||g 5XʛGǗS鏉>swD/cCI;sօ8}:ǻ8E|;:|l*eutpߒ GNʵ`d?jië /|!{`\WB=|x:31И|DJsIޯ|>ה9$_z>KX_o$ݚ}y;%t7y /'?.Cm9R,-N>Ggт?@!S@ NrQpW71*imj龇[{6ޭW ͱ|]]6 li;CC%Qßi&GC%QÞi]݇+Wfqڪ+dz3S{ݗWU!geUXW03^֕Ikkۏarj**5ilǰE3PCfd5Ʃ:G/Uĩj8fǫ%UҪz|$9cbJJ{Yk,o7ϬzfukcJS,/zKiIcjYeM| ,1nNEM#Ym]h62t]YxPYUPIb@zRLo>xXlnّ9wGE,ip^rLѺ>xں(^rLzDzDYdžJXi*r_e)]lkQ18ZRvJxPSV~^B)Tբ~<Pr[T^Sc=X1LA$$ Ad&I$a1dA$+2Eܛ$ɸ&! !> hba1m $i$#E0@ 0H  mĄ qb`]ɹ&R11.,,CK#2 OAfc28rJV|lcѽEkCA=B4Z)AԨSR47hv~~dTɕGȰ)ꠋ>[`G:?04N97?,DQBE'{홉$fFqu)ԭ9Qv\v ԧ:ҕ(e~nz/\T^#-.ZcבP3#ƥm #J>B;Gӷ}u}j-eˢ~t[­Ƕ{}[yjz2UFuM(O V~e΋['qgN?2OgEzOMܧN;0,l&k,^70Gߐ͓y3b^LFlٙfOkM,s<;MFxDy;pI?\_ox/I_z7i@>S9Ͼ|OBs(3X^ZsshǵZ1(}}^ee߽OcάqW,B%pu9j/ᄬҟ7-^:7g?|>|%v`ȕ(/GW6 *}TL3f_J'fGptj{ *o4ga+m)+<^;iO_8Jh;bI ?uQpvUqܯOn9ޕfo+kz5Yo򞾃]*R~_ד+o͕l]*{nS+. ˦WSc:ZN'&e*rqi&zA>YzjS0cAb ncOϒoS诣o \Ӟ_wRlU˚3?٫b~9S=%y:y@ߙOLMu Ε KF [tJ@iaՌN-ۗOs" c)Sj9ۗOq:Lf#h[,^2 [J(nuӘx`l>w7*f׭KZ-ECaEa?_n.Uf?z'ƙte#E *jӏ̷SM jӎr[[6pm](׭JͰچHpA Bb!"I"BdA7 LdI&,@XLHbG#@2I @H7 1pHۏN Pd<!F4HA8)-(dv2ެgĪk,"(3I]!{ g#?<6]kh{󭱿6ǬfeS1>b7F{ c{WT< 5׀/Pq$okt6?3iAU]urm;>f_>=Kw r7~>j_>=Kw dW6T9UKURU@$0~<JH#{?s!uqGK]N88mf> 6OUSͭ\}n}*8Q\6~WV$vylj^dtetu:du;VS*@3;^/B7*e >Kn?MM8RA>o%%ei,б¥Z|JKmK[r?B(v:ie דjÙpoM滚ޟCfUis[dzDh< 9Ig~?mJZ&[6ΟkQqr 9]1 'Y))MY]oN٧gpaeVٕg'&$HrMew>=xN%^FQ>m|Ul8ӹ 8R1%Gc]GCչGNfF1D_EVViEՎh:.(rZQivcˏ^Da孈Vuj`"UMM F3=-WQ0+E1oa,ʬdF*m:R7Aw).nMEx|tF4<>:_O35XmXYug{mF͆ 1VuZ[wxl8s}q{(ZfMVG4Nߺ4**_P%z0T{u.(j*p{vow|>\{g͗;Kò^ۣ#dXPEEӊO-mmq<]$YvmGwyYfUh3TUGR$lGq*>|f/om9_]8:<8.W׿$@)W6n:Щt+us`Tbq$=nє2 9pMN5 SMbwyĸv?k:kڛ*-Ze5GrЉ{or^kkCkm||U3"Jzo>;TtZsԋyj_D2_ 3knlI*^E;x|PD܍-&[=KVUk-ZX+].dX? iUl;=(k&}8m\5?p6NK[?&3Uwn/ ?=˚3?٫b~9S34z>%2e#e GP@\(_| V[7^I7^I(8KTװǠ̩4 |Uxo6b7fϔ8]9\YU掾GF${gvw|fWw="վ jzr3 7fe[kyli470"ھ~-7ސʧ竕8 ~ct|wDs視laUiI~U֞MKCޏvU[[ x#D&u_wr E:맗'lz0Cee #4A;4Ե㔗~Gicik)/<S/ĆSV2T0I0LC$ 0I$]CLF1 $@Lŀ nBb$0LIL1TƂ!#@L1%E0 mŐ2n hAw`a@c`cDFS$"UNRa)Xwwyj}K}q&\jKދ˒wTmﳵC_FJ=\z- =0:\~g;ȧ\rzMaJGC"Lv UO AӠu= u~fi(>S5˃{lmL52!5gm8UJ׿Tzj'-c\L5l/;':=VݻLM|$kν9FOkJ7Å7|5]Luǧh '}s=>ymY~,'6JŔ8DJp9uzkD jjkYiN8l39x{cµ~r^7 *+%7z=˔^4x=nt\k|W [~c\1n3=nabVB3Ē3CSG^Sjvk^,t \pׅ7xoy; \`a}]P=O^2|vհ̇i -Z@kwzFzHb%zIY_FT12[=+z,w~UN8Yͤ'3UZ(Z%;mufAhR5-^.o:K7S߾^<6?4w:գY]^P_ƽGү5Nw{6tth5;+7Πș=p~!֪+ֵ] $ę$y~6rV?^b/3GuCϊ'2nN5u|;W&55sIѺ ɷ\k]=p3:?CRu!)6֮vvu\#Q~u5[N-U[ zy_X?82peS8zssov595779ݶd #9p]ɝ?h28 z&WGhX nnRzֽe4v'kۯ.%{\{#"WIVSAվ˱eVJ*IJތĢdM=zSpjʧI t9b96l)QI9O/||3jsJ._.J\964.=#X?4Gpo̥r'?eiհH ϠLt-OUURwޝyДUZU'}py\J5Wse62 1`p!0j$)0L]ø MLI(!0H C $#$a IpbH 1AЃFT E4n 4r@4 qd 0Hے. XD+ARY=c>ǝ v%9"˶~i6B%/6 ͥ=v"=5O03q-&V56bUz: uZoˬSm_x9x-RmXv]^iPlk|˵(9y3;7je->&kr:Ieuy{pGq Cߕ}KuQeZ1GP,X{,ٮ0*3n&8Į|\X9 UQ؁mX'[n>|;Gpy`k_ኒ|J-Yk U l%—sºxb!ydh4H$;} SG}%ڻXK+ͤ[c_vo5\O +U~8M?ԕi{@/G!t< qcNu=¯ cqbcqNb-ӊy{1[ͣ&dq|pf1ɾ|k2-RXE7=HvYLg|&7+#G݊ߚ,$G_t=_e3߀p~;]yM $m8q7) =t!_aϗ'E>t˻ KocxEb4n(+(G5\_s*9wGae>M3acp4 _gBTU7c[t*g]Zc?qTi8:^?ʥ#xlTPyOטEД1oIGqTU^qN^Wo :! nV(G'+w</GoaUdB[Unj$ vI=@fj{G$P=7)ۃ!0qO ՑsX0בsro\;;mJ^*$7;7@81_tّg8&99tpjl{N=K5?;פW*'.Ogۉ8/N"GGsfC['茡rIkTbc֕Q]t N]Xfcʣq2T3:X{>p{w>=grp#}Ƣ!돎_K/Ol(KkK;3OixP88cX[kQ].ZfPyt}\~pPL x{8Wf3\ύ`#E,*6Nn͏?bO}h?9὾1rQSѪFL~Ƨ:8_bRtxMyA}uGDhoJfTU]dMJP*f?2fV6L52&ܐRdܐ !,$)2$& CBdH łI 0n`a0B qFS:70$nуE  hhŒE8cj+02j}_OYé' KxΙTWo vEŽcz(7NG ƿg\̄"8 RqPKc6JI#\;aыN~nF38S;.qۧJ˴=<^E["#hea@r<:Һك N&x0n:c^!89wWoX^- ++Xjn |~)Q~W, UZz6t$Ztvuq+x>.G,7VLgQ2oMfU|x=~#W ;6=q[q_Zo=U0]yN`{=<5.:eeCә\SynvG~n%s_+Z aURzm㣚HڭnPlǢ:Ev_DQij-bڕZx8mhsk2>:@x[j8W}_nMPկTcd[j5Y4;.=מ72US,~Q $uJS훟YŸ? ķ̙͘4b䆢T0,[M+{x/e8N&FڙH53UCK5·@nWgn?<|[x Wp{oOɱ% l%e'|uWܓMu.1R%]EqlKƤ`ғ#+xK}bzPvU_K{:_zy^k:2_kc9TuikmI~?`XxH iդN49YGlENW.vBQSe{<:YZ-kӟW5jBm :Ih[2Whj+[㵖̣mGccfbk,^8nG W 綛/+e9b͏xrI r^p/fuk~V:# 9 ]Az3۠'}z(PqwSk/bIdWG Ri&JfrQϼi*rJ%g$N7^#F]ٙ)E TX)YkI.%ٌ λ?7oTE홂~h鿶`qq :<}]^+V7-̶'Ǯ1 K2 OtR }} #qYj pKgdYa`q>FhxY7g\*x?e\tV$dU^-\3ڕq,n.1mM̵JvZ'Mm)%`?2݋mș_A |^O==~/-Xd!òl )z^vJ3iE6;bc:8WziC;lͩicc]J]O0ȹ&J`M\1\77lK𱰪8tïZi{&[J.1s\ @:OW|+Ÿ?OEHS^=Iȵ;ڳʠ5$ -pŐ1L0@p4&! dI  )0d<$;4LF p` a"dE; @`IA6HMB" p@ Pars@*"MrsD;6D0n\pmTRJ b܆Wd7lDӤ{-܇ ǼU<^Q׺F l}Pٲg݇)QMyCE1ߛ~ksS!&仳 5/sAsx=xfU[ 2ջ_ˡ3E|&2*epbc6w9KL`y8$P?3.6`K}R_~Nu%4x|3}+NH0}-M&('f^/mL]u3Ogz̦+?yۣ" ?p+R2 g~~ɵl*Fds%5q#J߄ÄqzXi5Ϣ>5^47<~&ɩF\_|#kU:TE*C7Խ7[ /{_SŇ?is!YZ鹽 w-4J]ܠ^3nfsbd[IkEL޿DyZfpxS~3)C*wvm^#ɓpK𛇚)0nZ.L74] 0$HLI$&)0S 0!$)0dB`a&L`F(2hA 0e0c ;7mrnn `amŒbB(2@p 1 $?4M(0ۆ&q9 }ɸ{ PΪ4o̫zNh_MS馬+,Iх ,(9ne|o#m(ҏL<~_=Zۓi8r6kzOT ^ߣ/ r;`?X6QxjR3i-i?RZ#5mj煳.]{9ݹ8ES=la{3XʟhyՆv y]˩y/;ZcND`1uhͫ{6[q28.0ݩ7c+QQ gc0Ni~^"4E&b&& ML] 0I!0,0n &B`I 7nM0 1HA  M "mɸ HbjHw XA01  M Y L^ vEz#;kB: 6ASȽMTqu? h֜=L^ή6y ٭K'õf;3tE4NΕ8|YzY$dCjsrvk ~_c;0?=L{?żA3»Y,E̳h5_>-9?ce_+$KJH\>Udֽ?tWq~+ "|z }STcnW>JXNsz3oSѢio'FfwqZo%.}1y 9a^C$/;醾kYcc'}SEj}R&3pS#/e֞R[-ZFI{?@/g15/DZ*|0geS!fA1z˾a6Onw+TТgH??)lG}?uaSGwJ):Vd7]umzHg&ncrx˩P]*Sc4ҷۧ(4{:WbRK0=/Gzb,dSٻmCtg̡-*3)+wSU䯵ojn۳$:3pNɜ, ^@yk^TFb) 3 8IjW{XR\՝~vc1(f|W"ZI=en|ʬ ~2|?cy;2Th8>k]=^4H!<%׶UpWY^5rI9(W}QF7q;֪3~q׷v;&nKc Kl0mKs l3)Eec]}Fv_ejk@t3$YؖbbI2NIVK۫2єVN+K۫1o.Z{[ ?Ce*2}- ffvbij3zz}Sa6쏤kWRc e˭*\!Uz(-f>Cf 1?1ٶITzQt)zeUwlq|Z@ h>ɥl w,r~1U~gr|"~t2{~2,G[{8M[*S5#p O1StepNmb\G I97mW'i?쵕fquS +}W3QO$}^SŸ*^޿!AU: | sFrr+5KQLf  AJp00*%Dal2'w'k!t:lL}~k\g˒cNɞuos0.h 9?@|ڑ ˎe5 }u=E\_1@X9.~FzQ~fi9F&fE֫p%S/}bQ:*za)suErk{tD8": <ʎ}@2<Ϻq^km^]Ycst^ɼh^Q~k-]m{\ ѡ]i)9]RVwxp&C6f IԛrA$Hɐ HbM Ch<&HppL bI$E0ۇqJ r@M;00,01E;,*I`a ܩI^e^e+lsw.ԥ$ ~TU\s?!;1)r8W_3Ec{t?x+?,iOn[}]]#mvqz@xo륅UЎ|ŶH {;\:۫l >)Z %|1^ @hL=Ozdp:!ags jw~F,4|];A{~^|bK-t֒.~ W{ i+}J׍n(lyt/ɠI)wz(2Кk܂V7u34}|}rDP_Hr'>救_ ܮIϹdhx yًz_iWiDqV*~P?ʗXYqylrOW˄kKBM|(;o''%vxk_.8S?#fw'BY?n&!}^N!o:;q_#ٹ= f]ڔ'7ßKm@z1lFձמcu4V%YE;2֦%'7`H=A ~˖`x>e/3 6P३})0a&}UONO4՚LF:[5f.Ĺ}0eMGDִZ=7V= _YHIN,GQ3$0 WmT9/μu=>dsuR:-n>D|f[vd:᠒GHS#Ԣ}V o3' _6xJ? ,?fzm,y^Q^pX}7?l\Nir>/?'N6@k9~3{Ki*ȓ,vM@Rd>>fT 2Դ5ڲBr2RO^^5飛k\>?ʚ]q<+6{WrW>Zyp$j7 C:t~-]%G)yvS{}Cɗ& ɩ5 p-@$b&0L`&MH"B`H &I$w p70&< h @cpсnnrE@*A4`` (nS@nMŒ 1{gfWegb`~ ]~´Pm1=l?ğ*C)*$}́ 88 ^*oEszޕMssZ|rvĴ%Yw.gyq+U⮿|[~8tK_J& j OO!'pC$5աq+m4{ ׈OK ?eNf w=ZZ̍ѐ>q({8f(?'̮u#Ta`U>9k= _O]ꏹ.mr5zF`FvB,]ZPv*b)0ϖg^w0r>`?GhD,]ٝ홉f'Ift}l<4o]߯v]3X j֜Ud,dڃPnM ;vW$̛zTc_oMTзJXI;{<v|:_ zt=9[dWH /W{FxaaJo廱άuV6Zr8X X=@I=f9̟> G.=?#UF?9IT'*mokY-)Tmokn[y DUqNX'K ʦx:>›~RMEd؏2hJ!9 J =<~?n8@c}5$|laZų|c=Oˬ:}YA_7.xoHԒ20|K${BrMsR~@}U,S{y듛/+ճ.İ'(|ؾxzch6^o+}uGpB}56F?jUۦwlbu %nߴU-XU$ZlSOvp.R6X L6=;+҃#DQI9Sckv'6&k @U+hxZO1N7 [ga0nBfgFL&dpnw pH9& H7 E&ۓP@Z@ L$ LML)0C$(hpx0a)L;07$$Pa%8A>p" 00ń@ ;r@pćp;wmø@rD;417 $w7M*@bM!#.%ÀL\*,%@{OTe w&aV:" ]xRX) \UzZc\})?*/?׿h&-lvꔗz+ ꔽ΂Ҳ"lN^\~G~~K- ^WNgَ˙jj#eeX|kNI!R;Z4?uN1Ix԰ u$D]t\c*Ϋ#& +\jve6X~Ԡrf JA= rj\05 fdg+pdbY\٭Caa}@ l _I0FJOUejivi5v Vppܮջ6>^x\ Gs CVJɿT@;C)f_J.<8>KI~5`*r0Wјz](?Hܰħt3?v8TށhɺҖbmMaʇe9X*R\{q;ose=7ś>B[jn8*5(P=io~lfmZSMBӎ] 0I/rs@ I7$n$ 0IRn)07IC0IHLR` $H pLRd0nB`Mɹ !h E101B $0` `c 0 n(0# ML>0h }0h$;4pAqw$ Hwi 據w&ܛ@,ܛ7mɸs@M惚r4!"Ih s@ yFEp@ړqw$HܒAi7pLI ܐ `  pI n ` $s@&&MA!0n!0I0A Rd-rA$ @$21@pp*&Jb004Mø@aܦ ``$Tܛ ;74`$U 1 @p;6 øEܛ4r@ܒ@@rn rA&H7&H7&rn w&7i" *nMyw0nrnr@!0n rnM-mLBd$60)2$RpHd0n)h %$ 40HIH c ܛLAHFc h6Ć pIpa  @cnIy5AB ܐܛ` "øI2@ HܐImɸ@rn,0p $p$pI$M rn`` d72@$nh@L^h LRd7$ $ pA!0A 7nh p-$ 7h@IH LRdI f_t]wJp0~Hȯn-e CrlhKZw &Bb&$R` 6(`1y0)L`7 w*H" Crnni7;$Pѷ!x74;00$yzKC]0t?:yAZwy]J XB$k^Oz8+BG%*Z(,9M` _)hfZ !>q$0`ی HATM)F`6( r@Đɸƀ,<170nh@wCHdܛp wwHnĆEp.$ܛI$C$p&ܛ6]ɸsIH怴@4$ ɸ72n yج+yC!|gEm~Rt1K@>v[.F5:>u=Uȩe w-ޛp̥gcKH\B=_ךs]uz 'A&=7G^U: @0_k@m*c| =d2N4fm=!ĸXmk,}s;2t*KX&)qIHBITH@ !P42uh Y bB 4] 21wĄjø&y" &Ą@A`pwHIMHp.7i"M$bh7HnMŒdCnC$C! wn` 1hw$$LRdwLKA&HݼMp1H\Ă,p+, } impl Default for ThemeConfig { fn default() -> Self { Self { default: "Default".to_string(), } } } impl Default for UiConfig { fn default() -> Self { Self { max_rows: 50, column_width: 30, } } } impl Default for KeybindingsConfig { fn default() -> Self { Self { profile: "default".to_string(), custom: HashMap::new(), } } } impl Config { /// Load configuration from XDG config directory or custom path pub fn load(custom_path: Option) -> Result { let config_path = if let Some(path) = custom_path { path } else { Self::default_config_path()? }; if !config_path.exists() { // No config file, return defaults return Ok(Self::default()); } let config_str = fs::read_to_string(&config_path) .with_context(|| format!("Failed to read config file: {}", config_path.display()))?; let config: Config = toml::from_str(&config_str) .with_context(|| format!("Failed to parse config file: {}", config_path.display()))?; Ok(config) } /// Get the default config file path /// Checks XDG location first (~/.config/xleak/config.toml), then OS-specific location pub fn default_config_path() -> Result { // First, try XDG-compliant location (~/.config/xleak/config.toml) if let Some(home) = dirs::home_dir() { let xdg_path = home.join(".config").join("xleak").join("config.toml"); if xdg_path.exists() { return Ok(xdg_path); } } // Fall back to OS-specific config directory // macOS: ~/Library/Application Support/xleak/config.toml // Linux: ~/.config/xleak/config.toml (same as XDG) // Windows: %APPDATA%\xleak\config.toml let config_dir = dirs::config_dir() .context("Failed to determine config directory")? .join("xleak"); Ok(config_dir.join("config.toml")) } /// Create an example config file at the default location #[allow(dead_code)] pub fn create_example() -> Result { let config_path = Self::default_config_path()?; let config_dir = config_path .parent() .context("Failed to get config directory")?; // Create config directory if it doesn't exist fs::create_dir_all(config_dir).with_context(|| { format!( "Failed to create config directory: {}", config_dir.display() ) })?; // Generate example config let example = Self::example_toml(); fs::write(&config_path, example).with_context(|| { format!("Failed to write example config: {}", config_path.display()) })?; Ok(config_path) } /// Generate example TOML config fn example_toml() -> String { r#"# xleak configuration file # Location: $XDG_CONFIG_HOME/xleak/config.toml (usually ~/.config/xleak/config.toml) [theme] # Default theme to use on startup # Options: "Default", "Dracula", "Solarized Dark", "Solarized Light", "GitHub Dark", "Nord" default = "Default" [ui] # Default maximum rows to display in non-interactive mode (0 = all) max_rows = 50 # Default maximum column width in characters column_width = 30 [keybindings] # Keybinding profile: "default" or "vim" profile = "default" # Custom keybindings (optional - overrides profile) # Uncomment and modify to customize individual keys # [keybindings.custom] # quit = "q" # help = "?" # theme_toggle = "t" # search = "/" # next_match = "n" # prev_match = "N" # copy_cell = "c" # copy_row = "C" # jump = "Ctrl+g" # show_cell_detail = "Enter" # VIM-style navigation (when profile = "vim") # up = "k" # down = "j" # left = "h" # right = "l" # page_up = "Ctrl+u" # page_down = "Ctrl+d" # jump_to_top = "g" # jump_to_bottom = "G" # jump_to_row_start = "0" # jump_to_row_end = "$" "# .to_string() } /// Get keybinding for an action based on profile and custom overrides pub fn get_keybinding(&self, action: &str) -> Option<(KeyCode, KeyModifiers)> { // Check custom bindings first if let Some(key_str) = self.keybindings.custom.get(action) { return parse_key_string(key_str); } // Fall back to profile defaults match self.keybindings.profile.as_str() { "vim" => get_vim_keybinding(action), _ => get_default_keybinding(action), } } } /// Parse a key string like "q", "Ctrl+g", "Enter" into KeyCode and KeyModifiers fn parse_key_string(s: &str) -> Option<(KeyCode, KeyModifiers)> { let parts: Vec<&str> = s.split('+').collect(); let mut modifiers = KeyModifiers::empty(); let key_part = parts.last()?; // Parse modifiers for part in &parts[..parts.len() - 1] { match part.to_lowercase().as_str() { "ctrl" | "control" => modifiers |= KeyModifiers::CONTROL, "alt" => modifiers |= KeyModifiers::ALT, "shift" => modifiers |= KeyModifiers::SHIFT, _ => return None, } } let code = match *key_part { k if k.eq_ignore_ascii_case("enter") => KeyCode::Enter, k if k.eq_ignore_ascii_case("esc") => KeyCode::Esc, k if k.eq_ignore_ascii_case("escape") => KeyCode::Esc, k if k.eq_ignore_ascii_case("tab") => KeyCode::Tab, k if k.eq_ignore_ascii_case("backtab") => KeyCode::BackTab, k if k.eq_ignore_ascii_case("backspace") => KeyCode::Backspace, k if k.eq_ignore_ascii_case("delete") => KeyCode::Delete, k if k.eq_ignore_ascii_case("del") => KeyCode::Delete, k if k.eq_ignore_ascii_case("insert") => KeyCode::Insert, k if k.eq_ignore_ascii_case("ins") => KeyCode::Insert, k if k.eq_ignore_ascii_case("home") => KeyCode::Home, k if k.eq_ignore_ascii_case("end") => KeyCode::End, k if k.eq_ignore_ascii_case("pageup") => KeyCode::PageUp, k if k.eq_ignore_ascii_case("pgup") => KeyCode::PageUp, k if k.eq_ignore_ascii_case("pagedown") => KeyCode::PageDown, k if k.eq_ignore_ascii_case("pgdn") => KeyCode::PageDown, k if k.eq_ignore_ascii_case("up") => KeyCode::Up, k if k.eq_ignore_ascii_case("down") => KeyCode::Down, k if k.eq_ignore_ascii_case("left") => KeyCode::Left, k if k.eq_ignore_ascii_case("right") => KeyCode::Right, s if s.len() == 1 => KeyCode::Char(s.chars().next()?), _ => return None, }; Some((code, modifiers)) } /// Get default keybinding for an action fn get_default_keybinding(action: &str) -> Option<(KeyCode, KeyModifiers)> { let binding = match action { "quit" => ("q", KeyModifiers::empty()), "help" => ("?", KeyModifiers::SHIFT), "theme_toggle" => ("t", KeyModifiers::empty()), "search" => ("/", KeyModifiers::empty()), "next_match" => ("n", KeyModifiers::empty()), "prev_match" => ("N", KeyModifiers::SHIFT), "copy_cell" => ("c", KeyModifiers::empty()), "copy_row" => ("C", KeyModifiers::SHIFT), "jump" => ("g", KeyModifiers::CONTROL), "show_cell_detail" => ("Enter", KeyModifiers::empty()), "next_sheet" => ("Tab", KeyModifiers::empty()), "prev_sheet" => ("Tab", KeyModifiers::SHIFT), "up" => ("Up", KeyModifiers::empty()), "down" => ("Down", KeyModifiers::empty()), "left" => ("Left", KeyModifiers::empty()), "right" => ("Right", KeyModifiers::empty()), "page_up" => ("PageUp", KeyModifiers::empty()), "page_down" => ("PageDown", KeyModifiers::empty()), "jump_to_top" => ("Home", KeyModifiers::CONTROL), "jump_to_bottom" => ("End", KeyModifiers::CONTROL), "jump_to_row_start" => ("Home", KeyModifiers::empty()), "jump_to_row_end" => ("End", KeyModifiers::empty()), _ => return None, }; parse_key_string(binding.0).map(|(code, _)| (code, binding.1)) } /// Get VIM-style keybinding for an action fn get_vim_keybinding(action: &str) -> Option<(KeyCode, KeyModifiers)> { let binding = match action { // VIM navigation "up" => ("k", KeyModifiers::empty()), "down" => ("j", KeyModifiers::empty()), "left" => ("h", KeyModifiers::empty()), "right" => ("l", KeyModifiers::empty()), "page_up" => ("u", KeyModifiers::CONTROL), "page_down" => ("d", KeyModifiers::CONTROL), "jump_to_top" => ("g", KeyModifiers::empty()), "jump_to_bottom" => ("G", KeyModifiers::SHIFT), "jump_to_row_start" => ("0", KeyModifiers::empty()), "jump_to_row_end" => ("$", KeyModifiers::SHIFT), // VIM-style actions "quit" => ("q", KeyModifiers::empty()), "copy_cell" => ("y", KeyModifiers::empty()), "copy_row" => ("Y", KeyModifiers::SHIFT), // Keep standard bindings for non-VIM actions _ => return get_default_keybinding(action), }; parse_key_string(binding.0).map(|(code, _)| (code, binding.1)) } #[cfg(test)] mod tests { use super::*; #[test] fn test_parse_key_string() { assert_eq!( parse_key_string("q"), Some((KeyCode::Char('q'), KeyModifiers::empty())) ); assert_eq!( parse_key_string("Ctrl+g"), Some((KeyCode::Char('g'), KeyModifiers::CONTROL)) ); assert_eq!( parse_key_string("Enter"), Some((KeyCode::Enter, KeyModifiers::empty())) ); assert_eq!( parse_key_string("Shift+Tab"), Some((KeyCode::Tab, KeyModifiers::SHIFT)) ); } #[test] fn test_default_config() { let config = Config::default(); assert_eq!(config.theme.default, "Default"); assert_eq!(config.ui.max_rows, 50); assert_eq!(config.keybindings.profile, "default"); } #[test] fn test_vim_keybindings() { assert_eq!( get_vim_keybinding("up"), Some((KeyCode::Char('k'), KeyModifiers::empty())) ); assert_eq!( get_vim_keybinding("down"), Some((KeyCode::Char('j'), KeyModifiers::empty())) ); } // ========================================================================= // TOML Parsing Tests (Cross-Platform Line Endings) // ========================================================================= #[test] fn test_toml_parsing_unix_line_endings() { let config_str = "[theme]\ndefault = \"Dracula\"\n\n[ui]\nmax_rows = 100\n\n[keybindings]\nprofile = \"vim\""; let config: Config = toml::from_str(config_str).expect("Failed to parse TOML"); assert_eq!(config.theme.default, "Dracula"); assert_eq!(config.ui.max_rows, 100); assert_eq!(config.keybindings.profile, "vim"); } #[test] fn test_toml_parsing_windows_line_endings() { let config_str = "[theme]\r\ndefault = \"Nord\"\r\n\r\n[ui]\r\nmax_rows = 200\r\n\r\n[keybindings]\r\nprofile = \"default\""; let config: Config = toml::from_str(config_str).expect("Failed to parse TOML"); assert_eq!(config.theme.default, "Nord"); assert_eq!(config.ui.max_rows, 200); assert_eq!(config.keybindings.profile, "default"); } #[test] fn test_toml_parsing_mixed_line_endings() { let config_str = "[theme]\r\ndefault = \"GitHub Dark\"\n\n[ui]\r\nmax_rows = 75\n[keybindings]\r\nprofile = \"vim\""; let config: Config = toml::from_str(config_str).expect("Failed to parse TOML"); assert_eq!(config.theme.default, "GitHub Dark"); assert_eq!(config.ui.max_rows, 75); assert_eq!(config.keybindings.profile, "vim"); } // ========================================================================= // Theme Name Tests (Case Sensitivity) // ========================================================================= #[test] fn test_theme_name_case_insensitive() { // Theme config parsing stores the string as-is // TuiState::parse_theme_name handles case-insensitive matching let config_str = "[theme]\ndefault = \"dracula\""; let config: Config = toml::from_str(config_str).unwrap(); assert_eq!(config.theme.default, "dracula"); let config_str = "[theme]\ndefault = \"DRACULA\""; let config: Config = toml::from_str(config_str).unwrap(); assert_eq!(config.theme.default, "DRACULA"); let config_str = "[theme]\ndefault = \"Dracula\""; let config: Config = toml::from_str(config_str).unwrap(); assert_eq!(config.theme.default, "Dracula"); } #[test] fn test_theme_name_with_spaces() { let config_str = "[theme]\ndefault = \"Solarized Dark\""; let config: Config = toml::from_str(config_str).unwrap(); assert_eq!(config.theme.default, "Solarized Dark"); let config_str = "[theme]\ndefault = \"GitHub Dark\""; let config: Config = toml::from_str(config_str).unwrap(); assert_eq!(config.theme.default, "GitHub Dark"); } #[test] fn test_invalid_theme_stored_as_is() { // Config stores the theme name as-is; TuiState handles fallback to Default let config_str = "[theme]\ndefault = \"NonexistentTheme\""; let config: Config = toml::from_str(config_str).unwrap(); assert_eq!(config.theme.default, "NonexistentTheme"); } // ========================================================================= // Keybinding Override Tests // ========================================================================= #[test] fn test_custom_keybindings_override_profile() { let config_str = r#" [keybindings] profile = "default" [keybindings.custom] quit = "x" search = "?" "#; let config: Config = toml::from_str(config_str).unwrap(); // Custom binding should override assert_eq!( config.get_keybinding("quit"), Some((KeyCode::Char('x'), KeyModifiers::empty())) ); assert_eq!( config.get_keybinding("search"), Some((KeyCode::Char('?'), KeyModifiers::empty())) ); // Non-overridden should use profile default assert_eq!( config.get_keybinding("help"), Some((KeyCode::Char('?'), KeyModifiers::SHIFT)) ); } #[test] fn test_vim_profile_with_custom_overrides() { let config_str = r#" [keybindings] profile = "vim" [keybindings.custom] quit = "x" page_up = "Ctrl+b" "#; let config: Config = toml::from_str(config_str).unwrap(); // Custom overrides assert_eq!( config.get_keybinding("quit"), Some((KeyCode::Char('x'), KeyModifiers::empty())) ); assert_eq!( config.get_keybinding("page_up"), Some((KeyCode::Char('b'), KeyModifiers::CONTROL)) ); // VIM profile bindings (not overridden) assert_eq!( config.get_keybinding("up"), Some((KeyCode::Char('k'), KeyModifiers::empty())) ); assert_eq!( config.get_keybinding("down"), Some((KeyCode::Char('j'), KeyModifiers::empty())) ); } #[test] fn test_get_keybinding_returns_none_for_unknown_action() { let config = Config::default(); assert_eq!(config.get_keybinding("nonexistent_action"), None); assert_eq!(config.get_keybinding(""), None); assert_eq!(config.get_keybinding("random_string_12345"), None); } // ========================================================================= // Key Parsing Edge Cases // ========================================================================= #[test] fn test_parse_key_multiple_modifiers() { // Note: crossterm doesn't support more than 2 modifiers simultaneously, // but we should parse them correctly assert_eq!( parse_key_string("Ctrl+Shift+Tab"), Some((KeyCode::Tab, KeyModifiers::CONTROL | KeyModifiers::SHIFT)) ); assert_eq!( parse_key_string("Ctrl+Alt+g"), Some(( KeyCode::Char('g'), KeyModifiers::CONTROL | KeyModifiers::ALT )) ); } #[test] fn test_parse_key_case_insensitive_modifiers() { assert_eq!( parse_key_string("ctrl+g"), Some((KeyCode::Char('g'), KeyModifiers::CONTROL)) ); assert_eq!( parse_key_string("CTRL+g"), Some((KeyCode::Char('g'), KeyModifiers::CONTROL)) ); assert_eq!( parse_key_string("Ctrl+g"), Some((KeyCode::Char('g'), KeyModifiers::CONTROL)) ); assert_eq!( parse_key_string("shift+tab"), Some((KeyCode::Tab, KeyModifiers::SHIFT)) ); assert_eq!( parse_key_string("SHIFT+TAB"), Some((KeyCode::Tab, KeyModifiers::SHIFT)) ); } #[test] fn test_parse_key_invalid_strings() { assert_eq!(parse_key_string(""), None); assert_eq!(parse_key_string("InvalidKey"), None); assert_eq!(parse_key_string("Ctrl+"), None); assert_eq!(parse_key_string("+g"), None); assert_eq!(parse_key_string("Ctrl+InvalidKey"), None); assert_eq!(parse_key_string("Unknown+g"), None); } // ========================================================================= // Profile Behavior Tests // ========================================================================= #[test] fn test_vim_profile_falls_back_to_default() { let config_str = "[keybindings]\nprofile = \"vim\""; let config: Config = toml::from_str(config_str).unwrap(); // VIM-specific bindings assert_eq!( config.get_keybinding("up"), Some((KeyCode::Char('k'), KeyModifiers::empty())) ); // Non-VIM actions should fall back to default profile assert_eq!( config.get_keybinding("help"), Some((KeyCode::Char('?'), KeyModifiers::SHIFT)) ); assert_eq!( config.get_keybinding("theme_toggle"), Some((KeyCode::Char('t'), KeyModifiers::empty())) ); assert_eq!( config.get_keybinding("search"), Some((KeyCode::Char('/'), KeyModifiers::empty())) ); } } xleak-0.2.6/src/display.rs000064400000000000000000000205641046102023000135460ustar 00000000000000use crate::workbook::{CellValue, SheetData}; use anyhow::Result; use comfy_table::{ Attribute, Cell, CellAlignment, Color, ColumnConstraint, ContentArrangement, Row, Table, Width, }; use crossterm::style::Stylize; use std::io::IsTerminal; /// Format a cell value with width limiting fn format_cell_value(value: &str, max_width: usize, wrap: bool) -> String { let char_count = value.chars().count(); if char_count <= max_width { return value.to_string(); } if wrap { // Return full text; comfy-table handles the multi-line wrap based on column width value.to_string() } else { // Truncate with "..." if max_width > 3 { let truncated: String = value.chars().take(max_width - 3).collect(); format!("{}...", truncated) } else { value.chars().take(max_width).collect() } } } /// Display sheet data as a formatted table in the terminal pub fn display_table( data: &SheetData, sheet_name: &str, max_rows: usize, all_sheets: &[&str], max_width: usize, wrap: bool, show_formulas: bool, ) -> Result<()> { // Print header info println!("\n╔═════════════════════════════════════════════════╗"); println!("║ xleak - Excel File Viewer ║"); println!("╚═════════════════════════════════════════════════╝"); println!(); println!( "Sheet: {} ({} rows × {} columns)", sheet_name, data.height, data.width ); if all_sheets.len() > 1 { println!("Available sheets: {}", all_sheets.join(", ")); } if !show_formulas { let has_formulas = data .formulas .iter() .any(|row| row.iter().any(|f| f.is_some())); if has_formulas { let is_blank = |cell: &CellValue| match cell { CellValue::Empty => true, CellValue::String(s) => s.is_empty(), _ => false, }; let blank_formula_count: usize = data .rows .iter() .enumerate() .map(|(r, row)| { row.iter() .enumerate() .filter(|(c, cell)| { is_blank(cell) && data .formulas .get(r) .and_then(|fr| fr.get(*c)) .and_then(|f| f.as_ref()) .is_some() }) .count() }) .sum(); if blank_formula_count >= 2 { let prefix = if std::io::stdout().is_terminal() { format!("{}", "NOTE:".bold().yellow()) } else { "NOTE:".to_string() }; println!( "{prefix} Formula cells empty (not cached). Try --formulas or opening/saving in Excel/LibreOffice to cache the results." ); } } } println!(); if data.rows.is_empty() { println!("⚠️ Sheet is empty"); return Ok(()); } let mut table = Table::new(); if wrap { let width = (data.width as u16) .saturating_mul(max_width as u16 + 3) .max(max_width as u16); table .set_content_arrangement(ContentArrangement::Dynamic) .set_width(width); } let mut header_row = Row::new(); for h in &data.headers { let formatted = format_cell_value(h, max_width, wrap); header_row.add_cell( Cell::new(formatted) .add_attribute(Attribute::Bold) .fg(Color::Green), ); } table.set_header(header_row); table.set_constraints( (0..data.width).map(|_| ColumnConstraint::UpperBoundary(Width::Fixed(max_width as u16))), ); // Add data rows (limit if needed) let rows_to_show = if max_rows == 0 { data.rows.len() } else { std::cmp::min(max_rows, data.rows.len()) }; for (row_idx, row) in data.rows.iter().enumerate().take(rows_to_show) { let mut table_row = Row::new(); for (col_idx, cell) in row.iter().enumerate() { let value = if show_formulas { data.formulas .get(row_idx) .and_then(|formula_row| formula_row.get(col_idx)) .and_then(|f| f.as_ref()) .cloned() .unwrap_or_else(|| cell.to_string()) } else { cell.to_string() }; let formatted = format_cell_value(&value, max_width, wrap); let mut cell_obj = Cell::new(formatted); cell_obj = if show_formulas { cell_obj.set_alignment(CellAlignment::Left).fg(Color::Green) } else { match cell { CellValue::Int(_) | CellValue::Float(_) => { cell_obj.set_alignment(CellAlignment::Right) } CellValue::Bool(_) => cell_obj.set_alignment(CellAlignment::Center), CellValue::Error(_) => { cell_obj.set_alignment(CellAlignment::Center).fg(Color::Red) } _ => cell_obj.set_alignment(CellAlignment::Left), } }; table_row.add_cell(cell_obj); } table.add_row(table_row); } println!("{}", table); println!(); if rows_to_show < data.rows.len() { println!( "⚠️ Showing {} of {} rows (use -n 0 to show all)", rows_to_show, data.rows.len() ); } else { println!("Total: {} rows × {} columns", data.height, data.width); } println!(); Ok(()) } /// Export data as CSV to stdout pub fn export_csv(data: &SheetData) -> Result<()> { // Print headers println!("{}", data.headers.join(",")); // Print rows for row in &data.rows { let row_str: Vec = row .iter() .map(|cell| { let val = cell.to_raw_string(); if val.contains(',') || val.contains('"') || val.contains('\n') { format!("\"{}\"", val.replace('"', "\"\"")) } else { val } }) .collect(); println!("{}", row_str.join(",")); } Ok(()) } /// Export data as JSON to stdout pub fn export_json(data: &SheetData, sheet_name: &str) -> Result<()> { println!("{{"); println!(" \"sheet\": \"{sheet_name}\","); println!(" \"rows\": {},", data.height); println!(" \"columns\": {},", data.width); println!(" \"headers\": ["); for (i, header) in data.headers.iter().enumerate() { let comma = if i < data.headers.len() - 1 { "," } else { "" }; println!(" \"{header}\"{comma}"); } println!(" ],"); println!(" \"data\": ["); for (i, row) in data.rows.iter().enumerate() { print!(" ["); for (j, cell) in row.iter().enumerate() { let value = match cell { CellValue::String(s) => format!("\"{}\"", s.replace('"', "\\\"")), CellValue::Int(i) => i.to_string(), CellValue::Float(f) => f.to_string(), CellValue::Bool(b) => b.to_string(), CellValue::Empty => "null".to_string(), _ => format!("\"{cell}\""), }; print!("{value}"); if j < row.len() - 1 { print!(", "); } } let comma = if i < data.rows.len() - 1 { "," } else { "" }; println!("]{comma}"); } println!(" ]"); println!("}}"); Ok(()) } /// Export data as plain text to stdout pub fn export_text(data: &SheetData) -> Result<()> { // Headers println!("{}", data.headers.join("\t")); // Data rows for row in &data.rows { let row_str: Vec = row.iter().map(|cell| cell.to_raw_string()).collect(); println!("{}", row_str.join("\t")); } Ok(()) } xleak-0.2.6/src/main.rs000064400000000000000000000271621046102023000130260ustar 00000000000000use anyhow::{Context, Result}; use clap::Parser; use comfy_table::{ Attribute, Cell, CellAlignment, Color, ColumnConstraint, ContentArrangement, Row, Table, Width, }; use std::path::PathBuf; mod config; mod display; mod tui; mod workbook; #[derive(Parser)] #[command(name = "xleak")] #[command(author, version, about = "Expose Excel files in your terminal - no Microsoft Excel required", long_about = None)] struct Cli { /// Path to the Excel file (.xlsx, .xls, .xlsm, .ods) #[arg(value_name = "FILE")] file: PathBuf, /// Sheet name or index to display (default: first sheet) #[arg(short, long, value_name = "SHEET")] sheet: Option, /// Export format: csv, json, text #[arg(short, long, value_name = "FORMAT")] export: Option, /// Maximum number of rows to display (0 = all) #[arg(short = 'n', long, default_value = "50")] max_rows: usize, /// Show formulas instead of values #[arg(short, long)] formulas: bool, /// Maximum column width in characters (default: 30) #[arg(short = 'w', long, default_value = "30")] max_width: usize, /// Wrap long text instead of truncating #[arg(long)] wrap: bool, /// Interactive TUI mode #[arg(short, long)] interactive: bool, /// Enable horizontal scrolling in TUI mode (auto-size columns) #[arg(short = 'H', long)] horizontal_scroll: bool, /// Path to custom config file (default: $XDG_CONFIG_HOME/xleak/config.toml) #[arg(long, value_name = "PATH")] config: Option, /// List all Excel tables in the workbook (.xlsx only) #[arg(long)] list_tables: bool, /// Extract a specific Excel table by name (.xlsx only) #[arg(short = 't', long, value_name = "TABLE")] table: Option, } fn main() -> Result<()> { let cli = Cli::parse(); // Load configuration let config = config::Config::load(cli.config.clone())?; // Validate file exists if !cli.file.exists() { anyhow::bail!("File not found: {}", cli.file.display()); } // Load the workbook let mut wb = workbook::Workbook::open(&cli.file).context("Failed to open Excel file")?; // Handle table operations (xlsx only) if cli.list_tables { wb.load_tables()?; let table_names = wb.table_names()?; if table_names.is_empty() { println!("No tables found in workbook"); } else { println!("Sheet\tTable"); println!("-----\t-----"); for table_name in &table_names { // Get which sheet this table is in let sheet_names = wb.sheet_names(); for sheet in &sheet_names { let tables_in_sheet = wb.table_names_in_sheet(sheet)?; if tables_in_sheet.contains(table_name) { println!("{sheet}\t{table_name}"); break; } } } } return Ok(()); } if let Some(ref table_name) = cli.table { wb.load_tables()?; let table_data = wb.table_by_name(table_name)?; // Handle export formats (non-interactive) if let Some(format) = cli.export.as_deref() { match format { "json" => export_table_json(&table_data)?, "csv" => export_table_csv(&table_data)?, "text" => export_table_text(&table_data)?, _ => anyhow::bail!("Unknown export format: {format}. Use: csv, json, or text"), } return Ok(()); } if cli.interactive { anyhow::bail!( "Interactive mode (-i) is not supported with --table.\n\ \n\ Options:\n\ • View table in terminal: xleak file.xlsx --table \"{table_name}\"\n\ • View full sheet in TUI: xleak file.xlsx --sheet \"{}\" -i", table_data.sheet_name ); } // Default: display table in terminal display_table_data(&table_data, cli.max_rows)?; return Ok(()); } // Get sheet names (clone to avoid borrow issues) let sheet_names = wb.sheet_names(); if sheet_names.is_empty() { anyhow::bail!("No sheets found in workbook"); } // Determine which sheet to display let sheet_name = if let Some(ref name) = cli.sheet { // Try as name first if sheet_names.iter().any(|s| s == name) { name.clone() } else { // Try as index if let Ok(idx) = name.parse::() { if idx > 0 && idx <= sheet_names.len() { sheet_names[idx - 1].clone() } else { anyhow::bail!("Sheet index {} out of range (1-{})", idx, sheet_names.len()); } } else { anyhow::bail!( "Sheet '{}' not found. Available sheets: {}", name, sheet_names.join(", ") ); } } } else { sheet_names[0].clone() }; // Display, export, or run TUI if cli.interactive { // Interactive TUI mode - pass the workbook so it can switch sheets tui::run_tui(wb, &sheet_name, &config, cli.horizontal_scroll)?; } else { // Load the sheet data for non-interactive modes let data = wb .load_sheet(&sheet_name) .with_context(|| format!("Failed to load sheet '{sheet_name}'"))?; match cli.export.as_deref() { Some("csv") => { display::export_csv(&data)?; } Some("json") => { display::export_json(&data, &sheet_name)?; } Some("text") => { display::export_text(&data)?; } Some(format) => { anyhow::bail!("Unknown export format: {format}. Use: csv, json, or text"); } None => { // Non-interactive display let sheet_names_refs: Vec<&str> = sheet_names.iter().map(|s| s.as_str()).collect(); display::display_table( &data, &sheet_name, cli.max_rows, &sheet_names_refs, cli.max_width, cli.wrap, cli.formulas, )?; } } } Ok(()) } /// Display table data in terminal (default behavior) fn display_table_data(table: &workbook::TableData, max_rows: usize) -> Result<()> { println!("\n╔═════════════════════════════════════════════════╗"); println!("║ xleak - Excel Table Viewer ║"); println!("╚═════════════════════════════════════════════════╝"); println!(); println!("Table: {} (from sheet: {})", table.name, table.sheet_name); println!( "{} rows × {} columns", table.rows.len(), table.headers.len() ); println!(); let max_width = 30u16; let mut table_obj = Table::new(); table_obj.set_content_arrangement(ContentArrangement::Dynamic); table_obj.set_width( (table.headers.len() as u16) .saturating_mul(max_width + 3) .max(max_width), ); let mut header_row = Row::new(); for h in &table.headers { header_row.add_cell(Cell::new(h).add_attribute(Attribute::Bold).fg(Color::Green)); } table_obj.set_header(header_row); table_obj.set_constraints( (0..table.headers.len()).map(|_| ColumnConstraint::UpperBoundary(Width::Fixed(max_width))), ); let rows_to_show = if max_rows == 0 { table.rows.len() } else { std::cmp::min(max_rows, table.rows.len()) }; for row in table.rows.iter().take(rows_to_show) { let mut table_row = Row::new(); for cell in row { let cell_obj = match cell { workbook::CellValue::Int(_) | workbook::CellValue::Float(_) => { Cell::new(cell.to_string()).set_alignment(CellAlignment::Right) } workbook::CellValue::Bool(_) => { Cell::new(cell.to_string()).set_alignment(CellAlignment::Center) } workbook::CellValue::Error(_) => Cell::new(cell.to_string()) .set_alignment(CellAlignment::Center) .fg(Color::Red), _ => Cell::new(cell.to_string()).set_alignment(CellAlignment::Left), }; table_row.add_cell(cell_obj); } table_obj.add_row(table_row); } println!("{}", table_obj); println!(); if rows_to_show < table.rows.len() { println!( "⚠️ Showing {} of {} rows (use -n 0 to show all)", rows_to_show, table.rows.len() ); } else { println!( "Total: {} rows × {} columns", table.rows.len(), table.headers.len() ); } println!(); Ok(()) } /// Export table data as JSON fn export_table_json(table: &workbook::TableData) -> Result<()> { println!("{{"); println!(" \"table\": \"{}\",", table.name); println!(" \"sheet\": \"{}\",", table.sheet_name); println!(" \"columns\": {},", table.headers.len()); println!(" \"rows\": {},", table.rows.len()); println!(" \"headers\": ["); for (i, header) in table.headers.iter().enumerate() { let comma = if i < table.headers.len() - 1 { "," } else { "" }; println!(" \"{header}\"{comma}"); } println!(" ],"); println!(" \"data\": ["); for (i, row) in table.rows.iter().enumerate() { print!(" ["); for (j, cell) in row.iter().enumerate() { let value = match cell { workbook::CellValue::String(s) => format!("\"{}\"", s.replace('"', "\\\"")), workbook::CellValue::Int(i) => i.to_string(), workbook::CellValue::Float(f) => f.to_string(), workbook::CellValue::Bool(b) => b.to_string(), workbook::CellValue::Empty => "null".to_string(), _ => format!("\"{cell}\""), }; print!("{value}"); if j < row.len() - 1 { print!(", "); } } let comma = if i < table.rows.len() - 1 { "," } else { "" }; println!("]{comma}"); } println!(" ]"); println!("}}"); Ok(()) } /// Export table data as CSV fn export_table_csv(table: &workbook::TableData) -> Result<()> { // Print headers println!("{}", table.headers.join(",")); // Print rows for row in &table.rows { let row_str: Vec = row .iter() .map(|cell| { let val = cell.to_raw_string(); // Quote if contains comma or quotes if val.contains(',') || val.contains('"') { format!("\"{}\"", val.replace('"', "\"\"")) } else { val } }) .collect(); println!("{}", row_str.join(",")); } Ok(()) } /// Export table data as plain text (tab-separated) fn export_table_text(table: &workbook::TableData) -> Result<()> { // Print headers println!("{}", table.headers.join("\t")); // Print rows for row in &table.rows { let row_str: Vec = row.iter().map(|cell| cell.to_raw_string()).collect(); println!("{}", row_str.join("\t")); } Ok(()) } xleak-0.2.6/src/tui.rs000064400000000000000000002403141046102023000126770ustar 00000000000000use crate::workbook::{CellValue, LazySheetData, SheetData, Workbook}; use anyhow::{Context, Result}; use arboard::Clipboard; use crossterm::{ event::{self, Event, KeyCode, KeyEvent, KeyEventKind}, execute, terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode}, }; use ratatui::{ Frame, Terminal, backend::CrosstermBackend, layout::{Alignment, Constraint, Direction, Layout, Rect}, style::{Color, Modifier, Style}, widgets::{Block, Borders, Cell, Clear, Paragraph, Row, Table, Wrap}, }; use std::io; use std::time::{Duration, Instant}; /// Available themes #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Theme { Default, Dracula, SolarizedDark, SolarizedLight, GitHubDark, Nord, } impl Theme { /// Get all available themes pub fn all() -> &'static [Theme] { &[ Theme::Default, Theme::Dracula, Theme::SolarizedDark, Theme::SolarizedLight, Theme::GitHubDark, Theme::Nord, ] } /// Get the next theme in the cycle pub fn next(&self) -> Theme { let themes = Self::all(); let current_idx = themes.iter().position(|t| t == self).unwrap_or(0); themes[(current_idx + 1) % themes.len()] } /// Get theme name for display pub fn name(&self) -> &'static str { match self { Theme::Default => "Default", Theme::Dracula => "Dracula", Theme::SolarizedDark => "Solarized Dark", Theme::SolarizedLight => "Solarized Light", Theme::GitHubDark => "GitHub Dark", Theme::Nord => "Nord", } } /// Get the color scheme for this theme pub fn colors(&self) -> ColorScheme { match self { Theme::Default => ColorScheme::default_theme(), Theme::Dracula => ColorScheme::dracula(), Theme::SolarizedDark => ColorScheme::solarized_dark(), Theme::SolarizedLight => ColorScheme::solarized_light(), Theme::GitHubDark => ColorScheme::github_dark(), Theme::Nord => ColorScheme::nord(), } } } /// Color scheme for the TUI #[derive(Debug, Clone)] pub struct ColorScheme { // Cell type colors pub string_fg: Color, pub number_fg: Color, pub bool_fg: Color, pub datetime_fg: Color, pub error_fg: Color, pub empty_fg: Color, // UI element colors pub header_fg: Color, pub header_bg: Option, pub current_cell_fg: Color, pub current_cell_bg: Color, pub current_row_bg: Color, pub current_col_fg: Color, pub alternating_row_bg: Option, // Search colors pub search_match_fg: Color, pub search_match_bg: Color, pub current_search_fg: Color, pub current_search_bg: Color, // Border and status bar pub border_fg: Color, pub status_bar_fg: Color, pub status_bar_bg: Option, } impl ColorScheme { /// Default theme (current behavior with enhancements) pub fn default_theme() -> Self { Self { // Cell types string_fg: Color::White, number_fg: Color::Cyan, bool_fg: Color::Magenta, datetime_fg: Color::Green, error_fg: Color::Red, empty_fg: Color::DarkGray, // UI elements header_fg: Color::Yellow, header_bg: None, current_cell_fg: Color::White, current_cell_bg: Color::Blue, current_row_bg: Color::DarkGray, current_col_fg: Color::Cyan, alternating_row_bg: Some(Color::Rgb(25, 25, 28)), // Search search_match_fg: Color::Black, search_match_bg: Color::LightYellow, current_search_fg: Color::Black, current_search_bg: Color::Yellow, // Borders/status border_fg: Color::White, status_bar_fg: Color::White, status_bar_bg: None, } } /// Dracula theme (purple/pink aesthetic) pub fn dracula() -> Self { Self { // Cell types - Dracula palette string_fg: Color::Rgb(248, 248, 242), // Foreground number_fg: Color::Rgb(189, 147, 249), // Purple bool_fg: Color::Rgb(255, 121, 198), // Pink datetime_fg: Color::Rgb(80, 250, 123), // Green error_fg: Color::Rgb(255, 85, 85), // Red empty_fg: Color::Rgb(98, 114, 164), // Comment // UI elements header_fg: Color::Rgb(139, 233, 253), // Cyan header_bg: Some(Color::Rgb(68, 71, 90)), // Current line current_cell_fg: Color::Rgb(248, 248, 242), current_cell_bg: Color::Rgb(98, 114, 164), // Comment (darker) current_row_bg: Color::Rgb(68, 71, 90), // Current line current_col_fg: Color::Rgb(139, 233, 253), // Cyan alternating_row_bg: Some(Color::Rgb(50, 52, 65)), // Search search_match_fg: Color::Rgb(40, 42, 54), // Background search_match_bg: Color::Rgb(241, 250, 140), // Yellow current_search_fg: Color::Rgb(40, 42, 54), current_search_bg: Color::Rgb(255, 184, 108), // Orange // Borders/status border_fg: Color::Rgb(98, 114, 164), // Comment status_bar_fg: Color::Rgb(248, 248, 242), status_bar_bg: Some(Color::Rgb(68, 71, 90)), } } /// Solarized Dark theme pub fn solarized_dark() -> Self { Self { // Cell types - Solarized Dark string_fg: Color::Rgb(131, 148, 150), // Base0 number_fg: Color::Rgb(38, 139, 210), // Blue bool_fg: Color::Rgb(211, 54, 130), // Magenta datetime_fg: Color::Rgb(133, 153, 0), // Green error_fg: Color::Rgb(220, 50, 47), // Red empty_fg: Color::Rgb(88, 110, 117), // Base01 // UI elements header_fg: Color::Rgb(181, 137, 0), // Yellow header_bg: Some(Color::Rgb(7, 54, 66)), // Base02 current_cell_fg: Color::Rgb(253, 246, 227), current_cell_bg: Color::Rgb(88, 110, 117), // Base01 current_row_bg: Color::Rgb(7, 54, 66), // Base02 current_col_fg: Color::Rgb(42, 161, 152), // Cyan alternating_row_bg: Some(Color::Rgb(0, 43, 54)), // Search search_match_fg: Color::Rgb(0, 43, 54), search_match_bg: Color::Rgb(181, 137, 0), // Yellow current_search_fg: Color::Rgb(0, 43, 54), current_search_bg: Color::Rgb(203, 75, 22), // Orange // Borders/status border_fg: Color::Rgb(88, 110, 117), status_bar_fg: Color::Rgb(131, 148, 150), status_bar_bg: Some(Color::Rgb(7, 54, 66)), } } /// Solarized Light theme pub fn solarized_light() -> Self { Self { // Cell types - Solarized Light string_fg: Color::Rgb(101, 123, 131), // Base00 number_fg: Color::Rgb(38, 139, 210), // Blue bool_fg: Color::Rgb(211, 54, 130), // Magenta datetime_fg: Color::Rgb(133, 153, 0), // Green error_fg: Color::Rgb(220, 50, 47), // Red empty_fg: Color::Rgb(147, 161, 161), // Base1 // UI elements header_fg: Color::Rgb(181, 137, 0), // Yellow header_bg: Some(Color::Rgb(238, 232, 213)), // Base2 current_cell_fg: Color::Rgb(0, 43, 54), // Base02 current_cell_bg: Color::Rgb(147, 161, 161), // Base1 current_row_bg: Color::Rgb(238, 232, 213), // Base2 current_col_fg: Color::Rgb(42, 161, 152), // Cyan alternating_row_bg: Some(Color::Rgb(253, 246, 227)), // Search search_match_fg: Color::Rgb(0, 43, 54), search_match_bg: Color::Rgb(181, 137, 0), // Yellow current_search_fg: Color::Rgb(253, 246, 227), current_search_bg: Color::Rgb(203, 75, 22), // Orange // Borders/status border_fg: Color::Rgb(147, 161, 161), status_bar_fg: Color::Rgb(101, 123, 131), status_bar_bg: Some(Color::Rgb(238, 232, 213)), } } /// GitHub Dark theme pub fn github_dark() -> Self { Self { // Cell types - GitHub Dark string_fg: Color::Rgb(201, 209, 217), // fgDefault number_fg: Color::Rgb(121, 192, 255), // prettylights-syntax-constant bool_fg: Color::Rgb(255, 125, 163), // prettylights-syntax-entity datetime_fg: Color::Rgb(127, 219, 202), // prettylights-syntax-string error_fg: Color::Rgb(248, 81, 73), // danger-fg empty_fg: Color::Rgb(110, 118, 129), // fgMuted // UI elements header_fg: Color::Rgb(255, 199, 119), // prettylights-syntax-entity-tag header_bg: Some(Color::Rgb(33, 38, 45)), // canvas-subtle current_cell_fg: Color::Rgb(201, 209, 217), current_cell_bg: Color::Rgb(56, 139, 253), // accent-emphasis current_row_bg: Color::Rgb(33, 38, 45), // canvas-subtle current_col_fg: Color::Rgb(121, 192, 255), alternating_row_bg: Some(Color::Rgb(22, 27, 34)), // Search search_match_fg: Color::Rgb(13, 17, 23), search_match_bg: Color::Rgb(187, 128, 9), // attention-emphasis current_search_fg: Color::Rgb(13, 17, 23), current_search_bg: Color::Rgb(242, 130, 33), // severe-emphasis // Borders/status border_fg: Color::Rgb(48, 54, 61), // border-default status_bar_fg: Color::Rgb(201, 209, 217), status_bar_bg: Some(Color::Rgb(33, 38, 45)), } } /// Nord theme (cool blue/cyan palette) pub fn nord() -> Self { Self { // Cell types - Nord string_fg: Color::Rgb(216, 222, 233), // nord4 number_fg: Color::Rgb(136, 192, 208), // nord8 bool_fg: Color::Rgb(180, 142, 173), // nord15 datetime_fg: Color::Rgb(163, 190, 140), // nord14 error_fg: Color::Rgb(191, 97, 106), // nord11 empty_fg: Color::Rgb(76, 86, 106), // nord3 // UI elements header_fg: Color::Rgb(235, 203, 139), // nord13 header_bg: Some(Color::Rgb(59, 66, 82)), // nord1 current_cell_fg: Color::Rgb(236, 239, 244), current_cell_bg: Color::Rgb(94, 129, 172), // nord9 current_row_bg: Color::Rgb(59, 66, 82), // nord1 current_col_fg: Color::Rgb(136, 192, 208), // nord8 alternating_row_bg: Some(Color::Rgb(46, 52, 64)), // Search search_match_fg: Color::Rgb(46, 52, 64), search_match_bg: Color::Rgb(235, 203, 139), // nord13 current_search_fg: Color::Rgb(46, 52, 64), current_search_bg: Color::Rgb(208, 135, 112), // nord12 // Borders/status border_fg: Color::Rgb(76, 86, 106), // nord3 status_bar_fg: Color::Rgb(216, 222, 233), status_bar_bg: Some(Color::Rgb(59, 66, 82)), } } /// Get foreground color for a cell based on its value type pub fn cell_color(&self, cell: &CellValue) -> Color { match cell { CellValue::Empty => self.empty_fg, CellValue::String(_) => self.string_fg, CellValue::Int(_) | CellValue::Float(_) => self.number_fg, CellValue::Bool(_) => self.bool_fg, CellValue::Error(_) => self.error_fg, CellValue::DateTime(_) => self.datetime_fg, } } } /// Cached row data for lazy loading struct RowCache { start_row: usize, rows: Vec>, formulas: Vec>>, } /// Sheet data source (either eager or lazy) enum SheetDataSource { Eager(SheetData), Lazy { data: LazySheetData, cache: Option, cache_size: usize, // Number of rows to cache at once }, } impl SheetDataSource { fn headers(&self) -> &[String] { match self { SheetDataSource::Eager(data) => &data.headers, SheetDataSource::Lazy { data, .. } => &data.headers, } } fn width(&self) -> usize { match self { SheetDataSource::Eager(data) => data.width, SheetDataSource::Lazy { data, .. } => data.width, } } fn height(&self) -> usize { match self { SheetDataSource::Eager(data) => data.height, SheetDataSource::Lazy { data, .. } => data.height, } } /// Fetches rows with automatic cache management fn get_rows( &mut self, start: usize, count: usize, ) -> (&[Vec], &[Vec>]) { match self { SheetDataSource::Eager(data) => { let end = (start + count).min(data.rows.len()); (&data.rows[start..end], &data.formulas[start..end]) } SheetDataSource::Lazy { data, cache, cache_size, } => { // Check if we need to reload the cache let needs_reload = match cache { None => true, Some(c) => start < c.start_row || start >= c.start_row + c.rows.len(), }; if needs_reload { // Load new chunk centered around the requested start let cache_start = start.saturating_sub(*cache_size / 4); // Start a bit before let (rows, formulas) = data.get_rows(cache_start, *cache_size); *cache = Some(RowCache { start_row: cache_start, rows, formulas, }); } // Return from cache if let Some(c) = cache { let offset = start.saturating_sub(c.start_row); let end = (offset + count).min(c.rows.len()); (&c.rows[offset..end], &c.formulas[offset..end]) } else { // Shouldn't happen, but return empty slices (&[], &[]) } } } } fn get_cell(&mut self, row: usize, col: usize) -> (Option, Option) { match self { SheetDataSource::Eager(data) => { let cell = data.rows.get(row).and_then(|r| r.get(col)).cloned(); let formula = data .formulas .get(row) .and_then(|r| r.get(col)) .and_then(|f| f.clone()); (cell, formula) } SheetDataSource::Lazy { .. } => { // For lazy loading, get just the one row we need let (rows, formulas) = self.get_rows(row, 1); let cell = rows.first().and_then(|r| r.get(col)).cloned(); let formula = formulas .first() .and_then(|r| r.get(col)) .and_then(|f| f.clone()); (cell, formula) } } } } /// Progress information for long-running operations #[derive(Debug, Clone)] struct ProgressInfo { message: String, current: usize, total: usize, started_at: Instant, } impl ProgressInfo { fn new(message: impl Into, total: usize) -> Self { Self { message: message.into(), current: 0, total, started_at: Instant::now(), } } fn update(&mut self, current: usize) { self.current = current; } fn percentage(&self) -> usize { (self.current * 100).checked_div(self.total).unwrap_or(100) } fn format(&self) -> String { let pct = self.percentage(); let _elapsed = self.started_at.elapsed().as_secs_f64(); format!( "{} {}% ({}/{})", self.message, pct, self.current, self.total ) } } /// TUI application state pub struct TuiState { workbook: Workbook, sheet_names: Vec, current_sheet_index: usize, sheet_data: SheetDataSource, should_quit: bool, cursor_row: usize, // Current row (0-indexed in data) cursor_col: usize, // Current column (0-indexed) scroll_offset: usize, // Vertical scroll offset horizontal_scroll_offset: usize, // Horizontal scroll offset horizontal_scroll_enabled: bool, // Whether horizontal scrolling is enabled column_widths: Vec, // Cached column widths for horizontal scroll show_help: bool, // Help overlay visible show_cell_detail: bool, // Cell detail popup visible cell_detail_scroll: usize, // Scroll offset for cell detail popup // Search state search_mode: bool, // Whether we're in search input mode search_query: String, // Current search query search_matches: Vec<(usize, usize)>, // List of (row, col) matches current_match_index: Option, // Index in search_matches // Jump mode state jump_mode: bool, // Whether we're in jump input mode jump_input: String, // Current jump input (row number or cell address) // Clipboard state copy_feedback: Option<(String, Instant)>, // Message and timestamp for copy feedback // Progress state progress: Option, // Current operation progress // Theme state current_theme: Theme, // Current color theme // Config state config: crate::config::Config, // User configuration } impl TuiState { const LAZY_LOADING_THRESHOLD: usize = 1000; // Use lazy loading for sheets with >1000 rows const ROW_CACHE_SIZE: usize = 200; // Cache 200 rows at a time for lazy loading pub fn new( mut workbook: Workbook, initial_sheet_name: &str, config: &crate::config::Config, horizontal_scroll: bool, ) -> Result { let sheet_names = workbook.sheet_names(); let current_sheet_index = sheet_names .iter() .position(|name| name == initial_sheet_name) .unwrap_or(0); // Load sheet lazily first to check size let lazy_data = workbook.load_sheet_lazy(&sheet_names[current_sheet_index])?; let sheet_height = lazy_data.height; // Choose loading strategy based on size let sheet_data = if sheet_height > Self::LAZY_LOADING_THRESHOLD { eprintln!( "📊 Large file detected ({} rows) - using lazy loading", sheet_height ); SheetDataSource::Lazy { data: lazy_data, cache: None, cache_size: Self::ROW_CACHE_SIZE, } } else { // Convert to eager loading for small files SheetDataSource::Eager(lazy_data.to_sheet_data()) }; let mut state = Self { workbook, sheet_names, current_sheet_index, sheet_data, should_quit: false, cursor_row: 0, cursor_col: 0, scroll_offset: 0, horizontal_scroll_offset: 0, horizontal_scroll_enabled: horizontal_scroll, column_widths: Vec::new(), show_help: false, show_cell_detail: false, cell_detail_scroll: 0, search_mode: false, search_query: String::new(), search_matches: Vec::new(), current_match_index: None, jump_mode: false, jump_input: String::new(), copy_feedback: None, progress: None, current_theme: Self::parse_theme_name(&config.theme.default), config: config.clone(), }; // Calculate column widths if horizontal scrolling is enabled if horizontal_scroll { state.column_widths = state.calculate_column_widths(); } Ok(state) } /// Parse theme name from config string fn parse_theme_name(name: &str) -> Theme { match name.to_lowercase().as_str() { "dracula" => Theme::Dracula, "solarized dark" | "solarizeddark" => Theme::SolarizedDark, "solarized light" | "solarizedlight" => Theme::SolarizedLight, "github dark" | "githubdark" => Theme::GitHubDark, "nord" => Theme::Nord, _ => Theme::Default, // Fallback to default for unknown themes } } fn current_sheet_name(&self) -> &str { &self.sheet_names[self.current_sheet_index] } fn switch_to_next_sheet(&mut self) -> Result<()> { if self.sheet_names.len() <= 1 { return Ok(()); // No other sheets to switch to } self.current_sheet_index = (self.current_sheet_index + 1) % self.sheet_names.len(); self.load_current_sheet()?; self.reset_cursor(); self.clear_search(); // Clear search when changing sheets Ok(()) } fn switch_to_prev_sheet(&mut self) -> Result<()> { if self.sheet_names.len() <= 1 { return Ok(()); // No other sheets to switch to } self.current_sheet_index = if self.current_sheet_index == 0 { self.sheet_names.len() - 1 } else { self.current_sheet_index - 1 }; self.load_current_sheet()?; self.reset_cursor(); self.clear_search(); // Clear search when changing sheets Ok(()) } fn load_current_sheet(&mut self) -> Result<()> { let sheet_name = self.sheet_names[self.current_sheet_index].clone(); // Load sheet lazily first to check size let lazy_data = self.workbook.load_sheet_lazy(&sheet_name)?; let sheet_height = lazy_data.height; // Choose loading strategy based on size self.sheet_data = if sheet_height > Self::LAZY_LOADING_THRESHOLD { eprintln!( "📊 Large file detected ({} rows) - using lazy loading", sheet_height ); SheetDataSource::Lazy { data: lazy_data, cache: None, cache_size: Self::ROW_CACHE_SIZE, } } else { // Convert to eager loading for small files SheetDataSource::Eager(lazy_data.to_sheet_data()) }; // Recalculate column widths if horizontal scrolling is enabled if self.horizontal_scroll_enabled { self.column_widths = self.calculate_column_widths(); } Ok(()) } fn reset_cursor(&mut self) { self.cursor_row = 0; self.cursor_col = 0; self.scroll_offset = 0; self.horizontal_scroll_offset = 0; } /// Perform case-insensitive search across all cells fn perform_search(&mut self) { self.search_matches.clear(); self.current_match_index = None; if self.search_query.is_empty() { self.progress = None; return; } let query_lower = self.search_query.to_lowercase(); let total_height = self.sheet_data.height(); // Show progress for large sheets if total_height > 1000 { self.progress = Some(ProgressInfo::new("Searching", total_height)); } // Search through all cells (load in chunks for lazy data) const SEARCH_CHUNK_SIZE: usize = 500; for chunk_start in (0..total_height).step_by(SEARCH_CHUNK_SIZE) { let chunk_size = SEARCH_CHUNK_SIZE.min(total_height - chunk_start); let (rows, _formulas) = self.sheet_data.get_rows(chunk_start, chunk_size); for (chunk_idx, row) in rows.iter().enumerate() { let row_idx = chunk_start + chunk_idx; for (col_idx, cell) in row.iter().enumerate() { let cell_str = cell.to_string().to_lowercase(); if cell_str.contains(&query_lower) { self.search_matches.push((row_idx, col_idx)); } } } // Update progress if let Some(ref mut progress) = self.progress { progress.update(chunk_start + chunk_size); } } // Clear progress when done self.progress = None; // If we found matches, select the first one if !self.search_matches.is_empty() { self.current_match_index = Some(0); self.jump_to_current_match(); } } /// Jump to the next search match fn jump_to_next_match(&mut self) { if self.search_matches.is_empty() { return; } self.current_match_index = Some(match self.current_match_index { Some(idx) => (idx + 1) % self.search_matches.len(), None => 0, }); self.jump_to_current_match(); } /// Jump to the previous search match fn jump_to_prev_match(&mut self) { if self.search_matches.is_empty() { return; } self.current_match_index = Some(match self.current_match_index { Some(idx) => { if idx == 0 { self.search_matches.len() - 1 } else { idx - 1 } } None => self.search_matches.len() - 1, }); self.jump_to_current_match(); } /// Move cursor to the current search match fn jump_to_current_match(&mut self) { if let Some(idx) = self.current_match_index && let Some(&(row, col)) = self.search_matches.get(idx) { self.cursor_row = row; self.cursor_col = col; } } /// Clear search state fn clear_search(&mut self) { self.search_query.clear(); self.search_matches.clear(); self.current_match_index = None; } /// Enter jump mode fn enter_jump_mode(&mut self) { self.jump_mode = true; self.jump_input.clear(); } /// Parse jump input and navigate to that location /// Supports formats: "100" (row), "A5" (cell address), "5,3" (row,col) fn perform_jump(&mut self) { if self.jump_input.is_empty() { self.jump_mode = false; return; } let input = self.jump_input.trim(); // Try to parse as row number (1-indexed) if let Ok(row_num) = input.parse::() { if row_num > 0 && row_num <= self.sheet_data.height() { self.cursor_row = row_num - 1; // Convert to 0-indexed self.copy_feedback = Some((format!("Jumped to row {}", row_num), Instant::now())); } else { self.copy_feedback = Some(( format!( "Invalid row: {} (max: {})", row_num, self.sheet_data.height() ), Instant::now(), )); } } // Try to parse as cell address like "A5" or "B10" else if let Some((col, row)) = Self::parse_cell_address(input) { if row < self.sheet_data.height() && col < self.sheet_data.width() { self.cursor_row = row; self.cursor_col = col; self.copy_feedback = Some(( format!("Jumped to {}", input.to_uppercase()), Instant::now(), )); } else { self.copy_feedback = Some(( format!("Cell address out of bounds: {}", input), Instant::now(), )); } } // Try to parse as "row,col" format else if let Some((row, col)) = input.split_once(',') { if let (Ok(row_num), Ok(col_num)) = (row.trim().parse::(), col.trim().parse::()) { if row_num > 0 && row_num <= self.sheet_data.height() && col_num > 0 && col_num <= self.sheet_data.width() { self.cursor_row = row_num - 1; self.cursor_col = col_num - 1; self.copy_feedback = Some(( format!("Jumped to row {}, col {}", row_num, col_num), Instant::now(), )); } else { self.copy_feedback = Some(("Invalid row/column number".to_string(), Instant::now())); } } else { self.copy_feedback = Some(( "Invalid format. Use: row number, cell (A5), or row,col".to_string(), Instant::now(), )); } } else { self.copy_feedback = Some(( "Invalid format. Use: row number, cell (A5), or row,col".to_string(), Instant::now(), )); } self.jump_mode = false; self.jump_input.clear(); } /// Parse cell address like "A5", "B10", "AA100" into (col, row) indices fn parse_cell_address(addr: &str) -> Option<(usize, usize)> { let addr = addr.to_uppercase(); let mut col = 0usize; let mut row_str = String::new(); for ch in addr.chars() { if ch.is_ascii_alphabetic() { col = col * 26 + (ch as usize - 'A' as usize + 1); } else if ch.is_ascii_digit() { row_str.push(ch); } else { return None; } } if row_str.is_empty() || col == 0 { return None; } let row = row_str.parse::().ok()?; Some((col - 1, row - 1)) // Convert to 0-indexed } /// Copy the current cell value to clipboard fn copy_current_cell(&mut self) { let (cell, _formula) = self.sheet_data.get_cell(self.cursor_row, self.cursor_col); let cell_value = cell.map(|v| v.to_raw_string()).unwrap_or_default(); match Clipboard::new() { Ok(mut clipboard) => { if let Err(e) = clipboard.set_text(&cell_value) { self.copy_feedback = Some((format!("Copy failed: {}", e), Instant::now())); } else { let cell_addr = self.current_cell_address(); self.copy_feedback = Some((format!("Copied cell {}", cell_addr), Instant::now())); } } Err(e) => { self.copy_feedback = Some((format!("Clipboard error: {}", e), Instant::now())); } } } /// Copy the current row to clipboard (tab-separated) fn copy_current_row(&mut self) { let (rows, _formulas) = self.sheet_data.get_rows(self.cursor_row, 1); let row_values = rows .first() .map(|row| { row.iter() .map(|cell| { let value = cell.to_raw_string(); // Escape cells that contain tabs, newlines, or quotes if value.contains('\t') || value.contains('\n') || value.contains('"') { format!("\"{}\"", value.replace('"', "\"\"")) } else { value } }) .collect::>() .join("\t") }) .unwrap_or_default(); match Clipboard::new() { Ok(mut clipboard) => { if let Err(e) = clipboard.set_text(&row_values) { self.copy_feedback = Some((format!("Copy failed: {}", e), Instant::now())); } else { self.copy_feedback = Some(( format!( "Copied row {} ({} cells)", self.cursor_row + 1, self.sheet_data.width() ), Instant::now(), )); } } Err(e) => { self.copy_feedback = Some((format!("Clipboard error: {}", e), Instant::now())); } } } fn move_up(&mut self) { if self.cursor_row > 0 { self.cursor_row -= 1; // Auto-scroll up if cursor moves above viewport if self.cursor_row < self.scroll_offset { self.scroll_offset = self.cursor_row; } } } fn move_down(&mut self) { if self.cursor_row < self.sheet_data.height().saturating_sub(1) { self.cursor_row += 1; // Auto-scroll down will be handled in render based on viewport height } } /// Update scroll offset to keep cursor visible fn update_scroll(&mut self, viewport_height: usize) { // Scroll down if cursor is below visible area if self.cursor_row >= self.scroll_offset + viewport_height { self.scroll_offset = self.cursor_row.saturating_sub(viewport_height - 1); } // Scroll up if cursor is above visible area if self.cursor_row < self.scroll_offset { self.scroll_offset = self.cursor_row; } } /// Calculate column widths based on content fn calculate_column_widths(&mut self) -> Vec { let num_cols = self.sheet_data.width(); let mut widths = vec![0; num_cols]; // Measure headers let headers = self.sheet_data.headers(); for (i, header) in headers.iter().enumerate() { widths[i] = header.len(); } // Sample first 100 rows (or fewer if sheet is smaller) let sample_size = 100.min(self.sheet_data.height()); let (sample_rows, _) = self.sheet_data.get_rows(0, sample_size); for row in sample_rows.iter() { for (col_idx, cell) in row.iter().enumerate() { let len = cell.to_string().len(); widths[col_idx] = widths[col_idx].max(len); } } // Apply constraints: min 3 chars, max 30 chars widths.iter().map(|&w| w.clamp(3, 30)).collect() } /// Update horizontal scroll offset to keep cursor visible fn update_horizontal_scroll(&mut self, viewport_width: usize) { if !self.horizontal_scroll_enabled { return; } // Calculate which columns are visible let mut total_width = 0; let mut visible_end = self.horizontal_scroll_offset; for i in self.horizontal_scroll_offset..self.column_widths.len() { total_width += self.column_widths[i] + 1; // +1 for separator visible_end = i + 1; // Always include current column if total_width > viewport_width { break; // Break after including partially-visible column } } // Scroll right if cursor is beyond visible area if self.cursor_col >= visible_end { self.horizontal_scroll_offset += 1; } // Scroll left if cursor is before visible area if self.cursor_col < self.horizontal_scroll_offset { self.horizontal_scroll_offset = self.cursor_col; } } fn move_left(&mut self) { if self.cursor_col > 0 { self.cursor_col -= 1; // Auto-scroll left if cursor moves before visible area if self.horizontal_scroll_enabled && self.cursor_col < self.horizontal_scroll_offset { self.horizontal_scroll_offset = self.cursor_col; } } } fn move_right(&mut self) { if self.cursor_col < self.sheet_data.width().saturating_sub(1) { self.cursor_col += 1; // Auto-scroll right will be handled in render based on viewport width } } fn move_to_start_of_row(&mut self) { self.cursor_col = 0; if self.horizontal_scroll_enabled { self.horizontal_scroll_offset = 0; } } fn move_to_end_of_row(&mut self) { self.cursor_col = self.sheet_data.width().saturating_sub(1); // Horizontal scroll will be updated in render to show the last column } fn page_up(&mut self, page_size: usize) { self.cursor_row = self.cursor_row.saturating_sub(page_size); } fn page_down(&mut self, page_size: usize) { self.cursor_row = (self.cursor_row + page_size).min(self.sheet_data.height().saturating_sub(1)); } fn move_to_top(&mut self) { self.cursor_row = 0; } fn move_to_bottom(&mut self) { self.cursor_row = self.sheet_data.height().saturating_sub(1); } fn col_to_letter(&self, col: usize) -> String { let mut result = String::new(); let mut n = col + 1; while n > 0 { n -= 1; result.push((b'A' + (n % 26) as u8) as char); n /= 26; } result.chars().rev().collect() } fn current_cell_address(&self) -> String { format!( "{}{}", self.col_to_letter(self.cursor_col), self.cursor_row + 1 ) } /// Check if a key press matches a configured action fn key_matches( &self, code: KeyCode, modifiers: crossterm::event::KeyModifiers, action: &str, ) -> bool { if let Some((expected_code, expected_mods)) = self.config.get_keybinding(action) { if code != expected_code { return false; } // Some terminals omit SHIFT for shifted symbol characters (e.g. '?', '$') // because the shift is already encoded in the character itself. Strip SHIFT // from both sides for non-alphabetic chars so bindings work consistently. if let KeyCode::Char(c) = code && !c.is_alphabetic() { let strip = crossterm::event::KeyModifiers::SHIFT; return (modifiers - strip) == (expected_mods - strip); } modifiers == expected_mods } else { false } } fn handle_event(&mut self, event: Event) { if let Event::Key(KeyEvent { code, modifiers, kind: KeyEventKind::Press, .. }) = event { // If help is showing, any key closes it if self.show_help { self.show_help = false; return; } // If cell detail is showing, handle scrolling or close if self.show_cell_detail { match code { KeyCode::Up => { self.cell_detail_scroll = self.cell_detail_scroll.saturating_sub(1); } KeyCode::Down => { self.cell_detail_scroll = self.cell_detail_scroll.saturating_add(1); } KeyCode::PageUp => { self.cell_detail_scroll = self.cell_detail_scroll.saturating_sub(10); } KeyCode::PageDown => { self.cell_detail_scroll = self.cell_detail_scroll.saturating_add(10); } KeyCode::Home => { self.cell_detail_scroll = 0; } _ => { // Any other key closes the detail view self.show_cell_detail = false; self.cell_detail_scroll = 0; } } return; } // If in search mode, handle search input if self.search_mode { match code { KeyCode::Char(c) => { self.search_query.push(c); self.perform_search(); } KeyCode::Backspace => { self.search_query.pop(); self.perform_search(); } KeyCode::Enter => { // Exit search mode but keep results self.search_mode = false; } KeyCode::Esc => { // Exit search mode and clear search self.search_mode = false; self.clear_search(); } _ => {} } return; } // If in jump mode, handle jump input if self.jump_mode { match code { KeyCode::Char(c) => { self.jump_input.push(c); } KeyCode::Backspace => { self.jump_input.pop(); } KeyCode::Enter => { // Perform jump self.perform_jump(); } KeyCode::Esc => { // Exit jump mode self.jump_mode = false; self.jump_input.clear(); } _ => {} } return; } // Normal navigation and commands - using configured keybindings // Check actions in order of priority if self.key_matches(code, modifiers, "quit") { self.should_quit = true; } else if self.key_matches(code, modifiers, "help") { self.show_help = true; } else if self.key_matches(code, modifiers, "theme_toggle") { self.current_theme = self.current_theme.next(); } else if self.key_matches(code, modifiers, "search") { self.search_mode = true; self.clear_search(); } else if self.key_matches(code, modifiers, "next_match") { self.jump_to_next_match(); } else if self.key_matches(code, modifiers, "prev_match") { self.jump_to_prev_match(); } else if self.key_matches(code, modifiers, "copy_cell") { self.copy_current_cell(); } else if self.key_matches(code, modifiers, "copy_row") { self.copy_current_row(); } else if self.key_matches(code, modifiers, "jump") { self.enter_jump_mode(); } else if self.key_matches(code, modifiers, "show_cell_detail") { self.show_cell_detail = true; self.cell_detail_scroll = 0; } else if self.key_matches(code, modifiers, "next_sheet") { let _ = self.switch_to_next_sheet(); } else if self.key_matches(code, modifiers, "prev_sheet") || code == KeyCode::BackTab { // BackTab is another way to detect Shift+Tab on some terminals let _ = self.switch_to_prev_sheet(); } else if self.key_matches(code, modifiers, "up") { self.move_up(); } else if self.key_matches(code, modifiers, "down") { self.move_down(); } else if self.key_matches(code, modifiers, "left") { self.move_left(); } else if self.key_matches(code, modifiers, "right") { self.move_right(); } else if self.key_matches(code, modifiers, "jump_to_top") { self.move_to_top(); } else if self.key_matches(code, modifiers, "jump_to_bottom") { self.move_to_bottom(); } else if self.key_matches(code, modifiers, "jump_to_row_start") { self.move_to_start_of_row(); } else if self.key_matches(code, modifiers, "jump_to_row_end") { self.move_to_end_of_row(); } else if self.key_matches(code, modifiers, "page_up") { self.page_up(10); } else if self.key_matches(code, modifiers, "page_down") { self.page_down(10); } else if code == KeyCode::Esc { // Special handling for Esc - clear search if active, otherwise quit if !self.search_matches.is_empty() { self.clear_search(); } else { self.should_quit = true; } } } } fn render(&mut self, frame: &mut Frame) { let chunks = Layout::default() .direction(Direction::Vertical) .constraints([ Constraint::Min(3), // Main content Constraint::Length(3), // Status bar ]) .split(frame.area()); // Calculate visible viewport let table_height = chunks[0].height.saturating_sub(3) as usize; // Account for borders and header let viewport_width = chunks[0].width.saturating_sub(2) as usize; // Account for borders // Update scroll to keep cursor visible self.update_scroll(table_height); self.update_horizontal_scroll(viewport_width); let visible_start = self.scroll_offset; // Calculate visible column range let (visible_col_start, visible_col_end) = if self.horizontal_scroll_enabled { // Calculate which columns fit in viewport let mut total_width = 0; let mut end = self.horizontal_scroll_offset; for i in self.horizontal_scroll_offset..self.column_widths.len() { total_width += self.column_widths[i] + 1; // +1 for separator end = i + 1; // Always include current column if total_width > viewport_width { break; // Break after including partially-visible column } } (self.horizontal_scroll_offset, end) } else { (0, self.sheet_data.width()) }; // Clone headers to avoid borrow issues let headers = self.sheet_data.headers().to_vec(); // Get theme colors let colors = self.current_theme.colors(); // Build table rows with highlighting let header_cells: Vec = headers .iter() .enumerate() .skip(visible_col_start) .take(visible_col_end - visible_col_start) .map(|(col_idx, h)| { let mut style = Style::default() .fg(colors.header_fg) .add_modifier(Modifier::BOLD); if let Some(bg) = colors.header_bg { style = style.bg(bg); } // Highlight current column header if col_idx == self.cursor_col { style = style.fg(colors.current_col_fg); } Cell::from(h.as_str()).style(style) }) .collect(); let header = Row::new(header_cells).height(1); // Get visible rows from data source (handles lazy loading if needed) let (visible_rows, _visible_formulas) = self.sheet_data.get_rows(visible_start, table_height); let data_rows: Vec = visible_rows .iter() .enumerate() .map(|(visible_idx, row)| { let row_idx = visible_start + visible_idx; // Absolute row index let cells: Vec = row .iter() .enumerate() .skip(visible_col_start) .take(visible_col_end - visible_col_start) .map(|(col_idx, cell)| { // Start with cell type color let mut style = Style::default().fg(colors.cell_color(cell)); // Add alternating row background (only if not the current row) let is_alternating_row = row_idx % 2 == 1; if is_alternating_row && let Some(alt_bg) = colors.alternating_row_bg { style = style.bg(alt_bg); } // Check if this cell is a search match let is_search_match = self.search_matches.contains(&(row_idx, col_idx)); let is_current_match = self .current_match_index .and_then(|idx| self.search_matches.get(idx)) .map(|&pos| pos == (row_idx, col_idx)) .unwrap_or(false); // Highlight current search match (highest priority) if is_current_match { style = style .bg(colors.current_search_bg) .fg(colors.current_search_fg) .add_modifier(Modifier::BOLD); } // Highlight current cell else if row_idx == self.cursor_row && col_idx == self.cursor_col { style = style .bg(colors.current_cell_bg) .fg(colors.current_cell_fg) .add_modifier(Modifier::BOLD); } // Highlight other search matches else if is_search_match { style = style.bg(colors.search_match_bg).fg(colors.search_match_fg); } // Highlight current row else if row_idx == self.cursor_row { style = style.bg(colors.current_row_bg); } // Highlight current column else if col_idx == self.cursor_col { style = style.fg(colors.current_col_fg); } Cell::from(cell.to_string()).style(style) }) .collect(); Row::new(cells).height(1) }) .collect(); // Calculate column widths let col_widths: Vec = if self.horizontal_scroll_enabled { // Use fixed widths based on content self.column_widths[visible_col_start..visible_col_end] .iter() .map(|&w| Constraint::Length(w as u16)) .collect() } else { // Use percentage-based widths (current behavior) let sheet_width = self.sheet_data.width(); headers .iter() .map(|_| Constraint::Percentage((100 / sheet_width.max(1)) as u16)) .collect() }; let table_title = if self.sheet_names.len() > 1 { format!( " {} (Sheet {}/{}) ", self.current_sheet_name(), self.current_sheet_index + 1, self.sheet_names.len() ) } else { format!(" {} ", self.current_sheet_name()) }; let table = Table::new(data_rows, col_widths).header(header).block( Block::default() .borders(Borders::ALL) .border_style(Style::default().fg(colors.border_fg)) .title(table_title), ); frame.render_widget(table, chunks[0]); // Status bar with current cell info let (cell, _) = self.sheet_data.get_cell(self.cursor_row, self.cursor_col); let current_cell_value = cell.map(|v| v.to_string()).unwrap_or_default(); // Format sheet dimensions with scroll indicator let sheet_dims = if self.horizontal_scroll_enabled && self.horizontal_scroll_offset > 0 { let first_col = headers .get(visible_col_start) .map(|s| s.as_str()) .unwrap_or("?"); let last_col = headers .get(visible_col_end.saturating_sub(1)) .map(|s| s.as_str()) .unwrap_or("?"); format!( "{} rows × {} columns (showing {}-{})", self.sheet_data.height(), self.sheet_data.width(), first_col, last_col ) } else { format!( "{} rows × {} columns", self.sheet_data.height(), self.sheet_data.width() ) }; let status_text = if let Some(ref progress) = self.progress { // Show progress indicator format!(" ⏳ {} ", progress.format()) } else if self.jump_mode { format!( " Jump to (row, cell like A5, or row,col): {} ", self.jump_input ) } else if self.search_mode { format!(" Search: {} ", self.search_query) } else if let Some(idx) = self.current_match_index { // Show search results let match_info = format!("Match {}/{} | ", idx + 1, self.search_matches.len()); if self.sheet_names.len() > 1 { format!( " {} | {}n:next N:prev Esc:clear | {} | Tab:next sheet ?:help q:quit ", match_info, self.current_cell_address(), sheet_dims ) } else { format!( " {} | {}n:next N:prev Esc:clear | {} | ?:help q:quit ", match_info, self.current_cell_address(), sheet_dims ) } } else { // Show loading mode indicator for large files let mode_indicator = match &self.sheet_data { SheetDataSource::Lazy { .. } => " [Lazy] ", SheetDataSource::Eager(_) => "", }; if self.sheet_names.len() > 1 { format!( " {} | {}{} | Theme: {} | t:theme /:search Tab:sheet ?:help q:quit ", self.current_cell_address(), sheet_dims, mode_indicator, self.current_theme.name() ) } else { format!( " {} | {}{} | Theme: {} | t:theme /:search ?:help q:quit ", self.current_cell_address(), sheet_dims, mode_indicator, self.current_theme.name() ) } }; let mut status_style = Style::default().fg(colors.status_bar_fg); if let Some(bg) = colors.status_bar_bg { status_style = status_style.bg(bg); } let status = Paragraph::new(status_text).style(status_style).block( Block::default() .borders(Borders::ALL) .border_style(Style::default().fg(colors.border_fg)) .title(format!(" {} ", current_cell_value)), ); frame.render_widget(status, chunks[1]); // Render cell detail overlay if visible if self.show_cell_detail { self.render_cell_detail(frame); } // Render help overlay if visible if self.show_help { self.render_help(frame); } // Render copy feedback if active (and not expired) if let Some((ref message, timestamp)) = self.copy_feedback { // Show feedback for 2 seconds if timestamp.elapsed() < Duration::from_secs(2) { self.render_copy_feedback(frame, message); } else { // Clear expired feedback self.copy_feedback = None; } } } fn render_help(&self, frame: &mut Frame) { use ratatui::text::{Line, Span}; // Build help content with rich formatting let help_lines = vec![ Line::from(vec![ Span::styled( "xleak", Style::default() .fg(Color::Cyan) .add_modifier(Modifier::BOLD), ), Span::raw(" - Interactive Excel Viewer"), ]), Line::from(""), Line::from(Span::styled( "NAVIGATION", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(vec![ Span::styled(" ↑ ↓ ← → ", Style::default().fg(Color::Green)), Span::raw("Move cursor one cell"), ]), Line::from(vec![ Span::styled(" Page Up/Down ", Style::default().fg(Color::Green)), Span::raw("Scroll 10 rows"), ]), Line::from(vec![ Span::styled(" Home ", Style::default().fg(Color::Green)), Span::raw("Jump to first column (start of row)"), ]), Line::from(vec![ Span::styled(" End ", Style::default().fg(Color::Green)), Span::raw("Jump to last column (end of row)"), ]), Line::from(vec![ Span::styled(" Ctrl+Home ", Style::default().fg(Color::Green)), Span::raw("Jump to first row (top of sheet)"), ]), Line::from(vec![ Span::styled(" Ctrl+End ", Style::default().fg(Color::Green)), Span::raw("Jump to last row (bottom of sheet)"), ]), Line::from(vec![ Span::styled(" Ctrl+G ", Style::default().fg(Color::Green)), Span::raw("Jump to row/cell (e.g., 100, A5, or 10,3)"), ]), Line::from(""), Line::from(Span::styled( "SEARCH", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(vec![ Span::styled(" / ", Style::default().fg(Color::Green)), Span::raw("Start search (type query, Enter to confirm)"), ]), Line::from(vec![ Span::styled(" n ", Style::default().fg(Color::Green)), Span::raw("Jump to next search match"), ]), Line::from(vec![ Span::styled(" N (Shift+n) ", Style::default().fg(Color::Green)), Span::raw("Jump to previous search match"), ]), Line::from(vec![ Span::styled(" Esc ", Style::default().fg(Color::Green)), Span::raw("Clear search results"), ]), Line::from(""), Line::from(Span::styled( "CLIPBOARD", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(vec![ Span::styled(" c ", Style::default().fg(Color::Green)), Span::raw("Copy current cell value"), ]), Line::from(vec![ Span::styled(" C (Shift+c) ", Style::default().fg(Color::Green)), Span::raw("Copy entire current row (tab-separated)"), ]), Line::from(""), Line::from(Span::styled( "SHEET NAVIGATION", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(vec![ Span::styled(" Tab ", Style::default().fg(Color::Green)), Span::raw("Switch to next sheet"), ]), Line::from(vec![ Span::styled(" Shift+Tab ", Style::default().fg(Color::Green)), Span::raw("Switch to previous sheet"), ]), Line::from(""), Line::from(Span::styled( "GENERAL", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(vec![ Span::styled(" Enter ", Style::default().fg(Color::Green)), Span::raw("Show cell details (type, formula, value)"), ]), Line::from(vec![ Span::styled(" t ", Style::default().fg(Color::Green)), Span::raw("Cycle through color themes"), ]), Line::from(vec![ Span::styled(" ? ", Style::default().fg(Color::Green)), Span::raw("Toggle this help screen"), ]), Line::from(vec![ Span::styled(" q ", Style::default().fg(Color::Green)), Span::raw("Quit xleak"), ]), Line::from(vec![ Span::styled(" Esc ", Style::default().fg(Color::Green)), Span::raw("Quit xleak (or clear search)"), ]), Line::from(""), Line::from(Span::styled( "VISUAL CUES", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(vec![ Span::styled( " Blue background ", Style::default().bg(Color::Blue).fg(Color::White), ), Span::raw(" Current cell (selected)"), ]), Line::from(vec![ Span::styled(" Dark gray bg ", Style::default().bg(Color::DarkGray)), Span::raw(" Current row highlight"), ]), Line::from(vec![ Span::styled(" Cyan text ", Style::default().fg(Color::Cyan)), Span::raw(" Current column highlight"), ]), Line::from(vec![ Span::styled( " Yellow bold ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::raw(" Column headers"), ]), Line::from(vec![ Span::styled( " Yellow bg ", Style::default().bg(Color::Yellow).fg(Color::Black), ), Span::raw(" Current search match"), ]), Line::from(vec![ Span::styled( " Light yellow bg ", Style::default().bg(Color::LightYellow).fg(Color::Black), ), Span::raw(" Other search matches"), ]), Line::from(""), Line::from(" Cell colors vary by type and current theme:"), Line::from(" • Numbers, strings, dates, booleans, errors each have distinct colors"), Line::from(" • Alternating row backgrounds improve readability"), Line::from(" • Press 't' to cycle through 6 built-in themes"), Line::from(""), Line::from(Span::styled( "STATUS BAR INFO", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(" Cell address (e.g., B7) shown in bottom left"), Line::from(" Current cell value displayed in status bar title"), Line::from(" Sheet dimensions (rows × columns) shown"), Line::from(" Match counter shown when searching (e.g., Match 3/12)"), Line::from(""), Line::from(Span::styled( "CONFIGURATION", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), )), Line::from(" Customize keybindings and theme in config file:"), Line::from(" ~/.config/xleak/config.toml"), Line::from(""), Line::from(" Supports VIM-style navigation (hjkl, gg, G, 0, $)"), Line::from(" Custom keybindings per action"), Line::from(" Default theme selection"), Line::from(""), Line::from(" See config.toml.example for all options"), Line::from(""), Line::from(vec![Span::styled( "Press any key to close", Style::default() .fg(Color::Magenta) .add_modifier(Modifier::ITALIC), )]), ]; // Calculate popup size (centered, 70% width, auto height) let area = frame.area(); let popup_width = (area.width as f32 * 0.7).min(80.0) as u16; let popup_height = (help_lines.len() + 4).min(area.height.saturating_sub(2) as usize) as u16; let popup_area = Rect { x: (area.width.saturating_sub(popup_width)) / 2, y: (area.height.saturating_sub(popup_height)) / 2, width: popup_width, height: popup_height, }; // Clear the area behind the popup frame.render_widget(Clear, popup_area); // Create help content with styled text let help_paragraph = Paragraph::new(help_lines) .style(Style::default().fg(Color::White).bg(Color::Black)) .block( Block::default() .borders(Borders::ALL) .border_style( Style::default() .fg(Color::Cyan) .add_modifier(Modifier::BOLD), ) .title(vec![ Span::raw(" "), Span::styled( "Help", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::raw(" - Keyboard Shortcuts "), ]) .title_alignment(Alignment::Center), ) .wrap(Wrap { trim: false }); frame.render_widget(help_paragraph, popup_area); } fn render_cell_detail(&mut self, frame: &mut Frame) { use ratatui::text::{Line, Span}; // Get current cell info let (cell_value, cell_formula) = self.sheet_data.get_cell(self.cursor_row, self.cursor_col); let cell_addr = self.current_cell_address(); let header = self .sheet_data .headers() .get(self.cursor_col) .map(|s| s.as_str()) .unwrap_or(""); // Build detail lines let mut detail_lines = vec![ Line::from(vec![ Span::styled( "Cell: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::styled(cell_addr.clone(), Style::default().fg(Color::Cyan)), ]), Line::from(vec![ Span::styled( "Column: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::raw(header), ]), Line::from(""), ]; // Show formula first if it exists (more important than type) if let Some(ref formula) = cell_formula { detail_lines.push(Line::from(vec![ Span::styled( "Formula: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::styled( formula.clone(), Style::default() .fg(Color::Magenta) .add_modifier(Modifier::BOLD), ), ])); detail_lines.push(Line::from("")); } if let Some(cell) = cell_value { // Cell type let cell_type = match cell { crate::workbook::CellValue::Empty => "Empty", crate::workbook::CellValue::String(_) => "String", crate::workbook::CellValue::Int(_) => "Integer", crate::workbook::CellValue::Float(_) => "Float", crate::workbook::CellValue::Bool(_) => "Boolean", crate::workbook::CellValue::Error(_) => "Error", crate::workbook::CellValue::DateTime(_) => "DateTime", }; detail_lines.push(Line::from(vec![ Span::styled( "Type: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::styled(cell_type, Style::default().fg(Color::Green)), ])); // Raw value (unformatted) let raw_value = cell.to_raw_string(); // If cell is empty but has a formula, add explanation if raw_value.is_empty() && cell_formula.is_some() { detail_lines.push(Line::from(vec![ Span::styled( "Value: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::styled( "(empty - formula not evaluated)", Style::default() .fg(Color::DarkGray) .add_modifier(Modifier::ITALIC), ), ])); } else { let value_display = if raw_value.is_empty() { "(empty)".to_string() } else { raw_value.clone() }; detail_lines.push(Line::from(vec![ Span::styled( "Value: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::raw(value_display), ])); } // Formatted display value let display_value = cell.to_string(); if display_value != raw_value { detail_lines.push(Line::from(vec![ Span::styled( "Display Value: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::raw(display_value.clone()), ])); } detail_lines.push(Line::from("")); detail_lines.push(Line::from(Span::styled( "Full Content:", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ))); detail_lines.push(Line::from("")); // Split content by lines for multi-line display for line in raw_value.lines() { detail_lines.push(Line::from(Span::raw(line.to_string()))); } } else { // No cell value - might be a formula cell or truly empty if cell_formula.is_some() { detail_lines.push(Line::from(vec![ Span::styled( "Value: ", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::styled( "(formula not evaluated by Excel reader)", Style::default() .fg(Color::DarkGray) .add_modifier(Modifier::ITALIC), ), ])); } else { detail_lines.push(Line::from(Span::styled( "No cell data", Style::default() .fg(Color::DarkGray) .add_modifier(Modifier::ITALIC), ))); } } detail_lines.push(Line::from("")); detail_lines.push(Line::from(vec![Span::styled( "↑↓ to scroll | Any other key to close", Style::default() .fg(Color::Magenta) .add_modifier(Modifier::ITALIC), )])); // Calculate popup size (60% width, auto height) let area = frame.area(); let popup_width = (area.width as f32 * 0.6).min(80.0) as u16; let popup_height = (detail_lines.len() + 4).min(area.height.saturating_sub(2) as usize) as u16; // Calculate content area (inside borders) let content_height = popup_height.saturating_sub(2) as usize; // Subtract borders let total_lines = detail_lines.len(); // Clamp scroll offset to valid range let max_scroll = total_lines.saturating_sub(content_height); let scroll_offset = self.cell_detail_scroll.min(max_scroll); let popup_area = Rect { x: (area.width.saturating_sub(popup_width)) / 2, y: (area.height.saturating_sub(popup_height)) / 2, width: popup_width, height: popup_height, }; // Clear the area behind the popup frame.render_widget(Clear, popup_area); // Build title with scroll indicator let mut title_spans = vec![ Span::raw(" "), Span::styled( "Cell Details", Style::default() .fg(Color::Yellow) .add_modifier(Modifier::BOLD), ), Span::raw(" - "), Span::styled(cell_addr.clone(), Style::default().fg(Color::Cyan)), ]; // Add scroll indicator if content is scrollable if total_lines > content_height { let scroll_info = format!(" [{}/{}]", scroll_offset + 1, max_scroll + 1); title_spans.push(Span::styled( scroll_info, Style::default() .fg(Color::DarkGray) .add_modifier(Modifier::ITALIC), )); } title_spans.push(Span::raw(" ")); // Create detail content with scroll let detail_paragraph = Paragraph::new(detail_lines) .style(Style::default().fg(Color::White).bg(Color::Black)) .scroll((scroll_offset as u16, 0)) .block( Block::default() .borders(Borders::ALL) .border_style( Style::default() .fg(Color::Cyan) .add_modifier(Modifier::BOLD), ) .title(title_spans) .title_alignment(Alignment::Center), ) .wrap(Wrap { trim: false }); frame.render_widget(detail_paragraph, popup_area); } fn render_copy_feedback(&self, frame: &mut Frame, message: &str) { use ratatui::text::{Line, Span}; // Create a small popup in the center let area = frame.area(); let popup_width = (message.len() as u16 + 6).min(60); let popup_height = 3; let popup_area = Rect { x: (area.width.saturating_sub(popup_width)) / 2, y: (area.height.saturating_sub(popup_height)) / 2, width: popup_width, height: popup_height, }; // Clear the area behind the popup frame.render_widget(Clear, popup_area); // Create feedback content let feedback_paragraph = Paragraph::new(Line::from(vec![Span::styled( message, Style::default() .fg(Color::White) .add_modifier(Modifier::BOLD), )])) .style(Style::default().bg(Color::Green).fg(Color::White)) .block( Block::default() .borders(Borders::ALL) .border_style( Style::default() .fg(Color::Green) .add_modifier(Modifier::BOLD), ) .title(" ✓ ") .title_alignment(Alignment::Center), ) .alignment(Alignment::Center); frame.render_widget(feedback_paragraph, popup_area); } } /// Run the TUI application pub fn run_tui( workbook: Workbook, sheet_name: &str, config: &crate::config::Config, horizontal_scroll: bool, ) -> Result<()> { // Check if stdout is a TTY before attempting to use interactive mode use std::io::IsTerminal; if !io::stdout().is_terminal() { anyhow::bail!( "Interactive mode requires a terminal (TTY). \ Your output is redirected or not connected to a terminal.\n\ Hint: Run this command directly in your terminal, not through pipes or automation." ); } // Setup terminal enable_raw_mode().context("Failed to enable terminal raw mode. Is this a proper TTY?")?; let mut stdout = io::stdout(); execute!(stdout, EnterAlternateScreen).context("Failed to enter alternate screen mode")?; let backend = CrosstermBackend::new(stdout); let mut terminal = Terminal::new(backend).context("Failed to initialize terminal backend")?; // Create app state let mut app = TuiState::new(workbook, sheet_name, config, horizontal_scroll)?; // Main event loop let res = run_event_loop(&mut terminal, &mut app); // Cleanup terminal disable_raw_mode()?; execute!(terminal.backend_mut(), LeaveAlternateScreen)?; terminal.show_cursor()?; res } fn run_event_loop( terminal: &mut Terminal>, app: &mut TuiState, ) -> Result<()> { loop { // Draw needs mutable access to app for scroll updates terminal.draw(|f| { app.render(f); })?; if event::poll(std::time::Duration::from_millis(100))? { let event = event::read()?; app.handle_event(event); } if app.should_quit { break; } } Ok(()) } #[cfg(test)] mod tests { use super::*; #[test] fn test_parse_cell_address_basic() { assert_eq!(TuiState::parse_cell_address("A1"), Some((0, 0))); assert_eq!(TuiState::parse_cell_address("B2"), Some((1, 1))); assert_eq!(TuiState::parse_cell_address("Z26"), Some((25, 25))); } #[test] fn test_parse_cell_address_double_letter() { assert_eq!(TuiState::parse_cell_address("AA1"), Some((26, 0))); assert_eq!(TuiState::parse_cell_address("AB5"), Some((27, 4))); assert_eq!(TuiState::parse_cell_address("AZ100"), Some((51, 99))); } #[test] fn test_parse_cell_address_lowercase() { assert_eq!(TuiState::parse_cell_address("a1"), Some((0, 0))); assert_eq!(TuiState::parse_cell_address("b2"), Some((1, 1))); assert_eq!(TuiState::parse_cell_address("aa10"), Some((26, 9))); } #[test] fn test_parse_cell_address_invalid() { assert_eq!(TuiState::parse_cell_address(""), None); assert_eq!(TuiState::parse_cell_address("1"), None); assert_eq!(TuiState::parse_cell_address("A"), None); assert_eq!(TuiState::parse_cell_address("123"), None); // Note: "A1B2" actually parses as AB12, which is valid // Test truly invalid inputs instead assert_eq!(TuiState::parse_cell_address("!@#"), None); assert_eq!(TuiState::parse_cell_address("A-1"), None); } #[test] fn test_parse_cell_address_large_column() { // BA = 2*26 + 1 = 53 (0-indexed: 52) assert_eq!(TuiState::parse_cell_address("BA1"), Some((52, 0))); // ZZ = 26*26 + 26 = 702 (0-indexed: 701) assert_eq!(TuiState::parse_cell_address("ZZ1"), Some((701, 0))); } #[test] fn test_column_to_letter() { // Test helper function for column letters let col_a = 0; let col_z = 25; let col_aa = 26; // Helper to convert column index to letter fn col_to_letter(col: usize) -> String { let mut result = String::new(); let mut n = col + 1; while n > 0 { n -= 1; result.push((b'A' + (n % 26) as u8) as char); n /= 26; } result.chars().rev().collect() } assert_eq!(col_to_letter(col_a), "A"); assert_eq!(col_to_letter(col_z), "Z"); assert_eq!(col_to_letter(col_aa), "AA"); } } xleak-0.2.6/src/workbook.rs000064400000000000000000000544321046102023000137370ustar 00000000000000use anyhow::{Context, Result, anyhow}; use calamine::{Data, Range, Reader, Sheets, Table, open_workbook_auto}; use chrono::{Duration, NaiveDate}; use std::path::Path; pub struct Workbook { sheets: Sheets>, } impl Workbook { pub fn open(path: impl AsRef) -> Result { let sheets = open_workbook_auto(path.as_ref()).context("Failed to open workbook")?; Ok(Self { sheets }) } pub fn sheet_names(&self) -> Vec { self.sheets.sheet_names() } /// Loads all rows eagerly into memory pub fn load_sheet(&mut self, name: &str) -> Result { let range = self .sheets .worksheet_range(name) .with_context(|| format!("Sheet '{name}' not found"))?; // Try to load formulas, but don't fail if they're not available let formula_range = self.sheets.worksheet_formula(name).ok(); Ok(SheetData::from_range_with_formulas(range, formula_range)) } /// Loads only headers; rows fetched on demand pub fn load_sheet_lazy(&mut self, name: &str) -> Result { let range = self .sheets .worksheet_range(name) .with_context(|| format!("Sheet '{name}' not found"))?; // Try to load formulas, but don't fail if they're not available let formula_range = self.sheets.worksheet_formula(name).ok(); Ok(LazySheetData::from_range_with_formulas( range, formula_range, )) } // ===== Table API (Xlsx only) ===== /// Load table metadata from the workbook (Xlsx only) pub fn load_tables(&mut self) -> Result<()> { match &mut self.sheets { Sheets::Xlsx(xlsx) => xlsx .load_tables() .context("Failed to load table metadata") .map_err(|e| anyhow!("{e}")), _ => Err(anyhow!("Tables are only supported in .xlsx files")), } } /// Get all table names in the workbook (Xlsx only) pub fn table_names(&self) -> Result> { match &self.sheets { Sheets::Xlsx(xlsx) => Ok(xlsx.table_names().iter().map(|s| (*s).clone()).collect()), _ => Err(anyhow!("Tables are only supported in .xlsx files")), } } /// Get table names in a specific sheet (Xlsx only) pub fn table_names_in_sheet(&self, sheet_name: &str) -> Result> { match &self.sheets { Sheets::Xlsx(xlsx) => Ok(xlsx .table_names_in_sheet(sheet_name) .iter() .map(|s| (*s).clone()) .collect()), _ => Err(anyhow!("Tables are only supported in .xlsx files")), } } /// Get table data by name (Xlsx only) pub fn table_by_name(&mut self, table_name: &str) -> Result { match &mut self.sheets { Sheets::Xlsx(xlsx) => { let table = xlsx .table_by_name(table_name) .map_err(|e| anyhow!("Table '{table_name}' not found: {e}"))?; Ok(TableData::from_calamine_table(table)) } _ => Err(anyhow!("Tables are only supported in .xlsx files")), } } } /// Eagerly-loaded sheet data (loads all rows immediately) #[derive(Debug, Clone)] pub struct SheetData { pub headers: Vec, pub rows: Vec>, pub formulas: Vec>>, // Parallel structure to rows with formulas pub width: usize, pub height: usize, } /// Lazy-loaded sheet data (loads rows on demand) pub struct LazySheetData { range: Range, formula_range: Option>, pub headers: Vec, pub width: usize, pub height: usize, } impl LazySheetData { /// Extracts headers only; defers row loading pub fn from_range_with_formulas( range: Range, formula_range: Option>, ) -> Self { let (height, width) = range.get_size(); // Only extract headers (first row) - don't load all data yet let headers = if height > 0 { range .rows() .next() .map(|row| row.iter().map(SheetData::cell_to_string).collect()) .unwrap_or_default() } else { vec![] }; Self { range, formula_range, headers, width, height: height.saturating_sub(1), // Don't count header row } } /// Zero-indexed row range; header excluded pub fn get_rows( &self, start: usize, count: usize, ) -> (Vec>, Vec>>) { let end = (start + count).min(self.height); // Extract requested rows (skip header + start rows, take count) let rows: Vec> = self .range .rows() .skip(1 + start) // Skip header + start offset .take(end - start) .map(|row| row.iter().map(SheetData::datatype_to_cellvalue).collect()) .collect(); // Extract formulas for requested rows let formulas = self.get_formulas_for_range(start, end); (rows, formulas) } fn get_formulas_for_range(&self, start: usize, end: usize) -> Vec>> { if let Some(ref formula_range) = self.formula_range { let formula_start = formula_range.start().unwrap_or((0, 0)); let total_height = self.height + 1; // Include header in total // Create formula grid only for requested rows let mut formula_grid: Vec>> = vec![vec![None; self.width]; end - start]; // Populate formulas at their absolute positions for (row_offset, formula_row) in formula_range.rows().enumerate() { let absolute_row = formula_start.0 as usize + row_offset; if absolute_row > 0 && absolute_row <= total_height { let data_row_idx = absolute_row - 1; // Convert to 0-based data row index // Only process if this row is in our requested range if data_row_idx >= start && data_row_idx < end { let result_idx = data_row_idx - start; // Index in result array for (col_offset, formula_str) in formula_row.iter().enumerate() { let absolute_col = formula_start.1 as usize + col_offset; if absolute_col < self.width && !formula_str.is_empty() { formula_grid[result_idx][absolute_col] = Some(formula_str.clone()); } } } } } formula_grid } else { // No formulas available vec![vec![None; self.width]; end - start] } } /// Consumes lazy data and loads all rows into memory #[allow(clippy::wrong_self_convention)] pub fn to_sheet_data(self) -> SheetData { SheetData::from_range_with_formulas(self.range, self.formula_range) } } #[derive(Debug, Clone)] pub enum CellValue { Empty, String(String), Int(i64), Float(f64), Bool(bool), Error(String), DateTime(f64), // Excel datetime as float } impl CellValue { #[allow(dead_code)] pub fn is_empty(&self) -> bool { matches!(self, CellValue::Empty) } #[allow(dead_code)] pub fn is_numeric(&self) -> bool { matches!(self, CellValue::Int(_) | CellValue::Float(_)) } /// Returns unformatted value (for export/clipboard) pub fn to_raw_string(&self) -> String { match self { CellValue::Empty => String::new(), CellValue::String(s) => s.clone(), CellValue::Int(i) => i.to_string(), CellValue::Float(val) => { if val.fract() == 0.0 { format!("{val:.0}") } else { val.to_string() } } CellValue::Bool(b) => b.to_string(), CellValue::Error(e) => format!("#{e}"), CellValue::DateTime(dt) => { let days = dt.floor() as i64; // Excel epoch: December 31, 1899 (Excel serial 0) let epoch = NaiveDate::from_ymd_opt(1899, 12, 31).unwrap(); // Adjust for Excel's 1900 leap year bug (day 60 = Feb 29, 1900 which didn't exist) let adjusted_days = if days > 60 { days - 1 } else { days }; let date = epoch + Duration::days(adjusted_days); let time_fraction = dt.fract(); let total_seconds = (time_fraction * 86400.0).round() as i64; let hours = total_seconds / 3600; let minutes = (total_seconds % 3600) / 60; let seconds = total_seconds % 60; if time_fraction.abs() < 0.0000001 { format!("{}", date.format("%Y-%m-%d")) } else { format!( "{} {:02}:{:02}:{:02}", date.format("%Y-%m-%d"), hours, minutes, seconds ) } } } } } /// Excel Table data #[derive(Debug, Clone)] pub struct TableData { pub name: String, pub sheet_name: String, pub headers: Vec, pub rows: Vec>, } impl TableData { pub fn from_calamine_table(table: Table) -> Self { let name = table.name().to_string(); let sheet_name = table.sheet_name().to_string(); let headers = table.columns().to_vec(); let rows: Vec> = table .data() .rows() .map(|row| row.iter().map(SheetData::datatype_to_cellvalue).collect()) .collect(); Self { name, sheet_name, headers, rows, } } } impl std::fmt::Display for CellValue { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { CellValue::Empty => write!(f, ""), CellValue::String(s) => write!(f, "{s}"), CellValue::Int(i) => { // Format integers with thousand separators let s = i.to_string(); let negative = s.starts_with('-'); let digits: String = s.trim_start_matches('-').chars().collect(); let mut result = String::new(); for (idx, ch) in digits.chars().rev().enumerate() { if idx > 0 && idx % 3 == 0 { result.push(','); } result.push(ch); } if negative { result.push('-'); } write!(f, "{}", result.chars().rev().collect::()) } CellValue::Float(val) => { // Format floats with thousand separators let formatted = if val.fract() == 0.0 { format!("{val:.0}") } else { format!("{val:.2}") }; let parts: Vec<&str> = formatted.split('.').collect(); let int_part = parts[0]; let negative = int_part.starts_with('-'); let digits: String = int_part.trim_start_matches('-').chars().collect(); let mut result = String::new(); for (idx, ch) in digits.chars().rev().enumerate() { if idx > 0 && idx % 3 == 0 { result.push(','); } result.push(ch); } if negative { result.push('-'); } let int_formatted: String = result.chars().rev().collect(); if parts.len() > 1 { write!(f, "{}.{}", int_formatted, parts[1]) } else { write!(f, "{}", int_formatted) } } CellValue::Bool(b) => { // Use lowercase for booleans write!(f, "{}", if *b { "true" } else { "false" }) } CellValue::Error(e) => write!(f, "ERROR: {e}"), CellValue::DateTime(d) => { // Excel dates are days since December 31, 1899 (serial 0) // Excel has a leap year bug where 1900 is incorrectly treated as a leap year // Days > 60 need adjustment for this bug let days = d.floor() as i64; // Excel epoch: December 31, 1899 (Excel serial 0) let excel_epoch = NaiveDate::from_ymd_opt(1899, 12, 31).unwrap(); // Adjust for Excel's 1900 leap year bug (day 60 = Feb 29, 1900 which didn't exist) let adjusted_days = if days > 60 { days - 1 } else { days }; if let Some(date) = excel_epoch.checked_add_signed(Duration::days(adjusted_days)) { // Check if there's a time component let frac = d.fract(); if frac.abs() > 0.000001 { // Has time component let total_seconds = (frac * 86400.0).round() as u32; let hours = total_seconds / 3600; let minutes = (total_seconds % 3600) / 60; let seconds = total_seconds % 60; write!(f, "{} {:02}:{:02}:{:02}", date, hours, minutes, seconds) } else { // Date only write!(f, "{}", date) } } else { write!(f, "Date[{days}]") } } } } } impl SheetData { pub fn from_range_with_formulas( range: Range, formula_range: Option>, ) -> Self { let (height, width) = range.get_size(); // Extract headers from first row if it exists let headers = if height > 0 { range .rows() .next() .map(|row| row.iter().map(Self::cell_to_string).collect()) .unwrap_or_default() } else { vec![] }; // Extract data rows (skip first row as headers) let rows: Vec> = range .rows() .skip(1) .map(|row| row.iter().map(Self::datatype_to_cellvalue).collect()) .collect(); // Extract formulas if available // Note: Formula range may be sparse (only cells with formulas) and may have different start position let formulas: Vec>> = if let Some(formula_range) = formula_range { let formula_start = formula_range.start().unwrap_or((0, 0)); // Create empty formula structure matching data dimensions let mut formula_grid: Vec>> = vec![vec![None; width]; height]; // Populate formulas at their absolute positions for (row_offset, formula_row) in formula_range.rows().enumerate() { let absolute_row = formula_start.0 as usize + row_offset; if absolute_row > 0 && absolute_row <= height { // Skip header row (row 0) let data_row_idx = absolute_row - 1; // Convert to 0-based data row index for (col_offset, formula_str) in formula_row.iter().enumerate() { let absolute_col = formula_start.1 as usize + col_offset; if absolute_col < width && !formula_str.is_empty() { formula_grid[data_row_idx][absolute_col] = Some(formula_str.clone()); } } } } // Return formula grid matching data rows // We already handled header row when populating, so just take the data rows formula_grid .into_iter() .take(height.saturating_sub(1)) .collect() } else { // No formulas available, create empty parallel structure vec![vec![None; width]; height.saturating_sub(1)] }; Self { headers, rows, formulas, width, height: height.saturating_sub(1), // Don't count header row } } fn cell_to_string(cell: &Data) -> String { match cell { Data::Empty => String::new(), Data::String(s) => s.clone(), Data::Int(i) => i.to_string(), Data::Float(f) => { if f.fract() == 0.0 { format!("{f:.0}") } else { f.to_string() } } Data::Bool(b) => b.to_string(), Data::Error(e) => format!("ERROR: {e:?}"), Data::DateTime(d) => format!("Date({})", d.as_f64()), Data::DateTimeIso(s) => s.clone(), Data::DurationIso(s) => s.clone(), } } fn datatype_to_cellvalue(cell: &Data) -> CellValue { match cell { Data::Empty => CellValue::Empty, Data::String(s) => CellValue::String(s.clone()), Data::Int(i) => CellValue::Int(*i), Data::Float(f) => CellValue::Float(*f), Data::Bool(b) => CellValue::Bool(*b), Data::Error(e) => CellValue::Error(format!("{e:?}")), Data::DateTime(d) => CellValue::DateTime(d.as_f64()), Data::DateTimeIso(s) => CellValue::String(s.clone()), Data::DurationIso(s) => CellValue::String(s.clone()), } } } #[cfg(test)] mod tests { use super::*; #[test] fn test_cellvalue_display_integer() { let val = CellValue::Int(1234567); assert_eq!(val.to_string(), "1,234,567"); } #[test] fn test_cellvalue_display_negative_integer() { let val = CellValue::Int(-1234567); assert_eq!(val.to_string(), "-1,234,567"); } #[test] fn test_cellvalue_display_float() { let val = CellValue::Float(1234567.89); assert_eq!(val.to_string(), "1,234,567.89"); } #[test] fn test_cellvalue_display_float_whole_number() { let val = CellValue::Float(1000.0); assert_eq!(val.to_string(), "1,000"); } #[test] fn test_cellvalue_display_boolean() { assert_eq!(CellValue::Bool(true).to_string(), "true"); assert_eq!(CellValue::Bool(false).to_string(), "false"); } #[test] fn test_cellvalue_display_string() { let val = CellValue::String("Hello, World!".to_string()); assert_eq!(val.to_string(), "Hello, World!"); } #[test] fn test_cellvalue_display_empty() { let val = CellValue::Empty; assert_eq!(val.to_string(), ""); } #[test] fn test_cellvalue_display_error() { let val = CellValue::Error("DIV/0!".to_string()); assert_eq!(val.to_string(), "ERROR: DIV/0!"); } #[test] fn test_cellvalue_to_raw_string_integer() { let val = CellValue::Int(1234567); assert_eq!(val.to_raw_string(), "1234567"); } #[test] fn test_cellvalue_to_raw_string_float() { let val = CellValue::Float(123.45); assert_eq!(val.to_raw_string(), "123.45"); } #[test] fn test_cellvalue_to_raw_string_large_float() { // Regression: large whole-number floats were exported with thousands separators // (e.g. "18,441,600,422") making CSV/text output unparseable as numbers (#34) let val = CellValue::Float(18_441_600_422.0); assert_eq!(val.to_raw_string(), "18441600422"); // Display (TUI) formatting should still use separators assert_eq!(val.to_string(), "18,441,600,422"); } #[test] fn test_cellvalue_to_raw_string_large_int() { let val = CellValue::Int(18_441_600_422); assert_eq!(val.to_raw_string(), "18441600422"); assert_eq!(val.to_string(), "18,441,600,422"); } #[test] fn test_cellvalue_is_empty() { assert!(CellValue::Empty.is_empty()); assert!(!CellValue::Int(0).is_empty()); assert!(!CellValue::String("".to_string()).is_empty()); } #[test] fn test_cellvalue_is_numeric() { assert!(CellValue::Int(123).is_numeric()); assert!(CellValue::Float(123.45).is_numeric()); assert!(!CellValue::String("123".to_string()).is_numeric()); assert!(!CellValue::Empty.is_numeric()); } #[test] fn test_datetime_display() { // Excel date: January 1, 1900 is day 1 let val = CellValue::DateTime(1.0); let display = val.to_string(); // Should contain a date in YYYY-MM-DD format assert!(display.contains("1900") || display.contains("1899")); } #[test] fn test_datetime_with_time() { // Excel datetime with time component // Day 1 + 0.5 = 12:00:00 on Jan 1, 1900 let val = CellValue::DateTime(1.5); let display = val.to_string(); // Should contain both date and time assert!(display.contains(":")); assert!(display.len() > 10); // Date + time is longer than just date } #[test] fn test_workbook_open_real_file() { // Test with actual test file if it exists if let Ok(wb) = Workbook::open("tests/fixtures/test_data.xlsx") { let sheet_names = wb.sheet_names(); assert!(!sheet_names.is_empty(), "Should have at least one sheet"); } // If file doesn't exist, test passes (integration test needs real file) } #[test] fn test_sheet_data_structure() { // Test SheetData structure can be created let sheet = SheetData { headers: vec!["Name".to_string(), "Age".to_string()], rows: vec![ vec![CellValue::String("Alice".to_string()), CellValue::Int(30)], vec![CellValue::String("Bob".to_string()), CellValue::Int(25)], ], formulas: vec![vec![None, None], vec![None, None]], width: 2, height: 2, }; assert_eq!(sheet.width, 2); assert_eq!(sheet.height, 2); assert_eq!(sheet.headers.len(), 2); assert_eq!(sheet.rows.len(), 2); } } xleak-0.2.6/tests/fixtures/README.md000064400000000000000000000074101046102023000152310ustar 00000000000000# Test Fixtures This directory contains test data and generator scripts for xleak. ## Test files ### Core testing - **test_comprehensive.xlsx** - Primary test file with all data types, formulas, international characters, multi-line cells, date edge cases - **DataTypes** sheet - All basic types (strings, numbers, dates, booleans, errors, empty cells) - **Formulas** sheet - SUM, AVERAGE, MIN, MAX, IF, ROUND, etc. - **Internationalization** sheet - UTF-8 characters: German (ä, ö, ü, ß), Turkish (İ, ı, ş), Chinese (简体中文), Japanese (日本語) (Issue #11) - **MultilineCells** sheet - Cells with 1, 5, 10, 20, 50, 100 lines (Issue #16) - **DateEdgeCases** sheet - 1900 leap year bug, Feb 29 1900, modern dates, Issue #25 test cases - **EdgeCases** sheet - Long strings, whitespace variations, special characters ### Performance & advanced - **test_large.xlsx** - 10,000 rows for lazy loading and performance testing - **LargeData** sheet - 10,000 rows × 12 columns - **SmallData** sheet - 50 rows for multi-sheet navigation testing - **test_tables.xlsx** - Excel Table structures (Issue #18) - **ProductsTable** - Products table with 10 items - **SalesTable** - Sales table with order data - **EmployeesTable** - Employees table with 15 records - **UnformattedData** - Regular range (non-table) for comparison ## Generator scripts - **generate_all_tests.py** - Master script to regenerate all test files - **generate_test_comprehensive.py** - Creates test_comprehensive.xlsx - **generate_test_large.py** - Creates test_large.xlsx (configurable row count) - **generate_test_tables.py** - Creates test_tables.xlsx ## Usage ### Generate all test files ```bash # From project root with .venv activated source .venv/bin/activate cd tests/fixtures python generate_all_tests.py ``` ### Generate individual files ```bash # Comprehensive test file python generate_test_comprehensive.py # Large dataset (default 10,000 rows) python generate_test_large.py # Custom size large dataset python generate_test_large.py 50000 # Excel tables python generate_test_tables.py ``` ### Important: formula caching After generating test_comprehensive.xlsx, **open it in Excel and save** to cache formula results. Formulas will show as `#NAME?` in xleak until Excel calculates them. ## Testing with xleak ```bash # Comprehensive test (interactive TUI) ./target/release/xleak tests/fixtures/test_comprehensive.xlsx -i # View specific sheets ./target/release/xleak tests/fixtures/test_comprehensive.xlsx --sheet DateEdgeCases ./target/release/xleak tests/fixtures/test_comprehensive.xlsx --sheet MultilineCells # Test large file with lazy loading ./target/release/xleak tests/fixtures/test_large.xlsx -i ./target/release/xleak tests/fixtures/test_large.xlsx --sheet LargeData -n 20 # Test Excel tables ./target/release/xleak tests/fixtures/test_tables.xlsx --list-tables ./target/release/xleak tests/fixtures/test_tables.xlsx --table Products -i # Test date fix (Issue #25) ./target/release/xleak tests/fixtures/test_comprehensive.xlsx --sheet DateEdgeCases # Row 9-10 should show 2025-11-19 (not 2025-11-18) ``` ## Deprecated files The following files have been consolidated into the new test structure and moved to `deprecated/`: - test_data.xlsx → merged into test_comprehensive.xlsx - comprehensive_test.xlsx → replaced by test_comprehensive.xlsx - multiline_test.xlsx → merged as MultilineCells sheet - persons.xlsx → merged into DateEdgeCases sheet - test_copy.xlsx → merged into EdgeCases sheet - large_test_10000.xlsx → replaced by test_large.xlsx Old generator scripts: - generate_test_data.py → replaced by generate_test_comprehensive.py - generate_large_test_data.py → replaced by generate_test_large.py - create_comprehensive_test.py → replaced by generate_test_comprehensive.py xleak-0.2.6/tests/fixtures/__pycache__/generate_test_comprehensive.cpython-312.pyc000064400000000000000000000344401046102023000264500ustar 00000000000000 j )pdZddlZddlmZmZddlmZdZdZdZdZ d Z d Z d Z e d k(re yy) zJGenerate comprehensive test Excel file with all data types and edge cases.N)datetime timedelta)get_column_letterc|jd}|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd |jgd |jgd d |d _|jgd|jgd|jgd|jgdd|d_|jgdd|d_|S)z!Create sheet with all data types. DataTypesTypeValue Description)Stringz Hello Worldz Simple string)r zText with spaces zString with trailing spaces)r 123456zNumber as string)r z=TEXTzString that looks like formula)Integer*zPositive integer)rizNegative integer)Floatgn! @zDecimal number)rgvHBzScientific notation) Percentageg?zPercentage (75%)z0%B9)BooleanTz TRUE value)rFz FALSE value)EmptyNz Empty cell)Currencyg ףp=J@z US Dollarz $#,##0.00B13)rgQEJ@Eurou €#,##0.00B14) create_sheetappend number_formatwbwss W/Users/greenwbm/Dropbox/devel/tools/xleak/tests/fixtures/generate_test_comprehensive.pycreate_data_types_sheetr s  %BII./II89IINOII67IICDII12II34II23II67II67!BtHII-.II/0II+,II01)BuIII+,+BuI IcV|jd}|jgd|jgd|jgd|jgd|jgd|jgdgd}|D]\}}}}|j||||g|S) z#Create sheet with various formulas.Formulas)z Formula TypeFormulaResultr )Data Nz Sample values)r&NN)r&NN)r&(NN)r&2NN) )SUMz SUM(B2:B6)z =SUM(B2:B6)z Sum of range)AVERAGEzAVERAGE(B2:B6)z=AVERAGE(B2:B6)zAverage of range)MINz MIN(B2:B6)z =MIN(B2:B6)z Minimum value)MAXz MAX(B2:B6)z =MAX(B2:B6)z Maximum value)COUNTz COUNT(B2:B6)z =COUNT(B2:B6)z Count numbers)IFzIF(B2>15,"High","Low")z=IF(B2>15,"High","Low") Conditional)ANDzAND(B2>5,B2<15)z=AND(B2>5,B2<15)z Logical AND)ORzOR(B2>100,B2<5)z=OR(B2>100,B2<5)z Logical OR)ROUNDzROUND(3.14159,2)z=ROUND(3.14159,2)zRound to 2 decimals)ABSzABS(-42)z =ABS(-42)zAbsolute value)SQRTz SQRT(144)z =SQRT(144)z Square rootrr)rrformulas formula_type expr_textformula descriptions rcreate_formulas_sheetr>,s  $BIIBCII12II&'II&'II&'II&' H:B5 i+ <G[AB:B Ir!cb|jd}|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd |jgd |jgd |jgd |jgd |jgd|jgd|jgd|S)z7Create sheet with international characters (issue #11).Internationalization)LanguageText Charactersr )GermanuGrößeuö, ßzUmlauts and eszett)rDuÄpfel und ÜbunguÄ, Üz More umlauts)rDu§123 Paragraph§z Section sign)Turkishu İstanbuluİzDotted capital I)rFuışıkuı, şzDotless i, cedilla)rFu çalışmauç, şzTurkish characters)Chinese 简体中文rHzSimplified Chinese)rG 表格文件rIz Table file)rG 测试数据rJz Test data)Japanese 日本語rLzJapanese language)rK テストrMzTest (katakana))MixeduCafé résuméézFrench accents)rNu МоскваCyrilliczRussian (Moscow))rNunaïveï Diaeresisr8rs r!create_internationalization_sheetrSRs / 0BII?@IICDIIGHIIABII@AIIDEIIGHIIOPIIGHIIFGIIIJIIGHIIABIIGHII45 Ir!c|jd}|jgd|jgddjtdDcgc] }d|dz c}}|jd|dgdjtd Dcgc] }d|dz c}}|jd |d gdjtd Dcgc] }d|dz c}}|jd |d gdjtd Dcgc] }d|dz c}}|jd |dgdjtdDcgc] }d|dz c}}|jd|dgd}|jd|dgd} |jd| dg|Scc}wcc}wcc}wcc}wcc}w)z/Create sheet with multi-line cells (issue #16).MultilineCells)z Line CountContentr )z Single linez No newlines zLine rWzShort multi-liner'zMedium multi-liner(zIssue #16 test caser+zLarge multi-linedzVery large multi-lineuLLine 1: English Line 2: Deutsch (ä, ö, ü) Line 3: 中文 Line 4: TürkçezMixed languagesz2Line 1 Line 3 (empty line 2) Line 6 (empty 4-5)zContains empty lines)rrjoinrange) rrilines_5lines_10lines_20lines_50 lines_100 multi_intl with_emptys rcreate_multiline_cells_sheetrgss ) *BII67II/0iia91519:GIIq'-./yyr;AE!A#-;IIIsI678cJIIq*/01KJIIq*456 I7:<<<>sF0F5F:F?Gc P|jd}|jgd|jdtdddddg|jdtddddd g|jd tdd d d dg|jdtdddddg|jdtdddddg|jdtdd dddg|jdtdddddg|jdtdd dd!d"g|jd#td$d%d&d%d'd(d)d*g|jd+td$d%d&d%d'd,d)d-g|jd.tdd/d0d1d2d3d)d4g|jd5tdd/d0d3d3d3d)d6g|jd7tdd/d0d8d d d)d9gtd |jdzD]6}|j |dj  d:|j |d_8|S);z.Create sheet with date edge cases (issue #25). DateEdgeCases)r DateSerialNotesz First dayilrWzExcel serial 1z Late JanuaryzBefore leap bugzDay before fake leap;z Serial 59zDay after fake leap=zSerial 61, leap bug appliesY2Kiiz Year 2000z Real leap dayiz2000 was a leap yearz Recent dateiiz 2024 startToday i=z Current datezIssue #25 testi r(NzDate from screenshotzIssue #25 test 2zSecond row from screenshotz Date + Timer\r)rzWith time componentMidnightzTime = 00:00:00zJust before midnightzTime = 23:59:590)rrrr^max_rowcellvaluer)rrrows rcreate_date_edge_cases_sheetrs#  )BII89II{HT1a0!5EFGII~xa4b:KLMII%xa'TUVII}htQ2E<HIIIwr1-unEFII$BB!CTKabcII!8D"b"b"#EtMijkII}htQBA>F[\]IIz8D!RAq94ARSTII%xaRR'H$PabcQ Q' 773? ,,/BGGCO )( Ir!c,|jd}|jgdd}|jd|dgdjdgdz}|jd |d g|jgd |jgd |jgd |jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd|jgd|S)z%Create sheet with various edge cases. EdgeCasesrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz Long Stringz1000 characters WordzLong w/ Spacesz 200 words)z Leading Spacez Leadingz3 leading spaces)zTrailing Spacez Trailing z3 trailing spaces)z Tab Characterz Before Afterz Contains tab)Newlinez Line1 Line2zContains newline)zMultiple Spacesz Word WordzMultiple internal spaces)z Large Numberla$z Large integer)z Small Decimalg& .>zVery small decimal)Zerorz Zero value)z Negative Zerogz Negative zero)QuoteszHe said "Hello"zContains quotes) ApostrophezDon'tzContains apostrophe)Commaz Last, FirstzContains comma) SemicolonzA;B;CzContains semicolons)z Number Stringz 42 zNumber with spaces)zDecimal Stringz3.14zDecimal as string)z Date Stringz 2024-01-01zDate as string)rrr])rrlong_strlong_with_spacess rcreate_edge_cases_sheetrsC  %BII./HII}h(9:;xx3/II!1;?@IIABIIDEII@AII=>IIMNII>?IIBCII'(II67II>?II<=II89II;<II?@II=>II=> Ir!cntdtj}|j|jtdt |tdt |tdt|tdt|tdt|tdt|d}|j|td |td |jD]&}||}td |d |jd z d(tdtdy)z%Generate the comprehensive test file.z%Generating test_comprehensive.xlsx...z Creating DataTypes sheet...z Creating Formulas sheet...z( Creating Internationalization sheet...z" Creating MultilineCells sheet...z! Creating DateEdgeCases sheet...z Creating EdgeCases sheet...ztest_comprehensive.xlsxu ✓ Created z Sheets:z - z: rWz data rowsuQ ⚠️ IMPORTANT: Open this file in Excel and save it to cache formula results!z< Formulas will show as #NAME? until Excel calculates them.N)printopenpyxlWorkbookremoveactiver r>rSrgrrsave sheetnamesr)r output_pathsheetrs rmainrs 12    BIIbii )*B ()" 45%b) ./ $ -. $ )*B,KGGK N;- () + Y UG2bjj1n-Z89 ^_ HIr!__main__)__doc__rrropenpyxl.utilsrr r>rSrgrrr__name__r!rrsPP(,"H$LB&P"H'R&JP zFr!xleak-0.2.6/tests/fixtures/generate_all_tests.py000075500000000000000000000053471046102023000202020ustar 00000000000000#!/usr/bin/env python3 """ Master script to generate all test files for xleak. Run: python3 generate_all_tests.py """ import subprocess import sys import os def check_dependencies(): """Check if openpyxl is installed.""" try: import openpyxl print("✓ openpyxl is installed\n") return True except ImportError: print("✗ openpyxl is not installed") print(" Install with: pip install openpyxl") return False def run_generator(script_name, description): """Run a generator script and report status.""" print(f"{'='*60}") print(f"Running {script_name}...") print(f"{'='*60}\n") try: result = subprocess.run( [sys.executable, script_name], cwd=os.path.dirname(os.path.abspath(__file__)), check=True, capture_output=False ) print(f"\n✓ {description} generated successfully\n") return True except subprocess.CalledProcessError as e: print(f"\n✗ Failed to generate {description}") print(f" Error: {e}") return False def main(): """Generate all test files.""" print("="*60) print("xleak Test File Generator") print("="*60) print() # Check dependencies if not check_dependencies(): sys.exit(1) # Track success all_success = True # Generate comprehensive test file all_success &= run_generator( "generate_test_comprehensive.py", "test_comprehensive.xlsx" ) # Generate large test file all_success &= run_generator( "generate_test_large.py", "test_large.xlsx" ) # Generate Excel tables test file all_success &= run_generator( "generate_test_tables.py", "test_tables.xlsx" ) # Summary print("="*60) if all_success: print("✓ All test files generated successfully!") print("="*60) print() print("Generated files:") print(" 1. test_comprehensive.xlsx - All data types, formulas, edge cases") print(" 2. test_large.xlsx - 10,000 rows for performance testing") print(" 3. test_tables.xlsx - Excel Table structures") print() print("⚠️ IMPORTANT:") print(" Open test_comprehensive.xlsx in Excel and save it to cache formula results!") print() print("Test with:") print(" ./target/release/xleak tests/fixtures/test_comprehensive.xlsx -i") print(" ./target/release/xleak tests/fixtures/test_large.xlsx -i") print(" ./target/release/xleak tests/fixtures/test_tables.xlsx --list-tables") else: print("✗ Some test files failed to generate") print("="*60) sys.exit(1) if __name__ == "__main__": main() xleak-0.2.6/tests/fixtures/generate_test_comprehensive.py000075500000000000000000000244401046102023000221110ustar 00000000000000#!/usr/bin/env python3 """Generate comprehensive test Excel file with all data types and edge cases.""" import openpyxl from datetime import datetime, timedelta from openpyxl.utils import get_column_letter def create_data_types_sheet(wb): """Create sheet with all data types.""" ws = wb.create_sheet("DataTypes") # Headers ws.append(["Type", "Value", "Description"]) # Strings ws.append(["String", "Hello World", "Simple string"]) ws.append(["String", "Text with spaces ", "String with trailing spaces"]) ws.append(["String", "123456", "Number as string"]) ws.append(["String", "=TEXT", "String that looks like formula"]) # Numbers ws.append(["Integer", 42, "Positive integer"]) ws.append(["Integer", -273, "Negative integer"]) ws.append(["Float", 3.14159, "Decimal number"]) ws.append(["Float", 2.5e10, "Scientific notation"]) ws.append(["Percentage", 0.75, "Percentage (75%)"]) ws['B9'].number_format = '0%' # Booleans ws.append(["Boolean", True, "TRUE value"]) ws.append(["Boolean", False, "FALSE value"]) # Empty ws.append(["Empty", None, "Empty cell"]) # Currency ws.append(["Currency", 1234.56, "US Dollar"]) ws['B13'].number_format = '$#,##0.00' ws.append(["Currency", 9876.54, "Euro"]) ws['B14'].number_format = '€#,##0.00' return ws def create_formulas_sheet(wb): """Create sheet with various formulas.""" ws = wb.create_sheet("Formulas") # Headers ws.append(["Formula Type", "Formula", "Result", "Description"]) # Sample data used by the formulas below ws.append(["Data", 10, None, "Sample values"]) ws.append(["Data", 20, None, None]) ws.append(["Data", 30, None, None]) ws.append(["Data", 40, None, None]) ws.append(["Data", 50, None, None]) # Each row: Formula column is the expression as display text (quotePrefix so # Excel treats it as a string, not a formula); Result column holds the actual # Excel formula so its computed value is visible once the file is saved. # Formula column: plain text label (no leading = so openpyxl stores it as a string) # Result column: the actual Excel formula whose computed value xleak displays formulas = [ ("SUM", "SUM(B2:B6)", "=SUM(B2:B6)", "Sum of range"), ("AVERAGE", "AVERAGE(B2:B6)", "=AVERAGE(B2:B6)", "Average of range"), ("MIN", "MIN(B2:B6)", "=MIN(B2:B6)", "Minimum value"), ("MAX", "MAX(B2:B6)", "=MAX(B2:B6)", "Maximum value"), ("COUNT", "COUNT(B2:B6)", "=COUNT(B2:B6)", "Count numbers"), ("IF", 'IF(B2>15,"High","Low")', '=IF(B2>15,"High","Low")',"Conditional"), ("AND", "AND(B2>5,B2<15)", "=AND(B2>5,B2<15)", "Logical AND"), ("OR", "OR(B2>100,B2<5)", "=OR(B2>100,B2<5)", "Logical OR"), ("ROUND", "ROUND(3.14159,2)", "=ROUND(3.14159,2)", "Round to 2 decimals"), ("ABS", "ABS(-42)", "=ABS(-42)", "Absolute value"), ("SQRT", "SQRT(144)", "=SQRT(144)", "Square root"), ] for formula_type, expr_text, formula, description in formulas: ws.append([formula_type, expr_text, formula, description]) return ws def create_internationalization_sheet(wb): """Create sheet with international characters (issue #11).""" ws = wb.create_sheet("Internationalization") # Headers ws.append(["Language", "Text", "Characters", "Description"]) # German ws.append(["German", "Größe", "ö, ß", "Umlauts and eszett"]) ws.append(["German", "Äpfel und Übung", "Ä, Ü", "More umlauts"]) ws.append(["German", "§123 Paragraph", "§", "Section sign"]) # Turkish ws.append(["Turkish", "İstanbul", "İ", "Dotted capital I"]) ws.append(["Turkish", "ışık", "ı, ş", "Dotless i, cedilla"]) ws.append(["Turkish", "çalışma", "ç, ş", "Turkish characters"]) # Chinese (Simplified) ws.append(["Chinese", "简体中文", "简体中文", "Simplified Chinese"]) ws.append(["Chinese", "表格文件", "表格文件", "Table file"]) ws.append(["Chinese", "测试数据", "测试数据", "Test data"]) # Japanese ws.append(["Japanese", "日本語", "日本語", "Japanese language"]) ws.append(["Japanese", "テスト", "テスト", "Test (katakana)"]) # Mixed ws.append(["Mixed", "Café résumé", "é", "French accents"]) ws.append(["Mixed", "Москва", "Cyrillic", "Russian (Moscow)"]) ws.append(["Mixed", "naïve", "ï", "Diaeresis"]) return ws def create_multiline_cells_sheet(wb): """Create sheet with multi-line cells (issue #16).""" ws = wb.create_sheet("MultilineCells") # Headers ws.append(["Line Count", "Content", "Description"]) # 1 line ws.append([1, "Single line", "No newlines"]) # 5 lines lines_5 = "\n".join([f"Line {i+1}" for i in range(5)]) ws.append([5, lines_5, "Short multi-line"]) # 10 lines lines_10 = "\n".join([f"Line {i+1}" for i in range(10)]) ws.append([10, lines_10, "Medium multi-line"]) # 20 lines (original issue #16 case) lines_20 = "\n".join([f"Line {i+1}" for i in range(20)]) ws.append([20, lines_20, "Issue #16 test case"]) # 50 lines lines_50 = "\n".join([f"Line {i+1}" for i in range(50)]) ws.append([50, lines_50, "Large multi-line"]) # 100 lines lines_100 = "\n".join([f"Line {i+1}" for i in range(100)]) ws.append([100, lines_100, "Very large multi-line"]) # Multi-line with international characters multi_intl = "Line 1: English\nLine 2: Deutsch (ä, ö, ü)\nLine 3: 中文\nLine 4: Türkçe" ws.append([4, multi_intl, "Mixed languages"]) # Multi-line with empty lines with_empty = "Line 1\n\nLine 3 (empty line 2)\n\n\nLine 6 (empty 4-5)" ws.append([6, with_empty, "Contains empty lines"]) return ws def create_date_edge_cases_sheet(wb): """Create sheet with date edge cases (issue #25).""" ws = wb.create_sheet("DateEdgeCases") # Headers ws.append(["Description", "Date", "Serial", "Notes"]) # 1900 era dates (leap year bug zone) ws.append(["First day", datetime(1900, 1, 1), 1, "Excel serial 1"]) ws.append(["Late January", datetime(1900, 1, 31), 31, "Before leap bug"]) ws.append(["Day before fake leap", datetime(1900, 2, 28), 59, "Serial 59"]) # Note: Excel allows 1900-02-29 (serial 60) but Python doesn't, so we skip it ws.append(["Day after fake leap", datetime(1900, 3, 1), 61, "Serial 61, leap bug applies"]) # Modern dates ws.append(["Y2K", datetime(2000, 1, 1), 36526, "Year 2000"]) ws.append(["Real leap day", datetime(2000, 2, 29), 36585, "2000 was a leap year"]) ws.append(["Recent date", datetime(2024, 1, 1), 45292, "2024 start"]) ws.append(["Today", datetime(2024, 12, 3), 45629, "Current date"]) # Issue #25 specific dates ws.append(["Issue #25 test", datetime(2025, 11, 19, 11, 18, 20), None, "Date from screenshot"]) ws.append(["Issue #25 test 2", datetime(2025, 11, 19, 11, 18, 22), None, "Second row from screenshot"]) # Date with time ws.append(["Date + Time", datetime(2024, 6, 15, 14, 30, 0), None, "With time component"]) ws.append(["Midnight", datetime(2024, 6, 15, 0, 0, 0), None, "Time = 00:00:00"]) ws.append(["Just before midnight", datetime(2024, 6, 15, 23, 59, 59), None, "Time = 23:59:59"]) # Format serial column as numbers for row in range(2, ws.max_row + 1): if ws.cell(row, 3).value is not None: ws.cell(row, 3).number_format = '0' return ws def create_edge_cases_sheet(wb): """Create sheet with various edge cases.""" ws = wb.create_sheet("EdgeCases") # Headers ws.append(["Type", "Value", "Description"]) # Very long string long_str = "A" * 1000 ws.append(["Long String", long_str, "1000 characters"]) # Very long string with spaces long_with_spaces = " ".join(["Word"] * 200) ws.append(["Long w/ Spaces", long_with_spaces, "200 words"]) # Whitespace variations ws.append(["Leading Space", " Leading", "3 leading spaces"]) ws.append(["Trailing Space", "Trailing ", "3 trailing spaces"]) ws.append(["Tab Character", "Before\tAfter", "Contains tab"]) ws.append(["Newline", "Line1\nLine2", "Contains newline"]) ws.append(["Multiple Spaces", "Word Word", "Multiple internal spaces"]) # Number edge cases ws.append(["Large Number", 9999999999999, "Large integer"]) ws.append(["Small Decimal", 0.000000001, "Very small decimal"]) ws.append(["Zero", 0, "Zero value"]) ws.append(["Negative Zero", -0.0, "Negative zero"]) # Special strings ws.append(["Quotes", 'He said "Hello"', "Contains quotes"]) ws.append(["Apostrophe", "Don't", "Contains apostrophe"]) ws.append(["Comma", "Last, First", "Contains comma"]) ws.append(["Semicolon", "A;B;C", "Contains semicolons"]) # Mixed content ws.append(["Number String", " 42 ", "Number with spaces"]) ws.append(["Decimal String", "3.14", "Decimal as string"]) ws.append(["Date String", "2024-01-01", "Date as string"]) return ws def main(): """Generate the comprehensive test file.""" print("Generating test_comprehensive.xlsx...") # Create workbook wb = openpyxl.Workbook() wb.remove(wb.active) # Remove default sheet # Create all sheets print(" Creating DataTypes sheet...") create_data_types_sheet(wb) print(" Creating Formulas sheet...") create_formulas_sheet(wb) print(" Creating Internationalization sheet...") create_internationalization_sheet(wb) print(" Creating MultilineCells sheet...") create_multiline_cells_sheet(wb) print(" Creating DateEdgeCases sheet...") create_date_edge_cases_sheet(wb) print(" Creating EdgeCases sheet...") create_edge_cases_sheet(wb) # Save file output_path = "test_comprehensive.xlsx" wb.save(output_path) print(f"\n✓ Created {output_path}") print("\nSheets:") for sheet in wb.sheetnames: ws = wb[sheet] print(f" - {sheet}: {ws.max_row - 1} data rows") print("\n⚠️ IMPORTANT: Open this file in Excel and save it to cache formula results!") print(" Formulas will show as #NAME? until Excel calculates them.") if __name__ == "__main__": main() xleak-0.2.6/tests/fixtures/generate_test_large.py000075500000000000000000000064651046102023000203430ustar 00000000000000#!/usr/bin/env python3 """ Generate large Excel file for testing xleak's lazy loading performance. Run: python3 generate_test_large.py [num_rows] Default: 10,000 rows """ try: from openpyxl import Workbook import random import time except ImportError: print("Please install openpyxl: pip install openpyxl") exit(1) def create_large_file(num_rows=10000): """Create large test file with specified number of rows.""" print(f"📊 Generating test_large.xlsx with {num_rows:,} rows...") start_time = time.time() wb = Workbook() ws = wb.active ws.title = "LargeData" # Headers headers = ["ID", "Name", "Email", "Age", "City", "Country", "Salary", "Department", "Status", "JoinDate", "Score", "Rating"] ws.append(headers) # Sample data pools first_names = ["John", "Jane", "Michael", "Sarah", "David", "Emma", "Chris", "Lisa"] last_names = ["Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis"] cities = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix", "Philadelphia"] countries = ["USA", "Canada", "UK", "Germany", "France", "Japan", "Australia"] departments = ["Engineering", "Sales", "Marketing", "HR", "Finance", "Operations"] statuses = ["Active", "Inactive", "Pending"] print("⏳ Generating rows (this may take a minute)...") for i in range(1, num_rows + 1): if i % 1000 == 0: print(f" Generated {i:,} rows...") row_data = [ i, # ID f"{random.choice(first_names)} {random.choice(last_names)}", # Name f"user{i}@example.com", # Email random.randint(22, 65), # Age random.choice(cities), # City random.choice(countries), # Country random.randint(40000, 150000), # Salary random.choice(departments), # Department random.choice(statuses), # Status f"2020-{random.randint(1,12):02d}-{random.randint(1,28):02d}", # JoinDate round(random.uniform(60, 100), 1), # Score round(random.uniform(1, 5), 1), # Rating ] ws.append(row_data) # Create a smaller sheet for comparison and multi-sheet testing ws2 = wb.create_sheet("SmallData") ws2.append(["Product", "Price", "Stock"]) for i in range(50): ws2.append([f"Product {i+1}", round(random.uniform(10, 500), 2), random.randint(0, 1000)]) filename = "test_large.xlsx" print(f"💾 Saving {filename}...") wb.save(filename) elapsed = time.time() - start_time print(f"\n✓ Created {filename}") print(f" - LargeData sheet: {num_rows:,} rows × {len(headers)} columns") print(f" - SmallData sheet: 50 rows × 3 columns") print(f" - Generation time: {elapsed:.1f} seconds") print() print("Test with:") print(f" ./target/release/xleak {filename} -i") print(f" ./target/release/xleak {filename} --sheet LargeData -n 20") if __name__ == "__main__": import sys # Allow custom row count num_rows = 10000 if len(sys.argv) > 1: try: num_rows = int(sys.argv[1]) except ValueError: print("Usage: python3 generate_test_large.py [num_rows]") print("Example: python3 generate_test_large.py 50000") sys.exit(1) create_large_file(num_rows) xleak-0.2.6/tests/fixtures/generate_test_tables.py000075500000000000000000000136151046102023000205160ustar 00000000000000#!/usr/bin/env python3 """ Generate Excel file with Excel Table structures for testing (issue #18). Run: python3 generate_test_tables.py """ try: from openpyxl import Workbook from openpyxl.worksheet.table import Table, TableStyleInfo import random except ImportError: print("Please install openpyxl: pip install openpyxl") exit(1) def create_products_table(wb): """Create sheet with Products table.""" ws = wb.create_sheet("ProductsTable") # Add data data = [ ["ProductID", "ProductName", "Category", "Price", "Stock", "Supplier"], [1001, "Wireless Mouse", "Electronics", 24.99, 150, "TechCorp"], [1002, "USB-C Cable", "Accessories", 9.99, 500, "CableWorld"], [1003, "Laptop Stand", "Accessories", 34.99, 75, "OfficePlus"], [1004, "Mechanical Keyboard", "Electronics", 89.99, 45, "KeyMasters"], [1005, "Webcam HD", "Electronics", 59.99, 120, "TechCorp"], [1006, "Phone Charger", "Accessories", 19.99, 300, "ChargeIt"], [1007, "Monitor Arm", "Office", 79.99, 30, "OfficePlus"], [1008, "Desk Lamp LED", "Office", 44.99, 85, "LightWorks"], [1009, "Cable Organizer", "Accessories", 12.99, 200, "OfficePlus"], [1010, "USB Hub", "Electronics", 29.99, 160, "TechCorp"], ] for row in data: ws.append(row) # Create table tab = Table(displayName="Products", ref="A1:F11") # Add a table style style = TableStyleInfo( name="TableStyleMedium9", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=False ) tab.tableStyleInfo = style # Add the table to the worksheet ws.add_table(tab) return ws def create_sales_table(wb): """Create sheet with Sales table including calculated column.""" ws = wb.create_sheet("SalesTable") # Add data data = [ ["OrderID", "ProductID", "Quantity", "UnitPrice", "Total", "OrderDate"], [5001, 1001, 2, 24.99, 49.98, "2024-01-15"], [5002, 1003, 1, 34.99, 34.99, "2024-01-16"], [5003, 1002, 5, 9.99, 49.95, "2024-01-16"], [5004, 1004, 1, 89.99, 89.99, "2024-01-17"], [5005, 1005, 2, 59.99, 119.98, "2024-01-18"], [5006, 1001, 3, 24.99, 74.97, "2024-01-19"], [5007, 1006, 4, 19.99, 79.96, "2024-01-20"], [5008, 1008, 1, 44.99, 44.99, "2024-01-21"], [5009, 1002, 10, 9.99, 99.90, "2024-01-22"], [5010, 1007, 2, 79.99, 159.98, "2024-01-23"], ] for row in data: ws.append(row) # Create table tab = Table(displayName="Sales", ref="A1:F11") # Add a table style style = TableStyleInfo( name="TableStyleMedium2", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=False ) tab.tableStyleInfo = style # Add the table to the worksheet ws.add_table(tab) return ws def create_employees_table(wb): """Create sheet with Employees table.""" ws = wb.create_sheet("EmployeesTable") # Add data first_names = ["Alice", "Bob", "Carol", "David", "Emma", "Frank", "Grace", "Henry"] last_names = ["Smith", "Johnson", "Williams", "Brown", "Jones", "Garcia", "Miller", "Davis"] departments = ["Engineering", "Sales", "Marketing", "HR", "Finance"] data = [["EmpID", "FirstName", "LastName", "Department", "Salary", "HireDate"]] for i in range(1, 16): data.append([ 2000 + i, random.choice(first_names), random.choice(last_names), random.choice(departments), random.randint(50000, 120000), f"20{random.randint(18,24)}-{random.randint(1,12):02d}-{random.randint(1,28):02d}" ]) for row in data: ws.append(row) # Create table tab = Table(displayName="Employees", ref="A1:F16") # Add a table style style = TableStyleInfo( name="TableStyleLight11", showFirstColumn=False, showLastColumn=False, showRowStripes=True, showColumnStripes=False ) tab.tableStyleInfo = style # Add the table to the worksheet ws.add_table(tab) return ws def create_unformatted_data(wb): """Create sheet with regular range (non-table) for comparison.""" ws = wb.create_sheet("UnformattedData") # Add regular data without table formatting data = [ ["Region", "Q1 Sales", "Q2 Sales", "Q3 Sales", "Q4 Sales"], ["North", 125000, 132000, 145000, 158000], ["South", 98000, 105000, 112000, 121000], ["East", 156000, 162000, 175000, 188000], ["West", 187000, 195000, 208000, 221000], ] for row in data: ws.append(row) return ws def main(): """Generate the Excel tables test file.""" print("Generating test_tables.xlsx...") # Create workbook wb = Workbook() wb.remove(wb.active) # Remove default sheet # Create sheets with tables print(" Creating ProductsTable...") create_products_table(wb) print(" Creating SalesTable...") create_sales_table(wb) print(" Creating EmployeesTable...") create_employees_table(wb) print(" Creating UnformattedData (comparison)...") create_unformatted_data(wb) # Save file filename = "test_tables.xlsx" wb.save(filename) print(f"\n✓ Created {filename}") print("\nSheets:") for sheet in wb.sheetnames: ws = wb[sheet] tables = ws.tables if tables: table_names = [t.displayName for t in tables.values()] print(f" - {sheet}: {ws.max_row - 1} data rows, table: {', '.join(table_names)}") else: print(f" - {sheet}: {ws.max_row - 1} data rows (no table)") print("\nTest with:") print(f" ./target/release/xleak {filename} -i") print(f" ./target/release/xleak {filename} --list-tables") print(f" ./target/release/xleak {filename} --table Products") if __name__ == "__main__": main()

; p `zqh P@N `1 ʁ0 <ͷSFQJGZ tN 6^Gb+%U"Љ q - ȡ߀ w /S̀@,p|.〞 `Y @Pj`@g`".` րq C0ҀdI A] #<0] >@ @%0 W b`iP \OT0iȟ.0ZΏl%9o{ ժR sS:*'<ɋ(p w@q 6}e?CCCr{$=1\B]w;z@@=z #"Lo NT E~>`?k\=P>{rN׊BSQ~D'!1TTA.FB @ :zSl,=E@tcX5(-'| hҥMFZj֭][lڵMP쀀\pōG\A  %U 6q ׫=7~].^7 +^eE@GRɻƿ̘l{p zj0၂pD0@s0) 2)>"x0IC'J'AB,Pg@HX(b}Ɵc`x;P0]Bt Hfo$D`1d"{FiBmEDkşX"O/*~aCo&QY ,*LIz !! ' 6Xa%Xc 7 垅6Zh砓ƒ+xi\n[G3=p\."8;^L0Ì=*"@E\< J=8a=#2a'c3vF3&$"d "RPJ"rRrgʟX(20r;Ҥjhtffƞ{ƈ1xJ3hGJ-JgQ khS-ea$Rsx$G8KU@=vgv[SvpVZ<@SU Ίг+rT*P3Pqs=xnuUJ ISF7J #2#:XC|t9\':14„pTB1c10bcË яϐ4=DG@u p.qYֳNE1}xQ;۩* <7,"e+ъXci.e}(c< V7r) #8 Op =≞#48K rˆ( O!40\R5鉡le*D R2pHrJCE/FC1 8G662#D!?Ԧ7iN;?! A]'ಂ@? n` fX%l;0UAk\ڀoAEH1 Sic @Xi@l c!8c]$NEŤ""CL+ Pht8 D `p„Q%SiZGR!(bN]TBH 68m,ъtBW-۷)3-ix;^4w]!^)9s$$dV\%+…#n `/yL W05mJ)~]FЈA%qx M| 4> !P r F$ixU2503\18R D3H===H3X&9"= ;BH5L,PΣtTu Ȇ/z77IAG 88A⍃\ 7*)=_ȼHdɧN 9 (iuC~ tjӯo?6mrh0?3o?a Gb DF@HG}s _C?4ˆă X(@PQH!t$[e} ֗ha=aD%(Prb E9G4ܸ=ǴXP(cNU4`?I7Y0c3 Њ`s C` ŲS͏.So, yXR'AԱB]WP`.zJ 4v5KP(}QhO,?ې>DƧ =4A OM6 >ؑb(&m(R V-(& @E@첄!2xlZ9# CN8ι8K(3 7p"$ +L"X)q:xҊ4(@(HbL :,I:xRJ/4LdNd'N'ߖ22o0KJ.]^J+2YE< TLI\b\O(x)49h@: ps3ߤBiHj`MpC𵈄mdв搪 7Kq,f$xŷ&o[=Ntmazf:Fe'~99u:aͰ^Rcbc@3GG@Ou  ;aO&U>z #t@AP,2=-lAbXAzFT<%.s$MJV i6h!y6 "_:/pn+iPt}h\AA;l+AXr\Wx`@0rpc;lrDaWk7XL;z"@^uFhzEacWǼQϕbu 0r\f@,NNP@y.~}f%;U4 &Xe2H@7X) p vvkU 1ē Bգ8`OvRz;$=a rvH"P#AJ:0fa #t f*kKEA qe%7%cy?.4UYN*h}/|K%`BX*L  xeB$xbA7Pxn0fXn8h - +!i,@ 1 `}CRg%FcpAd (r+ziܑ^?(`Q3޸ؕ,?9huxбYԩ]W$WHu Q2wSťe|ZcE3$]@RcE,A:Hq7$o ,Nxė  P`>x!En4EP\DuWաz %&@:$e䪢#y&e=XYC3F]`@msL7;n,C&Bu\y5l`So} [TB3p~hC MnB BF% O^]'pVgD؄, ,!wr#ī0r HXT"p rX$@C*dF@pn&XI::zaXP )FaEA:@ :9PC|18A`CC:-E7 ~Ё5:X-pC,p'wD9(mA8!9TC61Z<[:a(#8`!-C:h@pB':4\ HC8x!A@.a&K(7"У 0a^Yeq3`ڱ^G7!J\wtYCtx`Ԏ5{`9DCB ` D@DBRFhle |A0:`dFNF~#L9rb>UdLPe.P&ŪdMFХQ;qRRn%WvWFLSBIQPWZ%[~e8X6ͥ$VbR%^^Ve\:MYc؍x 1KeClPčV%eVeR[\cOSjf|M&E 4gsq$Ka܍a(k>K: ū-g^Њ#W~JqxYB!l(H* [1j <al֑ (P*:Ȥd@!!)(XrP! ǡ#AZ`:Z U284ø O.8E$B XC?0%n^ffr(gbڞa&z| %HA뮎ꐢĥf*ۼZ)Ha`M 6q$zaT(E, Y&+D1N,h1@ZQ|e1Mnؠw\`M:ܜcELWH:4 PL'K:SCԿ<:;xDpwQA?e;Dv= <@e;CdG`ʷDZX6YFx&+4HR~PW-VϚyX,[BCF{nPGԻAFiaӾ\((n{?`(ks)4LXB%&(AR#4hUBUz@2PHA &3j 2i;h`)\BV0/#pލa/ /P8(O(y 8B䌉)>Q R ^niqY$ ^ Zh-NY3_( 2P X!?-bAXLKA&BN MU6d  G6yOL,`g- (L  ?ǝL!^S.t fȰ_Z5B@cARL`xyyyM!A@XnC`KxÍho G^N`7Фf5rA j < N1A0lBAXli[7{3k,ML ] Mzk/8@{.dN~"|Am4ܫ" uj]F1Ex 84卐3@iK[Z X*^ݒ;&d2ܢ끃L#+>AU%1IMnڔFQ2lē "@(-JMp&1Li{6N/Ln4dhΠ.NWjR .[K3s6k ݼd3b f`ΝK,1-iLnNMх6NN!('UvXR dx~gv]$A ,D'5xKLqlޠe a6 ͠RW *k&/II)T L<ĉ4/Lpzt/x Hf&5Th:cPJ ܁^5 a$G: U@Tŝ-cIz'7ca!,UbVB4C$/@*'p{~@,! nQ谇'|'.IPF8 2C<\$v"z(//tc_*S)pr)\! `yCTӴ-jM*&ݝ Q+]Q 6raBK4RQ @2B/QÃq/&|tK^Ez#xAĈ Wv,1 /-zY)8)@!F݉(? 7CIA`/Lٿ@Pދ *4&pIxb9D I0aQ@Hяp<,HM AP8#I`c9 R ik!(f8 ء(!( Hȡ0$&q)0@a8!Zop-!v%"  b 'pdPCJ $nFLa(.BH:CNبyS.J0'd ;A@ g`  hX7<6 Z @PlVɄA(2P;4)$anЯȡE+zEaN*!"x.tGGN,Y JB497pFz3Kc X#Ot &Y4ZOS&5n^ ^1@*<4 \u]ѯPЯcCse$z 2DI_"`{G@3Pbtd9t$"oHx!FA .Fr%21N6eU;}N Lk-`b < AT`Nu.^&S7)ki+TG0A@)k#B)gjyKgV˸ ` Tz =R Zeo#:@L^!{QDW%A |itCZP P=2) 6 )`!b dvqQGG 4"0ts Un0V[x#cX &o;d@ 6YXq?:&Z [KOؗ lyN`xtt$vb, fx ojgx * t$ x`ڀq"ӎ rMM@3 ,(z 1d*y|3yw. x p."J, Vq z⢒`F*!r 0U$Ty`?3BaBKlf煫,L34o`N;=YNdkbƇ $A=ض:{˚m@z~5d \ WzP\7; XA݂A[eMnB@ne}g0%4phzH_iEwi,TnhhJ[4 @ \!Z1ƍ;z2ȑ$KzĢl,[| 3̙4kڼ3Ν (v@"r;4ҥL:}   Ec2 0k° Ŏhڵls h 7ܹtڽצO(5u<xUJ\zeֱIy+[9f( ڢB7пF ~zjĕ 4Y@@ݼwL"A3LP5#hts+(mYjpPL540S%L #ƪ L@e0=U{Ytv3a:T#GM `[Ѓ:<e<)D3@S|-5RS=B,0V+{C]5~|CLO?@&\E4"BIX?kJ*}MfY%DeX%n,hAnZjX:ӊxu)P?<:'M[Cq 9aϦ?la&܂lD`[U.I%hۙ `7AB 'qV EE|Ϝw)@7i.MXKǸ͚xz?X]l痿/&Hp o\"[W-Q*F^7F9>'H. ;#x+@7CϞQc?<[1<N$mIXC=La>CB?sO.C\3_B.đX=r|:?PҀH,4;'TI Q}H7*touPcvcO1(#O@(sh`b$wx PmMBnX%`Qf>!2(bPBVR!t3%\ WWvӶkd 9(N}u/{]:Ѹ #T 8ℎ #!E`81jt`B>r#NXx(!A5G# 9@An"CjoP==1S8ʩO=!-(`cJ`D@.,5z &H<oQ&Ȏ,'8zx\8HL2 @3+ZZ|lÄizR/b'zBX K`cڄ%Y,(FdciLM`!Q+cy(`d'+oz=bƙ342oF5+!0!` kXiW)_6yǜ8vO=",9dQY vdB)nzb2}xC ,Gt`tEPh'1WOF2@@t!CaU0jlAL 7`L &[e`LaȊ.Vb< "bHH1$(H3(';F)E|G:1>|#Q@(4Ix_TQ-Rd9!ddٞ_Q {P!V ?rأ]>&τ2DAS&H,AA؃KNaH=EssgqY I > L. WҢaF.'d=AF{gy@aCEWK*Ç|ew_(h1v/B\q.z(:wgF7sxI@Ng"A~D1UZ#2A>LIqi]jo MTQ[+]ă]vYӄ)L0@ `/\X6M~g!j>Nq TqbpyWF=V>$o4Ad0M@E @d$C$S)  i $ a@r/%i f $УQ7`j4U`!@'j8-d*F*Qe1vJ^KK GDRKlKQ"zc Eg`LP O~Clpr tu(P@TOޘt Gz̃O` B[$\ Z' #"yZ䰒{*A;ֻmC-eIrqѷͻ$K2Q n[Ptސ+L1KZ OLLai1k!j쵽һ#*cpA+l(-q 2&q",5a;$*Üx=Xr.9Y56 \T"~!EU^oZ6*%Q Ec Ļ 0qxq PLy, lp|xQ<5LńSknR`V=Ad+o0[7Yp ^˿L  W0P:H @`ȡ<%3w~t L_P40+[S|3(15o%%Z @kBl1Bme5Pv#l 0Rm ^[X6r&S JiE G %P..i$ p?I F؜ 1ILA; `PTo1_ XpԌel.  ȶ 00 @p 9+$~Bk + ,e8׍|4MXaxp+T_KDV2p+%ZR}+ߠC1VؼXRlƱ@E5RD&~}P Fc` yC0_qV>z9MPI O:M_   d<@FO:XH >@m2 Tp$$1Ip8_J (xTf PpO ǀ2cɣ)(jX4(zTDC94MA .OUcH`(a HS6 %,A V\& P^`R}:lDnpn` ^l`+x 2J0oDp~1օ`NyE6<5 )" 3 Dpz>> @ |3  ljfK #&x>(Οf8„0=KBF'E (Τ0Ŗ9R $L43xSKB X#)GD :L{ 0"f\wLg0%IOإ8[#CP 9Zq,tŊ{3cM_Ac-3%o'^8T0O^uٵoHnFF $0 >^&$(@ؤB2h` &(b72 A((?/ht>ܤtC OƝE%`Í6R   A7>dK qcl@I&Va)ieTHXᒞp];yXF NR"A Д-&+),r=D,&JsS\giD]t"O0ס ovԾ Sِ(ž{0 &n$rW"( t=`rsr fc#wK?NpEr)9vA fp8cs(1QxoPv g-[4 4@u 3 (FDnA6!E)&YB=pÍHBAh`Ӷ*ō7sݾI" xr8$JB@~X 8T$ož"9!t4C:ac`51\h4RAP5-JFaĢ#B&;x 8zC0цؐDPVBpg B@%AH*w6 Xibdh]lt 2& TPqNqV(DO5a.1{!t,*pP 3dH#Prv3$6b} ,E3dQuo,[HapcZ@/#.ik,b00A aZAY-Q$[p&LB(f :A&x%(tK(ъNU cPW$*T:,6z8L?lH|BJR,aV+`^Plڃ@Q)37a1dG  ,= Qf)<ꑏ0 :֫LjD( 0at@=y^gb7@1 YŃ46t XX=Q/\(l2N xu ZV8D {Â=J.gIʚ-b0 rMEiI PBu520c\.s^`( 3!BBZ%loE!&L CA|( IH& "~fnTNwjT.A }hLbI0ހmg_?ѵ (< W P@EyyC.rkfQ5E/(Y>a$L0! L0vZ& ܿVLiʘ?$ (,76[ "waK.L>QFu 3Ec(0 *s .nR.9MÃ(I7Z~E"$`LxB4Ez׵y=`Ǿbu +ȀiGl%(xDb &m@KT% ¿OS3%Z xp 0@W0_E,aA%6d -8_Bv\dis2 ӿB&rh(F#  t5@1t T۫ p rr8 ҢУ%i82z؞ ̨` E {A؍t Z" t1@oex%aR̐3A~@<;itX'2tp'h{#rj-  I2?F*^C/6rڲc#" .Ȁ)7p78 y=0-+Ghq1p3p6pBp?"2P D%{G BnFl2Pj r\AFpREʊ:hJIr8oAN; dhj-hEitjh$?Rok':\ˡPp@rEAChicHǐxo1k&{ [OjVBBnj*e*pI"Et<pr$`a@KIkIn/@ i l@@D(Y8orm'R$ I͹6Y %EPVM%I Y̔LĄғ'Xm@0v>IqNP'Ns+$ AIQN@`mqžz.ߢ"d -ӔϙYcN Q|PyD_kL JLckPŠIDB686/G| AT|I-'*:Q,$mcSZ mǔKPխ"NWLQLQ1MR -O'% -{S:-N: S>e )ҍi/ S'!ӧSC5%!/ S?e-SGcTO1i8O-USm#Ŝ@ K\D]KU%ѨYHTTK=UsS_ VaVbm=(-(U]UIPE%Ѩ >mm[֌r0 )\`-Vs=W( pt5umWJU@UV٫B}(¯Vj-/Ln VqDMxmX@ tXdOrxVa% v-R "i Sأ`c֏Rh gӂ 0YִZo}k%ڲl A)~Ќ%(6[mW؉\C'9}Hu$[i/CLG`:Rp-~e'ȅpHqtXrxrNܚ pe']JVV4Y  "Q01Z8ڃu1EIPC>iE-ՖBj0хW5&ȵHBıqY&Ex iOi@jx%/*x L@l`j=^]Aub ]07xJɽ mm"ຈ07BH7[#M%Lq_ ptVX߀zb{^قpXYhJ<.e8p"-\& e y}V*}/ݠ a&Yڤѽy ` ASY)P?7Pc>2G.grxeV^ή9e3V]=H`NbK6X01#- f "pB(ZRVŏ hxmjjP`LRpps88e8p CQxg{C¡Ԫc~\makdpkax؇][Pv8&)Hh&'P[؇ A.*vefC;SO0Avrd`a{Puh p_&r(k{8\ ֨L2!:R8BٹpiV-(ٮmrh3z`膆4h`M70D5"7͖QRn鞹Z=KƏE]M9Vvch.ɿuю RNt 8p<' y0-\&dy%!op{p&Q'6,L*x*Dў%RAPsIo+O?rq؇p8+Dp Ar@)0B?@. ` {jt禇hIk  ,2Fȣgne ׎sP,qCI=rx0yhN/}@6Gi< ('"n R) ݧ"\dEMHw-HQ-EK(Mv8c . nK)X^)r(9e0EhH *&pc;(s{`Caxa\0J^sa<'x`o%0 eJ]ؗT/IlQ:ӱPMzi@G(ȿ?&j98-fPw%bPOT #/g_t "lqa`W9x7~i7AS (lPYhPYqnWג)'.4 &s+D nQ|J9'7ϠfQpI ,8ͦJ6T$KDŽLpLԬ>kE b̘Q}hdE_;`?e%Oޓ$ `Zi48 TK,QB* ;3ـݾEc!2z5APp:୿iIJ<#k. v@:t.,y2ʖ/c`@@ҦONz5֥u8` ) 0` 3nf.dӦ @@Mn2>u}PwC7&P@o`>l2L` (K%}@֠bV77ԀM]w? =4 > ? ;|aP d 19tZ_O0=h@5ܳ?26=#aE8ЁYF{Q!?B?͘Sha="PrU+na)2PMQO2bc3%GC|3}yOI)\ecO:PZ6Rz\{"@+: O+xD?IP Bf @hafIHafCeGLПKt06w*ЃZaIx,E^?rxd1A(nђ\e$zNK?(HΏ ӌ5ިQ[`D?N5>ء鸨A0`cT'MMGNASFl="72V.2 T202c4YljN А5j#@2"RW(26x ӢyM% 0=sb>0X!B @7a%&j8,&,7Ƞ) Q%g3=C,Q7x6 `9@<?Ek_Ec`LJAh"L*BgQ I cdY"3) `( t O (J#"n&,71, )EU#E?< b^Ɉ]!@[t,:RĢG",*P4Q(BqX$,a  ][峌D3яQQ2U'б LbBlMZrX̥+(1 px t+:nAVX#blYXьX"xu[O%j{@ %<<I,pg /.HB"IePAq $ЁD.Z$A0A`q`fP2AI @'|% H'B `Gi`De\d H`@ l$<8YM@4` r `',>MI.%^&EϰexS *)@*>phX^|(5EƂ|h Ĕ*dxM"5]NZEF<|S4> |X|a+4Fc<7lG9F'r"}'NF!#5^?t%jbAK1GSqdq`5 5lXNqxD>AXn\D^$@df‡J$.dMjLdN愮yA$ip"k5HVOJ~$EQ~GZS膶GRqOIbQNdJdW^;xyXeYYr@"OVB?q @F-5%K^e^ev?f^&Z$PA#b:cBfdJ+V⮵O-e`e:ꣻ;ޗZej[ֆlq.ޏTndF%ok"grb co.PPrRgY'8$$AfAf / cp,p^3lfuFcT8}bFJd`B+*܁1B)#HoZIe4MRFTfi'%&v٦f'eLn Ӿ,tPe]R[Ȃ)кdtn A&W}e00.,}@Hy%B, 8D]FB}dFc0A0FB.L.BNHB.40©dB.>A+T.0$.Fij'4x2a5܃Biv剢^\:rQ@yQ%(%[ܖ>q<t@Gh"HSE'(&%*{KL,Db@!%,$T5d؁ ؄5F`!=C`R7 0BFEL(XL4?CÙBJ ;d?k ބ.ϑ]5k&w*"dm'愻@oY$zH>h]<DWv${hFL@o1$h;`:܃*\kelTDHF~-l6KJ%4'ƅ#؃ZAI:Af?lNb؃E$!$)(!HR#h#;`|-PVÒY0"'d =(bخ}P=j(4sPJp5@}:e X̄ ^nX<=HW @AT=5VE5>ØFcaMY.; A>H,=pC?Ë=8FDa2' 'UsXF MCcG%wz"Sǯ@ *H*~_lxG5:g3 trdHTMpuT+C40%4gSCgDAeH]P(Q.,".LqT[}!P\83C# E:Ԉ'83U OxCԍs:hl,O$@C3p$&eTRﴈL>y,M$-FVfZVR&WHtg^HSsLH8%&O, 0Tp`G ʨ+=@TB@(fEe7GАKFI5T He8=#0ZĂlA&W% a!kd\C]lt`bF ȉ4>xTp,~AY:{l.V.vy@!TS^SxA^2)AG/)w5\%8k[(8oyG';H0Blȁ5%܃.t(#;H3eЈ =!d874fTq:(hH8PZHB BP5+G?|uc7Fe( F:4C2()ZXAΔ0{:Ӏ I#utc@H6C= ȁ3"8:$J|8]_;P܁{N<(ĂC\GF:+xV(Je('hFq]K^<"|sAs2qAW| =quwA Vv0(JF}͢VJ)ai J)d{:l}Vo0[%-\QK#rA, Td8T$i0MD ps0~Ѓҡu @COx,%` . EA =e/Q,6pA," B,%(0E/*h@N#T %,!|3p#(pxF0?q*PAA'x$`ҀYf I C \h0> 8Q@P0! XXr_!|gp [@m ,`aK$j{c|Ă ̹!jQK2lP@EȄ`a#SMG dΠ1@G0 W@v0RHB_8GNx <(gt! _؈$-xk[CaO `^#B Q@PAJA 2S r؃`40uQrƱ8a+Kwp7El`fnzd KH! 5BMu<#;HA!6aEr]b[QaH.^\HK5r@l*tԔ>ծOIj&]Q\{%*bNԴ 9I+ p"zƫ<܈4Vf&D^EH g T# 5K12s"d PQ nYYd %RD/>B2 7¢eB`P(,oK3O0pbe.xGHrgE6XA 7&Sd'a%E 1>C&E \Ĺ6$!|>ò*3StJ+. L76f: Doh0 .0fC7XO?Ce 6P7 `f TF= p I<# &T?P OO M 0 ;! ɐ P V |?0 apUM#D,\`{ *K9ڎޮ?dCD.eHOOF:z) o{oafvQcTQQ L#!A ' A "o80h0ErC1򔌃LHaL0DP ygjQ7P="}q,a d:#?$CR$G$K$O%SR%W%[R%e@ f#Un#QF+'(9_.(#;2Dr,^>wc** A8+˒+-R,2-ϒ-r,-2,-.-r.r-///r02/r/00Ͳ1r,2 .!31f*CS4?(2 Cr4[5%13+ 3il+sj7{+u7qs8s788o7S8398s9S9s:;S:S;::7k3R=3<8h@5>L41))S@_,r?TAA3@#TBl4SStB;CYfCGDKD CWE,Os WEot@LTF{G6>qH%4/HFCFJESGisIJ49T4J>SI9h4XK'uGTMהDNIBMjSq4N48P(O (PTQ'RMR3uT?UCWSSCUЦO+TO9UTWu5F?AUg$UoWR!V{D4Q=NjL}XEO3WRUXBSaUa.O[?V[uW\STQ5F4\T[uM5]u_tZ?]Y]KU_X_^uC5`5Ya^6[]R@bi_Vce`/6\vb VV=[ucOVFdUb)UL9teg5cQfccYAe _qv_mfGKf6AUgYe'e-hufjMfVuViEZcJkh6S\C.Om&6^ږnKn+6Monj6T\nV6qnٶqo+Vrl=lU3k"d;<<'̂B d+H7si-Wv o_PWXGXQHL2yn1 L& vx 7HL{{ _mVhg~sٷL7Z`B@Azf! LA nXlC $At8ٌ~&v㗅vSNqV \J8:A,A}!XATAAia X To߷345^ɕs_ !{`R` .AzA4A cAAd 8j@*Bf!e8#f]HyT VwW8=tpX X!@lA!A!X !"k,L6cy~͹E^;?+V>nlAqC N7&x@Xd`B;LYlAA XwcYv_qSu{!!M!kAWm!&8vA8VWڤט]Q:~;ԝ]5e La!aa`{ˡlAM<AA}:8{aUz?ٴI}C Ax@>(.:;3,ٲYث{@ÚǺX `Wfa$% #>8AXN!؋)9.F#y %۹A!vg;B7{M_z;  dZِ ٟ5Bz+YjzɓA9 2By @ٹ)7᷹ K8XNZLAۋGZ!m `.AAz' 偋s8LYI!uOǣv\@ \M|>j(8+xLAm!| Һ9 NA+8?Yx<-5y5 AxY.zWxk!h= B .z9A|  ||ՑS}h_TCEԣ:2VF8dβPeʣ FVw>ߡp܏oW}TZ*nG(eq˚/q^-W=>4K͵Xmq#W[>MQ=I']gu>7v(MJ|}' ~6P`fۗ?h^o\ T陦Ch9wf> ^\3ra0ixܥ;yt( @i@bF8/jLqXi Y$gn? aj!A&Ni~C 0@*\ȰÇ#JHE.72vT_2˗0cʜI͛8sɳϟ@u)P`ŇW͚7oØH1ѫTYj.ޞ0(`3<p?I Eh@@ʊߗ:H)@,q%vIKK .8˘3?#c1HPj V۸sͻ5CWqp8 (8IB:ױT :BOw XAzaSpMk5`q X! B5H_uBuo,¤&#$Vf@)5a==E>Mu`)0?'H?4UR$JaM5Ӥ2IdOރNQ Mńz.YzaC_=CAI%8.PAI49L RKSӊ5YHzsOӌTqL?Jm`}?0=4MysFv_d`*e]^XbD#ke b7l70!74F-WlLl&)a,g<QDFc?D9(Ŏ7H* `iO8ļd: \sg|xM ; l;bPᬅ-M ʪ 7R| "0 9z2Pz= [4I,O%8e&^ԋ1{]Ͷp1dݫ7TDKZu1 `d5O,xKӏ!ra:zTYN#!LA@JB ,% O+):ĥO E  ,{Bkk ҰE _B=% MqT;9 ܺK^0gmpдZA?dP<Y?<؜c!@!XP;FJрqrs躊7k^G45Ywq`0 PGrsx@=ȁLoGC'r0q CHGB>ZMcA5 \/+%x,w 5 D Q%+p$D @IF}AJ[][>T04Fa ,!BePLbC#6 gw8baV8Zq J⁩lU jhizj\ӃBOݵЅ @;.pA1|_ XQz;< @%&E$x |.||n)26s4F^77\{1cdķG A ;\}XxN1P qNdRF$RXᄩC7 ʐuKrj?u{0"#!*Ȅ +QeV'1hXu8HXxhl'w!Zq(XD"[4Wfus9=RHd1~ʘ1Y8ɵؐc`1e{9((UEXx؏9Y5ZcɄ3FC@(t.:ّFTN "I&y(*,ْ.0294Y6y(YEٓLXc>Y`A֔LNP9RYTyVXZٕ\^T f X `!hniD[I.VTx9Ֆs~YyiG yјC ,y9jw9."!HHӐ ʐ ~ēWCԛAL [yș$99Iq I .@ v`\Y9Tvɚix2Ѥ@+kPP L P й:uU gEP 0abrSBA`D&#w d0+ | MWJ)@@ x0`hCRE Qpr$LidyrKZyMʄ.-[j GfZ ` rI0  Fp ق P 0 *ؖp s b*'0  p "r  #d LG  `Rq p  :%!K0 &Pq߃p   zRd0 HJ Z-F瘚j^.` A$V߰P"_1>E%MOwZ-%-F $I`EѲ$P; B]61{ @p fWGn"`!' d ,$c IMwУ %$13A=0 QY1+)P$еH%YIO*cSzT k Px} Dfz3ap%Lk5--`g͐~ͧ`>ޠutp  ז$@0~7dZw k q Ŷ$@v;_@r0- vg@?~ P Xp(`r P Jq pp 0hd!j bg@I#2 tu,B @{yعD<2kn |CQfa>¡'6[Acp!4 5ހӲal Ch 0*bv?zqQOPh/I P? `G -I @ w~D" _  JaX)gc qR B0c-:=QVܸs)# Q PK T,Kh+%  `K#][2 |v )z;rh{?.F 6 Ez,zE3.$ pf,w0I 8qp~ <MF ѣD#@0v-0 ` 0ڣ|a "6T[Q\E,{y.lta=t 0 QPP Q$3%`b`}à 0 g 5&a+aU}0 @xIp +|s< hأ7iVDalр02q V SecA CLͩ87Dn0&/keQzAP4"~mY( 63lYr1V] b@,.-F^ zg^k5=E Ob-V5} `% 0qC R }ȝ Mj@<@~(+  㝤?ܐc e؜TrNi]U\c DSfA6D> 28BA;#|̽S!xeJ0 ,dn p66DP"Q kU `gЫZ)g@FbSeT@] 1h xPֲT pV M[d $%w@W  t0Jth>@d &L)&\X@d`_4 v0E0ۇàPN>PRNa[DeD?<`U@g`@T@^. kN9Qn"ߌ QuwVG #x;,uyl2ϳ$W?'OM·<];8q $ b;! zwrM  XOcgQY( dpvߠ'Qް34 ʭ pm@rv8ZbUzX rKa@o<"?L>QD-^ĘQF=~h@@ J-]SL,u<` ) 0`$C%x( PU^Ś![ìY;CwkE).fR!m ]\ɬ)3#Yr2RǾ%$ O ʲC UvLnٓ21<ڵ& K:-t, 1M0A:m&O8LrEȾ)[E ErvQ@)b)0 Э Jav;FvIFL[ ,IǔP5PoʩT~jR255VYj2,f5W]wW_s4E%XTdJ *gSJ((l#VFn [ }W\*e]w߅7L95iXcwTxzYkŽm)궢% *S^œ$8c7`ES|G}{Bߏ qk1 ըtfrV᜕ /=|f.hfi9SI:ENhz&T]&x`kڠq9" v\C2ioުdSQ(`go|@BP*` 2P Y(e|ɀ32jƥ! 7&h翏Q.FxALw8^:p]ҷeUZ dW@kI!@;M|ZdX /0ܸD N5/$ M`]z0p@؄;5 I@a3XqmEo.`@z,AaVȦ=&p<96BBvB52D%l@t/p&z,lJ`;&@KX $@L hP׆19ÓE0=M?aDxbp8i܂y)B5 Q{Q^>~hrZ ?$\5GBE`-lŒoxC!䘾%rEK]e}x '2v,0dқ2$ Eixh5/VCM4rKpӸeAt$)41pJfy\@E!P\b&FhYKl =z $U3`>xt\@%Xv{@ v@1U$$Sj‰zp (@( b+،9CAX!. t @  ,BNZ6 lB_Hb t@؇(d)p'ۀmue\ `B7"Ģ`kw{v@lyabH#-|I.rR{p.oIL{t1:C.كh@6N` TPK JaI4WB8ЛoHT ؀ BJ-ن6uZH BX pnGYu*7ъ T,`?ь} :rA5>R=I `d`cC? dFO~y0tl`\?ȡ@ Hv.`ĀVM M{pvQ 5xIz衳m4P V:qc,pH H>4i O]rP8pp08`ot@+>@rH;󸏫 )e>8*.i # 7؄796{@7(: f* аjaKZ+)!\ ):҂&<";CI~pYzh=CC^ 0s!{Q(x˷)Ԉ{؇uR[u`;'`-iJ 7{((>eHh 0?zx&V4,8Qh/8X\{%1?DHX}(<&?W+=k[@fs}m;HRp u)gP%=v8ܛ["$0029X&6 |p &82r2ذ) ȀB* g$J 7ʩJ<à C7\ɢZC5c;;)i5VC}Hh}  GGxvXT[lHGI0ChKZ;~Eװ{FoF3>ȅy(}Yɤ̋K=0d#AD#8WyG:fz, z tEXpGx $HhSGtu7}ȣAH|(ҫ蚘978l9yAHy!عBxKRg @ IJXJ,Ao0 >Iq,M0;4K@$phI\@Z=@J(+|ć1-˻"%\d}%hDD]h*PGL {`A@PMkM]Nhp@5rP56mdd;7󫆈PF􆉰(oT( ];t`hK6`X/=H?|,@{OiC5nͼϋD"I9O0 C2& )@1B8'0 034" <I)H聒*%1Ѩ'Qo'ۘ"u-" J *;JWq.yxBR_QC%y|{U+CF;$XRL~U=v8\p~(Ap;rpix[DG< kYh5_{N7z`N挂XLH3U>2ωȻ [" Ct8LMHGA($=>UHUfպtdGh_C ^ H $VbZc'~ȕbM Pi!bicdL(T(p'PxqmBJ7`5A68$% ީ!7@6)dK0ћtc9ޑ@Ht8e5ܓMVc0TERX=BSр]P(EMe`OVɫn`@fx5tR8 L*[Yh5v(V,Hi(RhCd3G<$4`.Z{Vhj^ƶihI3a}g}SR`ZgۇRa}[gh[YC%h@Xd85/XrVtgV&n\V(|b(jMQIVp xQ63B#Kx#/hx Мx 3.Xpo&hT؄y+'oQ# hIzlI*ݛxdKlO;&÷]@dcBf*O1!($J{|]a`F9g$K[ Qo}h 6\sJe:}H၂H\$p ypfԈFL6 en$ } {'0=cH-[D$ppHI%Z[率.s֑#LB<aP/\|6-*ȹ)^i%WmJqqZ|,3yGWRd_QL@LE`[Pߒ$&&HPł/xEfxp`G.2HjEʝ-qA mFx !p`QGM{À'L,zoWw=9yƀJU*`9𭓸G-Z,i/`$0" 'Ex[u`?`vPY)4va  -(w ǹӟW@a0t%0&9j4]9 6P|ĩx y+1xXb~ 菢,)Z}'۞zi/.&"rth@2$<萀&"D'"0БF+HÂ# N@˃d0Β:w'Р@ G%ФJ<GҨRRj*֬ZrN0@ֲm-ܸreÁ8*0$U H@!36 c*2e#3h51ȴttLn5زgKv@bi۷"/ҪRlP3m)GSA D"Ǔ/o<ֶ˞խ7%.8r9O? 8 x cZ p7^}W~j!Y!8")hV"}zwuKT Hc S_A0KBjC(P(8%Ǡ{+.WI%RF@e!5ߜ0c?K|Nu9`Ѩ $,|( :i昩pTya"}lb&hN%@"P=C/!@˦eG:|Qb? PTC֪U_涛U}AZx2 F)Am(O0#t?@p>}1VqRts]S .ہAP'#|3=բ} Rk&ZH(nRK8BQ2ܤ%?ʀ @.3L.< D s0v6<,S? @ 0{ O2149ML-40Ju.'nȸAr[YDAjb ߡR2 <@q5г0jh*Pa_)]¹hom4$lJ_7lVbr &z¶] D@ǥ$$ȠܨhF?m$Ƞ=J5|#(P #>GlH֥rуzb)R'0xpF ||H .>2e@8@(NL`LGQL}[r&-0j%6561oE!%Ha * Bxa\ 0= ʷ gHV(0icSr(<1laTFABBtCкC(&X#\iB,!)4 M S'`QAS[3Vp̲"@a(@:9$c@1& g& $XT8QFz C[at< v_2BT|)҇?^{q!rx~% p|@ ؄@"04 b7 Y0AA Ls.OCCzwQXL*a@Q{HS(A:ǔF6O$W=8S+R~}Um JXB/k^Ȁ:6l A@GL&`N&J0s~%Q@!70Fŵ J O5GQΗ7¡qQa\mm {0l- B:&Ea)kHPF( `Œ+;1{x҉$쁎rDd`aACIP% 5ǭb:%C/q7zI288X$رBM ^˩r͊~8HGdoUb>w1ʹĉ/+-`08Ƶo< Q 6Z) *nmD:pp`0`R%уu"2rP u]^ #@pg=N,K0{p%xB.'$|D_?A# %؁`P+ȁHS>aNav]hYO!A&LY!&AŬT!DWP& %J+,TV+DZ:d)%̓ RC q3 C8Y(?)a7:K>SILN=(CiAV  Q8$\ ,d&7ʕ(ސ$ޣzXFHT X ppHpAH$1X1|mFB,B $2-A4(C,<'^%.RIHgX2L- 4'B+PB&'4LT),`}(Lꁑt.d3¢)!4'HB+t\ARJ0QpBJ@0e]JGN*t[?BAFDD%@S_@@Y^`if@PeH$A?5QcL%N֍PePoLA;FK@lo^@ Ħ Lafw$ 0n*gg&}Y ff|8NѦO\LKLF\ gIrqtq'6꧊hUDdeJdD=(_I脲J ]dI@LjƨqE@(h( |(&ꛍ |.)VO:|s~)4di)!)遐 Viui )*&jeƻƅzN*VRBjvz*f@)g~bʊ*ꒆꪶl٫ʪj*+}ꯞ)+6+jri:+Vkm"kjZ+v+BkJz++a*k+먀k鸺+뺠+*n* 6G-,:lDr²+fj6lĊlJŚlɒȢ,ƞRƬk,`Xsxfz Ep^Kp~blDF,Ԃe6JJjdA,VN0l<IhelF-V*z,J~h38C7t3h¹181dD#-ڭ-,A)(@.1hRd@ߖC*X hm7RDn ʶi>A7<8C@?CD"y?>ԃ>ă> oƃ:8C C;thDC=(lo=C-LI/C7F𚾭Ʃ DC6CR3C=8tC-h>`n7C )؂:3)::."h-C#4?C9ׯ&@ $;;,Wq=h$A9ȃ:{&1&@ 7> p7( x>;80@#Hp;_2%, /1L8C'o9(tC<ԃ3[1)*.W8¹UDOG@Cx(vC 1(&C;8q=P0?P.-@E>؂(-1&/q=NAr)bqjjD h94Up ;xQD0α>C,A83 1h6 FX2? ̰>4T 3h)8;803yLS)g*>3,@-Sp@/Ptw;(o0 s 83>t?x1F4+u9@t ֲLujqN4 $,NP#B$kS)Dt=t-DcV?o8?&B=)HC.o7P0u=u0?\5l?)ֳ;C#o-Oɾ._ۂ)4 hS;t1  +O\C9:4CkB;n@_vlduj1;u\\__5@.uDX +( 38,4W>P+ov1aB.w9#t:$}7aMdzjUkAv;@ P 3-N2ʦ4;>xtVICjknǃ->hp-[ )`&&w=߽xᷖ~xtC9tCa73@{7vL+D8y?/DB,:+;{nD Bc.&7)h),<ß) 6?Blk@L@#@-hB )Ps&,A|OX<"(3|#=]<`Ȁ.(E^ F$xOtm>@ UEj/XПj„$-g0Mǽ=vmg@KڢkB;BŮ>y[l*ۿ~<>gg~_>Ķo#WMk~>ؽo~[8״NR"|OP$q)D4'hPSA}.?)Fs "!@A]zdc5`+@C'H&TA2 4ԐbE1fԸcGAyрb 0("?/aƔ9fM7_p @R` gёOF:U+eU_= XNNB*ٳA*߼ɥ[o_6X䀂XT1c) P MxYpgϟ`%ڃsb1$yutN:V i90@  6 p>a =`m Ϡ,gj-Dl@(@%RY3xMIbF*"p$!R60(Rm[z]Dl!PRn4%8ѩ]JB"*BrC? PX$H4 `jg1.,3YD$hG$zN6h!,Ոң(:"Ԋ}LÁW"]arP u#Ei, lWyI’Bl3C=qI! 1F-Q*Q9F ܁;ƪ1-~ck'# e&T=H(dhdC:ҒbँkLrT,:%"f5jXn,h , ֘jb#6)A_eՃ81=сrK Z5$AL#4;qσs!l\&ʱEпlb`@aYffI%3ItGuQ#R.8rQv?f D ) \Vb3>p͛YF-: %j`؇2}wYv`L16uG؄DP @Dh?rDr @IBQ& 2 $i‰ @СRZ[V! 2Rj0!oot|"4TE O0A DEA iOYOkdq,a!X4~=gZQS^h} }m_+=9#S%P7Xo%+0FP"ވEaGc Z&Wӈ1f0thUx!E9f1 I#Bd"i{|C0]EjÈF3X$C g=&iH"!P?F`83kbY3K"x鐆:zjHo5}Og0Jp6D' vLV?A,.Z ų 1P$1.IӸ2T!¼BTݸ(PSF $ck n)Ӂ`}g.9eEiz®KOR5_+0qRGY X0j3o"#b& ]f(@@'" M ` @I0e#@DC(@b)@9bp l "g x!  d" ԪB  Ӫ bP 1\@"e( @,NЎ(gi 0)%h JDŽs >BK)Bd+ !'L$Bd.CaQvn{1bin9BH(,ܶ!€Lя Ѣ$bKaSqQeqc cBFq!Q!zt1⾑'b M0B( "Q12#_yQ\"DMr ))Vr$L§zb)L2R#"| nR#}'R;#1$/FFa >-38QJ" @&&"b` `02(b)/ ,AF܈#2cqz0</ J&&& 3ʃ(~C؀ ` A ` ry!)EFJ s?o J,anA8 7Za¯hS!j^a- r:l17'2@\)3`,1 ܠj`Pd-2%c \ xPK,P J2,K25U2@PӒb, a$!8`J7#nA! bA 0"΀¡!$ʅ^|2:" @ 6ԡ 47cd `0`( g?AA B3 t b)p ,gc)d | /#CM B+u&!,`PT7 hfE' 0t!8`u!Ghkް" ! AL"/"f}fHd:  A UGfE2`K,X M3|z&23/cL s'b P)2  $P `. 53) 8x@ !V3#Ya!\3a=0H-#l. A"#U ."dOVR 쁭@BT`(@@ጲle+n9Ƥ FAӁYN8@ "ϝ9+,bnUb #ܠ ޠ+Bd@P!s&YI[MN%SޠN'`3V o  N;]MYO{;bRdYKR߄:6B@ )Za t(`"Ԁ ҸbDBRf >@Ё< tA (A NGs DP  Fʏzx V|E X XeNB` ~ f `a \`)h` @ nj}!۶/ ~0􀥒`Z+) `WB8v ` `vEp3N 0!O `7a1e 6^Le-2Rꉈ80< ؑ{x!sac<n 7NBXy߽#a?vFt߭6ȹ004 P}bk(@A.&W*A%aRP#{\a1\(-B&Q9?ez)(4pWN;PhE KzK=Ӏj0f@'<;Ph 7r+hpb#2;֞RmkNe S{)! ?L (v`c9`H``ORE_Bч=D f&nP!@,E!~KXR(>a%:"KlRH ࡈXI)N}f%PHVT 8 lUarG?a 5^+4ApQ?dO8[8B-K, >ҀU($G \B%?.hzK,%X'B ,b zHHa*R ZAyzY$-|kU3[`p K5ӏz [ӜZo} 0A!Hvf4(~uxlb( whS60Af|P^X҇CKTiDf0@g L: gd1  @ P,1 `CZ"ހIq̡h| |LA_ÎHLxOy l(Jp"ZRG g[A3zq:Wd`B`߰$1a 5 5td+H=8RH9phrį$ _ 2 &PXdCGd * FCZ+jSyң,(`+!v?gk# 9dxB !o(, @E(3MhAH8R "CKE!&`9`NsPd9\mIu O@F)&P z&G5 vy8=A"P# LB=|J@9QIucOf"t *y5Pϲ}q:r"n +6Bi \U$Q0LF*gI^c=s/q<) W)a1VPj9:BqjV>^;GvJ!Kn>C6/x!KK[0Gb0i F"4< x ܠGNs'R-h WI bP$Ї>a[[&PK(DZB!Ld],=NE. oU&d 0 AJYQL:qNch<%;\\F0`Bi8ъQ1T`6P`/0 '! !@EdV#QÂ[!2b``p`a (!LYa !hF <4@VHb<ĪE`|l %V !L8J[KRLn=`Z\$s^  m"5\ \&lpw Ga X!G1;\\uمo^X!YB Ȑ ,< @ $( 0 1@UB @ ǀ-T ![ ,rt #ʒP 0 [ʐ  @ Ͱ Pp @ z dVP 6cP c< fj E0g cWN9 x0 [7InfE X L' ɐ ``WW  p uAi!80 v! P j'A` P `Y3luXvЎcjNFa. (Pjp  XW ȄY=I6Zoq&4 =@9(]{$Z` WoJ%= :"73q7S a"Sٕ b4w7fo]iR7_ 4 * @ b`aD2;oҕN ]y{7fiJ3!$Hbr"}"JY9: pE9q &E P5!j'Je)5v1墇t9;J @6ŀZe!'7%&"H!P@R*LIBj!٠:!Xz&zag xXo q;%*g0uZ!tH<*mnIP¥{% G:Jn֨Aj! !է7@6z|Z< *6R:ҩFTjNJQʬn붨͊٪ʭߊH*虫@zમʮ TZIīʯjzj n ˰ J=IKkn;Iʱ%k');: +*+3K5k<䖫j7 A+C ,;+ZԺ?KMO ɚHQY[ FTjnОL˵gin: esKuK^p+j {SI+m~+˸{x[a{ZJk K I6r+ۭ˹gsK˺m+kkoj{W+k۲fK__=껟+⩥# ; ۋO{꛾ ľ[۽ 6k =K㛾 {[K+ !쿻+;MQ/79M1<1,Â;\4l.l0l,1*K<\¥EW+I2?&JJަOPGQ]tLKO ZPu\@  8 w `Ȇ||wl  }lK LPǍFsLj`=@ Jp3`ȚPP}l 2`p Jp<` w|G\}ʶPɐ<0t\NJ0` `k ΢n q!PI M)5p ,`sĐpY)1΀Ɍ` ޫP ` P: ``݀ 0l!aP`(}  \, ,lց6`xSԬl ODW P  ҆p  ͧi< -@ Qb "mr  p Wvb@-@ sPٗٛM Π r ` cmgޘ;jl n@bYJ^""l$ϧ` V)2P_"8%J2`%r Ѷ@ڕD]P}5E倖PH]ҍ@sJ ^!p P9IF% "ЧZ \ڍ =ki/ڷݑ#"pTJ | ޵k 82/@P-!P`` ]@N\ E!Uf2l8 :lpN~" }i^ln[+p qBi P a`O@ F2^ p<#Sh.׍'gζp#  /U\:@ YE=q&^Ġ Z9^l92*r]ǪbMu˲ 6{v 0 g0Ȉ}ئ7 / o =  2 " p@ P:; ܡ=0p!x?_O >x0! L∀ާPOi+T G_hO 0؅mݠ -ۆM )I7a/חP)` L   (>~J @ !< -~lrW[ݸ->%X*qfҋ(hį)bù.eSQNZUYnWaŎ%[YT; `R;ͥ[]yKW2HR<2]$/K4D,)`x"1C`zgSLl w!f%kd= rFF:zI9 bkD2~dtn &8bXrOchei$R|aq(6uTRK5TTSURʃNuYS N KASgF, F`/n4ژG|̭L4-pW(, cPaIa>%uXBS[Ф#[bXoaГ,)߀6:aca0n#hUkfsy?TJXizl=jT^ѝ'UlxCP;J@;V:pWY 8-6҈ *Bi b4^D#(TfMG&Ѓ2'z B05`я(5HЄ571bFXoi[FM@'P#c%1& $6Re-UM,p$F@ R(F iP`@(IRI&%:XQRm>Ҍ61I%/_gbS .eG(2QΓͨUJzQ9) MI[Rc(SXњT"eaɱSC%jQZK\Ne]T!Mi1]j(UJJtY*WU2e`-RغV١5b%QzW`4Uu Zsf)]خ~U\amb>pUd ٴnֱkiM{Z>(I`A0IKbWBL? AZW%X3%uh #+ns6eŕH]w|m `ԁ}a]T[<}P@}k_xբϜ ȢP@9e% chBzV 8F*yz6хoV)h *^]0$ B1\pB X 0Z źFALtELƙ0@ %@+a;& ?t,U b" :oRao@v+2G GXDnJ1 J[-l"\:7 1>% ޸GRaXc MtUa9ͼ\sg ox чMl2LzlH:kdA G,8ъi(C+4,jJXhDG*DknKaIDT=mߚ-w-^[iHKET% ~0:\у?̔-Xo u +_! E@Rx@G`P [{Hӯ@vX17 >(H6es+4EX7(M{fAF+7Av8}@]8v*F0kcH;\p8?nKI,E4z؇><JDIz8` n OfЃxtHc ~@RnMPLaC嫊\p9`eJP$Fd`t$h4oi E2@n;dX1cAKdD Cwt 9A! 0"6v& 8' P -Mи xPȸB7Qw G#V`pU&A!gCR'v8>t8`";?z0T4Ѓ ao+Fz`\ O@4PcV@I E3HqtfeP@tOh|(&ftFk uhI &{7t\{{(J`oHƌ2z[c3`*B#lPŒ+ /67>ړ67(4XM Ȁ@Ɯ R t؇F[@rYo3@~`ɥ؂p`:h ]8oI 眇d8oHNTQnPIN(hK}K <Kj]H H0Y}H  PRQF;0oUM&\Sj`(;k=(+%>kM8/PSM@6w}\QR *PE/؇oPT\NpNl" Vx@VR\ ;iзi O }P,F{`z(Tv\ 9h4iPŊ0?e7{p5{`J h4B-TzHzAP$B]}XLouL*,H%_=hkBc>p/P%>-0RA#+%MZ `4q5܂~ }(}HdNh V󋷅6XV07PiłQHh؂}Okb$O E>Sb~hmػ3p95p;?x[mPνDCXOi\s{z({EGq[(55ĀENL` MXesi;7|Z'PHWE->Eԕ3P=._`]XKB(!4ೄ-D6+&U2f?Mh}pF\Ha@j8G;Zj2 [~PDXMrrL Cj02Qi` `}[@{Pe >{i`[UfG48XRd`FCdΆ-d< s^7|dZ BKxJX..lM%hiei{w2 XC($x&VAfe L`d@z;Vp熶eXKSGඑ&C0U{9I`x絇X"Pu`ˏvPfTf;V Pz`w, ">HTfGpFR 8%xM⥯̀.H4e9``] ٩+3uh-,pٲ 28**$`CnLfNYk# 2J&m Ak6{/(:1&&~nZ8 v]Q}Bϒnov-.c=uvn*oo^n"F,oo/ pOp &`:p Wwp0pnp *x*q?qOq_qoqqqqqqqqqq r!!? 񹈸%r&or'r(r)r*r+r,r,F o}+1s2/s3?s4Os5_s6os7s8s9s:s;s9.roF#??tDOtE_tFotGtHtItJs@W#GrpNt!(YHuU_uVouWuXuYuZu[u\u]u^u_u`vavb/vc?vdOve_vfvW8QoP&/mmvpvqvrrwsOwt_sowuwwvwywzw{{w|w}|w~xxxx/?xoxxxxx.X ipjl&$ y*y?y7yO_yyyyyyyyz/?zGzOz_zWzozzzzz_ uROrC -?{O{_{o{{{x {{{{|&tOx?||o'pǏ|˿|||_QOo|/ 4}o};(ۿ}}}}}~~/~?~O~_~o~~~~~~5}A/'?OУG@ "< Ä :qÊ-R1#G7~rȒ!ODi2%˕.Ul4oTiϞ> *t(Ѣ!,!,!,!,!,!,!,!,!,:L hH`EpÇL4ȑEQ`2$%U1@p"I`ʼn+N1?xBGXDˇBL&pL҉` ѳhӪ]KcfKOwuȤՓ'Ɩܿd.M)]8(JLyʘFμB[0rO:.N c˞MYY6{J ܶȓ?ӔʣKN6سknS^ËϽ{忿O;''tGg^ 6XwF(aVf( vPy("| hbxxbt)(cu-hl1ިq5d9($f=i$ZA$[E.dw!HFUJɥI~9ebfKginf?Isީzg3 :) g&*B(L|IC tPHL%@52f !B(Qxbޑ:I?pj,  "]9(GG:ZS  b9*\ ``K4D24  *Rrk.ZV 4,9g{.i5>:$#Հ}CjĩK1 Z@؞<2or՛DW@Ԋ?x?#>j0Mh%CõK좯C ؓԘ4`s?[ sQ& HƆs <(.S cpTȻPGc1|šìBZ?Pt' #Qv,9LC܄Lj5լC1:HB:ք7Y8Pbc7@.RZ xcm97ұ{Dva`P up GBc-- $J,Ttt@aJ,߰@KCѸtP@(HC (_hFd.8>B Ms@PaI@Pژ`3-4Zpc{ )S6LZ,`!Z`HAa'X,t|F΢4e#8BEe_ q`[>~iFp`0(lQ Ѱ0/ V($2@!8Az eCDnA\ Y(@ :Ob͡?Q΢9(`x1`Ԓ vPe/`"(H=8-hCZRd4'|o..>6\E4F<]ʸCc|ȳG1^12bzI24"8-RDpLP MQ0R `!j:TZGZnd0<'TH 1*8rk05, ʁ‚  9lG-yX- `BP)K|o*D`tG8W{UdxԅEH/`iĻrHQ$h BH ^ - } ɮ7GVu٦Oh Izp(`ZeG0nE=#<%8y.7qP>"X4"T LX:Nv'.[#MXbp1#4CCrc} 00 sK-"R+p!=Yfc0eLvW3n.Ȇ14G H0NoO;Q'BixO/HE@""E׫v @|O-DY0jezV#ԥ$X`3 !!ѧe %$}_̵x[xl>` (ȝʪO& ;ҐY-Vř-|Gd\[O•YaI2`d9)TrFvgc9C1(gah4 :E X@0f!6T !<'Ev.~}b2BM%h6r8$^1`z0"BhEH±!C#Z\؅^`b8bhMGhjl؆nqԠpXvxxz({H!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,!,N/ Hi0 :tŅ3jȱǏ CIɓ(S\ɲ˗0cʜ 6 ̹q͐'~JѣH*]ʴӧPA˜JիXjʕVtjD6ƪ]˶۷pʝKݻp}bM LxjD̸ǐ#KL^~_T̹og<̷t6Kg.j͠uظ vݘ}~b„3h^>7/xߝwվf9vN;t၁Cz/[m ҲߏW}mg k H9߂\yiIgoUei6TW Zv] HP^Eِq؁ Mf  -vBq 0U=,ĉ)hX^=Ȓ̑ u(e[4xb)D ;8:^S.؂ ? @c 0N Bٕ h\]7vC *hY0bDm0%^9ld/PDp`Q Ba0b 1h0Y: '[" j0k԰‡-9N;QC {},{n)آ8 MH EwErZEdJpBO1 Whˬ k.9x3#>hD 89U J7hC |[ ;txa #TDŽ;#" qp||pܷm6`{7BsO7Y4 (=~H厀rh-K=P3Q%XԂ$36yx*.8D/}}!,#m0{i3w!8Jr`P?Ʊ``("La%8!~beG[vºa9r2plgo*}3Zx)b|Y7jDxϻ"hQ~B h?hG; K dw @?a gdlR&5B 2 z6a Kbd$ɖlB j,hpG<ʡ 6$3ahq2m-6ϼ9ef ٬7bMb80d*3<\bA<9q52kd9SZpA ScLn$@A4}l-A[7Ya89 H%gLiP)B́Ht>;@c[%r $Jk!QZL@9D@шL@KbQ19E)0BG-@#ؑ4шmcNz@" -x ]E!.1#ml y 8DqfP ib\k8j.Vl1Pe@2^( &L@LE ϗK,qxAQ C!n@fdVYHvxdp@Y%<-dZvCˡ@0DlD\~BY;t ?H[(w%x@>-gh(1rl#6_rK"f E;9&,`w=1qt#0gwL ^ 0 xwSԠ ֗p\ Xs[d\h̬F&N&WsC21qx`ExqxllB} Xu+nIIo^$ ~)(jQ׾@a.v#AFr<JxFyq8cN;s 8Gn .ǦK;cs\-m"qh@nF ;3eRkkJ @a[ ;i)f \%c ha >?ⴅP ݕF-0DDjF>) Tc  @5qp` < U4uxI2K alLS0}( 20PݐK" hY` Ăh p =j  . =6HvkKPmNeSЀfZ[8$w^ =#- H .J0Tu pDQI 8 b mb@؇2[k^ Tc`_EP< lY"_fC=o_"C pXN/` P"#t#pp810W:I? 2@ p 3 ;!i(jh؎0 $Y?\2D~P%P`[whs42J O=PBH;hVmĠO B~K9M=p,6vF"c )HM@V5P c((Ho9q5@EJ#P .0}l}w-Z[o_ ` vPK>ruF{&ÆG2`dl0aƟvc5* $Lc3Ћ"M0a&U/ '/vDPbB03ivY@&!: :69` Ղu0$|Qi ^Z  )̉[6=Js @xǐߗqI`]E JzEH2'#Qo2PY,65 ې0 .Ѐ(PΠ @dJ6.w ds0 ` X}0b4H /-F(85>XWQ PG2jD_{1@ @2m.в epmG{: rW t$X]`_ڱjG%Vp NsPu` (tQz CtYq(M2pS P )PwS "n d `!` s`Jx8Ex"FqGqA֫cJ ou#6  "s Ĕ@ sIKP vtPFH&;M  f z90c .G+l[i=" S'0xKzJG9'&¨IPKO G0=BM (2`ĐLP݇m8 hk5J ?ֺZ˚9ik0Sb42` ) '~Z0 (X,`e@])e6TSb #`^0.`` x0npʓ <'B`??v Д#<$ % *2%C.0ǼI%sN5Ϙ&K; P V le {(<j ݕ˒o75+7äd0Hl`.&b )t2:N TO^zPjK k,`:PvqI hx )nW*5|5E` leKo,2,d@=p5"o"ó6$o`-2jp:8M !f^%u wm@$ݧFw{hk9]2nG& t' AZ@n3=deg 55d#@+ &(6P#נc qg?"Xm%b rXBF0|g_H9hh9-~x2P9KsIhIwnBVPW G# } X2i  `v@[ P O p$Y04N I (yS5P6@# ^ ?  7##@Z^0<)Q5@`Uyd [Ա-C ^fnZT k 0t>Ʋ3OP)vO^;^ט0CP=c 4H6` jY^%P; N):~@ a0[ls N RPN@x( 퉻Fm(G1k"!0 4$ Z94ILfV,S6(p3Z3.6_r-OI|K%y4WC3`wMT- 󄂸*5U@A[&T!-0.6GR4Gx2'2 d;ޒ{2 J,C(2ЧFH$9-\_-{T`GXO|&yw6"-, /.p_Ɵ0\#0%WC#Fv?3]ƜYfΝ=MhңMFm:ErAc/%ːuŅˊ<[xNce"S]Vr[Ęw -^?;G^}\V5Gw^ិ.smki`.>\);kA.k4 7ː1DG$ĊzkˆbȡE_lQ6d!mqҁe F!QE" 2 d2J)%ZQH D-rZ-@aI0dM7ߌ1%5a39,r;srH_PG8%5$F=́4Ӣ5N3 P}?`v<#Y (]tf ھPwtP]W: c$XAỹ.Cl 3;JxPCGKLzub3wvfpSI!+N]2= D(yb$QPV.g#hhA 8 A4Mi_!;4h,i]v$!z1 FB.kCq011ID 2wh=.S" |CS?~c,S(a`rC>g1WzsjIltЃ ɚY+܆Yb"(qJC˹" ;3:O=C:!8#H{" }qy7>]w$a 3b b) xhñd Vi,zegV+ xeq$ ?, ˽ 2?庿p|2Z( AZ :WJS&O|8$0V|s}KxC1K@I FL2FX %B&cU{0m/uLPx~؆1XzNNVÂJ>;,9~jg(,I(DLX8Dđ@|*;ܚcO IPa](|؅0hD2(CxМ=U`tOeY(uV?a xedm>5FFIH,p,rYK !GGc9 tVPdH;y{FCa/|0;\ȅ]]]O8)$#s11=PJЛ*{cHP9'@D.<ܧRsCus|5xeC3%'NHv)RX!Mx\Y(+(ϤI-./=mFz5hi#TR%r@10hQeGi>o@:HgH]0;@|у{B N(<%VA`1iHK`d]Pɰl|V;0A깗:|0(^ $Q3 z|S+"Gh1!sRJ 4Äx,u݅݅}LDY>S5: 6ͦqB:?S!,S@9GxaPB$^KRXƒAD2& DZڭN;c@]M]5RS4[UU NGU?UYu-u^C?(1~hgG؆|5 @%:Ĥ]3<m.݆}qХ2aa]=[w^:PY0F;j?5˥$X_Q*˞p0҉$};8䛏=;XG0+9@=,4eKX29=RXGĐI- $50Ih-֬Va<F(Px^J`xjߓ' dLsDM^M:HTE]]':\՘CⰡaA\8Fk5CYʇcإ.&|44 -+=0b:Џ<^q"R 'W gjX!^$1 XXڅ/yrRb1H:JՒe}+@339H9e/:%‚~,H!q`Pνy0LL)Z8:d1w-E3;PDoZ]v@$+5~1Z3(tYgmhkS(̧OR桼bZK+CYQD2@&v^ӼWJPk- GX98f0ÇatAO9(*bG]1sj4EHK|x[ |yh3c8aW]<~hge+Sp $1EQLT%~lQy#bƌA#Ms zWʗ3o9җ3n:h<:c!o^! K6,Y~,WorIގ#g_E7 yrr{ndQp74W_',Cq _("cP! (!}Syp#E!dM68dfa:Ve<5F/T(BT(tmt0O6r̝yڹ' fBy衇(*? %w8補z(v꧎zڱȤL&&j*Jkp hd(1j)&BRZꦨ,J;-ښk>,Z;.{tdֶ6 :+-N뮽R;+ew'?y(< C /Ph1{qL &)2-2"lr/ܱ*и*7a= =4E}t;|4M;4.\ KG}5Yc 4ae}6i#-pN%=7u-H7 >8罷p8K>9[>8 D{9~:ꩇ>#/رvlsP;~m@cN/B'h^! <;> īpWOW3Uu7?i{ .P / &86 J1,`s ЉI Q c(C !G00aV`#,-6 '6vqV"\*``^>8a `@ixF쀊' ,`&H"+hꈂT c0#+!D F0!I@9\\(qP$4ЄELj'< a݃'> =l1Z&~5'fqN16pO ]c g Dp +mE+8 N:ȃ'JtP00)LOE@A&7);=c x [إQ Rn::& uw; A ~G+ Ap1MR'!81T-(uXGB3ު-@[5(ʵ]1aUom*Am+;0 UE>G80FhpO_nEHթ92$ֱcnr8U@o$\ Лlg:NXE(Vt=AV`hT ϶X?Ё FPXH ~x @_X̴ T7yAsy05r QƙA h Ti)#F?Atgk>G+^APzmejMLB"x ~Pcp"$4)6.PT}"u ^)Oppj4X8`|m(G>$ `uI0яX0 > *4`9A$B8'1 0@gc?!@<]rlC->T,E0pC`®\'0?`( {b!auL4a ^c Pr< t? 6@!X`t-LMnz׽hN0{v!  򰍷ނsoK)v${Xc #1 8AP^ P> pcH~ 4XTjE p?H0[UCP4$` @5؃$ #X]BAZDVB?p`(_(8T dl=ol5C50d0M0),t@ :=!`A`5,? ̀9At5U2HEi^=؃*A@8,xC.,LC&^d3.HX' X@jUC,.P#T^@ف=.pD;?>C`a)9<:9)8'z,<<00T_0B2l5C(HL7C'xp1B 2cq ,*91  >̃ <|\dlCC, @d'pC)B |Ebd| Q?D=:̃!H | <?B NZ m@C>PJ8@ Ё?(b(=ߩA4" 8#3NN4Y@P9H8LJJ% b,'C:b]:B8 B,C?2:(L:p$ 8#@lЧ}~A>dg.pw@I>490 @}.}7#@A8)TC?<D 0P2&=\5eyɐ HaY:ƀ lA".<&e!þ.tg[Al%!AW='IM"M$ $A+G/EF 0:A:CH=PA5#gd$>iB) @Bkn8 hT;& L7C't@,d5B.0܃?s)e @;܃! `c,i0g -=$`>6X5XZ7B pd,iA(9x=C,k+ڃ.2'=b@ e~(/BN 0 -8A@(P<:D8^YB h:9L,:8Cl@B8R4$BT?}pM&d z&Bi,aNC2210>T9TMBhš4J@Nj2]CV7;(0l7L4¬'$$N2 l/2h:9$0A?zC842-?,$5d "&n:B 83Ѓ44C>$B+k@C?\A+VTM$=1P:Ẓ=B?A|p9@|L%|NB)^5< 8"=ܟ74 =xa6]:A0_>%fC'P*H^N\m2jmƒ(CpjnD @m+$ >X &`+m-y]8@'.0B)̃40`|'@`*(e&H ,C8tE<@3=|@: (+Q}2 p.nR OoN?<,@:p@+,@l@]%8X= Z'/N(7聓Y C.i 8C.CVI,J,(-$@r81,@B:P)xM|j,4@oa=CrH8 A:&H" &0Lr"P'#h @oe]x@D#-lDIG<_00$B>C"4@< g3C5t 4PF>.dU(j5A$@'C.(|)e;#rN!i)L:,@r5AlAJ:|AY-: Am@A Xu@e>lAS(L z~ ah` $PAx@ RAt= x8C)$Abmc[C?$LAp9-4!CmjH7l_ pot$n~-`CVVA ?H@NA&A]OLAv31Ahm=,t KM|w]-lc`w?Æ7Q B>viWCPm'm-$­|<'đ7 h JCP[]U1(=`B|ut&"<|Cw"g>ìl=]5(€2>(}%η#<@[94Ću DGw>C&YC =N<7g9U:p2B%:s>Ï#Qu:LBH;HM+\:xJ1j[?7$O?|<JC4tjbz/ZWC8xȐ4C:CU90xEIw@ A{Ŷh:{:'yzP: /)Ns5xR6:B8|93h٩ D:7P x)|&K2L\%@.$9<0|#(*X9Dor9N,fKvB'm&(@ هٓ2:89C&PLY'9'(ŀWT @/l}ҒJWO.9mU[$C?ؠLATMJ#"1Uw >@zC ,ϥ9|@ 0<4[A<A 8UWYa3CO8Q?*@< !F8bE1fԸ#  @ $°Ll<$dI^|:Vr?Thlj)1x@$PSM(A Doƕ;n]tłUABD ga 7eN9 ?YBĉ/T0&"oe˗1+F! # t*H`TU;AtPwx ,37) 0x H@hOX`D H8 <]o9|C$j1 }]H8cUgc `Y|' `Рkg|BSP("y8fLfCPzY"'. ąĞ Fz~\aGș88%r[5f}4 D谗ΐ`{ҁպ-/0~Q/(O@}C< Ԡ%0gc <> 5#`>PmoY|C1u@0bDp:,Mt#^/ b&'+H @d# 0bc0[L!`G>$A ߸*t!/Ѐ|"hIC5 @؅N *mXG8@."@ JpD,񉦃L1F"SD1 '!e?J l`R55S;ADtl;@$Z 4p~#2/tp JrI?%B:AtX:!@~:  KF<9(! ~O!AaAX@3Q<8#{c f2qh@IIk-cc8'qd4N?  |G'b`T*(STXУ' Dcc:a&M=a`>{(A/qO_:~8F(@(a "-)=aHBz0pMR+G:Ԁ} TP? \#M%tɱ?ұ~-<:q)pUUA a p@L#X1+~2  OXYp[N\L˜,€OCT`0` Vf@bqab;(*abThѭn'1 L`;(%t80G$E?QM BGAF*t,̠ ?Bx-iE`rP [afxT7Aя>CXi8{97Ap Bi.`y:tpYH3A k"*8BvLpa\BA!^\ !,-TP la!rZ&T*` ǂFf Bv `,iHDԇN 84@a8@ bva`n!N0e m)N۴! ~ v`N ٔ:AJc`PC~rl@jG d">FaqZA4q> ּ Hq[ vw`@Ct|l&DJbi [Nf₈ ᭠e:r4r`bR p`V桀 ၬ+0 ׬Ͷ J` !A& C0 X !  !'o!$F @0 O){ni < "RcXؒMh``r1 6>(" Mo~ A=zcsb` Ђ N0O 0wlrs7 qaJ gAvh! X`az`"#A$  [iPVaA$ %A"B!P-0D:Aa8 K8c(,%T`Bl a !B! ZaAH /%HB rhT.áa*vM@-*@$h>""R""N28A$B;AL-#~)kziVL"hVDaTS=i0W`H`_S=Sa*:CZZP{A@v xn!T:'h==% vZIa` &@!@KP&SFjv saC%f;D JGD)0AVhT C:( P@&!G n,`*@ %S RҚ$a@M``  afOt3MbMU!6` >8GΘ^ i7bv`! Oڼ  / xfڂR^xm75R!F &k<7 *x@N  EW! `F77w!s?@p FZ$a/H`) T@;7@JBXD nl@0OT$r($1VI`  X=$ !Z& B@lCZaP "(kvHAǶ`Au8A`iŖ@ Mw5HRցl7g(`$Dl-Cl`aĠ$N P8N6@@"7'F:SP`QXJ@x`a"RWX5l@  B@xbdt>l@(  Jv(?H wGaqz`ʕxw@v  Ha> Bta&HAwQ6}  * &`X~?y@V`Z A`uA^ΥAݔ0vfoFx`aALNbo3!V! l`nrXs  vi;`vn9hzԉ9"2zB >@2b!%azdhV&aҐ:[/ѩa!u6Ta*&tr bcaa(@A8!sדyd9HNPj,!q Ǟ*:@L7  !F>@$ H@ra!h H@{0a,AET@5xA'Sy]p Q%@{ 6uw[ U !Ui D(&)ƿ}:ł{v =XUʾ"D:av7;/hţRD[ǁ D$;FC ZR` X! A l:f@"fa"L@<J!΀SxBY`=ax $  XlODf r@54 f! b4C "v 2aA"W8H aAvn <+4RG X ` BUba0@I4<,l@@F Bl=} @u1ї#*1\%]@ t .b@==Cl=L*_d9l/"bbbFV"v N["h!f,`Rb|]#)*'~걾G`%6@5:iAD^`>H`4Xzh!W>"F^?>+:h~#n^[b,^$_ w2~ )6@vp>0>UG?#>y 5B+X b?#Dw.`>DD07P[hrAeE#?H~J ]0Ī"1C0Ҟ^c'"H6  <0…  1 +Z1ƍ;Vl2ȑ$KdAr̙4%R /j 4СD=4ҥLk5TMZE(b!Iձ ?H@C,ٵlۺ} 7ܹ?_P05ިt"=8Ō;~|p!'a᷀|a@#n*aլ[7\1(H$ha8 [ڮ R>< 8hܹ>_CȌP#8hC9L'BB0PІI:88_f {-@I,u h~^xRz4VѠC°I~0PE8 "ٰ4^'AO0xB6M`A"3`b<М 6\%J) )pXPW^\ O'NL ,Pvp|K.l (qeB!XxYK, A.( 6Tp*#  aM*0 ŊH$ 1 x F*Al(tSA#i3 *d`(e8 ; ҫ1$lC$lI!k(i L'݁^}0H8P^C{ac4K\1]`L4]` `2?86laJE#4l-,J!Pd0p 7PKCAD'O.¶{#'2J'_lpBde` x 7_l?ܺ`+oЩHgJk_kUrh t $G?`!c!*P~:E?q'Y$0qR| ;ʀ 0`ApGT+A1/ eX0U[.O]@ >$'nd> L @{TC@7 s%}0y9D UE Aф!Goas}$ 04Lv@'1~) `7a# 0HyJ=UG8X 9T3N=XBA /DVBQh@,@?Zaᕬ(x& @zA :+|'6[g5-hя~ 8i>qFTV MF>dH@ƑN: dcP-`l%,|-lA zt:?V"k 4p T!J >b7`@um0{{H:`nEUc9Pm? 6O|<,p7P D  #ie81 -BJ n;dp2@uPT@w@`o03Gp@ [0 .ɰfҐ9pQaw N/W5eJpjP@FcoAt8 5) 0 cP/Ppf_4@w04 M  0 L DwL C M$0gU L. VblA-I/Hw #{EGS>`u'`ȍ%}u :@x6~{0娌6;O' g Np Q 41$gK@0 i7ɰ t 00Ր@q"|HxPs۰ő X^<@3PsnQFc@ @p?@1`aFbp w)P _{X p E/ְP>ǰMP09(00. P `0HIs{[ @0 TP[ ܰ ְ չ @{c 0} p P i F`"PF_0HЌ ɐܥ;@0'sް 뀕[@7b3p+ D u7@p0 P@i8 CTЙ " Z! : )e+bYt95ېXP8^P$  @AzhXɐPJ^ aZ8 9 ,)ii u0P^ yM 49(pxp-7-PhG}t8 ;Ԁ`zP ƪOB# ~"ʭUGpPתy{8JjȠTtmqP %DP0@1i &@5+po1#Ǣ tP ["ңp_@`0Qaa-0'3jOR &mA1c)4 00\^7[ p/PG%/P hviSo`HQ kf [P6xZ^ U@ *;#LkSч0 W G1a{@ pPpTp`p [S2 C ![ N(k Fˆ-mzK-P8 &`00(P+icO1`$Pi$Y[p/A#u#@; Ob@F K#0 T;@YzP;k50Ne cx0 9pWP4PEuP M `0S0a@4PR`[bʐУ rtp<DF@1 :`#ÓP9` 3Tf/@pj `I P|"# Ec) [@/0˴|ld˺hqQ SK X@c@`~lb0 `SL@F1)!)KwGZ۰T@_p%/qNF[(:_A+@c@_?H_\% c_@Xkj4ip0@h_0 T Of '}ZW|bap[ǓJNd@W BC bp;lmqb@X t Lx ,+`wW T@ gx IM'pD[r5P & sMZg; .p:/Pc#ta<0,% kh`p@v )LeP4Ʒ) JA Pp;nO p`92 B8u_w]k[ jk̦g$ 鮕 趔 R4ވ/ Wa~@$@^0߰0 c 0@ b> `p.` ^e`:͚Ŋ p*O V2g 6EI!': {` ~PD 1uЬPA1@ r T/p1Ϣ6`(b8: -u ^_ D u'1P ֐P Nz0 u.EE: D^=Q^2߰ `:/U)BaUr_DOh:a PДnHq$ Xb6@%HͬO4`/p%j!@9@] P6i@@#[BQ/tĿVoʏ}A .dС 8HDti6>H8"hl{HBrX,(Q0MtXPC(]`aSQNZU ,Р  T.< "zpJ3jP©UyKƃ)(ZAÖ()A°60E 4Vp XL}Q*KuiL }qWm'Ntp?'^qɃfđXM\a/0Va(;T]Rig}(BlpEv`p!Fh@<迧FxOA#@"j*\h;ˎC'DP9STQE"a ǟ}ҡdjHIb'Lpl1Gt)#rʃJ,-2S/;—o!:>аL%Mrc7 *NO@tPB 51UAm@ :Р.&4JҼTRK5TTSmQV[5RT,IURAk%]{fTVFT^ Mejf[6Qm*vv} VA*^e܅vlva^[R!t7}RYqz(ifQ\bFpAr gmtB9h =$…MxЃ`"aA1Vc K#oe v!C"TrBG(ނ x1 ΐDYH`Đ*$ƞf c[0$usPtУr+WB f{N}g]zP a1 s{a'j#؉l!X} }G(ᆌ `c"7ԂI@I;@-;5$+P lp G+ `(Bh[ h.2` :؁ `1Fk|wT(hx4 {L sBZ<(c}7+(r\aЭa, 4h @B) $ MSAD:]|EpG8W3/ A+H"`Ƈ`L D(>q  ZG,q#`h4 a+ 琟jcG(Bc >ؒC#$a;FEC0-4<"*X7яY8g&A8>ۀX5*۩x[h #(rt@q +x 0{p@ӡ pY`uR(G`Sbi` P@yHGP. }xF=s9PRWbBx^ж-hS&<(ueO|##YZX҃NxvEXh56Xc3pa"=Ӛ38ۿ0y؂ }I=Ȅ cĩ*X( CHo0k좿u8`vF NXU(UHGUPAX؇VPh܅@;uDU@Ǻځ4@_'Aءa؇RxAAj2P"0HnH ԲBXۻ Xϡ9o(#|!ƏronAz:螚` =xAN"P=:v=7g؇IiG{kYtfxP|.G ԋhJ- Ph$?Czh/`[8tdh;|={GC"OZ-׌HM0HК>)aӢ=A{x@&:zʉ #VIJH86vNPsxJyS[h~LNL&(A>A t #DZ;A  ii/dhAJp yssʨÀ2؜QXKȕ HӅIy8\-!rO1+~(ĂUv38 b0~D@)& jR8ǀlU0 i؇X@XA0RO9t,V slVy/dp0#XPX؇]詋.C89Xȇpި TzH]0t[ E2P+p VH)LP H(X ؃`\86@]VrRNȌpx-4Xf$p x)c؇j 8 o+XLx+<`~ŀxx((a(]=!b!VYp},av8a"b e=@.1O:Nx)0=| (Ä5܄a']@iU0HHc[Xuy]P(.fNkh-00f`Lɋ9ތ-RxdMe8##*:x0d`jzHXXjhd<؀cp]H`]^x:dQC`O8(-`}RXiH2e]8pcPQIr]] <<,ȅxPfoK=DkSt1I`L 'j~djO<C/hfپj(h7(H6\X hA#`"N 0)688:.RIȃ*؁؁Q((8#-p8O'Wp IHP:ܻ@08?-* '8^m0ȃ)rQ0(5p#I Hp<pnL(w/# Q4A09g-(s>stDBӠwhc:(#*=C4-oNЀ(&Z|2#(hБx `UL)W&OVWzGGQ `+2(3# &giOIY IG Ё,wo vu^whv|iJޕ@hwHxb  k9W= (y|Fx p@8L)xTg Yr@ \7xXH`rp(7 OyNjRa_oLz}9?{{W'x{{{j{||1!|O|_|C1|2a|ȏ|ɟ|q0||||}g|_?}O/Q}}دQGد}ۿ}}O~/B ~0~_~g~x~~~|'~/W__O_!p "Lp!ÆB(q"Ŋ/b(ǎ? )r$ɒ5Lr%˖._Œ)s&͚6o̩3ɞ>)t(ѢF"Mt)ӦN*UӪVbͪu+׮^YN +vײfϢMv-ۯcm+w.ݺv] woؼ~,x0a|-x1Ǝ#E,$ʖ/cά"7-z4iO,z5֮_z6ڶmF}{7޾>{8||9΍&|:5F|};ad}<#6~=/~|ϯ W%"c%ؠXRXI8r@塈#:T$"&R/bT0Xw2&f;>cP<p>$GFdOH2٤{J䤔SbeTbbV_%Y`Y&[b~fkzfHlUn$wFFGxgNz駠(G"(vFhRZAZij飜z*Z*jڪZ딴ښ++l [*:J[Zj-}z.{[.y䚛.w.u/s[/qڛ/o/m0k \hf+pe ;1cK\`[qjܱj{r[ \2Z$rr},3a(\3S4ۜQ8ܳP<M@ ]LDtKH+4JL;EPK]u0[uRTk5B\{X]M`5ig6Uvq4u'}7Ew}3<85~x̉+2㍧8%K>yȕ[1g9{yġ0'|:z/;;~{.ァ; ?|-g<:|K,'{=j}{+:>~*>?)oJ6vy FX:q&HAYˠ)^ ԜGعt(LVBӹ YG8wXw@ HDK&PTؼ*ZzXEy G2~hX6}pHGˣ>ԟ ?CR_KH9/$UJ*$&7KzrP %FIgJ*dVB蕰,+g 'YḀv۪0b1%e:3>Ќ渚I[YN6n8ǹlSHLuw;r9~Ӓ I!#2B{ІMB'!Zt6ͨk6сU Hi9В:ʣ(=IWzT@*ffJɩNӞ&@eIJUHMj5[.TgժX%VzNzLT Jgv4Z4ֶ'pm[*LrͫqWe`:bKQ:VG~KLYɬfV峠uhG{3˚4MPЬ l=嶸݉nw'2 ـK 3Ir#DPеq[Z,ͮ`ݔxzxW%ykw"Ki~j6U&|,M7r p9,a? 6 Jl8*^1[821kl8:1{9B2l##9.'C9R2l+c9Z2/9b3l39j^379r=d=q#z3?:Ђ4 mC#:ъ^4GC:Ғ4+mKc:Ӛ4;gI%"Ԣ5KmS:ժ^5[W:ֲ5km[:׺5{_;6MjIU ^6gC;Ҟ6mkc;6o;7ms;^7lI 7m{;7<8 n#< _8C<8+No'9`T Jn<*_9[<29kn<:9{=B:ыn#=(C=R:իnc=Z:׻=b;n=j_;=Pgn=z;>< o#>_<C><+oc>xDσ>=Koӣ>_=[>=ko>={?;B=?_>C?ҟ>o^R>??{?_??G?Ԡ9! ?` %P"`'x%B`JR`Z I Q9Ѓ7܃?;\` N?` `I'?9xC::A_a a"a*2a"?8aJRaZbajrazaxp97`?'aaaab b!!"b"*"2b#:#Bb$J$Rb%Z J?p &;B=*b++b,,b--b..b//c0?#/c11"22c3:3Bc4J,JJ.p":,HB:C,8c99c::c;;c<>c??d@ @dA$=V5~6R7c B 6 FdEZEĂB4BbdHEdIIpBzC#JLdMH2A'CG6dOMV I eQQ^&)ڟ$:B"eUZUbe _AAWfeX%X%Y2JZe[[\e]%]^e_^^e` `%`a"fbZaX__d^ 9&a&n}_fd_bcž##_7C8.9(C;<΃C,H 41gɁ$(- B3C2B3g.d->8C.`8&у?W>B2~2؃?CK"17x-4Bv T> >| “C2A+9BkcP봊>cev%k,'eA8溎#ޜnꝶ=ïAz+~k듺9jҁ*c "$ d:Ă 4k`9~&ff+>ik뮒+|A+!쭖kjj2kf"l9mȎ#pځ|l굧'8+Ín#rc8C.H@l ʒA.؃^kæ̞ʎ6s*'U+UJ=#,A)~H? VB8C:C2x!p9莁Anb5$"_&#, :|0L:x$ȁB8Ă4:$(9CC6lA8,C(ځ'x5~^N7$7nR09H"e(V17n~B5$/9h#k)7XC,|oyoqʁ6C20%|-rXB'p r`ڦ7¾pC?dmn =$4$51A2CzA.j&T2 - 5n58'4k04`7 0rW6.87A{>$G*jj*b*:w`)h2 -=8~=xzzP*:p,7ہ5^84>P玞bA,=3A(=(B:5H9:Az;4C?xcb$B>Bhj:`:P8 2H33OlVG>r+>x4 %D85Aĺ(9;C.=,=)US-'H?~A3'I=C[#jǭnT~N3(797X2 mOB#.Ln Õ6C 5n¡"j:H.1h7:A#,P's.BvSB,Pqp/U;fsK,$Ûv_f{#4$'HBӁ?X'H)"'2#=)H%q?CtKv25%`r΂$0KBϠ2+ HB(|C.%<W=0hmg. $pTJ# 05v4r2?x',sr&HBJi>u>!`$H!(t.-%HB"ᾩ `ꪦs7C>B5 }޷=s^2>ssA+7'2!d+$B>55yJu.xfpj262lNBHA.T5C)P,H5)l1:xvv2|A,.7zqs4C8,*)"uu_)7!%d=d3d 6K-{=7j4A4KÍAgۓJj.y]cPC?y`ڃ'A ʳfWYz闱I4^zQ!Ia й5!˷\!9:jl69 I[pJZLЃG\ccC3H)1 g]ΐrE?: I [&|(,ܒ.JPce SYDId@`L v#l "#8;GvByD9=+daGE[(dRPҢT1cAo g4 c=faP#ةr GưUՐdcVUd(ƚ$#*Kne3 k& @9 CYǓ4(ܲJ'a%$!VnUAJfݭΨ\ |2ԃΐ {C3K+v$$C$EҐ <\D- 3 ,Ijh40!5P83&M8:Q"(YjӦY` ȉ֦c ٚCFvCt$:0-oh[DK:mgZ{RJYY^fc$gPra I*)J5nq I)gDZR@Ɏ]"$\O.\R%/;NmuQ1t8Ԟa9,䣡[N:(ch0;|ehE3O}qsafQ ]HWAOI1Z ]+vXI N&%z$Oၡ8!bL p!R\䂌|olv;hOʘ$g}C2UcRv ms vbEED Q;ZDp ۃ2gӮchxБPw(=rQ dhei.UbLI;*`;ML,X [b!rb]y'qB);< L:CQ£p<6lCu@2ҕJH+#-dXDNzXj1LPhF$&I8($ZY@b!=7Zh8)0v,iAMy5 eĹ9͹nbF+nbV,q!+ܒ3od\TF -D>!$BwtB"{`vhHYG<=S,hAU a?;<` @@ @/K_ҒJ']j@#/!,!,!,!,!,!,!,!,!,!,!,!,!,!,><.D H*\ȰÇ€ŋNȱǏ CIɓ(S\ɲ˗0cʜIÉm4sϟ@ JѣH*=i/Txƒ76/Z ;2,كZs VJ86. )2Lt-[bŋw +<.`Ӵ+y˘3k̹sDMITD$XI*3D"Ȯ%蔄 'N$2kl"Ha$d\NWX1"D  ސD,-! Y ]ul (h@4$DMxR,=:x*蠄~)Ll >^@ ;8qfG+A=Yi@?TD=W S$JH$[L@ |V+ =iGT =Hf.ħUk =Ħ A6bN;Cxj櫯QHp-Bd \ H `1Rp0ABH@H n001@TS4H&T?X 0 L  8P!г)kTSDx@ !PE Vx0 !`@ uM*Bٱ%4b9E5 >MلW{l8b/D2Rع.U K>|܅S 6xS  ʞ-|<Ё 75 +l5KX P`.twĶ<R  $VXP-eGX,մAPQX5QRpB/l)%7ax|0D Zp `4X> op Qz CNNlXp(p.A|8VI|4 DB8j7h X]4jCAdP`VqAҀ9(^tTy&P7ұCo|e @