sequoia-git-0.5.0/.cargo/config.toml000064400000000000000000000030061046102023000153670ustar 00000000000000[resolver] incompatible-rust-versions = "fallback" # The Rust Crypto crates are *very* slow when compiled without any # optimizations. Turn on some optimizations. [profile.dev.package.aes] opt-level = 2 [profile.dev.package.aes-gcm] opt-level = 2 [profile.dev.package.argon2] opt-level = 2 [profile.dev.package.blake2] opt-level = 2 [profile.dev.package.block-padding] opt-level = 2 [profile.dev.package.blowfish] opt-level = 2 [profile.dev.package.camellia] opt-level = 2 [profile.dev.package.cast5] opt-level = 2 [profile.dev.package.cipher] opt-level = 2 [profile.dev.package.cfb-mode] opt-level = 2 [profile.dev.package.des] opt-level = 2 [profile.dev.package.digest] opt-level = 2 [profile.dev.package.dsa] opt-level = 2 [profile.dev.package.eax] opt-level = 2 [profile.dev.package.ecb] opt-level = 2 [profile.dev.package.ecdsa] opt-level = 2 [profile.dev.package.ed25519] opt-level = 2 [profile.dev.package.ed25519-dalek] opt-level = 2 [profile.dev.package.idea] opt-level = 2 [profile.dev.package.keccak] opt-level = 2 [profile.dev.package.md-5] opt-level = 2 [profile.dev.package.num-bigint-dig] opt-level = 2 [profile.dev.package.ocb3] opt-level = 2 [profile.dev.package.p256] opt-level = 2 [profile.dev.package.p384] opt-level = 2 [profile.dev.package.p521] opt-level = 2 [profile.dev.package.ripemd] opt-level = 2 [profile.dev.package.rsa] opt-level = 2 [profile.dev.package.sha2] opt-level = 2 [profile.dev.package.sha3] opt-level = 2 [profile.dev.package.twofish] opt-level = 2 [profile.dev.package.x25519-dalek] opt-level = 2 sequoia-git-0.5.0/.cargo_vcs_info.json0000644000000001360000000000100132650ustar { "git": { "sha1": "6b0e9687e78ca334d9b2ed810dec1e458a1bd4cd" }, "path_in_vcs": "" }sequoia-git-0.5.0/.ci/all_commits.sh000075500000000000000000000022711046102023000153720ustar 00000000000000#!/usr/bin/env bash # Test all commits on this branch but the last one. # # Used in the all_commits ci job to ensure all commits build # and tests pass at least for the sequoia-openpgp crate. # NOTE: under gitlab's Settings, "CI/CD", General Pipelines ensure # that the "git shallow clone" setting is set to 0. Otherwise other # branch are not fetched. set -e set -x # Use dummy identity to make git rebase happy. git config user.name "C.I. McTestface" git config user.email "ci.mctestface@example.com" # Make sure the gitlab project is configured. if ! git describe --all origin/main then echo "origin/main is not present. Configure the gitlab project (see .ci/all_commits.sh)." exit 1 fi # If the previous commit already is on main we're done. git merge-base --is-ancestor HEAD~ origin/main && echo "All commits tested already" && exit 0 # Leave out the last commit - it has already been checked. git checkout HEAD~ git status git rebase origin/main \ --exec 'echo ===; echo ===; echo ===; git log -n 1;' \ --exec 'cargo test --all' && echo "All commits passed tests" && exit 0 # The rebase failed - probably because a test failed. git rebase --abort; exit 1 sequoia-git-0.5.0/.gitignore000064400000000000000000000002341046102023000140440ustar 00000000000000/target *~ spec/.refcache spec/metadata.min.js .dir-locals-2.el spec/draft-sequoia-git.* book/book book/examples/gpg book/examples/frob book/examples/intro sequoia-git-0.5.0/.gitlab-ci.yml000064400000000000000000000117031046102023000145130ustar 00000000000000stages: - pre-check - build - test - deploy include: - component: "gitlab.com/sequoia-pgp/common-ci/sequoia-pipeline@main" # Disable the alpine job as `gpg --import` doesn't work reliably on # v2.4.9 of Alpine's gpg. # # See: https://gitlab.com/sequoia-pgp/sequoia-git/-/issues/75 # # Remove the following (until END) when the issue is fixed. alpine-openssl: rules: - when: never all_commits: needs: ["linux: [nettle, trixie]"] # END variables: SEQUOIA_CRYPTO_POLICY: "" NO_SEQUOIA_CRYPTO: true RUN_WINDOWS: false container-build-push: # Official OCI container image. image: quay.io/podman/stable stage: build tags: - docker - self-hosted before_script: - echo "$CI_JOB_TOKEN" | podman login $CI_REGISTRY --username gitlab-ci-token --password-stdin script: - > podman build --no-cache --file Containerfile --tag "$IMAGE:$CI_COMMIT_SHA" . # smoke test - podman run --volume $PWD:/workspace --workdir /workspace "$IMAGE:$CI_COMMIT_SHA" sq-git policy describe - podman run -e CI_DEFAULT_BRANCH=$CI_DEFAULT_BRANCH --volume $PWD:/workspace --workdir /workspace $IMAGE:$CI_COMMIT_SHA /usr/sbin/gitlab.sh | tee smoke-test-report.html - podman tag $IMAGE:$CI_COMMIT_SHA $IMAGE:$CI_COMMIT_REF_SLUG - podman push $IMAGE:$CI_COMMIT_SHA - podman push $IMAGE:$CI_COMMIT_REF_SLUG - | if [ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ] then podman pull $IMAGE:$CI_COMMIT_SHA podman tag $IMAGE:$CI_COMMIT_SHA $IMAGE:latest podman tag $IMAGE:$CI_COMMIT_SHA $IMAGE:$CI_COMMIT_REF_SLUG podman push $IMAGE:$CI_COMMIT_REF_SLUG podman push $IMAGE:latest fi after_script: [] environment: name: smoke-test-$CI_COMMIT_REF_SLUG url: "https://$CI_PROJECT_NAMESPACE.gitlab.io/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/smoke-test-report.html" artifacts: paths: ["smoke-test-report.html"] only: refs: - /docker/i # refs containing 'docker' keyword - tags - web - schedules - branches variables: CI_REGISTRY: "registry.gitlab.com" IMAGE: "$CI_REGISTRY/$CI_PROJECT_PATH" pages: stage: build image: jampot.sequoia-pgp.org/sequoia-pgp/build-docker-image/trixie-pandoc:latest before_script: - sed -i '/Components:/ s/$/ non-free/' /etc/apt/sources.list.d/debian.sources # xml2rfc is non-free - apt update -y -qq && apt install -y -qq --no-install-recommends weasyprint xml2rfc ruby-kramdown-rfc2629 - if [ -d target ]; then find target | wc --lines; du -sh target; fi - if [ -d cargo ]; then find cargo | wc --lines; du -sh cargo; fi - rustc --version - cargo --version script: - mkdir public # Template - cp -r webpage/* public # API documentation. - ASSET_OUT_DIR=/tmp/assets cargo doc --no-deps - mv target/doc public/api - echo "/sequoia-git/api /sequoia-git/sequoia_git/api/index.html 302" > public/_redirects # Man pages. - /tmp/assets/man-pages/man2html.sh --generate - mkdir public/man - mv -v $(for f in $(/tmp/assets/man-pages/man2html.sh --html-files); do echo /tmp/assets/man-pages/$f; done) public/man - echo "/sequoia-git/man /sequoia-git/man/$(/tmp/assets/man-pages/man2html.sh --html-root) 302" >> public/_redirects # Specification - make -Cspec draft-sequoia-git.html - mkdir public/specification - cp spec/draft-sequoia-git.html public/specification/index.html # The user manual. - mkdir root - | OUTPUT=$(mktemp) if ! cargo install --config opt-level=1 mdbook --root root 2>&1 | tee ${OUTPUT} then # We failed to install mdbook. It might be because our # version of rustc is too old. Parse the error message and # look for: # # error: cannot install package `mdbook 0.5.2`, it requires rustc 1.88.0 or newer, while the currently active rustc version is 1.85.0 # `mdbook 0.4.52` supports rustc 1.82 awk --version VERSION=$(awk '{ if (match($$0, "`mdbook (.*)` supports rustc")) { version=substr($$0, RSTART, RLENGTH); split(version, a, "`"); version=a[2]; version=substr(version, length("mdbook ") + 1); print version; exit; } }' "${OUTPUT}") if test "x${VERSION}" != x then echo "Trying to installing version ${VERSION} instead." cargo install --version "${VERSION}" --config opt-level=1 mdbook --root root fi fi - find root - root/bin/mdbook build book --dest-dir $(pwd)/public/user-manual artifacts: paths: - public pages: false pages-deploy: stage: deploy image: jampot.sequoia-pgp.org/sequoia-pgp/build-docker-image/trixie-pandoc:latest script: echo "publishing" artifacts: paths: - public pages: true rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' sequoia-git-0.5.0/Cargo.lock0000644000002543650000000000100112570ustar # 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 = "aho-corasick" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", "windows-sys 0.61.2", ] [[package]] name = "anyhow" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "argon2" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" dependencies = [ "base64ct", "blake2", "cpufeatures", "password-hash", ] [[package]] name = "ascii-canvas" version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891" dependencies = [ "term", ] [[package]] name = "async-trait" version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bindgen" version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ "bitflags", "cexpr", "clang-sys", "itertools 0.13.0", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", "syn", ] [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "blake2" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ "digest", ] [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "buffered-reader" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db26bf1f092fd5e05b5ab3be2f290915aeb6f3f20c4e9f86ce0f07f336c2412f" dependencies = [ "bzip2 0.5.2", "flate2", "libc", ] [[package]] name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "bzip2" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" dependencies = [ "bzip2-sys", ] [[package]] name = "bzip2" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ "libbz2-rs-sys", ] [[package]] name = "bzip2-sys" version = "0.1.13+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" dependencies = [ "cc", "pkg-config", ] [[package]] name = "cc" version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", "libc", "shlex", ] [[package]] name = "cexpr" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ "nom", ] [[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.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-link", ] [[package]] name = "clang-sys" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", "libloading", ] [[package]] name = "clap" version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", ] [[package]] name = "clap_builder" version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", "terminal_size", ] [[package]] name = "clap_complete" version = "4.5.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c757a3b7e39161a4e56f9365141ada2a6c915a8622c408ab6bb4b5d047371031" dependencies = [ "clap", ] [[package]] name = "clap_derive" version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", "quote", "syn", ] [[package]] name = "clap_lex" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "clap_mangen" version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ea63a92086df93893164221ad4f24142086d535b3a0957b9b9bea2dc86301" dependencies = [ "clap", "roff", ] [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "core-foundation" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "core-foundation" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crc32fast" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", "crossbeam-queue", "crossbeam-utils", ] [[package]] name = "crossbeam-channel" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-common" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", ] [[package]] name = "data-encoding" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", "subtle", ] [[package]] name = "directories" version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ "dirs-sys 0.4.1", ] [[package]] name = "dirs" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys 0.5.0", ] [[package]] name = "dirs-sys" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", "redox_users 0.4.6", "windows-sys 0.48.0", ] [[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 0.5.2", "windows-sys 0.61.2", ] [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "dyn-clone" version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "ena" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" dependencies = [ "log", ] [[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 = "endian-type" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "enum-as-inner" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ "heck", "proc-macro2", "quote", "syn", ] [[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 = "fallible-iterator" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fallible-streaming-iterator" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fd-lock" version = "4.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", "rustix", "windows-sys 0.59.0", ] [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixedbitset" version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] name = "futures-channel" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", ] [[package]] name = "futures-core" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-io" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "futures-sink" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "slab", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "gethostname" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix", "windows-link", ] [[package]] name = "getrandom" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", "wasip2", ] [[package]] name = "getrandom" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" dependencies = [ "cfg-if", "libc", "r-efi", "wasip2", "wasip3", ] [[package]] name = "git2" version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" dependencies = [ "bitflags", "libc", "libgit2-sys", "log", "url", ] [[package]] name = "glob" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "h2" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", "http", "indexmap", "slab", "tokio", "tokio-util", "tracing", ] [[package]] name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "foldhash", ] [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "hashlink" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ "hashbrown 0.15.5", ] [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hickory-client" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "156579a5cd8d1fc6f0df87cc21b6ee870db978a163a1ba484acd98a4eff5a6de" dependencies = [ "cfg-if", "data-encoding", "futures-channel", "futures-util", "hickory-proto", "once_cell", "radix_trie", "rand", "thiserror 1.0.69", "tokio", "tracing", ] [[package]] name = "hickory-proto" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" dependencies = [ "async-trait", "cfg-if", "data-encoding", "enum-as-inner", "futures-channel", "futures-io", "futures-util", "idna", "ipnet", "once_cell", "openssl", "rand", "thiserror 1.0.69", "tinyvec", "tokio", "tracing", "url", ] [[package]] name = "hickory-resolver" version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" dependencies = [ "cfg-if", "futures-util", "hickory-proto", "ipconfig", "lru-cache", "once_cell", "parking_lot", "rand", "resolv-conf", "smallvec", "thiserror 1.0.69", "tokio", "tracing", ] [[package]] name = "http" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", "itoa", ] [[package]] name = "http-body" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", ] [[package]] name = "http-body-util" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", "http", "http-body", "pin-project-lite", ] [[package]] name = "httparse" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2", "http", "http-body", "httparse", "itoa", "pin-project-lite", "pin-utils", "smallvec", "tokio", "want", ] [[package]] name = "hyper-rustls" version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http", "hyper", "hyper-util", "rustls", "rustls-pki-types", "tokio", "tokio-rustls", "tower-service", ] [[package]] name = "hyper-tls" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", "hyper", "hyper-util", "native-tls", "tokio", "tokio-native-tls", "tower-service", ] [[package]] name = "hyper-util" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64", "bytes", "futures-channel", "futures-util", "http", "http-body", "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", "socket2 0.6.2", "system-configuration", "tokio", "tower-service", "tracing", "windows-registry", ] [[package]] name = "iana-time-zone" version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" 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 = "icu_collections" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_locale_core" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", "tinystr", "writeable", "zerovec", ] [[package]] name = "icu_normalizer" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", "zerovec", ] [[package]] name = "icu_normalizer_data" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", "writeable", "yoke", "zerofrom", "zerotrie", "zerovec", ] [[package]] name = "id-arena" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "idna" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", "utf8_iter", ] [[package]] name = "idna_adapter" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] name = "indexmap" version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", "serde", "serde_core", ] [[package]] name = "ipconfig" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ "socket2 0.5.10", "widestring", "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", ] [[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 = "itertools" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jobserver" version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7e709f3e3d22866f9c25b3aff01af289b18422cc8b4262fb19103ee80fe513d" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "keccak" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ "cpufeatures", ] [[package]] name = "lalrpop" version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501" dependencies = [ "ascii-canvas", "bit-set", "ena", "itertools 0.14.0", "lalrpop-util", "petgraph", "regex", "regex-syntax", "sha3", "string_cache", "term", "unicode-xid", "walkdir", ] [[package]] name = "lalrpop-util" version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733" dependencies = [ "regex-automata", "rustversion", ] [[package]] name = "leb128fmt" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libbz2-rs-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libgit2-sys" version = "0.18.3+1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" dependencies = [ "cc", "libc", "libz-sys", "pkg-config", ] [[package]] name = "libloading" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", "windows-link", ] [[package]] name = "libredox" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags", "libc", ] [[package]] name = "libsqlite3-sys" version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "133c182a6a2c87864fe97778797e46c7e999672690dc9fa3ee8e241aa4a9c13f" dependencies = [ "cc", "pkg-config", "vcpkg", ] [[package]] name = "libz-sys" version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "libc", "pkg-config", "vcpkg", ] [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[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.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru-cache" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ "linked-hash-map", ] [[package]] name = "memchr" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memsec" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c797b9d6bb23aab2fc369c65f871be49214f5c759af65bde26ffaaa2b646b492" [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", ] [[package]] name = "mio" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", "windows-sys 0.61.2", ] [[package]] name = "native-tls" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", "openssl", "openssl-probe", "openssl-sys", "schannel", "security-framework", "security-framework-sys", "tempfile", ] [[package]] name = "nettle" version = "7.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44e6ff4a94e5d34a1fd5abbd39418074646e2fa51b257198701330f22fcd6936" dependencies = [ "getrandom 0.2.17", "libc", "nettle-sys", "thiserror 1.0.69", "typenum", ] [[package]] name = "nettle-sys" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61a3f5406064d310d59b1a219d3c5c9a49caf4047b6496032e3f930876488c34" dependencies = [ "bindgen", "cc", "libc", "pkg-config", "tempfile", "vcpkg", ] [[package]] name = "new_debug_unreachable" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nibble_vec" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" dependencies = [ "smallvec", ] [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", ] [[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 = "openpgp-cert-d" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd47b0b6df1022ca8a9a06791261c3153028abef191fe53aa326b7f443f2d6" dependencies = [ "anyhow", "dirs", "fd-lock", "libc", "sha1collisiondetection", "sha2", "tempfile", "thiserror 2.0.18", "walkdir", ] [[package]] name = "openssl" version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "once_cell", "openssl-macros", "openssl-sys", ] [[package]] name = "openssl-macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", "pkg-config", "vcpkg", ] [[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 = "password-hash" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ "base64ct", "rand_core", "subtle", ] [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", "indexmap", ] [[package]] name = "phf_shared" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "potential_utf" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] [[package]] name = "ppv-lite86" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn", ] [[package]] name = "proc-macro2" version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radix_trie" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" dependencies = [ "endian-type", "nibble_vec", ] [[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", ] [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom 0.2.17", ] [[package]] name = "rayon" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[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.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] [[package]] name = "redox_users" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.17", "libredox", "thiserror 2.0.18", ] [[package]] name = "regex" version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "reqwest" version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", "encoding_rs", "futures-core", "h2", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", "hyper-tls", "hyper-util", "js-sys", "log", "mime", "native-tls", "percent-encoding", "pin-project-lite", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", "tokio-native-tls", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", ] [[package]] name = "resolv-conf" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "ring" version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "roff" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" [[package]] name = "rusqlite" version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "165ca6e57b20e1351573e3729b958bc62f0e48025386970b6e4d29e7a7e71f3f" dependencies = [ "bitflags", "fallible-iterator", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", "smallvec", ] [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", "windows-sys 0.61.2", ] [[package]] name = "rustls" version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "once_cell", "rustls-pki-types", "rustls-webpki", "subtle", "zeroize", ] [[package]] name = "rustls-pki-types" version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" version = "0.103.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] [[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.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "schannel" version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags", "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", ] [[package]] name = "security-framework-sys" version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "sequoia-cert-store" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e9640848aee656020e6ff817ca23805bf42d116cb228ec50eacdd7ec93bf9f2" dependencies = [ "anyhow", "crossbeam", "dirs", "gethostname", "num_cpus", "openpgp-cert-d", "rayon", "rusqlite", "sequoia-openpgp", "smallvec", "thiserror 2.0.18", "url", ] [[package]] name = "sequoia-directories" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b01dd48960c5cf8617ab77e5c9f8ebeb55a1d694e3eabf830fa70453ffa637d5" dependencies = [ "anyhow", "directories", "same-file", "tempfile", "thiserror 1.0.69", ] [[package]] name = "sequoia-git" version = "0.5.0" dependencies = [ "anyhow", "buffered-reader", "chrono", "clap", "clap_complete", "clap_mangen", "dirs", "git2", "once_cell", "roff", "sequoia-cert-store", "sequoia-directories", "sequoia-man", "sequoia-net", "sequoia-openpgp", "serde", "serde_json", "tempfile", "thiserror 1.0.69", "tokio", "toml", ] [[package]] name = "sequoia-man" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "961fa9711d7a1d9ccc13ac55b65482f828399dda12a0be7fa4e059dca410d217" dependencies = [ "anyhow", "clap", "roff", ] [[package]] name = "sequoia-net" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75c0ea4f555b2b109fb39d6c5ebdb614945d82da0105957591adf4641e9cc3b2" dependencies = [ "anyhow", "base64", "futures-util", "hickory-client", "hickory-resolver", "http", "hyper", "hyper-tls", "libc", "percent-encoding", "reqwest", "sequoia-openpgp", "thiserror 2.0.18", "tokio", "url", "z-base-32", ] [[package]] name = "sequoia-openpgp" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0620e44a7d514adf7df87b44db235f13b81fed7ddc265adb26f014d42626ac47" dependencies = [ "anyhow", "argon2", "base64", "buffered-reader", "bzip2 0.6.1", "chrono", "dyn-clone", "flate2", "getrandom 0.2.17", "idna", "lalrpop", "lalrpop-util", "libc", "memsec", "nettle", "regex", "regex-syntax", "sha1collisiondetection", "thiserror 2.0.18", "xxhash-rust", ] [[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.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", "serde", "serde_core", "zmij", ] [[package]] name = "serde_spanned" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] [[package]] name = "serde_urlencoded" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", "itoa", "ryu", "serde", ] [[package]] name = "sha1collisiondetection" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f606421e4a6012877e893c399822a4ed4b089164c5969424e1b9d1e66e6964b" dependencies = [ "digest", "generic-array", ] [[package]] name = "sha2" version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", "digest", ] [[package]] name = "sha3" version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest", "keccak", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ "errno", "libc", ] [[package]] name = "simd-adler32" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "siphasher" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "socket2" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", ] [[package]] name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "string_cache" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", "parking_lot", "phf_shared", "precomputed-hash", ] [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] [[package]] name = "synstructure" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "system-configuration" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "tempfile" version = "3.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", "getrandom 0.4.1", "once_cell", "rustix", "windows-sys 0.61.2", ] [[package]] name = "term" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "terminal_size" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ "rustix", "windows-sys 0.60.2", ] [[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl 2.0.18", ] [[package]] name = "thiserror-impl" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "thiserror-impl" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tinystr" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "zerovec", ] [[package]] name = "tinyvec" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2 0.6.2", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tokio-native-tls" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", ] [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", ] [[package]] name = "tokio-util" version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", ] [[package]] name = "toml" version = "1.0.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7614eaf19ad818347db24addfa201729cf2a9b6fdfd9eb0ab870fcacc606c0c" dependencies = [ "indexmap", "serde_core", "serde_spanned", "toml_datetime", "toml_parser", "toml_writer", "winnow", ] [[package]] name = "toml_datetime" version = "1.0.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" dependencies = [ "serde_core", ] [[package]] name = "toml_parser" version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ "winnow", ] [[package]] name = "toml_writer" version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", "pin-project-lite", "sync_wrapper", "tokio", "tower-layer", "tower-service", ] [[package]] name = "tower-http" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags", "bytes", "futures-util", "http", "http-body", "iri-string", "pin-project-lite", "tower", "tower-layer", "tower-service", ] [[package]] name = "tower-layer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tracing-core" version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", ] [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "want" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ "try-lock", ] [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen 0.46.0", ] [[package]] name = "wasip3" version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec1adf1535672f5b7824f817792b1afd731d7e843d2d04ec8f27e8cb51edd8ac" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" version = "0.4.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe88540d1c934c4ec8e6db0afa536876c5441289d7f9f9123d4f065ac1250a6b" dependencies = [ "cfg-if", "futures-util", "js-sys", "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19e638317c08b21663aed4d2b9a2091450548954695ff4efa75bff5fa546b3b1" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c64760850114d03d5f65457e96fc988f11f01d38fbaa51b254e4ab5809102af" dependencies = [ "bumpalo", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.111" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60eecd4fe26177cfa3339eb00b4a36445889ba3ad37080c2429879718e20ca41" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-encoder" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" dependencies = [ "leb128fmt", "wasmparser", ] [[package]] name = "wasm-metadata" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", "indexmap", "wasm-encoder", "wasmparser", ] [[package]] name = "wasmparser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags", "hashbrown 0.15.5", "indexmap", "semver", ] [[package]] name = "web-sys" version = "0.3.88" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "widestring" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi-util" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys 0.61.2", ] [[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-registry" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ "windows-link", "windows-result", "windows-strings", ] [[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.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ "windows-targets 0.48.5", ] [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets 0.52.6", ] [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm 0.48.5", "windows_aarch64_msvc 0.48.5", "windows_i686_gnu 0.48.5", "windows_i686_msvc 0.48.5", "windows_x86_64_gnu 0.48.5", "windows_x86_64_gnullvm 0.48.5", "windows_x86_64_msvc 0.48.5", ] [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[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.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[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.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" [[package]] name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", "windows-sys 0.48.0", ] [[package]] name = "wit-bindgen" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ "wit-bindgen-rust-macro", ] [[package]] name = "wit-bindgen-core" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" dependencies = [ "anyhow", "heck", "wit-parser", ] [[package]] name = "wit-bindgen-rust" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck", "indexmap", "prettyplease", "syn", "wasm-metadata", "wit-bindgen-core", "wit-component", ] [[package]] name = "wit-bindgen-rust-macro" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" dependencies = [ "anyhow", "prettyplease", "proc-macro2", "quote", "syn", "wit-bindgen-core", "wit-bindgen-rust", ] [[package]] name = "wit-component" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", "bitflags", "indexmap", "log", "serde", "serde_derive", "serde_json", "wasm-encoder", "wasm-metadata", "wasmparser", "wit-parser", ] [[package]] name = "wit-parser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", "indexmap", "log", "semver", "serde", "serde_derive", "serde_json", "unicode-xid", "wasmparser", ] [[package]] name = "writeable" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "xxhash-rust" version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yoke" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ "stable_deref_trait", "yoke-derive", "zerofrom", ] [[package]] name = "yoke-derive" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] [[package]] name = "z-base-32" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bf7b4a78668416e1e8a332334e26fb2f377afe707f0c6feaf6ed5f9100133b" [[package]] name = "zerocopy" version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "zerofrom" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] [[package]] name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", "zerofrom", ] [[package]] name = "zerovec" version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "yoke", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" sequoia-git-0.5.0/Cargo.toml0000644000000065740000000000100112770ustar # 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 = "2021" rust-version = "1.85" name = "sequoia-git" version = "0.5.0" authors = [ "Neal H. Walfield ", "Justus Winter ", ] build = "build.rs" exclude = ["/webpage"] autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "A tool for managing and enforcing a commit signing policy." homepage = "https://sequoia-pgp.org/" documentation = "https://sequoia-pgp.gitlab.io/sequoia-git/" readme = "README.md" keywords = [ "cryptography", "openpgp", "pgp", "signing", "git", ] categories = [ "cryptography", "authentication", "command-line-utilities", "development-tools", ] license = "LGPL-2.0-or-later" repository = "https://gitlab.com/sequoia-pgp/sequoia-git" [lib] name = "sequoia_git" path = "src/lib.rs" [[bin]] name = "sq-git" path = "src/main.rs" [[test]] name = "basics" path = "tests/basics.rs" [[test]] name = "common" path = "tests/common.rs" [[test]] name = "diff" path = "tests/diff.rs" [[test]] name = "expired-cert" path = "tests/expired-cert.rs" [[test]] name = "export" path = "tests/export.rs" [[test]] name = "git-update-hook" path = "tests/git-update-hook.rs" [[test]] name = "keyring-update" path = "tests/keyring-update.rs" [[test]] name = "policy" path = "tests/policy.rs" [[test]] name = "policy-authorize" path = "tests/policy-authorize.rs" [[test]] name = "refs" path = "tests/refs.rs" [[test]] name = "revoked-cert" path = "tests/revoked-cert.rs" [[test]] name = "unrelated-repo" path = "tests/unrelated-repo.rs" [dependencies.anyhow] version = "1" [dependencies.buffered-reader] version = "1.4" [dependencies.clap] version = "4.0" features = [ "cargo", "derive", "env", "string", "wrap_help", ] [dependencies.dirs] version = ">=5, <7" [dependencies.git2] version = ">=0.19, <0.21" default-features = false [dependencies.once_cell] version = "1" [dependencies.sequoia-cert-store] version = "0.7" default-features = false [dependencies.sequoia-directories] version = "0.1" [dependencies.sequoia-net] version = "0.30" [dependencies.sequoia-openpgp] version = "2" [dependencies.serde] version = "1.0" features = ["derive"] [dependencies.serde_json] version = "1" [dependencies.tempfile] version = "3" [dependencies.thiserror] version = ">=1, <3" [dependencies.tokio] version = "1" features = ["full"] [dependencies.toml] version = ">=0.8, <2" [dev-dependencies.chrono] version = "0.4" [build-dependencies.anyhow] version = "1" [build-dependencies.clap] version = "4.0" features = [ "cargo", "derive", "env", "string", "wrap_help", ] [build-dependencies.clap_complete] version = "4" [build-dependencies.clap_mangen] version = "0.2" [build-dependencies.dirs] version = ">=5, <7" [build-dependencies.roff] version = ">=0.2, <2" [build-dependencies.sequoia-directories] version = "0.1" [build-dependencies.sequoia-man] version = "0.3" sequoia-git-0.5.0/Cargo.toml.orig000064400000000000000000000034221046102023000147450ustar 00000000000000[package] name = "sequoia-git" description = "A tool for managing and enforcing a commit signing policy." authors = [ "Neal H. Walfield ", "Justus Winter ", ] documentation = "https://sequoia-pgp.gitlab.io/sequoia-git/" homepage = "https://sequoia-pgp.org/" repository = "https://gitlab.com/sequoia-pgp/sequoia-git" readme = "README.md" keywords = ["cryptography", "openpgp", "pgp", "signing", "git"] categories = ["cryptography", "authentication", "command-line-utilities", "development-tools"] version = "0.5.0" license = "LGPL-2.0-or-later" edition = "2021" build = "build.rs" rust-version = "1.85" # Don't include the webpage in the published crate. exclude = [ "/webpage" ] [dependencies] anyhow = "1" buffered-reader = { version = "1.4" } clap = { version = "4.0", features = [ "cargo", "derive", "env", "string", "wrap_help" ] } dirs = { version = ">=5, <7" } # We don't actually use the network so disable https or ssh support, # which git2 enables by default. git2 = { version = ">=0.19, <0.21", default-features = false } once_cell = "1" toml = ">=0.8, <2" serde = { version = "1.0", features = ["derive"] } serde_json = "1" sequoia-directories = "0.1" sequoia-net = { version = "0.30" } sequoia-openpgp = { version = "2" } sequoia-cert-store = { version = "0.7", default-features = false } tempfile = "3" thiserror = { version = ">=1, <3" } tokio = { version = "1", features = ["full"] } [build-dependencies] anyhow = "1" clap = { version = "4.0", features = [ "cargo", "derive", "env", "string", "wrap_help" ] } clap_complete = "4" clap_mangen = "0.2" dirs = { version = ">=5, <7" } roff = ">=0.2, <2" sequoia-directories = "0.1" sequoia-man = "0.3" [dev-dependencies] chrono = "0.4" [[bin]] name = "sq-git" path = "src/main.rs" sequoia-git-0.5.0/Containerfile000064400000000000000000000025131046102023000145630ustar 00000000000000ARG TAG=latest FROM docker.io/library/debian:trixie AS build # create a sandbox user for the build (in ~builder) and install (in /opt) # give it permissions to the build dir and home # upgrade everything # add dependencies, as specified by the Sequoia README.md file RUN groupadd builder && \ useradd --no-log-init --create-home --gid builder builder && \ apt-get update && \ apt-get upgrade --assume-yes && \ apt-get install --assume-yes --no-install-recommends \ ca-certificates \ capnproto \ cargo \ git \ libclang-dev \ libsqlite3-dev \ libssl-dev \ make \ nettle-dev \ pkg-config \ rustc \ && \ apt-get clean && \ chown builder /opt COPY --chown=builder:builder . /home/builder/sequoia # switch to the sandbox user USER builder WORKDIR /home/builder/sequoia RUN cargo install --locked --path . FROM docker.io/library/debian:trixie-slim COPY --from=build /home/builder/.cargo/bin/sq-git /usr/bin/sq-git RUN apt-get update -y -qq && \ apt-get install -y -qq --no-install-recommends \ ca-certificates \ libsqlite3-0 \ libssl3 \ git && \ apt-get clean && \ rm -fr /var/lib/lists/* /var/cache/* /usr/share/doc/* /usr/share/locale/* COPY ./scripts/*.sh /usr/sbin/ CMD ["/usr/bin/sq-git", "--help"] sequoia-git-0.5.0/LICENSE.txt000064400000000000000000000627341046102023000137140ustar 00000000000000Sequoia-git is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Sequoia-git is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! sequoia-git-0.5.0/NEWS000064400000000000000000000054421046102023000125610ustar 00000000000000 -*- org -*- #+TITLE: sequoia-git NEWS – history of user-visible changes #+STARTUP: content hidestars * Changes in 0.4.1 ** New functionality - New command `sq-git version` displays `sq-git`'s version information. * Changes in 0.4.0 ** New functionality This release adds support for RFC 9580. * Changes in 0.3.0 ** New functionality ** Notable fixes - `sq-git policy export` now requires either `--name` or `--all`. ** Notable changes - The help output has been improved. Like `sq`, the global options are only showed at the top-level. When showing a subcommand's usage, any examples are also shown. - The subcommand structure has been aligned with `sq`. In particular, the help subcommand has been disabled for non-top-level subcommands. - Change `--policy-file` from a global to a local argument that is only available for commands that actually use it. * Changes in 0.2.0 ** New functionality - New command `sq-git policy export` exports the certificates associated with an entity. - New command `sq-git policy diff` compares two policies. - New argument `sq-git policy describe --commit` describes the policy from an arbitrary commit. - Align the certificate store location handling with `sq`: - New argument `--home` specifies the Sequoia home directory. Alternatively, the `SEQUOIA_HOME` environment variable can be used. - Replace the `--no-cert-store` argument with `--cert-store none`. - Use `SEQUOIA_CERT_STORE` instead of the `SQ_CERT_STORE` environment variable to specify the certificate store's location. ** Notable fixes - When authenticating a commit, `sq-git log` uses the parent commit's policy to authenticate the new commit. If a certificate has expired, an entity has rotated their certificate's signing subkey, etc., then the certificate in the parent commit may no longer be able to verify new signatures. To prevent this situation, `sq-git` now updates certificates present in the parent commit's policy with non-revocation updates from the child commit. Note: only the certificates already present in the parent commit's policy are updated; certificates added to the child commit's policy are ignored. - Check that keyring updates are allowed according to the policy. - When using a policy from a file (e.g., with `--policy-file`) and the file did not exist, we would default to an empty policy instead of emitting an error. - The git key for the trust root has been renamed from `sequoia.trust-root` to `sequoia.trustRoot` to match `git`'s naming convention. ** Notable changes - Updated the list of keyservers that `sq-git policy sync` uses by default. sequoia-git-0.5.0/README.md000064400000000000000000000275731046102023000133520ustar 00000000000000# Sequoia `git` `sequoia-git` is tool that can be used to improve a project's supply chain security. Documentation is available from Sequoia git's [homepage](https://sequoia-pgp.gitlab.io/sequoia-git/). ## Introduction A version control system like git doesn't just track changes, it also provides a record of who made those changes. This information can be used to check that commits are authorized, which can improve software supply chain security. In particular, checking a change's provenance can be used to remove intermediaries like forges, and package registries from a user's trusted computing base. But, authorship information can easily be forged. An obvious solution to prevent forgeries would be to require that commits are digitally signed. But by itself a valid digital signature doesn't prevent forgeries. The certificate that was used to make the signature could claim to be one of the project's maintainers. What is needed is not only a list of entities who are allowed to modify the repository, but also the keys they use to sign the commits. In other words, to authenticate a commit we need a signing policy, which says what keys are authorized to make changes. Creating a policy isn't complicated. A project's maintainers could curate a list of entities who are allowed to add commits, and enumerate the certificates they use to sign them. The tricky part is applying the policy. There are a number of edge cases that need to be handled like how merge changes from external contributions, who is allowed to change the policy, and how to deal with compromised keys. Sequoia git is a project that specifies a set of semantics, defines a policy language, and provides a set of tools to manage a policy file, and authenticate commits. Using Sequoia git is relatively straightforward. You start by adding a policy file, `openpgp-policy.toml`, to your project's repository. The policy is maintained in band to allow it to evolve, just like the rest of the project. The `openpgp-policy.toml` file is basically a list of OpenPGP certificates and the type of changes they are authorized to make. `sq-git` can help you create it. Then, before you merge a pull request, you check that commits are authorized by the policy. Locally, this is done by running `sq-git log` on the range of commits that you want to push. A commit is considered authorized if the commit has a valid signature, and at least one immediate parent's policy allows the signer to make that type of change. Projects hosted on GitHub can use this action to automatically check that a pull request is authorized when it is opened, or updated. Downstream users can use Sequoia git to check that there is a chain of trust from an older, known-good version of the software to a new version. This helps prevent the use of versions that include modifications that weren't authorized by the project's maintainers. See [the specification] for an in-depth discussion of semantics and implementation. [the specification]: https://sequoia-pgp.gitlab.io/sequoia-git/specification/ ## Deploying `sq-git` To start using Sequoia git in a git repository, you first add one or more certificates to the project's policy, and grant them some rights. The policy is called `openpgp-policy.toml`, and is stored in the root of the repository. It is a [toml file](https://toml.io), which means it can be edited by hand, but `sq-git` provides tools that make it easier to examine and modify it. There are six different rights: `add-user`, `retire-user`, `audit`, `sign-tag`, `sign-archive`, and `sign-commit`. Only users who have the `add-user` right can add new users to the policy. Similarly, the `retire-user` right is needed to remove users from the policy. The `audit` right is needed to good list (using `sq-git policy goodlist`) a commit that was signed by a certificate that was subsequently hard revoked. The `sign-tag`, `sign-archive`, and `sign-commit` rights are needed to sign tags, archives, and commits, respectively. You can use `sq-git policy authorize` to grant a specific right to a user. For instance, you could run: ``` $ sq-git policy authorize --sign-commit 'Neal H. Walfield ' F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ``` This says that the specified certificate can be used to sign commits. The name is purely decorative. To make assigning rights easier, `sq-git policy authorize` knows about three roles: the project maintainer (who gets all rights), the release manager (who can sign tags, archives, and commits), and the committer (who can only sign commits). These can be passed to `sq-git policy authorized`. For instance: ``` $ sq-git policy authorize --project-maintainer 'Neal H. Walfield ' F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ``` `sq-git policy authorize` immediately expands the roles to the corresponding rights; the roles do not appear in the policy file. You can use the `sq-git init` subcommand to get a quick overview of who has contributed to the project, and what certificates they used to sign their commits, if any. `sq-git init` looks at commits from the last half year, or the last 10 commits, whichever is more. As such it focuses on contributors who have been active recently; it doesn't make sense to authorize someone has left the project. Although `sq-git init` usually provides a good starting point, you should not trust it. It is essential to verify a contributor's certificate by, e.g., reaching out to them, and asking what their certificate's fingerprint is. As you can always modify the policy later, it is better to only add the certificates that you are certain about, from contributors who are active. Here's how you might initialize a policy file: ```shell ../sequoia-git$ sq-git init # Examined the 136 commits in the last 183 days. # Stopped at commit 83ce12f617c9e1dd90f812825707337f8787f69e. # Encountered 0 unsigned commits # Neal H. Walfield added 66 commits (48%). # # After checking that they really control the following OpenPGP keys: # # 6863C9AD5B4D22D3 (66 commits) # # You can make them a project maintainer (someone who can add and # remove committers) by running: sq-git policy authorize --project-maintainer "Neal H. Walfield " 6863C9AD5B4D22D3 # Justus Winter added 44 commits (32%). # # After checking that they really control the following OpenPGP keys: # # 686F55B4AB2B3386 (44 commits) # # You can make them a committer by running: sq-git policy authorize --committer "Justus Winter " 686F55B4AB2B3386 ... ../sequoia-git$ sq-git policy authorize --project-maintainer "Neal H. Walfield " 6863C9AD5B4D22D3 - User "Neal H. Walfield " was added. - User "Neal H. Walfield " was granted the right sign-commit. - User "Neal H. Walfield " was granted the right sign-tag. - User "Neal H. Walfield " was granted the right sign-archive. - User "Neal H. Walfield " was granted the right add-user. - User "Neal H. Walfield " was granted the right retire-user. - User "Neal H. Walfield " was granted the right audit. ../sequoia-git$ sq-git policy authorize --committer "Justus Winter " 686F55B4AB2B3386 - User "Justus Winter " was added. - User "Justus Winter " was granted the right sign-commit. ``` `sq-git` reads the certificates from the user's certificate store. Use `sq import < FILE` to import certificates in a file, `sq keyserver get FINGERPRINT` to fetch certificates from a key server, etc. Alternatively, you can provide the certificate to `sq-git policy authorize` using the `--cert-file` argument. The policy file can be viewed as follows: ```shell $ sq-git policy describe # OpenPGP policy file for git, version 0 ## Commit Goodlist ## Authorizations 0. Justus Winter - may sign commits - has OpenPGP cert: D2F2C5D45BE9FDE6A4EE0AAF31855247603831FD 1. Neal H. Walfield - may sign commits - may sign tags - may sign archives - may add users - may retire users - may goodlist commits - has OpenPGP cert: F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ``` If you are happy, you can add it to your `git` repository in the usual manner. Don't forget to tell `git` to sign commits by adding something like the following to your repository's `.git/config` file: ```text [user] signingkey = F7173B3C7C685CD9ECC4191B74E445BA0E15C957 email = 'neal@pep.foundation' name = 'Neal H. Walfield' [commit] gpgsign = true ``` Then run: ```shell ../sequoia-git$ git add openpgp-policy.toml ../sequoia-git$ git commit -m 'Add a commit policy.' [main 911c4eb] Add a commit policy. 1 file changed, 119 insertions(+), 1831 deletions(-) rewrite openpgp-policy.toml (94%) ``` Create a new commit, and verify the new version: ```shell ../sequoia-git$ echo 'hello world' > greeting ../sequoia-git$ git add greeting ../sequoia-git$ git commit -m 'Say hello.' [main 698876a] Say hello. 1 file changed, 1 insertion(+) create mode 100644 greeting ../sequoia-git$ sq-git log --trust-root 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9..698876a7ff11fff2f8cd0df55bbe8fc5c5d224d9: Neal H. Walfield [74E445BA0E15C957] ``` Instead of entering the trust root manually, which is error prone, you can set the trust root in the repository's git config file: ```shell ../sequoia-git$ git config sequoia.trustRoot 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9 ../sequoia-git$ sq-git log 911c4eb1e9832d6df8e733bf103ca4c9f4637eb9..698876a7ff11fff2f8cd0df55bbe8fc5c5d224d9: Cached positive verification ``` You can also use tags or branches, however, you must be careful as these may be updated when you fetch from a remote repository using, e.g., `git fetch`. ## Rejecting Unauthorized Commits Insert the following line into `hooks/update` on a shared `git` server to make it enforce the policy embedded in the repository starting at the given trust root (``), which is specified as a hash: ```text sq-git update-hook --trust-root= "$@" ``` ## Using `sq-git` in CI `sequoia-git` is available in an OCI image for ease of use inside of CI pipelines. ### Gitlab To authenticate commits from a Gitlab CI pipeline, there is a script included at `scripts/gitlab.sh` which may be run as a job inside a project's `.gitlab-ci.yml` manifest: ``` authenticate-commits: stage: test image: registry.gitlab.com/sequoia-pgp/sequoia-git:latest before_script: [] script: - sq-git policy describe - /usr/sbin/gitlab.sh # Script baked-in to image after_script: [] rules: # TODO: We currently only authenticate the changes on non-merged # branches where we use the default branch as the trust root. For # the default branch, the project needs to set an explicit trust # root. - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' ``` ### GitHub To use `sq-git` to authenticate a pull request in GitHub, you can use the [`sequoia-pgp/authenticate-commits` Action](https://github.com/sequoia-pgp/authenticate-commits). This action checks that the commits are authorized by the last commit of the merge base. [This video](https://www.youtube.com/watch?v=KdDbU9u5X-Q) shows a demonstration of the action. Note: GitHub's interface for merging pull requests offers three merge strategies, but unfortunately none of them are appropriate for use with Sequoia git, because they all modify the commits. With Sequoia git, it is necessary to either rebase and fast forward the change, or to add a signed merge commit. It is possible to use the [`sequoia-pgp/fast-forward` action](https://github.com/sequoia-pgp/fast-forward) to fast forward pull requests. When enabled for a repository, an authorized user can add a comment containing `/fast-forward` to the pull request, and the action will fast forward the merge base. sequoia-git-0.5.0/book/Makefile000064400000000000000000000003441046102023000144500ustar 00000000000000build: mdbook mdbook build server: mdbook mdbook serve --open .PHONY: mdbook mdbook: if ! mdbook --version >/dev/null; \ then \ echo "mdbook is not installed, try:"; \ echo ""; \ echo " cargo install mdbook"; \ fi sequoia-git-0.5.0/book/book.toml000064400000000000000000000000341046102023000146330ustar 00000000000000[book] title = "Sequoia git"sequoia-git-0.5.0/book/examples/alice.pgp000064400000000000000000000042651046102023000164210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A11C ECD8 6FB6 0504 66E6 259C 7993 A17B A853 7B3D Comment: Comment: Alice xVgEZ7PDpBYJKwYBBAHaRw8BAQdAdVIlpUiaBK3EH4NnoUD2IQ0QJ1I55o0RA9hn nkEl86AAAP0WpDE0MDAoUaPxXaA4kivRvLt78VozWGSNvlkEtKNwyA+vwsALBB8W CgB9BYJns8OkAwsJBwkQeZOhe6hTez1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGxikAg41bFqQWyfDX009ZwEV79+uoWdxPs/sqqUlXU8D FQoIApsBAh4BFiEEoRzs2G+2BQRm5iWceZOhe6hTez0AALHbAP0Rpk/62ECJehwu xgz+dmp22oxwfe4baMXp3Y8gxVHceAEAkIBAfLgyYYFtrTIl5E5wHLpzg2l+ZxT8 9QSuBBqDegLNEzxhbGljZUBleGFtcGxlLm9yZz7CwAsEExYKAH0Fgmezw6QDCwkH CRB5k6F7qFN7PUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf42BeZAW5R2puX9nfjvSytIYY+l5aTRq0z4S6YsU/RBQMVCggCmwECHgEWIQSh HOzYb7YFBGbmJZx5k6F7qFN7PQAAx4IBANrw4ZVBbNV440JcVNT6flfsva1cWeFN WkTPZ5dS4OR3AQCXc88GSznIGVqvb3CZhuvyoiunwZpDBSaMjA4+UQiQBs0FQWxp Y2XCwAsEExYKAH0Fgmezw6QDCwkHCRB5k6F7qFN7PUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdU4o/9d6iboxYQJ+R53cmyP4B3V/sR4SjM hXVnZ4PQTgMVCggCmwECHgEWIQShHOzYb7YFBGbmJZx5k6F7qFN7PQAAeSIBAIhB GoOcyfh3A9ejs1/JxSfRN22ZnuR4NHHwIZEYMp9hAQCDu/Qc4VdfY0WdtrD73odY 1dxyYZIZWHeM7u9ej5CiDMdYBGezw6QWCSsGAQQB2kcPAQEHQAeGU6o3IpFGWiGu 5wd6CniAk3k1ahNWLH2oS/BJ1aUKAAD+LLGFmwmi+gLowHfDpF/+vfnl/6Y+mGGl PCdCadsh5bsTS8LAwgQYFgoBNAWCZ7PDpAkQeZOhe6hTez1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jno6TiuAWsrGVzWZIZyUJ0db9c1h1d HPkhaf0nKRc2X5ECmwICHgG+oAQZFgoAbwWCZ7PDpAkQsyd+U95/eSpHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnaxTISs10aJ45+7rYLmih hJvhrRIfywDHSd8btt7rYPMWIQTyqwT1xuve43w2+WuzJ35T3n95KgAA0G8A/0aG NOuryIMaPQ28p+etLqvqns5QISNVZINiG+FCubfwAPsHyFsh8bYP8pSscywSA3Vm FGg5v/ZvbpbNAMVYjOwiBhYhBKEc7NhvtgUEZuYlnHmToXuoU3s9AAATfwEA98Gf NW8tEdxzeIetftrwVVcFFOZLdHwqMGH/kPEug8EA/ilbbUHkBCTdNSXRZG+JI8SA 83Uarx8llRvNOqUeU80Ix10EZ7PDpBIKKwYBBAGXVQEFAQEHQO6kC0sP/heqzeH6 Qwo8iAQ6O51IjK6+ozmlxVJca0A1AwEIBwAA/3yia5bxjajFudf5CtHHuVXct3Ip NouQXgAOgcollsMoEh7CwAMEGBYKAHUFgmezw6QJEHmToXuoU3s9RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5BdTbUEdivfeAyDZEO01bGz UCvpeGRnB+OZeTz0Db1sApsMAh4BFiEEoRzs2G+2BQRm5iWceZOhe6hTez0AAPMn AQDeaV9U1JObeHeEf4SUlwFBaWBbcyu1T3lZtO2MuG8YlQEA/wgw2BlSMlQEJVvu 92Am7684FNt0yQb7zk2wiiKliAY= =YQzo -----END PGP PRIVATE KEY BLOCK----- sequoia-git-0.5.0/book/examples/bob.pgp000064400000000000000000000054531046102023000161060ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B0B5 0C2B 8C35 58D2 25A3 310C 1A8F AB5E 378D D32D Comment: Comment: Bob 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 o5AemPTOC/kK =tYYC -----END PGP PRIVATE KEY BLOCK----- sequoia-git-0.5.0/book/examples/carol.pgp000064400000000000000000000042571046102023000164450ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CA50 1F89 4EBD 6193 655C B77C 476D 5639 4D4E 67DC Comment: Comment: Carol xVgEZ6gBIRYJKwYBBAHaRw8BAQdAr0bwKnXKvgArRbX9vCjzPmv4EL3RXTde9T2G n8HOQCYAAP9NlPu+rOJkpxFhNpiDnIZ7c8UoMEx59oNb8GpNqt02CxEqwsALBB8W CgB9BYJnqAEhAwsJBwkQR21WOU1OZ9xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6ZFUPyT+ju418sa+fdIZb+U8BEr4eH9meYQ3pi5xByED FQoIApsBAh4BFiEEylAfiU69YZNlXLd8R21WOU1OZ9wAAPpPAP9i/fxVKpNrKTkU TLhq5PtsXAUEaQLEe9ss4j/03kAbWgEA9kGtu7PT/hG7esJj5rompFSMoxcu/ibB Q2OnhmsTGQDNETxjYXJvbEBvdGhlci5vcmc+wsALBBMWCgB9BYJnqAEhAwsJBwkQ R21WOU1OZ9xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ZkUetPvvMVv5aPXCCNydlkA2gwWz+KyyvMQzxaTEZiwDFQoIApsBAh4BFiEEylAf iU69YZNlXLd8R21WOU1OZ9wAAAJHAP9wW8OzuInVLvENj9A/qgoUQdyp1w9DoHtR 0hlloC5hFwEAi0tJN+zq3MAxZfeMULvd8od/y7U9TBacHQt2Xa2hNQHNBUNhcm9s wsALBBMWCgB9BYJnqAEhAwsJBwkQR21WOU1OZ9xHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnmXr3S74oZIdG+3vyYt26/MwSXPFdFAxTdc5s XCyLRzQDFQoIApsBAh4BFiEEylAfiU69YZNlXLd8R21WOU1OZ9wAAKqZAP9eVawX IMhVHC5PVWvt+PGOwTeLw4XdPdeqJLLCk1gkXQD8DGPSlzMYchQCwNBWxx3/9Utn J+JTWZa4Gh35ldYRDAfHWARnqAEhFgkrBgEEAdpHDwEBB0CN6dJuzAcJt6MBiFnJ yeCF8oYiOT3uNVcQw2Peae2UvgABAMsU1JAZCwoyGv0ERjCs/3Jc6rxIvsY2xaFH abUyzy99Ds7CwMIEGBYKATQFgmeoASEJEEdtVjlNTmfcRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwgwmN8F1mbHevKLLnJ8wqTWiPyLaTtv 5VnpjO6d63+uApsCAh4BvqAEGRYKAG8FgmeoASEJEA3dC9z9fXxPRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8669u/90KSWiibelXcrFqrU 6CKb7iYgI1fy0Jtqa4lRFiEE9xKRn9x2uXGlq6/BDd0L3P19fE8AAIzRAP9VtGu2 IGQWbBMK971dQmiSMcVQ97BIvRgoUOatgBeLjwEA8lJ4IVcjfom59mQUTGj4oNm+ IoUcujYjwf+yNSghGAwWIQTKUB+JTr1hk2Vct3xHbVY5TU5n3AAA6noBAIeQHpd7 GZbLjYu+0bEtruUDUWWS+mI96vIDNYcNSzJ8AP9DrAq5ggo4dQtho5scT7DIM3Uw 0RV9nujP/2m4n3dtDMddBGeoASESCisGAQQBl1UBBQEBB0AO4koYFKhYivor4Y4p z5atk+gNHUDdzuug4vXG3y10NAMBCAcAAP9Ap37+CxyeAU7QKy3Ym9oHL3nc3xJy RCiqbsBVhtroOA/ywsADBBgWCgB1BYJnqAEhCRBHbVY5TU5n3EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcynxUoSjBYppjVg9yMoPFuh41e 1ZE4UlCYReSeDodkHQKbDAIeARYhBMpQH4lOvWGTZVy3fEdtVjlNTmfcAAASnwEA oMBWEoKYytzTO7Jwt124MWt5WPakB505+exFgvjz+ucBAIH8kywMnUKbAiA3pFYA CthG3yw9OCUZLIcy92PHXa8J =ANAh -----END PGP PRIVATE KEY BLOCK----- sequoia-git-0.5.0/book/examples/frob-10-alice-adds-a-signing-policy.txt000064400000000000000000000013021046102023000236630ustar 00000000000000alice$ sq-git policy authorize alice --project-maintainer \ --cert A11CECD86FB6050466E6259C7993A17BA8537B3D - User alice was added. - User alice was granted the right sign-commit. - User alice was granted the right sign-tag. - User alice was granted the right sign-archive. - User alice was granted the right add-user. - User alice was granted the right retire-user. - User alice was granted the right audit. - User alice: new certificate A11CECD86FB6050466E6259C7993A17BA8537B3D. alice$ git add openpgp-policy.toml alice$ git commit -m 'Add a signing policy.' [main (root-commit) b001000] Add a signing policy. 1 file changed, 43 insertions(+) create mode 100644 openpgp-policy.toml sequoia-git-0.5.0/book/examples/frob-100-dave-checks-carols-commit.txt000064400000000000000000000007461046102023000235450ustar 00000000000000dave$ sq-git log b005000000000000000000000000000000000000..b006000000000000000000000000000000000000: Error: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing Use an O(log(n)) algorithm instead of one that takes O(n). Error: Could not verify commits b003000000000000000000000000000000000000..b006000000000000000000000000000000000000 Caused by: 0: While verifying commit b006000000000000000000000000000000000000 1: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing sequoia-git-0.5.0/book/examples/frob-110-carol-adds-herself-to-the-policy.txt000064400000000000000000000022711046102023000247470ustar 00000000000000carol$ git switch -c carol/make-carol-a-committer main Switched to a new branch 'carol/make-carol-a-committer' carol$ sq-git policy authorize carol --committer \ --cert CA501F894EBD6193655CB77C476D56394D4E67DC - User carol was added. - User carol was granted the right sign-commit. - User carol: new certificate CA501F894EBD6193655CB77C476D56394D4E67DC. carol$ git add openpgp-policy.toml carol$ git commit -m 'Authorize Carol to be a committer.' [carol/make-carol-a-committer b007000] Authorize Carol to be a committer. 1 file changed, 36 insertions(+) carol$ git cherry-pick b006000000000000000000000000000000000000 [carol/make-carol-a-committer b008000] Use an O(log(n)) algorithm instead of one that takes O(n). Date: Fri Feb 21 08:42:15 2025 +0100 1 file changed, 21 insertions(+), 7 deletions(-) carol$ sq-git log --trust-root 'HEAD^' b007000000000000000000000000000000000000..b008000000000000000000000000000000000000: Signer: carol [CA501F894EBD6193655CB77C476D56394D4E67DC] Use an O(log(n)) algorithm instead of one that takes O(n). Verified that there is an authenticated path from the trust root b007000000000000000000000000000000000000 to b008000000000000000000000000000000000000. sequoia-git-0.5.0/book/examples/frob-120-dave-checks-carols-new-commits.txt000064400000000000000000000012321046102023000245100ustar 00000000000000dave$ sq-git log b007000000000000000000000000000000000000..b008000000000000000000000000000000000000: Signer: carol [CA501F894EBD6193655CB77C476D56394D4E67DC] Use an O(log(n)) algorithm instead of one that takes O(n). b005000000000000000000000000000000000000..b007000000000000000000000000000000000000: Error: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing Authorize Carol to be a committer. Error: Could not verify commits b003000000000000000000000000000000000000..b008000000000000000000000000000000000000 Caused by: 0: While verifying commit b007000000000000000000000000000000000000 1: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing sequoia-git-0.5.0/book/examples/frob-130-bob-merges-carols-commit.txt000064400000000000000000000002771046102023000234140ustar 00000000000000bob$ git merge --no-ff carol/vroom -m 'Merge Carol'\''s change' Merge made by the 'ort' strategy. main.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) sequoia-git-0.5.0/book/examples/frob-140-git-log.txt000064400000000000000000000017511046102023000201640ustar 00000000000000bob$ git log --decorate --pretty=short --graph * commit b009000000000000000000000000000000000000 (HEAD -> main) |\ Merge: b005000 b006000 | | Author: Bob | | | | Merge Carol's change | | | * commit b006000000000000000000000000000000000000 (carol/vroom) |/ Author: Carol | | Use an O(log(n)) algorithm instead of one that takes O(n). | * commit b005000000000000000000000000000000000000 | Author: Bob | | Add support for ACME's frob. | * commit b004000000000000000000000000000000000000 | Author: Bob | | Fix a corner case. | * commit b003000000000000000000000000000000000000 | Author: Bob | | Add a cool new feature. | * commit b002000000000000000000000000000000000000 | Author: Alice | | Authorize Bob to be a release manager. | * commit b001000000000000000000000000000000000000 Author: Alice Add a signing policy. sequoia-git-0.5.0/book/examples/frob-150-dave-checks-merge-commit.txt000064400000000000000000000017361046102023000233660ustar 00000000000000dave$ sq-git log b005000000000000000000000000000000000000..b009000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Merge Carol's change b006000000000000000000000000000000000000..b009000000000000000000000000000000000000: Cached positive verification b005000000000000000000000000000000000000..b006000000000000000000000000000000000000: Error: Key `F712919FDC76B971A5ABAFC10DDD0BDCFD7D7C4F` missing Use an O(log(n)) algorithm instead of one that takes O(n). b004000000000000000000000000000000000000..b005000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add support for ACME's frob. b003000000000000000000000000000000000000..b004000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Fix a corner case. Verified that there is an authenticated path from the trust root b003000000000000000000000000000000000000 to b009000000000000000000000000000000000000. sequoia-git-0.5.0/book/examples/frob-160-bob-signs-carols-commit.txt000064400000000000000000000006211046102023000232510ustar 00000000000000bob$ git reset --hard b006000000000000000000000000000000000000 HEAD is now at b006000 Use an O(log(n)) algorithm instead of one that takes O(n). bob$ git commit --amend --allow-empty --reuse-message=HEAD [main b010000] Use an O(log(n)) algorithm instead of one that takes O(n). Author: Carol Date: Fri Feb 21 08:42:15 2025 +0100 1 file changed, 21 insertions(+), 7 deletions(-) sequoia-git-0.5.0/book/examples/frob-170-dave-checks-resign.txt000064400000000000000000000016131046102023000222640ustar 00000000000000dave$ git log -n1 commit b010000000000000000000000000000000000000 Author: Carol Date: Fri Feb 21 08:42:15 2025 +0100 Use an O(log(n)) algorithm instead of one that takes O(n). dave$ sq-git log b005000000000000000000000000000000000000..b010000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Use an O(log(n)) algorithm instead of one that takes O(n). b004000000000000000000000000000000000000..b005000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add support for ACME's frob. b003000000000000000000000000000000000000..b004000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Fix a corner case. Verified that there is an authenticated path from the trust root b003000000000000000000000000000000000000 to b010000000000000000000000000000000000000. sequoia-git-0.5.0/book/examples/frob-20-alice-sets-trust-root.txt000064400000000000000000000001471046102023000227260ustar 00000000000000alice$ git rev-parse HEAD alice$ git config sequoia.trustRoot b001000000000000000000000000000000000000 sequoia-git-0.5.0/book/examples/frob-30-alice-authorizes-bob.txt000064400000000000000000000010221046102023000225370ustar 00000000000000alice$ sq-git policy authorize bob --release-manager \ --cert B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D - User bob was added. - User bob was granted the right sign-commit. - User bob was granted the right sign-tag. - User bob was granted the right sign-archive. - User bob: new certificate B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D. alice$ git add openpgp-policy.toml alice$ git commit -m 'Authorize Bob to be a release manager.' [main b002000] Authorize Bob to be a release manager. 1 file changed, 38 insertions(+) sequoia-git-0.5.0/book/examples/frob-40-alice-runs-git-log.txt000064400000000000000000000005641046102023000221440ustar 00000000000000alice$ sq-git log Warning: no trust root specified. Either pass the '--trust-root' option, or set the 'sequoia.trustRoot' configuration key in your repository's local git config to reference a commit. Error: Reading 'sequoia.trustRoot' from the repository's git config. Caused by: config value 'sequoia.trustRoot' was not found; class=Config (7); code=NotFound (-3) sequoia-git-0.5.0/book/examples/frob-50-bob-adds-a-commit.txt000064400000000000000000000010351046102023000217140ustar 00000000000000bob$ emacs main.rs bob$ git add main.rs bob$ git commit -m 'Add a cool new feature.' [main b003000] Add a cool new feature. 1 file changed, 21 insertions(+) create mode 100644 main.rs bob$ sq-git log --trust-root 'HEAD^' b002000000000000000000000000000000000000..b003000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add a cool new feature. Verified that there is an authenticated path from the trust root b002000000000000000000000000000000000000 to b003000000000000000000000000000000000000. sequoia-git-0.5.0/book/examples/frob-55-dave-trust-root.txt000064400000000000000000000000511046102023000216160ustar 00000000000000b003000000000000000000000000000000000000 sequoia-git-0.5.0/book/examples/frob-60-dave-sets-a-trust-root.txt000064400000000000000000000003601046102023000230070ustar 00000000000000dave$ git log -n1 commit b003000000000000000000000000000000000000 Author: Bob Date: Fri Feb 21 08:42:14 2025 +0100 Add a cool new feature. dave$ git config sequoia.trustRoot b003000000000000000000000000000000000000 sequoia-git-0.5.0/book/examples/frob-70-bob-adds-a-commit.txt000064400000000000000000000005371046102023000217240ustar 00000000000000bob$ emacs main.rs bob$ git add main.rs bob$ git commit -m 'Fix a corner case.' [main b004000] Fix a corner case. 1 file changed, 21 insertions(+), 7 deletions(-) bob$ emacs main.rs bob$ git add main.rs bob$ git commit -m 'Add support for ACME'\''s frob.' [main b005000] Add support for ACME's frob. 1 file changed, 9 insertions(+), 12 deletions(-) sequoia-git-0.5.0/book/examples/frob-80-dave-checks.txt000064400000000000000000000007661046102023000207270ustar 00000000000000dave$ sq-git log b004000000000000000000000000000000000000..b005000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Add support for ACME's frob. b003000000000000000000000000000000000000..b004000000000000000000000000000000000000: Signer: bob [B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D] Fix a corner case. Verified that there is an authenticated path from the trust root b003000000000000000000000000000000000000 to b005000000000000000000000000000000000000. sequoia-git-0.5.0/book/examples/frob-90-carol-adds-a-commit.txt000064400000000000000000000005161046102023000222610ustar 00000000000000carol$ git switch -c carol/vroom main Switched to a new branch 'carol/vroom' carol$ emacs main.rs carol$ git add main.rs carol$ git commit -m 'Use an O(log(n)) algorithm instead of one that takes O(n).' [carol/vroom b006000] Use an O(log(n)) algorithm instead of one that takes O(n). 1 file changed, 21 insertions(+), 7 deletions(-) sequoia-git-0.5.0/book/examples/frob-95-carol-commit-cherry-picked.txt000064400000000000000000000000511046102023000236600ustar 00000000000000b006000000000000000000000000000000000000 sequoia-git-0.5.0/book/examples/intro-10-neal-cert.txt000064400000000000000000000003501046102023000206050ustar 00000000000000mallory$ sq key generate --userid 'Neal H. Walfield ' --own-key --without-password - ┌ 13914CAD8DA9055E86973BCE16EABCF4A66A228B â”” Neal H. Walfield - certification created ... sequoia-git-0.5.0/book/examples/intro-20-neal-commit.txt000064400000000000000000000003121046102023000211370ustar 00000000000000mallory$ emacs main.rs mallory$ git add main.rs mallory$ git commit -m 'Clean up the code.' [main (root-commit) a001000] Clean up the code. 1 file changed, 21 insertions(+) create mode 100644 main.rs sequoia-git-0.5.0/book/examples/intro-30-git-log.txt000064400000000000000000000012411046102023000202770ustar 00000000000000alice$ git log -n1 --pretty=short --show-signature commit a001000000000000000000000000000000000000 gpg: Signature made Fri Feb 21 08:42:16 2025 +01:00 gpg: using EDDSA key F5FA62C39C1620C0DCE60A53FA23CCD7B28FB8CE gpg: Good signature from "Neal H. Walfield " [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 1391 4CAD 8DA9 055E 8697 3BCE 16EA BCF4 A66A 228B Subkey fingerprint: F5FA 62C3 9C16 20C0 DCE6 0A53 FA23 CCD7 B28F B8CE Author: Neal H. Walfield Clean up the code. sequoia-git-0.5.0/book/examples/script.sh000075500000000000000000000217201046102023000164720ustar 00000000000000if ! test -e alice.pgp -a -e bob.pgp then echo "You seem to be in the wrong directory! (alice.pgp and bob.pgp not found)" exit 1 fi export GNUPGHOME=$(pwd)/gpg export SEQUOIA_CERT_STORE=$(pwd)/gpg/pubring.cert.d if test -d gpg then gpgconf --kill gpg-agent rm -rf gpg sleep 1 fi mkdir gpg chmod 700 gpg for c in *.pgp do gpg --import $c done sleep 1 # Remove old output. rm -f *[0-9]-*.txt # Initialize the git repository. rm -rf frob mkdir frob cd frob git init # sq --overwrite key generate --name Bob --email bob@example.org --own-key --without-password --expiration never --output bob.pgp --rev-cert /tmp/alice.rev # vanity_gpg -c ed25519 -j8 -u "Alice" -p "^A11CE" alice_fpr=A11CECD86FB6050466E6259C7993A17BA8537B3D bob_fpr=B0B50C2B8C3558D225A3310C1A8FAB5E378DD32D carol_fpr=CA501F894EBD6193655CB77C476D56394D4E67DC declare -A trust_roots set -e context() { name="$1" case "$name" in alice) git config --local user.name "Alice" git config --local user.email "alice@example.org" git config --local gpg.gpgsign true git config --local user.signingKey $alice_fpr ;; bob) git config --local user.name "Bob" git config --local user.email "bob@example.org" git config --local gpg.gpgsign true git config --local user.signingKey $bob_fpr ;; carol) git config --local user.name "Carol" git config --local user.email "carol@example.org" git config --local gpg.gpgsign true git config --local user.signingKey $carol_fpr ;; dave) git config --local user.name "Dave" git config --local user.email "dave@some.org" git config --local gpg.gpgsign false git config --local --unset user.signingKey ;; mallory) git config --local user.name "Neal H. Walfield" git config --local user.email "neal@sequoia-pgp.org" if test -z "$neal_fpr" then git config --local gpg.gpgsign false git config --local --unset user.signingKey || true else git config --local gpg.gpgsign true git config --local user.signingKey "$neal_fpr" fi ;; *) echo "\$1 should be the name" exit 1 esac trust_root=${trust_roots[$name]} if test -z "$trust_root" then git config --local --unset sequoia.trustRoot || true else git config --local sequoia.trustRoot "$trust_root" fi PS4="$name\$ " rm -f ~/.cache/sq-git.verification.cache } # The number of lines to add / delete with each commit. We rotate # them to add variety, but to keep the output stable. declare -a add declare -a delete add=( 21 9 32 40 ) delete=( 7 12 6 ) emacs() { set +x filename="$1" if test -z "$filename" then echo filename not specified exit 1 fi touch "$filename" if test "${delete[0]}" -gt 0 then sed -i "1,${delete[0]}d" "$filename" fi { for i in $(seq ${add[0]}); do echo $RANDOM; done } >> "$filename" # Rotate add=( "${add[@]:1}" "${add[0]}" ) delete=( "${delete[@]:1}" "${delete[0]}" ) set -x } save() { filename="$1" # - Remove set +x from output. # - Remove stuttering due to PS4. # - If the --cert FINGERPRINT argument comes at the end of a line, # wrap it. sed -e '/.*$ set +x/d' \ -e 's/^\(.\)\1\+\(.*$ \)/\1\2/' \ -e 's/^\(.\{33,\}\)\(--cert [0-9A-F]\{40\}\)/\1\\\n \2/g' \ | tee "$filename" } context "alice" { set -x sq-git policy authorize alice --project-maintainer \ --cert $alice_fpr git add openpgp-policy.toml git commit -m "Add a signing policy." } 2>&1 | save ../frob-10-alice-adds-a-signing-policy.txt context "alice" { set -x git config sequoia.trustRoot $(git rev-parse HEAD) } 2>&1 | save ../frob-20-alice-sets-trust-root.txt context "alice" { set -x sq-git policy authorize bob --release-manager --cert $bob_fpr git add openpgp-policy.toml git commit -m "Authorize Bob to be a release manager." } 2>&1 | save ../frob-30-alice-authorizes-bob.txt context "alice" { set -x sq-git log } 2>&1 | save ../frob-40-alice-runs-git-log.txt context "bob" { set -x emacs main.rs git add main.rs git commit -m "Add a cool new feature." sq-git log --trust-root HEAD^ } 2>&1 | save ../frob-50-bob-adds-a-commit.txt context "dave" DAVE_ROOT=$(git rev-parse HEAD) echo $DAVE_ROOT | save ../frob-55-dave-trust-root.txt trust_roots["dave"]=$DAVE_ROOT { set -x git log -n1 git config sequoia.trustRoot $DAVE_ROOT } 2>&1 | save ../frob-60-dave-sets-a-trust-root.txt context "bob" { set -x emacs main.rs git add main.rs git commit -m "Fix a corner case." emacs main.rs git add main.rs git commit -m "Add support for ACME's frob." } 2>&1 | save ../frob-70-bob-adds-a-commit.txt context "dave" { set -x sq-git log } 2>&1 | save ../frob-80-dave-checks.txt context "carol" { set -x git switch -c carol/vroom main emacs main.rs git add main.rs git commit -m "Use an O(log(n)) algorithm instead of one that takes O(n)." } 2>&1 | save ../frob-90-carol-adds-a-commit.txt CAROL_COMMIT=$(git rev-parse HEAD) echo $CAROL_COMMIT | save ../frob-95-carol-commit-cherry-picked.txt context "dave" { set +e; set -x sq-git log } 2>&1 | save ../frob-100-dave-checks-carols-commit.txt context "carol" { set -x git switch -c carol/make-carol-a-committer main sq-git policy authorize carol --committer --cert $carol_fpr git add openpgp-policy.toml git commit -m "Authorize Carol to be a committer." git cherry-pick $CAROL_COMMIT sq-git log --trust-root HEAD^ } 2>&1 | save ../frob-110-carol-adds-herself-to-the-policy.txt context "dave" { set +e; set -x sq-git log } 2>&1 | save ../frob-120-dave-checks-carols-new-commits.txt git checkout main context "bob" { set +e; set -x git merge --no-ff carol/vroom -m "Merge Carol's change" } 2>&1 | save ../frob-130-bob-merges-carols-commit.txt context "bob" { set +e; set -x git log --decorate --pretty=short --graph } 2>&1 | save ../frob-140-git-log.txt context "dave" { set +e; set -x sq-git log } 2>&1 | save ../frob-150-dave-checks-merge-commit.txt context "bob" { set +e; set -x git reset --hard $CAROL_COMMIT git commit --amend --allow-empty --reuse-message=HEAD } 2>&1 | save ../frob-160-bob-signs-carols-commit.txt context "dave" { set +e; set -x git log -n1 sq-git log } 2>&1 | save ../frob-170-dave-checks-resign.txt # Introduction. cd .. rm -rf intro mkdir intro cd intro git init context "mallory" { set -x sq key generate --userid 'Neal H. Walfield ' --own-key --without-password } 2>&1 \ | awk 'BEGIN { suppress = 0 } /^Transferable Secret Key./ { print "..."; suppress = 1; exit } { if (suppress == 0) { print } } /^[a-z]+$/ { suppress = 0; }' \ | save ../intro-10-neal-cert.txt # Truncate sq key generate neal_fpr=$(sq cert list neal@sequoia-pgp.org | awk -F-\ '/^ - [0-9A-F]{40,}/ { print $2 }') if test -z "$neal_fpr" then echo Failed to extract fingerprint. exit 1 fi sq key export --cert "$neal_fpr" | gpg --import sleep 1 sq pki link retract --cert "$neal_fpr" --all context "mallory" { set -x emacs main.rs git add main.rs git commit -m "Clean up the code." } 2>&1 | save ../intro-20-neal-commit.txt context "alice" { set -x git log -n1 --pretty=short --show-signature } 2>&1 | save ../intro-30-git-log.txt # Stabilize the output. cd .. rewrite_commits() { prefix=$1 if test -z "$prefix" then echo "No prefix" exit 1 fi shift files=$@ if test -z "$files" then echo "No files" exit 1 fi got_all=$(sed -n -E ' # .* matches greedily so we need to be careful. The following loop # surrounds the last commit hash on the current line (before the first # \n in the pattern space) with \ns. If it made a substitution, it # loops. :split s/^([^\n]*)(\b[0-9a-f]{40}\b)/\1\n\2\n/; t split; # If the pattern space is a commit hash, print it. Otherwise, remove # everything up to and including the first new line character. If # the pattern space is not empty, repeast. :print /^[0-9a-f]{40}/ P; s/^[^\n]*(\n|$)//; /./ b print ' $files) echo $got_all # We want to dedup, but if we do sort | uniq, then the order is not # preserved. declare -a got declare -A dedup for commit in $got_all do if ! test -z "${dedup[$commit]}" then continue fi dedup[$commit]=1 got+=( "$commit" ) done commit_i=1 subs="" for c in ${got[@]} do commit="$prefix$(printf '%03d%040d' $commit_i 0)"; let commit_i+=1 echo "$c -> $commit" for i in $(seq 7 40) do subs+="s/\b${c:0:$i}\b/${commit:0:$i}/g;" done done sed -E -e "${subs}" -i $files } # Use a one letter prefix for each scenario. Make sure the files are # listed in order so that the commits are ordered correctly. rewrite_commits a $(ls -1 intro-??-*.txt | sort) rewrite_commits b $(ls -1 frob-??-*.txt | sort) $(ls -1 frob-???-*.txt | sort) sequoia-git-0.5.0/book/src/SUMMARY.md000064400000000000000000000004231046102023000152540ustar 00000000000000# Summary [Introduction](introduction.md) - [Signing Commits](signing-commits.md) - [Adding a Signing Policy to a Project](adding-a-signing-policy.md) - [Authenticating Commits](authenticating-commits.md) - [Authenticating a Pull Request](authenticating-a-pull-request.md) sequoia-git-0.5.0/book/src/adding-a-signing-policy.md000064400000000000000000000066021046102023000205210ustar 00000000000000# Adding a Signing Policy to a Project To start using `sq-git` with a project, you first add a signing policy. The two most important things that a signing policy says are: who is allowed to add commits to the project, and who is allowed to change the policy. Imagine a project called Frob. Alice is the project's maintainer, Bob is a committer, and Carol occasionally makes contributions, but all of her contributions are first reviewed by Alice or Bob. As the project's maintainer, Alice is responsible for creating and maintaining the signing policy. To mark herself as the project maintainer, she uses the `sq-git policy authorize` command: ```shell {{#include ../examples/frob-10-alice-adds-a-signing-policy.txt}} ``` This adds a new entity, `alice`, to the `openpgp-policy.toml` file at the root of the working tree, gives her all rights, and associates an OpenPGP certificate with the entity. By default, `sq-git` reads certificates from your local [shared OpenPGP certificate directory]. This is the same certificate store that [`sq`] uses. By default, it is stored under `~/.local/share/pgp.cert.d`. If your tooling doesn't use the shared OpenPGP certificate directory, you can export the certificate to a file, and use the `--cert-file` argument instead of the `--cert` argument to designate the certificate. [shared OpenPGP certificate directory]: https://sequoia-pgp.gitlab.io/pgp-cert-d/ [`sq`]: https://book.sequoia-pgp.org Before Alice can authorize Bob, she needs to get his certificate. It's important that she make sure she has the correct certificate, as otherwise someone else will be allowed to make changes. Alice might download Bob's certificate from his web page, his profile page on a forge, a public directory like [keys.openpgp.org](https://keys.openpgp.org). This is a good start. But, before she uses the certificate, she should double check that it really belongs to Bob by asking him to send her his certificate's fingerprint via a different communication channel. The most secure option would be to meet in real life and exchange fingerprints. But sending it via a secure messenger like Signal, or checking the fingerprint in a call is usually enough. It's not only important for Alice to check with Bob for security reasons, though: Bob might want to use a separate certificate for signing his commits. Once Alice has verified Bob's certificate, she can authorize him as follows: ```shell {{#include ../examples/frob-30-alice-authorizes-bob.txt}} ``` That is, she uses the same command as before, but instead of making Bob a project maintainer, she makes him a release manager. This means that he is allowed to add commits to the project and make releases, but not modify the project's signing policy. If Alice doesn't want Bob to make releases, then she could have made him a committer using the `--committer` option instead. As a general rule of thumb, a project should have more than one project maintainer. This way, if one maintainer loses access to their certificate, another person can add a new certificate without violating the signing policy. Since modifying the policy is a particularly sensitive operation, you might consider having two entities with different rights and certificates: one that is allowed to change the policy, and uses a certificate that is stored offline, e.g., on an OpenPGP card, and another that is only allowed to add commits, and uses an online certificate. sequoia-git-0.5.0/book/src/assets/github-fast-forward.png000064400000000000000000003702631046102023000215000ustar 00000000000000‰PNG  IHDR5Þ#ÁL›ÄzTXtRaw profile type exifxÚmP[!ü÷=/c»6é zü¢°ÉÚv‡tDÒx¿žé6A(IrÕÒJƒ4iÔM(8úbY¼Àjd·|:ÐRd)ž'½ Å#žù¸pFì¦òÅHQ¸ï…&I¿Œ(:›M}„Q #&/`tÿ”¦õú…û€ê+MÝÛþÙW›Þ‘í&Œ ÆÌâ ð\9q_¢Ï„Ä¥…³qæf6s:‘>€*Y…¢(’zƒiCCPICC profilexœ}‘=HÃ@Å_S¥¢‡fqÈPì¢"޵ E¨j…VL.ý‚&-IŠ‹£àZpðc±êà⬫ƒ« ~€¸ NŠ.Râÿ’B‹ŽûñîÞãî 4+L·zâ€nØf:™²¹U)ô "CDaVmN–Sð_÷ðõ.ƳüÏý9µ¼Å€€Dg5Ó&Þ žÙ´kœ÷‰EVR4âsâ “.HüÈuÕã7ÎE—ž)š™ô<±H,»XíbV2uâi⨦”/d=Ö8oqÖ+uÖ¾'a8o¬,sæ(’XÄdHPQGØÔW)Ò´Ÿðñ¸~™\*¹Ê`äX@:×þ¿»µ S“^R8ô¾8ÎÇÚZ Çù>vœÖ |®ŒŽ¿Úf?Iot´è0´ \\w4u¸Ü†ŸjŠ©¸R¦P(ïgôM9 r ô¯y½µ÷qúd¨«Ô ppŒ){ÝçÝ}ݽý{¦Ýß’r³¾Ä s xiTXtXML:com.adobe.xmp º1»bKGDÿÿÿ ½§“ pHYs  šœtIMEé .±xô£ IDATxÚìÝwX×Âðwvé½wiv±÷{‹Ýhš1¦›^M7]S¼‰Ÿ©jLÔ˜hLÓØ{WP!¨*½Hï ,lŸï…PD@Ô÷÷<¹wgvvæì™³ã2ïžsQE5@T\* {‡€V]N¥Jœ| ¢æffpu´‡\.k‘cëõä—@§×C.“ÁÛÝVæl^ü~Y·`mm‹ç#ox¿ÿEbÍ/¿"â¿HÂÁÁíÚ¶ÅŒiSpïì{ —Ë[õþ‰ˆˆˆˆˆˆˆˆˆèÖ'ˆ¢(²ˆnMW 5¯äæêŠÿ-ù#‡ßÕ,e îƒÁxòñGñîÛoðµ ’’<ûÂ+8~"TZסæ7ßý€¥Ë¾­÷ùþýúbõª°³³m•û¿Ž„â·?6cõ÷K ‚´þb\">Yò ~üú3ØÙÚÔz^oÀéȳˆ<ø¤”””A«ÓÁÁÞmƒ0ê®AèÙ­KƒË‘z9_/_ƒüÂB¬[±”›ˆˆˆˆˆˆˆˆˆ~–莑_P€ùÏ<¨óѬŒÛLRr ¦ßsŸI Ù¶nßqÕÀN‡G`Áo·Êý_¯”´Ëð÷5 4 %õ2Ü\ë 4Ã#£ðòÛãÛ•¿ 7¯ƒúõƳ¦bÞ÷`È€>HN½Œ%_¯ÄʵÐß8Š÷/E±¢„ ›ˆˆˆˆˆˆˆˆˆ¨?KtyùÅçqßì{ 7 (.Æùè¬^û+ââãŸ/ù ~]ÃʺM?Šg_x%%M‚i4Z|úùÿ¤e{;;,ù|1†Œœœ\,þô :r°{ï>„ž<…Á´šý7FRÊethTk}rZ:ýÛÔù𣡧Ðo¾<~>Þµž¿wÆdüúÇfì;t mü0~tÝ=¥Uj5~Z÷BOý‡é“ÇA©¬À¡c¡làDDDDDDDDDD•ØS“è6boooo/øùú $¤ î¿o6þýg#‚ƒ¥mNž:’ÒRVÖm`ݯë1ï±§¤@38(÷ß7»Iö}øÈQdgçHËø&N{;;´kŒåß OOéùÕk~iUû¿^z½—32X;¼LI½Œà€ºCÍWž} ¯>÷x&˜™Éñðý3àäè€Gê)ÓÒ3ñîÇ_âLT ^}î Ü;}ôz=8Q ·EOÍ’=#Ë‘Ÿ¡…²Xò” =ÊKŒuNJõ|,Ø8È`ë(‡ƒÜøØI7_s´ímWù-ÿmll0cúT|õß ÒRÓеkHÛGGÇ`Ýovê4rsr!73ƒ¯¯† ŒÇ?_Ÿ*O^^V¯ý‡Ååôth5Z¸»»£OŸ^xø¡ѧw¯z_[V¦Äž½ûpèÈQÄÄ\DNn.Ôj5ìÑ©cLœ0÷ß;æu¾¾´¬ ~ÿûB|B"JKKann/OOtë‚Çaâ„q°±±©óõ»÷îæÍ[pö\ŠŠŠammví‚1nÌh<ôà ž÷1¿ —‚«™3¦aéÿ>¯wû£' %5ˆCûwއ†IûèÖ5k~^‰•«~n’vvÒ¤ Mº{¢ÉóVVV˜9}–¯\e,ˉ0¨ÕjXZZ¶Šý_¯ËYÐéôô÷3Y¯Ñh‘‘•ƒÀ¿:_'“]û·Ar¹mƒp.úBÏÿwö<ÌÌäXüÞxy¸8Ý5‘©[6ÔÌMÓ"ê`).*GQ¶Žg’E§Q’¯GI~]½¢ àêkŽ}­Ñ}”=<üÍoÙ÷éììl²\^QQkQ±äËÿ“B$‰FƒøøÄÇ'`ý†øâ³E˜>mJ£Ê±{Ï^¼²à-T\qüôŒ ¤gd`ËÖíxäá‡ðþ·k…E……9fbì#ìäi„<ü… ¿®“““É6±qñ˜ûÈãÈÍÍ3Y¯×ë‘’šŠ”ÔTlÛ±»öìÅO+0Ù¦´¬ Ͻð2Ž;a²^«Õ"2ò,"#Ïâ—_×ã§•? ¤KçkÖƒ›«+† ŒÃGŽöï?­V sóÚmìRlœhÀŒéÕuÿå’Ï0eú,„t錥ÿûVVVÐh4MÒf¢cª¸n]Cê Šû÷ë#µ•J…óÑ1èÛ§w«Øÿµèõz i9!)ffrx¸»B«ÕJëSÒ Š"ü|¼¤õ‚ ƒ™ÙõýàájìôIã0iÜ(“:`¨IDDDDDDDDDdê– 5ËŠôˆ:\†óGÊ›ª5}RAD"A €O4ÕM€cˆ ÆSÙž 2´ËÐ"lK <ÌÑ}„º ·ƒó­Õƒ355ÍdÙÍÍ­Ö6K—}kh:ØÛ£sçN(//G\\<Ô Ô ^}ý-¸»»aÈàA×U†ã'BñÌó/Ka……9:uì+++\Š“Âʵë~ƒ££#^yéy“×»º¸ {·®8~Â8„§½`E$&&A¥R.\¼„÷?\„o–}iòúW¼ihz{{ÁÛÛ e¥J$&%I=ïuÉë žœÿNž:-­óòòDÛà`ääæ"!!••G{ ;·m‚»»û5ëcÆ´©R¨YRZŠã¡a9¼ö|‹;wí1Yž>uŠÉ9úë÷ßàîî¡òB×TYX\|‚ô800 ÎmÚ›,'&%78tlîý_˲åkðßÙóµÖ?öÜunÿâ›Iý|¼°äã·|,¥²q‰ÉèÕ½îÞÑ‚ ÔÛ»˜ˆˆˆˆˆˆˆˆˆˆŒn‰PS§qî`BÿU 8§f¯L !@*ïä „êgšt5oÁdA„(BT<7U‹ý¿!bw)†ÌtDÏQöÝŸ ÂÂ"lÚ¼EZöòòDÐ!R||¾ûa…´<éî øâÓEÒpªii—ñØ“O#!1 ƒ/ú »wl1­³«}†u:¼þÖ»R Ù¡}{¬Zñüåååxõõ·±{Ï^Àò•?âûfÃËËÓd?Ï?û4Ú·k‹©S&¡gîÒñ ñØOã\”1¤Ú¾s}òìí™YYˆ¹pQÚÏ3óŸÄ›¯¿*-+•娽g/Ž=Ž1£Gšó÷?þ2 4ß~sž|üQ©'é‰Ð0<1ÿ9TTT /?ßþ°°ðšu2nìhØØØ ¼¼°kמ:CÍ]•u}z÷‚¿¿éÜŽW¨MjŠ¢hÒ#ÖÝ͵ÎíÜÝMÃñÌ̬V±ÿ†xpöTL½{Œ´üÓ/áã퉻Ǚžÿ¿ÿÝ F‹ï&­³´°hðqTj5¾]µr™ ³§OâE—ˆˆˆˆˆˆˆˆˆ¨‘d­½€*¥[¿ÍÇΕ¦¦(¢ª¦ "Äê{ù"`L3™hÒµTöÊ„PÙnŒ‹X•eV…v5‚¢âv,/À¿_çA¥4´ªw£Õj¡T–£´¬ 陨¶c'îŸ3……Ò6óŸ|¼Vùë†RàèæêŠÿ}¾Ød~Hÿ6xá;Òrl\µEÚQ™Ri²lee]ï{¨©* ½ÙûooO´”þ+,*F—ŽíMÖµDi™íÛš®ó÷«=¯¬Á`@±¢ÅŠä"6! ›¶íÁ«ï,BII)>Y¸>^¼ä5R«îg–¥Â–¯óPZ¨Gå¡ÕO UËÆpÁ¤W¦Óm‰ê%^ÑnPwïC“uÆÇ1Ç•H» Â=¯{ M'ËVñn>_ò>_òU½Ïß=q<æÍSký‰Ê!]`àÀþR¸XÓ€þ}!“ɤy£ÎG£SÇ *×ñûwsuE÷n]kmãää„N: 2ò¬´ÿëáçc4)Õ=}}¼aii µZ øxÑgP–)ñМûkg5ååç#.¾:¼=jDÛ Ø?¬øP\\ŒôôŒZÁi]fL›"õ¢-..FØÉS6tˆôü®CÏš››còÝZ¤©®˜óÔܼþ*ÌÌ̤0¶ª~oöþ¯WaQ1”åµÂJƒÁ€ŒÌlL;âšûÈÎÉÂ÷>5Y'—Ë1nÔ0L? ÎN޼ÜÝ€VjªË ØõcΩêÍ#@„jK /©¥ˆ¢XxŠÆf'¥…z¬}; ÝGØa“.°´iŸ­­­ñÜ3óñìÓOÖꉨÑh‘˜”,-oß± Ûwìºæ> kôþ¼–‹±±Òãü‚¶ëܨýçääâÏ¿ÿÁ‰Ð“HLLBII ÔM¯×ôÒc+++Ì{x~\µ R©°øó%ø~Ÿoö=xxîƒðõ©ÝûîÒ¥X“å…ï„…ïtͲ6(Ô2x<<Ü¥¹>wîÞkjîÜ]jŽ> NNN-Ò^,®^U«ÕÕ»mÍÞ¥VÖV­bÿ×+-=ÐÆÏÛd}vn>´:Úøz_s®.Îxóå§¥÷£T–#=+g¢b°{ÿ صZmƒ·U_ÿ14Óýoß± ¯¿õ.*®èå×Po.0ΡùÓÏk¥Þ¦ÅÅÅX¹êg¬úy î™1 o¾ñÜ\«çw,V4oÝÈd2L< ?­^ Ø»w?}ô>är9ÒÒ.ãÂÅKÒ¶3§Ok±öreO]•ªî:¿ò\8ØÙ·Šý_¯ËYpuq®8¦gdAøz{^s––èѵvX?gö4„…GbÅê ÈÉÍLJo½Ôà¹h‰ˆˆˆˆˆˆˆˆˆ¨Z« 5KòõX÷^в«zæˆ5†ý*2̤›¨®,BA†ÜT-Ö¾‰‡>ò†£»ü¦ï½wßÂãÎlþw+^Yð&àð‘cزm¦M™Tû-]°ôëÛ={t¿æ±z÷êÙðj«q ?__Lœ0 ”'$&áå×ÞzíÉårÌš9ƒ‚»»ÌÍÌ’š†×ß|§ÞýÉår¼óæë˜=sV¬úÛ¶ï‚SƒÁ€¿þÙŒÃGãŸ?ÖÃß¿MÕUÇdÓ¦L‚‡ÇµçEôòòjpÝ̘>U 5 q*<ƒ0é¥é`oQ£F´X;277‡›«+ò yùun—ÅzG‡V±ÿkÑh´0ˆÕóᦦ¥Ã×Ûª+†·MN½ Ow7è è+Ÿ“ 2XX˜_×ñõë¼üBlüg"ÏE£OÏn¼–]§VjªËEüþI¶hŠ¢1©å 3©uª ÞE ÈP˜¥ÃÆÅÙx|‰Ì,nno¬Ó§â÷?þÂéðÀGŸ,Æ]C‡ÀÙÙtSW“y {tï†wß~£IËâáÄ$€£“ãuïã™ Cúù§Ÿ`ö=3L¶iè°žíÛ·ÃWK>Ã[¯¿ŠÕkÅš_~…J¥äååaáaÝšŸŒåöp7yí”É“0fôÈ&­›.Ñ¡}{iîÎ}û`ðÀػÍĉãayÅ­Í-88H SRRëÜ&!)Éd¹c‡ö­fÿWóŲ帗XkýcÏÕÝ.k®÷óñÂ’ß¾îcöïÝÿÙ†Øø$†šDDDDDDDDDDÐ*BMÑüõENå³ ŠÆœHDõ†D­Reûªæ}5öØÜ¼,³x@¸É#Ñ~üá{˜4u&ôz= ‹ðñâÏð_~aú¾¾>HMMœ:Þäåhãß8y …BGGÇ¿¾*ð[[Ìš9½Ö6¹yy×U&www¼ùú«xhÎý˜÷ØSHH0†\ÇŽ‡B§ÓÁÌÌ þmÚ˜¼æTxx“‡š0}Úd,ùòÿGGaaΜ='=?cÚÔo;}ûô–ñóÑ1Ðh´µz(FDüg²Ò¥K«ÙÿÕÌ{p**ŒA¶F«ÅgKÀ³¦¢CÛ “í¾üöG Ôûö’ÖYZ6.\¶®œT­Ñ‚ˆˆˆˆˆˆˆˆˆˆ®_«˜üïàoEHŽRU.*»fŠn–nBåÿƒM¸VŽƒ¿Ýô’uêØóæÎ‘–7ÿ»GޝµÝÝÆKÏGÇàð‘cMZŽšû×étX¾ò§ëz½N§—[[Y×9'á–m;U6_Ü7ûiYE”WÎåèåå‰^={HÏýñç?ÈÍÍkòó4}ÚéqbR2¶ïØ Q4^û|¼½1 ßfi……EXÿûزu;ÔÉscFU‡·åå娱s—ÉójµÿlÞ"-wïÖvv¶&ÛÄÅÇã—uëqô؉ZÇnîý_¿Ÿ:¶FÇöÁ°²² ê×KZ×±}0¼<Ý¡,¯@ßžÝLÖúû5ª®³²sn®Î¼d5ÂM5ã#*ºY@€( 6[=è,Ñ­C¬ 6aTèfbO—ßôR½òò pws“–ßYøÊËMËuïì™&½äžélݾz}u˜¨×ëqö\¶o½ûþu•aèA –Wüø¾ú¿o Tš–#%5+WýŒ³î7Y_5Ç%ä`ûŽê¬¬L‰OŽ·l«÷ø‰Iɘ:c6Ö®û­V(YRR‚}ûJËNNNp°·—–çÎyÀdÛ~Ô¤%TTTàÐá#xñåذñÏë>G>ÞÞ8 ¿´ü×?›¥ÇÓ§M©3ĽQjµS¦Ï»ï}ˆ—^}O?û¢Éó½{÷D·®!Òòû~‚]»÷¢´¬ IÉ)xú¹—#=ÿàý÷š¼þRl&Nž>^„‡}?®ZÝ¢ûo¨ä”˰³µ›«‹i›I6ö\ lÓ$õ½÷à1‚À¡g‰ˆˆˆˆˆˆˆˆˆé¦?«ÈÓcóÿ{¯ˆ¢XãÆ=Mº‰2@¨ 6+§ÚÜòM>žZê'›÷Q³·³Ã;o½ŽW¼ ÈÈÌÄÿ¾Z†Þ{GÚ&(0 ßy ïø cPøâË ðÎÂàååFƒœì©7ß„ñ㮫 r¹ß³3fßMåð›ß~¿+~ü þmü Š"òòòQZVÀ,Ö4~ìhlüã/iùù—^Å—K¿†……RRS Ñháêâ½Á€âââÚ§Fu>Qç£ñáÇ‹áééwwhµZ$§¤B­VKÛΞe:WçÌÓpàÐaìØ¹ˆ³î‡»›œœ ,S"+;[êYÙ§w¯F§Ó¦àä©ÓŒ½ek®o ‰IÈÈÌ”–;½^¹\.­[øÎ›xà¡G`0PZV†gž©Î}uí‚YWÌqz"4Ì$?täžzò1“mš{ÿ ‘œzAµƒË¤”4xy¸_u®ÖÜü$%§¡O¯n07«û3®ÓéñÇæí8qãGß/^+‰ˆˆˆˆˆˆˆˆˆá¦öÔ<ü{ÔåÆ À8u&‡š¥[˜PÝø*ŸW+ 8²±ø¦mÆô©è×·´¼vÝoµz>üЃøtÑG°²²’Ö••)‘ˆ´´Ë&ÓÊd×ÿÃ.ØðëZøúøHë´Z-“’‘”œ"šuíäˆá˜6u²Éº”ÔTÄÅÇKæº5«L†4½šœœ\œŽÁ¥Ø8“@sÄðaxíåkm¿ôŸãá‡4Y——ŸøødfeI&²Æý(câÄñ°´0¯1¤Kg´oß®YÚ„““霦ö&& èߟ~ò!ÌÍÍëÝOÛà ¬ZþÌ®õœ¯¦¯ ª[bÿ qµP3ø½4•Êr|³r-žzñm|¾l6ü½»öÆ#'°}ÏA¬\³Ï¿þ>vì9ˆÑÇ`î}3x$"""""""""j¤›Ö},å¼ Q‡ªBŒÊ0H`MºÕ‰R/ͪˆ3êPúMt€O{‹›Z²O>z“¦Î„^¯‡(Šxóí÷°cë?&Òƒ÷ß‹‘Ã醴bÿƒHÏÈDaa!ÌÍÍáááŽÎ;b䈻0eò¤F•¡oŸÞØ»k¶ï؉í;w#))¹yy Ñ®m[ <3§O­õÚe_-Aÿ~}ñû!>.2¹^žž5r8žžÿÜÝÜ0rÄ]ø{ÓæZ¯  Äo¿üŒ»ö ü¿Hdff¢¢Bsss¸»¹¡[·L›:Æ­³Ü–––øøÃ÷p﬙øgó„†DvN.JKKacc oôèÞãÇŨ‘ÃU7öö=z$vîÚ#­›ÞL½4ã\¢¯¾ü~úy-llmðaž»5ÝßltïÞ kù¡a§›— 33s´kŒ»'ŽÇ¼¹s`]GoÆI“&bÏÞý8rì8ÚÕ·Äþ¯F«Ó!=3Ó'×îyœ”’†)Ç\õõAmðå¢wq2ü .Å% ôÔ(--ƒN¯‡µ•ÜÝ\0 oO 2Áþ¼<ÝAoN÷Èu ³‘£’–M‡Ÿ%ºÅU%›•B¬ðð"/Ö Q#Ü”ágS£U5MÑØ£&ÝN¤ölüÍ@jŒ ©Ñ*Ö Q#Ü”P³jŽAcQçÒ¤ÛPe\/MÛæÖ$"""""""""""ºµøœšÅ9:c/MQ8—&Ý,o¬÷‡¥1×ÿôÞTèµM® !@ CjŒ J…¶Ž2V>ÑuhñPóÜ¡2ãA„€– 3ef@ÿ»ÐsŒ=Ü|Í‘“¢Aì©rœÜª€FÕò=EmäxuM“uÛ¾ÏÇÙýe z½Wž\êc²nãâÄGT°U·¢ñ?A@Õ0´ÑGË0`Š«†ˆˆˆˆˆˆˆˆˆˆˆè:´x—±ªy¥g[ O”› xü Œ}ÔîmÌ!ȯ` À s>ô‚ܼuô bÛàm»ÞeËÖ{ EÁ¤½Çž*g¥]§ 5uéqj€ ˆÆ §òÄ¡÷8Â+Ø¢Îçü:ZbÀäÖÑs.¨»5lvJB†Ú±õÞ¤‘•+ÿ?=N †sÈ] 53âÔ5æ-ÐR£Ïv\Ý«ñà¯EødF o(’Öuqs¬D±Fd¦e­K8¸ÉÙI¶âV®fv¯×ŠÈ¨ ö‰ˆˆˆˆˆˆˆˆˆˆˆ¨aZ4ÔL­ s„ÿÛü\«§=½³¾³TZçäavSOBJ´ š cØ2ôÚ¡f×»Œ!¬º\Dòy[q#‰-ÖaR4i÷ÕŸ""""""""""""jˆMóò3´bX³ù“¥²b,mÌ}'8à¿=%~¿“ô|Q¶ö¦ž™ˆ=]ŽnÃmáßÙ vÎr”éëݶKeoÎK'•50––› è6Ü=FÚÃÅÛ Öv2(K H¿¤BÄ®R¤ÆÔŽÎzÃÙ ùœ ¿}˜ è4ȃ§;ÂÃßæV¶|¨ÃeÒkÐw‚=º°ƒ»ŸqØßÂ,-bŽ+qj›zðæ†XX 8±Iƒ¿5i™«¸ù™cðLGu·†­ƒ 奤Ǫ¶YŒøÊa`[`jR¡²µWµûªÏ5L‹†šéÆ0§º‡fËt•»p¢Ãf;ÆÌsƘyÎ&ÏŸ;XvSO‚…¥€˜ãeè6Ü‚ è2ħ·—Ô¹mpOkXÛ“ÌècJthsÍý;¸ÊqÿBOxZÔZ•æ©Ð IDATßeˆ­t¼=?Ö»'OcSóˆ M3ƒ´´PWÝ ,<ø¾'B¬L¶ñ ¶€W°ºÞe‹M_åÁÂZhÖ2‡ µÅô—Ü!«ÑÂí]äè<ÈØ`çÊ(zØ9Ë›ÿWŽ?[õ޹:^yˆˆˆ¨Q Êt@¹ÐØRߨ[€™˜Ë[3ã26‹;¦ òüÝÙZ4Ô,+6†95çl ¡›ŠÜà ¾,k=^Žð%7õ$ÈÍ$ž­€Ji€•­ !Cë5»U=«TU®Ã®ÞÕÐÜRÀ˼áìe<Õ9)Ä…W ¢Tw ta¹Ð²J õݬ¨s?nfè=Î^ 4õ: $_[G9J «{•NzÚÕ$ÐLU#'YK[»ZÁ3Ðs?öjÖ2{Y`úËîU敥Ğ.‡ºÜWs÷°ÆÝó]¡RZôî´6ÈóODDDDDtçhÑÑzZºg\Mz­ˆÿÔî…8åy÷›~ªòݘãÊÊ@ÈÐÚÁ_Çþ60·2n}TYùÚúÃaAômÜOE©{~.4  3^ƒóGŒÃïZX h×ÇúªûÛ¼4aÿ*jšLÂÊØÓå&fÕ9ر¼¥úf+³³AÝ«{Šnû.ß$ЀÜ4-Žl,nÁ3,¶šÏÝZе@6Í}ÛÊQë‹î¼6ÈóODDDDDtg¸ã§ ên…Ñ;7h[ kwÝë„'—ú`á?X°ÎãŸp¹å ö:­|yrT…À… ­=¬l×»Œëy:¤Çª¯¹Û€+XÙOqjŒªÎ 2âª÷ådQïþR¢T¸V^ïóþ]ªÃĨCuÏSª×ЏxRÙleöí`)ÕgÞe-²5u¾þB¨’Ÿ~"""jÕ”zãpŸÔp…@ÉéËïØ6ÈóODDDDDt{kÑág­leP*Z_/µÁ3áâeŽ+óë-Ÿ¹¥€¹yç}u€fm/CÿI±Âê7³nxXQÑ\ S¢÷8{x·µ€³—вuRݵíez¶ª—浸ú˜K; ´Á{›¯ù‡úÇlŠ /¿êkÝüª—•TÿÝÜTm³•¹æë³ê~•Åz”+ °ql\ÿŠId­le¼òÑUi @®ŠõйjÀWXð+×Ùyþ‰ˆˆˆˆˆn_-ú§ž™…1Ù¥!S…›úæ/œ¨; ²Á+«ý1çOôŸäŸöÒ¼Œ0pªƒI Y“g †Îrl’2ÅÔ(SÍÞšÛB^AG+kоl¯R™¼þsR’_ÿÏžLz¬*‹ëb¶¢Lßle¶´©nÒeÅWŸ,µ¼´…&S­,^U»¯úÕ§HË!gK‡!½“Û Ï?Ñí«E{jÚ9™A‘§Gk‰tþù2™: ›åÆ`.¸§5‚{Z_õuÖ!t³Cg9bäãеíûÚàð†Ÿ§15Ze±¶Nr„ µÃñ¿ó€v«z6ï²öª=kjäƒN(¹·ôš¯)+ª?èÓëê¿­!\ÇIÕkÅ)³x»0W{?MJA”Ú½“¯¦lð~ŠsªïF´élÕìõXY]õÄΞfÍVæ¢ìê2xYÖ»Ü\€ƒ[Ëdú"Œ I¨ìÎÚT8Ýž*ô¬ƒ¦PÎz¼£Û Ï?Ñí§E{júu¬ ™Œafk (=VôXuÏ ½Ç#2öÊ3Ïcæ9›<sa㵤]T£´P{9B†ÚB£2ÖWF¼EÙ ÿÙtòù ¨Ê °²“ÁÙË íûZ#>¢¢ùêï’ž•af×a¶HŒ¬ûXúÛ4[™3âªÏŸO; ¸ø˜¡0³vuìoc2gj³’º&‹W|Zu7áÐÑ0899àÙ'æ¢}p`£÷µyûüõïNiyõ÷K`eyóÞsk+ÏÍV¡Rcéw«—˜‚ ?¼öü“°·³å¿†DD­ˆÎÀ:`=²în¥÷p2â ¶ì܇ËéY0w`™L?Ìœ2}{ug#$"""""ªëo§–<˜oKÈÍk <+Ü:“œœÜfìÁY—ÜT-Nm/iºƒ‰À…PcHêêkï¶Æ ðzƒSƒ8s º×çÔçÝáÛ¡î0ÇÖIŽþ“n¨ØQ‡«Õí.»:ÃËSê-CS”¹¤@´ •çI¦¾àKÓvæìe†±¸´PË*{hM¹¹pÕ÷3c÷þ#Pk4ÈÉÍÇŽ=ye¼ýw& 1—â¡Õj—Œ°Ó‘¬"¢VF/²X¬»[å=Dž‹Á7+Ö"5-£Ñ& ¤¤¥cé÷?ãb\"!QZ´§¦™…¿–HQA¸Å*J§ñÛÙ4ÝúÙÀ3À*¥ÑÇ”8ðk!ôÚ¦ý«ùÂq%ÔìDsüú{ƒZ_„¶½¬ááoGûÜ)Ñ*d'i`0ˆ°qÃ#ÀÞÁÆ÷súÂÙôX5bO•£ã2ྷ<QŽœ Ì-dèjï¶(+ÒÃÎYÞle>°®|ê A´éd‰çhƒ„Èr¨Ê pö4Gp+ˆ" T`ëØÜ¹~U»0¶x¿–Ò¼£­…¹¹ép¸–u\Z¦ÄžGÇŽ€­5¯ ­Ìö=¡R©Ñ¯WwøûÖ¹…¥EƒÎ7QsY¾z=Ž…ž†·§¾Zü.+ä6£,¯À'K¾¢¤ ^xmƒšüñI)XúÝOprtÀÂ×_¸-ÿ=bÛWQ1—°sßa$&§B¥RÃÞÎm|½ñèC³áåáκã{¨eóö=M¾Ï¿·ìÄ{¯¿À1ÑÌZú€m{Y#5F%-K#s6÷µ0pªi¯¾¡³¶¥¤Á¤¦Bđߋqä÷âf/oz¬Š<=Ýá_j´ eE×?1Œ^+â·÷³0óUv· °›»Õž¯²)¦8Ýòm>rõ‚O; @:ô³A‡~Õ=6348{ wÏwm¶2§Çª±}y>&?ãAØ8ÊÐ}¤]õþuÀ¿ËrѶ— z±kÑößq€M«»ØÛÙâÑ9³qøøI8:Øãž©ëÜîdx$6mÛ >dCÍV&#+þÚpws©7ÔìӣƎЏ„d´Áà}XytËŠ8sËWÿ†Š æÞ7ÇŽ`¥Üd‰É©HKÏ”ÎOs„šÿ†¢¤Š’R$¥¤¡[—ެøVF©1`a`Tˆ-¾yÄç–(÷¾Cǰfýß&ëŠ%¨P©àìäÈKuJIK—ÿðÕ'prlÜè7EÅ <·à}@|bòm_o‡Ž…aÕ/o¿úìmw-¾‡ÓÿÅ¥¸D+P¡RÃÚÚ ¾ÞžèÙ­ ÆŽ [Û†ým˜‘•ƒÿûþ'dfç¢OÏnxíù'šµìié™8ލè‹(,*†J­ƒ½ÚùcÄÐAèÝ#äšû8~‡Ž…!9õ2*T*8ØÛ£}p ÆŽ†Ní›íø:'Ã#q&ê“S¡(-…N§‡½-üÛøbpÿÞ:°/d2/^DDDD·¨5» ±ÅÁߊ€h¨š³yÉäÀ˼àÛÞtØÏ‘sœÜÓ¿¾Ÿ ±þù‰2 šn¼}¬¬ÑûQ* øõÃl´ïcî#ìàl {9dr¥zä_Ö"6¼NÜø¼ j¥kÞÎDÿ»Ðõ.;¸úšCP˜­EÌ1%NnU Ç(ûf/óÙýeÈJÔ`ð Gvµ‚µ½å%z\¾¨Â‰M d'i`e#kæPÓ8쬂(Ýî²k•‚±#‡bìÈ¡WÿÃ4â,¯˜­ØÉð3 ÚN.—áÑ9³YatK3 øsólݵŸ•ÑÊ´›«3JJËУkç:·9zZ­£‡nÔ1z„tÂîý‡á`o@¿f{/7ZNºµTT¨°áï­?/<ûÄ\´ñõF±¢…EÅÙ€ê¥×Wÿð´±&“à\§ÓßöõvèXXõã£a·M¨™˜œ†Õ¿ý‰äÔ˵ÿÆU–#.!q ÉØø8ÞzåYøùx]ó;þʵ Vkš½ì¥eJüòû?=õ_­çŠŠˆ8sgÎcpÿÞxæñ¹Ëeu| øá§_Yëõ§#Ïátä9̘<³§ßÝäÇ?~2þÚ‚bEíѧŠ%(V” *ú" Û/? +KK^ÀˆˆˆˆnA-j:{™!¸§5’ÎV@„ Å>B3ö×8Õ±V Y% Ä }'8 |gI‹Öƒ²XOf¤\u›ý¿aÿ/EWÝæßeyøwYÞµ(ñˆ¨¸®rþ½$÷ºß›AœÜZ‚“[ë®S3óês}Õ^²,s•œd 6/­¿nÎì/ÙýeÍx– 0†÷ ˆîi Ç[ó¡ÅŠ\jäÜ>òVö+Xùmø«\Qq*â ˆî%¥eøvåZÄ\Š—BµFÊi%ìílñõç@¯7À̬öPó:k×ÿ o/F‡…;¶ÃOß|¹\Öl?ŽkŠrÞÑ`È™ýáN'ß[ã¦ñŸD)4xè¾R`îêâ WgžÔ¦ÕóW¥ãtb¼Í°ï VÊm$=3 I©077‡V«Eø™(”–)aog{Ë¿·Sgœzæff6¸?ú÷îoOXZZ"¿ GOœÆÞCÇPX¤ÀÒï~Â’ß®óßK½Þ€ oÁ®}‡öv()-kÖ²ÿ¼îœŽ<A0°o/ Ø~¾^0“Ë‘–ž‰MÛv#!)¡§#áéá^g0¹iÛn)Ð< &Ž7Wgäæ`ûîŒÂæí{àí鎡ƒú5Ùñ ö<†bE ì1zø`ôèÖî®.Œ½]·ï>€sÑŸ„5ëÿÆ3ÍᇑˆˆˆèV¼çp3:ôG$­€ñ>TU iŒ7›CÍ¡G¬+Bèf†ÎrÄÈ9ÆÝGصx¨y'sp¯nvå%·ó¬QÆ6]uÃuè=Í7lY~A!þݱQ1Q¬(­ :¶ ÆÝãF¢C» ü»}/þüw`Ê„Ñx`ÖT“×Ïyòeˆ•cùN7sîÀ– ÇÆ¶IÏÀKo}dòúú†}æææÈÎÍö]s ÅŠXYZ  †顃úÕySúç_ÿÀ#¡kk+üüíu¾÷õþ‹{IÇ[¿jÙÕ/zffHÏÌÆÖûp!6%¥ep°·C·.0}Ò8xz¸Ýй((,ÂÉð3ˆ¹´ôL”––A„{;`ÄÐ ²)*ú"ŽŸŒ@Br*ŠŠ0è pt´G ôéÙƒúõ†……9b’°î÷MHÏÌ–^»rͬ\³AZ®9LUl|>úâké¹/t 6nÚHI˨j<†Ø„$ØÚXãŧE·.q&*¦ÙËîè`·^~ºþ›GfrŒ6k7ü •Y9ð÷«ž3ùdÄhuÆÏì½Ó'Õ¹ûgMÁéÈs(,Rà¿3ç1°_¯&;¾»› fN_ÿ½AÀˆ!}¢(ârF&ºtlÏ%Ñ-ÆìfxÔ\g¬y+ ÆÁgQys¿yzk–äëáîoìMÔo¢B7+ÐïîêùNnïÞ‚-kägœ=PŠ¢ìºo@Œ™çoc³+-Ô##îv 5«zgŠ&í½9”–)ñÕ÷?Õ{S_E¬Û¸ ÖÖ TíímÑ¡]%¥ÈÉÍ—Ö´¹yõåùž^r:½ËV¬‘nÊd²Z_xd k‘áýô¾Y±V 4årôúêòhµZüßòÕøßÇïÀÍõúÏYÇöÁ°¶²„²ÜسÀÙÉ®.N¨¨P!3;Wêíz,ô4:´ ªõžEQIJå«s)þªÇiãë€6¾ÈÎÍC‡vAÐju&óöxy¸ÃÁ¡:hô½Æ\=W:!Ë–¯6é[W}]ˆÇâ/¿Ã¢÷˜üÊúJ~¶ÌdnALö­VkðýOëðõ瘓oÙihÚÚXÃËÓƒ™Ù9R»6¨ßuš/¾ù!ò аø½ô÷Ãáã'qäÄ)\ÎÈ‚Ao€«‹zõ芩ÇH¿ÞNMËÀîƒGs1EÅÆÞÆþm|1zø îßûªÇS©Õ8râNœŒ@Nn>Ô \œÐ­K'Œ5 >ÞžW-çg¼€6¾¸œ‘…¶ìBlB%¥ðóñÆ’ß2yMU¯èóbQ¬PÀÚÊ þm|1bè@ ÐÉ©—ñî'_ÂÛÓ_-~·ÞëFÄ™ó8x4—3²PRZ 'G´Á˜C¯9çUvN¶í>€è‹±(*VÀÊÒ~¾Þ9t †ê³ŸŸêaü½eæÞ7––Æ¡gkÎeÖŒ?r8‰ÿÎF#/¿*œáîêŒÎ0aÌðZGU Gbr*JJË`cmwWôïÓ#†¬·'À‘§°rÍôê‚×_| 9¹ùغk?Î_¸$õ¼ð÷ÃØCЧg7é=ï;ta§#‘‘•cìùìì„]»`ÚÝcë친—_ˆ—ÞúV––XýýT¨ÔرçNÿw9y°07ƒ§‡;† èƒñ£ï’zaGœ9CÇ”’†2¥övvèÐ6S&ŽFÛ €zc<_ó¤ÏDZÐÓø{ë.äå{Ã%§^ƃO¼dòÚ¯?ÿîn.×ï†"üLÒ3²P^¡‚£ƒ=|½=1lP? ì×»ÞžÇUÇ›3{&…˜Kñؽÿâ“Q^QGtîØ“Ç’nì+JJ±sï!Dž‹F^A!ðòtÇ€¾=1iÜÈZ½—nÄ–ˆ¼ûGà£Ùž¸§ÿÕç“üðïü}Êø}`Çp7–åÅ5™8W.mçb+Çk÷¸álª Tð¬JN½Œ}‡Žãb\ŠŠËdpuqF·.1zøz¿oÜèuóz…Ÿ9‡Ò2%A@ß^ÝPXTŒû!=3 I©hPïkß[¼‰É©èÙ­ Þxi~½ÛUäbgkƒ¿þ¬ÎmÊ+*°cÏ!„GF!/¿‚`ü¬ ìÛÆŒ€……9{î ¨ÔêZÿÖÜ(;[[“¿¯4}ÒX+0yü(i4¾uܳpsu1¹¾ÕŸ,]7ëû[ÊËÃþ~>HKÏDä¹h“PóFß ¿ok\ŸE‘× """¢[ÑM 5ý:Z¢ûH;D*“fÓk̲ٔÎ)“B¥Ñ;côÃεž§¦1`²†ÎrD~ºY‰çê ©0ÀÊV†ö}màP}#åðïE0èoÇZ¨jÑÆ^šÝGÚÁ¯cóÌ'µuç>(•Õ7B:µÇ¼gÁÇËŠ’R9~ mÙ‰Š U£ö?°o/ ìÛ ‡Ž…aÕ/¥õ/?óXƒn<«Õ¨ÕÜ5¸?fN7W(JJñÏÖ]Øø„´ÝѧZ$ÔÔjµÐjµ˜5m"ÆŽ{;[äæ`íú¿qöü©Ì›¶íÆS“ub~g8~«Öm¬uÍÌ/(D~A!’R/ãîq#MžS–Wà›kpþB¬ÉúÒ2%JË”HLNÃν‡ðÂüyWí ‘•˜Kñøò›MzŒ)JJ}QÑqßÌÉ=|ýï[¤¥gš¼>7¯û‡x^´ð5“›~5©Ôj$¥¤á›k‘›_`r}LJICRJÎÅ\›/ÍÇŠÕëq,,¼V{<ygÏãÕçGï]T·§þ; QaaaF ¹\g'ÓÄryÓÍy¬R«‘œz߯Z‡ÌìÜ+ÎgŽD ôt$^xjôíyCå<~+Ö¬¯us5'79¹ù İÁýñøG¿¢ IDATC÷¢é%K3ãg°°Lç~΀Rc@…FĹTmÊÅ£#œñî9°µ’A«•¦ÂÛ³ñçKþ¦Ÿ!Xð[öD¿Ëe€«Jˆ´|-ÒòØö_ ¾{ÔƒÚÛÔY¹€ZAc¹ÚC?žfÕדrïý™ƒÍá%0“A*Z¾kátB9Ö=×Fzÿ7ÔNTjìÜgÂÞÆÚJúQRÍ›ñWž(.V ;'Ÿ.ýùEÕçÄÒÂä†yZz&¾üv•ÉжÆóŠQXTŒób±kÿ¼òìãWý1UFV¶îÚÿl3Y_PX„ãaá8qo¼4V–øbÙ ”ÕønXõ$õrοˆ…¯?ßd#ŒïaϷ桴€Íካ†š»ÎÛØ€vÖR  fržNfèäm‰]lqw/ØZ 8›ª]›(Šøýï­Ø¾ç`­çÒ3³‘ž™½‡ŽaÎìé˜0fx“_7¯×¡£a€®;ÀÙÉÎNŽðöô@VN. »j¨ÙT²sò°èËïPXTl²>%-)ié8|â^xj^³ C›Pý#Š6¾µô!“ÉðøÜ{QëbÝ T}wPëGTI)ÆYú_umƒ–ž‰¤?ÊlŠã7ÄÅʰ‚¿ëüá'µf7óàcqAÜér¨”i¸N•aPS Û¢@çÁ¶ðn[û—éñj„má/€›š›Ÿ9Üüê¹q'Gÿ,ÆÙý·a˜\Ùÿ'ÂÊV†±¸4Ó¡D“áñœ°à…§¤ÞKÎNŽ˜>y´:6oßsÓª¤}Û Ì¯1Ôª£ƒ=3c‘•#Ý@h)CöÅÌ)¤e7W¼òÜãxíÝÅÒMÇ“ágðøÜ{uÓo\=[@_Ü5¤?vï?ÀxƒQE“`h÷#Òck+K,|ýyi.kk«Ê¹`šwˆ¤ªá ªÜ7c’É{òpsÅsO>ŒÜÿgï¾Ãã(¯¾g¶H»«.«Xî6ƽ7l ¦›n @H …—$¤@*!•'yHHHð„„’PB€Ð»iÆ`ãnãŽ{·¬Þ·hwfÞ?VZKV±ŒÛÊþ}®Ë igwÚ=eçÜçÜålÞº€wçÎçšYuº½¾vÓ Œ14ñûÈa§rç¯àþIümûÎÝ­‚š-;9Y™­2YLÓdôÈaŸ¸T0ÀãO=O(æªË.dÚ” de¦S^QÅ+³ßeÞ‚%TTVqÏŸþƶ»èÛ§ˆkf] ñ‡4›¶lã‘ÿAÏÂ|ìßîr®^»·Þ›‡×ë᲋ÎcøÐSðx<­2÷—$š™é|öšYŒ1·ËÅÞ’RÞš3y –°výÆN·Is@3Åëå³×\ÎÔÉH ø©¬ªæõ·ÞãÕ7çðÖœyäåæpé…ç¶zï¶»xà¡Ç°,›ì¬L>÷é+=r(n—›}¥e¼7o!o¼=ϺIyú^¿q ÷ÿíÇ!';“YŸÏÁƒðz<”UT²iË6LÓ$5e'Û¶ùãŸf݆M†Á%œÍô©“ÈËÍ!ް~ãfþû«”–Uð›{䮟~¯Ãheå•ÜûÀÃõ,àÚ+/a`ÿ¾X–Åú›yô?ÏQS[Ç3/¾Æâe+Ù½wW^:“©“ããÉVVU3ûxgî|jëêyòÙ—ùÆÍ_èp]ïþã_p¹\|募eÔˆ!x½^ví)æßO¿ÀÖí;Yµf=wþú^6mÝΔ‰c¹ø‚³)*, !dÙGkxòÙ—‰F£üãñÿ2vÔðÇÖmé{ß¼ 1–VßÞE‰ì·£åî?þ…Æh”뮺”‰ãF“•Ium-Ë?ZÃ_|ÆÆ(=ú$cF Kì×C]ÎÕë6$ÚM\}ÅEœ:h^¯‡’Òræ|°€·ß›Ï.Çák-Æ;\.3~ýx~I-Ã{§rïŠøh{ˆÿº›E›ƒ”×ÅøÞ¥=øâŒl}¿šß¾\ƺÝöVÅ(ÊÞÿàÕu‰€æg¦eò­ {î‹ïÓ•;Â|÷ñböUÇøéS%¼öÃþ­ÍzçzXøËA­þöÙûw±jg׃Rnb6<½ †Õ;Ãüìª|.Ÿ˜AªÇ ¢ÞâWÏ—2{U=kwGxeyÝA³»"ðó§ßÜ À+³ßå‰ÿ¾Àõ³Nƒì%¥åüîþ¿QQYÍYÓOcò„1¤§¥ ï_ßêšZ~ý‡¨©­#-àçS³.bÜè¤ÔÔÖ±tÅ*ž{y6Ûvìâî?>À]?û>)Þö³h—¬XECCi“ÇsÑùgSXG]}=‹—~Ä_|h4ʃÿü7±˜…iš|ùóŸfôˆaøRSØ»¯„'žy‰ ›¶²aóVÞ›wä:’¥z .—ÁVóÑö0;Ê£ôëÑþýÿìUu4„ヮ=-«ÕkþRQÒÞÚ/\º‚_{‹]»‹[unºê²™\=ëâ¤XÆg^|=М0v—\p6½{õĶmvìÚÃK¯¿ÍÚõãÕ[RS™1}Ê=oвòJÖ4Ý‹œ1uRâïgLÄÓ/¼Ê‚ÅËùüuW%¾Ï Ñh”ßþéA*«ªq¹L®¼t&Ó§N"= ¢ªšEK?â¥×Þâï¹ÿ¨Ì¿¡!È£ÿyˆwP?v$ÝÉŠUkèÕ³€œìÖÇrsg©¼ƒT¼iî˜WRZ†mÛ]ºèÊüfÇÎ=¼öf¼#ËÔÉãÉÌH׃‘nÈ<ž3÷g˜\þ­x&S< ÏÔtŽp/DÛ‚G~\Ìÿ­¡bO”X£Cùî(sÿSÍ£?Ù‡£ê³GÌ¿~T̼gjؾ:Lm¹E¬ÑÁ±!t(Ýeéëu<øí=Ì}²ú„[w'™whŽS]q[þŒ£s˜•–UPS[—ø}úiÛ}pÞY§×írö§µÉè2 ƒ‘-JXFc±c6.Þ´)ÚüÍãv·Êl G"‰€ë‘Ô2 ömÂ-Ö¹¬¼²U‰ßéS''šÇÒš'Ó49û̶> Ãàü³¦'~¯ovZ277'»U@³Ùèá­ÿVw@fIË á‡‹—óУOµê}¸ê‚|öš+¸zÖEæã÷ùèÛ»ˆ[nº!QVsëöäædóóÛoeü˜df¤“™‘ÎÄq£ùÆÍŸßÿ€eåš6Ÿÿôó¯PU]CJŠ—÷Œ3ǃaôí]Ä÷¾y3=r³yí­9df¤q×ϾÏÕ³.bøÁ ØŸýú$¦yò¹WˆÅ,Ün?þÞ×9cê$23Ò ü ØŸ[nºKfžC(ÜqÆÁÂ¥+š·|ùsœö¤âYY9ÙY\íL/%úÌK¯·É^xòÙ—±,;¾ ßý:§M‡ßçÃëõзwŸ¿î*f]|>Ñh4)ÏßÍʹ9ÙÜõÓïsþÙgзw…yŒ>„«.»+.¹ Õûæ-\ʺ ñ¶ãõ×ðÙkfÑ·w>_*9Ù™œ>e¿øÑwÈÉÎL:[†””~òýo2fä0ÒÓdef0uÒx¾ú¥ë°,›m;vñùë®âš+.¦wQ!~ŸÞE=¹és×&J¯Xµ¶Ó{©†`ˆÜúfLŸBNvi?ÃNÄnýJâ:²iëv&Oí_½‘ÁûðûÈï‘ËEçÍàÊKãÛ¡²ªš»ö$íu¹®¾oíK\~ñùõ,ÀçK¥gA>—Ì<‡Ï^=+±-Öe{(íæáÇžÂq òøŸ;ncòø1defà÷ùЯ_ºáZ>Ý”ÉþÁ‚%­² û&¾éÒZRãæâqÁ¤A> 2ÜØN<ƒóógƯ;—ŽßÿàvKIëëí[«ãÍì€ÉWä'šcú¥rÛEñ{õ}51VÅÌ9£i…–l q÷g ¹vj&©žøßrÓ\üï§ Ë6ïã†ãÚ¶/_IIY9·ßúnþâg;j8ƒôed‹2ÃO>û25µu¸\.~ü½o0óœ3Éï‘‹Ï—JaA—^x.·ßöU Ã`ï¾Rž}éŽÙ† Çâ7AúÆË±ççqùÅçsqÓ„åUÔÖÕsÇ·oáœ3§Ñ#7;~ 4€|ë+‰óùòv®W‡ãS§í¿Wyqim‡Ó=¿¤6±/Ï™Ö-îí—¯\ËŸþú/vìÜÓfø„Ù?ËXZVÁ ¯¾ ÀÔIãùî7¾ÌÐS‘𓑞ƨáC¸ãÛ_cì¨áñïjÿy†ÚºúãvÞœ3/ž¥™š’¤ cZÜ÷NL܃/X²ü¨n³wæ~Ⱦ’x/Ýp-W]vaâØì]Tȧ.¿ÛnùR§÷L] …h†¨©­cÇÎ=¼úæ~ðó»Ù¹{/E= ¸ýÖ¯v:„C²Ùº}'+Vůcœsf«×"‘ÆÄq’žÞù1žÑôºeÙ¡¢PgóoõüǶiÆ·}Uu 6måßÿ}‘Ÿýú„#ÆÉM7\«‡7""""ÝÔq¿ƒ2ÙÏ´+3ùðùšDéYÃ0âãlÁùD#ï=QÅ{OTi¯Eû¶5²o[ãI·Þû3îš›À´+3<ÑwÔæY\Òº,Ô€þ}Ú.;+“ÌŒôVÐc©£òCìb–EÊ1XžŽ²¤ôk=>PIi9}{aYV‡_¶MÓ$ào½·ïÜÍû.fãæm””•‡[Cyàîf{÷µ¢žzʀ㲿vï)Nü\X×fýš : «°¤´ Ú \ÆÛ@ûm3ðãq»%Uñ’™ç&JDA¼dïÜù‹šÆ:šÑîx~‡"%ÅÛaÐÊ„1lÙÏDyî™íf# 9e éiÔÖÕS\RÖê5˲˜¿pž;£Ý²‚n·‹ Î>ƒ'žy‰7n¡ªº¦Ã@öWn¼žü¹í¾ÖÐL<¤žqúzõlwº«.»·æ|ÐáøCïÏ_ ij«'o¿LíŜ͂%ËilŒ²|åÚÄx‰µuõ‰ò«gLÜá¸]—]t.¯Ì~÷ˆƒy¸6lÚJiY<»àš+.îrÏýwšÊh÷,Èï0ó)#=+/½‡{Š-Ûv²kO1}zµ¿Î›q:¾Ô¶mmÌÈa¤x½D üÎkâ¸Ñ¬^·P8BMm]‡ã:¸UP¼å²;õ”DàmÖÅç·ûþIãÇðô󝯝EûJÛý¬d0x`ÿ³¹Ï˜6™=ñLüü[\ãýóW¯Ûh7W_~Q‡ãW_:ó\Þš3ʪjæ|° \8R2ý&Êö·›Âl7%µ1FõMM>sÒ\¤x "Q‡ºPëãï¾/ô¤.dÓÐh'¦oÕ®î¿쮈2eï¨î·!=½œ7ªíqŸ×`L¿Tæ}dOåñï1ëâó;l_áH„ù‹–%ÎËýúôj]dê¤q|¸x9ïÏ_ħ¯¼´Ã ÑKfžÓîß'OËËo¼ÀØQÃè×·í¼|¾TFÂÂ¥+ÚÜ?‰ý5ªO*«w…yqY-ߘ™Û¦í(²lk¼´ï•“3ð¸è:«t2óÜ3“bßý`Aâ{Èõ×Îêð~õ†O_ÉG«×‰4²`ñò—ÿhž7Çáýù‹â÷YǶÊLðS±~ãæ|°³¦ŸvÔ¶YsYõ¢Âüç3nô† ȆM[k^ßüÁmJÚ÷,Èçÿ}á:¦M™Ðavv2 …#<ðÐc8ŽC¿>½ÚÜ‹´ÌT?ØØ½Þ¯‡Ã‘D§‹Ã™K»vsÇ/~Ûæï£†aæ¹3?f„܈ˆˆˆtcIÑ-ðœ²)ÞaÛÊ0`6}1£©”ç‘-E+rdµÄ;`4µ×£S9ç†ì£:ç`Ó¸OÍ2Ò;~Ÿž–vÜ‚ši¥ÌБðû;ØFÖÛ·iìË•k>æw÷ÿ­Ý÷ôí]ÄÝwÞÄÔ<ñÌK¼ÚÎxF]qàøWYÇ©RËåÈ褗uæ¯UÕtœ‘•ÙqÆigí`ü˜|ãÿ}ž‡:ñ@Ȳ,æ/ZÆüEË6ä>÷é+éß·÷'Z×AýûuØ;>'gÿñ;ä”~FnN6µuõ„íXmÚ²=цZfî¨w‹àÖÞ}¥í/E…ùŒÚqÙá­;v%äãFw\ÂÌ—šÂ ýX¿as›×,ËN%;]ÞöïÛ¿ Ûw¶Úo‰g¯õN”.NkZ”å8nT—ÞÓØe뎉unoŒÑ–ŸùðcOñ,ÊŽ‚šCNÔágädgQ\RÊ ý:,õœÛ¢Ý†ÂლC;™OnN¼”›×ëéðØjž&>ŸɪeE€öއ€ßGC0Dð®ÃÇ-:]ŒÝq»w¹LÆÁÛïÍç£Õëøz楷>55™—Ñúï©MAÍF«í}uºÏl•¡Ùê¸õîÿ{8zôË›LØñÃíl¼í‡¢Ç¿ÌÊy-*hÓ–í‰Îwvâ¸Ñ|¸x9µuõlÛ±«Ýñ].“Sô?èñxj§×«øtá£pÌ~jJ&«w…)©Ž±pSi§¶Þ‡Ï/‰WY0 ¸fJÝEËáøý/;<§OoŒ_Óû÷íÝi)΢Â|Šz°·¸„«×uÔ<šçÍV¯K qÐÞXâÓ§NbýÆ-lÚ²=Å%ôêYpÄ·Wcc4±_ÇîüÚ=rØÃj¶§¸¤”'žy‰›·qåe3;ì´–L,Ë⾿þ“½ûJñùR¹õk7¶¹‡oU!â •·œCüNØ•ùwÅêuØWZÆæmÛ¹ü¢ó>Q e9þ’"¨i˜pÍ ø×öRº#ÿráØ‰RžG4eSäHjjŸN"AÓ!¿¯‡kn/ˆÇãåqÔÉqÒr,ÂcÍã9º§™ÆC,eiwð%Û>̲×ïÍ[Ø* ™ðsÞYÓØ¿¿Ó4Y¸tE‡åÊŒCÙ¡GQWÇ=p{ÙvÇÛÏ{m`Ú” Œ1”×ßzwæÎ§®~ÉÁõ6óÓ»þÀ­_ý"Ç>äÏnù ¸Ívhñ ¤³¬½æ*nŠªý%¶ïúýŸ»´<u<èÛ»W§ïk  ga^§Óæçå¶Ô¬­«K<€þ•Ù]‡·åòV¶Xßž…Y†IÔl.kœ™‘Žßçëò{š³°{0žêš?7 QUUóÉÚdSöVgí±e†—ÓÉ1™›ÝI›ŽŸ2ÒÓ:|ØÛòø8ÒCIÍcvu|mt7m«O k>ö²23:ÌÒ<ð¸ˆF£Ô7»”•ÒUi#›w[ŠÛhÿ²ÒÎ.ÛWãÉ«Y¼9DiMŒòº±ã7̸:ùÎ`t´ ÇTFzZ§®–ç境œZž?*««¶AͬÌÌ38[^·»r½:ÇìEcÓùíË¥#/,­mÔ´lx©©,íé§úé•Ó}Jm¶¬*ŒÍ–mí`ס涸·¸„ªªêãrÞœóA¼ôl àÇçKeÇÎÖåË ò›:Š:Ìy7|úŠ#¾½*««Ç@aAþAï™×Ã÷ÿ&Ñ–ê‚ï+å£Õëxû½ùÌ¿ˆÅËWò³ï«Ý ëdaÛ6þûc¬Z³·ÛÅw¾þe óÛÞo¶¥¹ KGZEp°ëgWçßR¿¾½xâ¡ûóª­«gÇ®½,Zöó,á…WÞdÙŠÕÜùÃÛ:I>Ió­2ÅoðÙŸòèOŠ©,Ž5=yqŽÛƒ}‘Î$Ê#72›üfº¹þÎBRüG¿Ýú( Z_ìpÚǾënìNœTU×ÒgÕÕ×·[RõÀ€RWÍÞš3/ñ³×ëág·ßÚ¦Ôí–í;º¼?kjj˶ÎÎÊ`÷Þâ¦eè8»÷Àí•~Ð(=-ÀµW^•—^ÀÜù‹yáÕÙ‰žþ–eñà?Ÿ`Ôˆ¡‡\ÂËëõtiºŽ$w¦¾Eð5ðw©oŽ«ƒç@çm±eÖÍÁzœwôzË`qjJJ—:B´,ÖrLÜOº ÇS}C|ýSS»¾l‘ÆÆméàm/5ÕK0¢®¾¾KÛôPÛÉ¡ðt¡í¯lú#É{”Ëú5‹ÜÞxÖmÛ½·ÕuèH5ݮûçøpco?º—†HüAnš‹‘}SIO51 Ër˜¿1xìv\7¸õï¨êC{çăµÃ–çĺº†O|n8Rç‡O´=R .›Î3‹jygM=u!{ÿø§(­¯9- 9²šÛZWîšÛZËkþ±:oÖÔÖ±|åZ ^6ÿG¿¸§Óé?X°˜Ï\}Y—;Ûuy{…[ܯ¤»û—Ë•—}詃8ï¬ÓùÉÿþžÚºzzì)~ùãï$íw°~œ…KWàr™|ë+_ì°zˆ/5·ÛE,fQ×ɸ­@b\WÃ0Z]gþÞóx<äæd“›“Íø1#˜:i¿½ïAví)æ…Wßä3W_®‰ˆˆˆH7“T]eÓs\|ñ×E<þóbJwDÛ<Õpp0C™›rųˆÙ+ûS4)ìåºÈ<6” ò{´ú}û®ÝLž0¦Ít±˜EYye·ÛÒ-bD"D"í>8ÞºýÐ2¾vîÚÛnïÞ3Ç âÓŒ3"ÑÓ·3Í@€COmwìÎêN°îÏ[¶1mÊ„.¶Ê#wRìY˜Ÿ(Cº¯´¬ÃŒ¢-l¯¾}Ž~sÇÃygÎÓ&ñà?ž`áÒ4ClÞºãrM-ƒÔ¿üñwÚ£üp´<.ZÚÚÓQ–þÏ]w%gŸ1õ/Cô ÙÓ±ƒôÞ?.û«©CË@ÄAïYZ”¬Žt¡ãHs™Veœ8šÛ@WÊy¶œÆ—š…µA›i?ߢ~(m£E‰öƒu,kÕ6ºñùáSS2yfQ-‘¨Ãë+ë¸ö´x9õçÇï} 2Üœ5< ÆqÄÏCi4C]:%®CÇá4wþ¢N;)¶97Õ7°tÅj¦Lû‰æîàzÞò~¥ñ ÷L–}ôÆÿî‘›ÃYÓOã¥×ßf˶ÔÖÕw:ìÃñ`Û6yøq>\´ Ó4ùæÍWF1 ƒÂü7¯Œ%]Ó#7;qÎmhè<“±¹¤x½Iõàúƒõ Ôã†ÛgåqÚ`›")5!K;ûPÛF‹ñm[Ž?Ü~ÛØÿz~7>?Œê“Êžñû‘—Åï_*ê-残gd]5%—©¶q¤å6‡ö¤µœ&/ïØ·³÷æ-`ôˆ¡<ñÐ}þ{ô¯HÜÏizOKÍ秃H; ªegí¿ß)9Ø=ÓQ¾_ÉlQÒ8Ùîc›Šó-ÃårqÛ×nl·óìôï À–m;;n˶xçÈAMÓ©ùê}_0ÒIDDDD¤Jʯ–)~ƒY·öàúŸž`Øœ‰ÔjG;PŽ.ÇiÝΚŒ·G‡Ì<×ÿ¼€+nËÛzl#î†a0mòþL¾òŠJîð_‰@˜eY,^¶’þû¿‡=¯œ¬ÌV¿?óÒëÔ7=À­®©m•¥x¤ôïÛ»ÕïüçÖ®ßH,f‰4²`Érþúòç._¹†GŸ|ŽÒò ,Ëbמb~÷§[=¸˜:iü!—ÍËÝÿ€hÕš).Ù*-«àž?=HiYE§ûsÆéSZ=Üøßßý«Ö¬'‰ …Ù±sϼø·þð­Þ›‘žÖjyß~o^âz(>¤ñ ‡H¿Y—Ͼô:¯½5‡†† Žã°¯¤ŒûÿöÛvìJLsÎSJIÑŸÞõž~þUvïmý Î²læ/\ÖêoùyÉõ xðÀþøšÊš-\²â¨ÎkЀ~‰t+Û þï?Ÿ9lÚº½Ý×\.3‘éºdÙÊCʦˆ/CßVí¿#–e%d%“¡§Jü¼låš®Ý@™&cG ŸW>ZÓé8uKZth6䔓ûƳé\•Œ»‡ºœãGìR»±,‹åM¯<0©Jûî­Ú¿~cûµ_êzÁ¦ rhNØ?˜Yºbu§Ó.Y±*þý'ÅË€~½»õzª);såö0eu³WÕ³Á4àS“3OØýݲd{õa Ð<¾óŸÙ™ñ£G°s÷^JË;¾ÏܽwûJÊÞâšw,¬ß°91ïsΜvÐmÙ|?¼zíÇTTVµz½9Ë´¼“LÀh4ÊÆM[ÛÎâMTSY¹v}§Ë²i󶣺]víÞ›ø““<¥™[ãcXÞÔå ÉqM÷EÛwîîp•”–³³i݇ tDçßåm¿'þݵGnŽ.X""""Ýñ;X2/ÜÀ±>¾z_/^ûkkçÅÇþH„œÖãm:M‹?Øm3ñ‘ŽØFâåe›ÛV¢‰5µ·–aËÓ\üÕ\RÇïáä¬KÎçý%ÊI-]±š¥+Vø ‡#X–EJŠÇsÐ’êRSê IDAT9e`~ ÁxoÖUkÖsó­wàr¹°,‹óÏ>ƒ¯¿úˆ®Û˜‘ÃÈÌHO+«j¸ë÷Æ0ŒVÁƒô´@§cµç·çòÆÛsÛ}-5%…«.›yÈË;qÜ(^™ý.ïõûýŸþšÞE…„#ÊÊ+q‡¢žìí$£kÖÅç³pé Ê+âpö—p÷½mÛjH£1M“QÇòÑêu”WTñýŸþ ÛM4£wQ!¿ýÅ];" ƒ¯ÿ¿Ïñã_üŽh,†eÙ<þÔ <þÔ m¶=Ä3L¯¾â’£Ò¾Ë+*yáÕ7yáÕ7 ø}ôÈÍÁ4MJË+ZeE èׇ¾½‹’êÌâõz˜6e"ïÌϼ…K™:y|"ÖÇq:,¿u0éiFʪ5ëy÷ý¹è¼í>¤yÿÃÅ­˜èì3§²fýFJË+xê¹W:-Çuàòff¤3lÈ)¬ß°™wßÿ Ï›‘Èbkéí÷æ4£íx9lHâ|óÌ ¯1fä°V™Ó9çÌ©,ûh5¥å¼ñÎû\tÞŒ6ÓÔÔÖñü+oЯo/ìR_u3ÓÓxgŽÊŠw—åì×·úõaÛŽ]<ûÒëL3’@;åº_~ýD ã¼³¦'Õz¦xöÇu!›ž~à±vÙ¸ ~ÿJ9‘¨ÃüxguŸ~ÚDž|öevìÜÃâå+™<¾màÞâ–,_õ‰Ö·²ª†œì΃øÛwîfÞÂ%@¼ªÇÇGË€¢Çãá»ßø2£G íòû'ŒEVfÕ5µ<ýÂkÜrÓ m¦yò¹—ãׯ—Ó&;bóß_^¹óŽ–oÍ™—ÈÒt„ƒ¥""""rl$} Ô€ÉUßÍãÊïä‘™ßâf¿Å˜†ŽMíÿçð‘Ž8mojGñ,ÍÖef2óÝ\ù<®únÞq hB¼tÎm·Ü„Çãiõ÷†† –eáv»øæÍ_À4/‹ÔívñÙkfµùûá–µíŒÇãák7ÝÐfÝZÕúö.â§?øf—?sÔð!œ9mr‡¯{½¾ýõ›Z•óìªY—\@¯ž­¾”ïܽ—Ò² Ça`ÿ¾üÏß&¯GÇ=‚??üö-ô,Èït^í¿®ûÔe¤x[?t~ÂL¨ÞE=ùé¾Eöº4û÷íÍO¾ÿ̓><8‚!vìÚö»ZÅòórùÖW¾˜”g—Ï\}ù=rq‡ßÝÿwùϳlÚ²šÚ:jjëØ½·˜y —rï_þÁŸzì°æõé+/Á4M"‘F~yÏý,]±šHc#¶mSRZγ/½ÁC>Ù¦´4uÒx&?Üyùw¸çOã£Õ먬ª¡®¾}¥e¬Xµ–<þ4ßûɯÚY†K1 ƒp$Â/ïù‹–~D}CHc#»÷óäs¯ðè“Ï%å˜q.—ÉMŸ»€Òò ~z×ïyÿÃÅì+)£²ªší;wóÎÜùüï=ÿ×*‹uÜèL?m"?õ<ÿ~úvïÝG¤±‘Úºz.YÁwßKuM-.—‹/þª;dð@ >þëƒÿz‚ªê,˦´¼"©ÊÀuu9¿vÓõxÜnÊÊ+¹óî{Y²|uõ DÙ¹{/ÿzâž~áU&ŽÍÄq£’jŒ°?;ó_ïWa·8Ío+rÓßv3ù?Ùx°mcq#Ò5WϺˆžùضͯþð³ß}ŸŠÊ*£”•Wòê›søí}â8y=r¸êò‹ºý:§ûLfŽŽ—Wž½ªŽe[ãÇÊ5S2Oè}}Å%ç…ösq—¦ËÌHçóŸ¹ €%ËWñûÿû;6o%  …X¿a3¿¹÷¯‰a®»úr23ÒÙ¶ †B,j ÜŸ9mr—÷…ùy‰êsç/luÿÙ<Ʀã8üñ‡Y¼l%Õ5µ„#vìÜãO>Ç_x­Ó "œsF¢ãÕ=ÆìwÞ§¶®Çq¨©­cî¼Eüòžû?qVý­?¼“Ÿÿê¼:û]>Þ¸…ʪ‚¡Õ5µlܼ'Ÿ{…ÿ¹û>b±xçÓkBçÀÇž|Ž»~ÿg~õû?t¼õ–ß]šŠ—]xn·‹u6uúϲößyÜn>}Õ¥Ì[°„ÿûû£lݾ“šÚ:6oÝÁ½ù‹–~ÔôÝéüVÃîüwîÚÃWn»ƒßÝÿwÞ›·m;vQS[G0¢¢²ŠV¯ã‡KT1*êYÀ93N×ÅJDDD¤ê6]fGž`äVÏm`Á‹5”lkº9oΞs 0œx“øCÿxö&‡S:ˆY6}96šÚŽa´Îö-èïå´YmÆ{=ÞF Âoî¼^}“Õë6P[WOzZ€áCsÅ%çÓ»¨'Ñèá—ù;ûŒ©dgeòÚ›sضc‘ÆF²23èÕ³ð¨=¤=b(¿þùxåwX³~#UÕ5x½zõ,`ÊÄqÌ<çLÜn9Ù™][óì3§rÚÄqŒ5Œwç~ÈŽ]{…Ãdfd0fä0f]rþ'Ï*à÷ñ‹—_}“…KWPQYEŠ7…‚üL<ž‹Î›Ëåbì¨á¼5g^‡ŸST˜ÏÝÿs;ïÏ_Äâe+Ù±kõ A\.=r²5bœ}F›÷õí]Ä]?û>Ͻüë>ÞD]}=i@bþ‡ê”ý¸ç—wðþüÅ,X²‚Ò²rꂤ§Я§MÇéS&Õ2Šw|ç.]Áª5SRVN(Æ0 - O¯žL7г§OÅëõ$åùÅïóqÇwnáOþ‹m;v1û÷™ýÎûíN;aìáCúõá«_ºž¿þãß”•Wò‡??Ôfšq£GÐ#7»Óö÷µ›n Åû4ó.eŪµ¬Xµ¶ÝéÚ LžzÊnþÂgøû£ORV^É}ýg›i¦M™À°SñðcO'Ýþš8n47^5=õ<¥e–·>°Êì—?ó,áÕ7çðê›sÚm ßúÊZ•é=YM7šAú²eÛN.YѪ<óÏo¿5Lì.ËÙ»¨'·û«Ü÷—²§¸„?>ðp»Ÿ7yü¾öå’ïþºw ŒNãÍUõ¼´´–¶‡8¥ÐKy­Åê]a&ðqǬ|Âûxku=/.­¥¬6ÆŒá®?=ÞèO³+xb^u›ÏFâšç®oà´ŸniõZÏ,7Ï·ß ÝÖS¼^îøÎ-üñ‡Ù¶c<ñ,<ñl›ézò½oÞLÀï;!Öûê)™¼´¬Ž>Žw@ê™ífúÐÎ3ßñ\)Ï/i[¶ÕjÊ .®Š1îŽÍ­^;sh€û¾Ð3)ÖyÜè|ó+_à¥×Þfçî½–#ïŒišôëÓ‹«g]”êuõ=Žðïÿ¾Èò•kY¾²íµÛ0 ®¹ââv+ Mó,MT‹9ûÌ©]~ß¹3NgíÇ›(¯¨bõº ‰l½¡§âü³Ïà­9P^QŽùG›÷2˜§Oæ/\ÇSSRøÞ7oæ×x€šÚ:ùϳ<òŸÖÇf~\®¼t&ÿzâ™O´Þ›¶nï°ä³¼9|õÆëé×·×ßî –¬ º¦–Âü¼N;´µ´¯¤,PxîåÙ<÷ò샾ïﺻÕùkÆéSØS\Â+o¼Ã‡‹–ñá¢emÞ3ý´‰Ìºøü#:Ã0ˆÅâåÞ—d(¡§âë_þÜ1é˜)""""G^·«4jF€Q3”êÝ:>^¤j_,ÐŒcK”5ÿi_Ë€w«ì·¦ö”]èfè?£ÏI'¿¯'i×£° ¯~éúv_klŒ¶Ê,ò¶óÅöß¿·Kó;jx§%4®¼t&W^zðò­—Î<‡KgžsÐéŠ ó¹ù‹Ÿétšÿ»ç‡´cú ìÇ«³ßM,ƒß—Jï^=9wÆéL›<>Q¢/öŒ>„9ï/`åšõTTVŽDø}ôëÓ‹©“ÛŽ·ëõz¸å¦8cê$漿€­ÛwRY]×㥰 ±£†3óÜ3»TÎö¤¸ñt»¸ã;·ðü+o²dùJ**«ñzÜä“™™Þ-—søÁÜóËñÞ X´l%eå„#2ÒÓ8uÐ@Κ>…Ñ#‡%í>ùÍg{rja%¯|TËžŠ(5A‹Þ9nŸ•ǵS2ñº ¾Y5A‹U;ìØbdßý"õáŽÇáµlÚ¼^±OŠöÞ#7›;︋—óÁ‚%ìÙ»ºúzü¾ø9å´Iã˜qú”n_v¶¥ñ| ,ð²µ$ÞõêÉ™¬`HÌrˆÆ:øz4ÉJ!­{Ë®ºèü³5b(ïÌÏšu(¯¬Âqr³³1l03ÏѪ¢È±2gÞ‚Äy²0?¯Ëï›4~4éiÔÖÕ3热JÞxýÕŒ:˜w?XÀ¶í;i†ðûRé×§Ó¦Là¬é§%ÆLììóž_þˆWf¿Ëò¦2òùy¹L?†K/<§ÃŽ]óû»~¼Kùxãf*«ª©­«' ãó¥’ž ßÞŒ5œ©“Ƶ©Hs$ÔÔÖ%Jž¯êŸ½úrF ›ï~À–m;¨­«ÇïKe@¿>œsæ´DÆí‘tê)¸ó‡·±hé 6oÛIMm-uuõ4F£¤d¤§1dð@&ŒŘ$¾&‹ˆˆˆÈÁÎ'íJšDj+,¶,R¾'JCµE°Ö&XkÑPÿ9Ö¨2´Ò>·×ÀŸaâÏpÈtáÏ0 d¹èÑËàñ~2r»ÿC¦Ý{÷ñƒŸýºÕƒ€óÛÉô‘ßßy’9, WÏîùå´AD’ÔÖmƒ#e úœÔmðpöÿg¿|kâç®v“Ǽ…Ky ix€¿þñ.2ÒÓºÅr´z¿½ïAî¾óö¤w^DDDDäp¹O„•ÈÈu1îütíM9é8ŽÓîøŠ-½ÿáâV¿ì¯ò‡"'«šÚxÏ}¿ß¯!""rŒ<ùÜ+¼ôÚ[\yéL®¹âbmnqÏT—ø¹;•‡ÞØTcðÀþ hŠˆˆˆÈ ÉÔ&龿-\Êïîÿ —¬ ¾!ØæõÅËW2ûí¹‰ß óóÔ9I56FÙ°i+/U,"""ÇÆ+o¼ÿÿìwµ1º‰Õë6ñ±/»S‰èM›ãAÍ Î=S;QDDDDNHnm‘î˶m–¯\Ëò•ñ1_²23ÈÎÊÄãqS^QEeUu«é¯¿vÖA3;E¤û©«oÀëõÒΘ¹Íž{e6 ÁcFi,!‘cyÏFµ1Ž3Çq¨®©%;+³ÃiV­YϪ5ë;jx·Y·XÌbã–ídf¤3eÂXíl9!)¨)r©®©¥º¦¶Íß=n77Þp ÆŽÒF9mݾ“¿<ü8§O™À¨CéÓ«'éii¸\&Å%¥¼þÖ\æ|°€>½z2yüm49éÄb1nýáÿ0eÂXÆI¿>½ÉÉÎÄëñPU]ÂÅËùâõrÉçt›us»]<ò—ßi'‹ˆˆˆÈ MAM‘nì´Iãð¸Ý¬Zû1»öSW_O}}h,Šßç£ga>#†žÊ¹3¦‘“¥ &r«­«çõ·çòz‹’Ó*,Èã;_ÿ2¦©êó"ÉÌlm†#²åämƒ‡»ÿÝn±˜Ä;fef|¢Ï©ª®iõ™rüÅbó-cþ¢eNãKMá›_ù"ùy¹Ú`"""""IÄpÇÑfé¾¢Ñ(K–¯båÚÙ±s7UÕ„ÃaÀ -à§oï"&ŒÅŒéS:-Q+"ÉaW¢ºC?lúøµNÖ6x¸ûÿ翾—M[¶Ñe2x ?¿ýV5°ãlíú,ýh5[·í¤´¼‚†`˲ñû}æç1jÄÎ?kz§%jEDDDDäøPPSDDDD$‰‡!di;.Ÿ z¦j;œ¬mðp÷ÿŠUk¹çO;¢Ëôãï}ƒC«‰ˆˆˆˆˆ|B jŠˆˆˆˆ$‘ê(T6j;®/dy´NÖ6x$öÿ‚%Ëyéµ·Ù¹{/Ÿôk³išôëÓ‹«g]ĸÑ#Ô¸DDDDDDƒ‚š"""""I$æÀΠ¶Ãáêë·¡íp²¶Aí‘©M """"’<ÜÜÚ‡#àV@ëdnƒÚÿ""""""'&5EDDDD’L®“ùdŒ¦í''gÔþ9q)¨)""""’dÜä§h;|ù©ÊÒ;™Û ö¿ˆˆˆˆˆÈ‰KAM‘$pCŽ2ÎI®.m‡“µ jÿ‹ˆˆˆˆˆœØ Çqm‘äÔ`AitÓÞÉ—  ü h”mPû_DDDDDä$ùþ¯ ¦ˆˆˆˆHr³¨l„º˜¶ÅÒ›² ]*9zR¶Aí‘“‡‚š"""""Ý„ 4Äâÿ¢6Äœ“+ƒÓ >^¢ÇŒ—F ¸5žÆÉÔµÿEDDDDDNn jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSÇVIj jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSPSDDDDDDDDDDDDD’š‚š"""""""""""""’ÔÔ‘¤¦ ¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©)¨)"""""""""""""IMAMIjîUwh+ˆˆˆˆˆˆˆˆˆˆˆˆˆHÒR¦¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$5# :Ú Òlß[Öê÷þEyÚ(""""""""""""'ejŠˆˆˆˆˆˆˆˆˆˆˆˆHRsû|>méRSS[ý®¶+"""""""""""rrP¦¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©)¨)"""""""""""""IMAMIj jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSPSDDDDDDDDDDDDD’š‚š"""""""""""""’ÔÔ‘¤¦ ¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©)¨)"""""""""""""IMAMIj jŠˆˆˆˆˆˆˆˆˆˆˆˆHRSPSDDDDDDDDDDDDD’š‚š"""""""""""""’ÔÔ‘¤¦ ¦ˆˆˆˆˆˆˆˆˆˆˆˆˆ$55EDDDDDDDDDDDD$©¹O– G"D£Ä¬±XŒX̶-lÛÁ¶m,ËÀåraš&¦i`š.Ünn··ËÇë!5%E­FDDDDDDDDDDDDä:aƒšŽã …h C‰ åÁX–Õé´.— ¿ßGÀïÇçóa†Z‘ˆˆˆˆˆˆˆˆˆˆˆˆÈQd8Žãœ(+ã8 Á¦@f–«ðûñ§¦ârXØ8Žm€a8&¸00l00ÛqˆÚ6 ‘F‚ÁýÏ0ðûýü~ÿIàŒÚPÒeAÅ ËÑ&"""""""""""Ò¸ Huƒßy>È÷ƒÇuü—«Û5mÛN2C¡P"éñxÈÊÈÄëráØ€ca91 × ¦Óôþ˜cã8–eáÂÀm˜xLn L Û40 “˜eQSSG4oHÃÀçó%œ¦yr WŠÁ¶(®[AL‘Ši@¯tèŸv/Ý:¨ ‡©®®! %þ–ž–†?Žc9Ä3.ãlì¦LÃ0â{€xvgó?ˆ']†“xÐÓŽYØ88.ÇØÿy.ÃE}Cúú†Ä2ø|>²²2ñ¥¦žÐ¸¸Ö”íÿ½0=üàvC̆˜ÿ§X§ˆˆˆˆˆˆˆˆˆˆˆHr3·ÿç1¡1åÁx¥Nˆ‡ÖFçAžÿ8-_w jZ–EYyÁ¦R°†aÓ#Óå¶ÀÄtâåd÷„µÁmǃ”MÿL LÓÄíöbš&¶m7Mk¶ vÚØX¸\.0ì–ÆŽÏÏ+fSQQ•úý~òzäÆßw‚Ù^›ªâ?÷ðÁ\h° .¦ƒ^DDDDDDDDDDDäDî¿ 6T@ESŽá°\è~ì—¥Û5ëêꩨ¬Ä¶m¼^Y9ÙXXÆþ¬LÃ1[ül:†M̈â8V<à ˜¸pa`âÂ0 ,ËÁvlÃŒgšF¼T­ab`[Ñv–(ÔÉgTWWÓØÅ4MrsrHOO;apI¬jÊИ=Ó¡$¬ŒL‘ä§ÂÞÚxÒÀøÈõãåè.AÍX,FYY9¡p€y=pÌx Í6ö_Ùœ¡ÿÙÄÀÆpL#†cF1Mp›.<†‰i8Q+ÅŠ9¤¤¦â&¶1 b&ئ ÛÃtp;OCŒoJ³iã8”•Wñ’´y=rq»Ýݺá†b0owüçAY€ÊFÐ""""""""""""'²/”ÔÁÎZp›0­¤Ãb¥Ý"¨Y_ß@yE¶m“žžFjÀmÛ8Øûë˶ÊÎ4‰glNS&¥ÑˆC#†ñlŒ¨…ÓhAc 'æàXñÀ£ãrc¤xÀëÁv›ÄL“.ÛlÊÉŒQãk:M¿;6†ÓØtlLÓ¤¡!D}CÓ4é‘›KZZ Û6Ø•¥PŒ—œ=µG|7±H„úšZjji¨¯%®'à±p1<˜¸1ðàÆå€i›˜X8XŽMزÙQ"Ø)<>?î?™9¤ø31Ý"Q Çå!ÅÀr Ba<4ã™[Ó±AMÛqaš&åX–MjJ ù¸\®nÑH—CuÆ@­ƒVDDDDDDDDDDDäd”âÄËÐ`tÞ±™§;Ù6B,£x_ Ñh”Ô”²³³°m 0M“h4Šã8¸  °£X¤¸ ÒÒ³ˆƒÔVT¬­¡®ºšHCö𹠼xˆW°õ`àÆÆ4 Lâ)‡Vc#.à Åå`6nÇ"ÖÅŽ…ˆ„ê(®­''¯€¬ø<©D‡X$„m¸ð4•ÅŰ;­ÉjÛ6=rs©ª®!‰°·x= p»ÝIß@#VÓ*Æ‘“§)¬Œ»y&U$ÍqJKˈF£~Òx@À1ñzS¨®«Åq,²2Ò0Mh¨¯ÁEZFu•%ïÚ á5 ü¦AŠÇEŠ×‹â6L܆ ¯éÂÄÀÄ`;€†Ç00\\Dq°m›˜£&TEq¨úºZ ŠúàÏÈ&bÛX–ÛãÅrìýclü9MÙ›ûÙ¶MVfuõ „B!JKËèÙ³0éKÑ65Ð9iÅšüBÇp¨Â¤ j–”–ŽDðù|¤8ŽÓ*ÐgY^¯¬–ea8~o †ÕˆÕPÏŽ­©-/#¬#=ÅKFj .ˆFp‚<)©¸LÓ…ËíÆÄÃÆqlÇÁc¤bÛ6–˶-°¢Ø±–_€òšvUUP[]EïƒÉÎ/ÂåñÐàr§b;6ñ€fk&o:ŽCzZ˲G"””–QXŸÔ ÔnZ ËÑÁ*"""""""""""r²jŽÅŽa"œ™,+_ZVF0$%ÅKzZ< y P(„ßç'H' …Hñ¸‰FÂlÛ´‘›·©¨C3ƒ IDAT«Æïvá÷€+Ål ‘B”€×Ý4–¦—™‚áJÁðx›þ¥€Û /†Û† Laâ5]xPM5™~™>/eûv³rù¶nú˜h$DšßOû5Y;ÞĎ㕉Çí& RZVÖ­ªˆˆˆˆˆˆˆˆˆˆˆˆœ|ŽG¬()25ƒÁ õõ ¸Ýn²23±m»ÝR¬¦é"³0qðzSq9ÔVW³{ÇvvnÞHzª‰ÏëÆërˆ…ØN¿×CÀçÃíqŠy1Œ — Ó厗5âåe—m8XØ8n ÓrÅÇí´ <˜˜¦‰]_‹™ê!#à§1f±»¤”5uõDbÃÆLÀpÀ4m¸IÛ¶ÉÉɦ¼¼‚úú~?@ ©ªªÏŠˆˆˆˆˆˆˆˆˆˆˆœ¼ŽG¬è¸gjÆb1JËÊè‘›³ ÍvøÓÔÔÔPWWCzº •ŠâÝìܸ–Ú²½ø±ñX‡qCxMi©>°jkëÁ4pL£Åÿ]8¦ ¦ †Ó•‚érc˜ ÃãXQ›p¸‘PC˜ÂyÔ–WRS²‚Ìý óÕV²sÓZÊöìÀÀJìFÇw§›Ú¶mzôÈ ¬¼‚X,¦£ADDDDDDDDDDDD¤Éqj–””bÛ6¹¹9X–Õé´•u5ääàñD*©Û·‹Es_Çl¨dtÿR£u˜¡:ÌH)Ž…a;„#1ǃǗF£¥‘0Q;ŠåÄpœøü ÃÀÄÄÄ…Ëðâ6Rp^LÃixq»RIq§ÐX×HVJ~Ç ¾¤o¤ŽyéX å¼ñÒ“˜V+Áå1±11]^—‡úú©¾4 Ã…aíþs'‘¥ZZZÖnù]‘“Ñq jÖÔÖil$55—yðEñx<4p™à6¶où˜ôT7™>N¨# cZQˆY8–mÛÄlˆ˜NÓ?§©Â­á˜† l0lÇ1â%iÛ Ç6ÀÓv0m 3ÖÑ f4ˆÇ‰’âvؼa¾T/ápÇC0܈ÛíÁ— Štý¼^n·›p$Bm]Z§ˆˆˆˆˆˆˆˆˆˆˆˆÇqLM˲¨¬¬ +3ã Yš^¯—êšrò3ÔÕT³aÃrý~ü>Ájܱ(††ÛËåÂvbX–…á²Á²1ÝdƳ3 p€¦LÉ–ÿ€6Ù’¶Ãpl l°-,+†å€Ûeâ3]¬[½ŠÁ#ÆaÅl<¦ +Áåò“’ê!ÔЀ7¥óÍí8¹9Ù””–QYYEZ €ËåR+iG£Õa¨‹@mcüwI~^dx!=²Râ¿«]© ˆÌq jVVUá899Ù] hbظ ÃvHñºY³q5U•ôÌ(ÄmB°b1L—‰aǧÃvÀ¶0 ‡xé×x Óè|V†mкD¬é`8ñá7MÓÀ°lÛÇÆãN!àò²{w {þ?{çÇUîÿÏÌl_­z±å÷Þän'Nï„!…v!r¹ÀïÒ.\ú½.n:I€4RIœf'îEͲ%¹õ®ÕöÝ)¿?fµÒZÕ’¬¸œÏóèÑîN;sæ™sÎ÷¼ï[}‚œqS#(²)šêª6hqR×uÒR=x;|´¶µ‘“-¬T @ @ âD5¨õ7aUÔÇÙz ›Cæ€Ói›òá‰[®„ Î|>Q3‹áóù‘e‹¢ :¤¡©¸lV$Í`oI)›C‹‹Ø…ˆ¡!ŠlŠ`€¤:2æI2Б0=#Í|–Zâ³$Ë’Ž,˲©bʲŒ¤((Š,™ái5 ÌÿYÂf‘ÙW¶‡«§Ì¤#Äe·£E#„ÃaR=n"±ð ÎÓn·#I~|>?éiiX­Va©@ @ à¼F7 ÚuÝ2w)䦘ž^,Xd%Q_gê5Tuˆé jÐ†æ „Tù¡Þã=0.UØ•°QW‚ž|(¢f»× @vv–éí8$ ]ÇfUð{Û8qì(s¦ä Gˆ)v k€l†–• dtt]‹ÿ'›1«!ºÑzV’$4 $É0CÒÊ(R\5PCÒAWÐ$‹"¡h:’®Ãí°s¨²’Ø•A$CÂb•Q£*ò)d/5 ƒì¬Lšš[h÷z…·¦@ @ @ 8¯i ÁÑvSH³Cž2œ¢nÎ&dÉô³)€ÕôÌ›œ-!h˜á^«}Є ÒÍ宄 Œº¨ÙÝK“Azh&ŒƒhL¥¥®-# £)V4I"Õ@2%%>[Â0 ]GÓ4d]Eއ¤•ôî¹3 à û*KÉÂgb†.,èèèÈ (šY&Ô‘˜¤ƒ·­…úºÆMž†S1 ·ÛI8îLç9(:ÃÞú|~2ÒÓ±X,ÂZ@ @ Áy…nÀá6h‡¨Ìp@¾Rl¢nÎ%²œæŸ? ÕfØÊÈu›Â–°+a€<Úôz;ÈÎÊtØÙNEAFhkiÅi·áïðahº)vF£ ±2ñ`ÒUt]GÃü]"ewaÓüÓÑuÃÐÐÑÐÐÐ .OÎî§H ££©1´hŒX4Œ¡«474â°Û‰FÃH’Ãe'œÒ¹šùF3“êL @ @ ÎbìkꞦeÂŒ,!<ˤØ`Vv—ˆÕ€òfS„v%l@ UQÓ0 |~’8x*¨±‡ÆÆÆ„Ȩª*š¦!Iºn “ª®cH€"Çsf¨ªJ4AEPÕ(šCÓbqá³+<­¦i¨ªšøÓáquT5†Ñ-”¬ªªDÃÔh ]ÓP#Q¢Ñ(õ´·µa³ÙP…` €Ýn?åóUâº;|¾S€OM!qÓ@ @ ‚Ó‹¦›^ZÁ˜™ËpnŽéÅ%8?ÈuÜlÓ±È-§øQØ•°Á9È¨Šš~Ã0ÈÈH’HgjT%‰ ª:ªj~ŽDbhš†ÅnÃbµb±XeC’1$Бѥ®®R|_²aþïü®ëªY)²ŒlQ@‘0$UÓTó/#‹¢ªj²÷¦n ¢²Á`‹Å’X&É2 AÈ5 ƒ´T†aà÷>tci ™ {@ @ àtr¤Ýž æå /ºóææš9½¨ò »6 êä|g”EM?6«uHÛ+²•X,F4Mxe†"Q‘†!a±ÚPlvd‹âB¢!K KH’rÖ 73 Ó[S–edYFQÅÜF×MUÕu"ªF4¢UcI!m5M#‰šÞ¨¾6› I’Ð dÉÌ!:GRÝ}Xn‚¦@ @ @ 8ýÔû»BƒÎÈ»"êä|Åiiæç:´……] ur>c­©ªJ(Æjµ¢iÚö¡( 2:’lA7$b±ª*ƒd7…KCÂ$ IÅ‚$+ [E’‘$Ó[@6 ³4‹ÃÐ0€Î¨³†,!É2’¢˜B©,¡zÜÍYdtÝ Uª¨ªN$AŠ{‰ªšŽCÒ`®Ñº®#K¡p˜X,†uˆ‚ðp8ÜnÎ`|8\¾xnB@¿ýÞûøÌW¾Úëz‡öWòü_þHéî]´67`w8ð¤¥ñ­Ÿü¿Ÿ}ç›txÛ¸åÎ{øÔ¿<2¢å,+*äáûîN|ÿÏÿý «Ö]|Êûùʃ÷Q¼s;³ç/àWOý]@ @ ÁyBTƒ^óó¤4Hµ‹: uuüòG? Â>÷è£gí¹d8!ßµ>8ÚicLÏ=aWçÇõ)œŒš¨ ™òyzZCR÷ Y¶$B»jšA$¦Ó 4 ¦ê(Šb®')H²‚¤X‘­6‹ÍôžTddIÅôä4CÒšS2d‹¹OÝ04³Œ²,›ál%SNÕ0ÐU˜¡aè::ºš¦£ijLÇnw¢ê: :ª®£²ÒN===Ö¶vÂáȨ‹š' š3²ÅMs&²uã¾ýå/ô˜0`Šþ*L›Î7¾ðYêkkxêÉǹý÷“âñˆÊÉóO?MÉÎdçæòÈÿû¢B@ @ 8 Tu˜£ÇŒIüv¾Ž~üÍo&ývów°tÕªAm_[]ͯúÓ¤ßî~ð!fÍ›+.ÊÀ„TÓC/3½õÆ¥ŽŽ]õÆ/~øšêXPPÀí÷Þ+.ÐY`‚sƒQ5ÃSÔTyˆžš2±¨†¤(ØìN Y!ªE±¡£k¦GcL×° †(fY,VÅ qqR’$$Y1=0%S¸<9,­†²Žl€d•Ñ% ’fCÇ¢YãÞ™æ± Ãà [«i¹¹¹D#*ŠÝ†,h gÒ@§Ž„ñxRFÍ8z4…¨yæ¡ë:¿øáô¸¯œ.¡`¥«Ö`³Û±;º¦)Šò¡xý ‚³‹ÝÛ¶ñÒßþÀ'?÷9¦ÍœyNßáØWZ±C‡ñux‰„#Øròò˜1{+Ö¬Åév j_õ üõ÷¿¥©¡‘Ùóçsלֲ××ÖR²k+*èð¶Dq§¤0nÒD V¬T§»¬¸˜ÂmÛ¨­®"ãNñ0aòd–_x!S§O?mÇWU½ÅEìßWN͉ãøý>4UÃåv3fÜ8æ/Y¢¥K‡º_ @ œ½„T3–a˜ÞtÃeoqñ EÍ=……âœáLðÀV¨ó›Â¤"¾]ÕTU%M€Š²=D"ìöÑsýp¿ÏOÊŽ"†a°§¨H\€3œ '¤ÙÁæä¹Gß®JvíJú‹Æ(/-eñòå£Vo½ú*õµµä{Þ‰šCµÁ¹Ã¨ˆš!0G"7à©£#`·Yp;fþ˨„ÅbE¶Z-fHYI‘Q«26!hJHD#ñ,À’d ‘R\¨Œ7—éH’dF§5@3$3Ĭ†!¡Ë2ºlE“,膌Y–°Y­Hèäd¦aÄ¢ØIR0tYº¯¦®ëX, ªjæî´XNïe‚æÙEc7AàÖ»?‘+ëp:q8\0u:?þÍoE… Î*Þû-íßÏÚK/¢æhw$ëê©:v‹ÕŠ‹Q^¶‡€?€;åì!ì-)¦¶ª ‹Å¢åË™»`9yyXmvÚÛZ)Þ±“›7ám÷òÌï~˾öõ^íOÓtÖ¿ò2[7nÀ’BÀï?­eåÙ¿³¯´I’˜·h1 —.%wìE¡¡¶– ëߤêØqö‘™“Ó«0¹aý› AsAA«×]Lzf­--l~ï]ÊK÷°qýz²srX´lÙˆ_×uvnÚ„¯£ƒ‡ekV3}ö223Í÷YC›ß}—ƒ?|„WŸž[ïºKÜŒ@ Áy‚n@S¼K•ëÞ¾ò'L ¶ª Ã0ØWRŠ ×ö»þ±ÃGèh7DÇŽG]u¸ g(y)¦ Õ蜠5’v¥ë:eqñ{ÚÌ™T;F$¡t÷îQ5ÛZZ©¯­6p 6 8·Q35=\.gBÔ”$)é?ôïÅ)`1T¼L™8·:¼¸m`u˜Þ˜1ì²L8ª":Ð «U‹– Š¢àr˜Ó0d"j”P8ŒÍa  ŸÇC Æf³GˆÅ44ÕÀçóa·;Íð¶V+VÙ†*k„u_Ì ¢ê²t ‡"1!,þP‹Åïáp¥¢ë†)€J}‹ºýù°ºÜ.:¼>"‘Èi5… yöF’¾§¦§ŸÕç# : ‡#=tHTćDá¶­LŸ=›¦úzš)ݽ‹Õ_|ÖŸÛ×_¬(¬¼ðBRÓ’ãθSÜŒ›0Ô´TÞzí5Zšš8P¾9 $­çëèàoøÇA–en¸õV<ÈÞââÓZön»h4Êå×]Ǹ ’–¥¥§3eÆLÿïÿ¢®¦†mïoä’«®2ÃñÇñû|l~÷]-[Æ­wßX–âñpç§î篿ÿ=ûJKyûµW™»x1ÖníŽá_–en»÷”ìÚÅ…—]Šå¤0èžÔT¦L›ÆŸœƒ”îÚÅ57Ý|Né@ ``¼aЛ)à Ú2eÚ4Z‰D"ì-)PÔÜS´»ÃÎÔé3Î9QS–¥sæ\Ò HˆAT3íe´ìê`e%~Ÿ€©³faµÛ¨ØSÆáðutàI=ýI÷–Ÿ÷ÏŠSµÁ¹Å¨ˆšj<ì«ÅbAUÕ¡=xÑq§z ¤à$˜ì,Þ&lŠ™ç2`“]E•‚A4ÍO8E×Ì‚j,‚Ói'-# ‹UFU£X;(vY'ö $›i¨oÆëõÑÖêÅît•“‡'-ǃaø|!|þ UE’-;ü¤ºì`‡lõHu¸€@4Ö¡¿¦ÍœÉþò}§½ì)ŸøÌgúnØY V­âµçŸ'ŽÐÔÐÀ˜üüÄò²’âD[ìòk¯ëuWÜpûJKñ¶{©,+cþâÅ#vüŒ¬L.¹úª>·—$‰%+Vp°¢Ã0h¨¯eÊ´éâ¦@ μñyû™#04¤é:³çϧd÷nŽ>Ò¯à¤iûJJ˜³`á # ª±%»wS¼k'-M„BARRR˜8y Ë×®å‚éÓzÝ®s"餩Sxð‹ðØôî;Tì-ÃÛÚ†Ín'oì V®JŠž³¯´”ÝÛ¶Qsâ‘pOZ*SgÌdÝW’™ÕoY­ñI¥++Ùºq#uÕÕ„BA<©iLŸ=›uW\AzFF¿ûðû|ìܼ…н{hkiEÓTÒÒ3˜:c&«/¾˜¬œÞÇ6叫üÚë¸øª+‰©*Ûߟ¢;hmjBÓtýöwHÏÌT½K˜¢VKÈ,sÜ£gW¥»w'>OŸ5 ·ÛMÅž2 à´°µ—\Òç¶ýøÇ ËÏÿëW;~\¯ëýíLL˜¾óþûã õu¼óú?©Ø³§Ûº€?vm»° €Ûî½·ÏëüÈQ¶¿ÿ>ÇŽ&ðcw8?iË׬aÖ¼yýßSšFáö”—–P_[K(Äíñ“›Ëâ+˜·hqŸQÖ:m~êŒÜ÷ùÏ›ö\Rʦ÷Þ¥±®Žh4ÊGïºkÐÞ®§j‚s‹Ñ ? {’ª·_k¨a²S=„ÛêqYe,hÑM>ìV n‡Y–ñú‚´¶¶„0 ƒ—Œ´Tòccq»]!g‘Q#*mA/>ŸM5hjj¡µµH$†®ëȲY–‰†#4‡Âtttàó¶Ó <ît'N» §ÛFÓÁýT9A{Gˆåk/&;g,6«BuÈçßé½6uÙg»‡æ¾=¥l~÷mÞ~핤ß[[šÙòÞ»lyï]>ý¥åcŸüTbYÁŠÕ Q3r°¢œYóæ'm_¸c[Ò÷²¢]=BëºÎž¢®ÜbKW®NÚæáûîf_/3h~?Ê÷q |¯<÷w~ô«'z¿?~ø¯R²{çˆÖ£ßïç{ÿú»¶nI¾‡c1ÊKJ(/)á{šïÿâ×LŸ5û”÷ßÔÐÀWü$ÕÇ%~‹„Ãì-.boq»¶n&-md~‚ë>z /<õ%Ý5€öÖ6 ·og_i)|ñ‹IJOÆj³³áÍõ¼ûÆ?OÚG+»¶l¡t÷.î~è¡>'•9t¿þîw„‚¡¤ß›ÍIÐÛ·rËw±°  Ï2´µ¶‰Dxê‰Ç9zèpÒ2OÚ©õçSã‚VH=»ŠD"T”™‚bfVcòóIMKG–et]§t×®~EÍáòÚsÏõ¨·Ábw8غq#o¼ôRR´Ì` Àòr”—³öÒK¹ú¦›zݾµ¹…§žxœÆ††¤ß;ÚÛéhoçðlݸ‘;ï¿¿_q¼­µ€7_z‰Í6œdi§Íç£~ÖÆÈ”ŒN[cûK‹pÙÜ6·EÁ.I‘Z4‚ßë%ê°b¨N§ «ÕŽÓ•‚†‚S9qâ(^O ‘H„̬ RRRp:(Š«ÕÀnQ©ó5ÐØØLuu ím~¢1 ¯×‡ÕjÅ•â&55•””dŒ„QÐï'‰b±»p»]Ôœ8Ή#Ghló±ú‹@‹ «ÈÎîBê©Ñùî‹ÆF^Ô<BÎþâ?ÿƒÖæ¦ÄwEQzxx=ñóŸ±bíELžfÎ’Z¼|…™O5n—¥»w%‰Šš¦Q²sGÒ>‚ û÷îeî¢E]õ·¿GGâûÒUɢ抵뢦Õfe¤ °;¦ØÕßÑÞÎw}„?½ò&6›uPçý4Å'%÷ut°¯´”в2î¼ÿþ~gH5ÔÕ±áÍ7¨Ü›ìÖÔÐHSÃ{”óÙ¯|…Š={xõùç“f†‚!Ž:ÄÑC‡¨«®æªoìõM <õä´45u{I´46ÑÒØÄîí[¹écw°¤ŸYTò7³ IDATuu|ðÎÛì+Iîü~VTp°¢‚ÕëÖqí-·t5”ÀÛÞ†Óí"ïT¤edн`³%·DÃáÏþéI×]’$Ú[Ûhom£¼t+Ö®åú[oíµ3±§¸ˆþòTÒs#¨9vè0Çf_i Ù¹yC¶KÃ0XÿÊ+l~~uT_Oc}=;6oâê›nfU,óšÔsüðþüÄÿ GzÝOñ®]<ôð#dåæ ¹¼…[Í SgÌ 5-Ô´4²ssinl¤pû¶>EÍ‘¤¥±‰ßýê±Äs²“Úêjj««)ܹƒÛïý‘Hä´ÿøÑ®ŽBÞ˜žCY–¹éöÛO¾ÐgÄ;±Ãëíjä§'w jªª7qb¿û?iõµµÔTWèñÃÑÇ÷pÞ˜1¢µ.@ œ'Ì!d,#™HSU¦Íš…Ãé$ ±·¨¨OQ³´ÐtVp§¤0uÆ öö»ïh$ÊïùËÄØÏ˜ü|fÍ›‡Óí¢±®ž’]»Ð4í|@Zz:^vY¯û ‡Büá×á÷ù;~'O!pxÿþD¿jû¦ð¶·QQV†ÍfcÆœ9xÒÒhnhà`eeb?¯>÷>üpŸe®>~œåå8œNfÍKjFŸò²=„A¢‘(Oÿö·|ñkß í¤~\}m-úõoc&ÓgÏfÒ”)È’Äñ£GÙ¿ošªñÂSO‘ž‘ɤ)ôZ†¶ÖV^þûßœÝnÇ’‚ªi=¢ç „=¾z06zvµ¯´41n8/î$àr»˜:s&+*¨«©¡¡¾Ž¼1cOËý±îÊ«(XÙÁŽ-[¨:jNX^yÑEŒïÖ¿Ïè#`C]+*™sæ•“K(àPeÞvÓÖ6¿÷3æÎé!l‡A~÷Ø/ñ¶µ`³Ù˜:s&ž´T|>ŽìßO$¡¶ªŠßýòù—ûv{ï ²·­][¶$MEQHKO'à÷“zŠŽ.§b‚s‹Q5µø`úpDMÉ0PbaNì/Çí´‘‘ê$7Õ…US üZ”‡¯ßG}m0íÞuM-45·ö‡Y0{2m–f|í>òòó˜8q"ùùù¤¥ebè:j¬¿7ÀÑCG8t䘺V‡úº6ÂQp»Áív‘’â"Åí&--ììLœYÆ®(è±{K ©<|‚@TLjEQ ‹º¤C{zvV®l(Æs%‡fks²,óÐ#rõMÁ“–Ɖ#Gø¯ï}‹½ÅE û{ûõWxðá/æìé³çp .°´pW’'gåÞ2~3‹ô¢eË)ÙeŠ}Å;·'‰šÝE@›ÝΜEÉžo7Ý~ÕÇráeW²tÍZì63”p4ã±?¶¡®–¢í[XyÑŃ:ç/~ýߨôÞ;|ûK_Hüþ¥o~—¹ r¾þÂsIçòЗåö{ïKxíØÆ¿?üy¡­-Í<õäã‰2 †Þ~+1› +'‡¯|çû¬XE4e÷ÖÍüòGß§µ¥yÈv`ÏþéÚ¿ß¼nK—²hùr22³ƒ476phÿþ¡ íßϳú†a;f,—]{ /¸«ÕJKs3…Û·±sóJvîD2 >Ú-ÝÉüéÿ~ƒ,+Üòñ;™:k&V«†º:Þ|ù%SÔ¬¨àÉŸÿœÇŽ1oÑ"V_r 9¹y„BA*÷îå­W_EÅxå¹ç˜1gNŸ9Fß|éDÂa.¹új,)À“꡽­Íï½GÉ®]xÛÚøËOP[UŘqù\vÍuŒŸd6rN=Êë/¾ˆ·­Mï¾Ë’+ÉÉËMn°CüáWÑáõ’™“͵7ß´™3P,êêXÿòˬ¬äÏõ…/’âIIü~Åõ7ðûÇ~Ic}=‘P˜ ëßäæ},iÛŸy&!hÞr×]=&·oÙ¸7þñº®óæ+/óéGéµ G4£)z<ÜxÛíÌ^0¿O/Ö°Å«;¢Žž]•vsNèÑhþâŬ¨ˆ¯³›+o¸á´Ü+*¢æä)S™·xàq`o[î”øÂ“¢„…C!~ÿØcÔVW›6µcgQóí¾–4Çäçó‰Ï~6)R–ßçã/OFsÍq‚ÞVÒœ,ºŠÕб[š©«ªæè‘cTUUáõù±ÚdåŽeì„q¸\)H’D0Ä×î# ¢©:H ’ÅF8Æï„PPÈÍÊeÊ”)Ìœ9…™ÓóY8>“'MÀåt ‡ˆ…‚X%™4·‹¬´Tì…@{;•{˨9~Œ¯=‹Œ3Å< ƒÎ:¹ër®šÜqßÜþ‰ûHMOG’$&MÊÿûÑÏ’BŪLöÞ+è*¶¬hw’7[Ñö­‰Ï·ÜÙ‹¼3gâ…ÖM\X°4!ZvâIKãkßÿk.¹4i™Íf塇¿’´îÁÊŠ­þþñ×§ŸW\¸Ž;>yRƒlÉŠUÜrç=] ¸7_?¥{úÝ7_KúþíŸý‚•k/ÂjµâNq³îÊ«øú~<¬s(Ùµ+!h^qýõÜzÏ=L›9“¬œlÆOšÈ¢e˸õî»ÉÈÊLz>½òìß1 ƒ¬Üzäæ.\ˆ'5ÕÌ{:a7Þv;WÄóïïÚÅþ“¼@» †¸çÓŸfÉʤ¥§ãr»¸`ÚTîyèÓ‰—ô‰cǘ»h!wÜw'OÆér’™•Åêuë¸øÊ+Ó{·®¦ï¤ôÁ@«nº™Ë®¹†œ¼\N'còó¹õkkNœ -#ƒ¾ø0³æÍ%Åã!Åãa΂ÜÞ-¾þþ}{{ìÿ×_£ÃëÅf·ñ©Ïý ³æÍÅbµ"Icòó¹ëÁ‡HÏÌÀ0 Þzõ•>Ëð¸èò˹éö1~ÒDœniééÌ_¼˜»|(ÑxÝÏ]1ÊŠ‹š·Þ}+.¼W¼³–žÎÕ7ßÌüÅKâvûFϾ·_}MÓQ, ÷}îóÌ_¼‡Ó‰ÕfeL~>×Ýr 뮸uˆžò­Í-¼ÿÖ[ñ†îîzà&O›ŠËí"ϫ™3ùäg?ËŒ9sxíÅçñûü}¿O%‰y„ÅË–‘ž™ÃédìøqÜ|ÇÌ]´Ð|¾8ðr=UvÇÃnÛívæ,\˜ø}Ѳ¥fc1¡,>Yät±këVZMán»K®¾šÌ¬,NycÇpé5WóñO}ª‡·êP‡B„‚!ü>uÕ5lÞ°_þøGÔ×Ö’3&{ú V‹å¬yÖœ8Áþ}åñgùEÉõH4ñžs¥¤ô»w|¹¦é„Cá9~wt]'4ë¾Ãëåøá#¼ùòË<þóÿ!‰0kÞ)&ÿP®û„ .葟³“5—\BYq±hŒýûö%r‰ú}þ„¾xÙò>sZ^xÙel~ï½a­ÃîíÛ0 I’¸úæÞsȲÌ57„ååD#QÊŠ‹XuQï‚вÕkú̹hé²D¨ß¦¦F&º'Ÿòûºd‡v{î¢EغMÄHÏÌä‚iS9zè0»·o§`åÊÓöLê Íœ“—ÛçqfÎˤ©S8~øÈ°ŽõÓï~‡ÈI¢]vn.7ßq ’êàL'ŽðüSÁ0 ÆŽDz5ÉáÐ#‘®ó´Xûuní¶<‰$& çøÝi¨­ãW?ýIß§ÍœÉÊ‹Ö1kÞ\ÑJ@ Î#$ ˆ Pšixûët™2c&.·‹` HYqqèM{ wÇû¼L¼`à>ôñÇy%'MÖ§(3aÒäÄxE}M ÄEΓ™5w^¯â^ÞØ±ÝêFbÖÜy½Ô™DÞ˜±´6™QÏB¡¾'7+ŠÌÔY3{]6yÚTR<ü>‘p„¦†úD~Ί¸+ÀŒÙ³û¸vù&&Æ×êkª{„°ídí%—%Б@7FÇ®º‹•ó—$i:]N¦ÏžEåÞ}xÛÚ8vè0LŸvÆÝcsúˆì7¦›@ ’–U=’¹;vܸ>ó¶fåd3yÚ4Ž8`޽•ïKšPÐ)Ó§Ê»t¤l`$0 ƒëßbÇæM¬¼ð¢“>¬mÎGFEÔÔG ü,€Ýj!ÕãÆiWù}HF.VIÂfs`)N§›ñv'ö”4G dÂ1 =ÃmDÐBt]G’$<v«  È 6ÅFzz:2Y™\®Ò2Ò‰F£Øl"‘»4€¯5Ãf³a•ª†/¤]W14‡ÃFjŠT”²böÓ½.‡Ã¹(hzÒÒÈïCüÉÎÍMˆšššì>wq6»hÜs«´pÓgÏ!RO >uæ,ìs,¦êØ1¢Ñ(ûJ‹Y¼|e|š«zàFÂaÞzí¶°c‡ÒÖÚJ8구CLF‚#ö'}ÿù~—ŸÿçwÜ®½­uP¢fgÈÚ^¢ÓfÏ’¨©ë:G2„ó¾âøá®¼y3æÌí·ñ7kÞ\vnÞÂò¾=j'OÚç²´ 3 £Õf%¿zë\L /ÆM˜Ô§÷XZ·°’“.˜ÒOy2øýDÃá“,Ç6:uÆŒ>·ïÞÀnjlìUÔ?iRŸB±ÙiÈ¢®º†H8<$ÛÕ4ÃqQ²¿²ævËË×ÔPŸø\Su"ñyæÜ¾¯¿Ãé$ÂxªŽ?å2;lÚåØñãû Å™“—KΘ<šê8P^Þ§¨9­ŸóÌÈÊJzöœ*ÊË3*/ë9ûráÒe=t˜ª£Gi¬o wLÞˆ?bÑuñ™3çÌí÷^ž:}æ°EÍÞhnldý«¯pâèQ.¾ê*2³²8ÓÑ4¿ÿñ454bw:øØ}÷õ˜-œÔ MÖ}©4ˆÐ³ƒ9þ`8´?-ÍMT8ÆE—]ÞoØi@ @pn!˦@ÓG&-˜ã9s,d÷¶mÔVUÑÒÔLVÜ»1r°ÂÌK¹`IÁ Æ’š»&†WìÙÿ÷“Dz“ÎôVWtÇåNé6v’Õfíc½®A]]í{\1-#£Ïq$I’È;¿Ï@kSsB¼jnlL¬÷ú‹/òú‹/|¾@ŸËfPz—ÎS•¥Ñ±«î¡gç”z `Þâ%Tî5Sœ•ìÞuƉšžÔTÜ)½ în‘œº{é4Ôw¡ 42ªñÔz{1t`ëo¹axÒR±9ìädgÐܤðùqØœš¦36o ²ÍªlA·8Hµ9Ñ$TKć¢{ÃX­VdÉB$CÕ QqÚœ¤ä§‡ÃXd ‹ÃŽ¢(X »EA2Àa•±H2Š¢à÷ùèø‰†#d¤¦¡Du\.—ù‚´Û0 C’Ð0ÎX÷ó³Ì윾íNî;¶€ÝfcÞ¢%ÅÃ-–îâÖ»?ÁžÂ¨q´óE5Ië_ù`† ]¼|%¥…]/´ŒÌ,¦LOŽ:Ä7¾ðêkkÎèúëèðíå1Èpœ'7Þ2³ú¾^é™C*‹ßçKÜ_9¹¹ƒÞ®½µ5ñrïO|ÈÎÍKœw0ìÕs)-½ï nv§ƒºêägWVN.’$a…Û¶qÍGnñç‘×Ûž({fNÿu–1³;¿ù£Çîš™{·¡‘åìܲ…¢;Ø·§”þ勌?îŒ}†ëºÎóþ +*P, wÞÿÙ9=Ÿ³Ý½NUUôóÝîpŒÈñ»3vü8¾ÿ‹_$Žå÷û©¯©eoi ¥»vñþú·¨ÜSƃ?2à³Y @ œØdkÓÀ9‚£Öó—,a÷6³¿[VT”ð|Ú[Z’SXPP0èqˆSî³õãÄàr ìib·¿O4P¿®{9Âá.gŒ€Ï?¢çÛ߸٩koƒ );\»ª¯­¥¾ÖtÀ$‰×_|¡Ç:±n}è½¥%\ÛmgT*÷)hú"ìòþ0M·1Èþ¢ö7áÿtÙÀp)ݽ«Ço…Û¶õ+6ŽÖ6ç#£rgɲŒ¦i‰Ð¡ K`ÏÎaÊŒ™Ä¢AlN4IF5 t]G–MÑj± [mV;†Ý…ÅîF—-HZ §nA…‘ådÙ‚,Ë8lv, «æŸn`wذeØeÇC4%¦ÇP0°Zd MGD‘05UÅŠ «tDU2²²‘])Œ?tÉaGC†a8Yv Cñz8™©ñçF§·f[üÙt6{kÚ†áÉQ°rUBÔ¬,Û@ÉIy2ÍÆMW˜ˆÎ³!*–¬\•$TE¢QþýKŸO4—®Zú+®"/??Ñ ùÚç" ~¨õ'‘,°]vÍudå B€É3ÄgBßSh,Côjv›f={ˆÄó&Xý»  ø{5-6ë ž‰Ã~xâ8²"«.nƒ™ðÔ]HíŽuå*ÝËj·ÛQ,·d¬–®2Å¢ÑA?G†úœéÌÍ1˜0¦v›½ÇyVú}>öÇg†A~ýÓŸö»~ñ®\yã az¤ˆuË»`wØU_#¢(‰¼³“§Meùš5üæ¿þ‹€ßÏËÏþÏ|ùËgäûO×užê)ÊJŠQ™}â“L>½ÏN¬bQÐT ß?@GÝŸhØûy>žÊñû|žY­¤gdž‘Á¬ysY°x1~üqêêxÿí·¸êÆE‹] @ 8pZMñIáyL›–¯ZVÜ%jÞÉÍËë3¬æÉhÝ¢èÍ[´ˆ¥«W¸'-µïñE•º5ˆÑ©÷1p­]åå×^ÇøÉ“ô:È:ÉÓõ’«¯cõÅ—ŒØþ»‡Âð¶µõ¹®3Þg×K-ôvîxÙ¢ý„zí¤3L1 <ÃílÆáìªËOéËz\)e½æ#aéªU§´½µ»çڞǚªÑþSCDac‘¸}öU´cÇ)…8Tì)r#=í½>º‹¿ÝËš~úBv§gfR°r%¼óÕÇã÷ùIñ¤œQö¯ë:/<õ{ ‘e™Ûïý$s,è· ‘•Cc}=mm­ýî»Ó‹=3'»Ï¶Ç©°Ì˜3‡ “'Quì8û÷í¢¦@ @pžà²B[ÚÃé¹ýʲÌÜ… Ù±y3 uu4Ö7àp:8OI4^šO—@iµZ™6sæYQ·Á*‚þ®ÉÕÝÇØR=]©†RÓÒΘóm;“º­§×® ÃHˆß§Biáî!—t¿6©©]ö`r´¿ÛòÁx ¦ —%+VðÁ;ï$ýV0Àähms>rÖˆšš è;i*G«ª1N"Ñ Š$a `±Úé̥Ȓ)nZ¬É"™¢¨ª‹„ñû;PU‹b5 Ý&u]GÆÂtTÕ‰ËåÀb±`KqšÉ–%=±®S ‡Ã„Ãa"1 ƒHLE¶ÚÈ3%5•P$†®êÄ$ ‡]‡#%j‚6;™>k6©éé‰pGH䘜:c&é™]a,ç½7_' RVTH{·Aá‚ɘc‡&}ÿÈÇïîù’ ψÕØñÉùH÷íQQÓér‘‘™E[«™0¼r_YŸë;tpHÇHéö’méï :óOú}>B Î^¼/;ilhLÑe¨aÎR»…hil<£EMOjZ" @ó)\÷îÛwÒÚÒ•W£×Æ™oh‚{ZF-MMI¹<û¶1sŒ!‡cáŽíñgâ,>ñÙÏö¹žªjüä[ß$P¸c{R#ÝèöŽ2ú 7cí}Lnð¤u]ÓÖææ̾ÓZ'ÝŸ+‘pøŒ5;ÅÒÂBEácŸœ ˜?q"õõÔ?ÑïzÕÇÍPËã'LÑãŸjÝGÂ!ÑZ@ ÎRíPã3¨‘fÞâ%ìØ¼€²â"ìGÂQeÁ’Á‹šÝÓ ?z䬩ێöv¡PÒäðîý»î‘æ²r»ÆÒ³2“ÎwÉÊú¹@k¼«˜b;½vuäàA:¼fÚ®œ1y<üõoô¹®¯£ƒŸ|ë[†Áòò©«º{Kþ>ûÚõugŒÝdåuEò«9Ñÿ8B÷q†Üü±g” —+®¿›ÍÎÖ÷7b±XXµn^vÙ±ÍùȨø³væˆNÈE‰hLGÎȇauS쨲M’Ñ0½9e$$ d]CÒbÑ0z4Lkk ¾v¢‘2N‡‡Ã6’E]ÅŒ«£©Q¡áHÝP±* ²d`’d` ¡ë¦È)Ë2º’b%¢AÞĉh:(N7¾¨Šnµ'úl"ü£"ì%›šSº…±n Bkà<» d™EË–'¾ïÚ¶%!^,Z–ü¢^¸tYâó†õÿL|ž4e*9yÉùø´“ô»Ïrêdc·}|˜ääå1`jô IDATgÁÂÄ÷þã…~:…9 »ö¿·¸ˆCû+{¬s°²‚ÃqAùT±XÆO2C`TìÛ;èP׳æv%(¯Ø··Ïõ4McÿÞ½ñë=eDBÈž©Lœ49ösoqñ‡VEêjìi}$»W™)ñP—奥§äi0~R—`s¨¢²ßë_}âøÎcÖܹ€™ƒ¡µ¥¥Ïõêêii4ï» ¦NÕº>zðPâØKW­ð^[²Â|6ª¬L'­K"m[?Ù'Ž%íÝ3Öf·%BÕ¬¬è·,UGŽžÖziè–3#5#ýŒ¹G“E‹Â÷ß?hAqæœ9ÔVW'¼1O¦¥©9‘/dÒ”©#züA×}Ù‰KËÌD @ œxl`‘Ì0¡‘‘Ý÷ä©SðÄ'O–±g÷îĸ@œOfÊô8]æ_ks •ñ4.g{{÷Ú¿o¡ ©9œÎ¤1ι »&2—áë'Wâhá ›#ø6<öÓkWÅÝBÏ.\²´ÿ㤦&ƨ4M£¬¨(i¹ËÕ%pÖ×ÔôºC••‰kÑÝÓn…B§7¥Ùä)SŽõõÔTUõ9Žpìð! >V7múeÃE’$.¾êJ¾ñƒðÕÿøA £µÍùȨŒÊ&Ø@è’LTVÀæ${â$t»ƒ2ª,Õ ‚ÝG ÃÀÐ545мø¼mD"!dœ.;N§›UCƒX,žcÓ†Ãi‹—Y' âõ¶ÓÒÚD,!¢E#¨j”¨ªQc¨š†!Éè’Œl³¡I2Ùycig C2ó|Ž@L䑨˓Â&¬èÄßòÞ»‰Ï‹—¯LZoAA—¨¹cÓ]Û¯ì)äŸäýøò³Ï$„N]×yý…çxì'?8cêàÆÛ?žøìïèàчî£|OiÒ:áPˆ›Þçûÿö(¯>ÿì)íÿÒk®OºG¿ùðç)ܾMÓˆD£ìؼ‰oé Ã:‡…ËÌÆEKc[ßß8¨mÆŽGþóZmxó BÞ›Þy7Ñp[¶fí9}?XmÖDÙ’Ý»9P^ÞïúCÍ•<în^qâR¯÷ïjÓKºµ¥…·_{í”ÊšâñpÁ´iìÞ¶•öÖÞ…¸[¶ôi±   ñì~óå—z­/]×yó¥`±XX²rå¨^óÂíÛõ1kþ¼×ïÌbEÛw$-ËÎ5gñU–•D{½Þ|³ÿ{y©iuÕ5ì+-íu¦úÊ÷ìZã·Ý;à:µÕՔĴϘ3«ÅrFÜŸÝE‹ÕÊÝ>Ä̸p>fÍŸŸèÈ¿óÏÞ'Ö¼ýÚ«‰6ǼŋGìøáp„ð Â0ïØ´™Ö&ÓKwÎü@ ‚óI‚ÜøP@½¤÷-%ú7ÍÔVW›}öSðÒ4ûì +ºúì/>ó4'Žëu]_G[ßÿŒ©ßw^{•ÖæäÉÖí­m¼þâ ]ýñ‚‚¤‰üã'MLŒ›E#Qžþí“} ›õµµ”!Të©Ò·Îu^»ŠEcTt“X°t`[éÏ()Ü´l̸q‰Ï[6lè1Ѹ­¥•מ~ÀcxR=‰ÏC,²,³|mWʵžzªÇ˜JÀàù§þœïš¿¤€猲Á¹Å¨ŒÐYmf`ãá |€.[iÙcÇC&¤iØ$™ˆ¦#‡"ØKÌ‚Åb˜IºAL‰Su¢± EB¨‘(~µƒ€?B0"7ªhjj¦½½‡Û ? (v» )j  .'š3ÃØF5Âá¡PÈ ?«š‰¢ IÆbµas¹ ë¦Ð“$¢ºÎpÒ ëñdÎu9Òœï¡h»‹’5qo,Y–ÂN'“¦LI„Qm¨ëYzól*X¹»ÃA$lÆ6xé¯OóÁ[ëÉÊÍ¥¦ê8AY–?i2ÕÇ}èupå 7±ýƒl|ËŽ9Ì¿Üs™YÙxÒÓ 45Ô'î㹋ŸÒþ×]qŸ3—åæ ¶†ºZþõÓ÷'ÂLvÒ=Lí©²|õJvî¢æÄ ÞøÇK476²hé2Ò33Qc*­ÍMì//'+'‡U]”Øî£wßÅo~ú3ÚZZyò?çòë®gÒÔ©XmVZ››Ù½u+Û7m`ö‚ÌY0ÿœ¿'®ºáWVÒÚÒÂSO>ÉòµkY°d ™ÙæìÅ@ÀO]u e{P ·ß{aÂäÉ ûxýÅøèÝw“7v,Á@MÓH‹‡É]°x {‹‹)/ÝæÿÏÞ}‡ÉYÖû?múöšÞCz¡—Ðé„bGQQ{åØPDùá±± GE"ˆ -I @ $^7[gvÚÓ~ÌfÌ’„’°ÏëºöÊì<ýžûÙìÎg¾÷=c[7oæðc¥¹ÿlÛ&—ËÒºu+ËŸ[ÆË/®à ßüf¯ãœræYüþ×S(øÃ/ÁigŸËðÑ£±›ö¶VžY°Ç~˜hö¾ç‰F8åŒ3÷z»ßwçlÞ´ øÀe—½®-í(wòIX¶Å˯1l÷a#°¬R[9¶Í©gÅ7ßÌâùó ‚€cN8ªšÚ[Ûxbæ –-.õ‡i§žÚk¨œ7{ü-6ðÇ_ÿ’QcÆ2vâDš  ªºÛ¶ÉçólÙ´‰% ²¸çÓ ÍMzô1úm]DDDDä¤) ›Ò¥¡%ÓÅR•ÝÞ2qÊæî2†ÁÄCyÃû9åÌ3yñùغyÙînn¸î:†Eÿ1Lƒlw7›7ndÓúõÄqŽ>þø·¼]cñ8üâê1rÌAT×ÔÑɰü¹¥å$ÇâqN8í´¶½èC—ð›kJ±XdýšµüüûßcôØqÔÔ×ú]lX¿–¶–mŒŸ<™ÉS§î³ëè*@{,šSû¶_=¿äÙòûƒ‡¥öuL4nÒdþyÛmx®ËºU«hÛÖJmÏÅvO<òP ¼ÿ皟0ò ƒ¨¨¨¢½­•—–/Çó<*«ªÊCÞîʈQ1óþXñüóÜpÝu >œ|>OøLßû÷j›Ÿð®ÓxaéR6­ßÀÖÍ›¹þ‡?`äØ1TVU“I§YñÂóå÷Ë**+9ýÜóöi_ÞÓ> oû%Ô´{Þ u]¯ü¦Ú&^àâå]ê*S]ŸbÁÃ7,ËÄ ]¼‚‰k¸Vi˜XL‹‚ëQ,¨©J’/æèÊæÈdZ)ä=bÉé…B5kÖÑÚÞF*• –ˆRWSKEM1;‚exžGày„¾ï¹x~ž¢—£àq×÷)øF$‚O)ó+¯è¾©PÓsK•¨gßÍ|ûN6ûD¿Ø´Céÿ¨±ãv,Lšz(=ôÀú·m3iêá;­W][ç¿z%×}ÿ;åçÚZ·ÑÖº­¼Ý—¾ý=0 ®ùÖ•}¢¾ñƒS]SË]·Þ¼ËsÞÑßÕ4Mþûç¿àKÿ0›z> ½?ìpñ‡/eèÈÑ{Ü–UñÖodíêÕÌŸ=‡ù³çìâ?ãwõþŦ¹—\þ)nùãlݲ…›ÿø‡]îüäÉ\ðÁ¾#þsˆÅã|øòOsëMbãºu<9kOΚµËuÇNÜ7!oeUGN›ÆÜÇcóÆüêškÊËN>ã NÜáí >ðA"ÎßY¼`Ë—-cù²]ÿÇvznÈðaœÿÞ÷q×­·ÐÞÚÆ-ºq÷ýT†ÁÝÿû]Ë¡GE±Pàþ»ïæ…¥Ëv9ÁŸ~ýk2é4÷Þq÷ÞqG¯ujëê8á´Ó^×§weíêÕ»ý4ív5uµLßè7pÀ^o÷%O?Mº«‹º††×= CëÖ–^Ÿzyÿå?d^Í7¯þqyx$(M<¿uËž˜1ƒg.äÙ]|’öàCåøSOÝ»Ç7 |Ïç…¥KyaéÒWÝfèÈ\øÁ‹E‘wŽˆõ hÉÂÚNß°÷ö=hèPªjjèì™.eØÈ‘å‘lÞÛqøèg®àï7ÝÄË+Jò\µr«vñÏ7úþÙ¾rú¹ç²yÃFž||Ö.ß“ˆÆ¢|ðã—í²=šùèg>Ë-º‘޶6Ü¢»ÛQ•ØÇ—»º£TyÙ”*…Zû²_mÿÀ-À¤C}]ljÅcŒ?%‹KÓ9=³`'ž^zÿª¹N>ã fôŒšTÈåË*.ÿ-~ØaŒ?Ž¿ÿé¦ÝcȈáŒ8‘ç—,ÙéýíSsíM–eñ‘˯à–ÿȪ•+)‹<÷Ì΢u \ò‰O’ªHõÉ> oû%ÔÜþf]¦;CEÏÌÛ ïøƒ}ǹÐ^¹ÜÁ1ºóHÆñ\ƒÛ°½ö¹ÏóÔ¬Y,{f1[7oÆs]Ƀ‡ãˆcŽeøèÑÌÝMH¾]sÿþ|îÊ«xbæ#¼°d ím­ÔÔÕ1nòdŽ=é$–?·gs—|þ›ÿÅ3ó°ú¥•tuvÐÉÏ副c$’Iú Èèqã˜4e ö>ø7“N—‡ëÙW xÍ?hÏ9‡‘ÄS?Îú5kèÎdˆÅcô8ˆC:š SÞëÇ2|—}þ ,[ü4ëÖ®¥;ÝEw&ƒçºÄI’©CF gÌ„‰Œ~‡ý¼‘ÿT­YÈacúï¥ÁŒ Ã`â”)åj¹Io¢¢0UQÁ¥W\ÁòeËX<>7¬'ÝÙIàÄ ››3q">¸O´é°‘£8ô¨£6j$O=þ8[6m$ŸËSQUÅAãÆ1íÔSË#bíÊÀ!ƒùì7¾Á³ ²äé§imi!ÓÕ…aš¤**è?h ã'̘ öÙ5¬ë„œWšs@žíW™tš•/¼” 5&¼ë&:µj.^8¿jœxÚi 2„§ŸÅú5kÉe»‰Æâ <˜C<ŠñO¦eËÖ×ìÇïùȥ̞ùÏ,XHÛ¶,Ǧ¦¦–ñû¨¿%SI.½â ž{æY>õ$[7o.¿wÖÔ¯?ã'OfêQGcÛÖ>íÇo¶ÈÛƒî«ÉÐ^aíºõxžG}]-Aì2ÔÜñTvµ¼´’OÒ™qß]¬X8š˜]L“À#j†Dlƒx<Žs°ì†!ITVÎæX»f=/¼¸œ–­mضM2YqH§Ód2‚À£¹3ãÆcèÐÁDc^±@ºu ¡WÀ/æpó9r¹Ý…"Y/$Úd¼"\xÉe yacE¢är9bñ8®ë¾Ê§Uv÷R˜¦IËÖmضÍàA÷KÇx©ã?Á&@Mâ3­ˆˆ/XÀíþ3ßøÁ÷ù§÷–åÏ=ÇŸû[>óõ¯ÓÜ¿¿^L‘lÉÀêž8ÇÔAULmòNÖžƒ{¦ Uµ1õ+õµI_ñROÒ©C÷ÏñìýuañxŒt:ƒaš°CEæ„©d’Bgã'L`õ²gpƒë˜äŠY0lÂBŠ Ë&šL€m ¤Ó‚"¶M}m–á†!~D‰ÕLjǣÔÖÖàX6é®.º3xE ¤PÈ㊄Oˆçyø¡‰Žcøð„N¯èb‘HÏóØÓú{£g»x|ÿÝ©»ªØÜ–ƒÑõºIED¤oȤÓÿù=c‡áUûºµ«KU¿ƒ‡U )"""""² M)è*–æ@\Ñ› j©]Þ‰r¬,LsêÍ…YêWêràÛo¡f,Z 5}ßߣíC¼ L< úLCs?Z×®$‹ãD¡è0v4Šï»xA€Qt ³9Ì‚‡AÛŽÇinl¤2YIÑ/ÍÍéº.…B;b‹Åˆ%ㄾKWWAàAà‘LDÉfóÅ<Ѩƒ‰a¸> 0-ò^Ïð±SIŠÅ°t®^iÈYÏó°¬=Ânû>bÑý{·¾2Ø|±gZE›""Ò¼´|9PšûÒ²œ¿BÖ½\ 5˜6M/¢ˆˆˆˆˆÈn ¯†œ[ 4–nƒê!Q»¼“tàÅVB¨ŒÀà*õ+õµÉ;Ý~­Ôèì좪rÏ<6 ƒ¢çbX&8&† fÃË/ŠF-,‹Ðqˆ$â„aŒ\¡HÞsÉtvøøQ'†m—~J9–a˜!XFHÿæFо‡ïûry0 ħ³£•\&mTUWâ8!Eß'Ÿ+àz!FÄ"È»¦…騏^€i„ojRèŽöŽ^m¸?í*ØT¨)""ûR†¤»º¨¬Úýoª+žžÏ?Àè±ã˜kó<Ÿµ«W“ª¨`üäƒõb‹ˆˆˆˆˆì†e˜zxa[)€ZÖ#k¡.®¶y'ØÚ «zÞ“®ˆÂAu{:¢ú•ú€¼ì·PÓ¶mâ±¹|Û¶÷¨bÓ°L ®‹e”* › €H„L±ˆmZX‘(†ã€mc…l7[¶n¡½3ï‡4Õô£uI$R$“Iâ©$Žã`š¡¹\Ûóð<—‚ç’ÏÈtwÑÙÙI&›&q0-ƒªd Ï0Ì77)„®gп±|ÑÅŠ9X¶MÑ-`Z&¥htO~ÈZaH<Ã¶í·¤“l6ŸoÕ #""ûžïyüì{ÿÍ„ÉsÐÄ ôë?Êê*Ç¡«³“%‹1ãßÿ ‰p̉'8¿xÙß½öZ½È""""""¯CÄ‚ñ ðR´`e´Æ``%$µÏÛQG6vCºPú¾)C«Ô¯ÔÔ.R²_S²T*E.Ÿ§P,bïÁ0q¦i†!a¡aRÛØDmc›×¬ « îDÈùàÛ¡è´utÑÖщeØtµ.'bGIÄSTVV“LVŰmÓ4{æÇ ð<—b±Hw6MGGííí¤³i@MM55µ8±…B‚â&^h’w]††EhZø^@h€iY¥!d÷ Z³/”Ûî­4¢ê°-«›FDDö=ßóyfáBžY¸p·ëDcQÞóáP[_§y›²ÌÒÈqÛr°¦Úó¥¯ê(4¦ Fóë½-lËÂæ t»¥ïã6 ­†Ê¨ú•ú€ÚFþc?‡šI¶µ¶ÒÙÙE}]-a¾þC/ÛqðÝ"fÜ!QYEms3k^z‘бɺ9<Ï'‹‰9Dã b‰$•AH2žÂtCÌÐİÇ"DÀõ|° 'Šš˜†1#Ï/ÒÙÙIwwŽ€Ï p]Çqñ×u ‚Ë20- lL›L6Ëú›°cqêêYßÒÁKkÖòùo\ŠiGhíèİlÛ¦¸¾GEE…âëŸUÓ4LZ[Û¨®VŠˆˆˆˆˆˆˆˆˆ”†¥V]úÊ{Й‡®bi>7Pû¢TÆJC‹VFúFˆ¥~¥> }ß~5Ç¡¢"E:Á0Œ7jnÙÜB,#Q‘À+t!䋌3–_XJ{ËVâ6Ø–A¾èaF ÇÁ ð}üÐ'ßÇõò„ù¾ïã{aÏ\š–eaZ˜`‚Yú>–LÑÑ•&›Ís=*“•´u¦iiëäØN戣õb„aFBÛ¶)‹8¶ù†Ú)¤TÅZQ‘²t7‹ˆˆˆˆˆˆˆˆˆ¼R̆X šÔ¢~%ò¶g¾­î™ÿj[k¦ùúO¡ººÃ0(d ÄcI*ªëÀ´8x(MýÍ(º®…‚‹ëúX˜8–ƒB@ˆiš8ŽC4Úó‘H%©¨¨ ™LKƈÆãDã¢Q;â`Xfi[Û"Ý+¦vòٸµ…¢çsþô (z>E×'™Le’w‹D£¥Yls¹ðú>Îa&m­í½ÚJDDDDDDDDDDDDäÊ~+ºcµ¦ëº¯»1ðlÓ&|<¯@—›Çí:Im]ù¢‹mDÈc…ŽQËÄ2L,Ë&‘°°m‡ˆò,ÂÐÀ ¿4ŸeµSM@Hx¡Gè»=Ï/bù!™lÃ21C‡l¾¬n Ë¡º¶ŠúÆfò®O>,F]Šž[ªB5 ÌlÛæõÖ¤º®[®ÒtG½TDDDDDDDDDDDDÞÑì·êÀµ55d2ÝttvÑÔØ€çy¯º¾tuvRUUEˆiEˆE R1‡|w'i‚ò¹"¦ëbQœ0Ä !q°, Çqzª4#8Ñxi¾MÓ$ Œòð³^Aàû.ŽW P0(xÅÎ,™î,¾ëáù[ZZéÈæ9hÀpbµuÄì$™¼Gg¶'%OR(dqŒ€ˆãPtý×lË´hëlÇ0 jkjÔCEDDDDDDDDDDDäÏ|«lYµµ¥Ð®£³Ã0^s›ææFÇ!N—÷Q,™?>K–,!–‚Í|‘\¶@&“¡½½ÎÎNòùÃ0èèè ¶¶FsiŠˆˆˆˆˆˆˆˆˆˆˆˆðVjTUVÒé&_(HXfiˆVvñ¯ÉÆ›©¯¯§¦º’tÇVîøëmÌ›3‹m›6pÐÈÁT&btrxEÏòÉærO!ï⇱Tëáz!F©BÓ ÍÒcÓ° Œ°t<ßÃóC2y—¶Î ™k7µb8|×Å-äèßÔĶ͛øÒg.ç¢K.ãý—^†«À+qÓ4‰Ç“ttt‰Ä^µ=<×Ãu]bÑ(U••ê"""""""""""""€†aøVž€çy¬ß°‘ è×ÜŸîBÀõ0›¨íà>ùî,Ù|E‹Ÿ!—îbýK/0gæ¿©O:ŒÒÌÀÆZZ6oJscú~€[ô \ƒ€¨íàDlú55RQQA"‘À4 lÃ$‰aÛ6¶m“ÉvÓ•íÆ|BÒÙn6oÞ̦ÖÒy(º>†WÀÆÇ1B"‘‰TÑT †ŠØ IDAT>¹ºÃ8ÿâ÷3í”w‰ÆIVVŒEY·n©Š¦m—ÏÓ‰”†Äõ<ßõiÛÖŽiš ÐÛ¶û\gyhuéß ºqDDDDDDDDDDDDÞÉ^j)ý{êÐýs¼·<ÔÈdºÙÚÒ‚išÔ76‰DÈ独ZµŠE‹±hÑ"Ö®]K¾èb…>q 4$M& ïÇÀºJ*£6›7m ­­  ?0(¸>®ë†!¶¦ÉÉÉx¢4Ǧe‹ÅˆGb„¦eGHwgèHwÑ]ÈSð|:³Z[[ÙÖ™Æ'Žë‡8¡K܉Û&QÇ&‘ª –¬¦3ç³è¹dC‹ÆC¨mèÇ”©S9õÔS>|™\Û6KÃà‹ø¾imÙlÛÒ @sS#‰D¢OvN…š""""""""""""û?Ôì倩T’\>G:¡mÛV–¯x™Ù³ç°jÕ*ºººðýÓ4èêhÇÂÅŠÀÔã¦1²¹† »ƒLG ímÛ0M›ˆaâ÷Ìiiš&žç”æÀìì¤PÈÓíÆ2LlÛ&u¢˜viþÊL>GWº›t>K¾X “Ï‘Íæ)æ‹XQÇ4‰‰ˆCÔ6ˆ:¶ia!#ͺÖNÖniÇs¶mÛÆ?ÿùO~øaêêj9áä4hC† ¡¢¢Ó4 ðiïèJÃñöÕ@SDDDDDDDDDDDDä­ÒgÆ8m¨¯Ç÷²Ù,ƒ4ÓÖÚŠçy¤R)²Ù<]]Ô×Ö`úy*€aƒP3ɸü¨C2£ày`˜† ˜F@Á4 \?p BŸB¡€ïº„aH†X–…mÚ˜–…çy<—lÑ¥àq}bàE±“¨mwL"&!ø¾KX,bÛ6†aÍf‰twS‰áû>Ùl–d2É­·ÞF4¥¹¹™‰'rôQGQU‘Ä÷|‰uuµê‘"""""""""""""¯`ö¥“ijl ‰DøøÇ>Bmmah”ÂÆ\·˜'j4ÕÕˆF(rD̘ãˆG±00 ±M°m»4ße4F,ê‹D‰%âØQ‹ÀðB¢çÑË‘ÉfèêNÓ™I“Íçð< ÃÃ0°m“hÔ!±HEl’ŽEܱˆZ¥am1J• ù|žH,FMm=ÕU$+RDb ²ù"ë7n&ðC<×gíšu<öèc¸…<Åb‘X4JS£ÆtÙ»/Œa477±qÓfR)¸âòó§›nfÞüd2âv 3aäˆa$Š9Ï+’îê £m‘X “Ð00Ë6±lÛ2ð}Ð p]“À,͵é{aixZÀ°L,ÇÁ'ÄòC Ï%t]ð}B #$f›˜a@Ô‰Ù¦aa‡¾ÁˆÆÈ t粤³Ý¸V”¬‰DhllÄ4M,Ë¢P(0rÄ>zéˆÅbD"š››0 C½QDDDDDDDDDDDDdì¾vB¦iÒ¯¹‰-[¶p饤²²’'{ŒB¦LGšÆ†Z,Ó ±‰øQº‹ÊT 74pÃÀ0Jój¡cbš>¥ ÌíDZ#!¦k†]š‡Ó |Œ‚K€YªÄ M,à µ°ýË4p¬Ó4 Û‰`Æbä .‘XœÚúzlü Àu}Ò骪ª˜zÈÁ\0ý"§T¡ÙT VhP P1 zF¦- MkZ`õ<¶,Ó¢X(`6‘ˆ…mÛÄl›Dªƒöt†ŽL7žÅŠÆ0 Ïó1|ï½øª««0M“úº:R©¤zžˆˆˆˆˆˆˆˆˆˆˆˆÈëd'™J%‰Å¢´lkꨬ>Ž$yº–Ï%YQE1ÛM*•Â.ºù"~PÀCÂÐØa¾Ê€XÄÆ ‚<Ë' Cè ?]×Å0 4L0-,ÛÀ²,¢N„ˆm¸Eb±–m±x”xE%­Y—ÍÛZéÊf‰T¥ˆÅT×Öñž ÏaôÈa˜¦I<§¡¾Û¶øNóÔÝ8""""""""";ê™õ Í6%""ïõ‘ý{¼&a³m›~ÍM¤ÓZÛÚÈqbcO$š^O67‹bºHÄÀõClÛÇ´{BÍ04ñ 0Í€À/U`AÐ3f©b3 CLÀÂÀ²KÃÐFl›ˆí`Û6žaa;&¾ïRô=â±$¶#ÓfÖÓ¡©_Î:g:‡N9˜X,ŠišÔÕÖRQ‘RïÙFnÿ ÑÃ÷}Z¶µ’ÍfËÏEÒI¯\Ķu/Ò-P, ÃË(UaüRˆ~àúaù{€\®ÐÓ(`&Ž!b;DzæÝìÎå‰Ä¢ø¾‡o@ª¦š¢a±`Ù t1κðCLš4¥|N‰D‚†ú:,Ëz[t–‡V—þ=u¨n‘w²ýc¡Z–EsS#¹|žŽŽNr¹ÅŠþD§ôgØÄ,™ÕKذt.ÅînBìž`34À B3Ä | B¼0 À ĶmL lÃ$b;DŽeab„†LËÁ‰D0"6v4A²ß>pòû¨ªm(Ÿ_<§ººŠx,¦-""""""""""""ò&Ð<Æc1âÍ1 Å"twwS´DFÁˆ‡vl$½a%k_ÀÍt5#øaˆø˜áûø¾Yz6j”†œµ"Ä"Qbv´hºn`Ù*úÑ0tý‡`U5bÚNù|R©$UUUD#õ,‘½Ä~;\D4¡©±0¬§»;Kw6K6›%¬Dªf© 'bûyÂL;n¶‹B¦ƒ\W+¹t'¹\†\w7ùî.lÛ&žª"™¨"‘ª YQ‹“¨Äާ0)Œd F,Q>®a$ ’‰Éd¢<Ì­ˆˆˆˆˆˆˆˆˆˆˆˆˆì=öÛéb à •J’J% Ã\.×pæðˆAU?̪~Äøò,‰8ÉD‚x<® SDDDDDDDDDDDDd³ß®¶½Š2‘(UVæ Ü¢‹ç{xž‡çùO„A€ïû@)´4MÓ40M Û¶°mÛ²q"±hT½FDDDDDDDDDDDDd?²ß)‹FHŠˆˆˆˆˆˆˆˆˆˆˆˆ€L5ˆˆˆˆˆˆˆˆˆˆˆˆˆôe 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjŠˆˆˆˆˆˆˆˆˆˆˆˆHŸ¦PSDDDDDDDDDDDDDú4…š"""""""""""""Ò§)Ô‘>M¡¦ˆˆˆˆˆˆˆˆˆˆˆˆˆôi 5EDDDDDDDDDDDD¤OS¨)"""""""""""""}šBMéÓjÊ;ʬÇgóá^Æä©G2jì$?zúÈÇY½fÍÛæƒ àÏýçN¿˜q“¦rÐøƒ9î„Søü¿‚ïûêûЗ¿v%CGŽå¤Sß­ÆÙ‹l5¼Üð»?ò£Ÿü”ªª*æÏ}œHÄ)/û¿¿ÜÌ·¿ûý^ëoÝÚB&ÓMScãÛ¦ >û…/sï}÷÷znÝú 8˲ÔIDDDDDDDDDDD䀣PSÞVn¿ó.Î=ûÌ^f:“áÇ×ü €Q£Fòÿ®ý £G¢eÛ66oÚB<ËÎyý†Üvûœ{ÎY 6ôMíkÎÜ'Ëæé§½‹oÿ×7¨¯«gíºu„A """"""""""""$…šò¶±dé2^\±€ ¦Ÿ×kÙ¼y Èf³|ëªo0~ü8ú÷ëGÿ~ýÞÒó¾ûŸÿâúÿù“&NxÓ¡æÌGgF¹æêïSYY ÀÈÃÕADDDDDDDDDDD䀥95åmãö;ÿÀÈ‘#˜Ê’%KÙÚ² ¨¯¯ã)sé‡?Ä¡SÙå9xžÇÃ3áÖÛîäåU«Ø¼y õŒ7Žwz2§œ|"•••lÙ²•^} ÿºïß„aÀÇ>qy¯ý]0ý<~vÍÕ¯yí[·¶ðç¿þ|¸<üîÂEO3täØò:—}ìR¾yå×vÚîÆ›þ̬ǟ`íÚu‹Ešû53iÂÞ÷Þ‹8ú¨#w{Ìc¦Ì†¹ïž0nì–¿¸‚ë®ÿ% .¢eÛ6FÅ×¾òE>þÉOpÛ-á°C§î´ŸE‹3ýâ÷pÈ”ƒ¹ó¶¿íòxûÄåÌxäQÆÃ}÷ü£ü|<öø<ðàÃ,Z´˜›6’Ë婬¬`ì˜1\tÁùœÞ9»Üç—¿v%wÜyßþ¯+ùèG.¡­­_þúyèá¬ß°‘0 yzþ\jjªËÛ¬Z½šßþîÌž=‡-[·’H$=j$ï¹è¦Ÿ.ŽãèfÙjÊÛÂwÞÀqÇMSS#Ùl–ßÿáO¤R)ºººпy»¦Æ†òã0 y÷Ùç±víºòs–eáû>›6mæÞM÷sï}÷sÍÈÅNïuü®tš^òQž]²´üœišAÀºõX·~÷?ø×]ûÎ?ï^zùe.zšúú:¶nm ®¶–X,VÞ¾¶¦æu]û²çŸçÎÜ ”æÒ, D" õÿ¹¶ªªª^ÛüëÞó•¯_E>Ÿïõüš5kY³f-÷Ü{L?~ï;½Îé•¶nmaãÆM\ñÙ/P(ËÏ8€£Ž<Û¶ñ<9sŸÜe¨ùÀC—?½ø¶µ¶R_W×kÏóxjÞ|¦wl¯e_¿ò¿¸íŽôzÎ4MÚÛ;˜3÷IæÌ}’ÙsžäÚk~ôª×°jõj>xÉÇØ°qcùùD"Ñ+мçÞûøÒW¾ëºåçŠÅæÍ_À¼ù ¸ïþ>|˜nF‘}@¡¦ðZÛÚ˜ùè, Tݸ]UU³gÍà†ßý‘ýä§<öÈØöÎ]ß0 Î>óÝ,~f N?£:’¦¦Fòù5Ÿoÿ÷÷Y»vßÿÁÕœqúi¤RÉò¶¿øŸ_óì’¥D#¾yå×8ãŒÓ©«­¥èº¬\ù>ö8óæÏç¬3ß ÀÑGÉìY3Xþâ N;£TIxÍÈÉ'ð†¯ÿÄã§•¯óÒŠ™>ÆÄ ¸ãï7ïrý'fÏá³_ø2a2zÔ(¾ô…Ï0õ)Dc1Ö¬YË­¿¿Ü| wÜyaòóŸþx·Ç~böþü׿ÅøÔ'/ãÈ#'à8Éd‚C¦̼ù ˜3÷)>ÿÙ+vÚþÁ‡Jç][[C[[;3y”÷\tA¯už}v)™L7Ó¦õ5Ï:ó žyv)]x>'žp<Ç %^\±’^} ³çÌåö;ÿÁÅMçðÃÝå5¬^³–âÓlÚ¼™÷\t§Ÿv*µµµd2™ò:K—.ã‹_þ:žçÑÔÔÈ·®úÓ¦KÄqXÝÓf7Þôgž˜=W7¤ˆˆˆˆˆˆˆˆˆˆÈ> PSxwÿó_xžGE*Åi§žò¦öõÕ/q§çb±'×\ýCÞûKHg2Ì_¸ŸV^gûð¶ç{6—|èå磑ãÇeü¸±\qù'Þò¶ ‚€«¾õ]Â0dØÐ¡ÜqÛÍT¤Råå'Œgâ„ñôëןþì:îüÇÝœ}Ö½®uG¿ÿãŸп?·üõ& ¸ÓòiÇüù xzñbòù|¯ªÏ+V²jõj¢Ñ(ï½ø"~ý¿7ððŒGv 5Ÿ˜3€x<Ρ‡ôú÷øiÇrü+‚NÓ47v 7üæ—vÔqd³Yf<òènCÍûxÛ¶¹ñ÷¿Ýi_ÛýäÚëðf>6‹0 û\{Í›?¿üø¤ßíz¶msò‰'0ó±Y»]oÄða}ä»]>qÂxª«KóRΙûT¯e<øPRöЩS‰Çãäóù^C¸ær9=½€v:¾šd2Qz½ ùW]ïƒïïn—í8Oêö6Ù•ÊŠ &Œ§›RDDDDDDDDDDdÐð³r@Û^¥9tÈÙ¡’rOµ¶µqûÿà‰ÙsyùåU´µ·“Ëå^s» §ŸÇ–-[¹îúÿáÙ%K¹ôcŸdÐÀ\|Ñ\8ýürÕãžØÖÚÚk~Ç èßÿ U®ß°€ÆÆ†ÝVin7|ø0 …åprGcz*!wÇ4MŽ9úHî½ï~æÌ}²üü¦M›Y²t'?HÄá¨#à‘™òÐŒGÊs‹Î›¿×uçÓ„Rè?ÿu/3™É‹/®`ËÖ­d³9‚ xÝmRW[KccÃn—oÞ´y§6ÙÁƒòôâgtcŠˆˆˆˆˆˆˆˆˆˆìe 5å€åywÝ}P ߬ûþý_ùúUd³Y À”ƒ'“J%1M (Í¿¸;W\þ Î<ã4~÷û¹ëŸ÷°ný~vÝ/¸îú_rÎÙgrÕ׿úªáÙî\ý“k¹ãλv¹ìÑ÷3tÈ×½¯\¶ÐÆãñ×\7™H”·µï:Ô¬ª¬|ÍýL;îXî½ï~ž]²”t&CE*Ń=CÏ41à”“Oä‘™2ã‘G ÃÃ0˜=wny½W^çŠ+ùØ'?]N·¶¶†±cÆPYYãDxjÞ<ÚÛ;^õüªª^ý²;„Ú;¶É®$’Iݘ"""""""""""û€BM9`=6ë ¶µ¶bÓ§Ÿû¦öõâŠ|þK_Åu]&OšÈµ?ù£FÜi½¡#Ǿê~†Â¿ÿ]®úÆ×ø×½÷ñýË–=Ç]wßÃ¬ÇŸàŽ¿ß̰¡Cß²6«©­ Û}Íu3ÝÝåÇ©=ë¦[šW3,Xȉ'σ—BÍÓO;µ¼Þ)'ÈU|‡––ž]²”É“&–‡¬=þ¸ÞUš…B^ö)Ö­ß@mm ?ÿéO8~Ú±†Ñk½÷¼ÿžš7ÿMµYb‡ø•ó}¾’[tucŠˆˆˆˆˆˆˆˆˆˆìšSSX·õ ={Ô‘Gп_¿7µ¯[n½×u1M“ÿýÕ/vhn¯à|=’Éï¹øBî½û®ÿùO‰DÚÚÚ¹æÚëÞð¹ýìš«Y½òù]~½‘*M€ýKíÔ²m¯ºîÊ—^JUµµµ{ܶýú53rÄpž|j>ÝÝYæÍ_ÀéïúO¨ÙØØÀ¤‰˜ùè,Ò™ Ï=÷ïž]²”ªªª]nÿ¡|œ+ÿë;<2óQZÛÚÊÏoÝÚ¯~swÝ}§½«w[]]]šõüÌ|”bÑ%ɰjõê}Òv?ûéÕD#Ö­ßÀïù÷?ømmíär9^Xþ"ßþïpíu×—Î÷ÔSxש'¿écyÄá8ŽC¡Xäö;ïØe=vÌA 0ß÷ËmöÊ¡g·ïo{ úíï~ŸE‹ãû>™L7 =ÍÇ>q9ÿ{ÃïinnÚ+möÕ/Ó4éîÎòÞ÷_Â}ÿ~€ŽŽr¹/®XÁ5×^Ç÷~pu¯°UDDDDDDDDDDDö[M š•+_âÙ%K¸p/ = pþ¹gsûÿ`Þü<öÑeÿ—ì—–––$I¡Ì3'ÇstÎ8ýëù¯|/µµµOÛöØcŽÎÙ?ú~^vøainjJuuufÏž•ƒšÿ¢µáᇚË.¾ Ÿúä_å%ûí›)S¦¤¦fì¸Ç½þØü×¾—3¿õõ¤ìžÚãò5¯~Uªª6ü›Šc^ódÏЩSÛ²ï¾ûl°Ü§>ùW9ãô¯çðÃMSSc*++3sæŒ{ÌÑùÙ9?ÎG>ôg¼^ÏÅ)'¿9_pnÞrÒ›2wΜTWW§­mJû‹Có¯}9_ÿÏ/gï=÷ô€A¡T*•4›â²%cGï¤-ÚìÿÊ IDAT¶e›;7ÒS(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kUš€mÙHq4=½Iqt4##ÅŒG3:ZLRHeeE*+*RUU™ÊŠŠTWU¦©±>Õ•~°¹5Ùæô §·o =}ƒ)ŽLP²”‘b1#Åb‡‡Ç—¶wv§ºª*M µi¬¯K]MµFx 5Ùfô fͺî <dVUV¦¦º*5ÕÕ©©ªLuõ†ßÃÃ#.f¸8’Á¡á Œd]×HÖuõ¦¦º:3ÚšS_[£‘^BM¶zCÃŬîèLÿÀÐø²Æúú45Ô¥j‡‘­®®z<ð¬M’Œ‹ééHïÀ@††‡óتµi¬¯Íô)-©®ªÔè/ ¡&[µUëºÓÕÓ›$©H! uij¬KEáù͉YUY™)-inªKOß@zûÓÛ?˜ÞþÕ™ÚÚ”©-Mà"Ôd«4úÁ¿LCýÄCÞVWU¦¹¡>Ý}ýYµ¶+ÛÏžæl¢B©T*i6ÅeKÆÞ©<êÓÙÝŸÕ©®ªÌÌ©S6Z~ÙŠ•ùÚ·¿ŸööuãËvÜa»¼ýä7f·]7í¤ßÿ§üÏÏÏÍ£ËVŒ/›5cFþæ Ó¦µM¸íøÜŸ¥RæÎ˜š†º70)mîܨB“3Yut÷$Iš6ÒK2IÖ­ëÈW¾ùÝñ@³²²"ïxë›ò™O}b“Í$Ùk÷Ýòùø›¼õ¤R(’$+W¯ÎW¾ùÝôööMüf+ÆëÚÑÝël"¡&“R_ÿ`†‹ÅTVT¦¡¾v²ýýùÚ·¿ŸŽŽÇ‡ªmmÉ?|òãyÕ+Ž&ŸB¡cŽZO}âÃijlH2l~ýŒ³2<<<á¶M cuíÌÈȨ ° „šLJ½ýI’ÆšIòËó/.¶ªª2ÿÐ{²ÓÛ=ï:ì±û.ùÈûß5Œ>ðÐÒ\xéU¿á**R_;V玽56…P“I§T*¥· ÉÆCÍÕkÚs͵7Œ¿>ímoyAÍ'ì¹û.yË}É¿K÷FÂÊ'êÜ÷ø901¡&“NßÀP’¤¦º:ß¿þÍE)džyÝm×rÄa/}ÁësÌ«dά™I’ÁÁ¡üö’+&,_S]•B¡¡‘ÑŒ A °1BM&þÁ±P³¶ºjârý¹åö?Œ¿~ËŽQêS(ò¦Ž}ÃM·¦T*MX¾ºª2Ii< à™ 5™t‡†“$Õ 5ïºgqŠÅb’dûys²Û®;½hu:hþKÒÜÔ˜$éîéÍýzhÂòu55I’¡áa`#ª4“ÍððXPYµ‘¡gïºûžñç°ßÓÖß~çÝùåy&…BNyóñÙß½'ÜßDå …BÜ¿\sÝcǾçÞì±û.ϸ¯ŠÊ±º=~.<3=5™tFFÇ‚ÀõÔ\±jÍøó}÷ÚóiëÏþé/³|åª,_±2çüìÜwcå÷Ù{÷ñç-[1á¾j*+ÇÎ¥8â‚l„P“Iåɹ* -ÛÝÓ3þ|j[ëÓÖWV=ŠŽN0榖Ÿ5cæøóµëÖM¸¯BÅXý‹ÅQ`#„šL*…Ba½Ç‰tw?j677=mýÛO~CfÍœ‘íçÍÉ;N}ÓF÷·±òÓ¦µ?o_×1ñïñ¡s7%LØÖ™S“I§P(¤TM©Tš0Ü|êºâèhªÿlýì·Á¹6ŸÉÆÊWuZ²luFŠÅLijJcCíFËwu÷äëgœ•%KYoùÛÏÍû훽÷Ü=S¦4gj[[FFŠéìêÌÚu¹gÑ}ùÃ=÷æ±å+×ÛnÏÝwÉÇ>øî4Ôo|(ÙîÞþtõö¥¦ª2;Ì™á†&­Í 5)Û›sSô eÙªµ©H!³¦OIEÅÆ;Œó›‹/ËÅ—]•‘‘âs:nmmMŽí«sìѯڤc³jmG’dûÙÓR[]í†&­Í™ÔI­¡¶&Í éîíËšŽ®Ìœ:eã7}UeÞtü±yå‡ç—çÿ67ÝzgŠÅM 7kkjrØ¡åM'¼n£ÃÍ>att4k;»“$m-MM€gIOM6Y9öÔL’R©”‡—·g¸8’†úº´57>«í‡rçÝ‹rÓ­wfÍš5ééëKOwoR(¤©©1ÍM ™3kf=x~öÛgïTUU>«ý¯éèÊàÐpjkª³ý¬in$`ÒÓSž¥B¡93¦ä‘íéëHUEEšë7yûÚÚšzðüzðü¼nëºz384œŠBEæNŸêb<š€­AMuUfÏz¶«·/ݽ}[´>¥R)ëºzÒ70B¡y³¦¦²²àB<BM¶uµ™ÑÖ’$éêíϺîÞ-RÑR)k:ºÓ70˜$™=mJj«uŠx®$-lUZ›RUU™•k:Ó×?‘á‘LҜʊ͓ß³¶³;#Åb*+*2gF[êjª]€çAOM¶:uµÙ~δÔTUehd$«Ú;ÓÕÛŸÑÑÑí˜ÅÑb:»{³º½##Åbêkj²ÃœM€€žšl•ª++³ÃœéY½®;=½éîíKo_šêÓØP—ŠÂ 3¿eqt4=½ýééH’ ÉôÖ–Liip^ BM¶j3ÚšÓÚTŸÕëºÒ?8”®Þ¾t÷ö§±¾6 õ©ª|n•‡FŠéíëŸ73Išë3­µù9ï€ j²Õ«©®Ê¼™SÓÛ?˜öŽî Œ¤§ =ý©ª¬JMMUª«*SQQHe¡"••©¨¨HJ¥GKÍèh)#££)fph(ŧ e[WS“ém͆šx‘5Ùf4Öצ±¾6ýƒCééLoÿ@FŠ#éyÖûª©®Nc}MšêS[ímðb’ưͩ¯­I}mMf´5g¸XLOï@†‹ÅŒŒS,ަ8:šb±˜¤ŠÊŠT=þ_eeejªªÒÔX—ª CÌl.BM¶iÕ••ikiÔeLw3 ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&ÔÊšP(kBM ¬ 5€²&Ôd“UÆGFµÀ¶j¤4öøDv´95Ùd5•cCEm°­{¬«Ú|Çj²Éê¿1»†´À¶ªûñ¬¨¶róS¨É&›V?ö¸¦O[l«V?žM¯ß|Çj²Éf6Ž=®ìK A °ÍéËŠ’dVãæ;®P“MÖP5vsŽ–’Ek´À¶æžÇ3¢9MæÔ¤ŒíÞ6öØÞŸüiöØV,nO:“ŠÂ“™Ñæ"ÔäY©¯JöŸ1öü¡Îäm°5+•’ûÖ&t½ÞfR[¹yëP(•J%—‚gëÁŽ'Í É^S7oc^|½Ãɽíɺ±×{MM¶oÙüõjòœ-ëyrÜä$™Ý˜L«Ošk’†ê¤² &“‘Ѥo8éJÖö'+ûÆ–WÆFóœÑ°eê%Ôäyéëµ¹¼'q#l]* ɼ¦d§Ö-;j§P“ÄP1YÝ7–Ö÷'ƒÅ¤èΘT* ImUÒX•Ìjë™YU±åë%ÔdÒxè±Uë½ÞyÞL° ¨Ð@9jeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@YjeM¨ ”5¡&PÖ„š@Y«*‡Jtw÷¤§·7ýýýÛôŨ««KsSSš››Ü™ð¸-j eõêÕv%’ d`` ]™1cFjkj4 Û¼B©T*m‰¯[בu㯻»»sõï®Ê%—\’x Ë–-KOOÏVÝøMMM™;wnvÝu×{ì±yÅ‚W¦¹¹y|}Û”)ik›2)Î¥8:šÎî¾töôeph8##ÅŒn™[ €ç¨¢PHUUejkªÓÚÔÖæ†TVlù-7{¨9<<œU«Wgpp(IÒÞÞž3Ïøv~ò“ŸdxxÛî±Y]]w¾óùà‡>œiÓ¦%Ijkk2sÆŒTWW—e‡GŠYÙÞ‘u=al] …djksfNmMuUå–«Çæ5W®ZÞÞÞ$Éõ×_Ÿ¼ÿ}Ûü\𮾾>gœyfŽ<òåI’ææ¦Ì˜>½ìêÙÑÕ›‡W¬=¥¹1-M ©«©N cËtÖ˜ ç;…RÒ?4”Ξ¾tv÷=¾®çÌHKSý–©Ûæ 5;»ºÒÞ¾6Iò“³œÏþóîŽ |á _ÈÿzÇ;“$Ó§OKËS†¦ÝÒV¯íÊò5ë’$ÍõÙnö´”JI±8êÂl*+dž}tÅšôô $IæÍš–i­M›½.›-ÔΣ=–$ùýÂ…y÷»ß•’n|_œB!guV^±à•) ™7wnjj¶ü0´=}Yºlu’dÖ´ÖLokÍÐðˆ °ª©®Êªöެ^ו$Ùy»Yin¨Û¬uØl³zvvu&Izè¡|èChn‚R©”|ä#yàOJ©ToÃ-ihxä)æ”L›Ò"ÐØŠ dÆÔÖLokI’,]¶*#›yôÎÍjŽŽŽ¦§glÍïœyF\ýM400³Ïþq’¤§§w‹‡ÁËW?9äìô¶– ]$€­ÜðH1³¦µ¦¡®6££¥¬lïØ¬Çß,¡foo_J¥RV®\™_üâ®ú³ô“Ÿü$Ë—=–R©4o ƒCÃéìéKE¡ígMÓC`24\̳§'IÚ;ºSÜŒ½5«6ÇAÇzf^~Ù¥[´¡«ªª²ë®»fÏ=÷ÌÎ;ïœ9sædúôéinnNEÅX¾[*•ÒÑÑ‘ööö,[¶,K–,ÉâÅ‹óÀdttt‹Õý÷¿ÿ}ÞrÊ[308ææ¦-R‡Îî¾$I[KSF °í)ÒÒÔ®ž¾tõö¥­eóäV›%ÔL’üîw¿ÛíZÈk_ûÚ¼ãïȱÇ›©S§>§ý¬[·.¿ùÍoòßÿýß¹òÊ+S,nÞaW¯¼òÊ¼å”·Ž·å–ÐÕÛŸ$imnHq ¼lÅÑÑLij|<ÔìߺBÍ'ºž>öØc›å¤jkkóš×¼&'tRŽ;î¸Ì˜1ãyï³­­-§vZN;í´,[¶,]tQ~ñ‹_ä²Ë.Û,=8—.]º^[n Ã#cÃÍÖTW 5¶QuuÕI’Á¡Í7Uáf™Só‰ÐoÅŠ/ú±N8á„Üu×]ùÍo~“w½ë]/H ùçæÎ›÷¾÷½¹è¢‹rß}÷åØc}ÑÏ뉶ےCàŽ<¨Ž–šÛº¡á­,Ô,•Æ&`ìêêzqN¢¢"Ç|.\˜óÎ;/»ï¾ûfkÀ]wÝ5\pA®ºêª¼öµ¯}ÑŽóDÛ=Ñ–[–<6åesvÆ«˜ìUWW—Ÿþô§9ÿüósÄGl‘:TTTdÁ‚ùío›sÎ9'---[õ *ÛØvm‰¬hR‡š'žxb/^œ“O>¹,êSQQ‘SO=57ÜpËÚk¶%“2Ô, ùÌg>“_ýêWÙa‡Ê®~{íµW.ºè¢|ò“Ÿt‡Àó4éBÍÚÚÚ|ÿûßÏç?ÿù …$cs=>u¾Ç§¾~¦ç›£Ü¿þë¿æŒ3ÎHSS“; ž£ªÉTÙººº\tÑEY°`Ázaâ‹­P(lÒñþ¼\EEE>øÁfêÔ©yë[ßên€ç`Ò„šÕÕÕ9ûì³³`Á‚$ï¥ùçÏ'Z÷\Ë=uÙs)÷–·¼%¥R)ï}ï{ÓÛÛë®&…‘âhúúÒ;0˜ÁŒGËó²ÊŠÔÕÕ¦±®6õu©¬¬pñ¶2“"Ô, 9ûì³óæ7¿ùË”J¥ †ŒÏµÜ í”SNɪU«òñÜ]”­‘âhÖuv¥·0Ã#ÅISçžÞþôôö'Iª«*ÓØP—¶–æT 8¶ “"ÔüÔ§>•SN9eÂ2›Tn‰@ó þð‡³xñâ|ûÛßvçee´TÊÚŽî¬ëê_VQ¨HKS}šêSYY‘ŠŠŠTV¶èçèS•J¥GK-ަ8:šž¾¾tödx¤˜Ž®ÞttõfÚ”–Lm5¯1ÀdWö¡æA”/|á –éèèÈÂ… 3kÖ¬xà©®®Þ¬uìïïÏí·ßžŽŽŽsÌ1©ªÚp³VVVæ›ßüfþð‡?dáÂ…î> ,ôö feûºGdž—m¨«É”ææ46Ô–u½ …Bª* Éã½1ëëj2cjÒÝ7ήžô¥½£+Ý=™=}jêëj\l€Iª¬Çå›;wnÎ;ï¼ÔÔLüEôYg•7¼á 9ì°ÃÒÖÖ–ãŽ;.?øÁÒÑÑñ¢Õ­»»;ßýîwsì±ÇfæÌ™9òÈ#süñÇçœsΙp»B¡¯}ík©««s÷[Ôh©”å«×fÙêöGGÓX_›æÌȼYÓË>МHsC]¶›==ÛÏ™ž†ºšŒGóèÊ5YÙÞá¢LRej~úӟμyó6Zîšk®Þ××—‹.º(ï{ßû²Ï>ûäg?ûYFï}ôBùñœí¶Û.úЇr饗¦··w|ÝÙgŸ½Ñí<ðÀüÛ¿ý›»ØbFGGóÈŠ5ééH’̞і¹3§¥¶¦z«9ǺššÌ›5=³§OI’tõôåÑí-•Ü“L¡Tzñ¿Ý}ð¡%I’ÝvÝe“·ÙÿýŸÀ· IDATsíµ×¦±±q£ewÞyç,]ºô×uÔQùçþç444äöÛoϽ÷Þ›x Ë–-Ëš5kÒÕÕ•¡¡¡$IMMMZZZ2cƌ̛7/»ì²KöÙgŸÌŸ??íííùÜç>7áбµµµéèèHmíĽœŠÅbŽ<òÈÜxã›Ü&zàÁ$É.;ï´En–»þ¸4I)»ï8Ï;&±ÑÑR]¹&ƒCé¨(dÞÌi©«Ýº‡fí̲Õk3:ZJ}]mæÍœZ6sƒLF÷/]–$Ù7ËñÊ2Ô, ¹í¶ÛrÀl´l±XL]]]ŠÅbÙ\Ä%K–d‡vØh¹_ýêW9ùä“7y¿[>Ô\’¤Ýwœë “ØòUkÓÓ?ŠBEv˜;#ÕU•ÛÄyäáå«3Z*eJscfLmu3Ûm·Ý6ÓFCÃ#ééëO’̘6¹ç’¼æÚsùU óªWñœBÍ$™ÑÖ’e«ÖfmgwZ›SQQðFÚF]{Ã-É+úþweÝwÙà>îÿÓCùú™g¥ÿñáΟh—G[žG[žën¸%ý¿ßŸ™3¦¿ ÇïèìÊOq^n¾íÎ§í·¿8˜G—­È£ËVäškoÈ{N;5‡<ß&‘² 5›ššòÎw¾ó×?Óp®Ï&D|±Íš5+###©ªÚô¦}Ýë^—Ï|æ3eucl f2ÖÓ÷³ŸùÇ ËÜrËmY³zµO‹2vÉ%—mR¹Ùsfçôo|m›l£ŽîÞ$Isc}êjª'õ¹Ü~ç=Ï{õu©¯«IÿÀPº{ûÒ:‰{®òÜŒsÎÏY³f5·€k®»)IR]]áááüþº›rÊ›O˜ôçÕÓÝ“«®¹6CCÃÙ~Þœ¼âˆÃ²Çµ¥9ƒY²äÑœwá¥Y¾be.»òšl7oNŽ<ì îkÉÃæÛßûqÚ×®MKsSºº{^Ôº?üè²|ç‡?I©TÊ´imyõ+ŽÈÞ{í‘Ö–ætvuçö;ïÎÅ—_•žÞ¾œþÝæ_>÷÷inZÿ󳳫;ßúÞÒß?Ö–æœü†ã²ç”RÝw~qîo³º½=§ç‡ùÌßÿUªŸò7óó=þÒG4÷ßoŸöÒ³ÓNÛ¥±¡1]]¹çÞûrÁÅW¤··/ßÿ¯ÿÉöÛÍÍœY3½`’(«PóðÃOkë³ëAôýï?çž{nÙœÃ\þð‡yÿûß¿ÉÛÌŸ??Ûm·]}ôѲ8‡m%ÐÜT>Çy6«*+Ëê<*ˬ>/”U«Vçæ[nñi>ÑR)]=}I’)Ïs¨Õ-Ý£ñ¡%§}íÚd_m-MéX›Î¡æ¶jñýÊÀࠆغ{zsÇ]c?P8ú¨WäÂK®Èu7Þ’“ÞðúIÿïU[Û”¼÷/ß–þþÁvÈë­knjÌŒiӲמ»åóÿúÕtttæò+¯Ù`¨yÍu7期ý:Ã##Ùq‡írʛϗ¾væ‹Z÷¶››“ßðúôõäÄדªª'¯EkKsvØnnæÎž•3pvzûú³ðºóúcŽZo]vUº{zSUU™¿ùø3oÎìñu¯xÙ_d‡íæå_¾ô<¶|e^{cŽZpÄ vüöÛ'§žtbvÛe§ì¼ÓëÕ«©±!óæÌÎÎ;îÿÏo§X,æw ¯ÏÛN~ƒ7$Lejyä‘Ϫü¢E‹òñ¼ìõ‹_übN:é¤L:u“ÊWTTäÔSOÍ—¿üå-^÷ÉhÞrË­ùÑÏηߑîžî̘>3/ùùÀûß›9sæä=ïý@®¿á†$ÉwÎüv^ñò'ï³[o½-ï8í]㯿ý­oæU¯\$Y¶lY¾ô•¯æâ‹/_î¹ççÜsÏÝÜÔ”›n¼nƒõj¨›ŸóúnÈÙ?9'wÝyW:»º2¥­-ΟŸÓÞñö¼ô¥opÛ×wbZ²$IrÔQ¯Ê·¾ùõ –;é”S³èžEI’Ãþâ/òÃ|ïÛ©¶¶6Åb1?ûÙÏóË_Ÿ›‡~8¥R)»í¶[Þü¦7æä“ÞœŠŠŠçu-î¹gQ.½ìòÜvûíyðÁÓÕÕªªªÌ™=;/}éÁyûÛß–½öÜcÂ}¬^½:çÿæ‚\~Å•yô±eY·vmêë³ãN;æÐCɉ'œ=÷Ø=¥R)çž÷›|õk_O©Tßþèc^·Þþþþïþ6yÚXð3ÎüN¾ñÍo=yïÜtC6X«¯¹&çÿ›ÜqÇ]YÛÞžºúúÌ›;' ,ÈÉ'½)sçnx.³§ÞSo=å-ùüç>“Õ«Wç‡?úq®¹fa[¶,…B!;î°}^ýêWç/ÿòi~†ÞæÝ==ùùÏÿ_®úÝÕyàÇæ«®Î¬™³²ï¾{çåG™cŽyM&lÓþþÁ”J¥TUV>ï^š5ÕcÛß}ï}¹üÊ…yøÑÇÒÛ×—Ö–Öì·Ïž9þµGeêÔ¶ ÷ÑÝÓ›+¯¾6wÝsoV¯^“¡¡á´µMÉŽ;ÌË‚#ßàsÝ=½¹ð’+sÕ5׎/»êšk×{=eJk¾ò/›Þ뽡®6…B‡†32R\ïËs¶~£££¹áæÛ4ÄrÝ 7§X,¦µ¥9¯}õ‚\üxvÇ]÷äà÷ŸôçwÀ~ûL¸¾¹©1ó_²O~·ðú<ºlEFGG×û7¸§·/¿:ï ŒäƒÈ{Þqj–­ØöØcùìg?›ÓO?}“·9ñÄ·x¨9Íþè¿ò_úÊúí¿ì±üôg?Ï¿ým¾{æYúðÃÏiß§¼õíÏ«GXSss¾÷ý³òÕÿ\?\³zu.»ì²\vÙeù»O}2ïúËÓ6K[ÕÖÖäÃùXþþÚõ–ßyç]¹óλråWåëßøÏÔÖÔ<§ýý›§çÌ3¿û´å###yhÉ’<´dI~õësó™ÏücÞú–“7¸Ë.»,ÿôÙ/¤««k½åÝ==¹ûî{r÷Ý÷déÒ‡sú7¾–Ÿþìçùâÿù—¼º{zò·Ÿü»\½pázˇ†ÒÙÙ™E÷.Î~ø£|ásŸÍÞ0ñ0‰wÞygî¾gQÞûÞ÷§«»{½u‹ïûcß÷Çüæ‚ßæ'gÿ(3¦¯?¯ØïÿSÞ÷fõªõ‡>.‹YúðÒ,}xi.¼èâ\zùåùöéߘ°}ƒCIƆž}Þ÷QMmοð²œ÷ÛKÖ[Þ¾vm®þýõ¹áæ[óñ¿'{í¾Û·¿{Ñâ|çÿ¾þþõ–¯Z½&«V¯ÉÍ·Þ™—ýÅÁ9ím'§ºúÉöÊ«¯Í¥W^ý‚^ëB¡Æ†ºt÷ö§o`(-M›Þ>ƒCC¹þ¦ÛrËmwfùÊUéîîISScÚ¦´f×vÌQ¯|YfÏ\HÃR©”Ûï¼;×Ýt[Zúpº»{ÒP_—éÓ§æàùûçÈÃ}Ú0ŽOøý 7ç‡gÿ,ûï·O>ñá÷dÕê5¹èÒ«rÏ}LggW²ývóòª—–ùûï7~¯\uÍu¹éÖ;²|Ū ¥mÊ”ì·Ï^9ÒÖöô‘Ö´¯Íß}öÿ¦®¶6ßú꿤`0—^ñ»Üzû]Yµfmjª«2cÆôöÒóêW9ÂÜ~çݹ溛²ôáGÒÓÛ›¦¦¦ì¶óNyÝѯ|Zo©?·dé#¹âêßçÎÚŽŽ4Ô×eö¬yÙ_’Ã=8••­çððp®¸úÚÜrû]Y±rU†††3eJKöØuç}Ô‚ì¸ý¼õ¶¿î†[rÞ…—fMûØgüÒ‡Í{?úÉõÊüûÿ!Ó§­ÿ㤵k×媅×ç®»eMûºTVVdÚÔ¶<ÿ,xùáÏxý’±uáõ7åú›nͲe+244œÖÖ–¼dß½rìk^ù‚ôîÎ5×ÞÛî¼;Ë–¯H_ÿ@ZZš3wÖÌ~èÁ9äàùÏÞŸuöOsÝ ·ä”7Ÿ×¾æ•yhÉùâšk³ø¤««;55Õ™3{f9è€õŠ#Ÿ÷^s’dþþû¥©±!ûîµGþ°hq®¹î¦ CÍ?,Zœ¯}ëûI’Ï|êÙiÇí7Xn`p0ýë±áåß~ÊóêþáÜ¢ûîÏ¿»6-YšžÞ¾455fÏÝvÉk^õòìºó޹äòßå翾 Ž<,§½íäô3艴<õ‡9ãC46äïyG|hiŽ?ö5c÷Pq´lþþš:µ-Ý=½O›3tåêÕéîî|þû=ãöÏß?7Ü|{–¯X™U«×lpnÍçrüMþ­iìÇ@%ÿ/“JY…šûí·ß&—íëëË/~ñ‹²mسÎ:+ÿôOÿ”Ù³goRùC9$õõõéÿ³/ú7—ÉhÞpãO 4Ÿª§§7üÐGÒÓÛûœö¿Ï>{§§·7wß}O†‡Ç¾4›6ujvØñÉ/蛟ù ì»ݓ˯¸büueeeŠÅâzeþãK_ÉË_~dvÝe—½½~ü“sÆç­¨¨H©TZï‹Ô«.Ì—¾ü•üÓ?|ú9íÿG¹^¨¹ÓŽ;eJ[kV­ZeË–% Y¾øÅÎK:0»îºëÓ®ç'þê“ür÷©ÞpÂqI’¶)SràóÓÞ¾6?%¸Þwß}Ró”`vÖÌMŸ+ktt4ûØ'rÓÍ7¯·üϯÝàà`þþþ1•UU9þ¸×=ãþþxÿŸòÁ}x<Ь¨¨Èèèú_J?üðÃù×û÷|õË_Zoù§?ýëš³çÌÎìÙ³ÒÛÝ›zh¼>'½é=¯ÁÇC͆úºç}=´ôáÜuϽi¨¯Ï/Ù;mmméîêÎmwÝÞÞ¾ åôïü(ÿçÿöi¡Ùƒ=œoœùƒÿb¾µµ%{ï±kjkë²jÕê,¾ÿ”J¥\wã­ÎGÞ÷dàÐü—dæôi¹ïþ²ðú±yøöÝk~蓽kkŸ} ßPW›îÞþ %Ù´Pó‘Ç–çÌV­·¼³³+]Y²ô‘<ÿ%ë…š½}ýùÎYgçžÅ\o›îžÞ±ÞFKÉeW^“¼ç=c œ$ËW¬Ì½üS¾yÆ284ôä±»ºÓ¹hqî^´8o>ñuYpäáùò×ÏÈ#-_oûÕkÚsÕ5׿ÖÛïÌ?ýíÇ3mÚÿÏÞ}‡5y®ÿ&@Ø{ˆ‚¨Èp/ܳZ÷ªZ»\vÙ¡­]¿ÎÓs:ާÃ.k­V­ZµîQµV¸p â`ƒ²CHBÈúýD6ý~®ËËŒw<ïóŽ„Üï}?ÕW(Q©’šŽV­CN^žñuµZ yj:RRÓ{õ/š_~Ûˆ“§£«ôEôÅ\ˆ‰Å O?‰®a!UÖ¡×ë±sï_ع·bL\@`Ø–"®Ç'áø©3x~áS5 KT*¤¤ÝÄÏ¿n@æmÓý‘—W€¨¼œ>wÏ̃^=ºß;w1zè![¢´T ‘H''ÓóþŽÌõ‹1±øé× ÆóI @¯×C®P"íæ-üs" /<=þíÚVý΢Tâ›WãF|’Éë¹yù8yQ§£±pîœ&›é™øæ‡ÕUnÆ)((DAA!®\»ƒÿÃó ž„««s-ÇX6þ‰MÛv™\•J-’’Ó”œ†sçcðúKÏBÜÈÌïøÄdd–eF”ÃýûöÂå¸k¸rõ:òó êÌø¾¶l߃}T9vÏD_ę苘>y²sòšmý7>ÞžÕVJèÒ)]:Uœ3f‚+”n>rv4=oRR+2Û×p€€J7;¤¦e48¨YÓúë£D¥BZzFYß{ó¯A""""""¢VÄl‚šÎÎÎðõõ­÷ôûöíCnn®Ùv¬J¥Â‘#G0{öìzMoee…ÀÀ@ÄÆÆ¶x[[뚟¹ÜäùãÍÁ‚ùóàêê‚”ÔT|÷ÝØ»o£—ÿÓ߆ ‰ì²Ë ˆO?ù¸^ógefA(âõW_Á”)“àè舤¤$¼÷þ‡8þ€²õwîÆ+‹›¿ŒrnN:tćïÿºv ‡F£Åá½÷?0føèc>úècôíÛ»J–e9N‡üü„……â·–!44 …{öîÅ'ÿú·1Xþ×_‡ P(Œed333wõšq9 ÌÇ«¯¼l|.—+pðà!?qÆ ­s»J5wgÞPk5Æ ¦‡‡;ú÷íÙ´Á²l³R¶^ÓÉŠ±|ÅJH¥E‹-1zøt í{{[HqóV&’ÓÒÑ1(Àä8øî§5¸Ÿ@€‡F A¿>=áæâŒ’®'$aûîýÈÉÍÃÿV¬Â»o¼\mÉFÀû~åxyy`Ê„1ðoç ­V‹ Iظe¤E2ìØsÑ/##ó6&Œ…Þ=»ÂÙÉ…RþçŽB‘¬[wîÅÓs«q[—¯X ‘H„¹ÍDHç XŠÅȸ•…Íî25ã®áÓ/¿Ebr*zõÇèáCàåé…R‹1qغc/Ôj5~Ûô'ÂB‚«múÇÐ9lF 7W(”Jœ»ƒßÿØŽø„dü²v#^^4¿ÆvþoÅJ”ªÕ˜6q,ºw …“£#¤²"\ЉÃö=PZªÆÚß· 4¤3¬­¬/=;ðÝʵˆ¾ƒ¶>ÞxïÅ5®#19ßþ´z½!;bêıhçëNkñ X¿éOdçäâ›Wã÷^«RÖzõºÍÆ€æÀþ½ñÐÈ¡ðpsƒB©ÄøDlÛµ?ü¼¶ÑÇq¡´Ë¿ý Ò"ìlm0qÜh„‡ÃÎÆE2.\ŠÅ®}‡švËW¬Ä»o.®1+ÿ|L,ŽEA§ @<§ì»¹¥…jþ.éèè 4m•š²þºèõz¬ßü'TªRˆDB ÜŸ µ"BsiHx¸¡ÔXyöXyp£òÿ•_ß»w¯Ùwî… LÚ^îÎí+ìçç×âml­ÍĤ$ãX’0tè¼µì xx¸C$!0 _|þŸǬl) æÏÃܹOÂÉÉ øâ³âR '..®EÚ"ðÍ×Ëѽ{7…BˆÅ–˜0aÞ|c‰É±¹gï¾F¯ã·–aÆôi&M˜2y¢ÉXšWã®™¼àÀAcàæÎ}K^{íÚµƒ­­ ‚:tÀô©SðõWÿmtyÜúX·nƒñ±›«+~øn‚;w‚@ €•XŒ‡O?­(y[$“a÷î=µ.ÓÖÖ?|·ááa …°³³ÅÌGf`j¥ K­V‹7âÏ•w”ÕöiëSe™“'OÄŸÿ§^ã –-„wç’?mòx“€&8ØÛaÎ#SÏÏF_0®®ÞHÀ­,Ã>vttÀ“³§›4ÀßÏLh|~$òd³Ÿe¥MÕeߺlݾRi^Y´S&ŒA@ûvpwsEÇ  2óŸ "€uæ<®Å'›93¦Œ‡¯7$k8;;¢_ïîxëõáììµZÕë6Õ¸~½^±•–¼üºt†½-œЧg7Ì}|¦q§¦ÝÄìé“0yüCðñö‚Do/<1{B:ÎŘثµfFËJ¼ôÜ| ìßÎÎN°³µA§ ¼üÜ|cVlbr*zvÇsóŸ@`{?ØÚHàîêŠQÃaü˜ ™‚i7o™,;/¯ÛwJ:³§O2–zµ‘H08¢/fM3 1W®âê„Û)+–cÑ‚'ððC#àíå ‰Ä^xhäP̘<Þ¸-WïÈ’mˆ5ë7C¯×ÃÏ×//Z?_…BXXˆÜ /<ó ¥8ôϱ;>¯Rpþâe@D¿^˜ûØL´ñò„……övèÕ£+ÞxeÄV¿¶mÛ±Ò"D"^{éYŒ2î®®H¬áéáŽ1£†añ¢ȼm’[e¿Ë l×^|¡]:ÃÑÁöv¶è€WŸÚ˜AyîÂ¥FµUY¢Â¹ 1`’i-[¢g7ÃwÁã§ÎÖ™µßZ­Ûv¾Gz{z`éâçÜ)¶68:Ø£kh¼±øyøCY¢jÒºÔ ä %äròòòq)6?¬ú kÖÿ@€‰ÂýZÕ;÷ÆwqqF·;²°ËûËÎÞ¶Îï$¶eÕ.Š‹åwmý•©T¥+”Ë‘y;'OGã“/¾ÆÉSç ‘Xã¹ùOÔx ™'³ jU”תücpM¯• ÍYJJJ½¦+ß6ï.ÕZš†ýÑäù¬™3ªí×™3fÜÓvNŸ6¥ÊkÞÞÞ ho|^PXØ"m é?ÿ*¯Oš8VV™(11Í“-ì])û³Hf:ffÔéS&ûmîSO¶ø¾Ê¾¤ädãó Çîš’—C BÛ¶å%ÿ:x¨ÖåŽ1¼Ú2Š˜f‡J+Žƒ6ÞÞ&ûäßÿþ «W¯iryêêÆ&lÌ2B‚«ÏŒé`ÌÌQ–¨p«¬¼$\½V´íÓ£«Éx™•õéÙÕ¸¾Ÿi‘¬Y÷»…ÈXÕhëÎÔ,-Uƒ1}zšdcÖæèñ(€—‡† ¬>xá`o‡ñcF’SÒqóVVË: _µÙca]:ûÎÖÖ¦Æuu/çNY¢ªµƒ;v¨¶”ªƒ½:u¨(ýðèáÕÎߣ[XÅçÍmÓ±aÏž¿µF ¦L¨¾„óÀþ} )+™|6úbí lï‡Ð.«}¯ߊ±º3³²uŒ$§¤##Óp,O›<®ÚóÈÇÛ aem8sÎ4Øwê\Å÷•©ãÇT»G{@™« IDAT ŠèÛ¨ö•¨TÆu è×íÚVŸiÔ¡=úô4”à=yê¬ÉMw?vdµÛi<ökC³ëÊ9wÞX:9âŽLëþý Ïóò w=¾ÙÎûËq×Çþ„‡G3xM® "LÿP“×õOäI¼´ä]¼´ô=,}ï_øúû_pîB è‡wßXŒIãBkyò4.]6ÜŒ5kê„*×r¥ÒpSŽ¥EÝ¥‰ÅeóªTª»¶þÊ~úu^Zò.¿ñxçÃϰjíïÈÎÎŤq᣷—¯…DDDDDDDµ1 ¡t¯.û¯.û»÷2›yDfÔô)+Yà»óÿòÇåÏËÇè3gùeãZUn÷Ï+¿îââÒbmkÍMHII5yÞ¥K—j§ë|ÏÚèèèXcIeJcíië™!ÖTAÕÓgmmÀÀŠàLzzÅø”J¥ùùÕþS(U–uäÈ?Xúæ2ŒŸ8½ûöGHX7‡„#8$GŽücœNwG))©"˜ØÎ·]å\›ÓÓL°°šì «x¯òxžÕ «a¬`wÓ±>5•ŽkkkÌ™SQºº¤¤Ÿ}ñ%†|_|¹¼Ñ׿»‘÷äâì\%òòµ­rÖKNNE‰ðŒÌŠ ]»¶5—¶´´D›6•—‘×¼;¾ì¬×ÕÝ;I©©()ûñ½G·úý^ZªFJZ: kXpµ7í”ë^‘q[swP‡šƒ©ÎeYÒíýÚA$U?sE&u‰ª¤–õ´¯y=e㥊Ŗðóõ©áX©XòŽ ElÜuC;ýÛÕXÞS$ÁÓÃ@í´.k.?)±¶‚­¤¬ ¥:D.—e–‹D"ÔÜ'm¼= Ÿ¯99&cç&§¦•]ÛÚ˜ôý‚;6ª}‰É©Æ1v»†u©uÚîᆀd‘¬©i7«ÿb(¢SPÍmq+»IC£ÑBSϲ͕-+=Û)(И[®S‡@ãM å%j›CRrÅwˆðÎ5N×±C`çQSÿ:vò4Ölø‘'O7kVêÝw=ë6n žÝëÛ8ã6Ö÷CIXÏ*õZä %ö8„5þÀõ‰üKˆˆˆˆˆˆê´iÛ.ìØsÒ"¤E2ü¹{¿±Ù½žçAd6cjº»»×9^¯7þ ¬i¡@PShµ û±ÏÁÁ¡EÚÕÚš€¡ìge®5„œïá1]s`N(µx{k>¾*÷“¬R¸o¾ý«]Sí ¤…ÚU=j¼q¡r¶U þŸg陯`j`€?ÒÒ«Þ Ñ©C{D)ÀùK±Ëaog{×Ïû¼²›ÎŒÙÀ5+.NNÈÉküÍ£†ƨს×ëQZªF´IÉé8u×ã±fýˆOHÂü'fÜ%&¥àÛWC«Õ"<$³§O®vºòÒÔõ)é]ª1Œ+mmm}×Ö_Ù‹Ï<À0®q‰J…ÜÜ\OÀ‘È(\Ž»†Ø«×ñÄ£Ó1¸‘YÒDDDDDDô`8u&ºÊk‘'Ocr-žZjž‘Ù5ës—våNmllŒ™æª>?ÒÔ´}„»Òwµ•%knb+«f_‡ª¤¤ÞÓêjùA_×ÈûË}ôñ'&ÍÀÀL›2`+±@ Àò¯¾Ftôù:÷ß½:,ìÓÝ ©-!¥±ÇH$Â’×^Å”I±jõ¯Ø»wJKÕÆýµmûDž8‰ ¿ýZcFpŲ AMFË&^õëÊhÔÕТŒçYy:]óf0i5eãÖ#¨)—Wü­ÅõÛ¯ª²}b˺ÇL´²C¡T¢X^\˱Z÷uM$hz!†ú\?…\O±Bn<ï¬ê1–¤u-ÁôúôkS—ä1ë³!JËJ­Z×q-°jäµ¢´Rj]}a]©¯eÅŠêÛÑŒýy¢¢ÔøÞ‡±÷ÀášÏM­§ÎDcÔðÁw½%*u½Ïckë»ÓVVbxyxÀËÃ}{bËö=ØwðNžŽFŸ^Ý%ŒÍMRr–¯X •ªƒðì‚Çk,gng'³¸Žë¼ÞxM­ëf™†¬¿¦¿1l$´ó• o ÔËW¬Äõø$üþÇvtm–à9Ý„B¡ÙÎó ²h­ wwwÇÍ›7ͺ-•yÙPž®†òwåÙšùRCöQkÊÖ´·7ÍB*,”V[Ö¯º©­MmãžU.ïY—‚‚ßËË«XNCØ“J¥Ø»w¿ñy``þØô;$I½ÏûJYe¹Í]n´–kŠIŸäæÕ«¿lll 7_ð¼C‡øô“ñêâ—ñÛº ømÝz””³ssrðáGŸ`åO?Ôº K ”ª5Ð61x ÅŠÚÇõ,®”ékSéÆÇJû_&“׺ YqEF¤­¤Y÷»FgÈÔ×#P(©´=¥êú•2µ¯”¹ZZZ÷¸q%%†izSLkcc-\®@ÏîaXøÔónkY&Ÿ££¾üäÝÏ/‹¡T–@­Q×~­od ;»ŠëgIÇXIIiµÇsKP«Õ8}ö|ƒæ9vòL£ƒšªZÊ [Y•åXó¸¡U7bÂØQØèèõz\º|Õ,ƒšIÉiøïŠŸ ,Q!¨C{,~nqìÞêx•ek4ZJ‹ŒËU¿;Ë{ÖR­¥¡ë¯KKK<îØ)¨EŽ www¼úÊ˘5sž~v“'NFA£Ñ˜3w²[B®,\Y;›¦2 ¡P*aSÍ>Öét¸™QQNÒãâ‡j¯JåZ“SÓ1 _¯j—¯V«‘q«büͶm¼›µ_ Ãu·<ÈQG§Šç3oçÇ{¬ƒƒ=D"´Z-nee×:m¡´J¥!`}çXƒ÷gGääå!óvŽÙ·µ|lPiÙþ©­\iuœ •!»Ž6¤EÅjŸk¥z²²nû–ÒÈ™Y·+®)-|Œ»pò²›"ÞzýE¶÷«qÚ¿þ>ŠM[w!#3 IÉih_ñ™_ùŠ_Ûyy5ßÈS>ö¬TZUii­A²"Yq³õ‰••kk(”J””(ÍîØ7•%èÔ/=7¯ÎÌj¿ŠÊ©iép ©þ»CjÅxÔþþmïÚúë«òVŠT½ """""¢ÏÔ‰ca%ãÐ?Ç ²°À¨¡1fÔ0³˜çAd6ù¬999Ðëõõþ×½{w³ï\ÿZ·€ÉsÙãD67OW'xºVŒÍ–/•!¯PÖ*Ün]Mï¨ßºõÏj§Û½wo“×ec]¼©-{ïnrtªØ/ñññÈήúÃÿÆÍ4h™ñ ¸r%®Êë›7ÿa2Fm×ðÐ-÷Î,I5å“’“wµÆetïÖÍøX¯×cõê55N{gðÿÎjc÷‘«‹ úô®´íÚ½»ÊØ­ð÷ßG™™i|> D‹ûmÚ´Á´©SLúKQÇM!6Ö†Ò~Å ¥ñÚÓcâª}=&6δ°‘HÐÆ«"¸Ò£[˜ñqô…KP•VŸ!u&ú’±ÌnÛ6^pt0½Ñ¢riL…²i™Øz½²òöÖ£ôg{?_XXƼs¥~²B!ÂB‚Ëæ‰«µÿ/\ºl|Ü)(ð¾þòÒ©# -=Ù È8¿ë_‚ÊÆ ­-K²KçŽÆã%úâå†hgò¤¤¥£X^ó1_v£BC´÷3fØ_¸Tûqy>ÆÐ~++1üÚù´h_;i(QîãíUk@"úö6–/Ÿ¯œµUEP¹òx¢wŠ«áFð÷5îÓ«µL—•]ë>kªüüãõ»¾7ò´”ÊÅÎñò¢ùõ (º¹ºÀÛËÓp¼]Š­qºè²÷ìáQÍØÓ]}eddVúüwQMƉÿýç|ùÉ»õ 4¶Ô<"³ j¦¤¤@ ÔûßÈ‘#;sÃÂÂj݆òµü_m™lÍ¥µ6;u BÇ Æç{öîÊï¾7–›-’ÉðÃ+±eËÖ¦÷‘GE`ædÔ)ùç(ôz=JKÕ¸t)¦ÆàLSw®(AWZªÆkK–"11:9¹¹øñ§Ÿñë¯k¼Üů¼†£‘‘Ëcã¦Íøêëo+.B!ÆÛ eú¶5Ͱؾc'd•ÆÒ:}æ,ž}î…ZÇí|øá±&ãÉ­úe5þ»ü+ÜÌÈ€J¥Böíl¼õÎ{Æi¬ÄbÌ|dú]ßÿIÉɘ1s6Ö­ßP% ]TT„¿üc|îääûÚ3¬­­,! ¡ÓécÉ5Ŷ]{‘sGð8/¯¶ì0>ïÛ»»Ix_ot (;?‹ñëºÍP«MÛ’–~ ü¹Ëø|d5e'+¶õÚõ„:ºµQ¨J¡×ëa!A,®»pD‚®¡†¬£§Ï"9%­^ë< áxÌËáŽW;´H†]û ã ¶ómSgЧµ‹èÛ"‘z½¿®ÿ£Ê±p§»Œ¯ŽƒáxÊÉͯ±\iP`{cfÛνÈËËoP[ûö4Ü´¡Õê°kßÁjçQ–¨pøèÉFmƒH$DD¿Þ€¨³ç‘’V}iþñIˆ¾`jŽè ‘HÔbû;;'×ãË·ºË¦ØÙÚ gwç£/ ¤ÒÍ,žžÒ§Ï]¬v~Y±Gž¨qùá!ÁÆñQwî;d,ƒz§=þnÔöJ‹dµ–Ž/?NþØ¾Çø¼{xˆÙœŸ•Šá!Áxñ¹y *³>lPÀ©³çq«Rvpåký™s†j+ú÷©Rq¡)ë/(Ö9\¡Äî²ë­½-:¶ç_„DDDDDDD­„Ù”Ÿ½zõjƒ¦ïÙ³'<==qûömóìX ôéÓ§AóÜ«1B[k)ÚW_]ŒgŸ{ÁøüÛßãû~‚ŠŠŠ ×ëáê₼üü&­gР8uæ CVâ¢ç_„XliÌ&;qì(¬\ÄwuÛ&Mœ€ßÖ­7>?w.ã'N1) ..Îȯ%S¥Ê1–‘aÒgwzü±9ðònXÙdO„†† 6Ö!téR †  ???ädç '×…€Ä¤ê3‘œðòK/à³Ï¿4¾¶òçUXùóª*ÓöêÕÃäyxx8Œ¥x?þÃÒÒjµΞ…wßy«^Û2rÄLœ8;wî\¼x 3fήÒïå–-{£ÊXœwƒ^¯GlìÄÆ^Á'ÿú7<<=àîæZ”Ô4“lÕ)S&Õ¹<@{[ erCbÝøŒ ‰R¼ûÑçèÜn..ãRlœ1(d#‘`ü˜ª7žÌ{l&Þÿ×Q¢RáLôE\OHBHç H¬%¸“‹¸k7ŒÁïÎ1°,PSY ¿¬¬ÄP©J!-’áƒO—£[xô:=nÞº…W^xÚ˜áU—²rŸN¶õ.cüÈÔñˆ»~Je ¾øúGŒ= ]ÃB`g#R¥BFF¢/Å`Ä*û¡¼khôïÓQgÎcÓÖ(((Ä€þ½áæê•ª×o$bÛ®}J‹ ‰ðĬ÷ý—g<2e<~ß²×ãñѾ˜QÃèkkk”ªJ‘›—kñ 8{>O?5í|ÛÜõv¶Çá£Ç¡*-Åêõ›0kêDØÛÛ#¿°¶66Æ2Ë ž˜…}ù-¤E2|ôÙW3r(BC‚áè`­Fƒ‚Â"$¥¤âÜÅôêŽC×Ñ©c B»tFlÜ5:r #†„›‹ JT*$&¥`ÇžMÊ<ž4n4.ÅÄ!+;ÿýö'L7ÝÃB Ÿ‡2¢/^ÆÎ=A¯×ÃÍÕÝ¢ûûØIÃg¨¥…ú÷éY¯y† èSg/@¥*ÅÙó—0¨¿á;•½-‚;vÀÕ ¸‹5¶`ä0C*KJŸŒí»@¡,©ñÚmii‰‰Æï[v 5í&þ·b%¦Mzí|} Óë‘‘‘‰¿ŽDâôÙ &Ÿ÷õyâ9†îá¡íÒ mÚxÁÞÎBÅr9RRoâïc'˜è×»»IÙÖ»!5=üiø,ëÝ#Cö¯×|É)EOwwŒ6‰•JÔWûîäh2.æà}q$ò$2og㋯~ÀôIãʲÏõ¸r=[·ïV«ƒ£ƒ=1ä®®Õo‘—_€^ÝÃÑ1(^žî°‘Ø@§Ó¡ PŠø„$øû¨±<ñÔIÃÒÒDDDDDDDÔ:˜MPóÚµk())µuýƪ3f Ö¬Yc–û裚Œ×SÉÉÉ÷¬½­1°9dð`¼ôâóøú›Æ×´Z-¤RÃ6xxz`ÙÒ%xåµ%MZÏ#ÌÀ¶?·›äúgC…„t©²m€iФI0 –¾¹¬^Ë|ç­eøfÅwÆþ©ÒŸC†àÕW7ª½ÿ÷Þ»xjî<ÈËÊôÉå “r³3¦OÃÓO/À¨Ñ5gÎ}êIËñÝ÷?Ô~îÃ4ø$[bÉë¯âÝ÷Þ7y½®Ì¯š|üá°‘Ø`ã¦ÍÕö;`¸iaé’×0ó‘– >eßÎFöíªã14/½ð|½–áì`‡B™ÅÊ(KJ!±n\ ~ÆÔñ¸y3‡Ç¥ËUËÐJ¬­ðâ3sáäXõúçîæŠ¥¯,Â7?®FAA!¤Ò"œ<]eºðÐ.xfÞœjb±%&›¶2:sóòqèȱÊ'I½¶CQ¢‚B©‚@8ØÙÔ{ûÝ\]ðÒ3óðÃêuJ‹ðç®ýøs×þ*Ó ºcï'fÏDŽÆÃGqàðÑ*óØH$xfÞ´÷÷Ń`ä°AÐhµØ¶s22³°jíï-Þ†î]CÑÞßÉ)é8} g£/ß{ó•çÔÁ˜ö÷óÅKÏÍÃ/k7BZ$ÃÛ÷˜dÙUÖ£šÞ žœ¯¾_…ä”4üs, ÿ‹2yßÖÖ/?7?ü²……Òo‡•XŒW_Xˆ?¯AjÚMlؼ6o¯2·'^|vž1K±%hµ:œ8}ЫG8lmëw¾u @/ÜÊÊÆ±§AM˜3s þ³ü;Ȋ刘3sê]ï÷äÔt\½Ø¿þ7Ùøû¨qlßÛ99XþíÊz˳§WÜ`cii‰çŸ~ÿ]ñ3òó °ê·Uæ±µ‘à…§çÂîŽã¡©ë ÈÎÉÅÞ¿þÆÞ¿jδµ¶²Â´IcpD_Qëa6AM•J…ÄÄDtéÒÅxg}åÿŠÀBùë³gÏ6Ë ¦H$Âûï¿o|^¹ÝÕm‡@ @aa!ÒÒÒîi»[c`ó¹gŸA×®áX»f.]¾ …B//oŒ> O/œ¤¤¦Šíìl±aýZüðãJþû²²2!‘ØÀÛ˽{÷†mÙXf͵mëÖÿŽ˜K1(”Jáè耰PL›6£Fª÷1€9sfcÔ¨‘øéçŸyÙÙÙ°´´@PP¦N‚iS&×;[íN¡!]°uË&|ÿÃO8y" ……ptp@§N0ó‘é=z”±‰µŒ÷â ‹ðÐC£ñûïqæÌYdݾ •J{t êˆI“&bìÃcªÌ7}ÚT¸{¸cͯ¿áJ\JJ”pssG‡À >´AÛbii‰ÿ{ïLš0›¶ü‹b™• Úx·ADD<6g6ÚÞQv÷njïïU?ÿˆâü… ÈÌÌ„RYKKK¸¹º!$´ Æ‹Q (Ãma!‚ƒ ŠŠÈ)¢wã2L;bpD_tê€#GOâæ­L(”%prtDxhgŒ=ÎÎN5Îïçëƒß~ 'NÃÙè‹ÈÉ̓\¡„½½Ûû!¢o/t ëRkFgG'>zé7oA«ÓÁÙÉAþõ.©™“o¸Î9ÚÛB$lX%öŽAøðí×q"ê ¢/Å"77E²bX‰ÅðôtG®¡ð÷5=>ÄbK,xb6ú÷é‰c'N#%õ& ¤…[Šááá†ð` 2À86âƒbÌÈ¡èÞ'¢Î!6îò !W(a%ÃÕÅíý}Ñ£[Úúx5Ëú-,Dxõ…§±{ÿaœ¿xù…[ZÀÃÃŽv¦×¹àNøàí×qêL4¢/]FvNd²bXXˆàhï_ß6 Fï]«¬ÇÞÎË^}‘'N!êìÜÊÌ‚F­““#ÂCƒ1väP8;;ÁÇ˳QAMpuuƲ×^À™su&·²n£¸¸6 |}Ú WÏ®دw‹–€ËWâ •2éEôkмƒöÇÆ-;˜œŠŒÌ,ø”UðöòÄûË^Åш»Šœ¼@¯‡³³‚;á¡‘ƒáé£k j <6s ÂC;ãHd’SR¡P*agk‹€öþ9l:u@T57^Ôeì¨áðöôÀÅØ8dÜÊ‚¬X™¬¸ì;… œÜ1½{vƒ¯w³ô{úÍ ãwÒ°.ZüÜ.ßG‡ŽD"úÂeäæçC«ÕÂÍÅa¡1fÄ8U?ünyvÁã8}ö®\‹GNNdÅr˰´°€­­-¼<ÜÜ}{÷¨öæ"""""""2o}s TUIRYÙ¨µN÷Ûo¿aΜ9õ^®F£Á¸qãpðàA³êÔ'Ÿ|«W¯nÐ<›7oƬY³j&¡,ÐÞ¿YÛ;¯ÐØG{³/E[“£ÇŽáÙg+2ÙÖ¬þ}úôâ™O$V‹”ŒlC Jg8;Ø=ý'•!¿P¡Pˆö>&cU¶ìý#;'ÃGà±fȨl.þ’SÒÑ£[ž_ø$w$5‹øÔ[€ðŽ~-²>³ú%÷ôéÓµ¾_] ÈM›65˘veccƒ?ü°ÁómÛ¶Íl¶ÁÓÕ ž®wÏçKeÈ+”µÊ*£,S¡œ‹‹¯2ôÀ²‰àæl8·s Š ,)}àú@®P!¿ìzæåæÄ€&Õú½S&3\/ÊÇWm Ôj5ÒÒ P Ø;’ˆˆˆˆˆˆˆîfõknddd­ïWWÓÉÉ ¿üòK½ÇâlNîîî8xð |}6šL&Þ={ÌêÀh Íú$ïØ¹ËøØÖÖíÛ·çYO4'{ØI ×Ë[ÙùPk´̶«ÕdåæúÁÁ¶kDT£ä”t(KT/÷VÕn­V Ow„tîÈIDDDDDDD÷ ³ jÆÄÄ !!¡Áó7GŽ“ӽ˓H$ضmú÷ïßày###!—ËÍîà0÷ÀæÇŸ|Šÿ{ÿCœŒŠ‚J¥2yO­Vã«o¾ELÌeãkcFnñ±ÄˆÌ‘§›3Ä–ÐéuHËÌA‰êþÏØT”¨–™^‰µnNKèAVPPXëÍQZ­[vì6|Y Ñ¥sP«Ù¶ë ‰€áƒ#=V6‘9²0·}ùå—øþûï<_ß¾}qìØ1¼ûî»Øµk´Ú–É>˜9s&>ýôSøù5®fð®]»Ìöñt5ŠËÇØÌ—ÊÌf|M…RíÛwbó[  áãã''GˆD"$%&¡HV€uttÄsÏ=Ë3ž€P(@[/wÜÌÊA©Zƒô¬\x¹;ÃÞFr_noQ±·ó ÖVb´ñpåýD¸ÃGO &6}zuGÇÀxzºÃÖÆZ))騾÷nÄÆ2< /œœ[ͶM; ÆŽâN&""""""¢ûŽÙ5W­Z…>ú®®®UÞÛµk.]º„^½zaôèÑUÆBëÒ¥ ¶nÝŠ¨¨(,]º'OžlÖ¶Ž=Ÿþ9BCCT”Cõ** V«Íj<ÍêÜØ4G:éééHOO¯òž—·þ÷åðñiÃ3ž¨ŒH(@;/wdææC®T!+§2‰®Î°²´¼/¶Q¡T!_*ƒ²,ÕÉÞîW „TÙ IDAT—ˆÊddÞÆŸ»ö×:MxhÌš6‘EDDDDDDDdÌ.¨©Ñh°~ýz¼üòËUÞûâ‹/püøq888`þüùèÖ­üñ*ÓEDDàøñã¸ví>Œ3gÎ 66 ÉW>ÕÕÕAAA Eß¾}1|øpøûûטíSß, ¯¾ú ¹¹¹f xº:•e:™OvÓ+/¿Œ.ÁÁ8{î)…M””œèP¯éƒƒƒqåÊ•*¯çççã±ÇÃþýûaee…ÀÀ@,X°‹/®×rõz=Ö®]‹¹sç6¨ý7nÄ#!ÑP- ½ÿ=9Xbn¤Ð#ÈχgÑ}F¯Ó#§P ©¬âz$áh'­"‘B¡"óŠY§×C§ÓC§ÕA«ÓA&W¢H¡€^W‘5ïêdg;î`"""""""""¢»,>õ ¼£_‹¬ÏÂ;áêÕ«X±bžþy“×]\\°{÷n¼ÿþûøøãÑ¡C¼þúë Ä„ ê\nBB^|ñÅ·ç­·ÞÂØ±caowÇ’üî»ïêÐ4ÌV º „x¸8ÁÙÞùEÅ+J ÕéP “£@&oUÛbii[k+¸89@$ä5‹ˆˆˆˆˆˆˆˆˆè~ 4׆½öÚkÈÈÈ0›R¯×C àƒ>À”)S°sçNÌž={öìF£1™®|¾Êó¯^½ÅÅÅ nKRRV¬XQey•×SÛz«›N&“aùòå<‰È¬XZZÀÓÕ ¾^ðóñ„‡‹#ì$ÖUÆ06«6[ˆà`go7gøzÿÜ]Ð$"""""""""º˜eùÙróçÏÇÊ•+«}O*•¢k×®P«Õpqq¿¿?Ö¬Y——×·o_œ={¶QÛ€øøø»2®’F£ÁôéÓ±sçÎÍgåg ¿6úr¹³f͵k×ðñÇC$A(ÂÍÍ ‰‰‰ÐétHMMEIII“Ú“““OOÏ&-#99o¿ý6<""""""""""""¢zš{óóó±páBètº*ïàã?œ={2™ ¹¹¹ˆ‹‹Ãúõë±hÑ"ìÚµ VVVðððhr[Ôju“æ—J¥1b222xäÕ“EkhäÉ“'1kÖ,¬^½¶¶¶&ï½þúëÈÎÎÆ_|Ø»w¯ñ=??C ßßÿý®´£)ãiªÕjÌŸ?)))<ꈈˆˆˆˆˆˆˆˆˆˆˆ@ØZºe˼þúëÐëõUþýç?ÿÁ_ý…ÀÀÀfmCuë®îßÓj4<úè£Ø¶m8""""""""""""¢²hMýé§Ÿ Õjñßÿþvvv&ï9±±±ˆŽŽÆ¥K—••…’’ØÙÙÁÓÓ®®®˜1cF“ÛPßlÍòéJKKñôÓOcëÖ­<Úˆˆˆˆˆˆˆˆˆˆˆˆˆ¡U5õz=~þùgܾ}Û¶mƒH$2yßÊÊ ˆˆˆ¨2ovvv“×ßÐò³EEE7nNœ8Á#ˆˆˆˆˆˆˆˆˆˆˆˆ¨‘„­±Ñ»víB¿~ýpáÂ…zÏÓ”ñ0³Œ‹/bĈ h5‘°µ6<::C† ÁæÍ›À8–eùãÊc[w'¨YÛz*?ÿå—_ЫW/DGGó#""""""""""""j¢ j–—‰upp¸«Ë-..ƬY³0}útÄÅÅ_Æ fùÿw–ªmŒÊË­îù… 0yòd,\¸:î®nkyßYXXð¨%"""""""""""¢J 5 «ñòòj–åoÛ¶ aaaXºt)JKKkhCÓƒšBaõÝ%•J±xñbôë×»ví2ÉÞ¼[ÊûÎâ.lQkÒ"AM±X ðññiÖõ|ñÅh×®Þ|óM\¹rÅä½üüü&/_.—›<¿té–,Y‚àà`|ýõ×Ðh4Ͷmå}g)¶äQKDDDDDDDDDDDD” jÚHlC‡möueggã³Ï>CXX† ‚?ÿüÇÇìÙ³›¼ì÷ßgÏžÅÆîÝ»ãË/¿DVVV³o×!†¾“XKxÔÑE oŽZ©wÐétHMKGff&ˆ`¯7±ã'àíí ¿v5–Ámn17RA~m¸Cˆˆˆˆˆˆˆˆˆˆˆˆ`ñ©·áýZd}- …°·³ƒ——¦OŸÎ½Ü@Ó§O‡··7ìíïY@“ˆˆˆˆˆˆˆˆˆˆˆˆè^i‘LMÐjµH¿™Û·ocø°¡P*•ìýzH$8ü÷xzz¢o[ˆD¢{Ö–òLM"""""""""""""à>ËÔ‘Hgg'¸»»cÅwßq׃@ Àw߸¸8ßÓ€&ѽbÑ’+stp€RY‚Áƒ‡àÃ?Ä{ï½Ç=P‹O>ùƒ †-̦]-q'""""""""""""óÔÒ>[|€Fw7H¬­ñèœÇ°fíZH$îõ;H$üöÛ:<2s$ÖÖpwsc§Ñ«ÅƒšB¡ÞÞ^pvr€q42óæÍ‡¥¥å¿3,--1wî\üs4ý#"àìäoo/©DDDDDDDDDDDDôÀèõzý½Z¹ª´999(-UC&“!òè?Ø¿?qëÖ-ß×ogg‡6mÚ cÇŽ;v," „½½=ÄbK¸»»ÃJ,6«ö–§³ü,у­¥ãF÷4¨YNZTy±%*Õ½ó­­¬`kfãgÞ˃“ˆˆˆˆˆˆˆˆˆˆˆˆÌSKÇ,Ìa£àèàN•JF ­N ½N_ïlP‘P ¬¬¬  yÝÁœ# !‘H¸WˆˆˆˆˆˆˆˆˆˆˆˆˆÈˆ©DDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¬1¨IDDDDDDDDDDDDDfAM"""""""""""""2k j‘YcP“ˆˆˆˆˆˆˆˆˆˆˆˆˆÌƒšDDDDDDDDDDDDDdÖÔ$"""""""""""""³Æ &™55‰êðò«KÐ%¼'ÖmØÈÎhA¯-]ÿÁ>jl£—yìžœ·]{öCPp8úD ÆãO-@Jj*;˜ˆdÀàðÞù?vÆ}ä·¨"Ø,Š‡Í¢xdikœîÐU&}›Ÿ×ÓÛ,ŠÇÅtv^*†÷k‰ó¿›PkïMûš{DDDDDDDDæÀ‚]@­Ís ò؉FÍ»nÍ* QïéKKÕØ±s7`ÛöxìÑYÜ­ÄÚuðÞû™¼–ƒâb9<=<ØAåçÓª,l‰–aÕS^˜ÝÇÞøú¢u·ñëÉ"¬[à©=ìª÷È5¶_(Æñ%2¥ÈJtp°¢“—cBm±p°œmêwï̵¬RÌúñnÜVc|¸-6?Û¦ÉÛsS…!Ÿ¥C¥ÑãÀ+m1(HÂþ€zqC6V—¢o€5þzÅ–¢û›³Š´Ø+ÇÁ+r\Ë*EŽL‹…K|],ÑÍ× ‡ÙaBW[ˆ-žâ†=1Å8T‚vçâÃIn÷m_dJµøl~9.5f Z[ àé ‚›92 ®f–âjf)~?#CG |3ÇcCmy U£¨D‡w¶ç‚½ÅXõ”B}¬ Wé UêãÂl±í¼ ¡m¬ÐÞÍ’FDDDDDDDÔLÔ¤Vç_¹\^åõM›·à—_×vlÛ kkë*Óø¶õiðúVÿüT*¬¬¬Øù­Ä™3ç P(ï¾õ&BBºÚx{£·7;¨ŒJ£G|v),„0É,Òé¸L$–¸Wý~Ûùb\HSÁÊB€9ý0©›:y‰a# -_ƒõ§ŠðãÑBdjðÈ·ý®_µ&x{[¾ù»àn'BNñÝ)øù|$d«áf'¿¦ºsgßç>ÛŸÃWX<Êâj¾Ù8J„øl†;žX•…å 0«ºxßÙtGo(ñèO·P Ð¡­³žâ„qá¶èè)†°Ò)X¢Öã¯89~?-ÃŽ‹Å˜öÝ-,䈯fy@À¤MÇã•Æ.þ3ÝÝ|­ŒÇ”£Ä‰þHo{Lên+f¼5+5©ÕiëS}YJ77Wãã°µµ¹këd@³uÉÈÈ0>- hRUW3K¡Õ]¼Å&AǤ5¥zôö·6 „”û`¢,„À³CÐÆÑôcÄÍN„íÜáíh÷vä"1GýWä˜ØÕ´„m¦T‹Ç~¾…¨Äˆ„Àò™8zC­ÑÅMÞ®<¹_.,ä'}?“•èyCQçtS{Øã½yHÉUã“ÝyX¿ðþºÁaûÅb<þs&ôzàíq®X:Æ¥Æ2»Ö–Lìj‡‰]ípèªϬÍÂÏǤð°áñ®<¨*IËW—4«ýžÀ€&Q³ã/½DtßQ(•ÆÇöì”—ž ½£Äìåò×}ªÏd³Nr«Ьì‰ãã˜ôªej=!ETb œl„Øñ‚ r„²ô]}\ ¹J‘˜?È‘;ú>·ùœÌXfµÖ/<`Á@Ãñ°ýb1Òó5ZŸHd~r^Ë*ÅÂ5YÐëõ ½ñö8—z:2Ø;^h ;+þµ×ñJ*—Åv²±Cˆˆˆˆˆˆˆˆî!fjÒç­bÉoaô¨øéûo¡V«ñÛúß±qÓ¤¤¦ ´Tï¿ý cÇÆÐ0x2nÝ£³Á¿>þ Úe¦¤¦âûƉQÈÎɆ­­-‚;wÆÌÓ0iâx\޽‚ “§# ½?þ>¸¯ÚeÉdXùójøëÒoÞ„P(€¿¿?Æ}óžzÖÖÖéÚr¹g£"áî^}I͘˱øuí:œ?™YYp°·G@@{L›:S'O„……E“ût:þ:t7ýë7â‘——w7w„…†à±9³0p@D­û!9%?®ü'NœÄíìlØØØ¢cPÌœ1 S§L‚¥eÃÆ%S«ÕX·a#üugΞ3¾Þ¡s˜ñqhhvoßÒèmÖëõ8pðþüs'.ÆÄ ?¿öövðmÛcÇŒÆ#Ó§ÁÅŹÚö½¶t¶nÛŽ·ß\Š… æâä©ÓXýëZœ?²bÜ\Ýзoo<½`‚;wäæåáçU¿âÐßGpófÚûûáá±c°pþSMÎ .^†ù˜.§<ØÖ¶ñËw±­øñ¿ºPåÒ1.È”j°x¤³±Ä­Z{w‚šN³…Sís»cäØx¦çÓTÈ’j`# “BÚXáñþÞ¹jÆw¦T‹ïŽàPœɹj¨4zø8[ G;kÌ舡j¿³Ó;ÉHÏ×àø›íÐÝ× k¢Š°ö¤q·J¡ÑéÑÖÙcÃìðÚhg¸ÙúðÒM¾?Rˆ#×È’j`k%D˜ rÄŒ^ö÷t=åŠUzü%Ŧ³2$å¨!WéàãlÁ6xvˆ:y‰ëlgvVØ]ŒßNIq!U……Î6"tkg…y1©›i¶ï™ä,Û–ƒ¨Äãk¯$˜Lóããžx¼E€ý‰¼¿3°ñl–<äÒàãK,C§Óá-Û°yË6$&%C¡ÃÓÓƒDà™…óáç×Î8}ä±xbîÀ7_}‰ ã®qÙ…èÝ4 æÌž‰O>z¿^mznÝmÈUz|2ÅͤŸT=Öœ,†ÓEHÈ.…\¥‡›½^"„·µÂ¢aÎi#F¨Ëgz`áÚÛøpWF›÷¿Eá™ßncl¨-¶.jƒ[R ¾:T€¿®(–§†@ø¹ZbT[,å /‡Šó¿P¡CÛ%‰Ðé÷&¸âͱUû¼T£‡ïÒ$ÈJt°7?„½uÕûî¾>\€7·æB Ò? „‹mÅ4ÓUØ-Ãñx%âo—¢¨D±A–˜ÐÕ/ w†­Uý²)ÕZàÇ£…Øq±'+Ý$óB¼ñq÷vV8ñ¦a?ÿ{_>>Ü•±……_w¨v™:=°ëR1VŸâÊ­RäÈ´ðt¡G;k,ìXíµ¦¾ †ìô]—Š‘œ«†°lLëi‡;W[þ›ˆˆˆˆˆˆˆ¨5bP“XÙÙ9P(Xøì 8q2Êä½¶ {óÀÁCxñåWQZZQ¢®´´'£NádÔ)ìÙ·ùÿìÝuxS×ð7I“6u£^(î2Ü} wllãÛ€ ÌÃa°áƒÃÝ]Šw)R¨»¥qùý‘6mhRÚb…½ŸçÙó”›››{Ͻç&Ë›ï9ynãqX>üx0¢£c̖ߺu·nÝÆ¦ÍÛ0îLddX¯ 1 ˜3o!æ/\dZ&Ÿ€ø„œ¹€M›·â¯E ¬oùm™,£¿‹cÇO˜– …BDFE!2* ûÂÇýûaê”ï!æþbzמ½øß¸ñÐhÌÛ,äÂE„\¸ˆ½û T©’:Ÿr¹Ë–¯8::"-ÍlùûeWìíU¬ÐÇœ––†Q£Çàtð³u’’’‘””Œk×o`ÙòUX0o6Ô¯ku?<|ˆÅ-Åo¿Ï6[mÛwbï¾X¹ü/ØK¥4ô¤¤¤˜­wûÎ]ܾsÇOœÄúV(ü±:׳ §™•jHÁÆ i¦åÉÆås%cåéT@ »›GúåûµÎ<È*ûåGEB`~?¯g®áï×1i:ÜQZWr°º^R†ÃþŽÁþ›æóó*5$e¨q3R2^’\AÖK2ŒX…Æ|gÅkð(^ƒÍ—ÒÑ¿¾3æ÷ó‚Tl=H¸¥Â/{±÷†ùëßÕà~l2¶\JÇ©o‹c×5ÆlˆƒNŸ½NŠ\S¡ œ UàZ„ ?uõ|£¯s?Vƒ‹"ñ0^“ãÞ<ˆÓàA\*V§aá‡^ø¨¾³Õý¼¥Â¬IØvÅ|øáx™‡nËqè¶Ÿ·tÅŒžÙ}øø=9"’µp³"YnÜñ7³9!lÍï?žŽ"Ô,a‡ÇJ»+/T¨)²aÐÐ8y*ØlyxxÖý»›·nüÙ3M?ˆhÒ¸!ü‰Í[¶åjîÙ·Z­±ÿõèÞ5_ûsô®ç)QÑW‚/Z¹™õ…^‹#qé‰ "!PÞ[W{bÓ´¸ôD…KOT¨U•ýŒs¿zÎøag".„)ñ(^cq>Ý»1jœy¨@·?¢®Ô›ŸÃh5îD«±þ|ŽŒ D/ãó]í…¨dlóã÷äCÍc÷¦íitÀ¡Ûrt¯éhñX v ;³@sí¹4 _kþWhšøòS.?UaËåth1,}–L¥Ç‚£Æ!¬]¤B¤d^_îÙ›}]òÿ:]©ÇÀæ÷¡OÒ"[ óéââ‚à“GŒm±t~ùíwÀ‰£,V§ä˜u:>5gÏ…@(bØÐAèÞµ üýý!ËÀù ˜5w>ž> Ç ¡#°{ûf”-k¹ZgÿÁÃHMMEçŽ0tÈ@” *¤ädìÝwsæ-„J¥Â×ßL„F«H(į?MEÓ¦áèà€‡ã×3qáâ%\¼t›¶lÇ}{ç»Ä©q#RkyD²ɹךcxN™*ÿ‰c²\q›â%ªïŒ 1’ä:„ÆjpøvF®îè]9¬0ÎYXÉW‚ï;y ~))¤bÆkðwp*–žJÅÚsi0 X6ÐÇê~Žß4…Û»£wgx;‹ð4I‹¹‡’°>$ÉZô\‰+OU¨êo‹Iú°oö9rtD—ÎѸqCtèÜ11±÷íDìØºÑâ¶RSSÑæýV˜?wfö9rv Æè– IDATƨOG --.Y†È¨(ˆD"ìܶ •+U̾¦jÖÀŠe¢Ió÷‘’’‚ÃGŽ(Ô<:.Ðô÷“D-*NzŒ²Þb\›dZ~?VƒSÃPÁG‚Ë“KèÐJ¥3gÏ3ý€¤WÏî˜=oôz=¶nß‘Ÿ ·x¿xé2€üWiê À±»rÆó•åÈ]9NÜWÀÁV€M#ýàíl>¤,³*Òñ™ªÅ²^’ÌûƒÆâë €À‘±ðuÉÞfõ[üÑß)r=¶]‘áØ]9’åz¸Ù·ßº¢~Ý›•Ö€s”fC4 ÀžëÆPsT WLÛ•ˆ·2 ÓÃÒ@Èc…i~Ë÷Ÿ©Âv³âÖ´ \ûëïfƒß{ÃõN…*°ïFF¾BÍ—iëe™©Bsù ³áýÝl0½‡'¢R´Ø|)?íNÄð¦®Ï æ³üy"Åôã“ý¼Ì†Z.înƒÏ[º¢¢¯DòC½„lú/«W·Æ|ùy¡ž›ššŠÃGzvïfhæôåçŸÁÎÎú—ð[¶í`¬ÌéÓ»§ÅuZ¶hŽ:µkYÝÆî=û R«!‘ˆ1î_Y\§wÏîpr4~™º{÷ÞB·Éæ-Û¶œfNÆ(•J9vÌ´<1) §N‡lìÞ­«ÕŠØOF +𜚯ò:X·~ TÉ ôï×Çâ:îîøâóQ€k×oàÞýP«Û1lˆÅå9çïlÞ¬‰Y ™ÅÉÑÖ<~Vèc¾f†¶V ;Ë˃ò•ÿî1üÆ=DзÐà—§¿%vüÑßÁã‹[KñUy’`ü‚¿„»ØlÒœþ9gj·¤§cÛä/à8z×8&|ßÁÃ,ÐÌiÌûîðw3{«‚S­nÏÁV€áM],>Öõ½ìÐcT ËGƒÒv(–9fhœæ¼ŽFl¸n|~s7³@3‹ÄF€O›ÕàŠ\Cdæ\ïë¶–ÏEU‰iÞ×{1ê¾FrV,Z ïòboo?úÐâc%JGïžÝÇOœ4 ííí…–-šïù[·[|‡ ïÞµK¾öåN´Ér=ÊyK̆cÝ‘9Œo—޹MHÏ ŸžW*1^rµÞêkmâbhæÔ¯^v¨›}®ê”´3õ™ã÷̇Q?ÿX‰Ø4ìÄ|ÒÌ’2ôfU×€1¼ŒÃÁÖ *X°Ý ³j;~à–õóS«„Õ Ö·ìp°~)©Õmd†ˆÏÎmøº^'䱩 ã²ì­>¿bŽŠÙÐXË×CívVƒb(áa "Óò8ÖüÊymd]/Q½ZØJ¬‡õ5`œçøÆÍ[¦åýúô6ݯ^»žëyY¡fãF áãã¯}‰É ‰Kzšÿ$,3¬­âg¹'ÉŒÇýl¨™u>¥ÖÏEË Ï=OÏž+!Ð,³:óÙPsÇUcˆ×´œnöB4*c\o÷uóþ“5ŸfË öfœù‘uœ µáµÞ´úìýnQ>>â“}žîæ3¸ÏPp'sÝvU×G™få¥üÀGDDDDDDDï?KÿiË—/ôs##£L—,”çºÅpî|H®å1±±ÐëõùÞ†5QÑ1€ /!¨LÅçî{BBB¡Ú$11 ñËò,Æ‚?èµb2÷J•*ùÜã½rõÚ¿bcã ÕƒƒRÏ9GžpvrBZz:bbc-®ãU¬˜Õ9>E¢ìåžžžV_G$2†2}ឬðòÙ žKOŒËkÏ_eOÌlc€­ÑÉrBcÕØ3ËN¥bÍÙ4ì¸"Ãÿ z€ík9—I™!•»ƒåP36] }f®QÖ;ÿU¤O“Œ×½¯‹(Ïð-çv•’2ôftYrйÎoޤÕÛÙúz6™ëé ÖƒšWù:ÉÙU—íçEä«ãÒ,Wj–ðÈûãˆ8óaÃKȤO~[¥‹½Õ`‰:S…›¥Àùy”Ježçü!ij?ÎèÓ»'.úiii8|ø(:´o عk C‡v°µÍU³GfEr|ºùõÞ¹º#ÖœMÃÆ iÒÈ JƒÖˆd-fLB€› "’µ8p35m¡7ã6ÅC¦2àÓf®Ï­F.Œ’žb”ôãq‚'Ch[ÅÁT¥Y³¸­iNÖ2^b”õ#4Vƒ½72PÞG‚ã÷ŒmZÞG’«úxôº8¾#‡PLïQ Ûºärù§Ý‰øeoÒëï#öÙíø[O/ näüÒ¶í#\Vjó.aVë """""""zð§ÛD…ä“cþÃ'OÂó\7>!Ñâro//ÓOžæ½+Û_ã¾ÂÙ³ºwï±X ƒÁ€o'NzîЮCá«Vúöé ÀX­ôû¬¹zbžž¨_¯nf›m4U'=kíú HMM-2çº_æ0»ááXµú‹ë$$&bá¢?•+UDÍ÷jÙk÷f„ñú¨`j^Í jæ=üedŠö¹¯q5\…õ!Æ «me‹ÕS¯BV°‘˜¡·Z‰Ù·®qåq,<š’¯íV°EÍâÆvùyO¢ÕjÍÙ“j û‡7u}§ïR±}êÛr}Hº©ªÎúýàÕìG±Ã#géy ~` €Ä" f‰‚øjµËV¬´øØÃG±uÛv@ËÍàìœ{¸ÑÖ­ZÀÓÃjµgΜÅÁCG=ºw-Ôñhà˜±/ÉðÆÿ»î¸95© ÊâÑôRøëcoÓ ÊûH°ÿ«$Ì-ƒGÓKavŸb¯dØÙœš—·‡HhœWséÉTèôÆý(ïc>OiýRRx:Š Õ‹Ž¥@olmh\Ö|®Ïœû›57ç³Þ’ãTè› õ²†œ KÐ`Ê΄—ÚGzÕv6Ýow^“Y½¸•‘çõ<}Æ,ŒýUž?ž""""""""* j½€¯ÿ÷D"är9úõ€ƒ‡Ž@¡P@§ÓáÉ“§˜;ÿLøn2¤R©Õm ø¨?üýü_ý«VÿƒÄ¤$ Ä'$`ãæ­è× „"ëÃ$úùúbâø¯ç· S×^غmž> Grr "£¢pîüÌž»­?è€Ûwîú˜;uh¶mÞü¹d† ‰c'N"&&IIÉ{òGÇ÷“§¢U›ö¹ÛlìW …Èȣwߤ¤¤@¡Pà~h(fÌœƒi?ý 'GÇ"sž[¶hn Ÿúå7üüë „†>€B¡@bRvïÙ‡½?D\\<Äb1~ùij‘¾nofVjVñÏ c§@TñÏ;Ô¬øýc4ÿ=ó'#ø‘)Z¤*ôˆIÓáÜ#%&ïH@ëYáPk p°`rg×vl Ëd÷µ`+ÕIÚ¸¢V ã1~»%£×ÅáìC%"“µx¯Á¡ÛrŒÛEÇÍÏ%}`k#À“D-ZÍ ÇŽ«2$Èt« ¸©Æÿ6Äcê.ã0Ñ«;¢Su‡wþøcWOyŠa0½þŒÂ¸ñ8ÿH‰Ø4bÓt¸­Æ¿!éè¿4ƒWż’}¨[ÒÎ4ÄçØq¸¡‚Nĥ뙜;€?pÕ,a©¸àa»T*ÅÜùàç_gàÞýPÈår$'§`çî=øðãAP«5HÄøzì‹Ï‹Åè™9Ìì?ë6àqXºwë\¨ãÞÔþ®6¸øD‰);Šôõâl'4UJ/?eì_ÏVi€P|PÅØþ9›h\Všë|•*&6ÍŹàH26_J‡Rc€ZkÀÝ5¾Þ^F¾¶JqKzÖr2ãìƒÉè±( nÉ™¢E‚L‡‡ñì»™/×ǡƴ°m{dsWøº? ^ƒùG’™¬…RcÀÓ$-–žJE§ùp´µþqÇ®ÝøsÉ2ìÝw_Žùš숈ˆˆˆˆˆ¨H³a^•*•1kƯûÍ„GDbÄÈÏs­Ó²EsøûùbÍÚõ·áà`eKáãC‘˜ˆ¦ýŒ¦ýl¶N``Fö)&OýÉê¾ ø14j ~Ÿ=÷CCñ¿¯Ç¿²ãžõûtØIí°}Ç.=vG·¸ž¥`²VÍ÷0ý—1á»ÉˆÄ¨Ñ_åZ§K§¨[·¾›ôC‘9×Óž@€mÛwbéò•XºúºˆÌæ|œ AºR²Þb8Ø>?è y¬DÈ㼇t,áaƒ%|P=Àöµ_IOcÈž¤ÅáÛ¦*©œÄ"àß~è¿,!•X~:ËOç® þ¦­»Ù¿+ùJ°ãs|´,wcÔè·$Úâ>t­áˆeƒ|þ÷@©»GûcÀòh\~ªÂ¢ã)¹Âà,YCоl~.6ÙÜKÁÍH5êÿ’=÷äNß.û<&Ëõ¦!O›•³/Ôëýµhþük©Õû€­D‚ùóf¡BùrV·Ñ·OOü¹dNŸ4lP~¾¾…Ú';!–òA§˜u0‰2fôò‚c>úq¼LG[a¡ÂÝÂj]Éç)“9Ï£¥P0Î ºö\âÒë=;Ÿf–¹}½ÐûÏ((4 Xn ΂ìªÇŽÕ0©“'êýüäõ“¥} •Äâßtì»™ašK4×{H+eÝ„Ø4ÒÝF"^¦Ãø- ¿Å<Ø®ì'Áü~Þh5Ëò<ÖÙû"ËÈà;"""""""*Òj½ ®]:¡JåJøkérŸ9‡ø„H¥R”/W={tCïžÝñýä¼+÷*V(Ãvcɲ•8tä(ÂÃ# P<0m?hƒÆàèñãÏÝ—Ç uë–Ø´y+Nœ<…¨è¤¥¥A*µƒ¿Ÿ?jT¯Š¶¼Ÿç—íùáà`¹³f oï^غm;.^ºŒ˜Ø8¨T*899!¨DqÔ©S ]:v°øüÞ=»ã½êÕ°dÙ S›9:: |¹rø°_otîØ—/_-RçÙÎÎsfþ†î];ãß›qýÆMÄÆÆÂÎÖAA%Тy3 ðÜÜŠö£ÙUš–‡ž­–òúAX’ŽÓˆLÖ A¦CªBg;!<E¨h‹*; g-'ؽư$K¿ºÎ˜±? »®É“¦ƒsî*g7ˆMÓ±éb:nDª—¦…H(@ » ÚTr@ÿz¹Ѧ夸4¹þNÃö+éKÔ@¦2 ˜£õJÙa`C«áË»ªT11Ž}]Û.§cÓ¥t܈P!&MƒÁOGÊûHЪ¢úfUû*üÖ³J{‰ñwpîǪaàfƒŠ¾æÃš®9› .ë:)øþˆÅbÔ«[5Àº7bë¶xðð”J¼½¼Ð´Ic|:bòÜNP‰hP¿.Ξ ôʬÜ,¬¦å¤Øô©?>^UgÒ°íŠ 8£y{Tó·…›ƒb‘) BcÕ¸¦Ä[rœ¼/ÇÕ)A(]LüÚ®—ÖíñÓncEs » Þ+nùžó~Eã°ÕªÌyR[W²Š·«â€SßÇÌI8u_$¹®R!*øÚb@g|Tß _?ÖxUmX1ȃ¹`í¹4œ}¤@Tб¢ÒE*Déb4,#EïÚ¿&k·Åå)A˜w8 »¯eàI¢"¡ñ½ë8ã³®Ø`'@©É=¾m‡öm±qÓ< Ç—£GñCiƒáUÍrEïšë÷UÕÊ•`cз'aÃÆÍ(S¦4ïß]¨mlß± _ýp)$îîlX" ¢Rµ¨<) *­ßwôÀÄöì+d¬Ü«öCÆkð~%{ìøÜÿîÏô³ðç’epttÀÅs§agg÷ÂÛŒHÖbÒöl¹”­þùë{;‹pfB Ó¦DDDDDDDDDñºs#Vj½ Æáàœ _©Ÿ=¤œ³“•È ?|ÚÜó'cɉ|ÞÒµÀÃ:Ò»gûUÆk S:{¾Ñ}Ñëõص{/ C»¶/%Ќթ+û`zbØ3”x§FªB½ÁX­èçjƒJ¾¶hZNŠú¥¤±kÑ[‚¡&Ñ+¦T*qáâe@é’% ½¬¹×ü!‹Ù°Dyø¾ƒ¶_IÇ“D-&oOÀܾ^l”ÿ0™Ê€o6Å>oኚÅmßèþ;~‘QQ€~}{¿ôí{;‹0°¡36tæÉ'"""""""¢wŸOô’“S P(ò\gþÂÅHKK4oÖ4×ãz½±±qynãÄÉÓ8qò´Õm‘9[Ö ÷ƒ­KO¥âü#%å?lêÎD¦hQ·¤~ìúf«4Õj fϨW·jT¯ÆDDDDDDDDD”œS“òsjævüÄ)Œýz<ºtîˆ&M¡|¹²pwsƒH$Âã°0¬XµÿnØ(_®,öîÚ‘È|î2•J…ªïÕA»¶ u«¨T±"|¼½agg‹Ø¸8ìÚ½³ç.€J¥‚T*Å=;P¼x Ÿˆè- Vk Õj`gg‡Gã§_Ãñ§ ‰°iý?¨Y³‰ˆˆˆˆˆˆˆˆÞJœS“è-“˜”„«VcŪÕV×)„%‹æ 4³¨ÕìØ¹;v GG,˜;‹&Ñ[$ôÁtèÜ9G6qü× 4‰ˆˆˆˆˆˆˆˆ €¡&Ñ hP¿.æÍ™‰“§Nãöí;ˆŠŽAFF\œQ¡By´iݽzv‡T*µ¸ [[[¬[³Áõ7Ô´Thµ:899¡dP 4nÜØÞÞœ Ç~T(È ù¢²¯lÛR©ÅŠCRRlmmQ¹RE :¼ßš}šÞÙ랈ˆˆˆˆˆˆèUàð³”o~–ˆˆˆˆˆˆˆˆˆˆˆˆ€×Ÿ ÙäDDDDDDDDDDDDDT”1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDDDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDDDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDDDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDECM"""""""""""""*ÒjQ‘ÆP“ˆˆˆˆˆˆˆˆˆˆˆˆˆŠ4†šDDDDDDDDDDDD,_ ‰ IDATDT¤1Ô$""""""""""""¢"¡&i 5‰ˆˆˆˆˆˆˆˆˆˆˆˆ¨Hc¨IDDDDDDDDDDDDDE𠛀ˆˆèå2 Ðh´ÐêtÐéô0 0 ÿɶ‰„°‰ Û@ ð¼Ð;w}ñþþOìûDDDDDDôj1Ô$""zIôzTj5Ôj #SVx ×ë¡Ñh¡Pª ‘ˆa+‘@(ð¼Ð[}ñþþOìûDDDDDDôz0Ô$""z ´Z-ä «òA­Ö@£ÑBjg ±Ø†ç…ÞÚë‹÷ö}bß'"""""¢×‡sj½ •Zƒ ¹’_ž€Á`€\¡„J¥æy¡·òúâý‡}ŸØ÷‰ˆˆˆˆˆèõb¨IDDô4-”J¢”*54-Ï ½U×ï?ìûľODDDDDD¯CM""¢BÒéõPðËó¦Pª ×ëy^è­¸¾xÿaß'ö}""""""z3j’J¥æð†/Á`x©Cò¼Ð«¼¾xÿaß'ö}""""""z3j‚^¯çÐv/‘Z£})5ÊV¬†º ›âãAÃöä /€WhÓ–m*SAe*">>>_ÏÑhùåù˦վx?æy¡Wy}ïÚuξOìûDDDDDD” 5é­3`ð0SøPÐÿNŸymû¹}Ç.ÈårlÛ¾jµ†'î%ýÕXLš2 ׮߀\.‡J¥BxD$ââã!‰Þúã[ýÏ: < 'NžFjj*4 âââqéòx{yñ(b´Úw£òcÖœy¨^³ª×¬ƒ»wï½Ñ})h(!“e Eëv*SóüñN—¢êãUÉð΋Þº}Ϻ¾&~?Ae*¢{ï~ÐhÞÎ÷çwí:gß§Ç3à;>þ¢Ù÷‰ˆˆˆˆˆÈ*†šD¯H›÷[Zµl‰DüÖǹó0gÞÂ7Ìž9{{öî´ý  Μ:Šû·¯ãð=˜6eÒ[ßFé2¦Ï˜([¶ öìØ‚Ð;×qæÔQü³j9¤R);UÃáì^E›l.¼I?LÃã°0”)S#?ÁóBùº¾Æ;ÅŠÃåËW1gÞ·òýñ]»ÎÙ÷émêûDDDDDDôæØ° èmóËOÓ‘‘‘kù†›±bÕjÀŽ­agg—kÀÿ×¶ŸŸŽ†Á?†­­í[ÝÞ,þ §Ncİ!o4œ=vü$ÀÖÖ3~ýÎÎ΀2¥K½mrr¹0iâxT®\ àçë ?__vü"È`x7¾@¯Z¹2ºuí pquykÚô̹óض}'`úÏÓL}¯0çE§¶]S`ënDj¬ÐC* ¸» KÚb@}{”õzþG¦x™KOËpðŽ áÉ:ˆ„ø: Ѧ¢-5p€¿kîŠòØt=jü[ ý]ÐÇ=ß³üC‡‹OÔX¢À…05¢ÓtÐê p‘ QÎÛm*Ø¢]{8Ù½Úß´©µl¹¢ÀÎëJÜŒÒ E¡‡‹Tˆ >6èQCŠ>µí!à•´g~®/g''Lþ~6ø°Ž=:T±ƒà9ýîÜc5þ>'Ç…'jÄËô /'j£o-)š–Íû3mª\Bä8tW…{±Z¤«ô°—QÜMˆF¥m1°¾=Jy¾þÿý|Ù}ŸˆˆˆˆˆˆÞ†šôÖ ð÷³¸ÜÓÓÃôw™Ò¥áà`ÿÆ÷õm4e² œ;R$ö%"2P¼x )Ð|—Ú(2óø Jf IE›ÁðnG›6­Ñ¦Më·®MgΚ ¨S»jתYèó’ªÐcàßÉ8¦6ïÛ*nGkq;Z‹Uç2ðK|\ÏúûÊ©PF¬KAŠ"g°b@ºRûqZü}^¿¸¡A)‰Ùó$6‚|í«Zk<8K ÁLÞ•†egrÿè'1C³Ô8ûH¥Ár¬⎠ޯæ#`TŠV'ãV”&×>?T#ø¡›®(°f ;l/½=ó{}uh×3fÎAxxæÌ[ˆÅ ç½Uïoúþ£×ë±qÓfÌ™·†—°3o¢ï¿i/«ï€F|öo2vÝPš-NÓ!:M‡c÷UèPÅ}è‘°`÷§IZ¢<\¾r—¯\ øøÃÚÖè ©¦@ó£ºöXß%ÜEHÎÐãh¨³§#^¦Çøí©x/PŒ*~¹+òîÅj1hM2äj*û‰1©êI ÑpòßïLELš£þMÆé±^faž—“O~òyî~þ{QŽ1›Sáã,D«r¹0ó×)™)hVÖŸ5u@_1lm€ðd=6^’cÉé D¥ê0j}2Ž~U쥟´Æh ÀðFÞȾ."„'k1ë° ›¯(pö‘㶦bq?W‹Ûy‘öÌ/¡Pˆþýú`úŒYØà"£¢àïç÷V¾?¾.ÉÉ)ˆ‰ŽFð¹óسw/=z ???DEE½•}ÿM{Y}ÆmMÅ®Jˆ„ÀèæŽè_Ç>."øùÇòÜf‡ÎÝqëö”.UGîŒýf¶lÝŽR%ƒpôÐ>‹ûвEs¬Xº±±qXº|%ŽŸ8‰ˆÈ(ø£yÓ&1l0гþå³^¯Ç†›±eÛÜ}•R _4oÖŸ__ >GÇü¹3ѹc‡ç¶Ñå+WñËôßqñÒeÓ²ÊÕk™­óûo¿ WnfË :ŒmÛvâêõëHJJ†““#ЮmôîÙîînù>WqqñX³v=<Œû¡¡€K—¯ ¨LEÓ:ÇÆw¾1ý;#CŽ}âè±ã¸qã&ââ ×ëáééšïÕÀà›Uvä¤ÕjqøÈQlØ´?FLŒqX8¯bž¨\©Ú¼ß ­[µ€³³s¡Û('FƒÖý‹#äÂEÓò2ªšþ®R¥2voßlö<¥R‰õ6áÀÁøwÿ>d² xzz t©RèÑ­ :´ogu(Ĭërò÷0dÐ$%%cá¢?qèðDDFÁ`0àäуhÞº-ôz=ÆŽù£?™k;jµ5ë6€L–±XŒ+ÎÂÑ1÷¥K—¯ÄϿ΀@ À• gàêšbܺu»öìCÈ…‹xøè1d2¤R;” Âï·ÆÁ`oo_¨>¼xá<´kÛÆôœ´´4,]¾ ÆÓð…øû£c‡v:x $âW7täÎ]»1iÊT´nÝßO˜€ùçÏŸ‡««Æ3M7Æ›7ñÛŒY¸ OOOŒó%Zµlaq{7o݆›qåê5ÄÅÅA§ÓÁÝÝ U*WFßÞ½P¯^Ý<÷gÂw“°wß~‹mX÷*T(Ÿçó ŠkׯcÀ€0ö«/qõÚ5¬^³7oÝBbb\]]Q¯n|úÉ0,þJÚ4kèIww´mó~¡·s9\Cw•M#;`jÇì*p';!yØ F€íÿH€Þ¬» Ç/]rÑ;iWäj*úØ`û'pÌ ÙìÄt¨b‡î"ô\š_g܉Ѡv‰‚}™™¢Ã”Ýé€_»ºÀÅÞ¼ÔJoæ—š”±ÅÚÁîfÕX•}…˜ÚѰ48wb´¸§E9 Cê¦)õ˜L†}·TˆHÑÁ^,@9o>¬m>µó®®ÚyÝ8|/|÷>kîhz,Èà ú¸ÂÍ^ˆ¥ÁØ~MOš8 F€øµ·g–Þ={`æìyÐjµØ¾c7>9â­yÌ÷µ…»Â`0 Cûvøå§iy®¿wß~LøÎ8Oõ“¾G·n]ÀØç 5[·E‹føtÄôé×ÿµ}†{Y}?û¼{n*±é²qÈÖÄ =l…(á.B›JvÖÐ.Ò¼‡k¾¡Æª³ „„©“9äs1GjŠ1¸¾½Y¸Wàó÷œ¾!ajl¼d¾~vô®•ÝOK³Á¬®HWp-R‹Ðxm®ç«´Ì=f 4kJðïw³ Òv•mÑ ¤­ç' 2E‡µ!ò\¡æþÛJ$d+4çöpEÃÒæ}²¸‡ –öwCµŸb¡Õë/*žj>Œ×bá N=P#.]W©õKJ0¦•*ú¼Øÿ¦ïQÑÀP“þ³âââ!—Ë1üÓÏ|æ¬ÙcåÊ–A‡öm±eëvìÚ½“'M„­Äò—/>­Ûw=ºw-Ð>ƒ«VãÏEóó¬<ˆ‹‹Çã°0|4`("sTÙØÛÛ£xñ@T¯VW®^Ù³ç,†šÁgÏš®YFƒ“§N£}»r¯—Ù·ªW«jhnÙºc¿™`þ†dc™,7nÞ›·°{ï>lÞ°ÎbXú¼>cþÜ{÷C1`ð0ÄÆÆ™­sï~(îÝÅ–­;0òÓá¯ì^“5 µV£Á÷“§àÂ…‹ÐêtÉ"0á»)ø÷Ÿ¿ñÙ诠Ñh R©‰ ßM¾=;ááîn¶­uÿnÀo3fšþíêê¡@ˆ¸¸x;Ž£ÇŽãóQ#1|Ø«û#•Jáä˜6iu:S%t~Hl!”R®Àö;1õÇŸa0àââ N‡„„ìÙ»'Ocý?«øÒÛ4ë|7hPâ¤/„©!+ Ÿý’>K1*xÛàNŒâu¹ïãñZœz üØÉÅÀåTÅOŒ»S¼ µ0fs*Ò”zt­.EÛJ¹ç‹ÎPéñEsG¤* h]ÁÖâð’P§„Kƒý6C{þÁd¹]þLDhœ1øp‘ áå$ÄÝX¾ÚœŠ«ˆ„ÖÇøÜÛ{:1¢‰£ÅuƶrĆK ¤)õØrY‘+Ô|Õ홓»»ªV©Œ+W¯!øÌÙ|Eåý1¿üýýР~=œ9{GŽCºLfÖÿŸµmÇÎÌ÷$|ðAvh(àäè??_Ô«W´i*•+#!!áµ~v{Y}>Y›búaƒXºÙ Y®ÇõH ®Gjð÷Ù ¬쎪þ–_kÙ™ LÚ™–}MÙ ”þÞÒaß-%¾mㄯZ:¾’¾Ë3+,ëIÌÍœ–ô·˜ßŒÒ@©1öëA ì-‰ëj/DÛJvX~&-£iÊìûB_Ëÿ{éf/„¯«áI:¤)¬Ï*ž¨Ñe2Ò•z¸Ù  /Óc× %ÜQáŸn/¦ïQÑÀP“þ³âââñÝä©>s ÔG¿¾½€´´t”)] ýúô–­Û‘–žŽƒ‡£S‡ö·³}ç.Æ/üºwíR }ÀÐ£àææ†iS&¡^½:prrBxxDfåÙ&$&%áûÉÓ°võŠ\ÏÿnòTS Ù¥SŒ>Å‹"55 ÁÁg0gþB >*•ª@ûõù¨Oðù¨Oð÷굘2í'À¡ý»­ÎSªÓéðɨÑ8{.B¡ÆB÷®]àïï‡ Y·\À¬¹óñôi8 ÝÛ7£lÙ2ÏÝÍš"øäÀàaŸâØñ¨Z¥ ¶l\gq}@€NÚáêµèÙ½+6¨oo/(•Jœ;“§þˆ§OÃñãO¿¢}Û̲ù áú›°•HðÝ„oо}[x¸»C­ÑàÁƒ‡8~âB.\@Çí ÕF–¸¸¸˜ŽoÉÒøå·ß'Ž€Åkö£C˜WWWŒùâs´lÑ ®n®HHHÀÁCG0á"ܸy  Ãî[ •J-¾vØ“§6b¢cbЧW´ýà}¸»»C&ˬöjÜW®^ÃåËW¡R©rÍ{ðq¿ÝÝÝ””ŒCGŽæ 55 B.\4mÒØì±Ö­Z xñ@|Ц5Ú·ý•*U„­D‚èè,Y¶+ÿ^ƒ»÷îcŪ¿ñÅç£ Õ‡ã¼wC‡Dll$1þ÷ÕèÖ¥3ÜÜ܃‡cöÜù˜üïîV$` ¤`ßÞ]ÆûEÏÞHNNÁØoÇ£VÍ÷0cú/xú}?•J…ÓÁgÐ¥SGÓv"#£0sÖÀ{5ªãç§Á?sŽáè˜Lž2!.bá¢Åh޼ʖ)mq&?“¿Ÿhú÷éà3ølô—ù>‘ÐxmÞ»Š;w¡_ŸÞ6lÜÝÜ R©°ný¿˜;!ÒÓÓ°ø¯¥Ï­ +¨¤¤d<Êü¡FZµ^h[Ÿ4qÄðÆŽH–ëáá`½K£3~ao)`Û9‡Ÿ«J¿üáW“ãÔÜíø©³åù„ì„ø´iÞ¡‰Á¸“½¯•}r‡4?îK3š¿usAÿ:ö • »n(0fSªÅ60½§%ƒŠÊ~bˆEVî{öB4*-Á¾[Jœ{fÓ×ўϪS§®\½†+W¯A«ÕZ¼÷Å÷Ç‚èÑ­Μ=¥R‰C£»•`EFF!$ä C»vf•òÕªVÅé“ÇÞèç¶—Ù÷àÛm©8tW ±˜ÚÑÖ‘Â63л¥Ágÿ¦à~œýW&áÔÿŠåª’ OÒá‡ÝÆ@³n {»!ÐÝxáG¦èðå¦?Tã·ƒéø ’]« óÓ÷µzàÐãgH•ë!•ž{t°Í}¯¬˜}?9ÿXƒv•sŽ©r=bR? ©(Îã=F€/7¦¢a)1~ìè‚@w àÐ]%FoLEšB¯6§âô¸bН­ïQÑ dÐUTt4¶m߉/>…ukV¢S‡ö¨Q½š6i©TŠÚµjš‚‘Í[¶YÝÎÎ]{M7„OÁ*G ¶lX‡îݺÀßÏÎNN¨\©"¦ÿ<Í4|f𙳦Š,wîÞ3U1véÜóæÌDåJáäèˆ?ôéÝ[7­‡X,†^¯¥m¹mÇ.œ=˜öÃ$LüökT(_NŽŽðññF—αmó¿ðññ†J¥Â¸o'¾²}ùzì¬]½ݺv†··ÀÎÎÍ›5ÁŒ_¤Ëd¸pé’Ùó²†íÚ¥|Üž°•HP¹RE|6rþ^±ô…+C^ÄŒ™s˜±XŒukVbà€þ €“£#Já“áC±jù<|ôsçÿau[ûÄ“§áX¹ì/üöëOhѼªW«ŠF š6iP©Õ¸tùJ®ëöðᣀÁ?;~:yÛ•«× —‡ÄkÖÔ<ÔtqqÁÉ£ñÝøoð^ê¦Jh__L™4õ3‡P=rôx¡û0ü½f­©ªõç§âÓÃàíí‰DŒ? 4‹Î+pð_¡ñ­6&&÷ÿîîpwsCƒúõwïÞÃg£>…X,FÅJñÿöî;°©² ø“Ù6Ý-«… ¨ldWöÞ»,AĽ>'~"ˆ{ò¹EDPdBÙ²¡ìÙ"£ t·éLšï›¦+IW žß?Vr“ܼ÷=oÚœœó6±¬;W¯\-õ8{öñ[o¾aMh@Pƒ˜÷î;Öj±;vÖÞ/bá9Μ=‹qcÇàµW_A€¿Päææ†Óµ¾¶²•iÎP´ŸtìØ¾æ¯G‡ Íó)Åš=š–ÿ þ¬¥ÝjQÅáêjŒù1 -æ§"ìíTD~š9Ñy¸¡4VùܲT&|´]h=ùro‡çi‹É d˜°5Nƒñ?gaí©BxÈDøz¼_¹j¬ÜBþlÙ°÷Ù¨ä  BÆBÛݲí‰kƒD"Á¬™Oع.‡Ź¹¹åZk×Ô›7­?‡††Ôêk,Ô›ñâš@# &´/_ù|%Sˆ±  f-ÏÆ æâðUÌf!9p-Ë€_bTèýU†µÍee}º=y…&„J1­‹g•îÛéãt4|3m¤á±ß²q!Õ€ ØùBrûÝÀ¡+:, šqílW|Mì °[ a—ÓÐìgP®Y’Zƒ*ù–§-!!ŠçÖ›wåû£L&ÃÈ‘BÕ÷é3g‘x=±Ü1&“ ,ï1mÛ´±¹ÆÜnÎŒý5§„¹ ááN¶ç{ˆ¿Ã[ -_7œ-Ÿ”œÙÍ óàÈ«uÑÂFËÕFþ„ú ÿžXÅ$|ecÿJ‰V°7s ðu~=¬FJ® ™¹…&ˆ×áÙU9˜ºDim3[Us7æ!%ωx¾íªðo'ù᥾^ÐÍÿs†®Ÿd Í‚4<ôiNÞÐaB6=O7Ç–uó´¹ÖŒnëa½ïÞxKÇ>Õ&5éž6uʤRû`•5nÌhÈåB¥ã_ë£ËÝ^”dòöòÂàý«uÝ»EÚ½­ä¾€e'N Õs-[¶pX!ZTyW[4uÊ~}û8ÏúYÞµ{Ï-¿Þ2™ r¹ÌzÞ%#$Ož<±ã'c÷Þ}0›Í.3WO> ½^¨`êß·Ãc‹Æ9K©Ä¹Ø8ûóÿáIvo“J¥ˆŒì@ØC®¤mÛw"»v†¯¯/:YªvþSº5aQ•^·n‘H$Uz½EmË^§ªÄ°Z­Æåøx@ß>½Î͇"»Þ’ëX¯nëÏnîBÕ_ÀÀRǵúÕëË'¤=<<аĺP–§BHºij±ò´H“ˆÆð÷÷³y[ÉýS5ZSŸ7;;Ç:Gí XSZ3¦/ÍÆ¹$=ܤ"|?ÉÏæñù–½ä6œ-ÄÖ8 ^îç…ØÿÖÇ¿sëãò»õ±p¼/|<ÄPë̘ýG®gUîK7³X~L¨t~¾·§ÃdbeHÄ@¡Î„lµí*ÊKéÅçÕÒΞx^n"4©c¿EãÀæÂÜÍ)4añAÛÉìmç5Ø_ï õA«`™Ý5¦yî·´ÙÍט¨4X˜”^*µIDAT«»ëyIâ/\RqËØ®á¶[OË$Àõ…翜溱ODDDDDDµ‡›‡Ð=­ùý÷;¼Ýß߃ ÀÆÍ[°æ¯õ˜=«¸*Éh4bÓ¦­€áÇ–Ûs°²5´Ÿ (Ùê´l Ù¤¤d@Dx¸ÃÇ mT«c˜––n­Œhìø\êÂÇÛyùùHMK«•óÉR*±fí:8ƒ+W®B™ÂŠ۾E´´t|¹ðkœ=‹?‰F 1aü8Dƒ  ·u®]oˆˆp<ÎK\Ûã`·B¸Hîݰ}Ç?8söT*µuϸ;„Ö³½{õþÛ³ŠÁŽ»0çÍו¥gΞôêa»tÿƒØ´ebcãp3)*•ªÊU²Žb8-=Ýš˜.9&6ã$¤Ñ-¹Ž^%>ˆ/Jp”[;¬‰ò‚â¯õÑØ³w’’’•¥¬0ñ[[J&.Ë‹Kd œü倎Ïþž¿¦n(xt™ÿ¦àå&¢©þèfûCöB½°6g˜ðé_LíR\õ%—Š0¡ƒ¡RŒù1 j?PãýQ>žÃ·{ `0 ‹Qí«¾W^ô“ÐÍHË7ád¢ž*ÄÆsl<§Á¼á>˜Õ½tõW–%ñ “~ ûYž@/1`gùÑÆßì-ÀùæoÍGºÊŒÇ"¨ç-ÆÍl#þï_<·²›Øp¥÷ǰÐ0tìØÇŸÀ¦-[ñÌÓO•ŠÓu–/ny{û`ÐÀ.ù;›3c?-_¨œ<” CÐ)•¾O„[é «Ö™±ü˜ÛÿÕ QiDf¾ÉÚ¶ºªûEñ¾"¬ž÷âë(ÅÒGý1þç,ˆ×á·£j¼ØÏõ½+þ^k¡ÞŒVç`£eŸÛ7y—[7JziMV/„·»óGø`hKwÔó– @kÂá«z|þO>>ß™õgÔXýD ‚}ígkCüíßVÏrîJuͶV¨ÍØ'"""""¢Úä&ÝÓ|}+þ tò¤ñظy âãpúÌYkÍc¥TÆ­~Uƒ‡‡{µî§V ßšWx:þÀËS¡¨Õ1T—HícèˆÂS¼ü|d+ÿÒ–­ã?¯¿eÝÇ1¤QC<Ø®-¼¼ÁµÄDÄ'\AÓ&8zì˜õÃüžeZÜæà™ç^ľý{žÞ׬)­ ¾øøxÄ'\©Q «Õ…•Ž…§ç-¹ŽRiõßv“SR0û©ç¬­#=<<ЬiSøøx[ç÷©Ó§œÞîÕ.‘è¶ÄBѼKj§ÙÄ¡+:Ìü] ¥ÚŒ`_ –M°[¹ ¹Ùj#‚}%¥p%um,Gd„1WtØs¹â*Ú| ž*Þß²:UšÁ~ÂÂ.ár<ÙÓ ooÈÅ’5ænÊÃ!2t*‘¨-JĸI_WGUVR1ðËTLú%ײ øa_~ØWPê˜!-Ýѽ©s¢…Š1owq­§#b±"‘f³£Ñ©sɕޡûÄñã'šš†#GZ÷¾ÍÍÍÁž½{#G «ö—´î¤ØWk…„˜»LÊ=ž¶Ìwnnf1q±ÒÚ2Y!¡y|=DXö>rM‡|Må“oU}Oyq<Îîá]*¡YÒK}¼q > Fp(A‹1íÏǤ#fü&TªË¥"|åëð>kObåq἞⇞͊ç¿BŒ!-Ýг©ýf"!Àw6æáç©þÖUûëLÑ¥­aò¸6cŸˆˆˆˆˆˆj“šDˆìÚaa¡HL¼Žµ­·&5‹ZÏ6Gû{5Þ* äTX…XÛÔ”ø¦»Ê’LtDeI¸xy97‰téòe¼ðò«ÐëõhÛ¦5>ûø4³±'XxÓæ'<, ï¿÷.Þzã5lڼ˖¯@\Üy¬Þˆ}û`íê?и‚êØÛ=Ϊâ¤VMÆ944¡¡!¸~ýbŽEŸÞ½°cÇ?€Ö­Z¢ap°5"‡ãÊÕkøg×n4mamYÛ´I‚ƒ‚J=ßžý!‹ñö[¯cÊÓà&/]÷åÂo°ðëok4f Eñ°Ú Ú±µöuesßÄ뉋Åxó×0jÄðrɇ “¾-ûÕÞJE-o³³³þؿĨðÎÆ<MÀCMäø~’¿µ*Èžº^b$åQßÛqöáúRÄ\Ñ!5¯â5yýµÕ夎ÎùbŠX$´Ž\{Zƒ¼B~;¢.•Ôt·$ tœžZç8‘(ÅÎçëà×¶ž×âF¶î21Z4`|{†¶rÇü­Â~±¥‹j<ÉÎɱVt;»ú×UÞ‹ôë×>†¼¼\DGo²&57mÙNX£ÆŽ¹'bßÓ] ¥ÚˆÎar¬z" Zñâš\É4@,>틉í=à.+=¡û/Ì@\J哚Uý:^ÅëS_ûkUQKXHÍu3‡¯ê0ó÷ldªLhä/Á¢)þh×Hæxí<$Ìï¡òR ÍRcî&BT{|¾3›c5ÈV›ào§*Ü`‚ݶÀZË~½eÇÚ•bŸˆˆˆˆˆˆj÷Ô$ª€H$ÂÄñã›¶l…Á`€N§·&wÆ}[Î+¨ÐõúõËÌ̪Õó¨S'ÐÚ&7>>Áá±ééÈ/ªvBœÜîsåª5Ðëõ‹ÅøáÛÿÙLhª+ñ¡rOO&NˆÂæèµXøÅ§ËeP*³ñÉg_Þ–ë\œŒOp<Î%+CÕlœ{vï8rä`סš§l{Âþ–ªÍÝ{öbŽî_¦õlNN6mÚ6Oš…ǦO+—Ðu¡ºÆcV·NqUmbq’‘‘áÒëPzzŽ;.¬9cFcBÔ8›ÕT¹yy¸Ûµ½ÕéôP©ÔN{Üù[ó1'ZHh>ÕË «¬0¡ Í-UœEí,í‘Z²w•ÙO®¨Ýc›†2‡m‹ü›jÀOTø`[žÝ=3! jy¼Ù¥Ï×ÏSx­:ƒ¹…öãFNÅIDO7žéí…MOâÌœú8òZ],™€¡­„ÎG¯ û¶µ‘(©ñt$[Yœ ópnbÃUÞ‹¸Éå1lˆe-ßc}¾èè €ŽÚWتûn‰ýF–Jæ¤Üêí˘’gÄÁaOí¬À£]6“lÙ…U«&¬jì·hPCiyöã¶d¶ÌA2pK¬~ÎB¦Ê„žMݰý¹:&4 Q)ŒcEçܰDâ59×þùfØÿ¢×YÇËucŸˆˆˆˆˆˆj“šD•0>j,¤R)²³spðÐaŒ‰A~AD"Æu[Ω];¡bô\l²ìtâä©j?‡DZüá”^¯³}ŒD‚Þ½zvîÚ]nïÏ’¶mßaý¹KçNNë7„¤UPƒv÷¿<{.®Z=jäpLš0Wå1r†ÛµµV©íiiÏß–qV(hÕ²Ež·G!©w™YYÖ}2*ÔÐOHj?qiié8þ_@¯ž=J—””l#>h¿Âù\5¯UI^^žhbù€~ïþ=vü¤K¯A)©Å{¾µµT‹—u-1©©i¸Û}¡’’“jüxf3ðö†<|¿·1ðù8?¼3Ä•ípÙËR•”œkĉëö×€×…J¸&u7ÉÈÓ˜sE¨,îwåڀƧ0wS¾Þ£ÂþxÃךb©ÒòS”NÜWâ¼â’m'znf‘\ARÓl>ö\J7XÇihK÷ZÏŠÜH*žC ê׿+ßKkù"–V«Å¡C1ˆOH°Vw7öž‰ýŽ¡B¢îj¦iùö¯‹ÁÎM%ãÀÞ~» † 㥦±ì'A³zB lÝ‘gݳ¬µ§ ‘¥<²qé¤ÉCMäÖV°«NÚNŽütÐñ~­‡¯êÐø¿©hÿA:öÙØëRoÞXŸ hè'Á€ænµ>ž9vì@&“¡MëVwåûcIM›4AÛ6E{ƒ®Ý{~~¾èß·ï=û;­]Mfà‹ùv›¹\‰nŸe`ILéÊÐ’{ÏæÚÙ3óƒ¿óKÍýŠT'ö`ŠeÍÚsYk3îLfà³¹øyˆÑ%¼|vÏe-ž^‘£ xº—'>ëg·ý«-]#„ó=q]ó)¶›F°5VX[B$hèg¿ªsùQÛkж¸âö¼}ïw«µØ_±r5f?ý[ˆ­pâºg!抌|¤ÍvÎÏŠ9*´Önݺe¹õêny,k¬¥ÃÄ¡C1ÖßgF ¹\vÏÄ~“ºR̈ÖýeGÔ˜»)¹%Z7_É4`ö9اŕLBüKÿÉt}|=„[~D]ªes®Ú„çVå >Ý€sêbš¦ :ÑV'ö`F¤'î³Tk>þ{6–Q#Oc‚É œKÒcìY8m©||©¯—õ E”jž^‘ “ˆŒãíÁ>Uϧ{zÁM*‚É,œÃÁÌ%^ïÍl#žZ‘8KÂó•¾^åÃd¹ƒLKÔáÃmù¥¾ qâºoE _Šh(EÿÜk%öoܸ‰7ßž‹mÛwàµ7æàÆÍ$‘ërˆ*§gn •«×­-m%wn¥O>Z€ôŒ œÊ´dŒzÐɹF|ôw>v_Òb÷%-D"”úP?ØW‚¥Óü­míIÊ1Ybò‘Túµ¼ØÇ Ê~>¤ÂÅ4žø=ÛæqÁ~üúˆíó˜7Â'oè‘”cÄü­ùøp{>|ÝÅPª…É;C¼q!݈¸d=Ì(Ÿ”Šï&ùaÂb%²Õ&Ìþ#ÇúZŠÆB.áÃQ¾ÈÎOGrssqö\¬0§ºv¹kßË4p>ýü dfeY×늾¤•––Žá£3ï½÷±àƒKýÛ²_£y‹æ.û0w˜²T&l8«ÁOTX£B°¯ù#”ja²IÄÀ;C|Ê%Ðdàµ^˜‡ itû,íCä(4˜pçOSü­_‚„–¶?OõÃ3«rq-Ë€¨EYðq£®·…:¡tÑk{¹Ÿ7&v,ÿE¢¢*U/7>ã‹Ù+²ñí¾„úKa0›qCiù}ÎM„o'ûB&A­Ä¾ªÌþëUÙˆˆˆˆˆˆj“šD•$‹1qÂ8|¹Phõ:lè*UuÔ¬^ñV¬úë¢7àò¥xhuZÔ«[=ztÃS³ž€‡¢fU,ÿó‡‡aÕŸk‘på*Ìf3‚ƒ‚ЬYÓRÇ%PÇŽ‰•«×àì¹X¤¥¥ÁÝÍááaèÓ»¦O›jÝÒÙd2~_ú ~]úÖo؈„„+‰ÅBná©Ù³Ò¨!bãÎÛLj~õÙÇX¿qöí;€k‰×¡R©  •!mZ·Â¨‘Ã1xЈD¢j‘34 ÆÚÕ`ã¦-øk]4â TfÃÇÇÍxÇFÔ¸15n;[RÏÝ­ó¾ap0Zµji÷87¹ZP‰Õ«gw›ÇõíÓþZï~\„Ç"'7>>ÞhÖ´)ÆGEÔØÑ0›ÍP8©z²u«–Øù÷f,Z¼Ûwþƒ›7“ ‘ˆ‚‘#†á±éÓ “Éàææ­Vë²kФ‰àëç‹åËWâr|<Ž?Ž õ1yÒ<2u ê¢aÃ`\¸x»vïCBÂøx{[ïo6Ûo][ÄÖ‡·zle;fÔ¬ýk=223±cç. <°ZSÔÆ@…UT%ÇÑ–ç{{¡{9~Q#æªéù&¸IEˆ”`H+ẅTT*—c©øòvC$ªük‰€÷Fú`l{wü~DÃWõHË7B«7Ã×CŒûH1¨¹;&wô€·óò‘àïçê`á®lûWƒÔ\#Œf3"#äx¢›'·pÇ;óZƒíhÛH†Ý/ÔÁ’v\Ð"%×ÑŒ>ôj*ÇÌîž•ÚÓYãéÈê5Yç÷èQ#ïÚ÷Dz<<<0dÐ ü¹Vh­Ù¥sg„†„V0ïÍÐé¯F£±\+wÌ.û€ÐBöLJýÕ^ƒ•Ç qêºɹHÅ"4«'E&n˜©°îYYÖc‘žPˆ±è€ÿ¦êqðŠ ý$xì!žìî…zÞb„H›¬Ç¶8-.¦éáë`ÉêÆ>4ò—`çóuñkŒ Ïi‘i€ZgB]/ :…É1=R®mïýY 5•Zß*sÅl5èÿ€;¼"Dz#j쾨EB†ײŒð ãÙ%\ŽG»*ÐÊNµ·F'<¨—»Ã[»cƒ_ ~اÂÑk:(Õ&Ô÷£GS7¼Òß áÒZ‹ýûïk†áÆ`ç?»1h@?ÜW ¿ËQõ‰Ìf³™Ã@•qö’°ÿ]›ûÂîÙ1سw?¦?> °fÕrtìÐÞåÏ955 ]»÷|û¿/1lè`Nf"'ÈÍ+à Ô_¯ 1›Í2|4.\¼„È®±â÷¥¼.T¥ùe6›Ñ§ÿ\KLD¯žÝ±ô—E\ûÄØ'"""""¢*ºÕy#î©ITë7û*†……Þ MÈÌÌ´þìããÍ‹HDw<‘H„×þó æðQœ:}†ƒBU²í︖˜‘H„ÿ¼ü"„±OŒ}""""""º0©ITIYJ%¶nÛ˜l'2‘“¨Ôk…9‡T*…§Â×…\v~qýaìcŸˆˆˆˆˆˆŠÝ꼑”CNd[÷^ýQ R¡dÞà€~˜ùÄ —9G³ÙŒƒ‡bpðPŒÃã^záY&4‰œý*ƒŸŸ;Ly]È•çׯ>1ö‰ˆˆˆˆˆè6þÇ! ²-$¤âáaá7vŸñ(D.´iÓg€›·âø‰“¸v-YJ%´Z- ¡Sǘ2iZqÏ "§“I¥Ð@Çpò˜ÞŠëôF û.”òQP­Ï/®?Œ}bìÑíÃö³Ti÷ZûY"¢Š¨ 5ÐëYä 2™ w^rùùÅõ‡±OŒ}""""""Üê¼{ñU“‡»›KUoß©D"<ÜÝx]莘_\ûÄØ'"""""¢ÛƒIM""¢jâ¦ÎáìD¯ ÕæüâúÃØ'Æ>ÝLjÕ€L&…»›œQMînɤ¼.tGÍ/®?Œ}bìÑ­Ç¿ôˆˆˆjÈÍM±XŒBܪºrD"nJ¥¼.tGÎ/®?Œ}bìÑ­Å¿öˆˆˆœ@&“B"‘@«ÓA§Ós@Ëep“Ë!‹x]莞_\ûÄØ'"""""¢[‡IM"""'‹…ýÜÜÝäÐë 00M0›Í÷lµH$‚H$‚D,†L&…T*¹å{œñºp~qý13öûŒ}""""""ºã1©IDDäd"‘r¹ rÈ8¼.Dœç"""""""r1‡€ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥1©IDDDDDDDDDDDDD.IM"""""""""""""riLj‘KcR“ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥1©IDDDDDDDDDDDDD.IM"""""""""""""riLj‘KcR“ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥1©IDDDDDDDDDDDDD.IM"""""""""""""riLj‘KcR“ˆˆˆˆˆˆˆˆˆˆˆˆˆ\“šDDDDDDDDDDDDDäÒ˜Ô$"""""""""""""—Ƥ&¹4&5‰ˆˆˆˆˆˆˆˆˆˆˆˆÈ¥ýñ¿ÃáÞ¸IEND®B`‚sequoia-git-0.5.0/book/src/assets/github-impersonation.jpg000064400000000000000000012002221046102023000217500ustar 00000000000000‰PNG  IHDRë&ïZ„iCCPICC profile(‘}‘=HÃ@Å_S¥* Š8d¨N¤Š8jŠP!Ô ­:˜\ú!4iHR\ׂƒ‹Ug]\AðÄÑÉIÑEJü_RhãÁq?ÞÝ{ܽ„z™iVÇ8 é¶™N&ÄlnE ½"ˆ„G·Ì,cV’Rð_÷ðõ.ƳüÏý9zռŀ€H<à Ó&^'žÚ´ ÎûÄV’Uâsâ1“.HüÈuÅã7ÎE—ž13é9â±Xlc¥YÉÔˆ'‰£ª¦S¾õXå¼ÅY+WYóžü…á¼¾¼ÄušÃHb‹ BA(ÃFŒV iÚOøø‡\¿D.…\`ä˜Gd×þ¿»µ q/)œ:_çcíšã|;Nã>WzË_©ÓŸ¤×ZZôèÛ.®[š²\îƒO†lÊ®¤) Àû}Sè¿zV½Þšû8}2ÔUê88F‹”½æóî®öÞþ=ÓìïU;r›ýÞ”pbKGDùC» pHYsssÖƒïPtIMEæ3îŠeÆtEXtCommentCreated with GIMPW IDATxÚìÝwxåÚÇñï¶$› i$¡$¡&ô®é¢TEÁ®pl  6l¾¢xQ)‚CT¤†.B ¡ÒH!Ò6eËûÇ&k–l p®ËsÈîÌìÌ3³³³¿}æ~?¯]kB!D™:t¨4ƒB!„B!„¸.êOöVBˆ*z£Õ>i!„B!„BqÝ”ÒB!„B!„B!Dí’°^!„B!„B!„¨eêiõ¥„¢Š6n”6B!„B!„×OzÖ !„B!„B!„µLÂz!„B!„B!„¢–IX/„B!„B!„BÔ2 ë…B!D­Ø½wŸ4‚B!„B“°^!„B!„B!„¨eÖ !„B!„B!„µLÂz!¦j›Á$)„¸ÍO¢¦j\–œ[…B!„âv!a½B!„B!„BQË$¬B!„·¤»Bز[B!„BqSPWuFo¿]±´ÔdÙ;BˆÛRRr2;vîáPh()É)œ8u€ –-ðõó¥[çÎôï×›†~~ÒXBQŽ»BXôõrL&ýûö‘FB!„BÔiji!„¨’’“Y¼ô~ûc“ÍçOœ:͉S§Ù±3„ÿΛÏ}Ç2áù§%´B.\L·ùo!„B!„¨«nú°~ÅÊU|¾h £FŽ`ú«ÓÊnàáääæòËêÿáçë{ÓoÏͦßà!èòóÙøË:<=ܯ:íþÿ0åõ7=ê~^›úòM·­O<ý,§cÎTjž¿ÿÂÞÞþ¦ÙF½¾ˆO>û_ŸŒ{ò‰ ÏyŒÂ‚:uì€Z-¿–¶}Ç.Þ}ÿC²³³+<Ïolbû®Ýüߌ·пïu¯CAA¿ý±‰½{8{6ެ¬,´Z-þô¸£;#† ÅËÃã–Þô<„¦þüï»oåÀ¼¾\¼”W®âÃY3ЯŸåñg&Lâxt4þ¶žúõêÝvû),â(çϧѯOoˆOH$-í-š7¥^q{!„B!„¸5TkZf2™¬þV(•š§"Ó‹ÚSBoݸir4oÖ{Õcé™™¤¤¦RÏÍF6zA+•2|Äíì×ß72cÖì*͔͛×Þäý÷Þæþê¼'NŸæ·Þå|Z6¤IãÆäååròÔi"çÇ+™óÁûÜÑ­ëm·víÞÃïÌàáÑ0õÅÉrÐVÁ“O?Çé3gøûßä3¤âV¤]¸€«‹3öÒB!„Bq‹«–°Þd2¡P(P*•˜L&L&“Õ¿ …ÕÿÿÁü•ý•¿¸ý4aÊ䉴lÑü¦\ÿ™o¿Uæ±5ë×3wþBîèÞ÷ß}[vr5ÉÉÉÅÙÙé¦Þ†í;vU9¨/mƬٸ:;W©‡}BB"_šJ^^ýûöaò„ç­JëèòóÙº}K—KBbâ-Ö«Õj¦Lšˆ›››¼Án°Þ½zàáîN‹æÍe?ËÈ̤ °€¦–Çêׯ‡½½=Z­VΣB!„Bq‹©rXo41–¿õz=F£­V‹B¡   “É„J¥² ïU*•e^¥RiyÞd2a0P(¨T*Ù3·1_}hŒ4„¸¦IS¦¡P(xïíé– ³l‰‹cÖì9xyzòÉGÔ‰õOJNæÝ÷?´üýø£ñÆ+Søõ÷,Zºœ””Tœ jÙ0׬ÏÉÉÁ×ׇž†ûG ãã¹óY±r ï¾ÿ!­Zµ¨t ûY}L^^CæÝ·Þ(ó#ªÖÁC‡pW¯žœ;—tKS*•ŠG-o®ZС];:´k'û©””ÔT¼½¼,¹º¸àZw&LšúŠù<úÖ;~ø±ù<úáÿÉA+„B!„Õ¬Êa}«–-™›Cá|Ú¾ûá'ö<ÈÅôt\œéЮ-O=ñ8m‚ƒ,Ó0pè<=<øuÍJ«e¼üêëøç;udтϬžóÄS$%%³uãkdΜeÑ×Ë Àh2Ôª%ÏŽ{м¼|^}ó-›õßó X¹z-oßNâ¹$4 -š5ãÁûG0xÐ Ët'OÅðÔ³ÏYþ4l¤åßnn®lùý·jÝ–òjÖÏþø6lÜÄÂyŸ Õ:²tù7‹ŠÆd2Ѿm&O«–Ö=2¿ùþG–,ÿ†·^{•ûl”)¯´Ï阾_±’ãQÑ\¸xg''¼½=éÔ±c÷úõ«m{+ºJ<ðÈã$%'³wÇV6nú‹u¿ýJ||"þþ 4€Ï¿ZÌ“=Âä ãm¾Þ”×ß`ÿX8÷º÷Ž9KÈîÝDŸ8IæåËèõz¼==éЮC‡ÞKýJô^5™Lœ:}šøÄsâäèHC??š5 ,wž¢¢"rsóÌ?ì©”Øi4h4š ÕµÏÍËcÖì9W ìK‚úܼ<óòêÌ xÑ’åV5ê]ÍÇàý#†qÿˆadeeãêjÊee™§/y|@ß>–°>;;›EK–óÁ¬w+¼áGr<* ­VËÔ—'_µY=77ê]q,ä°rÍZ¶nßNâ¹dËñûÀ}#÷”J%Ë¿ÿ'OaogG¯wòÒÄpss%óÒ%–,ÿ–={÷q9+‹¦Lÿ<ݺv¶Zž­Z诽õ.»÷î`õÏëYýózËô¯¼ü"cÀž½ûXõó:bãâÉÊÎÆÍÕ•F rg÷®•Û¡²ª» vïÛÏ®ÝD"íÂLF#6dЀ~<öðCØÙY—úúsóßÌúð#Æ=ù÷ Ê’åßðÏ¡#ddf2eò$æñ¥eÚ»‡ßgõ²yï@ù5ëm¹VÍú¿¶lå— ¿sö,EEE4näÇÝòè˜ÑeÆ)Ý~ŽZ-K—˱èâÏ–6m˜8áyZ•s§WTt4«×ýBô‰“äëòððð¤{×.<4zîÖã;è‹ô8t˜ð£GÉÎÉAa·znøøxÓ®ukš7kVfù)©©8ØÛãæê ˜ï<¼ZÍz“É„® £^R¥B£V£Ñh®y ååå1ëïØ—õyyyäååÊ´B!„BÔ€*‡õ>>><õÔ“V½àÇŽÇÓ§óÕ—_0eÊË<öè£Vó´ly„eË—Ó¡Cî¹çŽ?Nxxtéܙɓ'ó?¼a p66މ/O%óÒ%úùѧW/Χgçî=ìÞ·Ÿ÷g¼Ã þæÐÀÞÞž6­ƒ 8JJj*¾>>æ/à‘Ç8v<ŠÂÂBKq1=ƒ„„DÚ×XPâä)^xÙ\¢Eófú˜À䩯òÀ}#mΣÓé˜4eÇ£OàêêJîÝÑåë üèQŽfÚË/àéáÎøgžæç_!==“qO=a©É^5tÿ9|„•«×âîáNëà â9xè0Ç¢¢Yñí2Ë~©ªˆÈH&¾< ½^OÛà`Ú´&//sIɬZ³–AýûU[X_™ýp¥¯–,eŪ54kHpp*•Š» dá¢%lÙºIãŸ/¼f^ºÄ?‡ŽàáQŸ.;Y_½ög:D³À@Z4k†J¥$99•{öp,*š7^›J=׊öûþC¹$´Z|½}P«U$§$““—‹RQ¶6~~>.^D­V£Õ:¢Q«+\Ãæ;o2óƒ®Ø[õZ-¯M}©Nœ|“’“Ù°ñÏ«NsePo뱤”«¿7lü“Æ?SáÞõûöà®^=qqv®üñ;õ¢Šß;»w'_§#4¢øøŠbÚK¶ßÅ_/ç«×Ð,0àV­ˆ>y’%˾!/7¾wõæÅi¯âììLË͈‹K`ïþįųâ»åhÊ,ïÀ?ÿ°jí:||Ð&8ˆÓgΰñ¯ÍÄ%$2wÎlž›ø"—.]¢E‹æ8g^âä©SL}c:ËUn[âÞ»¢Õ:°eë6Ú¶iMÏ;ï°<×¶ukV¬\ÍÂÅKÐh4tìÐŽúnõȸ”I\\Ë¿®Ñ°¾&Úàƒ9“Ÿ_@€¿?Ý»v!7/—è§X¼ì‡†±àÓÿÚ¼ .--§Ç¿€^o yóf¸×¯›‹ Ï?óÖýò+陌{ò ìì̲ƒ½Cµ·Ã?›Ïú_7 V«éÜ¡Z-áG²øëåìÙ·Ÿ…ó>µy :|„•kJ>[ZŸpŽƒ‡sìåh~úæë2Ÿ-¿løy ¢V« Â×»5)çϳuÇN""2ó­·ðñýwžoø‰“gb¨çæF`@´öäé 8w. %Š2a}nN.YÙ9æ:+0¤Á` 33”JìŠCzEÎ¥3ßžÎÌÙs®Ø—êµZ-¯N©çQ!„B!„¸ÕT9¬/Òë),,âôéã,ÿæ[Ú´iÃóÏ>ôiSùý?pvrÂ`0ðõ²eDGGãììÌÙ³gÉÊÊâÀÁƒ <˜6ÁÁØÙÙ‘——G»öí0„…‡“Z|Û÷0kö‡d^ºÄ#£äåÉ-!áßÛ¶óάÿãƒ9ÿ¥C»vxyš{ÈuéÔ‘ðˆ£„†E0lˆùKxô‰“èt:šp66ŽcQQtîØ€Ðð0:vêPcÛðsÌ_ 'OÏ“=by|ÕÏëøìó/leË¿åxô :´kÇÜ?´„tgÎÆ2iÊ4V¯[O·®]¹«W<<Üyzì“lßµ‹ôôLžxø¡ZðÇÿ­bÊ䉖R9z½žwg}Àö]»Xµæg¦¾t}ƒ?®Zó3z½žßWôî°ð6ÿ½•ûG /³¼ÿ­^˯LaÔÈ‘ÅÇUã_|™ãQQ¼ðÒ7jÈ·KYÖñ‹ÅKùiå*V¬Z}Íq$öï‡Z­fËÖm´ âé§ž,3Í+W¢ÕjYñÍ2«ÞÿF£‘ð£GoÈ1Um0íÅéÕóNœœJ½W³x{æ,‡†±yë6†Þ3¸Ì:lÚ¼…Áðæë¯Zñ’sÓŽ!¤gdòøÃcjì3d÷Þ½¬ÿuîõëñÅgóhh~¿ggg3mú[D;Î×ß|ËK_(ûÙ²rS&M´”×Ñëõ¼ûþlvìÚŪµ?[ ,|âÔ)>ÿ9õÜÜøäÃhdîø®€ß7ýÅÿV¯fù÷?òöô×HNI!êD4þþþLÿ¼å®DóõTééeÖ')Å|-ÔÀÛ»BÛž‘‘‰Þ ÇÉÉg§«Þ%SæqÂêßk×ÿZî´^žôës—|3B!„BÔ*åõÌlg§!>!ÏÌgæÌ™œ‰ÅÃÃ7WWôz*•Š~ø‘Ï,`Μùå—_ÑëõìÝ»ÂÂBzöê…†n]»¡T*Ù·oy¹•¿½ú— ¿sGŸþåþ—cc™G#qâÔi¼==™üÂx«Þ¼w@ßÞ½Ñétü±éßÞ¯;˜ƒÑЈpËcaá–'4,âßçÂÌ!M—âð¾ºEDFsæ,<ñ¨u8÷ÈèiÙ¢ìmõ………üöû¼>íe«Þ´Íš2îÉÇX½n]J¥çJõVçÑ·§£Õj-½å¡¥¾Ô G©TZ…RÕéhäqöïkóËùÀ~ýË4kHû¶mÊô¬OIIÅh2á[ÎyþJ%?̪T×wYweIó1R7ƒúþ}û_£¥—;MÔ‰h¢¢OÐ:¸­ƒ‚ËÖËÓòL!„B!„¨-êšZpI0‘ž‘AQa!…Å_ø55é„ìÞØ1cÐ~~~˜0±gï^RSÏßøAK¯¢X?ß©c{Â%4<œ&Mš——Gçâšô;udëöDEŸ°ôÄë\ƒõêÿ]CÅU÷C•6û*Ë­MJeõ­“ÑX¶Wq=77¾þr!¡aáìÞ€°ð0:ÌñýŠÿ±ì«/m†:5vø•³®Vß}ð݃ؾ+„Í[·YÂúÍÛŠÃúâ29%Ò32™õáLF#Ïþg,]»tÆÝ½>vŃòÙÎ%%]»¶©Bj*•ŠÞÞRT¤Çd2b0P*•• ëmó7²üFm:|$¬Êó¶hÞŒ‡uòä =~¯vUUö»­Á‹ÿ}­š?Z±æÇïØ»ÿ û$,â(oÛÁßÛvнK>ûdŽÍY¯4áÙ§™ðìÓU;7VSìÞ·Ÿ_~…——Ó^œHÛ6m¨_¯jµš¢¢"îtO¹çƒš0¶FJÇäÕÚÏúsÃ|§ˆÖÁ'{¥R‰J¥B©P T©P)•¨TJ”Jþ–ùîìÞàà NDŸàl\ÉÉ)„†Gyì8½{õàŽ®]-ÓžKNÀç:L¿Þk¸º~½V¸¾fÿ†õAÁ<ôà(¹òB!„BÔiÕÖFËX“Éd [^}õUvlßJŽŽŽæpT© ** NÇ AƒèÒ¹3 …‚ýû÷STThé]YÓ<=Í= SRÏÛ|>5Í\J¢dpÙ]:väÛ~"4<‚ôôL:wìTüœ9˜?NzqXß©CÇÛóºOK³½ çÓll·yž”ó¶Kedçä“›‹½½=..Î7õ^RÞ(Wg»„Ëùó¶÷½R©¤k—Ît-.Mr1=ƒyŸ/dÛŽ|ýí·¼óÆëÕpüÕÜ~èÝãN\œÙ½gºü|“8GÛà`7².Qsàà?äçç3zÔý :¤Ì².f¤Wè5íììP©ÕäétMÆ2Á— ……¨TÊrç/¹«Æd2UºüЕ5ꛃÎÖ¾¾>¤”*W“”œ\åe]9¯¯ož^=îäÇ•«Ø½wÙ99åöH.ïø-o@ð[é €Á` **Š'N¢ÑhnØ ¦íÛµ%¨e ÒÒ.°xÙr« vîÞÃŽ´Zm™ÞÆöö´"99…#¡átjßÞê6ñN:I\|<­Z4¯ÑÁö:´kG³¦œ9{–Ukû¨“ IDAT¶zný† œ8uªÌ`5Ÿ—§¹ô‹­à»®êÔ¡Cq ²³±ÿ† ç’’øè“y6çY³~=iÊÖ3Þè@™ÚÂUUÕýPQ÷Ümæÿú{[¶nC©Trwÿ~e¦+é…²›‚R5ÿ/]ºÌO«VWê5[Îyü8ù¥j][ªýK»œ•e㢴Šþhg+¨ °9èl] š®P6;;›Oæ-¨ôrþ;w>ÙÙÙW]öµÌxó ´Z-›¶láͳÊôžÖåç³aÓ&žzæy¢‹Ëå˜ßaÌ]p•ã÷¸\íü—‘™É/~·j0ßqöÏáÐâó†÷M³­ ‹úݰq“ÕãG#ñÓÊÕ5Ò†Õẽ÷°ü»­ÁÍÍÍåÓŸ0jäpìí¯¯ÜÞ¸'Ìåo–,[NÈž½eÏk—³ØôçfËõLl\QÑ'0\q}£ËÏ·ÜÝWrWKâ9s ?ߊ‡õöövh0äææVºÓƒ­ Þr•À^!„B!n˜*—ÁѨ5899ÈÔ©SHˆgÖ¬÷9ŸšJRR*•ŠÑ£´ÌÆO?­ ¨¨µZ͆ß6ðØ£áììÄÏëÖ‘••UmƒwVÔŒ·ÞdÒ”iüø¿U„ìÙG«-HM;ÏÑÈc¨T*Þyãµ2epÀ\›þhä1 ËÔ¤/©[бcÇ]…BÁ;Óß`âËSùlá—üµe+MHHL"*:šQ#GðˆßQ—ƒ)1á™ÿpôèQ‡†òà£OбCòóu £°°‡|€»zõ´š§w¯ìÚ³‡Wßz‡î]»àä舣£#S_œTáõ}åé¨ËoÔ}#>ôÞjm_F ÂïÿdÜóhÓ:˜‚‚BNÇÄpG×.¨TJb®è)¿båæÎ_HËÍðoâR©$>>§Náèèȸ'Ÿ¬¶õ«Ê~¨¨Î;âååÅÞýèqG7ÜÝÝËL׫g­^Ëɘ3LzymÛ¶Æd0ròôiüý›àϹ¤¤ ½¦“ÆœK 1)‰-[·áçãƒJ­"ër.®®ØÙÙQtÅ À—/]æòå,µØÛÙ›k?+ÅÿõßË êK\9èl]*‰3 ß]–p¾U‹ædåäðÛ›8yê4¯M{™n]¯¸:Ê⯗sÈF½úýîªÔºøûóÕ‚y¼þö vìÚÅŽ]»hܨîäåæ—Haa!ŽŽŽ4ù·÷ø§ÿCÄÑH‡†1ú±âãW—Ïá0óñûЃ£è]Åã·®iÞ4Ÿ 8Ƴ'ã߸1*¥ŠÁwÄÏׇç~Æg ¿¤uP¾> (,*$*ú$)©©øû3ìÞ{nšm}èÁûùsófÖ®ÿ…ÐðpZ4oÆ…  àчFó¿Õk«´ÜÞ½î$dÏ^{û]ºwíŒ“Ö ­“–©“'UÛºßÕ«Ü?’õ¿nàñÿθç'”™þʼnØ»?QÑ'Ùà ƒoooÆ<0ŠÇS©ÞŽ×R•ýPQ …‚Áƒ°¢¸'ìàAmNg§Ñ0÷ãùiÅ*"ŽãÐáP¼½=د/#G çË%_Wêu{ÞÙ“§cHHL$õ|NNŽ4ôõ¥i³¦Š.3½»‡;F ‹ŠÐ˜Œhìì*T:eæ‘§ÓÙ êK\Ø:!_Ο[ë'߆~~Œ6„ ÿį¡Ëg¼Í”W§s84Œg&LÆÅÅ… Ï=Í“=l5߯¿oä“yŸ—éM_bä°!4ôó«ôú·jÅÚ?ðÛï Ù³‡³±±$§¤à¨ÕÒªe zÝy#‡ ³Š–ãwÁg¬\³–¿·mg÷Þ}–ã÷ÁûG–{ÌÝŒ”J%Ÿ|ø_-ýšcQÑÿ–jÑŒ¶mZ3õÅÉ åll,Ñ'Obgg‡ŸOFÝ÷Þ7GGÇ›f[X¾x_-]JTt4;w%ãߤ1¯O›Â¨‘#ªÖ¿×üò×–¿Ù²çßÏj ë^Ÿ:…ömÚ²~ÃB#"Ðëõ4näÇã䑇Æà`_=ƒØß?b8­ƒƒY÷˯Žæð‘Pœ]\hÐÀ‹¾wõæŽîÝQÑѲE î|7±ññ¤žO#>1WgW¼xÓ¥c{Zµ4ß•tùrY—³h\éõQ©Txxx˜Ká  F”Jã5Ãú™³ç ÓélõVçÑRýÜ ùâ³¹!„B!„¨^ ]^n•’qOïäç›Ë\( ŒF#*µÚò%¸°°¢¢"KàV2è¬ùÖsæÁ× ??£Ñˆƒƒ*•ÊÔ_8Ÿ"{§Ìšý›6oaîœèÝóNiQ.ÛÃ!Ve†J/©ÊÆ>; Ü ¾´Ø¸8f~ð^žž|:gvµ­ÃÆ:th•æMJNfÌcãÈÉÉáñGâ…çžá™ñ“8y:€Õ+¾#¸¸´Péy†ŒmsyÎÎÎüµa®®.r@ Q«'Ѫ#çHXƒ´Q³¾fέcŸ3ÿh=³wÅÆÅ1söóyô£ªåõwïÝWå;È®eͺ_øù—_=ê~zp”§B!„Bˆ:­Ê=ë•JNNNe¿«,koo_¦&ì¿=æÿýÂYÒÛ°d¾ÒµßEÅ\¾œEaQQ™r=oÛΟ[þÆÝ½>wtë" %n9_Ο‡³³S…¦ àûeKêÔú7ôóãõW^fƬ٬X¹†‘Dzvå:J«–-l†îWë5ÿú+/KP/ÄMÌÉɉŽÚÓàŽqðågs+wýzñMÓž¥¯‹l•4B!„BˆºF}=3_Y®¦ôßF£ÑfðnØ—}üF–À¹UÄÆÇ1áÅ)´j…ŸŸ&“‰Ø¸8ΜE­RñÖk¯¢¹¢f½·‚ŠLuÙýŃ´Î˜5›g'¼È>D·.8Fÿ~}*¼œ÷ß{Û²,!ÄÍ©i`€­K$9VQÿ¾}lþ[!„B!ê*uu.¬"½âË›FzÔW]£†x`䎄G°ÿÀAòóó©çæÆ€~ýxê±Gj%$DV²ÿwî-]΢âÇÞwÍyyý•—%¨B$¤B!„BÜLÔÒ7?Ow^eª4„7±ûG £[—N,Z²œ ÿ¬Ð<#‡ á…ñÏTi@Y!„B!„BQ·HX/„uDC??>˜õ./Œ†“'O—;ÝüO>¢U«Ò !„B!„BÜBªÖ§¥&Kë !D hèçwÕ ~@ÿ¾ÒHB!„B!„·¥4@Qm3ÈøBˆÛý$ª¨ÆeɹU!„B!nÖ !„B!„B!„µLÂz!„B!„B!„¢–IX/„B!„B!„BÔ2 ë…B!„B!„BˆZ&a½B!„¨wõê) „B!„Å$¬B!„B!„B!j™„õB!„B!„B!D-“°^!„B!„B!„¨eÖ !„B!„B!„µL¡ËË5I3!DÕü´b…4‚B!„B!„¸nÖ !„B!„B!„µLÊà!„B!„B!„µLÂz!„B!„B!„¢–IX/„B!„B!„BÔ2uM¿@FF™äädSTTDFFF™iÜÝÝÑh48;»àî^wwwÙ3BÔ2“I†³B!„¢®R(ÒB!niÉ))øùúÞ^Ÿï51Àlrr2iiiœ?Ÿ†‡‡;žž¸¸¸¢Ñ¨ñôð4_T(`2a2™¸˜~‘¢"=ÙÙY¤_¼Hzz: 4ÀÛÛ???92…¸$œB!„â&þr/á½Bˆ[Œ„õס¨¨ˆøøâããððôÄ××_4M•–•ššBJJ é/â“*-Kqu¥Cz ì…B!„¸ ¿Ø— ê%´Bq«°¾Šâã㉉‰¡/A­ZáèäTm+˜—›Ë‰“'9ŸšBóæÍñ÷÷—#UˆjpeHŸu)ƒô iäë¤q„B!„¸IØ;hñðòƵž»„öB!n)ÖW’N§#,,;; mÚ¶ÃÍÍ­ÆVôòåË?‰Éd¢mÛ¶hµZ9b…¨¢’ Þd2a2‰‹9…½>¾ q©W_H!„Bˆ›Dö¥L’ÏÅ£×ë hÞ…Bi ê%°Bq3“°¾Ο?ϱcÇ &0°é [áØØ³œˆŽ¦mÛ¶4hÐ@ŽZ!ªÀT<^@ìéxûøáå#ãC!„Bq³JŠ?Ë¥Ì [™¿ì+Ö !Dö×_›‰‹'//Ïêñ йsgüýýquu%++‹ãdzoß> ƒÕ´ŽŽŽµjE¿~}oÉ6ºÃzuUfŠ'!!^½zãZƒ½ém lЇ»‡ýƒ^¯§aÆòî¢J—¿ÉL¿€½ƒõB!„BÜäú7%';‹¬K™¸ß-k2™$°Bˆ:诿6³gï^t:z½Þ깞={âççGHHзo_œœœX²d‰Õ´jµšääd F †½T:¬ŒŒ$''—>}û¢ÑØÕÊJ»º¹Ñ§o_öíÝGFFíÚµ“=)D%”ô¬¿”‘N“ÀæÒ B!„BÜüƒ‹[=@Êà!D]uøÈ²³³m>·uëVV­ZeélyðàAòóó:t(õë×'33Ó2­^¯çòåË„‡…KX‹PVfâøøxrrréÙ«g­õ%4;zöêINN.III²'…¨€Ò½ê òu– y!„B!ÄÍÍÅ­ùº«~BQûÒÓÓË}îÂ… eÎÝ111899Ùœ'9%EõQá°þüùóÄÇ'гgíõ%4;zöìIÌ™3œ?^ö¦PÒ«þf»h=°[vžB!„·ð5¿BÜ.ŒFc¥¦ Ä`0––fóù+K鈛W…ÂzNDZcÇèÖ½;»:µ;;ºwëαcÇÐét²G…B!„·4éÄ „BÜ><<<4h»w聆°PäW¡°>,,œ  `Üêh¹ ·zõ æØ±c²G…¨ ée#„B!„\ë !„¨»˜8q"ééé¬[·Nä6pͰ>>>FCÓ¦Mëô†4mÚ…BA||¼ìU!®qÁ.ïB!„BÈõ¿BˆºK­V3qâDY¸p¡ôª¿M\5¬/**"&&†víÚQ×?ÚM@۶툉‰¡¨¨Hö¬B!„B!„⦣P(xöÙgiܸ1 ,àÒ¥KÒ(· õÕžŒO /®nnÕö‚þƒ£“#íÛ¶­öqus£/ññ 4oÞLöî-,6.ŽOç/àÕ)/ "„B!ªEbb"k×®åäɓ׵œŽ;2|øp7n,*¬äååñý÷ß0vìX¥Qꈄ,#×8°á¡|š¸Ê] %¢Oœ$8¨•4Ä lo@Úü&a2™P”ú·ÉdB©RQèââ8ôùBŒEEt{é%œ[4¿æòüqÚ´iÃgŸ}Fjjª4ðmäa}}ûõ¯¶[ðÅ—ìØÀôW_áÎ;ºWû±sçŽÖçç瓜’ŠŸ¯7ÅNO»pøøbpvt¢‰cœ´Úrï´ ع{ýîê·—W­¯l\³fÏ!7/€Y³çðÞÛÓ%°¯eº)1zRÏði®Â·™­“ªN®oxx8çΠqãÆtèÐAv¢B!HOOgÞ¼yä_k^ïõÆ©S§˜={¶„±Õ`Û¶mètºj]¦££# ¸áÛ²fÍÂÃÃÐjµŒ7Nvp±ò¸šÄ,…åßoô;÷Å­aû® ýûÜUçÖ-''—¸Ä¢¢O\×rZи ÎÎN7| …Õ¿@Áå,N¬]ËÁÏ?çRL &àÌÖ­ô˜2åªËºû뮻ػw/õêÕ£sçΖçbbbÈÊʺaÛÇÅ‹éÄ&$ؤ žž’ÁÕ rÃú¤¤$<<<«í¢²tPpáâÅÙ ­£#žœ?ž Ôx C—ŸOBb"]:uÄÅÅ¥Nî蜜\…†òóú_I»pÁæ4Mš0tÈ=tëÜÙêÄ6óƒ¸pñ"»Böðåü¹µºWõ¹yyØß`y9Eœ -à\´‚‹‰J.%ÛQ”¯À„À„ sy*µ}!õýŠðki i'þ­±³×ÔÚº‡‡‡³víZ.^qòôôd̘1tìØQv°Bq ¯– ÞrÝ”—GDD=zôƽß}÷û÷﯑e'$$Üа<==Ýj[öïßψ#ððð-n É))ìÙ¿ŸãQ'8Mbq'ªe‹¾¤]›ÖW7"2’oø‘cQ'ÐàϘG1ôž{Êç|Ú–,_ÎÁƒ‡¸œOƒÜs÷@Æ>þvvve¦?|$”…‹s6wwÆ<0Š'{Äö¹éÇ,ýæ[~\¾”fux¬Çí»BX´t`îõ= oŸ:³nÿ:ÌWK—Yå<×ÃÉÑ‘‰Ï?K÷n]oÈú 0(Òé0 èÒÓÉJHàÜÞ}œúã²OŸ&§ µJ…ÈLH`×ôé0vl¹Ë (ζzõêE¯^½¬žûâ‹/ˆŒŒ¬ñíZ½n=!»÷–›!z{yÑ·Ooz`”œÔªY¹a}ZZ~ VË‹\Ôøû3bØÐÛ(_?_’“’nHX_¢H¯çHXx ìKJÆ”÷+—ÀWK¾& I&ŽÖ|—ü°r­ùoÄv”êµZó NûèbJ+Þ¶£0_kËÂdŽæMÅ#[˜,A½ùïÂ|È=«æÜY5ÿ­kO¼]„o“ß»lÿþý|÷Ýw¶·ëâE-ZĸqãªýË´ÑhdÆ»ï¢R©˜õþû·ý14oî\rssyëí·Q©¬ï¼X¿~=¡GŽ0á…hÔ¨Ñ5—5eÊ,XÀ¢E‹˜0a‚´ã-dßÞ½lÚ´‰»úôážR_¾Ê{<%%…/¿ø‚F1á…nÛã`é’%$$$0~„[¦ìÆŠŸ~"::š±cÇÒ¢eË[v_þßûïSPPÀÌY³P«Õ×|\ÔœÒA½‡‡¯¼òJ¥CÔôôtæÎKzzºå:C\ÿu\M.ûF†õ¿ÿþ»ÍǤw½¸]ü½m_-ýºÒómßÂÛïÍÂh4Ò¦ukœµ„EeÖì9Äœå¥Ê~8—”Ä3&qéòeš4nDË–-ˆ>q’eß~ϡá|9.Ϳɒ“S˜òútšúóúÔ) ç‹ÅKÐj=ê~«e§]¸Àw?þĘFÕé ¾t®så¿k[l\ŸÌÿ¼Z—™›—Ç'ó?翳߯ñ|Hœ^·žC3g’•ŸOQ^z% 2)0P¨ÕhT*s¨¨•J Šÿ]ž¯¿þš¯¿®Ü{¤º/!¶âÁQ÷èßÄÒ–±qqÄÆ'°k÷Ö®û…]!{nêòÔ«×­ççõ¿^×2F?p??ø@µ­ÓUÃúλ\÷ Ø ê?˜ù^6´áaa7d§vhזáaè †:Ø—þõ´„—§'þMà.WGlBááá–[ª¿ûî;Z¶lY'z6%&&²dñbxö¹çlN²k[¶l¡ÿ€ 8°Î?©©©dddоC‡2³ÑhäDt4®®®4¬¦‹k‹ƒƒÕvÁT™v¼Y¼7cƒfÏ–ëm|Ü*n¶sq­‡4ÿMÚùóÜ=x0ÞÞÞuz]{ôèQ¥kzôèÁü!;¼ >¼Z–SûçÊ^õ%¤w½¸4jäÇc?Dë V´ æõwÞåtÌ™«Î“••Åì9ÿÅd2ñéG³¹«WOów¦sçx~òK¬X¹š>={Ò±C{«ùþoιtù2?ú°%Ì×étLy}:áGùaÅJž÷”eúŸV­Æh4òéGâíåÅ}#†‘”tŽo~ø¡LX?ÿ‹¯Ð:jyö?ce§VÑšu¿XþíåéIß>½mN}‚¨èŒ~àþ«.oWÈËkÖý¯L­Ñõ7…YYä&%‘c2^o~\¡À T¢P*Á`À`2¡,.“c4QšLòòPUc‰<çë^FI†è߸13ÞžN»Öæ;]bãâØ²€€&зúö!2*ŠïXÁëoÏà…短SwlTÔõõ%˨ñ°>##ww46nªŒò‚úš®¥ÑØáîîQ¼î5úZ...tíÜ©Nö‘QQVA½—§'£¸ßæ›'''—›7³éÏÍ–àû«¥Ëðòò¬õ7NyA}I ?ó7%°¿Râ5˜0`º)¤i[5>j¼üìû2Ó§%r1µˆ˜cEìݤƄ‰Ôdå _ïmÛ¶Yþݸqc¦M›f)󕗗ǼyóHLL¤gSMŠŠŠ uë²··ÆÇÇ“——ÇwÞiUïOT®o :”†¸ÃÀÕÕ•¡C‡ÖÙrtrT]—®] īއº5eð=÷`ÐëQ*•!ÌFŒQ-Ë©°¾t¯ú=zžžÎ©S§äTÜVöëÇÀ~ý*5φ?6‘“›Ë=w²õ5büÓOóѧsùiå*«°þxô Â#ŽâÓ Ÿÿ·ó“V«åí×^eÌO±êçuŒ}òqÔÅΜ¥IãÆVãõuíÒ™ïú™™¸×¯À‘°0¶íØÉŒ7§ãâì,;µŠâ-ÿžùΛ厓¸zÝz¢¢O\3íßç.&My€„Äs5¾þ • …FƒJ¯Ç¤Tb2™Pi4˜ŒF  …ÂܱF©Äd0 .¾“Ã>* ]‡¨Õêëúþk2™Ðëõ_ßw‚ظ8KP?ó·pvv"''—¯–~Í¡#¡VÓvëÒ™‰Ï?G»Ö­™ùÎ[ÌüàC-]fÕÿf1úû«¥g}u*'¬ÏÄó:CÚÚ êKxzy’‘‘Yãa=ÔÍÀ>''—ÅK—[þ.ýf³ÅÙÙ‰‡|€î]:[ß_-YV«oškõØß@…,¥o†>åZæùÌ Fê{ý(xûÙáígGëΰsÓe«97RÉ^cÇŽµÃÑÑ‘ádzhÑ""""dGרãÇQ«Õ–»¬ž+ÛÜâÁcM·ã­Â×Ï_?¿ OïääDÏ+ê9Êqpk º­ßïwÜq‡œôêˆððp˵By^xáÿF”ëÊ^õ#FŒ°”Lé]/ÄÕì.~ïÜ= ™çöïËGŸÎåàá#`ooîD¶·xžþ}ûXÂøMš4¦UËæœ<ÃÑÈH:Ÿ» °³³ŽÊì4掬EEæÁ†õs,¤m›Ö ½w°ìœëPº$·—ÿ:lU' I>ùèƒ /¯tØÃJ9+˜L&Œ& “ “ÉÄåÂB4wg4™Ð  hüÂBL€&,ƒÉD~@§ªg¥õë×£}ûî´ëp}ן|öy™ìðË%K9Z¶rÉ¡#¡|µôk^Ÿ6gg'K`ÿéü…µ>Öee=üàÕÚ+¾:Ø ë³³³hÜÄ¿Ê ­í Ìá[rRÒ {½ºØïÚ½Çrbòòô¼jP_Z`@Ÿ|ôå—ȸâÑžkCE‚úÒë-ýQd2– ÛC6yXOR¼ž¼\óWÕ³9o¡É\—ÍT ë]Ræ°YǹôëêTΖˆˆöíÝKZZJ¥ÿ€ŒešÕ«VY‰‹‹ã·ß¶<çççÇÄI“øè£ÈÍÉ`ÇöíìØ¾Ý2M¯Þ½2dˆU½ü™³fqàÀ:Dzz:†fÍ›3hÐ <=Ëþ@{ö,ûöí#%%…ììl4 ÎÎÎ4iÒ„={âëë[©íÎÌÌ$55•   ›9EGE¡Õj  ´z¼  €O?ý”€Ûà IDAT~ø¸¸8<<<2d|põ‹6ƒÁÀ?þÈ÷ßODD¹¹¹øúúrï½÷òÖ[oѤIË´‹-bâĉŒ3†5kÖØ\Þèѣ͛7çôéÓ6§Y¼x1/”ª—~e‰ììlœ‹{ÞF¾ûî;¾ýö["##ÉÏϧqãÆ 6ŒéÓ§[iÇÒµÊ ;¶oç\ñ`]þÜ{Ï=xårøÐ!<ÈÅ‹Q«Õ3dÈ2ƒÊët:"ÂÃ9uê.\ ;;¥R‰——íÛ·çÎ=l–3*=FáC‡8ôÏ?\¼x‘¢¢"FŒɆß~³L_úؘñÞ{ØÙÙ•[›¾<תY{ö,{÷î%!!üü|œ  OŸ>e~¸r*òž½ò˜Ý·oÇ'#=£Ñˆ»‡íÛµ£WïÞVuQK^/"<œÃ‡“žžŽN§ÃÁÁW77šÒ·_¿2ûæZï'€sçα}Û6Ðëõ4hЀ>}ûÒ¦M›Ógdd°k×.ÎÄÄXÞó~ rÇw”™gÏž=üõçŸôíÛ—»[IýlÞ<ÒÓÓiÚ´)O?óŒÕs?¯]Kxx8?òíÚµ«Ð¹ãzjÖgee±uëVN<‰N§£^½z´ïо}û²xÑ"RSSyyʼ®èÅU™¶¨È¹øzتY_Õc4==ÏæÍÃÛÛ›—^~¹Ìkådg3gÎêÕ«Ç«¯½VíŸ —.]býúõ¨T*Ô*Û·mC¥V[þ¾ãÎ;­ÆœºtéÉÉÉäåæšÃ{{ÜÜÜðööF[ìP!§£Š,µéËŸ×hUçþv´eËBvíÂÛÛÿ€Î§¦rêäIâbc™4y²¥'U›¶m±³³ãÈ‘#ÿÏÞ}‡GU¦}ÿÎL&½’„T@zïHƒ`+.¬®úîZv»«îºÂª¬(V°#Š‚²  °´PÒ¤éu&mfÞ?’9Î$ =ûs]\$“sfÎ<çÌÌ™ßyžûÁÓÓ“#G*÷áî^;¢aò¤I$>MJr2!!!„ZLjlã¤fóO?qôèQBÃÂèÞ£YgÏ{ò$§“’xàÁ­êÄ=r„7¢R© "8$„ªÊJŠŠ‹‰‰‰¡{÷îVÁŒ9(øëË/ãèèØàñããâjOÀl…çΣ¨¨ˆ#FX•z¨®®æ–[n!""wwwn¹åìííùùçŸÙ¶m“&Ù®i¨×ë™;w.Û·oÇÅÅ…1cÆàããÃÉ“'Yµj?üð;wîdĈÜsÏ=<ùä“üûßÿ¦°°¯ºá­–V¯^ ÔŽÌhÌèÑ£yõÕWyýõ×1 ¼úªõ-æÏVƒÁÀí·ßÎæÍ›qttäºë®ÃÃÃýû÷³bÅ Ö­[ÇÎ;m†ªkG¨¡°oï^¼¼¼ "7'‡¤S§ÈÌÈàÑÇcÏîÝ>|ÿîÝ âìÙ³Ä=JÎ… <òÿgÕþ©©©lݺW77|¼½éHyYüç?ÿ!éôi.\ØhyŽŸ·n%::___zõ"?/€€¦]=»wíÂd21íúë­Öi‹ÚëûöîeÛ¶m@íÅ:///rrs9yò$qqqÜ1>C‡mÑkÖ2 ýêË/),,ÄÕÕ•à4j5™gϲsçNbãâx衇”_P;±ò±˜´Z-!¡¡¸8;S®ÓQŸÏþýû>bDƒ°þRÇÁ©ÄD"##qss£W` ÅEEdeeñÝÚµÜu×] ©÷|SSRX³f UUUx{{3pÐ ÊËÊHMI!%9™ñãÇ3Ë¢ìDïÞ½ë¾8'sƒÅý+jš/XNŠš’RûE;¬&a+((à“O>¡¬´OOO LUe%ûöî%#=c#sJ4µ-šú^ÜQŸ+-ÑÔÏ„Æ8::2bÄRSSÑët„††âêæ†J¥B­V+32ÒÓIMKC£Ñàáዳ3•UUQZZJ`` ¶¿”–——+ÇžF£iµ ÅÙÙ¹ÕʯˆÖ‘ŸŸ¯\¼ê©§ ´333Y¹r%:î¢Ëµ†cÇŽ±zõêKvþ°<–fÏž­ô®‡ÚŽ#§NâÔ©SVÇßÂ… e䆸*••—SZV†Z­Æ§‘Ï5??_²Îãü…%¬¿{ÿFJéùùÕ^¬?þ‚rÛÜÛfñ߈ÞyïÝGc޹?Šùsç V«ÉÏ/àó/W3wölú÷“ ´­Í\õ¡«ÐvŽŽ¨4¨©ÁhT*®ûÛ߈~çâêÂú¾·ÜÂÄÅ‹¾hžuù”ÉdbÐ÷ß³þ¡‡ÑéõhÔj0€›ÖŽî>Þøù^öv8::âáÞüÜqOä>è¯Ô¨ˆO8uéì.=CÉÛ† ÈÀý‰Ü»_Âú²ÖâãÓôûÎÔøøøPXXØîÛûÔ´4e(‘¯Õ‹Í–œÜ\þ¾äö"tÛoÔ— êÍÌý³/½RûeMûVWe24Ûk0R…‘K¸©¢ãzÖwƒÃ‡ñàþ@h]ïñšš¾[»–S§N±gÏæÍ«ýPÖ¯[ÇŸÿò%tݽ{7<ø ²­f%%%TUU5ùùÇÅÅ¡V«0`€Í¿AÃàñ_ÿú 8_ýUéqY^^μyóíÿÔSO±}ûvfΜÉêÕ«•õL&Ë—/çé§Ÿæž{î!..Fƒ§§'·ÝvëׯgݺuüßÿýŸÕýUVV²nÝ:T*¿ûÝï}Ž£GfôèѼñÆ þö·¿Ù\îí·ßfóæÍ¡ŸUUU<üðì^½š»îº‹'N4Â/ÖŽPLÏ™;—Q£F)ûþ»µkILLä믿¦¼¼œ‡yD *JJJXµr%YYY$&&ZÕ?÷õõå÷<@XX˜UØUVVÆ·ß|Cò™3Ä=ʨѣmsGŽá ¬îù™L&T*DîÙƒÁ`hóÉ8333Ù¾};†û,°êõzèÐ!6ÿô7lPBüæ¾f¡¶·ó·ß~Kaa!“§L!<<\ ª«ªªØ¸q#±'OòË/¿0wî\ 6Ü>ƒ««+=ö®õÎÎggãáé٤דù5ÙÙÙœ?ggç#UÌûÑÝÝÝêBQk…°Wjœõë×+e'L˜`sAk-Óš¢¢¢”P|ùòå6ƒøÌÌL–/_®,wìØ±6 ë#"".Ô_sÍ5J¯yËÛÂÃÃÉÌÌTzØ×§Ó鈈ˆ°¾•¬³ã¯»í¹gP K®kÚyí‹»ìù>ގׯ«âÞA5Ò˜í@W7JÚÁÞ¾ÑN"Îu#®ôzÅ릢v=‰œën·…=røpúý"¾øz ?m©×bܘÑ<ôàïø`å*4vþï¡­> C«ŒâºÚµ´ N{Snî¨íí1UTÔö®7™0TUQQ\Œù”¾ CUºü|ÖΙC~|<ã{ŒË—“sâ»Þx{LUੵ£GÏžø7!¬o ±5ê®O<‰?ùLéq/šÇîâ‡Üå[óíwVA=@Zz: ~ÿ@«lèísæpÿ}÷4ñ%ÓtœË>ßâíõòòRóöìSÓ+]3¶.¬¹˜]‘{;uP4éE^Y ì[—­Þñ5•÷‹âm•ÐiKõ낚]Îdbæe&L˜ÐªuCg̘atØÙÙ1cÆ N:¥„\meâĉJPµÃón˜1ƒØØXeˆ¶¹6tyy9†àà†%ÑÌ=û-999)%-lõŒ.++#33“ÐÐP›¥ âãâÐjµôíûÛU“ÉÄ{ï½§|·,àââÂÇL¿~ý¨©±þ’”••ÅgŸ}F·nÝøþûïñ´:U*‹/fÛ¶mìܹ“]»v1}út ¶ÇüúõëY½zuƒ°~óæÍnU>§9L&ï¼óo¾ù¦dBmÏû>ø€­[·Çþón¹å–ËnG€aÆ)A½yL½î:ɹpÛo¿Ý*¤pwwg̘1ìܹ“”””a½¯Iž\]]¹ù–[Xµr%±±±6Ãz€)S¦(A½¹ýÛÛþýû1™LŒ5ªAyŠ1cÆË™3gøßÜh£\IS^³q±±ä\¸@XXXƒÒ=öööÌ;—3§Os,&†Y³f¡Õj•ò~~~ ‚z€î6z+_Îq0tØ0« Þ¼?¢£¢((( ¨¨Hym;vŒòòr|}}­Âi€^½z1eêTvü÷¿ìÛ·O ¨U*aaaÄÅÅ‘ššª\4H®k“é7ÜP{A'9ù·^øgÎXm%çÂRSRppp`Ö¬YVïKžžžÌ˜1ÃæÅ¾æ´EGkÏ•¦~&´Tzz:¦ºã¿þüSÞÞÞ”––¢×ë).*ÂÇÆ{”““S«õpå–ÁY¿~=Êï[¶lÁd2Yõün­eÚâÜ&""½^N§kØ×ꜜ˜8qb›¶§eI¨Ñ5kÖ,¼½½/z‘àÎ;ïT~ÎÌÌ$??Ÿ­[·’™™Ù¥¯Îêñíµ¡êÊ£vWÂ3//°t»=ßÇÙ)÷ÑQa}Nn.»÷îkÑ}\7yR£“yv:æÑp9—4Ù1g¾Mu‰»­ï¿_Èóæ‘‘I·n^ôª|26Ž_¶ÿ—çž~wJJJxãíwسw555 Пg?ÕhÙ¶ôëžHòêF7Ú’˜hõóú›]Ö×LJiS&wÈ®îjepìœQkµµ5ëëŽ7µV‹ÚâüScoÆÞž÷ÝǹS§Ð»Þy‡cÆpíóϳïÍ7[ßγS»mnnmvTo_ô»tþVoóï¹¹y]&ëŒï§­v»á§¶-™²á§ŸšÖ7Ïá£1è+*Z?଩áøÉX&MœÐö/4‹ :œ\.ýŸ6e2{"÷Y­gKkÏnl˲wÞkÔ·Ê—L®KNtÑõ«&=Emº÷hÇÉ8ýEËà””T+~h˜±]¶õí·ßVÊ1XÚ²eË%×5/Í’%KZm›lM”èãë‹J¥¢´´´MÛc˜žX†!C†°wï^ÒRS•íëÕ«ÉÉɬûþ{®4‰^½z5Ú‹Å~Ýu÷ÝŸ&$`2™¬‚`³üü|rss4hU¸rêÔ)Ο?ÍšåaaaLœ8‘ÈHë Å;vì ¦¦†‘#G’——Gž÷¶°sçN>¬„õ3gΤG8p€¤¤$«/Ä—Sçr™Ÿ—““óçÏoðwWWWæÏŸÏÊ•+Ù½{·UX±v4ëׯáI•åœýlƒu/).¶yŸdddPZRBuM &“I¹H’w‘ÏŽ¡Ã†uø{Vjj*ÃëJÕ7jÔ(Μ9£,ג׬9œ ²ùÞcnë³gÏrþüyññõÅÁÁ””vîØÁð#lÎ!q¹¯§‹m·Z­ÆÇLJòòrJJJ”°>Í¢l]P5j;þû_Î;g5i[ï>}ˆ‹‹#%9Y ëSRRðõõ¥ÿþ899Y…Åæ8½Û!¬OMK«ý|êÛ×fY®ÁC†ðã?b4Z5·-:R{|®4õ3¡¥Ì£cý)[àååUÎZô„´ÔVûåJ-ƒÕà¶X=×ÖZ¦%œœœ”Þ¯:ggg¼½½Y¼x1o¿ývƒÀhÔ/^¼Xé„aÙû½5;f˜'5wÉÌÌD¯×7©7`` gÏžµ ê'L˜ e˜ZÑ##jXS{Þù]]ø~©ÀÞ2¨7ßGGùÛëÿ¼ä÷÷KÙ¹¯Ë|?6—¬¬¬Äh4Úü 2ç8NN¿•t©ËC*Éxô•ÊûCƒï7xù­ÜšÑhä_ï® ÿ5}™Swáöõ7–qàÐ!û¿‡ññö惕Ÿ°øÙçùñ»oíPÑ~ÝÉÇŸ|vÙËÇÅ'ŸxÑeL&×OÒîûº«•ÁÐhµÆÚ‹B*•’‰˜ŒFTßoMF#…ÉÉØ«Õh(×ë)JMÅÑÃUÝz&“ £ÑØ&=o®›«²~¸¢T±eôÈ6×1ßçØ1£»ÄþëŒï§­¶÷o¿í66XL×Ún¿í69£h#~¾¾|´byçú0vrjô غ ÔÓ¿cÞœFßÐÍ÷e2™dg·ƒÉH•©6ª?z¤˜‘£ûèÔj5™gÙ³o‹î¿{î¬í€ãîîÆ‹Ÿå?;v0ïÖ[å…ÖO?ÿé™™¾ €ƒ»;•ª6œ¯ëÉ„ÖÅ}Ý¹Šƒ*µšÑú{ß{r½ž€à`Üq©»wc0™P×}1¨TØ·ó¼—yô‘‡ùpÕ' ûÑ#Gðè#ËÚFï§ ëM4¥”Ìý ¨ÐªNhHÿxõ•©YßܪأGŽ ë\v‹½´¬ÌêÊŒFð!ƒÛå™ûZôÈÓ—ë»Ôþ·¿¾À®È½L›2™Gÿ²Øæ2¶&¾ýqãO†õËþùºrŸ¢åz©8•RÌŸˆÕ1r”£Ç:òéW†‹ö¬?v²\)ƒÓ+H{U¶]G”iÒöYüìããÃ_ž|’¤¤$R’“IOO'55•””výú+÷ß¿Õ$ŠSYYIJJ ½zõ²Y.!¾®n¼­áÍi7sOÙ›nº‰¸x)¶ú¹hÑ"–-[Æš5køÇ?þZ­æÛo¿Å`00þüFƒ£ö@.ÕŽ—Ó^MmËõë×s:)‰¾×\ÃÔ©SñóóÃÑѵZ^¯gÉë¯7ú|Ì]W>±jj{™ïkÒ¤IôºDÊž={*?8gž}–øøxÒRSIOO'>>žøøxvïÞÍC?¬L¼ÙÇAk\úøøàááANNe¥¥J™óŦÞ}úOjj*JÏRË€ûܹsœ9}ºÁ}ê]8ªï²×kæ>lmgΜipa«±^ãù¹Òؤ»MùL¸pá©©©Øi4h,þ †Ë ë[¡QÚ쮯Ô28ááá JÖ•[k™–h,¬7ÿ­~`of+¨‡Ú‹/–ë·&gggžzê)–/_nØ{{{_òIJJjÔ?õÔS­r"¬}XÌ×ìÝ­ß mõÎìØ Þü½¹%ºÚ÷ã>}zsìø N%nÖ—––r.;­VKÅë¹oßÞDîßObÒinœqCƒû//¿Ñ^¤ãèèHï°Ð=vii)™u=B¡6¨=rD»M0kY3êÐÑ£,úÝ}]æEâçëÛêCžÚâ>¯f9ðß]µ=Uwï«`ÑBðóµ£ß@{NÆë ëwî×c>¥2ØI²Ù|_7÷®üi4  ”·ÐétìÚµ‹è¨(6mÚÄS‹_ÖãžJLÄ`0Øì\RRÂÙ³gm–ª0××O«ûÀ·ÅÖßÌ_¸u:wÜqGÓŽï=z4‡f×®]„‡‡·j Ë畞žÞè0^ó耀ºú˜—jǶP^^Îé¤$X°`Aƒà½5F®´5µZ‹«+åee(·­ãߣên›Ghíí<¸i蜜5j”2ß@~~>?ýô©))ìØ±C™¶-ŽóvÔµEƒc¡¬ŒêêjT*Uƒs™°°0bbbHNI!%%EéQ¿…öÉÉÉxÖ=Fý8÷-XЬm¾Ôzæ÷3[“ÈBíE½£)ZÒóò+¯tŠ×„ùuÜØˆ˜ÆÚ«)Ÿ wØ(ïÕ*• { :Îæó„¶í9D®Ü28æçd.Ûb«ÜJk-Ó&LPjâGGG3kÖ,«»~`o~oµÔët:e"\ó}·ÅñR?°ÿøãY²dI£Á»N§ã£>²zNÔ·-[½‡Å ©UGµ[¼ev† þjýŽ;iÂŽ?ÁŽ_w1ùZë¹'"víÁd21nô(«N'Œçó¯¾fמHûã#ØYœÏfddr*é nnn « Ùóñ'Ÿa4xôá†=‰-G—›ê: uD'­K…ëë6l´ ë;ûñ3vÌè.SFÅÙÏ{WWÔ*jµƒÉÄ/>Ê+VpíóÏpúçŸÙõòË„†‡3õ•Wpps#%"‚ pöÈìTªÚÑ*®®8µã|¾¾µAjz†Â?ûâËJ‰ê1£F2mÊdeNÌ„ÄD~Øø‡ŽÀÅÙ™·–þ?__%Ð7ßgWÐßOmŽÕjµÊIpSýù±G™fñ&aìËÊÊÛõ‰éõºöé½SOii)GbŽQmêÒÎA=ÔŽh0÷®ÏÉÍåd|¼œ…‰V3j¤;vŽª0Sdâà‘Ú@ãÉÇ|Ð:C {C8R@N‘‘j“ƒ1#<¤!›ªÔ¯©ÜÔeÌŽ[ô ³ ¬Nž8@Hhè%¿tÞtÓM¨Õj .»¼B|Ý{­úÚ æ¿ÙûõëG÷îÝÉÍÍeÇŽ þžššÊþýûÜ>sæL4 QQQV_Ä/×¢E‹øúë¯9zô('Ož$,,ŒÉ“/ÿjùÅJ4˜Ÿ—¹ÄL}åååüøã\wÝu—ÕŽm¡¼nâS777›=äO4£m›{ì¶è3±î¸>c»ÖâÑ#G¬–k‰kêFj‹‰iöy”™··7×_=ΟoÓã Ä¢lõ,?r´öD¼gÏž ʾ˜'‹=sæ )))(Þ|||pww'ùÌ¥TN{Ô«‡ßÊgNJ²Y§666Öæ±×ܶh¯ã¹¥\]]Q«Õ”––Úl—Ä„„ËÿbÚÌÏMÝEJS#íeîp“ÓHÙ‚¢º‹)ÎNí{ñÿرc<òÈ#Ê¿×_ïÜÃò›bböJ— IDATöìÙ,]º”¥K—6°·Ö2ÍhuAÞÖg¨9°wrrj4¨‡Ú¹h̽ï-ï·ÕœºÀÞÌ\kÿbËë-JJPß>>œYÅÝÅZ†ó1¨¿ZÝzË͸¸¸ðßìÝÿÛg³²øäË/¸÷nërQƒ `èÁœ¿p>ùÔ"/Ò³ô_µõ¥ïºcÞE/þ&žJbóÖŸyèEx{ÿVV1¬î\ãhÌoçÄGê~î*kŠÖar°'`üxë‚z Ÿ’ÂÚY³xM­æ5µšµ³f‘ÃÞý‹7<üðC ¶W}ý2ï½÷wß}7Ÿþyƒû0÷žµù¼þò—¿ðÜsÏ)“nšÛþ‰'ž 77—rÓM7]V;¶OOO4 ùùùJÐj–ÀZv|×».ãØm‰‰'¢R©8rä§-ê9|˜Ó§OcggǸñã[üXC‡ÅÏߟÂÂB~üá›ahö¹sì«;6ÿkóX6ÏàY\¶Õq0|øp\\\ÈÍÍå׈«:++‹È={€Úò>õ™Ã÷“'N ×ëéݧOƒ¿çææ’’’‚í4$ÖßߟÐÐP*++ùå短Bôââbvü÷¿­ÚMy/îHvvva4Ù±c‡Õó‹µ9Ahs>.Å>72©upp0*à|v¶2úŬ ?ŸÒ²2ÔjµÍ9:Ú’¹ Žå?Ѿ,ë¶GEE)½ø-òî»ïòî»ïÚ á£££­Jà´u-xË‘h—Sßr™®0ŠíJQ?°¯O‚úÖ•uî>ò'å_ffme‚¥o-SnûöûuõÎÝyñÙ§xú…—xðòÄâg¸gáäçrÏó5bDƒÇzùùçððpçÛïÖ1Áïx깘w÷}Ä;ÎÁƒXxß½n§ÉdbÙ»+ áŽys­Ï÷¸~êTÖoØÈÇŸ}Î7±tÙ2üü|¹qæ ²“¯&“ -0hþ|°1­Q©P©TM&¥Ì ½Z]Ým†º iíÕj°ì ¢V3àÎ;ÑÒ¾óJL2‰¸øDNÆÇ3dà@‚›pÛ×LJ©“'q2>žø„D«}šàà`\\\¨ªªâÂ… àçç§„½…EE|ÿÝwØÛÛ€‡‡ƒììlòòòprrRzØ·ÕqàààÀÝwßÍš5kصk'Nœ €²òrÒRS1Œ?ž!C‡6X×ÝÝe2îú=ç{÷îMLL ƒÞ½{·kÙ’¹óæñɪU=z”””‚ƒƒ©¬¬$99™À  ´Z-999V#GšÛ—û^Ü„OŸÎ—_|ÁÿàtRÞÞÞŸŸÏ´iÓØµk—ÕòÍùL¸äë28˜äädŽ;FNn.ÎNN¨ÕjÂz÷ÆÝÝz÷îMjZqqqxzzâääDUUUUUØi4ôèÞ½ÝGÑ^©epº’k®¹† &(!ýW_}EffæeîëׯWJé@mù›¶žgÀ²§|ý°Þ|ÑÀ²þ¾···Ò[®+Ú^ý’8fÔ·¾ŠŠ bmŒæJIMS~îß¿a 5}Úuøxwã˯¿!6.žššz‡†2ÞÜF³‹ À^|ýÙ'¬úü <Äÿ¦»¿?snÅ¢÷)#bmùù?Û‰‹ç£Ë­J蘽ôü3¸|à̆M›©¬¬døÐ!,þóã8^æô¢ë3wèê5éZzß~;ñßJ«ÅX×M£R)¡»yD¡Úb]c]h¯Öj1UWÓgþ|&N°ºïöp×í󨹝׬åÕ—^ào}‘¿½¾”ôº2nñõñá™'Ÿàë5kñõñ‘2Ô­ ‘°¾‡¢ºº ­¶ùC/:*°¯®ª¢  Ÿ1íTߪ³õ®®.üñ‘?ðÚ’7HËÈ๿¾Â¢÷2fô(›ëüº'’¯¿Y« w9xäH§ëŸ}éywGG;^ù‹'‹ß¨ý"±ó”¼–ÄÓö"( ¶·\zV9Ë>?Kô‰ªº‰gM¼ü€7.ÎÒ«¾IšwßÍöíÛIINæÄñã˜L&zöì©„õNNN,\´ˆ_#"ÈÊÊ"#£¶Fœ£“Sƒ€hΜ9øùùqäðaÒÒÒÐjµ <˜é7Ü`ÕK×ÞÞžÙ·ÞJjj*ç³³9uêF£wwwFŒÁÄk¯¥G—µýñqq€í27‰‰‰Æ‹–óÐjµüòË/,[¶ŒÕ«W³uëVºuëÆÌ™3Y²d Ë–-³¹žƒƒ›6mbÓ¦M|ùå—:tˆÃ‡ãááA=xà¸í¶ÛèÖ­›Íõ-ZĆ ˜:uªRRãr½òÊ+ 6lØÀ¦M›”Ñï¾û.h46nÜÈ—_~É—_~ɾ}û¨¬¬$00'žx‚çŸÞª/ÖŽmé†3ðõõ%::š³gÏ¢R©èÑ£÷Ü{/}ûömQX?íúë1šLÄÅÆ§ô|¾¥ zªNš<™žDíßOFFgÏžÅÙÙ™!C†0yÊ«É^[ÊËË‹G{ŒCËÙ³g©ªªÂÅÅbUÏ>(0fÌ 55•¼Ü\233±³³ÃÃÃ)S§2aÂå|¢-ƒÐ°0}ì1"##9sú4±±±ØÛÛÂØqã.Zƒ¿wïÞäåå)½¶-…Y„÷aíTÇò|öO>ÊÎ;8•”Dll,Lš4‰©×]Ç[o¾ €‹‹K‹Û¢)ïÅ-44”E¿ÿ½²­eeeôèу›o¹…€ž=„õ­ù™`Ö³gOÆÏ™ädrsr0Õ?÷èÙS™o (8wÎ;‡N§£B¯ÇÁÁOOOüüüp’‘•W­E‹qöìY¥|DDÇgÖ¬YÖžŽŽfëÖ­Ê…E¨ío.}×–,Gø™{ú'%%±uëVåoýúõcÖ¬Y\sÍ5Véž:uªKNZÜ•Õì%¨o½ÃÂø_ä®f­;|èPVüë­&­ÓÝߟW_|¡É5ëæ™uóç...üõ¹gùësÏÊNm&g''tu&srsLÜT9¹¹ÊϾ>íX7]­æú%¯S’’BæÁƒh´ZL55M&T**~ë)¯R©0ƺõ*;; ÕÕô3†i¯ÿµ Cíá™'ŸàÙ—^Q:ûþë%¬Û°‘_þ³]ÙG–ûmÚ”)Ü1o_òOrrsùÛ__èrÇຠùqãO-º;æÍiÕ‹*½®Ü渊˜˜zØòáÊ+>øP ì¡¶Ò;ËÞl³†ÎÌÌà\V#l jm1¨·ôëžH>þä3«Ûü|}8 ¾uo‚¹¹¹:|Ôª&À3y¢C'ô˜ßo=Yøök›·[jlËÛ¯fÊÕ\“ £ÑˆÉdâtü FŽoþ¬Õ«7¤ñÞw¥uSê˜pvR1¤om<©Š2½I™pç¾]yþ¡>Í~¬£ö6y[yä‘Vi»U«VuÙýn4yåå—Ñh4üýµ×Úý±ßøç?±··çégžið÷o¿ù†„„?ýt«ôj¾R]ª…¢érssYñî»tëÖí²'ËW-[¶°uëÖÚ fÖ¬f÷¦o­ûi­ó¢+‰N§cõêÕVålÌúõë§\ÌÑëõ6Ëá >œ… ¶K=xËÞüÇot›,·Ýü¼ÂÃÛU¦çè½ô8UÝd‡æÞ™1éeWµ¶.¬¿÷"¥q®F ‰§пŸ4D;¶7Ð*mnH¶v°Øo¾ýŽR)ÁÏ×·Ñ*ñ ÄÅ'2ÿö¹½¿=‘û”À~ôÈ<·øÉö \@¥¢4=ƒí?NêÎ5ÔÔö¨7ó`Ò«ÕµÁ@è´iÜðþûx„…*÷ÕÌbHP¿»ÿ^†Ôu¬;Onnzž à@Bƒ‚quuád|<_¯YKNn. ï¿ï’7ǹìlz6±cHS4–16UkfŽEöóó#û\v«„õ¶zØoùùfßrs›4tö¹ìVí%w1ÇOÆvÚ jg÷õõáãUŸ‘[ד$'7×êjc}æa,iBˆõ7qç¼¹—ý!$ÚÇÂÛCÐÚ§ñϯŠ0U:‘Çk”žô&àÕ»qÏÍ!Ò`W½NǸñãéÞ½»Í¿"A} ÛQÈq l«©©¡¸¸¸AÙ‰¢¢"6ÔMâW ësrsùaæ‹.©¿×¿ïvSWîÆ-8ˆ9ß­åÀ›ortå*teeh´Z4F#ƺyèÔj5*Cu5ή®Œü¿GûÌ3Ø»¹aªë‰ßQ®Ÿ:…Ðà –½ó¯-yƒAû3uòdB‚Rħ¦¥qèèQöìÝK\|"¾>>üí¯/tÙIeï˜7§UzÖ·¦FÃú€€Ñët8µBƒú}[ GÑétäçç1|ø°vݹ1¨72p o-ù?o߮Ա·Å×LJ©S&uš+¬–á~ذé’oʶ®†µë°§«õDvvc‡ñ‡O®V"z0´·ÿücýB=;dÛ,k~¶ä>D󸸺Þèß'O™"Ô í(ä8¶Uèõ¼³|¹2!¯££#EEEdffRSSCpp°ÍIs…°ìm——Ç‹/¾Øâûô‘sÒ61{ölÂÃÕR8…Û 6ŒðððvéMo©±sÑ &( ¶lÙbs²Ü‚‚ÙÉmäÍh-oE·¬<糪ynBµ4¦è,³‘Δ“„†„ðÌ_žàÃUŸ6(µÒìÏq''}ä¡vU*&£;&¾ö¡7ÞÈî—_&ïÈQÊ eÞƒ£•ŠncÇ0å•W¸þzì¨í¯²˜¤¶#÷ÉG+–³nÃFöDîã£UŸ6zLu¦QÍu×íó:Ýs¸è,_ÁÁ!$$&2räÈVy°??ö(ãÆŒÁÙÅ™¡©}Ú‰‰‰·ß rôÈdË& g;íÁçêꢀ©ii¤¦g(¡}hP¾¾>î*ØÍ7ÍlñÕ-™…º}ô ö䇷<9—SÎÎCù˜€c}èáëܡ۵xñb¢¢¢Zt'N”,„]ƒ£#“&O&99™´´4*++ÑjµôèуÁC†0nܸvðVt&L`Ë–-­6¹§““Æ “†m#æ‰gÏžM~~>ùùùèêÊ{:;;ãííÝ¡/tõJšCzËmZ´h³gÏnÚ›ËXŠÖ×Ò Þ|Ö‹®Â²[¶l!??Ÿððp†Þ¬ãCjÖ_œô¬o©Yßþí H›wQæ’6•@Ej‡V¬`Ô£âÒ·ö€Ñ`è° e»Š¶®Yß]4¬HOO'// ¯íÜOØ¿?¾¾>ËÑ,„ óÿÖ !„Bt]r^$.u|HX/„âJp5†õ—cŒÁ` 55¥S?‘”ÔŒFƒõB!„B!„B!ºœË*ˆ4dÈ(..î”O¢¸¸ˆÄ„† "{T!„B!„B!D—sYa½““ƒæàÁÿQ]UÕ©ž@uUdðàÁ899Éâ %C½…B!ä¼H!„âJvÙS ûûûÓ§wo¢¢öwšÀ¾ºªŠ¨¨ýôéÝÙ›B!„B!„B!º$uSÀÕÕ•¨¨(ª«;6°¯®®"** WWWdO q –J™vpt¢´¸HG!„Bˆ+@a~ŽNžÿ !„¢sS7u…!C†ÈžÝ{(î ¯¸¸ˆ=»÷(uê…h&•J…‡W7Ο;+!„B!Ä 'û,Ý||%œB!º(usV  _¿kˆÚ¿ŸÔ””vÝàÔ”¢öï§_¿k¤G½-äáåMUeYiÒB!„BtaYiÔÔÔàêî)!„BtQ*½®ÜÔÜ•õz='OžD£Ñ0pÐ`<<<ÚlC‹‹‹‰‹Å`00dÈ™LVˆf0™LÊÿ&“ £ÑˆÑhàlZ vvvô쌛§—4”B!„]DiQ!çΦSSSC¯0Ôj jµ•J¥ô°—žöB!º¢sÙÙôìÑãªzÎ- ëÍÒÓÓ9sæ þÝ{п_?œ]\Zmuåå$ž:Å…óÙôéÓ‡àà`9R…hsP_ÿ_YI1…ù¹TV襑„B!„è"ðòöÅÕÝC èëÿB!º" ë[ ººšôô ÒÓÓðñõ¥GøûwG«Õ6ë¾.œ?Oöùlòrs !88¨Y÷%„°V¿w}ý–Ë!„B!:ñz‹žó…ôÖ !„èª$¬o%YYYäää““‹7ݼ½qqqÁÁÁoŸÚ“• êÂÁ¼ü<*++)//§ ?Ÿ¼¼|üü|éÙ³'þþþrd ÑÊêóõÚ !„BÑ ¿È[ð¶{Ëß…Bˆ®JÂú6PPP@AA!¥¥%TWWSXXØ`///´Z-nnîtëæE·nÝäh¢ Õæû_!„Bщ¿Ð×ë=ߨÿB!DW$a½âªa«½ôªB!„¢‹|™o¤w½­¿ !„¢k°“&âê>¹7™L6Oäåä^!„Bˆ®un/çñB!D×&a½rb4Ú !„B!ºÎy½B!º. ë…6Oî¥ ŽB!„]çü]!„]Ÿ„õB9ùB!„B!„¢ƒÙÅ?"­ „W0''*õzi!„¸‚¹¸ºS^V" !„W0GG'**ä¼^!®d*“ÔºB!„B!„B!ZUüñ#ô ¹ìåÕÒdB!„B!„B!DÇ’°^!„B!„B!„è`2Á¬B!„B!„BцL&EÅÅ”éÊÁ®..xzx R©”e$¬B!„B!„B!ÚPQq1E%%¿ý^R‚IÝ<<•Û¤ ŽB!„B!„BцÊtå n+/·¾MÂz!„B!„B!„¢ ÕÔ.y›„õB!„B!„B!D“°^!„B!„B!„è`2Á쪴´”’’***¨¨¨B!„è@ŽŽŽ8::âî››4ˆBqØ­#2ZÇé”*ΤTIƒÑú„ÙÓ7Ìž)œ™<Á¹Ëm¿„õW˜òòr²²²Ðjµ¸»»ãíí£££4ŒB!Dª¨¨ ¼¼œ¼¼<²³³ ÀÅÅEF!„¸=QÁÒåyt÷·cÊgî¼Í¾½í¥a„h§“«ˆ9YÁºŸJX±ª€ŸòaäЮ“ªL&“Ivã•!77—¼¼<‚‚‚äËŸB!D'U^^NFF~~~x{{Kƒ!„W/¾-bݦbþùŠ— …¸=QÁ ¯]àÁ^Ü9ǽC¶!þøz†š‘as™Ð  åg©Y…ÈÏϧ¤¤„~ýúIP/„Bщ¹¸¸Ð¯_?ŠŠŠÈÏÏ—B!®ë*!2JÇ_JP/D'0r¨#?~È/;ÊXÿSI—Øf ë¯åååäääŠZ-»T!„¢ÓŸ„«Õ„††’““Cyy¹4ˆBÑÅ=QÁçßòþ›Ýqs•lFˆÎÂÍUÍûovçóo 9z¢óÏëÙª5ëM&WKU•JeõGÊÊÊ"((H‚z!„Bˆ.D­VDVV×\s4ˆBÑ…-]žÇ?_ñ— ^ˆNÈÍUÍ?_ñgéò<~üªW§ÞÖV ëM&*•Jù'ÚOii)Z­VJß!„BtA...h4JKKqss“B!º ÈhÝýí¤ôØÈ¡Ž¸º¨‰ŒÖ1e‚s§ÝÎV ëÍ}ii)éééèõz¥—÷•ÔÓÞü;}û¸páBƒuU*7Ýt£Gnp;Ô톢¢">ûì3œy衇Ðh4FÖ¬YCZZšÍmsvvæøÞÞÞÔÔÔ ÕjÙºu«òåM\ù6lØ€N§càÀŒ5JD!„èâ6nÜÈÒ¥K)--½ìuJKKyÿý÷ùꫯxñÅ™7ož4¤B!„¢Íµ[Xoäï¸ã.\xÑeãââxï½÷øì³Ï0ÊíÏ<ó ÿøÇ?°··¿èúùùùlÚ´ NÇc=†¿¿¿ò·‚‚>üðC›=÷ȲeˬîßÔ7ÖÓÿJQQQARRYYY”––·n| IDATR]]V«ÅËË‹^½zÑ·o_ìììä#„Bˆ.ãƒ>hЛ¾ÿþÌ;—0`ÀÜÝÝ)))!!!„„6mÚDbb"PÚ¿ð œ;wŽÇ{LT!D›1 LŸ>€ ðàƒvéçsøðaþþ÷¿À»ï¾‹£££ìä6”}¡†Í¿”ràˆž 95è+Œ¸»ièfÏä ÎÜ|ƒ+öZ•4”]@»¥¯æ »¢¢ƒÁ€Ñh´êo¦V«4hü1ݺuã7Þ ,,Œ?ÿùÏØÛÛS]]Z­¶ òM&“ÒK¿¤¤;;;rrrˆŒŒdÞ¼yJøüðC«Ç4ñcÇŽÅÎÎŽªª*ìììHJJâÈ‘#WüA••ž}û¨ªª²º½²²’óçÏsþüy¹îºëðòò’WB!:½÷ߟ>ø@ù½gÏž¼ôÒKJbÉÝÝqãÆ1nÜ8-ZÄÎ;Y²d çÎSîËd2ñøãKà !„—aß¾}”••qêÔ)RRR8p 4JYÿS +¿,¤ªÚºƒiA¡ÿÑó¿#zÖm*æÍWý ê¥í2ÏëPL'â* ±gÚ$gÙÙWƒ¾ú®HùýöÙîxz¨¥a,´[k˜ƒyµZF£A£Ñ V«±³³C«Õ*ÿ4 ÕÕÕ¨T*^~ùefÏž­|ÁrssSJÝh4«õìííqppÀÞÞwww´ÚÚ7 ƒ*Ëk4FŽI·nݬ¶ÍÜ?^ÙN•JÅÉ“'ÉÉɱZæJ“ŸŸÏîÝ»©ªªÂÁÁ#F0sæLf͚Ō3âOú,]º”éӧˤ³B!Ä% 0€O?ýT¢ Å%Vòé×…ÊïcF8òÌã>ôì^õ™L­cÉÛ¹èô&ró |øy]ì#'D'ÖáaýúõëùᇔÛvíÚÅÊ•+qttÄd21jÔ(|||” iÍ륥¥ñÚk¯5(ÝR_||<ÉÉÉ :”êêj\\\=z4‘‘‘J?`ÀBCC•žûeee>|øŠÞùF£Q™È788¸APoÖ­[7úôééS§HOOgܸqR¿^!„ÒêÕ«•Éd{öì©”Tl®7ÞxƒÛn»sçÎQZZÊêÕ«¥ŽB!:Ügk 1÷+í¢åÍWý±·ÿ­.½JS':s!Ç‹÷>)`û¯eüñ/¼½4Ò€BtRš¸šL&´Z-*• ;;;ª««Ù¼y3O=õÆ Ãd2áææ†··wƒ÷jµGGG¥dNý25æßóòòˆ‰‰aÈ!J]û±cÇ¢Ñh”^ó£GÆÍÍêêjìììHMM%>>àŠíUo4•çæêêzÑe»wïNZZ:®A²ÊÊJ%Ì/++C£ÑàááAïÞ½éÝ»·²ïê+..&!!ììlt:jµ777‚‚‚0`€RÎÈÒ† Ðét 6Œ€€bbbÈÍÍ¥¦¦†ûï¿ßjÙ¢¢"âãã¹páz½µZ——¡¡¡ôéÓGÙÿ¶ÔÔÔOZZšòœ|}}2d¾¾¾òî!„Bt2%%%Våo^zé¥÷‚www祗^âÑGj/,\¸Pz× !„èt Y·nÑÑÑ\¸pµZM@@“&Mbþüù8;7^ó»¼¼œo¾ù†½{÷’““ƒ³³3ƒæÞ{ïÅÞÞž‡z€-[¶\2?øñÇùðÃعs'Mm8œ••Å‚ øôÓOqsscÍš5/« ÞÒœ[Ü”šö&DÔ3kfí>¼óÁ³œË®`åÛ=8“ZÅúM%œÍ®æ†ë\xùiëì#2ZÇ¿ÿSJBR%å:#^ž†täÎ9î êï`óñM&ˆˆ,ç?;Ë8u¦’ÒR#ÎÎjú„Úsó ®ÜîŠed4çþLòò­K£üYί‘µ¥p¾þ(€°ë¬ètrßo*æè‰ ‹ ¸8«¹¦·=7ßàÆ ×¹4¹}›ºÍ–ªªLlØZÊî}ådœ­F_aÄÛKÈ¡NÜ=Ï>¡ö>î¯{ËùeGIÉU—psUÓ¿¯snvcÒøÆ_¿Çc+Ù¸µ„ñµÏßÙIMH–éS]¹õF7lõ·yG:åºÚìô%Ý3Âzè]ût¼¼´¶4¸¿Ÿ† _ÚÜGk? @§3ñÍE;YAY¹_o;¦MraÑ=ž8;×6Ô–m¥¼ù^~ƒí¸ï‘,¦^ëÌ’—ä5 g}í‹À¤„ëjµšêêj«Ûê/c¹¾ùŸ­e̽棣£Y¸p¡RÞfèСøùù‘Á`@¥R1nÜ8«õ9B~~þ•½óíìptt¤¢¢‚¬¬,†Úh¨DPPÍ¿°{÷nÊË«!VSSCNN999œ={–)S¦4ÆÓÒÒˆŠŠRJAí„ÂÂB INNfÆŒ¸¸Ø~cÍÏÏ'66¶A‰$³””¢££­.¶ e»ÒÓÓ™6mšÍQüòË/[­›••Evv6×]wò"„Bt"T~îß¿ÿeר¿”éÓ§Ó¿)--åàÁƒ­vßB!Dkˆå…^ ¬¬Ìêö3gÎpæÌ~þùgÞzë-BBB¬›——ÇOˆüüülÖ«7?Ö•:¹,@Ÿ>}ˆU&š;vl£á¸-z½žˆˆ***pwwÿöîç~Ž-Z¤Q£F)›ÍjãÆzíµ×ôÖ[oiÕªUš;wn´ÜÞ½{õûßÿ^A¨©©I .Ôðáãå^yåutthéÒ¥ºè¢‹ªn{Ë–-rGS¦Lш#*ŽÓÞ½{£ ¾±±Q .Tcc£²Ù¬6lØ 5kÖhûöíZºtiÕü6lëºZ°`&L˜¾Ù´´è•W^‘ïûZ¶l™Æ×gç8þ{ì±èûk®¹¦_×}Í5×èÎ;CX,vìØ¡[o½UjjjÒ 7Ü ùóç+=ÿüóºûk×.}þóŸ×w¿û]Õ××W,ÿÕ¯~5ÊGÞóž÷è²Ë.S2™Ô† tï½÷êW¿úÕ1ÙïoûÛjjjÒŸþéŸjîܹêèèÐÃ?¬G}Tû÷ï×=÷Ü£Ïþóà*6l*…Á“ÆÇ†~öÆ‘]gyP/INY¶ûµÚ]ÔϘר®ÖoÊj×îpå?ÿû^½í”-˜Saÿwÿº' ½]Gzǹ)Ó†MÙèñe/¦u÷÷ëÆë‡K’>õÑáêêôû¥]ZþrØ)qÊô¸Þ}qpQÚ±‡~Ý®oÝ]ªÛ?¦ÙÓÔÉ1mߑׯÍa=ñt§N™×Ç>0ìÚöHöY’‚@ºõ¯wDA½ëHóç&”¨1Z½6£ý­|_úÛoìÖä 1Í/k§o}woEP?cZ\cšúÙ”)S´xñbÝ|óÍÚ¸qc¿ïwss³¾ùÍojÔ¨QEq ÜÒ¥K9¸}hk/U(hÖ#¦/>¿VᄂN õŽ’É0¿Y¶¢[¿y2¬¤`ŒtûmÍúƒóÂ’,ù¼ô7¿K?þü;÷îÓ7î Ï¿=û|ýú‰ÒwüÕh½}qé€ïÿx¿¾sï~IÒ/Ó®?ù£árE%zöìó£°~âø˜®½º2iï¢Zü’tíÕ ú̧FD#èï¨]ÿøí°bƽÿ½_ï{Oƒ’‰wjé>Ká|«×†ójÖÕ:úößÕÔIaÝÕeõ…¿Ù¡^J+¤ïýh¿þáo¼ikK^÷ý¼-ÚÆ?ߤK/ ÑZ+ýû÷÷é‡÷…ü=?Ù¯÷_Ý xÌhÏ>_ÿqO)ôþÀ5 úÌõ#¢ýyñÕ´>÷—;”ÍY­Y—ÕÏ~ÙÖ« ûðGûåÑQ¤öŽ@Ÿù³–¨CéÙeÝzï• š:9¦©“cÊf+Ãúw]\§É êË9Cq§­µš5k–~øÃêþûï×}÷ݧŸüä'Z´hQáÍ£òâëìì¬ß­µZ¼xqô¼Å‹+GåTV®\©uëÖ'€çyºè¢‹´hÑ"yž§ ´iÓ&ýîw¿Ó}÷ݧ§Ÿ~:š„¶§L&Õ±_°`AÔWûÃ6“ÉT¬ç”SNÑ\ óÏ?¿j‡À¸qã¢ãU^^§Ü”)SªõѨ€¹sçV úçÌ™ulß¾½×ϧNZÔ;¶â¼ƒÇêÕ«{ýÒ_Ê×W¾ÒÞ½{õôÓOK’®¸âŠª#Ïœ9S—_~¹$é‘GQ&“‰~VÄ‹Åôþ÷¿¿×²µµµzßûÞwLöý“ŸüdEP_tæ™gJ Kâär9rÝéÒÀÒþ*1rÅ¥uúÊ­M:ûŒ¤æ¼­& šï/Œœ–¤?¼´. ê%Éó¤ÿó'#U˜’@+^NkkXåÂÒŸ~r¸n¼~¸n¾aDEè-Iᄌ4h²­=ÐÞ}þaíï#wDí0iBLŸ¹~DE©›÷^Y¯ÓÂ<¨«Ûö*kSÍÑìó/~]j§%WÔGí'I©”Ñç>S:×W¼Ò-¿P6æáß”JÈÌŸSõRØ9rÃuÃ5º)là®.«UkÂ_>Ú¡l.|ý£›\ÝXÔKÒ¢ù -¹²´¿÷?ÔvLÎÅO_7¼b¾‚ú:Gïyw©S`k ×ðáò†âN[k+yk­‚ ¨: ¾XÆæ™gžÑM7Ý$×ueŒÑÂ… 5nÜ8mݺUgŸ}vâcô /ôªóv"sGóæÍÓÌ™3µvíZmܸQûöíS>Ÿ×¦M›´iÓ&?^gŸ}vÅ„4;vìˆJ õU¿½¡¡A555Êd2Ú³gOv¬î\ùIJ}Mð[­s@RÅÝ}í—뺺ôÒK•Ïç{ª—ÂþÕ$“¥7j~i`pioo¯ø¤?•¯¯|; ¤—_~9ú›ù@µå/¾øb=ôÐCJ§ÓZµj•.\(©Ô}ÆgôùÙÙsþ¹cñÙZnäÈRÉ–îîîŠ|Ç΋z×½·¶²>þEïè]6¹q˜£)cZ_I½f]F‹OOjÔHW~oeé™\Nêì ”ÍYer•YOWw éÐïXñri¿.87u”[8/¡uÂp{ÍÚŒ.g³V¯¯)u‚U› vâxO7}j„rù0»Ìç¬ÜSѾç-ëH7Ý0R[¶…í;¼1¼—¿\ê|¸ì¢ºª5ùÿðÒzý×ÏÂ~kK^;vùQðß_†7ö^_ó¨Òc]]–‹ë0yCuÇ{–Çq]7¡]^g¾øýK/½¤;vh̘1 ‚@'NÔܹsÕÝÝ­… Ê#×ue­=iêÕ÷Ç5wî\Í;W­­­zóÍ7µ~ýzutthëÖ­zøá‡õ®w½+ ·ËG–?ðÀ]yï}ÑŽ;´aÃíܹS]]]ÊçóGý:Šûå8Îëï755ÑyWúÐâ €Á¤®®.pÑÖÖÖ¯}[[ t¶mÛý­Z¼C½šéÓ§W,S ëwïÞ-©ò.òÆßÝ—(+ç’Í»6jkÔÑY ¨?û—;ºÌÞý•#äwìôõ“[õÌó]ÚÚ’W_‡ôpõÖí¥”÷þw«îýïÖÃÚ¯9Ü}޵Ǘ_¶ú¾ê¯pIïßM[væº\µN†òëS'Ç«.7iBL®£hÿ¶í¹~ë«qœÒùp ¶!Öc´sçN=õÔSÊårr]Wù|^[¶léõf^ìaÞ´i“V®\©Ñ£GË÷}Åb1-Z´HétZãÇ—µV®ëjÛ¶mzñÅOúcذaZ°`æÍ›§Õ«WkùòåJ§ÓZºti4¡Zµðý@ü²w® ôì³ÏjÆ … 9 Öc±˜Œ1ÊårGüGq1ð§÷€“ËìÙ³µlÙ2Iáü8‹/î·u¯Zµ*ú¾x{>­»;]ÛÐÐpÀ¿Ëï’/¯$P\~øðá4æÒPWF½¿Õ?fÛéì {™L¦”É=»¬[yÇΊÇjßuŽdŸ»Ó•ûR_wèw£¤ËJÎrå#Ö«n—ÂQù ŽöíŽøxâøôa}±zd'ua=ý1J ãÇ?fa}qþ£âv Š¥ZÛÚÚ”Ïç«Î '…õß‹Êï@O&“Êf³jmm¥1‡ò‘ÔomÍ+›³ŠÇú®]ÿÝÿܯ–íaFrΙI]t~í!m§g=üë>8L#†xdö©sÃ’Åû[}ù®RèýÎ?¨Õ‡Þ;LÆÅ”Juu[]úÞ7¸ Ê÷í¢ókuêÜš>âøƒè<Ò}N&*CööŽ@ õ‡¼'Fí¥åU*UZ®¯› ïŽ(]ûÏ0hÃúž!}ù¿‹µåãñxÅèî¾Âõb9›¥K—F¡¼$}öÙš;w®¬µrGÆ-]ºT™Læ¤(óÜsÏióæÍJ¥RºâŠ+øÜ±cÇF£àÛÛÛ•L&£_ |ßW:V]]Ý!o{íÚµ’‰nfÍšÕ¯¯«ø‹‡ïûQÇ8ñ½óïÔƒ>(),Ñ÷‰O|¢ßÖýøãGß÷g'G£X¾ÆZ«––Mœ8±êóŠ•Ê—‘Âò°­­­jii¡1‡Sç•æðËæ¬–¿”Ö9gVÏ>²Y«{ÿ{¿ŠÓîÍ›SsÈÛiæÊó¤âXÈÓjZ÷½èég;ÕYý=uRL_ü|“Œé¿6héi˶pǽ÷Ê£/x¤û×ÔÍšY:¿¾«×sÚ;ýá7늅_¹Bø¾°¬ã¥Úr’t㟵DË'Ö=­ìõÿú‰Žªyû¯o¾7ÆÓèæÒ]©déÅíkíýº:»ŽQÉœmJ?AoÖc”Éd²Ù¬‚ ÐäÉ“5nܸ(°Ïd2joo—ã8#ë}ßW{{»|ßW>Ÿ—ïû ‚ úª<ðár›7oÖ«¯¾Ò/~;ÊëÕŸ %p¦Nul<ûì³}~çr9­Y³¦ðT£ÆÆFIaM¼b`¿råʪ5æ­µzþùçµtéÒè¸;X¤êaz&“ÑŠ+z¿CUWW§1cÆH Ëíär½{7nܨ½{÷ª££#z=`hkhh¨MÇwõİmmmºãŽ;¢/Y²¤_'®àhŒ9RoûÛ%I=ôP4al¹ 6è·¿ý­$é]ïz—‰RÈWì€Îf³ºÿþû{-ÛÙÙ©û„®ÿhižW^Ïèoþ~W¯Àúég»ôÿß³/ú÷;ÿ VÍ£o‚Ñ%e#ÖW¼’Öw~¸?A.…#û¿u÷>}êÿÛ¦.…ÃÃêKÛyñÕnm/›Huk ¯üí®n·¦¦”ê¾ùV¶W¨{åeõ*V}jktûßíŠFÅýæÉNýñçZô7¿«bŸûr4û|åe¥Á¨?{¨M›·–²¨lÖêëÿº'z óf×D¯ïÝ﬋:^~-£ßýoe`ÿß¶i݆°#$7š?'¼~¯({ýÛZòúνû*ÚhåêŒî{°ô{ð5WTþþ:iBi”ýƒ·©«»´ðšuY}çûŽÉyóLE'ȦÍ9.æ´ ޵V3fÌмyó‹Å4vìXýùŸÿ¹Æ§|>/Çq´iÓ&mß¾]'NŒB[cŒtÖYg©££CžçUÁ™LFëÖ­S6›íµ½gŸ}VW\qEÅìâAÈq½ôÒKÚºuëIõíé§Ÿ®eË–©¥¥E>ø fΜ©¦¦&¥R)e2íÝ»W¯¿þz4ò~Á‚w.œyæ™zä‘G”Ïçõè£jáÂ…7nœÇÑþýûµråJµ´´Èó<Í™3Gõõõ2Æhâĉڴi“¶nݪ§Ÿ~ZÓ¦M“çyÚ³gV­Z¼—"[I:í´ÓôÈ#¨­­M¿ùÍotê©§jøðáÊårÑdÃ’4eÊ1¢_ÚsõêÕZ±b…š››uÑEU´Ó~¶k×.=ù䓊ÅbºôÒK+ê€ÃsÝu×éûßÿ¾:::´uëVÝvÛmúæ7¿yÄë»í¶Û¢ßëêêtóÍ7ÓÈ€cª½½ý ÙD*•Š&…ýÌg>£åË—«½½]7ß|³n¸áÍŸ?_ÖZ½ð úÿøù¾¯#Fèú믯XÏüùóuöÙgë¹çžÓ=÷Ü£ööv]rÉ%J&“Z»v­î½÷^mÞ¼™ƒ2¶ ¡¾˜~x_8ßÀožìÔoÿ§S“'ƵìÈW„÷Í£\Ý|Ãáçðö”Î=+©gž'#þþöë‘ÇÚ5kf2«×VeÔQ˜¸ôÇ÷·êßY§xÜèüsRúö÷öÊ÷¥Î.«ÿéV-œŸïK/¿–VºÇ®åa±$MžX “×oÊéÚOnѰG·üñH-˜S£¦Q®>}Ýp}ëî0T~î…n-ùøf:/!Ï5zc}6 ÛŸüßAªé IDATN}äýš>åÀuëfŸß}I~úP¬·µá²óJ&½¾:£=û Ž#ýñ'J-“ÆÇ´äŠzÝÿPØÑñ—wìÔì™qnö´is®"Ìþø†©6晣FºúÔdžëß¾¾þ{þ«U¿ýŸN͘×þÖ@¯¬LGw̘×ûz” :ÿÜZ-{1¥ÿÊë½ïoé”iqíoõµ~Ó± Ð mñu}åë;õ£ûk4aœ§/~¾‰ [ƒ ¬¿í¶Ûôÿïÿ•1FŠÅbQ)Çqtß}÷É÷ýŠIR¬µš;w®~ñ‹_TŒº‚@žçiëÖ­ºæšk´aƨäMñ¿Ï=÷œ²Ù¬<Ï‹O–°^ýÑ”_ŠfÍš¥x<®^xAÝÝÝzùå—«>ÏqÍŸ?¿W}ùáÇë /ÔSO=¥t:­çž{®×²555ºà‚ *JÞœqÆÚ½{·:::´iÓ&mÚ´©×~o7ooo?ì×5räHsÎ9zî¹ç´wï^=ù䓽ž3aÂsÎ9ýÖ–ëׯ—ïûjiiQGGGŨ»ýìÍ7ßT&“Q&“ѶmÛtÊ)§ðÎÀjhhÐ_üÅ_è¶Ûn“–°ùÌg>£;ï¼ó°FÄ·µµé¶Ûn«(¥s×]w1ªpÌýüç?×Ïþó>ç²Ë.Ó­·Þ*I3fŒîºë.}á _ÐöíÛuûí·÷zþˆ#ôõ¯½êçØ­·Þª[n¹E›7oÖý÷ß_1ÂÞ£3Ï<3šÀƒËŸüÑpÅbF?ø¯p´»ïKª­S&Åtç_>èä°Õ#}ùÏ›õ¥¯íÔ³ËÂÀ~Ç._;vUŽŸ6%ÜFqâ×qc=Ýòé‘úÇo‡“wuÛ(ð—Â΃öŽ@Ýé0×Û³//©Tçýíg¥4ºÙê²·ìÈ«e‡¢É_%éÃ瑩n«ïÿh¿¤0`/߆$Õ×9úòŸ74¨?Ú}v]é®/Ö-·¶hkK^ù¼ôÂKéŠõÇcF·þŸQZ4?QñøMŸ©í;óúýÒp[«ÞÈjÕ•ß{eƒ®û`eeˆ¾˜öí÷õ“Âô[¶å£:þES'Åôw=Z±/ÿŠKëõ›';ôêëáÙ¶ö@Ë_.íï¬Sâ½Jõ—%W4è¾¶q.'½¾&#×åz.:na}y ›b©šâù⇅µV¹\NŽã(‹éñÇ×÷¾÷½ð‚ëìŒJÝXk‹Å4jÔ¨ªÛJ§ÓQ™•bH_Üþòå˵|ùrsÎ9ÊårQÍüÖÖV=öØcËœ,¦M›¦ &hýúõÚ²e‹Z[[•Édä8Žêëë5zôhÍœ9SÆ «ºüرcõž÷¼G¯¿þº¶mÛÕ¹«««Óøñã5kÖ,¥R•5ђɤ.¿ür½öÚkzë­·ÔÙÙ©X,¦ææfÍ;W£FRgg§r¹Ü×Ç›>}ºFŒ¡U«ViÇŽêêê’ëº1b„f̘¡©S§VÜaÑíØÖÖ¦¦¦¦^“íèg“&MÒÆ£»KÀQþ°d‰¶nݪýוö«V­Ò¾ð…Cª7ÿøãëŽ;îè5ªññǧ^=`Pš?¾~ðƒè'?ù‰ž}öYíØ±CÆ7Nçwž®½öÚ>ïâ6l˜þíßþM?üáõ»ßýN;wîTmm­æÏŸ¯øÃÚ´iSÖ÷çßÐè×´Q_«nײ»µkw^yßjX½«·×çÖêÒ ëäE˜J}ý+£õÔ3]zäñ­Z“Qk»¯ºZGãÇÆô®‹ëtù%u¥k$é½WÖkꤘ~t«^[•Qw:ÐèfOœ“ÒGÞߨ/ßµ3 ´W¼œÖy‹KÙQMÑ·ÿnœþýû{õ‹iµ¶ûÝäiø°ÊŠÞŸúh£Î?'¥ûjÓ‹¯¤µ{¯XLÝìé¼Å)-¹²A£Fz|4û<ºÉÕ=߯Ÿþ¢MOý¾SomÍ«;hÔHWg–Ò‡ÞÛ Iã{wÄbÒ×¾8Z?Õ©_ÿ¶Co¬Ï¨­=P}£y³zßU :ca¢êþÞ|ýãì”~öp»^Y™ÖþV_É„£ÉcºèµºæzõÅmþócôŸ?mÕc¿ëÔ¶í9ÅcFÓ§ÆuÅ¥õš=³F¿ñØTYrE½jSŽ~ü³VmÞRÚ.BÆa*],óüóÏë¼óΫZ¼bC…üî»ïÖ'?ùɃ®ÿá‡ÖM7ݸN¥Rúñ¬«®ºê Ë¶´´è‚ .ÐÚµk£IkË÷᪫®Ò~ô£ŠªÛo¿]_üâ(¨Çãzúé§uÖYgEír¼¬\¹RsçÎåLèá_þå_¢À¾hÖ¬YZ²d‰fÏž­Y³f©¡¡AmmmZ½zµžþy=öØcÑÝ}Õ\sÍ5úÚ×¾Æït€“Æ}÷ݧo}ë[’¤ßþö·Ç5ó*λ|“þ÷WSh€ëµ—×_^®qÃím죬ØÔI“¢ïûÈú-[¶hݺuêîîŽÞà‹åhº»»µfÍ=üðÃzðÁÕÝ]ºÕ¤««K·Ür‹vîÜ©³Ï>;z¼Ø«[=ǵeË–¨Îyyð^üþ¿ø…>ñ‰O覛nR}}½î»ï>ýÓ?ýS¯ç`èºùæ›5~üx}õ«_îü[½zuÅ„±RWW§»îºK=ö˜|ðAIÒ< IÇ$°` d³YAP1ñl¹×_]RxW=A=[ǽfýwÜ¡¯ýëõâ‹ßû¾_Ð÷åþæ›oê†nPmmmE-ú¢â¿ƒ ˆÖÓWøþÓŸþT?ÿùÏåy^Å6pâX²d‰.¹äÝsÏ=ÑijSWW§%K–èæ›oVCCCTú†Àp"úÆ7¾¡½{÷ê+_ùŠb=êe¬[·NO?ý´$éÜsÏ¥±à;îa}q"Í)ñ{>n­UggçQï‡1F¹\.ª[ψz€SCCƒn¾ùf]wÝuQ©›­[·jÕªUQxæ™gjüøñZ¼x±.¹ä’^ðÝu×]’ì'–ýû÷ë‰'žPww·n¼ñF}ìcÓìÙ³åû¾–.]ª»ï¾[¾ï«®®NøÀh08ƼÁ¸S}çý¨W+€Wq”ü‘NK`8Ñ466êöÛo×í·ß®uëÖéK_úR¯çÔ××ëöÛoWSS ÇÅÆ€Ct×]wéꫯŽþýÀhéÒ¥4 `È:ýôÓõŸÿùŸúô§?­yóæ)•J)kÒ¤IúÀ> ïÿû:õÔSi(8<š8tå#ìï¼óN-^¼˜F iµµµúЇ>¤}èC4 Âzà0Ýu×]Z²d A=€~CàÔèOGÖchEÚpŽ:¬·ÖÒŠ´à(P§ÔŽÆ‡õŲ/‰DB©Tê¤-cŒQ2™T"‘àl‘£Y?uêTÍ›7O’äyÞIÕxÅ×»hÑ"MŸ>]µë‡ï¨ÃúúúzýÙŸý™’ɤ|ß?©Ï÷}%“I}ö³ŸUmm­¤ãÖ' ¥ÓiÎd€!ª³³S©TІ`ˆš15®µë³40È­x%­…ówu”# _J_uÕUúñ¬üÇÔŠ+Ž(<¶ÖÊ#cLôý`e­U2™Ô©§žªÏ}îsºêª«*^Ãñ”H$ÔÙÙI€!*N+Ó Q§L‹ëÅWÓ:e:ŸçÀ`¶nCVc›we˜~Û»«®ºJ]t‘6nܨt:-Ç íŸH“¯ƒø ”L&5yòdÕ××÷úùñÔÐР={öhäÈ‘\qCÐþýûÕÜÜLC0D½ãÜ”î{°M×^Ý@cƒØ¯ïÐ'?Ò8¨÷±_»êêê4þü“î@äõõõjiiQgggTŠCC{{{ô;šÎ?'¥þ÷=ZñJZ§- ò0ýϳ]’ ¯×ÁÌéÏ•Yke­U'ÅWñ®.Ù3~üxmÞ¼YApå AhË–-3f À÷ŸmÒnß©ö²`°iïtÇ?ìÖ-æÛ#¬GUAhùò—ôÆëŽb-¦/üV­^£^X¡l6{Ì·EX>Ý÷Óh'µŸÞÿ€r¹Ü1ߎGS£/+–/—ÔsRYFÇ8y¬Xþ¢‚ 8æÛad=ú´s×nÀImç®ÝL0‹ÕÑÑÑÇOláë?€@ß9iÿ¢ Ó’xJäÀ‘`d=Œ‘õ8€¾FÑ3zúa=úfz„õV"¨€þG#ëq U…oiè°Ça= Êà0Àë`„õ 0jÖ£ovÀW'ÂzÀÑÞxAX‡‚28 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€FXÀ#¬`€Ö0Àë`„õ 0Âza=Œ°€æÑ'Ûë0Çy¿ ‡ ÀI‚°à$b&ý¶Ç.<ïµ_– ÀÉ…28 0Âza=À ÈZ+k- C5ë†0Ûç#¶ìÿÍë¿[+cŒŒãÈqŒ$#ÇqÂÇLiI#ÉT)zo­•-nÏZÉJVV6d‹ß[+•uØÂv¥B½úòR¶ÍCín ¾=€¡Ž°`ˆ³|$ âeÂÀ¾Z¨¾\/®šDB555ò——ã˜ÂÏ e(Œ#c*ëQ‡ÁZ1Ô+œŸ¶r€­‰Îã ÚY–Óp'¬Mmm¡Þuá¹”¸úóƒG ÂÉ[ãÊÅ”L$”H$¯‰+‘H*…ÅËÜD×¢$ãô½ê׺éñþ •ÊàGÔÃûòϰòÎkm4Ú>‘HÈõ\yqO¹\N™LFÙlV¹\N¹l.zÿ8Òä·0tÖÇã˜Bí]I LkÂÀþ@¹ƒ‘*ý ì-%N¦˜bÂ1Çq s6KU„C®cee~>X[1÷cᡊí™â¤UVç&§ Øýóf­bRí8޼XL5ɤêjk•H$‹ÇׄµèP^æàŸ5¶g•׬/¿¨Þ1]ù~ẮäHÆ3òb1¹ž'/S6“‘cŒ²Ù¬òùÊÀ¾×碭>-Ÿc†ÂzàCÐðÿ ðÃQA É—T6Û_ïå8ᲊòÕƒ Œ]¶8÷Ší£9m¯æ-E7Çð8تÿ*µ<ÏS`­òÙ¼׉B;Çuäyqå²9¾_ñBkK¥(zž¦rçqä8®<ÏUP]›÷óœ(}ž)@?]í/‹©&‘T*•Rmm­‰šBMúðŽšð™V½n9ʳ¹?ÎjÇ8ò\O®ãÊó<ÕÔÄ•­‰Ë1Ná³0{H#ì`(#¬ú‰¾I2®ŒkdS¸ä\I¦l`qôa¢„åò’5á—md}±Š2¥wz² Ž”­ÒζÇ1¨þ¬c¹7¥…ìÙl.,ec­dFVï+“ÏK6豟=Î,lj~V-ô³6Ÿ÷ø9†ï÷*«Ã™r<ΜTï=Ž#Ïó”¬M©®¶NµµµªIÔDwhYIùB‰œþ—éß3º8ÒÞ;®õ f2ù~@`à„EXTcUZ E:Œ)”)ë…B¶0J¾øh‘QZ*HÆ•ã:Š»áèÆD"!ÏõÊî×·2FrŒ”÷sÊe³ÊesÊç‹uz+×Ý»bpÏÇÊ ÷ZÛãÙ¦ÚKÅ¡ž6(k1§p^”5yE)ÉvŸ«R™sl;L¬)—ÆK¨®~˜&Oš$ÏueȾ|(¯‘c}e»:ÕÚ¶O;wíVWwZ¥@Þ®G‰TJu ª«¯S2™T,îÉuLÙy(ŸÍ¨³­M-ÛZÔÍ(°ŽŒãrÂE/¿ØV¶tm›ÊÚáÑ5{,Qœ8Œä¸®É„êêêU[›R2‘”ë¹ÊAT¾¯Sç°Ë¬™¾?7ú¥”í‹#GÆ•TSSÎg2Y/òz'"Âz  #+c­ ŒX'än$øaàf\9Ž+? ›#9Ž$+Çsyª‰¹J¦j•JÕ*•L*¯Ñˆ#T“H¶TU/ùJ§ÓêêìPwW§º»;ÕÑÑ®twZÙlV™l^¹\> N µÃÒ’µŽlaÄ~¸N? K¡Ÿ)ýœÀï€*Æ?Ge^Š“…pº»š°]‹míØð±À˜ÒŒ‡6±&ü’£ÀH²¬±Ç`¯{–©ñ«®1Óç貫®T}Â(f|)ðåç}¥âžÜ|Z{vhÍšUzú¹”îîŽÊã9a§”ñO5jÒŒ·ém³ß¦É“&(™ˆ)æ„!½±’+_Ým{õÖú7ôÛÇ«íû²Jç{_]'×ÔãÚ+–26|Ï(t Âs¦°´ “ñÚòNCU (™„ú$|O²á{ˆŒ‘ëzJ&“j¨¯W2•R<^#Çu€»ì„±eM”NÓc¾‰þ;ëð{HO6ÆÈ8Žb±Xa’k§P®+}.ÚpÂBé9Ñû `È#¬ª…²rå˱+å‚5É9IVÆ5r½¸‚t6 p]#«‘ãÕ7ÔiÔ¨‘;ºYÆŒUó¨&>\±XBãÆUmmmaKaÉ‘ ð•ËgÔÕÕ©ö¶Vµ··ª££UÛ[¶hÇöíÚ½G»wíÕÞ=û•ó%Çs%k侬/ÙÀH6®°7Á—L « ×D€d‡.ì1QÃYÙpÞBXo„Ã×#¹®lá\q$S˜ÄQ ƒ¤BÛ;…3˱ {ÑûþQù_X§1’\ņ5kü¼3ôžO|Zã†I)×Ê ¬\ã(–ÏÈMï×þ­ëõ›_ÇôÆêUÚ¾}Gtâr$'&9I™D½¦ÎY¤w]}¥ÞqÞ™J8V1ùrmX^#dÔºc³V<ó„Ö¬ø_ut¹ÊV¹â'S/Qñ¸KYE×_1´—<ÏÈ8žI¹Âóä8a+e}92aŒoýðˆZõ1i/aýIñžTï—Nª ü¡–¦ªv'—­þIbñóÅš¾æž®rÓXÒ»Ž«˜S"‘P&“Ѿ½û”Ïåäçó’ç…s½ÈÈçÖ€!а8e#­YëHÆ•Œ«X*¥úÑÍ7¶YÓ¦NÒ)Ó¦jÚäÉÛCN®ë)‘peŒøü|X‡~,Ca=PEPÑ[IƆÁ¥‘#ãÅT“¬SÓØ‰Zpú™ºäÒKµháPwû>mXõª~ü½ïhTƒ§¸Dç¦ñórrÝêÚ¿G+_}E»öµî*)ÞSÒ» N?4¬CªV,TñkË^­9„×PÞýRìÐ+ïÞ ÂÿÚ°ÛÏõj”—+ëÅåÕ ×èIS5nò o%9R6›‘ü¼j§|ºKûöìÖ¾öΞúÈúþ¬lùzíq™kרtúÛÕ‚*N>ÊË-ŸlØàX9…òY…#a­d/®X}£&͘¥¦1c¯‰I&³ÖÊ1F®cä8¦pùVŽš6fˆD}^Ã=Ž»=Ö;aèœ9Ð¥yÜ8NÔVžç*™ '”M$jdd¢ ¾ÿÎ sϱ‡ùø‘7lq.ã8ŠÇãJ¦’ ‚ œxÝkó0˜Öˆ >$™°Š[#71L§ÍÒ¢3ÏÒâsÎÔ¸1ÍJÕÄÂxÓ§à ¢‰6Óénut¶k÷ž=ÚòÖ½ùÖfíØµS­mêJgä8qynLñxBÍMMš8q²ÆO˜¨‘ÍcT[ß D*¡˜ëÉsÃÜ&Ÿd¬£DM­ÆN˜¦ùé¬ÚÚ»µþÍ·ÔySÙl{¡ì†+[¨A zÁ¦GŽuL3Sk«lÇTl´ÏÜöà;Ø÷ü¡}%5µ&š’×*ð}©¶^‰áÍ3aj8)h2Yx¢#kó’9&/£¼Œ ç*°½Ò÷à ûuègg¯ÇLµ×fd»Õ¾»E«öï‘ëIFyɆw^xŽ‘l  —“ òÊ*„õå5ëûçÌ(æÅ²L¥1íöˆ^·©ú@Û.ˆMÏù"¢ýé§)˜ÃúBÑk '§–üÀ—<#/–P]ãHM=åmj9²pD¾Tÿ¿|LPqu˜~¾Rû¼nŽdB^«còfr(úVçmzÛÊŸÛÞë°*µ³­z9õx•ŽÙ;h±³ÕrGñX\ÉdR555r·0ö@wÞØŠk¬jƒÚÒôÔåíd­íÝOv¨óoÛÒ]×SM"¡¼ïËëì” raÇ A„õ@ßq€Jµß]ɉËKÔ«yâ -8ã\qöÙš1c¬œÀ‘FÔGA½•‚@¾Ÿ×Æ µzÍëzé•—õÚ«¯jמ=Úß֮ήnå}«šš”âñ„Ç“çyjÕ¤ñ'kÊ)oÓ¹^¬)3¦¨1Y'Ç)«¬/ÕÔÒÄ©suZÆjÕëÔÖÖ®®Žeó’ëºÊÛ%¥r¥6 ƒcLqÐCYä0ÖÞóõyX/YÎSà;FNMR#Fkô”j3B©d¼Ðéa áP Çør•—S*VÞÇ^ýÔš}¼ã¨XÄÆ8’±‚l§¤˜ë+|ÉÉ+gœ0š Ù|VƉÉ‹Qõýzõ9 à RvG‹*ÓÈdm½ÆOš®SfÍÑð‘#dŒ/csá¦4¹µ-ýF¾Ò‘¢ŽÓo¯½rÚO;Hß{‡îwÁDÊ×Yý 2Ö°uMÕµ˜cø–iäÅâJÕ¦TWN(¨7×hï°=Ž„©x¿+{w®è¡=¼sÏ¥» \×UM<®D"–ÊçùÀDXTQœL6æçHÆSM²A#ÇMÖü…§iá¢ùš:u‚œb™ [¨So96/£@mmûõÚ«+õ̳ÏèÕ•¯êuohçÎêNg”Éå•ϲ•ãÄäyq9^\6ŸÓö-[µ~ÝF½²rµÖ¾Õ¢³Ï;O§.˜¯©S&¨>á(î¸rݰvÞ:òRu=~¢Î8ý4íÚ¹]û÷µiÇ®¶Ò+±¶¬q‘r¢¡Œ¶jj–ñ)Š´=ÖSÖf=ªZØ(¨.]ÞsLlPؘÂhQ_F~!‡²2¶0Q§ ÃL+£ÀøÁ¥ eCJᜩ¯ùeËšŠŸX™BØí„!“ G‡6LÆ×´ÉS”Š×ȳF®¬Œ Ëùò˜¸‚Â\Fù26œ§ÀG)tëØ²ý7å#î+íòÉ­q*G½÷*kT:VÆ œÂvŒ+O2Fá<”¦4„5Ÿ‘1FŽãÆvÛ‡ÉèHCûhoŒS¨£_ÙÖêuÊŽu¡”Tñ<²åûP¼&{¾tãôˆqïÀX9ÖF¨ÿ?öÞìKŽë¾óüÜ%"r­¬½ ¨Ka#ˆ…;)Q¢mY²ÔvÛÓ‹Ïl=szÎ<Ι?§Ÿ<§çaž|æeÚê¶eµ$R")‰Å$V(  öÊÊ="î½óp#«²@€¦dÉm_žª™‘±ÜÉúþ~÷óµ×–X§°â óð ˆÇ=£ÿ>"›IåüJc%Vø1`DˆÅL%(•"ŽÏar´D9’(göË © 0Ba8²}ÇyÄ•8tvoœWîð5Åôô4µ¡!¢@#ñáŸÎY$)q³ÎÃû·y¸úíF—Ž C*cS™?Ɖc³„*F+Éøä,—ŸžÙÑ e Ê ÊÊJPcáÜþèÛ-Îm¬ÑMcÀXÃÖÚ÷—Xßn‘¤Y&‚À#—\‚s!FèýýGHR®”®U©UËŒ •(FJúùg-Þà4)Î8ZÍ6­FƒV£N½¾I»Õ ÇX'|жP8)°Ödº(®øq e€“è2“S³œ=s†¡¢"æ²bI—V}‡û‹Ë<\ߣÑ18¡ KFÆÆ˜œeblˆJ¤ EJ·ÙÞÝâÊì5Û¤©§QBù­Ú¬ð•…²Ê@S¨®Õ®Õ¨V* QAgHxK¤56N‰»=zÝ.I’Pß«³»»Cco8N|ÕV>Ü:烼ûE…~щ/ìÆw¿Æ‘”‚0 ˆ ¢B„Ô*;¾/ÞÊ›ôOX—"úsÊçtø/Bšb¹B©RñŸ ¥ˆ h%³¹÷ºtÛ-š=ši’`ŒÁ{(¬Û‡2Ë]ùõ×A9wð¯BH¤„ QI·×#I 6MBb…=ÌÚyâYÈ•+W®\¹råÊ•+W®ÿöÊÍú\¹ž¤l}¾T!Ž2º8ÌÈÄ^xþ3Ó£DÊ·þz8…T¸Ô`â&Ë·¯ó‹·Þä'o¼ÁÝ¥v›{$&F¨ÌÄq¯YG°³ÆCéï.O:]ÖïßçƒØÒ®· Ã2cµ—¨%Ì‚LutÓ˜NÜ£X(2Za¨:Ò¾-$XqÐc*Nú.D'JiÊå!*“cLÏÎpbaãǘ˜˜`jt„ÑJ M‚²ÞðÄ¥¤I—ÍíM–WV¸sï>ëkkl>Xcóáõ]vÛmœðœeß”žõ] Nûômá¼™†8~æ"ùïÿwæç§)È„Ðt)—$Ä+‹wxýûßã­w~I³ÝÆ IPª04<ÁÔ‘N:Ã¥§ŸfæÈ(ãejµgSÚÝ»;unܸƭ›×¹õÙM¹ò)k›àBYwtfu¸¬“ÑYHS\ Ñ¥2““Ó¼øÂ˼òÚ«?q‚ñ‰IÆÆ&ÐBR’¢h’ ï“"„A*G·Û¡Ñh°»·G»Ýfmå!×®|ÂO~ôCnÞºÉö^“$±H‚ý£<—À Y$…Êó g8µ0JE "“RR…Åö:ŒW ,ݼÊõë7x¸Ý ކ˜9yŽ?þãosùÒeŽgzb’r) X°ÂHIcKÚ³¤qÊ+/½ÈæÆC>øà—üÇÿøØØÜ£ÕM0©#6!-BKD!D—‡)aöÄ—Ÿ]À&Ž43$µ„™5g÷K"uD©6Fmdí4M‡@µ)×®_§TÙn'£(ÂB•#s'8õÔI†KAb lœ™õ 6ÇGxïý÷(]¿E´sì©K|ë;ÿ’¯¼ü"gNÌS)E éˆë´–>áÚH‰J¤¨w X‰ ­^BêR?¦e¸oŽ:`R A@qhœ#³'9{î)Ƈ (R„³Hb´ìtwy°2>:D¹ÐØë?nÞ÷z$…CS¬Ô8qú'OÎ1RŽ„Ã%)ZIDÚaU§Ü«Q $Y<ATfrv†ó—O0¢²×EÄ–Ð)iIb/h´¤Fj³G™H‰5a°õ‡ì¬,21:Djº±C84ÚMÚXg@* ( Õ˜_8Ë~ó;\¸t‰™£S WK †Kš‚(% KŒ4±¤IŠM i/Á& &n³rÿŸÝºÊ»ï¾Ëë¯ÿ„íí=ÚI@¨2\=|'sÖ‚‰A$Èjêð4s'NsöX…áH¡œ=0ë[[TdÊ'G'ÑÁ-††J̹Àÿù¿äâå œ˜›fr¸ÀP`)É­U:­MFkeVEO¤T©ý½O:`îä)ž{éEžéNŸ;ÍèØ•b‘PIŠQHTÔD¡"P‚ÀíÅĽqÜ#I=¶w¶xðàŸ~|•÷ߟ?þ˜õõµ}^¼o ;™Õ_YùÿÈO !MF„aˆÒ¿ïï$VÀ¡”/ž¦.¥—ôV0T)373Ç…§/19;ÇÈØ8Õj™B()’@IŸÏaR`–¸Ó¢Q?E«¾ËµO?åæÍ[)7ësåz’úËö…Bµ‘fçæ£Ðó€…Ëºï½ /œ#IbnݺÉÇW>áÎÝ{´;=Œu€Ä9‹3ýåÿÜñCʺ4]ßê¤q—úö&7¯}Â/~>CÚxÈp Ö×–¹»ú€õMêÛ[4¬ðpy•Í”Th§H\Æ}î3›û|gQžäâ3—y啸tñ§N1:2B!*…„µ8J„ ‚NRK¤ ¨B™ÊÈ(&M™˜<ÊøäQææóîÏ^çƒ÷Þãöû´»f€/ã0¦µÄIB µF ¡¥À…Ö ­5B)ªÃ£Œ/<Íkò¾úâ‹,ÌÍ1Z&<š! a`PÂaƒ -Â:ÊÅ"“# W³Ë÷¾÷}>¹qŸÍ½XÊùs$5.(‡Ñ…*Fh´ô¨á@¤"ãÈ÷Ç¡µ"TÅ 'qIŒKzh©¼™Ø_E‘ur;©1(¥Ê#‹”%$ÂItf@Z] 8<Él4ÆW¾ö<ÿ‹œ\X`d¸L¨¡–¢"V)ý*ÑNhD  €„k-*Ð(ç¡2ÖZLšâúùYMå±¹OÐ~ç¬Ôô ™?Áéç¾Î~ëϸtþ"ÓSc”J”Ò( "±h‹¯MhJå2½Ú0…J ¨Vªüüg?çÚ­;¬íÔéÙa…/HtÂó»…D‡!¥Jh œ•¢P!û¸|‹^|>]AJthtÖ=-q(­ £0 R"¥@Já L#1„ÚwþJ!¬Å¥’^lýt~^(œÇ‡5)¼ªdˆt=t†Z Ïx7g³°`›}¤‹•9yæ Ï>ÿ—Ÿy–gŸ}†‰‰q*ňHK"-)„}£ŒOß@£„ ,"ôlxI…bI169ΑÙ9NæÝ_þŠO?½Êꃇûlpãð°È¥FˆçÎyƺµ­$A PNy³‹Œa ("*#ãŒÌñüW_ãk_{…ùù1j•" °]4 …C;‡¢oŽ[R›`\€%bdbšs.ñô*.gîØ,#câˆ(P„Ò)¤öcAâpÆ M(!ˆ4ÎA¹Zct|š™£'˜9ÆÂéN:Λ?yååeš­6ÆD9„ÊîÝùÿyNèÇV •ÜUâ·ØÞGÊX@J$*©pfá$gNqæäIª£5 …J)ÈÆj’¤Y΄¥D…ÎXª•*Ri¢R™àú ’Å{¤{MœóEc]V¤rA¿¿…°\!Qä ˜q“$ äv}®\¹råÊ•+W®\¹~”›õ¹r=é—~)BcÑŠ%Æ'&™ŸŸ'´·£öý‡5 ½^‡ÆîŸÝ¾Í­Û‹<\ß"µd\t<ß ¬½ÿB³%c ‡s v‡+÷xç§oòàÎ'D²Çêê=–×7Øk´0q:m’nìñ2à°áx€ %ªÃ<÷êWyí¾ÊË/^föèÃå… ôü}@8°a=oØfá¨V€u2ó< ë(–†æÄ‰ŽŒU*3T|—ë·°ÓŒ1Æ]öwi?ðÒ›ÅqãœCJB‚õFšÁ!è°@¥:ÌñÚ4_û:ßüö79=s„±r™HôLv˜ Q 1 -Ò aD­Zd¸¬/;ÒN‹¸÷cZŸÞ&6¾ á8ãð5…Š8é±0&Í0ôQ¾¢…EKG <®%ÅwLÿÝeæ¬ðÉ&5Ö€1œ›Ì@sB ¢ #S3Lª¼ü•¯rצ› IDATêôcc#„¿‰ áBu]êÙåˆÂAȧòï—}ÑÇÉìg}ºÃã¯_‰È~÷{¦¾ÅÄ™öqG… ‹ NpæÂ˼ð‡ßáÅ—¿Âdm˜R(Pûu*‡µ2;s~µBFè BEJ• CCeF‡ª£çéÍ[lÔ÷HmŠP „ zjûõ)NùÒ˜H'²(¬ÅØ,;ŒÕþ¤~œ¹çÍsѧW‰ƒ9,•"ÐG)Ù~ˆ¯ŸÃZX"a |&4R(ú'!Íž'¤ðÝÉÎ_!i-8Ö!VBš•v:g±iŠ1 Öf$¡@†kãÌž=Ç·¾ýM¾òÊ‹œ=u‚©±Q´ôaÈJX_S¥üñ¤©$R(¤–¾[ß„h¥ަabzš“'O23s”‘Z…w~þ+««þ>GߨWøà>Æ?–š”^¯Gjœ/®8‹ÎI BMT,25;Ë̩˼ø•—xê©y*%EHc‘1>Ð;ËtÀ80gÁYJ0:y”KϼÌ7¿ó^}õ2GNP,†"ßqï×Iø½5øke²S/ñE ¡”¿WFšRYQvŒŒsôè3GÇ©Voüø nÞZ¤^ï UàC…×î/úrFñ£Œyw‘Þ¬C”Ö}Þoå³®ŸJ'Ôè€B±Äñ“gyêé§8srž™É1¤†v»ÅÆæ[[»Ä½˜4IÀY´Œ 3è!L›ÔôˆmÆ»vm  NaœÅ"pÞµÎLr:`dêçž{™ÿþßý/\¾|†ñá"-ñhŠP"eR`CœôHˆQ¤Rã”ö¨Ò·Ì‚uè ¢U©”ª¼òÕׯU™š˜†¿ýWo-7ÚtÆå÷¡¡þX­_uàÆZ„¥%ÚZd*ü9¡$¥r£sÇ©ÌÌñµoþO?µÀhéÍq‹À:H3ã[ …ÒaüÕ’”+C;qŠ?ùöwXßÜeiéõ6 þpH 6î·tšMZÍD C…“JJÊÛ’n¿þàr›ôh¤-Œ °Ö!lBl»´:1½8ÍŒ\Ò{Æω¶kJ+¤•)½¡ªªÃ£ÌÎY†Ç¦8þc#UßXŽs.ëZ6“`lŠuã|£¬!}ˆj?–R mΤYG¢MøÎp?3 N¿óµïßã‹NûßgOôý}M¡Rãü¥gøÊ¿ø3Î=û2Ã#£q¸$2ÔÞ(—ž o傇¥¦T¨•#Ê…ˆ@+ê{ šíÝN‡z¯x|Œuþ\‚#MbZÝVX„H'³HZr~uƒc,©µ¤ÙŽÔÜÀ$t™šn0'¤@Bùë&}aƦÙüÕš@ƒv)¶Û£“BÒ¯aßä¶HGMeœ}i.u¤©¤k ½nÕiÑnwéõÒ4%¶‰?:"D@PfæÌy¾õ¯þ5ùßáøÌídz°%:+b-©ñÇ”Z‹s ) P¾ø‘ô2S] ”Š: ”ËÆÆF*EÛã‡?Ú!iƤ©Í ú,°×¥8“€.ú¦mcéõb’Ä’¤>XÖ—iR´ab¥Êñ…“œ¾xž3ç’ØØ`¤–Hd÷“_œ4TV8wù9¾ýη¾ùÇLhíC±‹Qm𤨨9:çþÀ´©4R¥Ry_€"&&&Š˜ž®§]Úí˜vûRô3_]¶z¨?¦\ö§È ZÙ@ã±®´sE\‡”’BTÈ>s„/HüÔÿÈ1Æa¥#jµIΜ»È‰…ãLN Q*ìÕ·YZ¼Í§W¯sýÆ:í.½^Œs–@+¦§§9sêÏW®'Èšg„a!¢6Ra|¼‚”>Vô™ÞÎ …!í5yøà>K++lï5ˆ¾{7s¥TÍhÖ_úç±¾c´ß·éÅ–„‘uN;”7q2K2é¿Ú Œph­A¨ÌHs NpñùøËÿéà©óg©Õˆ¤ñØIеm”°¤½”v#as·I#6¤RT* Q,…h ¬$P Œ Mý…åQÎ_~™±±):í6Nƒöí6t€MD‡îœïºMLjIS—u¢;œI uf. „•QΜ¿Ìì¹.]8I¨»h¤U8KÖë‰6ÆxïË ß™,k|g®•XJÌŸ¾ÈË_[femï¿þIl*Dê‚k±»r“›WF‘­VÔÆ†©Ö®bÔÁe´J#;´¶ÖY¾·D'ÑÄVàl‚²{,/-²´ºF³Õ]ö´#kHÓc-J ´–8RI0¾³6ŠJLNNSgúÈQ¦G†5“`­@+‰V-©Ò~5€T)±Y§»q‡%Œ²lǬ¨Ð‡¤f-­Iâñ8¿©œX24~”ñÿ†™…³ŒTBBÛA¦)ÝV›F§C+N‰ªÃ*U¨€rPÔiR¬±„2ÈV/(¢JãgŸââ3wY^]fum•îvB×Ä2>»°&`S„V#H?7}ÌkêŸ#:|±Áú™˜|YÄOö•K‹G4Yã;Ä…@)E M*Š {;|víï¼} ”£±ÑaæçfÂ>ËßO¤p˜´G§Ù¤½SçÁÆõnJ‰Ù­sóö"Ûõ½lå!qº€u’c gyí[¿úïþ‚¹é*EíWÉ 4:ô]åÒùpW›véu;4[-6ë ’TP*21>C€u¤Ä  ì¬@ˆ©¡8Tãù—Ÿ'Ô1»»ë¼wå·š´ct¨qNú€O™qÖñ+f´híMp',’4í (ÕF8U­rêô“¤˜´ë‹+:¤Rˆ½:`¥ MÁÚd‚a¢¡q^zõë|ã[¯1:¢µ¿[Û¥Ó“(gQ±ÅuS:]Ãgר¨ïÒé´¡Û¢\*1:~„©£Ç)UÑ!È ÕÊáQXb~þ8ßøÆ7ØÚj°±Ù`{³³}¼ÙçFý•'ÿpÌkÖZn¤öų 2ìÌïR¾à¥d€µ’¨XeîÄ)Ž?ÉèH ­,q¯Åûï¾Ã{ï½ÇÝ»÷é%~Xëi‚z³ÃÖnƒí½¯½öuÆÇF(EÆÇÇ96?ÇÊÊ kë›ôz=\¶J!ö)Ü#1©Çë ¼jå>»Øtj÷O±q!%å¡§Ï=Ålš263ÆpI³··Á;+<\ZãÁÃ-걡Refæ 'N3=>L¡ $(!²r‰4Vˆ*’ã'OrñÒSüìwI­£gÁtÚ4Üミþˆ¥›7>ÊPm„ Ï^âÙ.ñâóp™Iß7ëŽfc—Ÿ~Ìù›ÿÌÚNL£“blŠ´{´šMVl:w#œw¿åVßåk]fªJIœ86Gb##ÃD$Æ„$5Ô[mLš)4-`T„U!N9²–m¥@KÐY0¦”žá.…D Ÿ+p€yñùr¿‹\á±-Ò?ÇÇûÑ(„¢\fvÞ¯ž( ±³³ÁûW¯òá{°t…Ýf›DHDTfâÈõ, §N2>^¦ 0#?ÔDAÊöú:×?¾Îûï|Ä›‹¡ÙN°ø@PÏóÏŽëÀÅ;tôu/‰*eæNÃ:‹1Kw¹rå#ÞýŇÜúì>ÖviÆ–êÐóó§¹xá9^|îN-Ì2:ZE(Ï.÷< …Š H'˜œœäôÂqÆFJ4»-º]ƒµÓæÁb‡Õ{«HUcxbU,1{|Ö#¹û{ž™õÊ9ºí–ïñ«w~ÆâZ˳ú­A¸ö¾g…|lÿ-gÂgàÍô(ÔÌÏLƒÐDZ’66Y^]fiõ+kìã­¡4,Ýþ”ÛK40Rá$8iA¦³Ûï«ÖãPÄó]b¼p ÌÁb L$Ÿ“™ç…BD)³±ù÷õ.ßÿþùå»±²ºN«c•ÂJÍèøQÎ_¼ÉÞn“o|ýeæNS.DûkO¬u) €™™#œZ8ÆüÜî.?Àtcχ_ÈL{_ Ã79Û¬¸¡LüßâóÃìËjà|<Ö3 ÝZ’$FУYߢ¹·Çâí»jæNQ¥“&DB¡²íøšŠ_ ´›Ü¿}‹÷ßýŸ­nÐ!Æ:a6Å¥)©©+U@†N_x–_z‰§Ïœ¤d¤çWË—’ö:Ô[{,ß[äç?ý)?}ûm®^»ÎÚÆF*¬U u…Ù¹Ü[^奯¼ÂK_yá± :О6”!•TXblj–W¿öu>üà*;›;tš-2i†ƒ¡_‘:@'õ¿Ïþ3P¢¡qfŸB!…b@§þ•wx¸ú«[ìl5PΈ.&m±±±ÁÖ^c D%Î?ý s³G(†­|ç·’ƒìîòàÎ5~úÆøîwßàæÝÚ©ÁJP Ò.aX@êª0̵«·Ø­7A@éÌq"kœ%­"&'f8½p–S§NsõÆgôÒN¶ÊâÑðð/Î|ðl©Ð: ÌÌú߉Aÿˆ|8°#Šªµ!ÆÇG)Daš{»Ü¹u“Õå5{]L*±Îe¯çd†v“tbÃÆÎ÷W×8rä(“cÃ( …BD¡X$ŠBÚ½cìÁa‹ƒ"Æo|¤‚C9¢ßYE~¥R®\¹råÊ•+W®\¹rýž(7ësåú‚ßþ=7\Q*—(÷ÍúGš½}gIÓ˜v³I³Õ"NRoö75à¿‹È•î°q‘!wdÖè4T}¿Õõ-N±ßŸžu*TPàü…Kœú"G¡ ³Îjç²NKZõ:×o\á¯þêÿæÊ'ר7:ÑKÁ`p’¶e«ÝáíŸtXÛÝ¥eQùO˜Ÿ§"Å~ ­C"TDyd‚ Ï<ÏÍÛ÷ùôêM’nÄeøŽ¬ò!;ºïÒwm ¤6’Ä=,­òþ¯~Îw¿û]~ö‹x¸Y‡ ªVóñûWy÷Ÿ°»Õ ¿ÁP­‚RdÈ‘± l/¥:4Ä‘éi&ÆFX]oãlìƒ5µòF¼5Ø´G§í™ó©qœzqøòZ“ôÚÄÝ6q·C§Ø¬}T*ÎÍtØ áMjçBŠ©Ñ"ÂAÜnò`õo|ï{üýë?æÝ®Ò-‰ñÜ)Úy„ ##üêŒGêÇŠu¾^X?Ö™¨öÀ\Ý?² ýɺ÷ÈòlÆ´÷˜!åR’¤Ã•÷Áßþ§ÿ¿ýþÔ[#B“tÁÚÒ"úk뛊Ä+Eæg¦)(ÏV÷!´+,•J‰£G¦8>?Õë7‰·öH{Æ¿w6Y|)ë`u†‡ÿøsÙß_8èèýu(ÖýUûóÑ@ÞþßýB€³Ø¸—¥ÝڌϑZGœbk²Ù%d†ÕRÎ"œA γøMj±*+”8‰Á¢¥FȨ0Ä…g_äÌ©SŒWKÙŠ¡J€4)I·ÁʼùÆüõ_ÿ¿Ü[^¥ÝKp2 õ„(_ð“=®^Ùcw¯ÅæN“Rm‚‹Ïž¢6¢Pç(”)‡9±p–g/žcuñ.+÷—èHSáMëléAß ÷á¾`C`}Ñ“!º0=[¤¨ ͽMîÞ½ÅýÁßò£7ÞäÆû4vcBÇ~ŽïŽ"Béˆ'˜EKç©GÀ`âéÎî\yŸ~õW®_'!Ì.¥D)Ej¬ÏHÚí-Þ{ûMÊÕ*cSG«19BRBá("„ÔjcÌÎ΄ѱ ²„kÔ¡O‡_GýÌ>X63ë—Äõþ¼‰Ó”@:¤% i¯E'nSßÞ`ei‰f£CܳÄi@¶&%+K©°NÐêÆlíìÑî%'°T„z`¥€£¿Æhp.þ¦fý£Lz)%Zk¢0BÉ'á‰Dþ¿9¹råÊ•+W®\¹råú'•VŠÔ˜ÏýÛ¡ŸóÓ”+×$<ÇWgœB1Bëßó÷Ÿç°iŒ‰»¤&&5†8µÄ)¾­sÀÚüÍ5øzéM5xBþûØZ‡ 5•± .?û 'NÌP-é}ô·÷}Øc§±ÃO>â‡ßÿ>~zV³‡uŠÔ8¤Þ7?­Mèín³|óo½õ3ÆÆ&Ï]äÌÜ …ç­K¡Á8vò4çÎevj‚­Ý¬À ¿çtÖ#¬MÀÆ š-îÞ¸ÆÏ~ü6¿úŇìlïùZ0Âgöšl¯.ñÓ·ßâØÉYŽ;ÂøX‰D⬥ÓM(†!…¨ÀP©ÄÜÑ)n/n±ÓHö ƒE©½¦tàƒ9û>\æ·z¸ñ,<.DʬØ`“ÑÄî`µ„<ôÈAw»Ë‚r%> tgk“;7oðúý?þÉ[\ÿl‘^»Kb}'¹Ì KIÒïXÍàýÒøŽ_g²ÌØKÛ ‡°—}YëöCh}ƒÜGK ûA¶ÞÔtœ80‹³Há‘×WîóÆÈ{¿z^¯GjN…¡˜ŒŸÒk·x°´Ä;¿ü£s'˜82Tžåäý@‡u– Pdx|Œ£3Ga{· 6ña¦ÙÙëcŽö >„ócÑõ»âÅ£‹¾üL<@bg²Ÿ›ßB€î×ÔöÛÜé% qš ƒÀãzçp¶$Àe…k-&M1FfA­ýqc‘Öb-Õ2£'OqöÒ3LNM*G$-±-$¡´Û¥×kòÙ'óæ?fñþ*ÍNã$HãCz…D(oðÛ8fãá W¯\ágóÇ)VXg¨T’^JQ+P'|(ísÏ=ÃÒÝ[\¹òã3þaHû¾¤ÄÏ1$½ ®}ü>o¾ýcþîï¿ÇâòF‚µŠN7ÆYó1NúûkTQD!År… ÁXÒ4EE2 ÅB·Û#N R+ “à¬Á&-ýÍÝ:ã/` ¹{÷o¾þ:qc—¢Œ1íú{»{t:-VVW¸{‘V«µ¿¦o}ÃoÞÍ-•BiýOÀªçð> C£±Ãõk³ýð!#Õ"µÈBÒàáÊ q R‡›Ðçð“Q¶\VÀ²Öa£§'1z±ï¤·ÎaÇqì‹Bü£??wû«»üV•VŸ_ãòråÊ•+W®\¹råÊ•ëŸPåJ™z}ïð¿•ˇ~ÎÍú\¹¾@RxTg]Zû VáúÌeÏj7&&NZ$iÏwhºAÂ`FÜAçø“ оÁ¿†Á`Z§@èlËö`û؃7Á³ q!ATedz†cÇæ˜¢H‚ÌFX)Ò&¤Í=îݼÎ{ïüœN³Mj|w¶Í¶/]çã¶iLs{‹;7n±xë.'gf˜™œ¤¨}ž9>n–RµÆÔÔsGǸwûõ®ÉHçÙ¾>¶­Rx³Øe¼qáM—Í¥Û\ýè}>üè Û{¾ËS¨ŒGãÀœëÑíìrûÖ'|rý§Ÿyš¡‰cD ¤¸TxTIœ"qTŠ!Óãc ¡ÄC¿ëÜ€ˆ"FH&ºÏZÎL¥±hgR œÅZãMnTf(»ÃAŠÙúÇbÿAH )œçí›Û–øäÃ÷xó­ŸsëÎ2õFkƈËBOš~Èpÿ=|G½àöÈýq²ß!YprŸHt€ZB|®‘Ü¿Z"ų^ 6¡ÓÜæÚ•÷¹}ûÛMz©ö¥ ëW~çyò‹‰{´ê{ܼ¹Èí{9qê4…É2fìŸ:‡’rµÆô‘£ŒTË´Ba}±¡ßn@š¬{þÐyî»æÞ´÷… öÑ?•ãV½ˆý®ßÇá™ú?Bº8ëKYû+ÈpT}÷Ђ‰‚+=FÄß+<ÆÊˆ+4F(lV¬”SþÚÁ,)Î@¥:ÄÉs瘞™¤R-HGÐ_±’Ä8bÖïßáú'sóæ-š_ä‰p2Ãr Àâ\’^“õ‡K|øá{,\<ÇØä¥â0¥¥/¤sÇç9qâcã#¬Ô·ÀðXNÐ`Åþú a [íáÒ.WîñÑïñÎÏÁâÝìu²bEf~ ©ÂbÄZÇiƒ!1kÅHa%H4",a #LÎfîä"w6ت·éuÏš·!%&M³no^o>¸ÏûïtX»w“€ÛëÐk·è´º$IL»Û¦ÝieÞ²HÊŠ}?bðd<æQá Ôš(Ñêðÿ¢‰Ç¼æ‹ÂY¿¬²ÚLj‰›u6:mêZRÔéRâ^GˆqxfSö¦r`¿A"…B«€ ,¡‚È\›,„Ö:Œ±$iŠ ‚ýœ‡þ\<¾ÁZš¸ç<Ê©ÿܱˆƒÌ€~ès©X$‰c_$xòÉÏ•+W®\¹råÊ•+W®ß¹F†j´š-Àõ#µÚ¡çäf}®\Ot0²€Ù,¬Îe† è[ê¾;Ð:ƒµ‰7º2³ÏÉöþ‚;ðmú´š/䋆±`»gŒNù­ŠtŸO/%¢ÿF…R£ó'˜šž¤RŠ<¯Ü‰ÌBta$4¶ÖY½{—åÛ‹(ëpHLv¼yÀ*—Ò•I·K}}µ•lmîÒê$"!Ä7F­BjÍÈpù™)J¡¤§Ä6ãð»/2O¼¤(c1­V?»ÁO¯rgq™nê2V¶NÀâχH±®Ãîö‹K÷Y|°Î©§QÑì_Kk¼98K!Ô UJh­=K_*Ì~§¬Aˆˆ}¸¯;øŽzC9o“k)À\fúäS•½ Ï,Ê,ò>_y`ñ…ËÂ]‰7Àã½ Ö–îrëÚUn}vŸz+Á¦OQñ&£ñ¿‡ úBdF¢N‰Ì¸îÿaLDfÅ»G0Üûx!ýµÎ²l…‰iÕ7¹zåÖÖ7iÇÎï«ç;œÉ¶jõ¡ÆÝkk›Ü_^çáÆ.3GÊXá CÀ9 ލPbtlœ¡r‰‚Rhç11ÎfÇi=qF æ?n|W:HRH»`Ü»y•Û·n±¶¹MjñãDh%úµ>ÒH*p)­v;wnqoi™SgO2=9J¤%A†T2Y!¥Zb|j’±ñ1äÝ„}”Ûþ¹Ó’D_\“¤`z$í:÷îÜäÓO>áÆõÏh¶RŒS8tt Òi¿š ‡µ23ŽÁÙ„F«N·×*h­ˆMÚQ¢8Æü™Ë¼øS0©ë IDATÕ{=ÉŸ±¾¾A³Ù$Ž»ûßÒYœHqÎÐil²ÚÜbmù:C&á¤þ3OŠ,|šZ´/è !‰‚ˆáÚ(QXÄ9Ab q’Ћ{ÄIò¹å)‡æÝÀCâ1‹3­ë>šðòèyBFa’$ÉÁøËësåÊ•+W®\¹råÊõßÄjŒÖ†­ ?ñ9¹YŸ+ד”1¼­³k0v¢o(ô½¼¾¹é1$¥<Yî·‘f&_ö¢Öù—s öiØûO?ØÈ¿> žEp˜x/(W†8yê c££*À‹jÀ¤ô]­+÷ïòpi•n+Á µk{àŠôöÉùÎZL»ÃÆÚ:ÛÛ;tã'‹çPY½ÁdæìÈp¹Ù£Þ4v‡>ô…ÌÉeðì!N`z=š°tç6+÷—Ù­·qRõýþ`—Áz„ï¸ß®×YÝØ¡Ñ†!áÍt%ýÿ´’h)ÑR ´ƒfcÖý+ Ÿ³†²Žxhëƒ[%6CÛ >WÂ[ý2ñ˜ .³Ìº½ñ¥{wXº¿H«Ó µÃÄ݃míoRys~¿s¿oÈ˃¤¡°0â÷#È w 41˜  lí¹ƒW'4·7¹{û36·vè%§¢ ¿Óï;î›ÍÙ(0†V³Íúúë›[89ãËŠ>ÄW ƒ€b±L¹X"” åüõ>Hïåó棤þa“Ó=ö_©÷}ŸÑñ(æªO¼¼Ì»Ðãîs[uÙ5ðƽ<è6f ´²æ+@„ˆ @utŒùã³Ôj!aÒ:HãR Ò˜dk{7¯³ºúNì²"£:Yç¿(@ ©MÙÙÙbue•ú^kJôáÓßO!(•KŒŽ¡ô]”“X7¸ã‘BÈ¡ËãçŒM{4v7¹{û&wï.²±QÇà„F¸ƒç¶¿‚È9PÖÖVé´ëH9F7v˜4aüê”°ÄÑùSüñÐ8'O=Å›o¾ÅÍ7YYYam}½Æi’’$)q’bŒ!MS¬5˜D`qhéïýœŸ ÁÀXYÐêïWçv•Èþ9vû<;ž¶¼ûÌ›Á‘éaj©CkA©Tâèä•B›¦$Ý.{=êͽ¸G8)¿ð, ÷;ôÒóÆú\¹råÊ•+W®\¹rý3VnÖçÊõÄ_è-ÎÒÔš4û¢Ç-½—©=Ï\)‰VÞ¼Mr'= oŽ :¶»ðÅ›ðí›Q¡ÈÿÏÞ›ÇqœiºODdf-(ì;‚ûNjµd·»m÷2sfÎô{Ï™{ïL{Z¶%K²µp‘¸ïˆ}G­™÷‡ˆÌ*€ EªeYî›/O X¨ÊŒŒÈÞï‹çŸ˜$ CÂHÒ‰jáøòyû¤è²ÚsŸÜì㤧IB£Ñ`kk‹F£A·Ýùðq zÝ]´4ºnõ7› ‡_¡¬dò²+˜±xÅUFþ=üîÞËËË,-.ÒJb¬TX›ÍÓc®É¿ú²‰ãÛ;Û¬¬®Ðé´1Z£Ó|wôþÓ¾#×Ðl¶ØÚÚdkkû…AËP<¥¨D?ýýý„>íYỗ|G@>r®3_Š}°r»Þ¶»ö²âY¹ãUS®[ȯ=©^·Í×¢¤E ƒ¶+CÂr?Ã#£ÌÎLP.‡þ<] §0Ý,k-›››4ëu(-AÊnáÅößÙa¤)è›hÚ­­VL[ˆ9N)ébffH+‘V µlW’/h ¿E!³ü›_Óî´Ù«×YZYe{§îŠ|ò`³+éu¯_êþ*©£·Wx|ë«¿¸LçâI*‘kÜõ”B•+ KΞ‹8yú4FƒÍÍ YZZbii‰ùùg<}ö„ú^ƒÝ½]õ:ÍV“N«µãnößö_×ï`µ¼îg€øi¶~û«à×’D#1B¡Â##;6ÇÜÑIjEÚi²·³Í³ùgl¬ojM…$¶'ö£{O­¡P¡B… *T¨P¡B…~‚*ÌúB…^&‹7g\¦¶6k>ÀH UˆP ¥„3ëSÇçuÝ–6ïɵygìw¹ =Ïwï²ße½mÄ/±•"(—é¯ÕÃÀ£b¿ÿïµ»»K«ÑDÉ+œŒœZ#³ß A»Ó¡ÕlÒ‰;H™q¸mÞ¤+¥¤•è«õQ«Uv:Ù"2d?œCÙchµZìloÓl6ºá¯™©e?f­5ZkBåc±’n×¶í‚L¾×$yݧÆs°â•/—ýçÞÞÛÛ[ìÖ뮢=^èÍ8øá´o ȵ¸¦iJ«Ù¢Qo':g²‹CßÅ›õ8C9Ž:Ž»&¢çŠxs7BªÕ*ÕJ… PùÊ8Ü4íšrÖO®7â{ÛýÑ#‚Ø_ˆé¹˜ìk¥?ÐÜéy¾Ìü[ ˆ–)Wú¨V*X-ÐÚmà°Ö¡«”Ÿ×Æöööh·ÛnÏH¶¥[2°Ÿ{žµ´ÛmN µò!²§³^)T ÑÆarò¢@ò+AJì1KÆZ:;Û;looÓn·Ülü½$ë^ÏÆÃºbk¦³ÇÓû·¸{çÎŸàø±i‡ ²c4Fºîï *Ó?RŠ"â$f|r‚#³GØÙÙaww‡­­MÖ×רÜÜ`mm••ež/.²ðìõÝ:­f‹f½™ï€9tíä__ÿg·°<|ú¯íÕ‹WMSë÷p×Q/Fª• ããcœ81ÇÄè•HPß®³²²ÌÂÂsꆟaÌ ËA¼Éºßûc½0ê *T¨P¡B… *ô“VaÖ*ô¿ÙchÇ1NL¯GšY1Ö „QA‰(*EŠ@Z„Õc¡M—€ž½ÿ­ö3¸FB¸¶óÜøÏZ³§g]éÙC)TQ©T½'´²¦ÖÚ±›ÛmûMÈÞã´ùÏí7%“$!ŽcÒ$éb=lÆ0v¦\”Ëejµ>‚°ŽmkoLõœ8õžÀS0´Û®û67ó^ƒí‚ u>4™1œ½¾Íƒdí›L‹C¿÷Cy@]ü‹;®F£Á^½N«Ýk1]höø¾‡ñcÞÜKÒ„F³A»Ý&Mµã+…0¢̼ï=üütªI“´К- ¿s@)EEDQ亴}±‡ï;Þ}КlÍå¾=¦xùøwƒž0µ÷…w¿ùCÎïßE*(†X-°š|WJ†jÁºk²W¯Óé´}‡{éÍýƒ…2©@*¬±4›-šÍ¦è,zlår™ÁÁA” 1Ýk·o׃¯ñ áŠÂä÷‡¬ °·W'Ib”ÌŽ­gܱ9–EXëqS~¾˜6ËÏîóÕŸ?ãÈ‘)J•_2û=©Y yïÊyf¦Æ¨–ÝýOûyôª0r¸3£A¹\ k5B)FÇÇêçäÉü& Y]]åÁ½{|õå|úÉ'ܹu—••ut'&ŒBljÜ®ÑÓú݃ÌqPž×S¾¸úc~܉Cg6J#HŒÆAT*311•·.qéâyŽÍMAÜfuiž{woqó›oÙÛÝ#MS´…$û¢œþ] ó½H1A7ݤ·Ü——KÜ‚0@)Õ½ÛMŒ.T¨P¡B… *T¨P¡Ÿ˜ ³¾P¡WÉh4é4´ZmÒ9`ÞJQ©ÂÐðýUT’Ø6ŠžÎqëC$­|ßÀ’ÖÙåÎY’X+Iu € $R¹P#Ä~|E/Z@v]E“‰Ø—ºÊQyTΫ•uãæï%JH©º¡¤RäÔ}áYØZkR­I’sð*½ÒT|óîoëh?ßÝüÈÓòÇéãþ~’R†!A ³ðÚÃæÐÁKxàRæóµçiûþ^xcTŸ{°?]öÐ.Ý7ž#=õ߫˹#ÌèrÉì!DÞlEO÷¿ñ%i]l†±‘.ð:”’=÷£î•‡A zªJ¹kª”zéñi£I⸻ó&¯h8Ûø°î¼°áÿá 0ÖŒö_­+ÈÝ饟¸Pa!LÏØKPé'nµùæê×lîlòÏ¿þ{ÞçmN<ÁÈÈ0ƒƒ5¢r€–TƒMuüÜÝkÐ[¥¢ü61<<ÊÅ‹—™çÊ¥‹ü¿ÿÏÿÍgŸý‰žÐêt0Fâv<ü×v~<ü$;ë]Ðao’þfãwßåÜÙÓLŒbu‡µçܺõ wïÞagg‡Äõ:óËÿZf¹µßwÓP¡B… *T¨P¡B… ý(*ÌúB…^úK½°¸³[gkk±RßT±3ò¢r…Ééi¦¦§¨=cee¯ëAZ›/W$83¨ééT ô32æº÷[­;;u{-:íØÛmÞà7xsÐ`½Yæûqù¶‡Ö^.—(…Q~j/7(VÆQG,›J*¤H Šütkß Ò4%Žã72ë]¸èwÙ_Q/a;¿¶üM\£ˆ—¼®Ÿ†¥”$Š"”RH% éñBx®£<É29³i/üŽŽ, 5?Û¬ üÚ¼éÍnÝíûæ`w]s8Ž#gË¿†;/^¿è"öõêgF¶EZ‘ïò±¢w]¨k†”J‘7ÛuºçË(ï‚w«(ŒÃðð#‚4Õ´Zm·¶¡ð‘݃ Æø{‘Í÷$¸®{á¸úƺ]3Ù[Lw–ø—Shpª=&J`°‚Hl›Íõö;¤õž>zÈ… 8{ö,ãã£ŒŽ Ñ_­"eàîyQDÞ—nؤƒ)é:ãu¢ ƒ ÃÃ%ûkLMŽà’= í¸ÃÃÇÏü=MÀ7½‘ôàÍà§‹Á‘ •èï«1;{„‹çÏñÖ¥s Ö¦Ãúòß~sƒ;÷î°¼²L'Ž}&«áÈž,‰á®u}# ·¾P¡B… *T¨P¡B?]f}¡Bß%IìÂWW689VÆ®ƒÒŠlû½$*W™œ>Âìì,£#w™ºB’ZD›Ôêž‚ͽÛcÔ©U…™Ù£\¸x†É©67×Y˜_byi­­ÚíiÚA§1Ú¤Î0ëAPk1>\µ×îËQ©LE9bÀ±¤–en²Z_DPŽW¬‚%¥3ëqÝ¿ÙyK!šÃÒ4%IzÌúÜ?yU ­í6éÚ—ÁÚ_ÿ:FŒ†ì:‡If>¾ØNÞ{=Ä›NÒʬ?´€p @õ’ª§³^ŠÓº ²°¢7«@(~Y罋._úÐæû}æ|o†ÂþñßÏ=û&ÅKg‘u;`d—¹ž?{màÐB’è ‚}aÜÄ!s´gþÚÃÆº ±ùøi¿›`ÿ5sh—C/¤ ƒ¼€b­ÎÇÄŠÞç֢랂0 Â`_Þ†è9áT§´ÛmŒÖîþ`ñ¸oÖç÷!<ÆÈï^ ë¸7Þ°÷õF{ØŠ°¸˜XWˆL…âXVc“¸Y×;ܺqƒÅ…ç<|ø˜K—ž0::ÂôäSÔªUÆ&ƤÖW#%A <‚&t÷®P!¥À‹D‚REQ.[>øà}¶·6Y^^fyy™z3!5>¾Ç‡MÊEüØ7¯žÃ°/}š@!•ÁaŽÎÎrþÜi.;Í‘ÉQ:Í:ë«KÖ ¢ã“G™=v‚é™q?zÂÆFÇw‚ÄUöûÌj³y'½Ì$Yá•·ù×ý/\¹|–å¥ç<¸ÿˆ§OXœ_àÉãGllm°±µÁÎÞv¤û7Ú÷ V…e‚ ¼Yï½J›³¡…·ì{q#¤B¨Àñ©q%óZãAkЩ!I4Z{> æÌÓeQfÚ…=ð„n‡²å™#ò‘}¹^4¾_ßÿ±õfG&…""‚ B åæ¿5=£"üj#zP.Ò¸‡ðôÖ½ƒ&3€³ªôð?ÊÆÿ,&7°»f§öù³„›ë‘ZºÙ®öÏ&‘ñ´Uþ°tç·õ·BJ·‹Dt‹["Ï»ÍÐ7ÂSÖy-èÍ(ÈGů‰ñ|s›Ïõ˜ ÇÍÏTß‘.À Ð¯ۼ˜à;ï…E„)¤’=ç™·ÎçXg {àŽ•~ǃDª€0P(µ¯4ÒS‘¤ÚЉÛh“z”‹Ø¿.¿cþdËßø;Ìw±¥RÌÏ%©5„~;†µ«-ÁÎæ&7÷ö¸sëa024ÂÌÔãc#=6ÇÄä$cccŒ 3<<ÌÈÈ(ƒƒCµZÕJ)KÝÍÖý¯ÓèÈï¼u‰Õî޼ų¥ ’Žé™Eâoðsï°ºÏ\ñŸdV@µ\áøÜ1Þ{ï.œ;ÍÔè¦Ófuy‰»wnsýÚ5––ÙÙÝÅM9ŠzÓÉ_ý‘ô8§B… *T¨P¡B… ú[RaÖ*tè/øÎhÒ` tê;¬Î?ãÞÍÛlþì2QT&R!,¡’h!…E†?yó2ÿl™fã Ôµ‰fA”B¼ØžsàŒÆ"(U9zæïþü8sþ2SÓ㌎ sìØqê»{l®­òðömîܹ÷·or÷ÑC6·hkh5›,<N»}¨!¤Á  k%’*¬148J¥ZëZŠÒwð €ô!¹V—²+B° ¡-##£ŒO0ØßTÂjŒÖh$)ÛÛ;,.®Òn%}áF!|7soÇòaÉâ…ýk»ÜV¸®ò AèŒ\,BÈþyÆ-÷¬Ã\øY‰Ã ÐÝbzPཀྵ?Ø©‹ƒ¸¦7-¸°ÉÁúû ÔèÆ”t…!ƒÚŽ‹b(…ÔF†öh®Û˜’„N»Ãî^ƒ8µXßïºÅ…’H îhL RáØæÆ`¥Äª2ª200@­Zfk³Eš_ ÿ>Âwj#À*eú‡&˜š=ÆÔÌaä!2}ÿ#kéwÁÒÙØH÷z6ô_ž‰+0HkV˜•tÚø¢‚ö¬ð¬ÐÚÝfsm•£ajeˆÚµ§[R˜ ÆfÆé€6R ´!ß3ƒa¬+Xß¿n@(ETêcddœ¾¾>-öí6 -­zƒ­Í-_¸Èx÷=Åa*{æ–Í]=;^2¿´˜<˜Ô"É@Ö€)4`u‚N:h, 6ö¨omò´òí·ß•Ë”+FÇÆbb|š¹¹ãLMÏpìäqŽal´F_à7+iEVДéá1Þ;sšãc#¬oìÒh·Ý}Àúb½ûB¾cEe…Q Iš§ ån€õ_òg{™ýôÔ<ݰ $åZcc?~ŒK.pdfŠþ(dos‹ù'O¸}ë[?zÈóçË4[-¡~½ôZÿ/„Öæœþ—gC؇kN«7Àú¡ÍËc½ÝýYQé§Š*T¨P¡B… *T¨Ðÿ?U˜õ… ½Ì&G¿¤í:ÛëË<}ü¥ÕMúªÈ¾‰@ F`E„ û˜š9Æù‹o±0¿ÄêÊ[;ut'q¿Þ´Ø蘛:™º¼ÈˆRß S³ÇùÙÏÁ[ï¼ÍÌ‘#ôÕJ¨þ £#Ø4¡}tŠcãC Tú ‹ÏØr°eš»;<{ú„½ú{h3Rz3Ø3š‘*bzf†‰‰Q¢‚Rk÷õ‡º@Gáû{%V†”‘¥ #㌎ŒÐW©x¾xvnî}¤4M––Vi¶RR}¸í”qÈs^ùAå0ŒÂOHÎP·h|Þ²½‡ÞÛaj9pí»'jsLÈ~£®;[~ˆ‚ÅË@0ßo˜-‚¨\epdœÑ± ÊÑ’¦ë÷&°›­ä&JPªUg|b¼çº1ºÆâv‹Ý¶wëtb±=õ¬NI;1ibܦ” gÄ„U",צ¯¯Á–7UýNš¬k]J÷ñ¨"DµÆÐÄÓ3ÔúûP²-rÏ~dIÞ.ì>£2ïX·’ƒÅ*·FYC - §´ávؼ ßvZìlo³´¶ÁñÓS¤Æ½t¨Ò8£! ˜˜=ÂÀÈ0Ö®!”§d„¯ Œåî B–JŒ 0ÐW! üÚÌ ~Ò¸ÃÖæ‹‹Ï‰ãô@µèò‚zÖvþO‘3®öÍu{`NÚ|ÉÈüþ"­ß}€DJEj4® !|@ûw² 5H[-ö: »Òï)ªýƒ”‚2ýÃŒOÍ053Ë¥wßæ÷ßå­ËgQµˆHJë .ýÕ3ãcàV ö!™Ä I¼réÙ¶6ŽÝo Âø ép8“+°IU¢T®293Å™3'9wæ'fg(G!Ý]æŸ=åÛo¾åÉãǬ¯­±Wo`… C„nRzwqˆ—ÉëÜ¢|Ûø®8äI½›; [¾P¡B… *T¨P¡B?uf}¡B½Ê¹¶=¿Ý[MÛ4v6Y|>Ï£GO™œ¤¯o¥Ü³´ÍSA™ÁÑIοÌÖÆóó P’0H-ÆwE—ªL;ÁØäaø£uŽÚ2Æ „Ì‹wé VýƒLŒ0Ô_¦¤ÜɬXáï]ú++K<[˜§ÝI=oþ6ù!,GúØÞGïs,ûBiä6H· B*L"°(”+¡cΫk,ízÓÑ>è6ñ.·µÔww©§»l¬lðd~JßmÖÖii™ zd„ÁjˆRjB¢Â€R%b¸¿B)y7=YÃß zk~"¢J?cãSœ=sŠKNslvšJ hÖ÷˜ü„«×®rçÎöv÷ˆc·.ƒPùbëþ¼„ø °¾^’ ^¨P¡B… *T¨P¡B?f}¡B/ýe^v™OÚ´v7Xxúˆ/ÿüG¦§¥oÒ¬vm©$Õ¾!掟Ť†$éðÑGqãæ]ê «(ÆÊ}á±y+¹µ®CØ%"KUÆç—¿þ ÿò¿æ>x‡Á¾EêÌ6ob),&MX[^àþ›<¸w­í=´U`5ÖkËÏy¾ºÆÜö¥R•>`Hdеm†'8~fŽ“çN²|õ¢c±Fú|‹ u¨!AH*,Q293ÍÉ“'˜ž£¯âÌúŒé-¥Dš˜ÆÎ ócy}•0 éhëB¤­Çio’kƒ6m Öä ¡Á×M® ZkßYî†hÿ,ÌÆÒïñ±!†-BlXbdd˜Ñ*#ý%jµý#C„¥ˆÆÞ÷nÞfmi•f½Ù½³ ü. áq_.^Û&)ÍzÌÛ7©Žðö•·9:ÒG_I¡h£)i‡,"AÉ4/0eGióîÿ7[??ðS·Ã"¬ô349Ãéóç¸ré$ÇŒS‰Bv¶6¹{÷.7®ßàÎÛ4MW$ÂÐÍÛl‡Ð_»na_(”*T¨P¡B… *T¨ÐOW…Y_¨Ð¡¿Ý °“ÿ‚o0:¦¹·ÃÝ›7¹{ö,ãƒÔú§|¯g kÇÇ*bêÈ,¿úõo(W+L=Î770¿¸ÂÊêÍvgßÛ @Hgâ÷÷061ÍôÑ\zï|øóŸséÜi"a°i‚ ¤mõ{•§OŸ³¹óÌŸ»?>û*‡¥›äÜ™ÓÌÍŽ2Ô¯P~÷°i…ÇQZí[ìî5è¤)©“…$KwhÖëCäóÒãv|éÄÂÌÑ9Μ?DZo¾e÷þsRmÀH\«PADm`€Ù£³|øî%Î?Âp™Põ ý­Ek"Ÿ“6KÎFIv¯È°,¾Ðf{9æÖßk$F(´ ‘Q‚¨Àï.ÑŽïæ`lBso›çO±²¸HóØ0i­J£“R†@”£Aú'9qò.œg}sÝ6tŒØ×µßã‚êÈ0GOŸäƒßeîÈ$Õ¨Ú"•uø4‚‰áÞÝ{Ü{0Ïήqs@úÝA‚r!ÔHéŠwÂa±¤–B¢¤$J)T ”D)oË¿0õJ¥›ëk”„àZÜ!‰[è¼(š•ÒlOÊ€!I0:ƃ1­]p®nGˆ±`µÆ& Në±C ·aäMkiÂÏ#ì_#fº»ó#K°Ö׆GÇ8qú.]`fjPZ6Ö–¸uë6·oßåÙÓg´;T òMRBH”²Ýü‡Ÿ€ö…íO§.R¨P¡B… *T¨P¡B=*ÌúB…ÿµ¾—í;SâV§rãê5FFúï£V«†Ê#\$©1„2¤`˜þþ¥j…#s§9qæ1·î>äÉÓ¶·wI´Fk“³Ù¥D¥ˆ±±qŽÎçÔÙ‹\zç=ŽÎÍ1Ô߇°m¬•hç„#HRš»[ÿŒ»÷°µ³çÍOº° íUnÞü†s—.râØ,}a© a &•¨R#ÇNóá/[}„+ï¼Åßø.çŽÏ0>ØG¨,&±Â™ŠÆ$´›uîß½ËÝûXÛÚ¥­!íë8#µÇ(ÎŒÏPÝk³ÿ+üÅÍ-!s+ë Á&Ëyµ@¹Rel|ŠcÇO±´©Ùj®Ç#M÷0EfØ“›Ç¹?—åÙë¹õ¶w^ŒN/BÉÿ§í\Š— î»8q›óõ÷†Y ²ÈßÌ¡k~×ñT9rì ï¾ÿ!ëë›Ô; ‹ë;è4ãÖ»yT©ô3>=˹KWøÙ»oqlfœjI¢4m&³ZÍ«««Ì/,°µ³K'5¤7ë]¯t«Qgeñ9Íf“XJxã_È·$¤b|jš‹o½Íß--“ª¯Y\Ù¦ÑLÁ†È Ìàȳǎsùí·øÕ‡ïp|z˜²H!•ÝL)¶'@õó¯·pâG[j´IHâ˜4ÑX+ókg¬ÛqaƒQu€±©YF&§©­7¨ë:aÜqkŸ< X©ˆ›»lÌ?åÞÍœ?>Æäð1¬¿ëÀjœ9w™¾Âö^ƒ»O—YÝڣӊ󵇄¥2åê'Ï_äý?ä½wßbjb˜j)Da‘Æ ¤Ûiwlm¯põÚ·=Ê™s'ì£(‚@"…c1„A…¹“§™8r‚Óßãò“VV×ÙÞÞ¡ÙhÑétrBJÉÐÐÃÃÃLLL23{”ÉÉ1:Õ"‰ö¼ìR&n±ôì!úô~ÿÉYXZ£T!‹T®£W§-Ü»ÃÝ;·9ú8#µ9¢P¡”Dj‰N „%G#.¾ñ¯©Ä׿¾Áúê:) Z†Q…ÉéÞºr…ŸÿügüÝ{—™›¤V Ö8D„”X“Òì´ØX_ãêµkܺ{f›Nj=¼×ð/õ¢2óKz†}pË †Ïëö¯ù|‘=Ǫƌ/&oÖw;Ë݆¥ “Ó³|ø‹_²ÕR´yÌúnŽu;)’XÓnktÚƒBbÿ‘y7kÿz°9Þ•öÀkøÎu‘ÙŸ¶Ç‰ïö݇ȃ>sšnDã>ŠKfªŠÞ—³=c”ÕÒqëUHm ÄÏ~þKgF!üò:[»-b-0„Q™‰ñ).\ºÂ¯þéŸøÙ{o15>L(¬óy{lxi5ëë›4Z“T¢ %o»Ý+©J#\¸x…@ Lðõµ;,®î›ˆrßÇOáÒåK¼óÖ.œ;ŽÑ ñÎ&­t„¾¾Èqë¥$P¡G¼*„Ë{È›¶+ IÜ¢ÝjÐjw0&•í\ñ&iX¦xŒ3¯pñÊ=±Â>Y¤Zo’Øi“¦14ÁØÛiÐ^[äêŸ>åÜ©YæŽL21Ö‡ˆÜu2ÆÐ‰Súj£œø€Ó§æ(S‰ ÀbÓ„ £cövÖ¸~õ+®^»ÍÂâ:V@'N°¡‡ûëÃﯸ5îžf´ñìÖÁ¤_ø¶·ðaz|Ý® ¤",õqöÂiŽÏŒS •:I¬f ¯ŸÒ?¤IаðíÍ›4Z-Ú&Á2ÂØ‘$a +eúG&¸üîÛ¼÷îfŽLRé+¡R–@HR)¨·Ú¬®mò|yƒV'îž’Í‚sß´ˆè~&Iâ$Ak—÷ñÇ„‰ž9Š@¨ˆru˜Ó§/rþÜYææ¦è«(öVVxpÿ>ׯ]çþÝû½uAÒ4õ—S¸B’uaÛîZŸ?"ýíÍÂr^¾ùGv¯Io{þ]kM§Ó¡Ýj“$É ?ùŸ¿V¨P¡B… *T¨P¡ÿt*ÌúB…QÞQß»…ßó—uÚfáÙ#D`‘Ilÿ…sgO3>2H !5†Tk”Ñ®“P¨R‰Ñ‰~jCãÄ„N»C§“$ ÖZ¸@É(t_à  ¤ÂJ)„¨@˜´yrÿ>Ÿþáþý£ß³°¶Ív3¥ƒñ·FwÜ)v7׸þåL373BÔþCD$i Dô ŽóÁ¿¤Ú7Äûï~ÀÊÒ õFL‹QªÑ78ÌôÌ s³G81;ÍÉÙ jå¬ã÷c,IÜF˜->ûôS¾¾zg ‹´“” Ô‡6‰CJä&r×,6‚.îpfyOg´‡b1ÞLY`å!Î쵯¬q®v›N§ƒÖû(&þ%Ȉ¡Ñ)~ýÏÿÁé3¼ýhžå ¬L ÀGžðñGŸ²½›[áÍcÇöÊé+¬«´/ŸîèºáÿQÔÄÁÈS› Ì Z7öÓá[„u¼nƒ!‰S’VB¤Ó3|ø«dâè1Þùå#ž/®²½ÛDkÉàð(ÓÓ3?q‚§O11;DXRù)J–ƒÐ†Åù§Ü¿wŸ…¥š©YB‡¿qa«’N§ÎæÆ2KË«œ¨g ¿Bh-Bk”(LVæÒå “Gyÿgklìth›V›˜dzz’ÉÑASgqå9;»MFŽpâÔ,2 ó\†×ÂZ¬n£Ó6I“¦Ú›–ÝÀMãùúª\czîÿõü+'Î]áéü2Íf“P&l¬/ñàá}®ß¹Ãv3&Nâæî~ÃçŸÏ26>Ì/ù>Q)@ЖR¡-Tkƒœ»p‰±‰IŽ_¼ÌÝGOYx¾L§ÙF¨€jmщI&§g˜=:ÇäÔ£C5J¡DI:!M˜  ÝÚcþéþÏ¿ý;óÏ–Ùk$tŒÄ– `­ ÞF DŽÀ‘nGìí¬—H¥PAÏ£ƒóŠküÐmnnðÙ§ŸóáßýýÕA±‘pï/Œ \ª27w’ùçÿÆìÌ1õ$FdX¢\`l|’sçÏsln–‘Á>?|Äí[·X˜_À³oOÖÍ.„ÀJár¬Û‰EZkŒÖ®ð#™äyg}š µ.þǦP¡B… *T¨P¡B*ÌúB…^ë·~™£K01­Æ ó–?þdb´%¼tžñá>¬4¾ãÓ’héøÍÂuGeI©T¡Öo°ÆzÃYR& ”Rhí»K³.h!0i«Û4w7Xzþ”÷[>þäc®ßyÈÚ^Bl‡vHµ÷¶S×™JŠÞÝàñ­ü±Rf¨VãW¿ü;ŽNŽQ TÈ@aAÙþÁç/”9rä4­f“Ýz“Ž å*}µÕj•ZµB¥„’’4ѹq,0È4fyñ)7®ÍGýŽ{Ÿ°[ocqÝ­9/"ïßî¢pÜx“â…À…z“'Ûè°ß,ïÚ×ßeZ¿>Nº‡oc i»Íöæ&««ëlmÕ©ŒTˆ‚n¤¤µ-Bdi€‰Ù oWÇ8zæ"õVÄ´„à³?åê§ŸS·)‰qìqcö“:N¼Å ›wîg]íÙF|è²Þs˃…>„ž±§Å‹OÅÚnÔh6 Få…E¶6·8{þµÑ#œ¨31w–úÞ­f‹$M ˆÁ¡A†G‡éë tê >!%JY¤Mh6¶YYxÂõk׸}ë!««»hã°D®Þâæ· ã=vVŸóç/¾bböÃC”JP@Igê,B¨¨Fm°D©<ÄØÄqÚ‰qf³ )•J”KÊjž=˜çÆõëì4:\~§J’N†‘#áH5®“XyT»ª¥0àþéBfuÚaow›'Ož11v†J…P8 ŽÁí¸P \âÔ¹‹ŒNåÜNƒ4éPÝ¿…$åÑÓgìÖ;“€êÐÚ]ãÚW_P®öÑ74ÀÏÞ9A5Š)ˆÄ™ö¡R”jƒ «€ËýÌ?ÁÖNTK„T”¢µZýýD¥Q)¢e¬k5BÆÔ÷v¸çÿû'|þǯX^Ù¦ÕÑ¤Ö „NLê>2$Ž»éùbq…+á }á1KÂCëí s/›s „¢Ýl²ðøøè·  ž'°`l˜ïÔAÈÜì †F9wö[{;l7ë´Ó˜Ô’8!BªÕ>‡è¡<0H¹V£\‘HkÒ¸Éöê ×®ßà¾ÁêVL[ ×¥cú»Ý1Âc¤ÞlqcH’„N'¦Zý18kÚXÂ0¤64Ìéóg8vl†ÑÁtÚ<}üŒ‡î³´¼B£Ýö÷…î½ ­ÙéÙ®©Bw¹!ß¡ô— —Yk{;–N§CÇ…Y_¨P¡B… *T¨P¡¿f}¡B¯R¾¿¾Ç6 &ÑÔ·SžÜi!…À¦šN³Áå §®R+È0rÝÖÖ[j‹®9PŠ rH€4ՀLjܬÊPÅRZ´6¤6[«ó<}p“on\åãO>áÆ»,oìÒJP‘ 3MÛDRø°VD«Ûì,/qûê5”ŒDˆ~÷ 'ŽL0Тq m©¤bh¸ÄàÐ8XK«Ó!A"ƒ°y‹ØàB30hc‰[-Ö—rãêŸøüóO¹zýÖ6¶‰5€Ä›‘e<~Åu’»ŽTs ß]ô Œ…³;…çÆ‹n(b7‘e dH˜—_V»ïå÷Áx“o ¦Ýfs}ÅÅEV–×”cjŒh¸\_1:Qch|CB«³ :áñÝ»„Ò"L 6c<‡Ü¸z…ñg)LÎåv¯í8ï™[/èE5õLTÿöÀôí•Ý÷o"3ƒ¯Iõü½Ö_›îë ÒZüÚ;æ 0tZuŸ?櫯®#8é-†‡'èG˜«´ŽIuBT ¢¡\€,V „Ë$ÖÐjí±´ø„/þô _|õ5ž.Ðl¤*al௡n·Ñª[®_½ÊìñãL1zz¥\ƃ3†)dQVU*5  •ÃÌ´Zlm¬óõ—_sõêuŒŠ˜;u‰vGS.C )QÂíŽRùõÛ—}óI Œ‰ÙÚXãö·ßrþô,#• "pa¸6 – d™þAE¥6ÄØ”Á&J²CÒÙaà› Q2@‰mbl{Å'ø"ªPèGŠçNœ`¬áï?Z*TX"¨Àxÿƒ#cLu4¨2B”„J)‰1ÚA ”Íw¥:¡ÕØáѽ;|þ‡Ïùø÷ŸòôÉ"õNB¢ÉÍj“¤=áÉûBÜr¿¤í®Yë3lÏž»oMöÎDlؤC}ã9þìwLÌ Ò?Xæô©£T¥$]s¸Ò×O¥Zcdl‚F»EÇhŒ´ ,V)QX"Š*¨¨„%F‚ ַÚÔ7–¹úå—|úù—ܸõݶ%ñé®à宼aß­é5?pÜ8h­IÓäðgýEÌ{¶‚rXf`x˜#G§¢¿Ñi´H[m¢(dbr’¡áaÇÔッôtÖ éÑF¶›wa­¥Ùl²³³ÃÖöÖñü¿\!Ô=t¾‹¥P¡B… *T¨P¡B…~ú*ÌúB…^ùÿÿ°Lâ–Nœ’´ö¸{=¡¾»ÃÚê"õÝ¿ç­K§9vt†áþ¤u&¸Ch¤ç͋Ϸ„EJR kÓž¦r‹Té;ZÛí6{Û[ܺu“Ïþð[¾üâO#¥; T~N¥4F§H!ó®a!ýkÕ¾Ð÷wÊÅØæÍÍI¢i6šlo®ñÉ>æ³?~Ä·ß~Ãâò*ÄC[T€Ec­qFpNq1H›"­íaC¯‘n¤ˆÞžḬ̂÷YàÚý9kyÝ rÍO»¡¯ûž›ýk³»¹ÎÒóyž/Ìsfv…޹-¤Æ‰1¤H„!BÓ&5ÚÇÃZ )èmÀh„ÕkV:Ö5Ö3é­›rÒn´u÷ Ä!Í©‚oóoçXû¾GÝa1´4áÐ6FØž€ån裳HAåoå FÏè6i‹õ%¾üÓ'Ø BPéçò[ýD*$R% ²!Fw0$ƒI I9ŒJaŒ%MR666¸}û6¿ûøc®}{“Õ-dÉ ©¤FcµöIºž=ºÏ×þœãÓÃ\9>–¸P[c²ýÂçĺ+"$„cwZ-¶6W¹ïü >etê({Ͷ¡6 ˆ<–ÝÅ/¸ù#EˆPÒw;LP¾[A€P­¶6V¸óÍ5¶þþCf‡û¡O훙άVh4BJÂÈ!†ÂÐb•$Ö)*Kƒît@BZßåùƒûü¯8F·wÿí¿0ðöe«©VX!ÐHA dŠ!Eerm‘Ö€M0H„…Ô´IØÛÝei~ß}ô{>þèSî|û€VlÐÖm+0)6M|ÜCàvYõ÷Am¬ UÆgK#\½Åø€bãÌõÞÉ,ò’˜Ø?ѳÌcÚ1îËG¿í#"ª•ÿÁìh… r3UfHV)T¹DU)T( "IÒéøkÒ!|Œ»)áB³ÓNÊîÆîÞç·ÿþ{þôå5W6Is»èÆ’Ûnów¶ôÈ…sx„‹yÁd‡ýìá{ ·»«R©08ÐOÿ@…j9¤*T¹ÌÌäRHÒ4%”Ü_V=hÖmòÐeƒ¥ÕjñìÙ3nß¾Íêê*Aä´¯ñÃõÂiäc§Q¯õ÷„*T¨P¡B… *T¨Ð_G…Y_¨Ð+•õ€¦Þ¸ÊLIMnÄ´÷X}vŸO÷ÖxpïçÏœâÝ·ßâ·ÞáÒÅ+ÔjT 2/gHé4%MS©$ÊcU¬Í¶ì§4MVVW¸qýßܸÎk_rÿÎ-¶··hw:$Ú[ælÒñaš‚8ѾO]‚–ÎÔÄ M›v}ë_~Fcs‰û7¯ñá‡?ãwÞe||Ü™sMI)ö!Vò^l R8¸|[Z­&ÏŸ/rëÖm®^ýНþü ÏžçÏú3ÿö¿ËçŸA'òÈÍÔ#H,Ä©ë4W6E ƒT! ÝqY¿ö2Ä“5ØD£SM}e‡7¾äwÿsœRüO\¹t–R)ÂXM Tàæ*ðWU¸°´…¤…[¤Cœh"?ï5I}›õ‡mþ÷î*«sëƒøÕ/~ÁÜ܃Cý(뎯ÝŒBH5Rúy"2ÓÙÿ±°³½Íƒ÷¹~õ ¾úòsnÞ¸Áó…%v-Ò4uÅ*!üšÌæ u;FÊnýß)®±>aÀcl¬@Ø!#Ê•š+Ú,¨4‹JîÁ-ùkïÆÉŠJB [<øæ Ú{ë<ºõÿõŸþ÷Þy‹£Gg)—JŽa/AHEh|X·tu÷MãîõV€±DB ‰NVWVxpï.W¿øŸÿñÌÏϳ´¼A3Ñ®ˆ)¤ï ¤=ãpHˆê!Ÿ4YYÂø7©¦ÓjÑnµèëë#T^H<¬–ør‰×z†+jjåÑ>FkUR> Q€mÇ&ÛwëéfÙfMþ\%%»»{´šMæk5¢(:ô8;—Wl:ôD„ÅcäœYßn· N¡B… *T¨P¡B…þ¦T˜õ… þ;?67©ÿ^¯k`ºp^“4S¶’õ½-¶V—yöä)ׯßäÔ©SÌÌL3>6ÆøØ(c£Ã ÖjTÊ%B ¤òÝ…‚$ŽiµÛìííQ¯×i6<_\`aaùùy>xÈââs––ÙÚÜt[û{L,‘ñOü›Þ®t+»æŠNÐÍ:›ºÃíÖ›kËùÉOâÄñûpôÈQ =x ¨&5¦Eµ‹çpöì{x÷½wð«W_Á©çOá…^ÄÙsç‘õ÷¡¬kTÁCŒÆþêCA~6Åuöé³ËY‹Ì9”e…~¿^¯kmP»¬5Í’Eíî⻯Dúç=ªºFU×(Ëÿ£†ˆˆˆˆˆn 뉖˜oÃ2«<ÔeÉ€Æ R­J_áìh ¿€×_{ÿßíÇý÷Ý÷Ç}'Nàø±{päÐA¬‡èå9ò,ƒ³šª;G£Ö×ch¹±¾Wõ Þ}ç\¸p›[[¨ª UUǪs±³°C§ÊlM$õ̉GÓ¿> .•¶6.áÝ·ßÆ‹§NáĽ÷â¡O>„O<ø œ8~Ž>Œ}«û:ëÛ ¬¯]ÂúúΟ?‡wß}ïðΞ=ƒ‹]Àt:EUV©­FÓ‡»Yš¦C|ìÑ ccX_WXÿè<þç…_`ºq +±¢Þ™¬”ØÚ8ƒ×^þ%><÷ŠÒ§u–ø¡Ó göŽA€b¼…ß>Ÿÿô9¼ ÃJXÄõ·¡@V°yþ}¼òúÛØMbƒUñv×¾F±µÞšâ'Åï¾ù^yüq<òèc¸÷ØQìöaM@ULQ”Š¢ÀÖhçÏ}ˆ·Þ~¯¼ú FãIZ6¦('ë8õËŸc²uƒ•<^z5¬üâùqæÜEx¤vI›yÅüòµu¹©ýOªì­'cœÿ]üÇOþŽ®Ô裀 Îô ¡ü%l\z/½ü:6Gãö$•¦+âs{ÀW8ûþ;øÅÿ76ÖÎÇ+EL³d¡Â™Ó¯à¥—^Ãt\a4šââø œ»°7^=þ)<öÉOà¡ûîÁ±#ÐË-œ‹¯µ¹¾ŽsçÎâý>À¯~õ:^{í4Î?‡Éd c>Û/;[ÒU‚‹çÏáÿ®­áÝ·ÞÆ ϟ§?õi<òð#¸ïÞû°2ìC$ (JL‹Οûï¼s¯þê¼÷î»8î<6Ö7QU€ÚkkðêK/`ÐÞ¿‚Ì(V+„r‚µsgñÚéwpq«D¥Ý »=­…ÑxÂkký^}éEl®_Ä[ožÆg>óiœ¸÷>>|Ãá*zyŽÍÍMŒÇ#Œ·¶°±y gϾӧ…×_?­ñ8F»Ö¤Ï©ø)A(=.œùë/âôk¿Âñ_žÀƒ>ˆûï¿Ľ'îű{Žàà¾!œB]¢,§˜N&˜N œ9s|ð>Þyç¼õÖ›¸ti=.ËdŒº®›a³ö'Íêjg~Bì”S\:÷^øÿ?zû‡9¬ÆÁÑFñSl^<ƒŸÿ%Î_XCU…¶Ìö6(6Ys#NÓü‹ºÄx£Âdó6/~„W_}'î½<ð9‚ãÇáÈÑ£Èò ý^Ž<Ï‘» ™|ªÄǘŒ'8wæ¼ÿÞ{xÿýðÞ{ïckk„Iê»Þ~’µ-´tá³çãõ¦éîA¦Ó)z½œ³³Št™}æ«ìåß=Åt2ƹ3àW¯¾ŒKc[ª…ÊôvVD÷0l>‡ÛÊú8'À‹€¬`xx?úYÔ#„²„EÏ=[a„õµ‹OuGýXqPÉd@äý>Ãúƒ>b¡oˆ‹¯`˜ŒF[¨‹ ›u@á^,l€ÞpyfaE1dqß&íÿ>x”E‰ÍͦÅ>UÄj¨ã~"Mktšð7;fƒ ƒ‡ë 6CUÄÖPýA+Ã}ôȲ,ö¶†‡†>Ô(« ¦ÓF£-Ä@8^‘¢jTàò>VÂp¸’æHÔP_#·ðª¢@9`<ž ªµŸ¯èЪ ¼€¯aœÅ`e„±b Œ2ëP”¼÷ð¾BQL`$ ,¦OÆ@š/5¨Ëx’&4ƒWUâl q±o¼Xçgò,ƒqYæà\lu%`R«žàClÍ%в,±¾±Ž²,b Äf°©EOUUéíè^‡‘Ž 9 CØÁ~ôîÃJ/ 3>rqîE( õåd„ñ8µÖQ@Ã,ønGOËüGYhvçl´¯í=`,Ä9˜æf ò^Ž^¯ûÓ›¦›”‰£jC\ÿxR´„¯ëxÅÓdõ —e°Îµë¬ÚœNX ‚g?»òX·ÿeË3ªºJÁ¨Ã¶á¢K@mOXÔuñqx³1ul1±•HPhÛ²´­“â ™à5¾wi›ÖeÀè’Çt˦`0Ä×ujýÑT™[¨‰°Ì-¡*´.czt6‡FQ8æLLŽSË!AÐ|kBà+hÐ ÐP£ ³y± |3œ8C±·»Tà‹ÓbŒ²íÐbbÿvé´§ŠS^¡ZÃbU®κŒïÚ^¤³YÀûÓµ¥L!âÓvv±ê9€/ ÁǽYͬՋtÚÊìøR …Í2Xcbz©hPøªF¨kØ<Ç´®1ÙØš+€Øò‡à«*ž j:ù€¤Ï¹8À;„.ìÙöÜó@X‚GY–˜²(ºmcæ?´Ý§â‰Š… ºs©•‰ÌÞ´ÎGD3É5=¯V@4 ˜íànuéekHHã°›¥³çÕæ3#=]7@–²«*ÔûxEOwÇHs<âÅuü¶ië"ڶׯÛÏ M'!:}á›+:Ò±)ýLU°¤{üžüQUøª@Ud¨òu]Ïæœ\‡°»Ù®M›šÝÚÕh'¬oÿ¦uªë›+¼‚¨¨½OÇàŒm‡_ífëžPh^Ë4ûfÚ³ªºŽ'|üLÖNŸ"""""¢[Ãz¢« KyÎûíM šêÌ6°~ÛÐȦK]Æ´Áج?´îÚy®ReI×çN¯ýN…¨ã²šÎ϶uÔYXÎbx+)ì†*êÚc¾.}V >·ÍR¯IÁŽjȦ`%Ô1àO¡¿@b˜ ƒQ‹¦Z·½/³Àâ=±X7.—À¥?ˆOAk<‡CùY×ú&Ô5saûž§ªÍ6—L;„4¯$A¬ o’v€·EÓïY›“ÝŸÂÆ‘Z 5QzÓj(¶@‰ M:A=Bsæ …“%Í9@m:!Òû“ÚÎh| E˜…üÐö@ÚQç¶@Hƒ2›–(¾ ›–%³J2êÔn¥ŽËaLü3åBå¥û~{¨IÛµªPÚ!•¯yèÏvþ Ìz¯Ëbûqõ¡¾©e‡u€Îª¿}ÐY.(2¨7UâíqÜ­N—…^ï˜íM+*-‹1í:Jwá´cjÛ+KâI™UÕwŽT˜tÒ-èl(îÜ662â.¿úfáZ¨ Z¥vU“é¸Gd<ÖæßQÑÙ~¿ôS²³­}]Ç–PÝÏ@™¸ íU>³8Ia~H';¤]§øÞHgÇšûÜ6¦ÝG:ç$;÷Ùƒ4]ÁÇþëE6EÑ參ºŸë×óïÝò×Ð…¶2Kþ4ÌŽw_ã&4—[Ý«Ûlš>_Llž4 ,K~õ¶9¹DDDDDDt›`XOt Dº f!â\œ¸-|¸5zçÊB„!m….æÖ(`O'Î1MUuJKSýwꯩ9¤åŠCUãðWÓ^3Ò’ѹ¥nVÏÀà @¨5õGS©ľî¶ó¾ÅªZIÃycX§mˆß¼†¤ŠvÙ¶‚‚¹ðz®…ȬV½í¯ž4Qa§Ûuû•?÷=$¤óÚyïâ2¸´ÅæƒIUÛhñâ E Kµ‰Ö»}ï›åöí,¡¦V%@êv5mëmájS­ÍÐÚÎöݶýšÙmGÓŽ»Õ,ãÖôÜóûx¼:¥Û"iöÜÒ\€¦÷ÿlf®%ê“Î3×оjù`]é ùL•àmøîÓZ5 |{"¤=QÐì»¢×ø(Û«¯Û éS«š–#´½wº•ÿÒY—®0»gÇ­Ómc´}j¦Ë?}õã~*K<õvýÚ¡ Œí¡®Æã ¬sèå=k`­½«ÿöj:kÖìAŠék/b´µ…ª,ÛýS–Œ‡'"""""ºU1¬'Ú:×D–³0véÃoÔrv_IgË*s­ºíO–-™ùø/tZÕÄbí&xU„…ÞÏÍïAšÞå¦ÕÏÞЩJÔ0Mal[J>[ÏÎY•МHï¡iúX§&ݲ_éTâÆ×”¹>òËÞûù38óá –žêiƒíí1~i:û›4§\RP-«þÕÈžt@]êuÞü(†Ö³­Ûl@5…`: ZŠ:µÌ1)üÕα‚ZvÎ]µÖ›N-Ø­š~q³˜%ûí¬Ò~¾=Îè†Å¦óظîŠfÿqKÞÝÐnûÙii¯°ØÓ“sÚ©Ú–°ëñ=[_™;ž›þô;r]¥“ñ„YºÊCUÓVßÏZ8™…÷Z/ûÞ_ÁÞ<»8ËÃúÝ[™Ý\qX«ÀûØÆk<£?éÃ#&^åpWÿÕ`.Š[›[X__OmÅ4 t6ñó›Y=Ý&ÖíÈÚBÐJ.wys-p–ä¾’ÖA:“o»<Úï¯!ÔšÏK¶×¶@YÚågàêBȸø}ìKR%¸.´ùÐ6Ÿ¯ÁMϕھÄÐyöxiz·ˆÌ-{÷ÑWVû½}HªtöšÅѱºËìÞgþ-•v;šæZ5³~K‚móXµ3(SÛ*çtUCjC"ؾcn™› "Ò ‹M» DÖHvÛn—߯¶öeÅ–ѹwLw=^š+"dÛ»­Ý¡¾MwíTékgíºíö„tÞõåû„lÛƒfé^;qã2Ìù˜ínѹ²KŽÇ¥’ru[ªat—‡ë­ÚÏz³KêQCûÑÖ™Ëàœƒ5w_u½,ÌFP³0Š¢Àx2AUUm+#é &"""""º]0¬'ÚÝ"sÑÒ{/Ú§ËžsW>趸ÝŸtŠée!PÔNçóe¯ÛF2÷$KR/Y¾üÒ4niž&klZ¨´yr–vÚ¾Ä8XÛqªsQ ÎGù¡]QÄö1Í{Õ= Ñ qµÛ¯¿[,»¿ :×´>´5ÌóÝú·m„ùçÒ…-.å]:ÇRaR òYã øsmk6Ãf¥),ïÌÈm‚ÊÐ9ëÐljíì(Ú^ Ûö°ÙÞ΂͚}cnæmotÉvLOµ3”X;'Â.7R¿kÖsáTÃâ³ÌŸY½ÂÏïe?¾švF—Ÿ±pµ|¬ÔFã²îF-÷,ßîE°€îÐFaéÜêÛkÉú]ëv»%ö#iÛÝ~Çå’){öL7aÔ«Ûn™·Loîñx‡RUÔUñxë,Œ±è÷ûqí¼ÎÚüŠ¢Àhk £Ñ(õbb÷-"""""¢ÛÃz"""¢Ûå?ܲ @ìÕÞŽ¡Á`0¸£×[U4”mmassUUAdyˆ ,Kî DDDDDt{ÿÿ|ÜD´gvh>¯Û¾ ºkŠvüÀM³ì3â–"·ä‚yÇc‹ÔU­M„ÚCôú=XkaDn‰íz¥×AhëS›IƒÅE$†ô! ®k”e‰ÑxŒÑh„²ªÚuŒÕõ#KDDDDD·?†õD´G”ÑôÑqk.XÓFD¼G©€ÂÚ8Ä7Ï{È2[I¼¿Ü€ {ékè•nŸŒ³ñ ³FiÞ{Ôu¢(01Q–åÜ@Ý ºd Ñí‡a=ÍaäEt§MhïUYascª++МsP+ðµS±~+‘ö¦ªí-„€ªª0™L01QE{²‚ˆˆˆˆˆèN𞈈ˆè6Õ´ñu<êªFðƒÁ6ËaŒ@Ì­lwÃzï=¼÷mP¿5a2£šNã‰kÙö†ˆˆˆˆˆîH 뉈h†ùÑíGj”E€…>xô+ÈòÄÈum‰£KÚÐÈU|¨4mmªªBUU(ËEQ`4¡˜NP•%T=Ã÷›ˆˆˆˆˆîX 뉈ˆˆnu;õ§j¦¸Š@ƒ¢¬J„qj!Sôú5²,Cžç°Æ@Œiûnp¯»ô|ß-ào§ËR ØÞ‚gÙ³ùàQVÊ¢DY(ŠÓ¢Àt:…¯J¨†XM/‚7ól#ÝÞÖÝš<¾k.®ØYÅy]{lmPTùd‚<Ï1ÑËs¸,ƒµvi`Õíq{úýåúÞ Ð…Ð_Ðö—oªúEâ}%=gsÿªŠd‹ii1Mö5꺎½µK¶À²-EDDDDDtûbXODDDtªËÁÔuªªç9z½zyÎ98çRpkgQ· ŠÐ Ó/GÛÃþЇæ‚ykª¡íKïëÓ¢Àx:AUÅeõÞ_ñkÝ)~4á§?ý)^xáœ9so¼ñy䬮®âsŸû>ÿùÏãĉs9sæ þó?ÿÏ?ÿ<¶¶¶ÚÇœ8qO>ù$¾ð…/`8r"""¢[RÖZ#„€:…àEQ Ïrdyl“¥J{çŒÄXcì^I%DÖZø Þ#„€Jú¦7}]×(« EUÅû,õ&KDDDDDw FJêÝ IDATwtÙÒ³Ï>‹ïÿûF»Þï«_ý*¾ño~ðƒàé§ŸÞõþÃáßüæ7qòäÉ;r»={=þ""¢[PÛg×{¾Ž‰º1pY†,Ï‘§1°ÖÂZ‹,Ë "0©¿½‘Ôç~Ékµ¡zÐm•õñ±ÒVöWulkSN'¨«uíQױо> ™…†ùuXÖ/?‰°dølðlŽCDDDDD{âõ×^Äñãǯê1o½ö2î{ð“W|ÿ;6¬Føþ÷¿gŸ}öŠÓlì³gÏ^ñcNž<‰o~ó›w\•=Ãz""¢[×¶«Ké%ÝîƒBŒ8ç2äy†  ç²,k«í³,Cæ28ka\ês?ךf6@vYXï;!}Y–¨Ê2~=™Àû:®Gz¾ùõaXODDDDD·žÖß±mpþáþ?ûÙÏÚï;†?øƒ?À£>ŠG}§OŸÆÙ³gñãÿ/¾ø"€í!ýOû,Î; Vîommáoÿöo¹ÇÑ Ó ¡¯¸ò¢3ŒVƒ¢®kíZJF`Œm[âc`¤*ûn_ûmÃizÜ«*ÔÔ¾†¯=¼÷±~XÞ^–|Å®õDDDDDtWýÿywbeý~ðüó?ÿsûýW¾ò<õÔSW|ÿ••<õÔS»¶¸ù§ú'üë¿þkûýŸüÉŸ´mt'""º=(½ÒÊúþƒ°ý"òÝS;›ÅjöØGÚŠúnXßÞ3ÄŸ5CfÓ¯|½°|XYODDDDD7+ë?†3gÎÌõ›¿\ˆ~úôé¹û¯¬¬àïÿþïñè£îú:MøßöO?ý4¾öµ¯qè,ÝvÚʦ•ÍBåû\Uýü/–VÕ€`ÙcX+ODDDDD´s§­ÐÏ~ö³v˜ìOæ*Ök‡uC³.s·°ýFDDDDDtqwòÊíÔ?þ™gžÙ“ žˆˆˆèfÛ}€ª^ÁO®ýŹì$WÝ»õÒk~"""""¢[»Wú©§žÂh4ÂOúSõDDDDDDDDDDtÓÝqaýÊÊ Æã1àÌ™38qâÄÒû}ë[ßÚõ÷WêÌ™3s¯MDDDDDDDDDDtµî¸žõ<òHûõå¾^kP¿ø;õÈ'""""""""""ÚÍÖùË_n¿~úé§ÛÞô×Ãh4ÂÓO?Ý~ÿ…/|{ÝڮÌY""""""ºvw\XòäI;v @ Ó¿ûÝï^·×úîw¿Ûž 8vìNž<É=ŠˆˆˆnirnDDDDDDtí̸RßúÖ·Ú¯O:…ï}ï{{þßûÞ÷pêÔ©¥¯IDDDt+’ëx#"""""¢ksG†õO>ù$þê¯þªýþÙgŸÝÓÀþ{ßûÞ\¯ú¯|å+xòÉ'¹7ÑÇbîÔ;yòäu ìƒúßùßÁSO=Å=‰ˆˆˆˆˆˆˆˆˆˆ>6s'¯Ü^öË‚z¶¿!"""""""""¢keîôÜ«ÀžA=]/ænXÉk ìÔÑõdî–ý¸=ƒz""""""""""ºÞÌÝ´²WØ3¨'"""""""""¢ÁÜm+|¥=ƒz""""""""""ºQÌݸҗ ìÔÑäîÖ?yò$´!}7œgPODDDDDDDDDD7’»›W~·À`PODDDDDDDDDD7†¹Û7ÀbKœƒz""""""""""ºQ 7ÁöÀžA=ÝHŽ› jZâ<ÿüó ꉈˆˆˆˆˆˆˆˆè†bXßqòäÉ6´'""""""""""ºQ؇ˆˆˆˆˆˆˆˆˆˆè&cXODDDDDDDDDDt“1¬'""""""""""ºÉÖÝd 뉈ˆˆˆˆˆˆˆˆˆn2†õDDDDDDDDDDD7Ãz""""""""""¢›Œa=ÑMưžˆˆˆˆˆˆˆˆˆˆè&cXODDDDDDDDDDt“1¬'""""""""""ºÉÖÝd 뉈ˆˆˆˆˆˆˆˆˆn2†õDDDDDDDDDDD7Ãz""""""""""¢›Œa=ÑMưžˆˆˆˆˆˆˆˆˆˆè&cXODDDDDDDDDDt“1¬'""""""""""ºÉÖÝd 뉈ˆˆˆˆˆˆˆˆˆn2†õDDDDDDDDDDD7Ãz""""""""""¢›Œa=ÑMæîä•û›¿ùœ9sæŠîûû¿ÿûøêW¿Ú~?Nñ£ý?ÿùÏqþüy <ðÀø½ßû=|æ3ŸážCDDDDDDDDDD{æŽëï¿ÿ~ôz½]ïóÁ ª*;v¬ýÙd2ÁßýÝßáwÞ?~“É/½ô^zé%üéŸþ)¾øÅ/rï!"""""""""¢=qG‡õñ±ëï×ÖÖðíoû÷ïǯýÚ¯µ?ÿ—ù¼óÎ;¸÷Þ{ñ—ù—8qâT?ùÉOðÃþ?øÁðøããþûïçDDDDDDDDDDD×ì®îYÿÌ3ÏÀ{/}éKȲ Pž{î9ÀŸýÙŸáĉÁ—¾ô%üîïþ.T?úѸ÷Ñž¸kÃúÉd‚çž{ι¹–6o½õªªÂ¡C‡ð©O}jÛã¾ô¥/N:UåDDDDDDDDDDD×ì® ëÿýßÿ“ÉŸÿüçqàÀöç[[[€C‡-}ܱcÇÐëõ°±±µµ5îADDDDDDDDDDtÍîʰÞ{gžypòäɹ߭¬¬.^¼¸ã㛡µ›››Üƒè¶¢ªP ;Üš+Eä oWðzdÛפÍ»+Ãúÿú¯ÿÂ¥K—ðÙÏ~>øàÜïzè!XkqéÒ%¼òÊ+ÛûÆo´!½÷ž{Ý~4Þtá&"é#aþ¦»ÞæC{ižšþ7ûb±éÇÀžˆˆˆˆˆˆˆˆhæ® ë›á°‹Uõ@¬¬ÿõ_ÿuÀøCœ;w®ýÝ/~ñ üã?þc[Ü ¥%ºu-ð)Ös<÷Üs€Ï}îsÜ{è–ÑÌQèêžL2Ò”¼ÇŸ©ÄßKê9²ÌÁˆ‰ù½Dc ß<¦}¶Cy…Æ@_T Š ±?HœZ+å³I¶ ˶lùy"Œˆˆˆˆˆˆˆˆî6wMXáÂü÷ÿ7Œ1øíßþíõÿñÿ矽^¿ñ¿Á½‡n! uü2 ‡µÖB5ßÎ9¸<ƒË2Šª*a­Xc,Œ5°b¶U»·ÝpM¯{ÛkhÂzEfa~Ð_Õ¨ªu]CC ë2ˆµ1ôÚVåÇžA=Ý}îš°þÙgŸEŸÿüçqèС«zì‡~ˆçž{?þñßøÆ78\–nŠX®èÚ±:Þ@¬ƒ1ÖZXë`­…1fv³0AF` Lºƒ¦ø}‘ØÖ^^ºa½ìì>¢¢ U…U…q5\žCƒë !ÔuZ€¦Â?>k\Oa…=Ý5~4µíkNžÕOÃeCðÚC5@B" P_ê…¸,¶Æ"øu]µëšÖ:©¥N: 0ëq¡ý¶ó ÜÓˆˆˆˆˆˆˆˆè6rW„õÿöoÿ†¢(ðØcáᇾâÇ]ºt ½^÷ß?>ó™Ïà‹_ü"Ž=ʽ†>žn¾½ìWM¿Ý9f1é_±.UÐ;ggílŒ•òª /+€X "[9u}“ÁX±ý~6ûË_¼‰Ð[ÜtŸYÕt‚r2† 4xõPïQLGÐÞ‹>žD°ñ*€Ìרkï=|ð©NXzÁÂf\¾‰Óù†õDDDDDDDDt;‘Ñh¤Ü ´èìÙ³xìñ'¸!öÒ®a½¦Öï5ce¬uȲ Î9ç ÆbÒ@X¦62ÆZ—!Ë2ˆí!d«ù~¨íÃØ,Uæ[dyÖVácÙòÉìk]ˆë(Œ*$xH¨PÇV7u…­õKðu_ðU ­+ÀPAàa >ÀûuU"Tj_Áû:µÌ™ßᲟjqÁ ÷8""""""""Ú#¯¿ö"Ž?~Uyëµ—q߃Ÿ¼âû;nf¢ Ô·¹wª|—f°ªi¿×æwª0{Ë;ãàÜ, —æþÆÀÃAíp=ˆË`Œƒ±¶muç .‡šjú€í&Œ…AA-ÒüŸHÇ >-´HêSßdèˆ ¤Æö±}sºÀ„€Áà4Ô±_}¨a|…bk ÅèªéŠb cÖfôz_Â×%ª²@UU¨|B›¶^Ìâgÿ³PjßôÍY^/<5IDDDDDDDD·(†õD7ˆtþÕ‰§ õNø„Çö/qPl émŽ,Ëå=8ëAá!ð&‡æ«@>€É@–ÇÞfPãàE0ylƒ‘T…ofƒ]ChBz‰=ð» ¯ 12Ò«H|¼5BgŒ1i=¦/0’r}N+¸Í °›ûPn­c:Ú@¨¦ÐPZÃfÎ[8g`K ©<|Рð>ö¼GSpß–ûwÂüÝÚýËÕ·ÇQeÂODDDDDDDD×Ãz¢n¡—¼"Vm«Â0b ú++p.‹ýèÅ"¨‡…Ø0F Äd7@¯nq}¨‹!½ …‹‡»Òã PLJ·MÓ+_ÛÛȨš’+2«¬õôPÓá&>z^ÒI«Avàô÷í‡ÔªÉ&6×.`¼~Ó5XUX8˜Le=Ø:ö´/«~:…zt1qãI 軡zÛ¼žˆˆˆˆˆˆˆˆèöÀ°žè†ëTÑ7¡7$†Íbç ÎÁezýœËR€nàƒÀç}HoÆe€Í¡6ƒšŒBm1.¶·E€Â Fï6µÎ‰_Gݦ<±ø\`{é.±˜Ô^&…õs× Ì¯›,T°·­D °pùNú¨« ²¬C½U8| õd ÏˆÑÆB5E?³°¶†³%Ô”P(|eá}D+ªP„%eÔÑí…a=Ñ ¦í ÖtJ<Åæ0y—çȳÚ«±€±ë`à€lŸ¯ ¸LÖl09 }@b%} ÅS¯’*ê¢2ëK¤ŸÅúYô>»_³œÍo Ò­ksï¹D_!¢)îŸ=iÓúG4v¶¯Õƪg ÎC\®?D6؃٠z6PN¶Ê êÑ%@F™8¸ÌÃ×|UACц°Ð^ÁÀžˆˆˆˆˆˆˆˆn' ë‰nˆî„Ù&¨OcXÅÆÁØ6Ëáz}dyŽÌ9¨zx1›Á¸ŒíÙp×Cp9Äö“A‘£­’×ù—„(Œ(ŒV 2ëRõû¬]MgñÚÊúÙ’+44ýê11Ž×æd@Skß¶¤I¥õÚiíƒxb Ûî›C Æ@à`¥‡á=û1„dxÉPûÑ«ƒ…ƒˆ@C€†€ê¶=Œ1Ι1èçû†«b–®)•÷!ö‚×ï€ØŸ>¨ÆA¶ÁǯÈ\"6µÄ‰ëçÕ6Áh×µ©àWE ícÈïU °ûñ«P§ðŒ(òÞ> ÅêpŠ0ÝZÃÖÆBUÁfyߣ.&(Œ¦cÔe˜?A@DDDDDDDDtaXOtƒh ‘UD,¬³°yÆõ ¶±}Ø,‡1yl‹cT DD2¨dP“# ‚ƒ7ªip¬„àŒAîò¾ƒ³‚á`€áÊ V‡«8rèö¯îÃpeˆAo¥mw£ M•óªixkŒÛ˺Âx:ÅÖx„õ llmbs2FQ×ð¡Œt'˦ð~ç°¼ùͬPìÅ ½âÀHÀ¾ý1Ü·Š}««8rèV‡Ø¿‡ìÃê°a¿‡Ü@,¢1(—vBl;ú5vIË)Í’»â ÊjÅá(}IY⣵‹Ømb}k„õÍMlMÆ—%Æe ­C'(—Ìkû3Mçþf5mMûúA j_Ã"GžgèY…ë!6ƒWÁhÃ!LGÐʸÜA P­gW3t^q1™VàÑ-€a=Ñ "©AL¥¬?@ À¡BÓzÆ6‡¤$A$ƒ+ýÁûöíÃÁƒ‡pï½'pÏ=÷àðáÃ8røœµpVàœÀ@aÔCB …5q¸,!4ãmÑ4ÓÕìH Õu]ÂW±|fYæ0d8¸€I1Áæ¨ ë§8wq g΄K›µú˜™Çi´Mh+軚Áµ³¹š–C`ó> |¨1 %9²}Gp8ëCò>6.žG±¹Žj¬¸²^€Iñ|]o쉈ˆˆˆˆˆˆˆnE ë‰ö”¢…ð!ÀZgcz±ârã 6¶»1¦qX·‚ZÓÀXÉ &‡C†~–£—÷Ñë÷±oß>;v ÇŽÃpäȬ®®¢Ÿç°ÖD¦ € #ÖŒ¤ju(Tš úÅ<¨o+ÛUb;À‰¹¾(¬ÄÁ°¹ëcuÅ ®àØþƒ¸ÿàq\ÚãÂÚÖ·F%J¯¨4Àû{Ñ›îs£¼+ªq™5.«Q…¨BRå¿…Œ…fØgs˜þL6/¡Ú<¬g™Xg1™LP×>ÝÅl=ç¿bŒODDDDDDDD7Ãz¢ë@Ò|Sc,œÍeLž6‡¦V7âúÖÃõ/ˆÕô9œËÑ7í?€ÃáÈ‘#8räŽ=ŠÃ‡¡ß`8\Aærïk¨Æ€>ª‰_kPøö‚@aRCy‘¶¬½¥mkœï7?U (œ³ÈœCž)=õû{«8<<Œ­ެÀG¸4ãÒxŠñ£²@ƺx¡m½Ó}uÆÿ‚øoÓFGãöT‚Äö¹ëÙn°Š2ÏूßÂTa£)JÔuõ!]Û ³ ·5&""""""""º™Öí‰Åa¦±6ËàRzÉzP×G°}¨Í!¦{Ô#‡!ŒÍÑë ±º²Š+CÜ{Ï=¸ïÄ <ðÀ8tè Vúd.ƒ1ÖˆÄ6:FSøôºÆˆ!xTU¯F,Ĉµ1¤‰•óFâýÛö4±Ü]5  Š 5‚÷€ôzÆ8X„Ÿ§or¬ä†½ö­®àðøÖFc\ØØÄ™ pþÒ%lNÆ ÛISÏøTáß¶ºï ©m»Ù7*j,Œ1È]ÖeÈDœÇʺ†÷y?ƒ1™* %ê€Øwß6õDDDDDDDDtó1¬'ÚÝÀ7EËÆ ëõá\›e°y&ë¡vˆíClÖæ“ÒC‡ª®Ñï pÏ‘cxèÁOà÷Ý£‡aÿþUÜ¿ÖZXc`R¨šêtUøPÃZuYæb[œ ¨Ê ãj‚ªªb¨ç)äG ëãâæYÖ¶Òixà}òê«ø½ªÇtZÂ9k™éÁ8¨ë2ä+ù0Ãðà NòÌ!Ï3HþŠTE¯!öt‡¨Ö,Œ±°Ö Ë2¯¨ªÞ”U §Æ*\.me}*m‡un!¬—Ô÷Þ{¨Uå1p™ÅÊ leˆ^Þ‡ˆÀ‡€Ê˜Ú6ƒÍ-JUÜ{ì0ŒUX øºBQ×ðªA ±ÕÍÜ Çšû¢íÜÎRà.c,¤7€¯÷apèD &ܸ֡ÑN  *ïCÛÝgîUÖŸq>Ý ë‰>¶ùv*MŸwˆÀX ›å0.ƒIíoõlcVéC%ƒŠ…³= ‡ûqôèq<ô‰‡ñàƒáØ=÷`u¸Š^[͈&…êª 4½éSÞŽ8s.3Èó ý~c3L'%¼÷Ð ¨« óŠÖZˆ™u¤oÚà„àC@ð!„xÓ&·q˜N§ãu änˆ,7È2g0Ú¶×Q„Êãàê½Þ W0δ†K››˜–$sªÔ¦vòMŸú¤™ é䂤æ8AâÔé­¢'Ö:8#˜XA¹.ð21[ÁÚ eQ¢.k¨ê|[œøjí¿Ê9DDDDDDDDtƒ0¬'ºÒ z›ÖëÆZd½\>\Éú±W}Ö‡d}X;„HA ýÁ>œ8q?>ý©ÿ…Gy Çï9†~¿Pש}K|Eb•xÛß ŒÔ*ýƒAYÖC‚ªªQ”5`,¼ˆx¼BRu½A ç¡ñù˲DQ–(˪ k Db]»µF,&¦ÄhkÅÔ#χ€qX8dY|>‡ @4@ëÎe8º?Ž<Œ¾ÍñæÛïâÍwÞŹñX'¨BˆmmÄÆ»¦mXèl+Ç–=‚Q ö>Ì*àëÁô,¬2 ú=¬‰Áø¢ÂØ)ú™‡sÓxR¢i(¯¶õ"©=Pçî¼»DDDDDDDDD× Ãz¢="&õYYoÛ¶›÷aòXY¯¶‡`, û÷íÃ'ø$>ó©OãÓ «+«0“1B]!˲ÔÿeVIo¬ „µÎÀZÀÀZ›ZåUU (jÔuc œË`L†uíáƒÕõf–LWu R˜ëíÛ¨ZAjƒÁ`ˆÍÍ F[œûì½i³$Ivž÷œãKnw©½z™î™Æ€´!˜‰¤ „L >ÈÄßL~“HÑ`"!€’Î`fº«k¹[.áîGí|ìídò"C]ŸžÒ4- ¨(O ÃN”¦©IC¤ëØ ö…B¡P( …B¡P( …·Ië …/A¶¾1TçUUã›_7hUc¾É8®É…dÕ#ÎÓÔ¦“<~ßûÑøðÃ÷XÌ'81,õº:× IDATFÓ8ö&5{v§ŽÊûQ¬w8u§çòñÄúK6ŠõOß÷ º¤ * #ÆHß÷äìýÑfÈV3°Ï8GSç¹]wÉzùœºjP…ù¢¢ï1ÚDpY|ïõfƒ0/¸{r‡Íã««%?ÿ‡¿cRLˆêÁÙ'¯©›3ãP"*–Wø R54'0F?º‘Ô¯"u]Ð÷B)¥m|àeŠu}¡P( …B¡P( …Bák¦ˆõ…Âf/*;Uꪢn\ÓäLzß\ ZƒV †§ªZNNîððÁc~ïãòÁûïqzrLå]¶¸!Ž¢|öÏŸ°g[<Ö97¾@4’âúú–2Ú܈¢Þ#ª„˜°QL!\Ó(ÖcæüÞæV‘Z Q¥ò‚rqqIóôŒªr8¿QÄ’#ˆ)•«X®V¬¯6Ô®¡©=÷OOÙ|ø–ë+žœeÁþàÊ9P ã¿ÅxhŸ©Ä¼­zÌÕ˜sˆ uˆÌCDR`sö9CP—m{°|Ö! ÛÝ\»Å%ç¾P( …B¡P( …B¡ðMPÄúBáÜfÀ"7”b‘œ]ï½§©jêªF|¹šä*К$B…XÐ0Ìyôà!ŸüèG|òÑÇÌgSšªÂ©bÉ0u˜!dÜ·â5äB°{¡Þá\ötqû{Puxq˜ ‚¢*¤ˆ B°¼½I–Œ˜â(ðç³ÏÅk÷Ö7˜*z¶É©¼§©Bˆœ¿¸¤mÚIËl– fFŒ†L›–«ó+Î^¼àh± M˜55¾÷ó«ô1./èF/~D²—|J ¹˜l¾/Ý~¿/›«íНIN‰©Eg',TÁúè×>TÎSWù-%,îƒ#¶ýKɪ/ …B¡P( …B¡P(|±¾Px 7{tv¾ñu]Q©GDsnw2b’C}KŒ±†º™q4?å÷?þ1?üø‡<~øˆy;£vbJ^Þ)Jö‰ãçg˪ êˆÑaÀ¬6æ¤g ˜$RʹæY4ïi&.Õrƒ¼¨¨ýï+¼’ˆø]!Ùz6ÝçMÛî®ÆÖøGU™NjóÓvBŒ‹³µ¿BîŸRU‘­£SA*¥®Hâó§Ÿò^õY;#VÆï?â¢[sz.ÏÏñM³“äc´\ @“|?Ä@Òh—#ÈxTìVÀú>ëö*h3!‰ w@KCôs†'¿°A8"Îò~¶¢ÿÞ¨P( …B¡P( …B¡Pøú)b}¡ð:^ʪÎ1‚ .{Á×UC%U‡¨­0Ù¿brLÛ÷ï½Ç£ùøƒòÁÃÇœSUÙ7Ýc!YʼnÃ9 bÀȾóÂ(L'#¥HJ‰d)[ÖX΄GsÏG‹—1S¾®uíY.«Ë'ǧTµá+Ã{Ùh8c€ )X¢e½|›`O x¯4mEÛNX^mè7‘ÕUÏzY¶˜gèܨšŠvÒÐ÷}·f2x¼ Gó)÷îœp¾Zr¹YøR€n{æÑý‡<¼ÿ“£¦m‹ ¹,à+—…vUTêrñ×d£5‹ÙXüÕrÖü(Ô›‘…éý-NÜèá^=M[ãœãâjÍfÝS7Šó¹8nŒã¾`Ü—’„©jÏ¡tÎ UåiÛ†Õ²# ‘ͺg½êhZOU *’ÍæEhššÙ|ÆóÏ׬–Kšº¢O™6 wON¸Úl¸Ú¬¹Ú¬é‡@2PlŒ¼äHsË?ÒÁ·Á…dYØWõ¸vFƒ COzñœ!,¨E¼E’Ɇ]M[E°/ …B¡P( …B¡P(|±¾Pøl}ãýX¸UÔ6 LÐÕ\Ë£÷>äƒ÷?âƒÇr2Ÿ3N©ëï=1FÂ0ÐÔõΣÔ9œ9$åB³»b³fû×Íj¨×ìÑÏ]²uŽ Ôuƒwž¾»d¹\2{¼Ÿ ªÄ¹&H›S¤¾òÙbfô­WQD„ªvÔMò‡Ñ:§ë:,MPñˆÑ"*JÓ6,æsž~ö„Ë‹%UÕ01©=÷NN醎_þú7„~Kˆjö¬—·Ëmë{?’Ì÷–¦¡^ã<âÙfIˆ]¶ÂIGKœB¡P( …B¡P( …Bᛡˆõ…» ‚:OUÕTUÎRÏ‚r Ú´ÁÜÓ–vzÊý˜÷ßÿˆ£ù1uUqrrB]U»Ým Éš!œsãÇd±YUwâ³™ímoÞ| ¤G›˜ìc㣮kêºæòê’Åq‹ÈœÒµLýœ¹Ÿ ÞÆb¼g´ê1Dl¬7kˆuã²Ï{Jt]Çf³¡içÝîï® Äh`‚x„;Ç'<¼wºªpòUSBBL¢¸ÉœÙé}Žî=¢žÎѪÆU_¹qEé…oyâ5’º½Å†/ ¯{×7~íû …B¡P( …B¡P(|•±¾Px D@4ûÕ«sˆ*&‰)Æ‚vrÓ;ïqÿþ‡ݧª&¤$¤˜ÔUNël'3ŠõY¨7ú.Ñ­›Ubè`tAeë·n72ißf ¯ù·¡êÆ1ŸÏhš)CŸvÁÕe`è¨0’%bˆ±Ç, cn®¥„„a t„@ë=“º¢öRÂR3d´Ì#™õŠáR ¬6Ö] ïÈAhO§<<=å¸R©Þ®Ä!vÑÛ§›ÙøÚÿ^Ø_–$u¤ªE¦ÇLï>brtŠo[Dc2ª¬T(¾EntwùroÅKÆ×mïâãM¡P( …B¡P( …¯‚"Ö ¯@ƲͯªŠv2¡®<ª‰š>N‰éˆÅâ}<ø˜ãÅ}êjÂ0DÖËCÀ_54õtë³µJHF·‰¬W‰ÕUäê2pqÞÓw¡®ÜN°—Ñ æ çW õ'pów’ÅçªR¦Óï*ú ,/§Ÿ/Y^&œLI¦ q ë×lú%Æšm0ÌráØn³¡[¯p–˜V‹Iˬ­!ER $3,}?àœ‰zŽŽçÌæ-hâryÅr¸ZÖ›HˆàD™¨çÈ×ÜŸÍhU_¨®%ûÞr ŒÃǰ@@"°‰Â*UT‹{LOïQµBÈ+*•Ó];(¾í1éË&¹¿^ —WŒ&¯  …B¡P( …B¡Pøª(b}¡ðJ²,&ªŠ÷ÎW Ñ¢Rê1ÇÇïóøñ'¼÷è#¦Ó#, i0H‚"xçQ1B2Ý bB.Àê]MJŽÕUÏò²cèãÎÏ~› þF7‹›G~`ß#rø2’EBè˜-¦Ìçs*ß‚y6«ÄòªgµÊv<Ù§Þ0"P1Ãb"ô‘~30lRð •W¼Û¾g[$7á½Ã,±éÖôÆÇï=äî½c&ÓQ£‘>$úÁ!B2¼À¬©¹stLåü+c_F¼ÉDq­®¥™ÓÎŽpuCÓÔ8ïP'¨ ŧð]•Þbغ½c¼v0‘ëÛ¼„å&ŧP( …B¡P( …¯ _.A¡p;‡š”S÷5UÝ⪚ùü“ÉCªê}îÜýˆÇ>`1?&™äâªÉpâðªÔ¾F†!›§9«[DñÞQÕ"ÂzÓqqyÅÑIÅdڌڰðê¬ùÛ¸±­ØK?2K„80LX,æL¦–—kÖëŽËË5í´a2«³%æ”çb“f‰¾ ›Ï•ˆ¯ŒªïÀŒ#)uãè7=ðÁ¹Ä‡<àübMß\^^â@?ü T½ÒÔÙ§¾­kNŽT¿ñ7jü^¿&_4ÇWäz6q¥ž.˜,NXN°¹Ä¹@ò‰4€¥|(¾-ìK¶ù7ïÝ^3–lúB¡ðMŽtoüÂóµ¼½P( …B¡Pø¶)b}¡ð:Æ‚°ÎùÑÊfÆâè?üÑpïÞ'x÷€ª=¥#êèº †˜âUI꨽G†a E‡ŠêW9ªÆ£•Òõ=\]µÌæÚ*2f³ï¼Ø“ý?åZ¶·Ý>k½¶Iþ‡™ÑT³ù”ù¼eyuEß–K¥½¬¨›š…””\tVÙŠyfF×ú>A2ªJ˜L=]ñ^pš÷c"Ƅӊ!tXê™M=ŸÐ´çÈϽo&´‹&G§\öœo¨’8ìü÷m|”lûÂ׎vÿk+<ìöͯw†×yÏÖfklÝ76‘wìY…B¡ðe¿{Ùnü±ƒpÿÌÕƒ1ìö@â 1îkí …B¡P( ßE¬/^ÁΪÆW¨¯p®¢ª¦œž¼Ç?ùÇÿŒ>úÂ0ãó³5˾§Ût$ï*"B †WÅ{"„–ç_)Mí ½±\¯8;¿`:ó8?¥òì4²]V­ñ•èf!Ôµrt<åìÌ3 ݦçòlÉt:¥ï1æÆ,ûĶ8nßEb0*ï˜Ï[îÝ9"yÕ€äl|Kb€aØ .q4o˜-„!z¦3‡ó‰”zBèz¡ïC©EDvBýþn|Å÷Ø $åI½Á?9bqççÏžá¼á\‰CK¤2‰/|“H^ ƒmûÖW9ÂñŠ~uSñ/ …ïÂ7²B¡P( …BáwŸ"Ö ¯E©ªï**ß2ŸžðÁ{?æhñRËÕÕ€%‡ˆC$g§¦´Ï„U’Á#6DÖ뜥Ÿ­hŠc6k¹œÔœ½XRQqq~ÅlVsïÞ)*ÿÃlŸ .û ùíÿCŒÄQÉþú)Y¶ÛÑ[&¸&Ĩ›ŠÅ¢E$b ÁXozÎϯúDJ0 ‘ͦÇ;Å,²ºZ³¼ZúÀ´õ,Ž'ˆ xm[á½¢’¯[Ý4 ÃÀzšV¹sgNåéÔqtT3›W¬×u·Â4â› ¾®p^Qïwîœr6ôœ/—×2Ùwyõ§§&QlY³½/‹õîdÈ­ði¶ËâÓªA&sšù óÓ{tçO‰CÀ9ª#·dÜföCïïo*±úe[Áµvn¶këf UEDI1䦫‚ŒY¦–Rr9GÃvg¹ªô¶O˜ºƒ1$a)Œ+Tt×/D…miåBÞ^„”`c] p.O^MwÇo–Ò­Wç›Z‘òuß§Â÷·—öó]gKˆèX„>“R ¥€ºü=f›¡ "y¥¬¨‹ÈÛîyŸ·ÓÝ÷£ëwÉ®m«¨j®Iƒc™!R•gSé …B¡P( ß*E¬/^7Å»œUï]CS/¸{òÊŒåeâò|CrÕ^@ß êÆXÑU³zJ !Ò÷f.OHcD1™Ö´mELožÍ¦çêrÃf3Ð6Ù.çæzî[mX,R$†„snÛnì³”ö‰§i›®# è8?»"¥ˆQ¾êš"—+–W+ÆtÖr|4Ź„:ÃWççÞ{T«Õða¶p·ˆ¨˜Í=óEͦ˙õ}/„PgñQÑœY?MiêY.¾ÛÎC-õo›0Úõmæ÷ãûÇ@†i…Vt²`z|‡°^Òo6ˆ:œs£5ã„þï’tÿý˜x½2aöÕ ‡¢”8ÙYA‰æU."‚Ž"º¨•:LC¤ÄÖKJ¶!«Ý²­¡!Ûª£ý×øÁv0ÎØXr{»/Ùö…›cSú­¸O¥¿^ÿ ´¯½Úø Þ}/‰9èó²BmÿlÛ™EvIöFïDòJÆíw6‹ãí3̶ãÕø“4n;–ä13œ éÀþæmŠß5»œ¯uÌ“Ò …B¡P(¾)ŠX_(¼j^"2f]9T=ªŽeÂÕE ¥ËUÄÕ`µ½iÌÒ¶ÍxÝú½+fFA_ÈZÓV´“ç³°)}øüó<¸?§(:fªnµ[;³ÏÝy³éX¯7L§SY°×m¶ìV‚Ûf¾Z@]âødÆåÅŠ.’ éjª A"aˆ }¢Û„HX¯9=j9^L™Í¼³õ*„aàêò‚Ú¦f6«@:Ô)M+Ìæ ççœ<—C4¨×ìë¯{¯ü—&b׿‰ï,ŽfƳfQŒ s ÕtAÕΫ6 8ïqÑ‘R$Æ´ûÄïR-;»ñ/ùÎÙwL ºåž½ùÚ}•wúõûzI_רs` *Ęz/B 󘢢T¾aˆ˜XB4¯¸QURÌ–NYÀRjß"* !²é»ñø|¯RDÕÁ r¾³`mì a7¦8ç†Ka `úߊ¶ ïÔ¾¦¾ô®‚—üŽ}~á;;6ÞöÓ/g”õ²}J†j뫺¢jZú®Ã0i|æ$BŒ»P¯¸{0§§Bèã1Ôe[½0öi7~gŠ!`¢ˆxTÓnýüV4r+²P( …Báw"Ö ¯Ò"Dq¾Â;¿Ë¬©9±áìì É&Tõ”vfTÎ#.ËòñU†æÜ1&RÊYãꔺ®™ÍY͹¼X3e³ ¼x~Æ´u-mãqêH–'¬/MÇyZ¶¤ÈÅl¯.¯h& uSãñè¸Ì\¶ë•$"¢‰“Ó9Ÿ?¹ ë Ea³hš 'ÙÚbµZ‘B ÛlX-{RŒTµR7JŒf¾ïB¿»v)&†¾#„žãÅŒ;wŽ˜Íjœ¤öLçÇ'Sž~¾aFJF×o†€«óª€˜åøÇá‰Þ* |ñÉ®Xž¼‡(`ЏšºãÛ ®ªˆÇW1ĸë¿›Óe»UR)ùW_£Ûîã›·øºD–mãk[sðj¾Xpt|Äd2%%cè:,Fj§TâxñüçN•Y”W¥nóóÙ,!…]°öŽgççlž®Á„ª®PqtÝ@J‘I;a>Ÿ3™LhÛ_)É}סÎÑm:.//¹¸¸ ¥ß޶_?pËïì–~DéO…ïÁø¸NÊkFL×é|™ñÏ{?ZÝÀl6ù#|åP¯¤vÂz¹¡Ût`9¨ý8 ï<ÓI‹¯òt&ÅHèû¼L9¨¾=›”UUqt<£nª¼:)iH¬VK†8¬:ÒïÀxSxû¬(ãQ¡P( …ÂïE¬/§>£Pf¢c†–G¤B¥F¥!Få§?ý%1Lh&'<|ü®vø¤{Ë™W|Úv9·‘ËÌ‚YÎæj'-GÇ ÎϯˆÉ£±^ \^®p.a©aÒ6yÚ)¼bò–'mÞ{*_svvF"³¤´­Çc¨î½¦M,{ÃZ¤m+GSbP6›DLi\vž3Ñ®–+ºuO)•WœK aÉÅE¯j6›MΪµ‰¡'Gã”Gîr÷ΜÊgީжžÙ¼ÁyAB2†!bÀ’GTQMÛ³÷®yåÜô‹H©z`YSÊ ÇâßâÚ9®™’6+$9œó8Ÿkl“ül´Ñ=<ˆo}ê¼+Ê»½~c´èÀ½ÿ{¿v}¼׺ë­)Ö[ÈÛïøÁGüäŸü„;wï –X]]ðé¯Ãÿ÷ÿœÍf“ÇøqE¢swî>à“‡?xŸ¶©ÃÀųü·ÿö_ùì³',W«q½Ýwõθòü. …B¡PøPÄúÂ÷zbºEGÿgF;”œUßPWSÄj¼NqnBðÙ“`*¦³SœW\~vŒX“¿-zÄ_¹nºÓOÙ §!CqÎsrºàÓOŸºH×8?_ᜡN¨ëï²?k.&`Ž}ÙÔ8ž‹RÕ5É„õ*€ ¨´yšçAÕpn?T…ºñ,ަt›H×­sf|2R4, ëUO/b 'жžùQÍlîQQqêÚQ7£'Äuª99žq÷ô˜ãù„Ú„` BÓx‹)MãY­$Ã’CÚeÐm-ƒòeË âyµP%^ô?´Cýá5”mýº] õ #Í‘gxu£n¶Ù¯r°ïßi|_»’uët}Ûwç½õ·Q´ßOöíd‰ß)MîP¿µà€ì:íMYäÍWKÙFÆ~)¹¿zߢΡÎp‹¤!BØ­ÖÈ÷$eqX ‰æàa5á£O~Âÿò'ÿ;ôGÿJ¢qB­¡ãÙçŸñ‹Ÿý-ñçÿ/ÏŸ¤8ÜÔU=çãÿ„?ý?þÝcÞVHìIýšº2þÓ_þÏžþš¿ø-ËóKú!f‘K*PÏüÎ}>ùÉð§ÿç¿âþÝS³šÖ š"„þŽùô~ÆŸÿ¹°Äˆf7VÂ|Ãýà]Ú‚Ýø«Ü^„B¶Ï9lò•¤¼ã¶öá­/ØÛ«Üí‹ ûªÛÔïÂØx°êDmŸeŸd–cè6#Ýž;ör#5v+Ù$?äI8|=åî{?à£ôyøà”I% ÝŠ§O>ç7¿ú ÂÕÁɳ¯kN>âãü?z€KÏ?ÇiâoþKMß÷„˜vR“švvÊã~Ä?úÉ™M*†ÍšgŸ}Ê“OÅÙ³g¬G»¯hoYyC¾t|å7bû:È ·Ãï5öòãK¾XW¼mij·í××¾ó …B¡P(¾ ŠX_øÞrXˆK½'¥D ÙÇYÕÑTÚæˆ<ÞÍñ:#áâò]«Í Q£ž{ª…õñfã~šY½J‹3š ¸l1±é‰¡£ªjNŽçÌç-/6+^13c IDATÖ«1¸8¨k¥4„˜P/{-v'Ö+r¦<Tp•g:[py1puðÎÍÛáutÕÈÓÙÚ1›µœ×WÄ´&Y<´1ó7ELÁ«¡µ1{î?\ðøýí¤'E¡ßxǰ\&=) Þ)Üg>mi뚺r¬B«JY,æ´m“ Ô†ˆˆä¢˜£HB mmAv…`åšxÛBƒÃŸ&²°·v·p¸È}Ÿ%¨’¯“:ÅtzŒÕ†hT:æ ¦± L–¯eÖÛšöº9¾|eí÷úéߨ¦»Ýx[ÔÃåjà­$ ûÝë¯ëQrClÚ¶ˆë)×o§ì£—HÙJ s£‚‘=E“ù1³ùœ¦õÔ~@ÂÀêòœË‹sV«>©,çªVãnò\3C«&-! ŠQk.4«^qNðjTš¨4QXE “–¨-Á5PWDQœ¢F´Ñ¯‘Jj /ž¤Q«Ü^|Cª'Ī&xG Zmí@"ë©eƒ…³ðÍç_V™Ú¯Îþ²&\rk'~yƒ7åì'¾|ní›.—¾aìy³×ÿoçwÂmcÿËÆ8×ZÉ.K!æZ=jy\"?0m<¶¼²H76 \þEÀU¤fN¬g RáBŸQcYË…m®Õíi¦S´2¸Š^>E†Ô‘l iòw›Ò86(O¤ÁtZO¾”“ ˆ"’ q:¦>Ș{Ýõ±×-öûêžVÛï’“=¶‰ûgÑ K/{Å8r»ç×®¿ÛÁXj7>þµH¾ß]è·Áö­P( …ÂoE¬/È>§;¯hUÄénò£ZÑÔs¼ŸÒwb"¥D×/yúü7ØO « ©¾n‰Aáv%#‹ÐB‰a\],ñÞ3›M™L=¾OèŸqyÖ#t›ÈåÅïQa>khÚïý+“¹¶"|Ó¶\ž6›K]¡®Å»Uël«ª•é´f:mXoÀ™Ã‰ cæ˜XÀ»Älêxðàˆ»w™ÎÄeõZ|Ä$Ò…uU1Ÿ/xpÿ˜‡N8>ö4Í8yÝet‹番rˆzšIsû‚s}°±ˆ¦Ø×!ªµR„ˆ’´Fê ®™âêâ çÑ9bxeu‚oyÅ\z›ñ° à{<³~ÐyC¢)ÓÐÞÔp øü91"@;]ð“?üCþðþˆÇïRÙŠ~uÁßþ׿æ¿üÕ_ñ?~ösR´Ÿ<÷ËqƆŸb®íàÚÚ£DBèIژÁo£Wó6»?ãÌ<‰Šˆ#^«·«rB¶ÕQËõ"BLP7ˆ¯¼$€˜Œ`‰ˆáRÄRÌãèh½óMeÕ#ÝÉ~«?¢PøROÇWþv§R­×ypŽù|ÊlÒÐTBì×\]^²Zmã8f;ù^òê95Æz½áâêŠI T‰VƒõPUK7Çc%¡qñù»Jþöpû„ÇyT•¾ï¹Z-sð y¥¢åÏÊ–W%rS( …B¡Pøv)b}¡@.<¶ËŒAU5ŒHå•Éd†÷S–—+bÌ–9)Ö›+>ÿü×Ý;f~rÄü8g²ÚAQ³íÄÖDGWíozVË u]ÑÔn6áþ½»,/Ýê91$œ›UàLÖÙÝ@Ôïí,ÎV&2fN'Å9h›†ºéé6k.¯.ñu¢ª²§½Vc–ýÁÚ庮˜Î¦Ìç=]·ÂÆë ¢H@#U-Ÿ´<|tÊÑш\\¬Ùt‘ÕÄ+U#,ŽZî=8æáãSŽ+šVP5Rõùº¨÷JU;š‰§•š£ã~ôµ1ÒuRŒc¶ñÛÙÈÛfï”ÿo z PÕ Í¤e3i°å 4_;2vA„oCLyiúµü8r^Úf’½ab×Dï“<±óS¶›Ré~ŒíìNšŒ¼ÍÕʦ¨úlñPM8½û>ÿó¿øüéŸþ >zÿ>U·bõâ ŸýêïùÙOÇû¥4nFt<¤ˆ³@Ø\qõâO?{Ê´K,õ`ÕÕgË%«~ÀÔcIàÚú€ÑIZn+™=ÙeDÛžFV°@„ÍfÍùó§œ}þk´¿àÊ+ŽDëŒÆzž>_±ÜñÀ~éeÑL¾Ã-͸u ‰]o5_ön¶ {õ‘¼Taâ›g…ï×Û—íž¹cå—ÛÞøüÈYï1?{ª?™òèÃùÁûxx÷˜ÍÅS~ö·Ë/ÿîWœ_ BÜZÚ‰æuGbÄ0pöä3>­ýÙ”Ymzž»üp¬>èʲ= 3°ÍúŒ'ŸþU½aÚz4Eú«+ίVô1ã—|˾õï» ø.±…B¡P( …·¥ˆõ…ãÖÑ^ÈÖy2q•0™L& à 37ú¨'bX¯/9{ñŒ‹óûÌNœwYh“½w¸í–ë(Dºn@Eˆ!g¦Î¦S¼èxñüpô}"ZIÂWMÝÐÔ Î &é`š=Šõ*(BU)³YKß ¼xqÎÅEÂ{Åû ï«q¾§¼÷L&-³Ù”ó³ Fög—q¼ÓD;©8=r÷Þͤbµ:ãÓOÏ8;_­!„W “yÃâxÂì¨Å×Ù‡;¦„‘²Xo ¦xïhÇdâñUË;Ç,»H1Òu)Žç8Їbrͺõ¦UëÛLUå…ÈnjŸ³ôœ§ªª¶eX)ê<â²5ÏV¨¿éƒÿµµÏ›çpMH–[Rå·"†æöz-ëо¼§ÇWp/ŸÇ7'MeAú°õØ®¿ÞÖJÞ^ÿÈ¢Ù2õ í„„#ðì³_ñßÿËfyöŒ¦1b\a©G41t¿ü‡_sµˆây— ¤×êjHÎ^M–ƺ  .Î^ð‹Ÿþ-ÿé?sz4ASÄ+ÔÑøûŸÿœß|~NïµÜ* f;ûï‚ tPèòÐú»Ñ/ö¹mÐy‹6¿;߃]¿òl7µB½|=]öZß|…§‡¼ÅU|Õ~EŠxøåÇøo¶KlÇÇë5FKËžôª’ëcˆ ®¢žÌyðÞ‡|òû¿ÇGïqñä—,Ï^ðäÓ§œ[Äă$¢¬#öžþêï–|>­¨4Ðw+ž}ö”õjEÜ.W9°z“[ǘ­mÏ5o|ŒÖ\Îßÿbàìâ3ïQ3¬ïyúôœM‰2fûs{M†¯ÿž¬ê:(À#öªö7Wlöf-ýºP( …Bá룈õ…@J£‚œýQ꘣œP¯ÔmCj†>¡R!6ú¹köŠ¿Z^p~~Æã ¯Šs>§†/9?‘’ŽÍ…eÈuMˆ‘¾ÛPW-''Ǭב‹Ëå˜a›)b’hڎ餧mZÚI5 ÅYÌ3¹.©¨ ‹£)1F^œ=ãòòU¨ªšÉd†¨h>QDŒªÊ–<íä’Øg'RB4QWÂ|ê9:n™Îjb <{qÉÏ~ñ)Ÿ>yJUÍh'Ç„˜Ö3ÄžMßQW ÎETòË{S’ ÞCÓx&£ikǺ«ìûŸâèYŸ®%Áßœ˜îs¡ßeÂ)ÅïŠÄš\34UÔ×TuËàZU¸®M“ž¾éòáäø¦ðw}âœsÁÅì ·~ïÅ¿êE¬Un¬Û}ÐAAÞ>¸7ŽeûûÛ&ño+Ô½I¤Úïç¶#y7¡k¿YöNÞ¯ÂØßÛ©;™×Šyn³ò_wR!×y Â¤¦™žpÿñ‡üÞïý˜ã££|S Äûl!“@бÀ²ì#AÿýoþšgŸ=a6›â]$¥ŽhÙ#Þ’ñ÷÷+Öݰÿ—h—ÑbÔ´”xþì9õ—Éå§¿àxÞ‚½VP›Èêâ’'Ož°îºQäÕõOdÇýÛïÓÛzÿ^ë×îÏ;HËb^® mׂ9¹\ÌìÆxôr¿Üþ^nÓân•èóc‘\ñàöÈä>À oÑxIÞ“Wgì½Ôä_ÕԷׂÛÎë–‹+_ß)7î¿ço3n෽綀†Ý2.÷KD®µ“›Çñòws Õoô+иîæZöñ©ò’4œÇÍ”W!ÊÖÖFuø¶eqrÊâäÞ×ósId»òK÷JG».ƒ¡ëxú›ßðâéç=)¬È+Šb¹_©ø‘ >A $¹í[ŠùYù†ñÄlߋ޺­½aLÛõ(³ký2ÿ©×{›ö¼ëCvãÖÍvu눱»ï&7bØoXQtý\ïKoÛßEìÿ2žð‡ç\ˆ…B¡P(~[(b}¡°›Ñ)âU]S75Îû\¬Õy¼÷lV=Ïž>˶0cöU«‹KÎÏϹ¼¼ä踡®›½¿ó8O)±é6\\$âÐsuyÁfµ¡iš]¦ZL=UÝp|²àáÃ{\_Ò[¶è ƒq~¶†d ýÀéé‚Ù¼¡n<¢Fˆ6ú»æ€ƒªà4R7ÊâhÊÙ‹K®.WTþ‚¦niZ¯rv»÷½²•{Ëcž}~Fµwx§,æ “IÅ0¬ùôÓ_qquÁÏþwüç¿úï|úùsLítÆd:åɳßðüÅS~øñ|üÑ{Ü¿wŒóJŠ!O‘ÑR| wî.˜ÍY·¬ûšõ&@g8çó6^©›Š!D¢õD¸]ªzé`|»’R¦xu4“–¸˜±>óÄÐc"ÔuEìûŽ+·hq_­ •nc¼&Nªf¹Ä,á]…Ø®¬)CL˜*x‡ø éãµcVÉÁ‰8 ù"ˆ ÎåB¢;ß”²EQJªªÇàS­@Tq˜%ÌR¶RRÿΓmÑ\TÐ,a)à|ý’*£hfѰ÷Í5³™o~¾™ŒÇ˜}âͶ×9¯`ñÎe7÷òïƒ:i[L1æ œº}ã!¯lqR!ªWqçÑ#þàÿˆ{Ç  U%«7¶cEŒKÃ(Ð÷$u ¹ðr¹ä¿ø%¿ú‡ßàœ €“€ŒÂT·îé7$PÜhhcU[À‰ñDKýfÓÏ6\|öKœ„¼Z†´l]‹…D×möBÙ+‹Ûö«¸ªÚ‰({Ñò–ìÒCQn,½¦ã(Îù½ÀöÔ)ê]^érPe{ßPEÕ킵! ÄÆõ¨Ï¿‹1·ÉÝñŠ\W·Ø9Þ"· Cò²8lÛ¶%ŒVlÊ0ôc»Ü*`Š¢»8›ŒÜhç‡×òæÇÛͰøÊ*×¶Ø÷Kc0s\h–ûöv’äkxh!·Ó´tÙ]£¯‹*Ęv+ãD•ºžägiÄõ¨Ênœº1ìÇVÉϤ7¯!Ÿ¯ãXd1ÊA}Åêª|bÀ,!âÞúËÈa›y›IÛ1L4_íd6®H{³8œ Ìç6›Ûu?ßíc…⫨ŒÉ Y°ß® ḐSæó9ÓÉç ¦È0Œýh»šÏRÓõ ý ±ï@†k"ÇTAn­]óÒ]Û ÷û*#bà\5žçø T Ù§}!ÛíØËmVGk@3ÛyéÛeÐîß¿@vÏËm¼=°¬¯.§ƒä‚<ä8sÚ­2´m¢Éá~U1ÍWÌÆßmÇç}¾‡‡"øa<ðu ²d?þÆ·l·*U¾e%¼V8uX2bмkèXUñÞ3 )ÅýçÈ¡Ýß>rËõuÞïÆ‹Òkÿ¯x` …B¡P(±¾PøvûíDk;1q8çH)Â@²€Ó •ÑLdœ÷ýÀjµâòò’v²Àù7rµÁ>š±Þ ľgrV™ªGD‰1Ð÷œ*Mã¹sç„¡ëBO B0VË•«§nËŠ˜ ß{š¦¡iZêªB̈Ã}×E•¯4­ýÆ´_uŠ«ràÆÆä@uJÚ­jÈþûI¾>±þæ„4OV÷5¶«+T ¬ÏZƒˆfqQ–Ä­‘'ýYü8ð&ÞŠ[a!IHšF!TÆ Â±PðþFÁ/Ž‚¡î„T³C!öõ¢Óíç»=®E³÷UÆÁ^ðµ”­¶B†VA¢:úÑ“û·÷¹Ï¤”;t°”Hd‹ªJ-‹ AÆ lÎjVJl[…á0¤ª8¹w—O~ü#fuƒ7Ë ¥¢¸ªFÔ—ý8qM%“¼â'ÝfCgý(ή ˆÆ,Ö§QqIÛ›¡×šõ~ɨɿA’L£ÕW‡² ×÷‘as „}̓éu73Ã;—W¤WH!cPHEvÂ0AƬ=¥Wwd륹–*×TÅÛõ—Q´²±Ân.$>® Û”ªäÂÚF”ˆå€Å(´EŒdñv{ñù‘ýµãxNþZ;·WÈ@»,y—ÁÑ"C–‡îíp l  9 €ïŠ€gA:mWcÀäåÌn» ØGîYØFw«µöYþi\X2 ›ÛûaùaèœÇÛ?÷ÞVý*²Z_ÚéÞòkÌrV—]ÛàëË"¨í—0dÂï¢ ² !„a'̪ËâtÄH2Šˆ*0RÚ^9(|úVg¶Óo޳뚤ºî3ý±—ÆÇ×_Çí­ß ºÛ€šYö‡·m_Ø­0ÉŸ“RÂT0çÁå`Ö¤m˜Ô5•ÛCÏ f«ñÙ?žO<È`OÜXÙ¶=‡lÇ%(ÎôåGô×+eXÛŠÈš¿?lÇ‹”´búò}°—Û\²±ˆ×Û¶n|.± 톫›âº\WÈ·ûÙgë<’…\Ÿh|›ÛX:Œís öåë©Á~#¥˜ ÍKCd\¡ðVÁôñÞmÛ³¥ñ<Ò6з¯°_ðÅû·™cƒJ.¯¸1xîc*² V6îdãó{¬#óz{¸"Ö …B¡P(b}¡ð[€"âñ¾f!U L@“â¬"‘ˆÉX¯×\^^pt|—ºˆÖ¼<76] ö‘”õ®ªr–­%ú¡Ã;‡jËâhÂåeM×ç‚´yN)ô}äòbÅ>Ÿƒ ê\.Š:&¦Qñ^hÛŠù|Æê*qu¹a³èûç †÷Žºò»ìGAð^™M[泖دI¡ãäø˜ùÌóüüsþæ¯ÿ†_=ùί.Y®–+#ZÎ.Ö!²]è²F ÌSNNL' “ÆbjuªZ89=f2д ÑŒ¶õô½eëÕ1Ã3†@ßuHås€ã•R‡½4ýºiùð*}ÿÖŸ‹d±LuŠ9AÜ~Ëk~ß_±Z¿Ï®Üy. c¶Ùd2e6›Q×5ˆ¡bx—Ðûžå²ãÅåS‡á1ñT¾¦™M¨ÛšªR*Ô")Dú¾gµ^³^^1ôØý8 7 ‚EœsTuµ ¢TÞ™™’m‹†ŽaØlVË«}1Ó›‡›æ=¯º‡b¹rUUT•§ªj¼w;N3£zºÍ†õfC˜‘Ÿn½ó¶½aêq휺ª™´-Ó¶Fc#¢D$EœE®–KΗK®BB\"µMÃt2É¢0 ëÕŠmÝ2,Pßç÷ÿÑ'üø“™Ô·{¨Ç·æ'§Šã8(ñ²«þôßéܾï4ž’å9y^LÞäy€ã•×ò²SÛü 䲯™¥¸®GE(G!‹Ï:‰c’4%ËR²,·ïDZû–ÍX„bJ.Í3²4)Ðk/Oxœ~ÞÆ\¥ð?QRSFù™ :’8±ëRÛ† Å¿ýJ•ü+vE{>8g¿N]ó¯¨õÖA_¥y^`ãróÎü‹×G§ØË”RgÍBçL§SkÐ!\ÏÅõ\×CŽÐ$ñ„q#}/ˆP~„•i7”C% ÚdÇ¡\­Òl·gTÆ"i¦ã™±`,¡TP <”Ò¦(¡IÆ’I‚ÎÍysè÷‰¬â˾A‚Q(Ï#}¤ÉìŸç$“)q’‘jc'žx¥xA@>m8Ú{Eè{Žʹp¯”=?µÖdy†Îí=LœØƒ.¶Ä—Ãq_ ùÅ „Äó|ÏÇó]4)k™Žc;spa/u{L]?°™'Ú6Utžš4MHó”<7/Mì½ä”ÿ¦»â¢Ñj§9ìµØUª¸oµÓ©BI¤ÅôšAg9i“e™=_N'ÌW ÂÌù½m:V<Ëtj1ŽC¥¤>™N™LR+"äÖ¹©ûd!ÔKÇ!üSsaá°Ï¬¨æø`$ãL'†ÉdH6‰q]DZnúj­l¾¸ŽuâOËyì’gšîLƒ\è³¾¾ÉÓõ5FÓ (/¨âø>ʵF¹V“2‰3¶vh®m²´´@»Ý FHÛ I¹Z" RÁÉ<ÏÁqsò<¥ßïs°@ÿ¸Ït:%×9®p_õÀ~A5U®¯گѯ¾ôçÆŠmÒq®Â¤ rG9äRBžŸ=oJóûËpÛ¨xè·ŽQI„¬®®òúë¯ÓëõP®‹’WeÈlÈþî÷¿xÄ/?þ‚“±F#ñ£ 3ó‹,¬,ÓëvhÕËÔ"—<œ°¿¿Ïöö6>àèð<ËPž‡£¬¸•§ŽãÐjµ˜_\`yù µJ…Rá8yž3 ÙÞÚäÉãG<~üu­É ¿ñÔS¦\)Óív™Ÿ›cf¦K¹\B9 Ç+œšÒ8e4±µ³ÅúÆ[›[ O†$IjE:×-4a…-;.HŒtÈݽ¥eîÞ¾Åí«„·nÞ¡7Ó‚|ˆ+‘ ò)ÉhÄ/ñ ~ûÛOè§œ ÿôÔ¡yñkñ’ hÿg¹ZçÊ­Ü{ýµrDÉsñtŠžô)1ä`wƒO?û‚Ÿÿú>&Ë-NG8/u N÷ÄS4Ä)–A)E¹\bii‰…¥%aÁ—\ØÇý>{{{ìlï°¾¾Îd2fÇŒ§SȲâ}‹Â üꛕx~@»;ý{÷¸²¼LµRað<£5Çû<ýâ!Ÿÿî3Žú¤F#„ Ro0·°ÈÒò"½™Õr…0ð‘B¦)»ûû¬¯¯ñüéS676Hcñ’kÝœ¹·/XÍ/âŠ÷™ƒR×õ)•J,..1;Û£ÕjQoÔpG:Å‚fØpppÀÆÆOžFçxO½^§ÝîPo6ð<%•mÎÃñãþ1ÇÇGÁæùÙ1ɲ£ T.Ój5©×ëTªU×G"ÐyF–¥¤IÂîÞ‡‡ŒG#’il¯>Ò^÷. íVD×ð)òLd·çC™z½F­V£T*ã‚ðÅšN§ŒÇc&ã1GÇÇôû}âlzî|v"ç+{A0?;O­^£EH)˜N'¼xþŒƒƒ¦I†–¨ÔêtÚ34M<%qMÆÁÞ.›»;¸•Ý…E*õ:Žã°0;G»^Æ•¡s¢r™Ù…%¼¨ÂüjŒ”’x4¢¿Èî!±ȰBµ·ÈL¯K9”¸ù„ݵMv7wœŒÈò¯i²_˜Š”¢@朢pΆoÊ‹¨4:ôæz4ÚžÊQyqÌú“gìí0OmæG1Ið•­-¥p\×u ŸÙÙQâ{>AàºîYcqO‡ÄÓ˜Á`ÀÎî®E«iƒ¶)“e™m6žÞ?QLm„RT«5f:]fçº8ž!N&ìíîñìé &£ ¹ÎQŽCT.Óh4h6šT«U¢ t[g›×G2 žœ sÜ{: z–^ à«’-DѸJÒß÷©V«´ZMjå*®ë⸠åº8Ê!Ms¦qÌ}mÌ IDATh8¤læx<&N»ÿ›ó;ýÊ›mZG|šÄgÍ3©ª•J…R¹L­V# #ÛTÕùK¯5I‡ŒF#FÃi–¢óü Û÷÷"—uY—uY—uY—uY—býe]Ö ™þ‚``Å>Èõmbå›k+Š;Já*‡É4A 5dzüy$Zç¤yNùTj%rmÐz‚A’kë€ÏR R5E—ZMà®åÏK@k”°¸×…rTbZÊÉRÍt*˜ŒŽ‡H!ñý©4®rJ⸒°ä#L¡=´žòàþçüöw¿fkc‹d’¢3ÄÁ•!yfEá;”ÃFmr=ád4æèdÀ`<&,ù8Ê=s•mp=…r‹×€3ñ¤ÏóµG|ôË_³Ý26 ¼/qÜ”,0 ¿¡LÁc¾@6xÙUö5 ‘Â:Ó¥‡‘>B&‘¾Ä|}uí¼$>ýïn xét–yÿ{?àõ7^£R)ãÈ©ÇÈø˜‡î#•ǧ79™œ°´t…›÷ÞäÞosçµ;ôzªeŸ’hëÈÞÝÝec}ƒ_ÿꟹÿÅç<}úŒþ`lEoåÖêܼqƒ7^;wn±¼´D³^§V­âz>YžÑ?>fwg›§ñ»O~ËÇ¿úg677˜L¦$YŽò\9ed !Ëþòý€™^—••+ܺqׯ2Û¡ÑlF!®ç“y¦ÆäiÆîÁ.ël¬¯ñÙgŸòäÑcv¶w Gdy†ÀA Š†Ìùؾ–.sË×øÎ~È?|P—'8Ù3=a{í ž¯ØëË27î½É»ï½Ëk÷îrýê*µZ!Ïž?ãÿø?ÿ £á„·Þ|—?úñ[ÙÁq‰¢¡gÏËSİ’× ˜]X¦^kñîû©ñtÊ‹gñLÂÎÖLJcDjðÊWoÞæ‡òCîÞYÁ—92Qù™Ÿxöè!ñ8&ùWtŽ$¶Ù$^ÉÜ´t•Ü€V·Ëo¿ÃŸÿÅŸÒiT©.¾IÑãcÊîˆGŸýNùÝÃ5“¦§!œ ?¹9Güx®O­Ùbaa‘ÅÅ®¬,³re™……yªÕ ïS)—-Vå«:<zÄgŸ|§ŸýŽÍMFãI1³d± ä¯8Ô%ÆHP é:Ì/Ìrmu…kW¯²¼¸ÄÂÂ<33š:BJÊŠÍBpr2`oŸ­ÍM^¬=åé£GÓIlM'Ø#,ÚFHs¡Ù*Ïö)Ç èÎö˜íõh·[T+ªå žg¯Ë®ïã8g' £ñˆþñ1ÃÁ€£ƒž>zÄÉÉ Ói‚6vwâeì%º ÛðÕ9®R«7˜-~n½V¥•¨V+„Qhqv¯œišrpp`'¾ú}vvvÙÜÜ`4O§¤ö"UÜüPÿe]Öe]Öe]Öe]Ö¥XY—õï$Ê_Ôy ×›\eEG \W œ„RäR-ûT£ ‡ GýŒ$ÎÈ¥ƒ.®ïS®Ôé´{”K<·‹Fç9yž‘g):·lÖEç€pÈrCgL¦v„ØQEجÑx¾OE$‰fç$Sv)…$ËãqŽ6S²Ü²ž+•0²ˆ“Ó\Œå놑¢RÕ$iN'diÆà$FëŽëS­ºÈÈàHò<ÊOÄØçððþglmn§9µJ-~Xeff‘“á”iœ"ŒƒL%Õ¨F­YÂõ FO‰ÓŒãÁ€R% R­ó¯àq;®e#Bi\Ò|ÈÉ`›££ âL`dˆ$Ä"¤ë£…Dh]<ØfÇÁ«cï§¿Ÿ;Y/f¾Ðwúg/s5)=œ †_jLcr=¶a«BX‘¹`EŸ‰’ÿFÏuBHŒ°H­d©Fi¦ÇÌòêåOä¸zŠJúLÇ1ÍöcDPbþj¾ûC¾õíïqýÆu–g©V"<”ÈPò4ciqž•¥æ[U®ôÚücðñ'÷é›)•f›•[7ùðÃïóîÛ¯sõÊ"µr™râØ#iœ°´´ÈÊÒ"«Kó”=Í?ýbÊã§ÏÉ´>s, ©PHtžž£"ŸR­ÅÂòÞÿÖ·¸{ç&7V—YšŸ¡Y+ÙsÃuq}·v1’ÄŽÖ/L–¸~ó:ÇÇû\»±Ì¯õÏüöãßððó‡ #t¦ d€] ù^ ŸJ½ÉìâeT2ÅÍT>A‰˜f§M³;‹h_ã»?üs>øÖ[\¿ºH£Z% Œ1ÄIN³Õ#çˆr£Eg~åHdWQÅÔ‹å¤[ã¸Tª ÊQ ÅRåé“L˜i4pˆ¾R®Öhv:tçf ¸zŠ«Ç¨lÈÉ¡C½Z)°Vÿʺ[p&ÍÇÔæÀ Â(¤Õj±0?Ïl»FÅwñLŠ“Ôé3Ü]£…8²v)/Œ Ü(¢;·ÀÛo¿Ç;wXY]fqi–V³A£Z&ðlÀoàyH¥02cÈsC»ÛcùÊ„éxĽ»÷Ø\{ƳÇøä7 ~ýñ¯ÙØÞeg¶yj„Š‹³!ÑÒ#÷ʸ•6ݹ–æ{`rRàJƒŸk^tÚTÊíÞÍù%ÞûÎwyÿÍ×YœëÒjÕ©TKø¾‡ë¹H©Èòœv·ÃüâWWY½2Ëì\ƒ>úˆßüæ’Ì p¡ˆÉ<ÉÏxѹ/$j¶YZYæ­×oñöw¹}ýJf£N¥\&Œ,²„\ƒ¶9 Ó$en~ÄÊÊî^ãÅõÞŸç7¿.óñÇ¿fÿhH’‘’4ÏΦ% ”Ý0¢>Óã­·ßäµ»w¹{û6W–©”ÊTÊU‚0D*…òJYÜ©.¦ bF£Óш×ï¾Æîö&¾øŒOþ¹Éo>ù˜çk뜌bŒ,ÄÈ ßóÈæ¯Â€|Œ_|m$y.ÑÚÅ÷«Tjm\Ò¸ÏþaH©Òœi±¸¸ÄÕÕº*å*åJ}*MJ…çùT²Œj³I³Ý¢ù<¸ïóôÙ:‡ƒ˜R¹ÂÒÒ"7®­°´8G­VÁ÷=<ïGÅ:3¤:'‰Êµz•FµÌrvwv9ŽI…âì, \Ç6_— *Ñé°¼¼È•¥Eª•2¥r‰0ΰ¯ædÆd9“iL{vÞñ!»[ë„¡ÃÎæÃáÀ ’œ7®Î.QBb”‹ñJ„õ6ÕÖ k‘*®R®ÔˆÊnÞ»ÃìÜ"µjƒÈ÷ñ”ÀÄ.åR€ïJ×ÃS.® ”Bº áh„HíTƒ+qŒƒ W¸8އŽS×%+(&×c(‡!õZ•V³A¨ò‰Oøv­è ƒ,»vŒÍ˜¯¦Ô‹W”{a.„3;a©B½Ñ¦VV¨l„ŸÇkÑ^ESO c;˜`…kåáº!µj•«×®1¿0K§Ó¢ÕjR*•ÏØõ—tžß óÜÞêœ8Žét»ìíì°µöœ­õ5vvwˆSCv†±?E·99ãú8¥¥f“‡HGPÝ?À÷=õÝn—Õ«W™›Ÿ£\©àû!Žrñ\ÿ¬i¦9H²ŒV«M·3C«ðøÑ}6·¶MSÎ…óрΊ{c(„ëSmÔY˜ï±²J’å†É$E*ß·!‡Ë'÷|Ÿ°”SJ2òlHžÙ‡É\ ²\“f if9µ§™‹QÉÅqYVp“qñ}‡JEÇ'ýY¦‰§y6ÁuûH!”‡”Ïx‘BäŠñÑ„_|ÊÖÆ::Ïé´;Ôšmr­Â*‹ ×8:rxØg0’SH4ÍJƒ™¹&†åZAa8žEe¾‚”ÖùiÝe9~ ñ|ëg”Ëe"&Ú#— ¥vŠAy†(ÆÅ©r*Â_pÞŸñI/rn^ (äbXÙé3º@(éWñJ â£;=(¿â¬Éóoþ('H¸dÂ#Sé’8ŠL#Š@dŸ (”êx寿ý?ü“?å½wÞ¦^«P Ž£3´Î‘BáG!•(¤QŠèUBºÕ2ËÙÙ>Æõ'Ì]»Îw~ðc>üñ¸uu™fµ„Ô9ÂØ0ËÌh¤t K%Â0 ^)17SG¦G¤£]öw׉ÖÝg„eÝ*éZF²¶®B¯Tcéæ=ÞùÖ·ùó?ÿSV—çèÕËTCEàÂ8ŽA \Ï%ËRËÃw<×'Ër¼(¤Þª3—ÏÐí5è´*TB—|<äÅÓuÛ˜2 Œ —² rˆãŒ8-ÛÒš²5¥„ëâ•J´ç˜oßà½ï|Ÿ»wWè4BtlCh³Ó‘~å‘kAœåLó”Àó <ƒ]WºHÇcz- YÛ`ÒS×½”ˆÜb¯¤tq„c…A!H5x\@Iƒ’a2”08R}mLÞÅ_¯þ_Q4N'‹D@¨ ‡¾ 4U(®Y$6zŽB¦‘[ì:ÇäY|~¹)\ÜÅÉå„%zËWyûÝoñçügܺun¯EµÙ@_‘ãþsa BIr!1´É *e*µ*†Å…9®.ÏqkuëómJ >úÕox¶¹K¢%&+2Så9j&ã3H$IÁ¤—(ÛÈ1%$¾«¨U+\kö¸öÖ{üàÇÌÝ•EjQ€ç‚ë)¦ilÃEí#¬”(UBº3uf»5:í2J$l®?ew¯O^„;›"ôñt/…«:j̰tû5¾ÿƒïóþ›7xãöU–zDjl6„´)y¦-ÒI€ë‡Ô}ŸzµŒ™i°Ô­su¡Ål+BÇ#~óéû2c¯–CnR`¤Àñê½9n½õ?ú“?æõ»w¸º¼H³VEbs|µ.šLŽ%àØì]”£p}ÕlâKE²²ÌÅYV»5*H“rÿéºE<]8¼‹y3ñ* èBÿÜ|óÕÛ ÑÆ!×.ÓT’i‰'%ʸ®¤V¯à!·îÞavfÏñÈÒœã“ÒS¥XÊCº>a¹ÂLw–Û·n°¼4O§Y#ŠlæM–¤ŒÇS»ç]ø´HÏÇñ‚jjÓ¡ÖjR©FønŽ41[› ÇÇñ…P_y–‹ ‚I¬2 #@9Jù4[3ôææ¸qã®à¹ÂÀt2Á$cò,“‘LÆìmï'*Q­—©×<¤äi‚H3Fý'ƒ)“\âxƒþ»‡œŒ†dyÑtÏ3\!ì+>#)•eÿgöZ¥‹&¿ ·6œ·Î7¹³uS\ÿ_¢ id©@8…i®ecwÎôÒœ³í¸žO£Õaii™;¯Ý¥Ó©S­FDQH–iÆã I“¥6SCIu–7à6ã%#JÕ:õjZèQñ%Êdì N-—ÿ,‰Vœ»Ú#kÁD \$Rºxž‡ø´ZMVWWY½ºJ©T"N2Æã1ynp¯˜ÈÅ}a‰È ƒÍZªdc¦“!£ýó 7#Îçí>å€p)UÛ,^YáÞík,.t¨×\Ç:Ø“IÆd:!ÍlS>Ž\ÏÇó”ë–«T«ŠF½A«Ѭ×ð]Ÿ<{Áh4"×ú¥«“A`¤ƒpC*õ&K×npûö ®,Ìz ÇäèdJ<3žÈ„=¶§YGŽãPŽJDaD¹\¦V«P.Gø¾‡6š4ÛBçÉ—¨¿lû—‚ýe]Öe]Öe]Öe]Šõ—uYÿ1Êî(Cg¦A·Û V.Çp¸Ÿ±±33…<#Cº½Y—hÜVc4y¦ÉMBžåè,Üò/8çÕÚ¯­Èž&š$Nq”@zª`ž&(¥¨T¢³`¼ÑÉ”$ÖVü1VÄŠ§9'ÇN'ê•zgRGE>•J‰R©D’ô-ÊG*F£)GG ¹ñÑ&"ô ¾Rä:%NcŽÉ´¦ÓžaùÊ¢rÕŠŸ¹CÅ/S™©S–%vòŽ‡ÇŒ÷ŒÛ#äL‹¹åE23AÈb!×6`Rœ"Šñk4ÆäøK«]cq±Ëîþ,ý©Ãþ çxbH⠞㢄c“t‘Ö•ú/±´¿’ef¾¢i󕢑6 ÇŽÜs1ðòßûñít<_‘ ‡\(r)È…°$R88nH©T£;;Ïw>ü×_¿Co¦Úº-•²”u1~/”¢T*QT–1èøìÁÕ£!«wîðÁûïsmu™¨¡×uˆã!¤cE•¼ÀÛHGÑŸãƒÞeû Ÿ~þ;Ž'»$i¡Sþf¤B8„K½·À;ßþ.?þã?âÞ·©ø’P¤ÎÈâ WpBh„ä§.]Z*Ð`r+þ7[-Þxó5<©î2=9&žÄÄI£l^ž¬¹øh®‹†Áe AX«1e™ÎÊ]–Væ¨Ö"iÐBâ)…4  ¤ã Âä 4Zd8ž™ýžŽ,P®v£sÒ<Å)„xÇó1&'MòT“'à*W9Ä9VéH„R‚B 8\eñZJ9ˆì•å/.ˆõâeÑþ©½R~ýI"Š=Í\X‹¯¥R¸®ƒÎrÐÅ>äú”Ú3¼ÿ½ùOö¼ûæ;´š.~ A ²Ø~.mƒ²!Ë4Z:há Y`ð³ÌËJ¥Jeu…ÅNRè!¤`òÓdcçe@YdV!~2á’J‡\H›^P 5¤’(åâ{ËËKÝyn½÷·ïÜ î9”°ø˜üË/m†ˆ¥$ž#ðgfð”æø`‡Ÿ}Ê? Íh™Š&ˆAçE˜h¥Æâ|ïû?à/þóf¥W¥[dÙGØ çL' Yœ.ÊuД+q”ƒ3Ýõj@¥wöéýÇ'¸ŽKšië’÷=’4'h¶Y¹û:þðøî‡ß§×lP =BW¢$ÄÓ”Tç82@ Èrû²ëÄv$&·~P-­¬PõA§cF“[{ûôÇ1ùYð­üßÄ}ºZ·µ ׆ ŒèõzhéÐíÎ¥){ìïÐï÷™¦)nÒhuhuºÌtg©”J(éâ LbÔu®]¿Îò•eJ¥ˆÝÝ]v¶×韜0™&$¹¤ÖîИéRm·¨×«¸RÚðoeX˜ïÑ?ØåèøˆÉ8ûò5*Ï‘C¥Þdeõ:óKWètÛÔ"£SNú}öw÷ØÙÞæèèè,´øÕtææY\º \z³…H™ŽÉ’)ñtB’jòÛ\:ÍM\¸Žç‚°™(•ZRTb~qJ¥Bn`41 1É‘  ‡¤Ó„£“]FS¿¹_mpõÖ*^ÐÄQ¦ŒØ|¶ÆúÆ{ýáx$ñ„áà˜ÑdLnrÎC–5ÊdÑ8ür.9ßd¾)‡Ã¼’½ñr[Ò üæ½&8Ï÷8WûÅi´ ‚R•ù¥î¼ösó=J%%5“ѽÃ#öv÷9<8bprB𦣭Pït»3t»=Ú3]ÂR…F«IèB9´ù;“Ï2ŽSNüÑ`î´öZ•ÊqÃV«É•¥+ôf»(GÙ,Ý}™Œ§(å\ý€J¥ÆÒò ¥J GÙ Šnw†þâ{û»ì“d┡þ4Ø Üˆ¥•«Ü¾s‡ÕÕ9Ïà{cÆãkÏ69::á¤?d0“METk :ݽ¹j•ªÅµÚ¨"€6Ë5Ïž=g2É Áþ¢^.‘nÈÒêMV¯ß¢Ûíâ8 ò”á°ÏñÁ{»»ìîí1ŒR!q\Ïìº.¥¨ÄâµZ•0 ‚€……”’“3ô-r2)²‡ôå“Ïe]Öe]Öe]Öe]Šõÿ!ë'?ù ó7Ã_ÿõ__~—Âàû.‹‹ Ì´TJe²ÔegÇam;ãdâá0»°ÊÜÜ"õz¥ì±Î2Ò,#Mm°—ÖºÙ<´2µ ºÌÆd•JÜÜA…’C†V\ „G½QEÉI>) 0Z0žd §gB\Í\Ïâ7ìûIŽCTrh¶ªLã1ÓIä$IÌx"QNŽRX­ô¾GPoО_ĉ":3-nݹƒ0Šõ[ìôÙ[߯*54)§0ˆ™ì÷µOp—fi4š(× ”Àq<«³‹‚ËjÄ…g3;UP¯VYœŸçd0f¿Ÿáì‡#R!P2LjŒ  ¥´‚sáÌ:óÑ‹Ó`=ñ’Vo¾AÃU|—gÔ‚s|öAúsdã·¾ø7[¾·xIb>ý)\×enn–?ý£ñö½[ÌÖKÈdÈÁþ>“\àú¥r…¨ä‚4[ñËu|j7nÞáÝwwØ;°|m•;W樺0<ܧ?’kC£Õ¦R)áJI^è¶ŽtpÓjÏpûÞë¼õö¬íþâ“ ™Ö˜<'·Š.¸^©Æ½7Þäý÷ÞäÞ*‘ƒød&ÇdS¶¶¶xòì)_Ïr¦ã›kk¼xöœí­]Ë³Ï '‡G|þéŽOƤ:''ÁaÖ¶Áw–q*2™bõsQ?ÿ²¾)¾^àz¥]yæ`å\Êú½ËûôõcÐÆk*¨wfxÿ»ßåG?ø>o½~—v#Às(» L&#öw9<Øcwg“Ñ#|¢J‹vwžv·G³U¡ä D*‹€ÚÏ‘¼ýî·HÒ ü—ÿëï8™äLrÍÙÎkN›¢xO¿6U8‹ƒ¹%Þ0ŠêL—¥•yÚ¡d|¸ÇÁÉ€i’ ápo›õµ5Ö^¬±½µÍx4´!¤Åg– IP­ÑÜÞæà舫W¯ÓjÔ‚·Ý!Y^"žØð߃Ãc ߘÊ9G_H˜é4)—+D¡Ïöökë›ì2Ž KpÍ”£Ã]6·w˜æÙá”ú”Û#z ³Å}E’ ‡¶¶6yòä{ý©E­˜gä:/Þ“<›Œûòkº›³¼‰ IDAT¸û|Íj)ÆáΦ˜¾t…ü×_jeáÐHðB:s‹,_½ÎüÒ2Q @[G÷þÞ.=e{wŸ££cF£Q‘õawKG9lïnÓÙÞaaa‰«7nQB¢¨‚;;D²spÂÉhB6¿ò._¾ÆÛ×c³M*• KKK´;-&Ó1/Ö^°±±ÅÞÁýþ€8Nmó^Ú@úf³Mœä,,­Ðl6=‡RP¡Û›¥7»Í“µ Ì8#KµE-*—<Ï1Bâú!ÝùEnÞ¼Îâ|ÀspdÆ`pÂîîO?fíùÃá„É$f'–lçùa‰Ê‹ —X]Ya®×%r3=´”ÄYÊÑñY:EÇYq±7á¸8¥ ³KËôz]*%’!ñtÈó§xðà»»û ƦIBšgHÇÅñ}\×# C66ÖX^^fqi‘nwGº´Ú-æççY[[g:ŽIã1&7ˆ¯ %¿¬Ëº¬Ëº¬Ëº¬Ëºëÿß­¿ú«¿âïþîïxüø1W¯^½üPþÿ®Õ ç{Ìt{ÔjU/Bg>ždf6#¡N……¥k4Û‚ DQzå¤iJÿyA)rñ}…ë2CJƒëCµ0äybêLŽÖ.iª™NS|?Æu\×!¬Õ˜[¹†WŠè´êÌÍ/Ç9ãã ãÃ1Óá# ô(y!QE@YRv|\-ð„Cäø‘D:ÆòÞ±>ŠÐWSŒé»ÊACEÌõz¤4ަDÑÕò “L¢˜¤šÑ4%1šL@.mp£6ùËB½8Ó1Ï âÌ‹”œ‹ÇLÂýEQ_â¸)þÆ+dü—:ó/J#H4Q‰•+ËÔÚ³të%v^þÕïÐxãÅýý=ûc’LcTn H…ÛóU&ói€²1§{Í¿DVÿj-ÿ¥õõŠXÿµ $ñå•©uF’Úœ¼€¨ÞfùÚM¾÷ÝyãÞ]z:®²SØ ãaŸG>ãþŸòôé66·ŒbŒð ËMnÜ}»÷îpcu–²´áÞÒH¤ãÒž xã78ÜÛáɃ/øâÙ&é`lQ8FbĹة æµ.Ä{)¹1¸~HgnžJ½FXŠpDÆÓß}Ì£ûØÝÛçd4%w•uNNèôëŒÃâüô5 ¥ ;ÓF Éx4à‹Çyö|ãÃc’©&ôeF21H‚Ä r‰Ë乯h@¡­5“ñ˜ÁÉ £QŠŠ‹6fcÌ—¯i…0ýræ§ùÊE"NÿâŒâûÍûœø†Þúiã^H…ôKÌ.^avq‰RµŒÈ'$ã1»Û<~ð‡žrÔ0žLI³ ×uÑy†Î5B)¦ñ”þÉ€ÑxŠWª²ÐëѪFDå*®av¶ÇþÁ!ãá> ^çÂ=Œ(ö«,׸@©17;KšÄlonñèñÖ×7Mc’$%ÏÅWp—á`d›Y^ˆ„AéxTë Zí6ïY,"6Y InÒñˆÊ5V¯^eaaŽF½Œ"Æd »;Û<|øûîs¸{D’äŇ@H‰P1ƒá„£ÃcF£ YfÃ{çz=*¥€Z³ÅÜBçÏ û'$Ó¸8övHǵùÍ¥R„#sÒdÊþÎO=äáƒûôGSÒ2£Mnƒš›ñà:.‡‡‡ŒÆc2†a!¥"Š"{;»L§vìí|-ŠË Ëº¬Ëº¬Ëº¬Ëºëÿ#ÔO~ò“3¡ T*ý«¿Çßþíßò³ŸýŒ¿üË¿¼úÿ?+ΟršíÞ@à(R¹Žç—AúíÕ%ÝùÆ(§F«3‹r-r&ÏsŒ1dYfñ7§cë§¼cC•(GžZŸ†zå™&‰3GA]Ö1®…ÑAˆ® ÒÄ¢¦“Œ,µb¿’,ËcÚf yP.¨Š_„§f A(©ÕC’dBšM ¾¾´Œ} Išf.R)œ0dvy¨†>år@»yÂäxÄÐŒˆDˆ‹‡„R„׎Ú%ªå2iÀUÖéŸf_-îI!‘R$)žãÒj4Q* ÑˆiÔÚÌv‡ §“T³ß²sЧ?3I5hÚi§þÅróÕ÷òTÔ0¯ˆâÂýÁV¾?äeZTÓ)âÖºîqšF%ç}zIÆúú:?ûûÿ›_üâ#¾xô”±V”›sܺ÷6¹ ¹}s¯UCaȵ!5GHüR‰[·®'S¦ñˆµ'ü·ÿö_ùù¯~Ëãµâ\Ñì-ðÁ÷~Àô#îܹ…ë(”©!-Lv‡«×®S¯–ÙÛ?&Í´ “3 E©Raqa‘×îÝ¡Ûj#sƒ4à(4ÓÑOžðóÿù÷üÏŸýœkë$`œ 2Øæñ³Zí.íF…F5ÂU­-Ã?ð<:wï^ç—Ÿ<ä³§{èLÇV1Z"½>Ûß$R¹øQ‰v§C-ž"…f÷Écîö€_<âéÓç˜,G Ãt:bcó›»Û‡L (¿FTîðÖ»ïb ¿fŒ!ÏŽwxúè ~õOÿˆ‘e >&ÒŒ$ÏÉì¸Ây0íé23çkϺéõ¹`ÿŠõÿjiß¾ ѱ'ÖLj8ŽG£3Ëk¯¿Ã»o½ÃâìŒ ªÔ–•靖dzÌÚãûüÃÿøï|ôOñðñcû,EÇA¨é–¹ýà Ç|ï\›oày® ",ö×v·ÇÝ;·øÖ{o±ß?æd4 ˰ˆb=ésqšOÊ‚ëûtfÚV™ŒNxúä?ýéOùøãß²³È`š2Ñ’ÖìÞùöøö‡òÎ;wQBM€…’•r™+ós\¿²ÄÏvØíŸ3Ú…ÂñKTÚ]®ÝºÃÕ«+te\2| nÑÌY{ú˜Ÿþýçþá#¾xð‚Á(#ÑZEˆ`ùÅcp¸vußuñ”m|ÖZ-nߺÁÓ;×xôä!»Ÿ=g”Ù G¡<Ür‹vw‘^o–z9°Y-Z#tB:íóèþ'üôüÿøÑ/ØÙëÓh¦™$Ã!‚r¥N½ÙåÁƒ§~Àûï¾N·]Aꄉé8!ˬ¬¬R.•q”²¬÷¯–ýƒ6êÓf7§ ¡<|ak89:âÙ£Gllï3L0YºøûÚg9û667©5[T*5‚Rˆ£|¢H’óäé6/ž=æñ£ôû”pmãÇL–’iA¦!Ó°öbn§Iµäc´FùQ¥D©Ù*úL7€ã(|ÏÃU’éhĉ©cŽvÙ(,‡»$i†«œ—BÑ…4žgGŒ§)µæ Fƒfµ„§¢R…Z­N½Zao×!ÍóWÔúW.V›ÝQŠV³ÎáÁ![ëüî“ßqttÌt<ùØ{“`I²ó:ó»ƒ{ÌoÌ9³²F,APIEÉd—-Yoº­-4ö¢Í@ã–FãŽ4r-ƒY/Ôf½ؽÄbk ÈAb¨TeUV•ÃË7Çî~ïý{q¯GÄ{ù²ˆ‰ñÕùò…‡‡ûõë~Ï9ÿ9„ª dFPøHúÔ¶:"( JY”2hmɳ km"Ã<£A$DQCðQñ¯–tðJ¥¦§…Ò^žÔ|†G>Ox{}0¶ÁÚÆ—®\cs{ ¥…P• Ç<¼÷>ï¼ýö™%+e’:;ââóàd·oÝâÎíÛ¢lÊôIÁÚ„²(é»>wÔ]6¶/rîüy67×p¢É[&Ül0M¨Ô‚ôEYòf—í <óܳln¬“gšP”Œ‡ÇÜ»s‡÷nÞdçáå´D‚Fé,Þ÷¾rTÓÝýx:ŠÏ½Œ‰"® gÏI+ì~U«ZÕªVµªU­Àú~½öÚk|å+_9ñ³K—.}¤÷ŽF#¾öµ¯ñòË/óèÑ#¾ô¥/­ÀúŸÐÒZ“e6-4”2ˆ&cGÞÈQÒ`0 LÊÀÖ…Ët73*—!ÞàœÃ­XRX•ÒŠv»‰s޲¬¨ª’ªò´»]šÍ­n‹²( ”Q1<•€sžbV¢Sjif£J Ñ( ív¶£ôÐ÷)‹ÎE _DáªÀÈÍ(‹’ªlƒ@«Õ$³‡‡ÖšÍ­JPŽ=š­­3"Ãဲt´Ú=:ë=z£5rÇç¶7p£-ÊሎÉÙj¯£Š€›Ì¨|ÉæVÖöY»Ål2f#XrÁ,'u/À’)R üˆ dư½±N§Øì­3š”LË’ 3öúcÞ{‡›wð`ÿçcL´ î£-àÕ“~¸ü ˆTQ¢¦N4©×ƸêG’;¼§ª\E%ùÚ‚sØà1nÄßý×ÿÈý‹ÿÆw¾ûöeQùîöñÙݵÿ‰s[ë4¬ÂÚŒ U±ãa[¯Ñï;¿ò?ø//ÿ9ß}â-Ž)E£lÆÅ+—i5ÖÈE´&‹GÞêpéÊUžîiî3ÑÊ´ÁXK¯×ã©kW¸zé"›kmZ6†ÆW-EÉÍ÷nñ½ï¾Å½{÷)gŽhcaR0xÿó×Ë O_åÊù-òÍ™ÕX“c”EiÅS×®réÒyò†¥t˜T »¬­cÒ+ÄÍ×ù<§•oPŽú<¼}‡¿üÿ¯|ý[ܸy—½Ã~Tá+A”#H ŽÊU„J¥¢,* 3Í\Ga”Æ*…*Küt‚Ÿ:œ.ðŠZ¡É•#XÊÒ„Wï½» œO0~èDò€=¿žu–alƒ²ØF—+O=Ë/ÿ³/ríÊEÚy>wÁ2T”“>;ïßäÕoü%ÿýå—yóí› Ç.YLÕˆšnðÉŒYåXïuÙêþ Ùf±ÑF#šf«ÃÓÏ<Ë¿úW¿Æß¾ú-ÞøˆÂÅÛ(û\öýŽ/!†æ:%ØÌÙ6å¨ä{ï|—ÿòç/óñÿñÞý‡Œ ýîɸuÿ€GSO¹òô§h\ham<A…€öB«‘ñôµ«lt¿‡áxRkC»Ûãú³/ðéÏ|†K—ÎÓÊyÈg:ðÚw¾Å·¿ùMÞ~û‡G^e8 JUÈh‡7¿ý·lÛäŸý‹_ãúS봃ƹh7µ¶±Î§>óŸ½ó"o¼w¢4ePÚ’å-ÖÖ·ØX[£•ƒžA¨<:”Ur÷Î Þ½qƒ»·î3Eõz%QÕ­²&£ýŒ 'ôº¹pý©KÌFÇLŽŽ™ì<¸Ç;ï|—Éxœ‚¥Õ'Ÿ—Oç1 8見»;¸ýîMî߹ˤDt èq÷"%ÁŽ9Œð¢p!ÒÖ*¼›òàÞ-vvî3Nbˆ»Ô¼^žC€Y‰—1{»ŒF3BPhkQ™¡ÑÊÉ›y õ >†‘+ƒ °ZÑ?<à­7ÿžG²¾Ö%·0qçý»Qï£õÙdEð(íQ9ê(] W€6´Z-Ö׺hõ$PZ±èõ‰ e³ÝBfSöqûÖMŽ÷)¦“8÷èjúDîKm§=εÎP˜Å<"!þs~‰¬R°s Ò£NûÈ+¼w8W¥¿×Qî’n¿áCywy´?ãØø PÖÒ^[ç…O}š­­M¹Á‡£b÷!÷ïÜeçÞǼIÏ1UQÖ• ‚¯ÞFý!wï¼Ïµ«O±µ±A¦:—.]âê•‹Üyï&Ué’µSê:H‹šÕFÇÌ_0¹w÷.÷ÞŸ~¿ŸÂËIÏ ©‹Q›ø¬¥4ý~ŸƒÃC£ •W8ш²´ZMÎmm0 (‹ç…²¬ ïÒݺÀ¥+×¹pá"ÜÜ”é蘇÷îpë½wÙy¸ƒ+=JǼˆDVð>=#ÅÏöeÅîîY«Ëµç^ ÑiaŒ¦Ñjñü Ïñàî=†ƒ>£Ñˆ °h£Éy êMcÄ;WCˆ–[*fîˆHL®»Šc/8Ïl2áöíÛìÑlµÞQΦL&c¦“Y öUO f_ÕªVµªU­jU«Zõ?äFüéŸþéÇ~ßÍ›7ç ýr}ùË_æ‹_üâjTýÄÖ’j XB°Œ†ÏŒÒ;#GQjœÔal’\V¥E‚Vø7Æ`2‹6¥£j\é ­A<ÞGP9Á-mQh¼  DˆÀmYúÇc$ÄÞÖf—f+†“y_ÒlÖÖÚTÕÓéEUEü^¯Ëht̬£Œe­×esc ÜŒY5FÛ5Î_ÜÀ—SÞ/ß§(‡¬µ;œÛÚ£É6[ø–]ÑÈU ÍMGØÔð±€eåÜBM[Ú‚Nn0A°šV:Ãê.Ág4š0˜Ta•Ü*† Šø¹ ±¶Øyìl+uƹ²4þdg}øÀÿ?|‰ÈÜæ'Zõ¨Ø‘‘çLÇÇÜúÞ|ç›_çÝwnppxC‰© L8>ØãÕ¿“ú+ÿŒgŸ¹ÊÆù&¡òå :oÔŒÑhŸ;woòÚë¯r÷Þ=†ƒ¾ŠV1åxÈý;·øîwßäáίqq»‰jeÉÃÀâ±h“Óh¶è´šäÆ`$f5h~6åpç¯}û›ü_ÿçWèuhñ´¬Fû+³aŸ÷oÝâ÷îÑUL}òR*'> ÜÇ•ná° ãISÖ°uî<½^/BRÒ¸[€Ì'T€* ¼G+×EÁÞýüÝÿø+þú/ÿ;o¾ý{ý1Î)¼6É3Û£TE_'ÉJôÒö¨èÑŸä<÷AR ¢" ˜øûªvr6É“{ÉîAGk„'ûP²9ð“¾/„¨ž%ÏYÛ:ÏÓÏ}ŠŸ}égé´Û1@B ’u Ž÷¹uãM¾ù×ÿûwo3#®jR,þ.^Q ûÜ{ï]¾ñ·ßà¥Ï<ÇZ·A£Ñ$xE% ¥,­N«×žâúõ+¼w÷!“G#œÝlòœ E}m;Q–ÀŠGÊ!Üâí7_@êÆ“)EÐ¥ Sòhg‡·¾÷o½ó.[íçèl´‰#¡Ž€ˆÁÍív›<ÏÑ*vˆY»Áæ¹mžyæ®\¹D·Õ/X ¸ŠÙdÈîÎCÞøû7Ùy´ÏtZâEpâ@G8?¸2Úðþ»ïò×þžíJc½‹Õ0d›.ré깆Y…¨£5¼I#k`µA\ĺr£±Jã4Mò¼µyî©Bb8‚«Ð:v4ŒG|ûïþ†éè€õÕlL5áfS¦ãƒþ!{û‡¸Ê¡T´¬€?t‰!¨€Ñž²š2ì÷ö©f³¸æ•gqö# ç¼tΣm†FágSƃýÃ#¦£1ÁE‹¬xþ©+A<Ì&eéðAüÓBÐ* Ñ„4)ålʱLÆcööÉ3Kf ø{TU±ÑQÅ.' ‘€T?™1O˜%.¼IÖ0:‚™j šHµdµ°s«»s">ÆðÎþÑUYDàµ6ƒ'¤ßK$åR‡Yì”&Ó‘ Ô‰ˆ‰°4Zkt×61™å ® ˜ 9Ø{È LY”ñ3UM‚Ïynæ^W‰lªf3†ý>»‡Çtº]šy‡V³Åö¹s¬môhµ,“IXÚùx­´š¦]E»ÃF£E§Õ¦ÙȘ•.ug,†Xø+‚÷žÉdBYÎ0Ö@H™ ÎGë?tâ^¬ÀúU­jU«ZÕªVµëõÕ¯~u®ˆÿ(õòË/óòË/óúë¯?öo_þò—ùÒ—¾´Q?Áu¢ÙZ@‚&8Ãd"Tx É£¨âÑÞ#!ûÖÄvî΃½´‰Áƒ:–)­P¼¯¨*…Öšà£Ú¬~O qÊ“ek#ð¯´M@|ÀXE»ciaŒÇZa8œáBô#VhD4ÅÌ3dF– ±Ö`l›†Ñ(0VÓlYz½6kô§EEQ”XÛ ÙÊ) G9›Z9N- ›Lhn4ðÕ:³É€ÃCTÃÓÜÈh÷º„¶¡4É­v†Íp!€gáBÂIýb±[·¸k„ O†#àÀZ+Ãm÷xð¨C§Ù`8­¨\ìQxYÞè+.u 4PêÌ•Ùbñ®üÕ˸]”F0Œ&ão¿ý·nÝâàð²t lZÇóú`ç!÷>âh8âé‹ D*¼ èè,ŽŽñþýÛܼs‡ãᄪrñÖ¡A|Éèè€Ýû÷Ø}ôˆâS— ÒYxJ´E06£Õl3×FjÞ—L‡Ü¿íùËq­ã¾5t<ï:8|Y2M9ê˜:CÏ‹ˆG‚g:PN§„àb(0!ÙÂ:£Ñê’eSÀO t<&fÔ½!)£U„Í'ã!Þ¿Ë믾Î{ïÝâàèˆ"€2Ž%O¥÷¢$%FexP:yj§ÿDJ):H|¥¿ >e.G9ZrÅPܤù]ÊVó€æÐÁ%ò±¡ ‘¨ìVÍŒs¸tå*ç.l‘[ÒÑŽs™ÏdxÄÃ;·¸ñÝ79<<¦¬<œ°ÇXF¼ ú»¼óö÷xøhŸëO]¤Óia’oyPÛê²uáW¯]esãíÐ@Pu$´¯ÞE‚ÊHIU yx÷&7o¼Åûwï2Ïp!i²k6ȃcöwðö»oóÙç/py³ÇžR„ý¿U–ÑhµÉ¬c_<"Q1ºµ½ÅÓO]ãüfffâ˜K9%•+Çìì2W”ÉÅDéHþâKwÐ?>ä½›ïò«¿ús ¢XÔ`šmº[çÙ¾x™n¯ÃÁ¨O‘T¯*xÄ9\¨*Èê{c›<ý̧ùùÏý"•ϸ÷à;G FSBécWDâ¹±ûpÊltHf âK¤šEõº¯Á1ÎÒM0’g$ÿ€½R©«H°L|Ád4bÜ<‰Ùš›ò";¼”.P: w4•wL†C&ƒQ²øPñ%ñÚ¬Gf$oT"ÈK\åñ!†+×÷{mH³Ë"JU_±ó®(˜Œ'±ó@EÒnVTI6`9KóæÉRƼóx/ˆUsðrޱ/‡È"€E€wã6Ç£ƒþãáï«¥S#ó·G6´&=dNL.ì±NÄ*„ÓRqÂÈKÎ$jAð/ì¿X²ûøª ÔaÅ蜬ÕáÜö9šy†Á¡¤À͆ úÇ ‡cªP?Ô|xy˜N¦ ‡c¦E…(Í-ªÌh7tÛ-²l@$vpt‰/£5¡( ŽŽŽ ÉæåÃjô¼/§ôM c0/2¿?.î/–F«Go}3>ƒ*R⪠G‡{‰T ñ¹BÎ çã-¶«‰”³‚£áˆ‹•áÐ6£ÙlÑ[kÓîä4† Á{\9ÃWÞ·ð(‚Éèmlqáâeúƒ»{û.àç§\-ÒÄÓ=RBÀW_Ra>>T"ÂTݰªU­jU«ZÕªVµëô5$O€ IDATø³?û³3ÿíµ×^ãsŸûÜü÷N[Ý,W§ÓáþèVÖ7?é@½H ð’ôçÖW¥f:JJEÃÉAcÉÈh ÉÈ3C–ghmÓ¢&)TTÑjeÑ ŒÕU…s%”F£}î‰þÞ–äy*ŠP ³BÈ3EžYPYz”GiÈ ¬o4h6!Ï ¬føà (”Ê“g¨P£Ã1ÖFà_éc£ZÕZE«³¹¹Áxì(Ë’ápÄtjY[ïPdÃþ„Ù¸ÏÚZƒv«I;ר<Öîb³«ˆ*£`±h_hšš¦U¨\ÓîeØwïßåýÝ}¦¥H£ðH?1>>àÑΣq‰[‹ Ÿ AƒR†v«EÃZ àE¢†øjÆl$ܦ6z”SòF£u<A$C5Û4l†Ê"@†7chMºxk@‰CÄ%-gFPy EÍ!ù¸®× -¢,^E€ Z‰*kë+†G{ܹ}“ïݸÁá`@%‚²9b ¡ Ñc^T"îÌB¯ìDÔ°V²3@ Zâ+^ÁEŸ‚ö"X/b63?$òr„ûDZ6u†×Ä’ºQÚdl¿Èù‹çi4£Ã–Ø+ ‰\šú<ºww0šB¥b51·¢ i»Ú3õÙyÿ.wv9>ÏúÆ:]á¯2L£ËÚ9áêµklm®c휀÷I68sÿÿ¤ü%*8”Lq³>÷ß{‹ÛïÞ`gg—ÂE@J© £4TS†ÙñoÝx‹Á¯~QÛˆŠdVдFg ZÝÖæ±{B"!Óh5ØÚÞä™kWØèæ4¬JÞÔ VSç9­Î›ç®Rª… 4ò64Þƒ«í.šm6ÏmRL†äx4‚ó§5:ïÐÚ8ÇÖ¥+\¸p݃)ÓiúËɈÉ`Àx4aV6HPx±ØlŸÿÜhw/ðܧ?Ë·^}•ï¼ñ]î?Øa:ž£™N§ÌªŠ"”…çp2Lc! )ã|´DTKÈ­N@‚'À?ò|ºƒ¥fduTÖ;?e:1Í@"ѵPyŸ"[E>PUŽ¢t¸#xïFLGc\á¯Óçj+%`´Â'+Žª*©œ‹ážY´¯ÑFGFE2.Á¢ â'¤||PT*ŽI·ÑI¯U$öO$ñÖ¤ƒ6èV—v§µ!å×,Pú?Žª&Å$’”ãá€aÿ˜Éhˆ¸d;VOjsu=¹ÆÖ`9<Ö¡¦âþêÔuÂGÌñTJ}´¯°¬ýˆ¬‰÷® 5É[ÖzŒT(Ñ~†+F¬q€õÑÀ^ ø">cMf…Ò†ÌZÚ­&½n›Üf¥Ç-u*ÔÂ)HÅ<¢(è÷™LƸªúÈ`s­¬/]ˆ–„JÇ|–4ž¡»±;®ÝYc}k;*Ò©à¨Ê)GGL'S‚€1&ÞŸp^s .xú£…wx.hrmèõÚt{M´ƒÁ…¯*&£‡{»l43lË¢ó[¯ò¬ó(cÐêÇ£Ó²¢J$Ym ¸°LJ9Iì2ÇZG{šlZR¨x¿ªU­jU«ZÕªV`ý¦¾úÕ¯2øÍßüM¾þõ¯óÆoð‡ø‡|ùË_æ•W^yÌêfÔÿ#ª çF¸±g\ 3çénôÈl†U9 ÝÄš&Æ4Ñ:O€Îò&|\ i°Ê¢DS:‡ó©<øàñ! !(’zÊ •¡(e.ä …±*µ9G ­h4F‹,3LfZM˜L<Áƒ6ŠÌ´@³Ù”ƒƒ#”v]º½h‡=@5fÎ¥Kç9>î3rçΈŸ}éy¶ÏmÓé´8Ø}ÄdR’éÁ6(ª‚fÞ¦³Þ¢Ñ´´ºEfr²FŽÏ4ºa1¹AL o¬×DJ/Öýe%žåÙä2Zb˜¤Õ¥`ÄG`Cƒ1èÒ:þ×û.XüÉY¶„ŠñxĽû˜U>)ŠO@=Ñ»{4âpoþ`ž7½Žà ýö8î(K$ ›„¨æSMCŽCÆSOYAÃFP6v—+”Ñ4ó¶öÔ]:ÀZi¬±øà âÓ¢?§ šV¯Çææ&ÝNc[ä6Íf ¼ó8Ze\»v§®]¦ÕhD<·Æ²¼Ô:ؤd?%={í{›ŽM–k² Ñ¥Bù‚áá;÷îópg—ié(}À…ñÑYô V6*©‰êà /$m{> ¸:…MF%}z$»AHùÑ¿ÑãWG hC@Ñë­³¶¶»–¾¯& %0ôÙßß;±9IGd(J‚U*‡„)ÅdÌΣކ3.VÐ0$›‘€Q­36¶¶é­u#Näk`2ÚIÌAP¥0JEOqRŽ)úûì?ºÇÑñ!Óª"‹¶ù‚HT ŒÕdÂÎÃf³Ù‰s;÷k¶†F«…µ&}/Xlfiµ[ôº]&Ú-«Tj±´Úk|êÓ/ñ¿ÿ¿K8¦(«JÚ xI׉"h6Y½ Ö{[h4Ö$8¼2å4;._¾Äí»Ì&TeÁð`ŸÃÝú‡}ÊR¨ x#§(¦±ÎsŸz‰KO=Ãç¿ð«<ÜÛçàð˜Ãýöïßçæ»ïðî{7¹sï{ûø9HæÄ`²òN¢eœÖ±Kl Ç= 0ýØSµ*FÓcF£#¦Ó¾òX2*µ|ݪ"ø¨| ¨Ó¢ ËWUTÓªücp.ª¶h±ˆ2m©ÉHI&W(“îÛ,MUˆaó6†#Ì|à›Ì7s:6Ýn‡N»C»Ýas3ª›—PÄ-*o"YÌi¶Z³Ù]€¸s[š¥–TÕõÎ BÏ Äd4$¸HòF¶åcÎ gNV'-Zdi¾¥8ó[º§/sgÏ_›7i4Z‰ÄpøbF10 ˜N&¸Ê/¼ê?Æ¡)ª’¢ŒÄNY)r™Õ4ò,v¢[@Õ ò$ :v“Å,¤2u§ÙG¸F\ð‘P !ÙÕÄ™fÎuÌO’"o¶èt×P6žŸ²r GSFãç=Š&m—ò,èØM2ê0ì2ZkÐhgdVÑlµh6›ÉòÇ D᪒ñà»wÞe£× Û¹D3o“C·×ãêS×ùÔg~†G{û<|´Ë½G Lú\Y¦©xÌ+É ‘”/EHfXj)”]P«DÙU­jU«ZÕªVµë85F'‚c—Aø/~ñ‹|ñ‹_äw~çwÇŒF#þàþà·ùì³ÏòÇüÇt»ÝÕ(ú)ªEó¶ ”ŒÇû¼öê+”.'¨&íÞ½ö§h7šäY«ˆ˜HË<=riI_«7uôÁPâ$‚ž>xln ®bZÎè4Ö­£âÉÇmŒKL¢_q37Ø:;K|T5iM£a9a¥2B3žD?|/>©ï`Võ’²ì²á fŽ1ͦB‰¢,,“±f2*9ØÑn7Ø:×Fë5T0“$#ˆA´Á4-YS¡›…V6†îƒ²e¢=AÝe±™«Ä昽:;Sˆ>Ô˜Œ¼©Ès‹ qÊ2õ.¾iAiA…ÑSY)Mìg«~OŸ÷'¨¨mø €K„"$¾>ÌôƒÀ‚¨A«É„½ý#&³ŠàëÁZ i@e -®ô¸²Jy)0PÀ;(¦3FÃãÑçJ”Î’-Ž¢ªÜUžñ´dZ UÄ"£Or N/)g%^AeQ ]yTfi5»loãg_ü9ž~î®=}™s7étšèZbˆ¡hƒHü>F[ºÝמ¹ÌÚF'ÙšD;©xŽAªè)Ï"¢pn±â‚^B@‚'@ ¡ >ª”“ÍÎñáa £KVñ÷kãqgî‚z2 E¼&ž´þjÉÑy ì51Z´GLRÚ×XRÂÏNbr OûÓ¿8ÿ÷SïÑiüϯUcÈ®=ßvôøÊL•^óãªÉ ››ëllö¢[‚רNóå`Ðçðø˜ãÑ„QÁê !èä3?C¡ÐÁ¤C(„ýýãi‰*À(º1 FY6·ÏÓéô–&dAyA{Áúh?T‡1æ™A£q¾b4p<8f8›1 ‚SD«£¥ë ±  A ÓÁ˜Ù¤Ä9ÁبÖ4Z Jƒ¨LR˜‚µ˜FƒF»Mwm›Ù¹å…1â¥-­µ6WÛ[\"Yœ8O»ÙÀ¹srÓñ¥Ú ÆÐh˜¹ÛHŽ5šFžÓëuiä£.T„r½»wxçwøÌgžg­¹MfLìëP©Ã¤Ñ`}­Ggû›—®1žL‡L~¹ÿØÛßcoŸ;ï¾Ç[·¸õÞ»àë.Ñ©SÃÆë!ºÂƒÔ%j1òŸòÁ7µÆ Uô°÷:T‚#k *âq“z2’@HçVkƒÖ:u 9\9C‰G«Ú K±¬ª?›¶ŠEѦ&CB†ˆ]ta-¤ËQì«4ØÝh²¹½É¥Kç¹rù<ëë]Z­<'Ë2ÚíÎÜϽ~Έû`m!ïÒlu°&ee¨dÑ3ïbPOÔ—C]㦽w„àb€-QuNt‘%²QbÞCMzÔóâgœ$ ÒŸçzqYìãbœ¨ h¿|DÔiB>íµ‘8Éò kÀ  ^Ê–ë%Än0%s¿þœìÒSÄü„€óŽÒ{*塚"WЬ‘ÓjµÐ5£dzÇàóøŒäƒïïñUóꌔôI2g†S‡'2Ÿ{”6`-bô¢;CEý<ÿ¡>yŽi6±Z”h­—®½À?ÿ—9ãI‰¯µøî’º:eÞ±‘æ*­±yNkmÍ­Mº ‹V*æ`¨ ¥²y7(¨ Üñwo¾M'7dÊsíêe¦‘cò&—[Ö.\åÒÓ#ž ™•3úGG }†ƒã#öv™ŒG±«ª¾†ˆa×Z›ù=]Ññ±L¨ °ÂñWµªU­jU«ZÕ ¬ÿÖüÁðó?ÿóü»÷ïØÙÙawwwº× þýÑñ{¿÷{ŒÇãPÿ°—zqã˜CwÇ”UNÞØä¼¤p˜Ž&SYRé'¨ÈOþóvnEô´GDðÎcrƒ1šÒUøàPÚÅwLKýKŃä4sÈL\{’…NÆÆÆÁ«d0¦*ÁÅ@?tTÌM¦<å, Þ²¾ahµsy£4®jS]†ã ‡Cº=ÃÚÆ&ÛÖp3› >.(œ¼ ˜œfXvÉkZÉÜBF¥0^>S«î€6˜LcÅÌÿÑÅúZ›N3£a53j¡¬Ê?9Î[Ë?N›óœ„‘ û³œqÔk9¥cGGYUŒ§%e%©-ij**˜,®óƒÌm\¤¼Â•Žª(qU‰„T|%µ"=æ-Az˜©ª …=B}NëÀD!:c9ñ"/¾ø"?÷ÒgùÅÏÿ"O?÷ ç/oÒÛl’g ãÊ 4NlüÉ¿^¶ ¥…à£}Q<7 ©%zÕ<>ÊBH¨™O¯h/¢‚LjG¼£œN™ŽÇ”e5Ï„ˆ_JŬFUk!k¸¢¿l$FNhõ¨€$;¨:ØöD†¤J*{@Eû«øç"Éww9WA´H輪›¥¹H-S,Û;} ±¥`ÿü:Z¼Nç<­iµ´Z T5@ ޳é„i1eê*¦ŽèµŽBjËŸzŸ$Z"űA³É¤¢ôQéëï­t"r ÍV—,o²°±H`½v›êc1^áD(Ê’YYRxO8„ u°fÌ "ñB =‘ãd•’’ÿ³<~ ¬ŒA‹±9Y£™T«Ñ¾Á#àUTÿ[‹ÒBžiPyÚ¹¥tç%ªEÑ‹ÈÍÊ]_lxVX›Ñh4i4Ûˆ2HŒr_òðÞ]^ýη8nƒ¶ýj6*w3Û ›uh´º¬­mà/V˜DWeÁ¨ßçÞ­÷¸yãoþýëÜxëmnß¾Ãþþ!³¢Š>Ôd 6‰‡9„iÒý3 §1Î7÷)°FcLd¡‚Š`ýÜ3}1г÷Ü®*ÎmZk´òˆŠÖk%)Ðùd°i=òeéþ¢T=?Øn ®üŒ®Ç¸± Zk[l]¹ÂÓÏ^ç©k¹t~ƒ^·‰µÌmô) Y#>ÎwƒÊ»±Ã…ûKyM5<žñl&!YÔę́ zˆ-'o„òxìãGiÉÚ…³ z>ª­Ì'~Î;5Ô–Aûl¬Ád&ŽÑh ÊCH„½¤s½Ü3 ¨‰!ubpJz–ðç“ /±kJ[‹É³yë ›þtàUíIáÝâÃBg{Ç/—ÖÑjQë%«³šÀJöLõ8±emº&b@²ÉZlœ»Boí<>¤o®T$‰–ÏaíåÄ}C¡u¼Ãü~©A6ka²&"&u¦ÄüšPT<¼ÇM£ Äü‹­ÍM:í6y–ÑZß¶zt6¶8ïJ ³é”áp@ÿèˆq¿ÏÃûwÙÛÝa48f0èSe 0ž“ÌËw¼“׈:û(®jU«ZÕªVµªU­ÀúOZ¯½öo¼ñ_øÂæ?[öž_…}þùç?°ÿõ_ÿu~ë·~kÔÿ–œz—Ôrì|.5 rÝ%”W¼1¨Ì²¬Jû 5Ò¼Í][¬öxqˆó`£{n ÅtŠnfØ<§‘+¢rJáÐx'àM¢"X™@³™±¹ÕEœìÇ;tlûV ï„IU1 £êOâb¥ÛmÑjÙ¹¿»29ÃñíÑéžyæ Á¦¡ œÎp¾¢(6L¦£æê\µ$E¥fõ‚Už¶,f9^†å÷!3šóÛ›lo®±7˜0.*<±Í9¨´ìL Ì‡uˆ×‹µú½%Qó3Õn‰,‘¤J–ÔªÆê±1«–…¢ã{–‚À†¨9yOÀÌq‚¨Œ¡«'u5à/Im§óí­m>÷K¿Ìÿüoþ ¿úÅ_áâù-”D9D—(*¬¬±hÈqNE¶(´MVž"Õßi α(N¡kJ’¥EÍ(¨ôïÞá«W–TU•ÆH ¥CGq¢’ùˆWKÁµÑ/û DÞXWXºr–í6"è&g{†üCΉòƒð‹/;Ï«Xx5%ºæKtRì?>*‘ä3/s ‡hG.‰#L–õ¸Å¢Á&v„¨ Ð!*{ ‹ãZ7ÈÒ>E²‹  f '(ôœÀÑKp$’RÒøhÊãÌeT4вÄHˆ€šƒÑ´D[Ñ }`ì3\4'OŸ»(“”ñˆÇè€Ñeð”É(ƒ¦ò‚Ñ%G»yí›ß`6«ÿäs?dzO_§Ûë`µNj^jKsŒÎP¹e0龕¯i¶Ö·xöé§ù¥_þ%vþK^õÛü§ÿøç|ão¾ÉýûQ•¦OC½ Ë™À÷ÇŸýX²¹’¹­—"*øƒªíiNCqK“°DÍáË8æä C[- çºuE×ó­ž“<̕4*oÒZÛäêõ§yés¿À³Ï?Íz·‘"º,yGU–TeIYVq³ZcŒEk‹«<® @™£ÕéÒnÙzR‹×SbÕ<ƒ:AnœÀïeѨNßyåI÷ –¢+ÂIøCŸ‰>àL~dy}úDY!Ë Ð2øž.ÇŸjh´é]ºÎKŸÿ<ÿËÿö¿ò ?÷Ö7×âÂ>F;ÄÍ¨Ê N*2Hv6‚Å‹Ž!}IÌ®tŒw5Ú`”Á`!ÄÐgcM$ÊP  ¢ Æ`Œ%3kL²;‹ ¼‰0Þ㪊²* !£&EB ”~ß v²Ô™«.QglìG0 ~É,Y\|ü9õIVáÉ1ûÉoQg#jA…xjGЋN‘ùÜMÝyqj7Ô‡VÉé=[`—òØM‚'r³ò¡'lù·NÞ7´&ÚÁxÐZ¨Ü„ñ`ÆÃ½>“i÷J\‹>$}k}ò³LRÌ !é0ñþí÷xt0¦ª<"ÑŠCª1£ý‡¼õê˜ÿ»¿ÏÛ¿øy~í_ü*_ø•_¡ÝlÒlfØL-°gj+£d–äSFˆS£0­6žºÎº]¶¶ÎqõòUþóüϼ}ëŬLWÖÉ9(,Í÷ÝeùX~´£’¤TgüìgÎ3ˆ„e 8í;e‹-‹â=¸ÑjqñÒ%žáž{ö:Ýv“,Ý¿Êј½Ý]=zÄîÞ.< ,Êè5î}›ÑL‰¦wþ Ÿý…ÂK/}švkñ•d™{âwS‹kþÄ÷ ©«E–΋zü¸Ë¯ÇŽÔ?à4v:`Vä“ß'‰DXÝM!*C‹òs \ÕÄ·ú þ– ú£oS>dÌÏ­Ôêl•°ôþ¨æ¯B…ŠÉ4T!,ì{`~MÈ©ƒ¦ãö$øh!¨bøº&D›1U‹ ä:Vƒ÷¸Ù„þ£nÌ Þ{÷››\¾|™ëןââ…‹t:íh'&“ì1dyÆÆæ­Vƒ‹ÏóìsÏñ½ï¾ÉÛo½Íîî!„/¢~ Ÿ÷VµªU­jU«ZÕOrýT‚õ;;;sk›eýYõòË/ŸP×t»]~ÿ÷ŸßþíßæÖ­[üÛûoù­ßú­Õˆù)/Yj‰¢·rUiBh]´Ù¤*[”eƒÜe1˜xÀWa ‚QŠLk´‰Æ¬±£q:àÊ)†V»K!.@½à%PºVÚ’‘g›üw'Ó Y–“ç†Î9Žô€ÑpFUx$èd¡>*Ħ“Šý½>eYqîÜëëZ­6A“i›~ÊÁÞ˜ÝG}:í6½nEN9+pÞQ•š²Ô4u–ô'AßÝÙOXžœ‹ëÓÔúZ¶neY¥eŒ¢e×.c\8†Ó‚÷w÷£=OÐsU«:u"Îì—qˆ“ë|yÔ¨Upso^ùAJ`cøqð¨ögÑ’ÿ°ÔÄŒföðí’5Щm~(\©4äm¶Ÿz–þ¯ƒŸyégØ>·Af5Ö€ ‚® ¦Ã}vvîóÆ[ïqëÞ#GŒ¢rD7 oÑ]ïñ‹¿ôOø¹—>ÍÅóÛqßutÆ–º³C-lR˜·¾§N’ôÒ)€Î(… ayI- 2Ç2HÎÛáûƒŠÉçîtÆÂÜÚæƒ7õø¸>0©¾ßý\Œ}¥NAŠ…eÅ|W“<]é =Â{¾† -ˆÑË_Eè×H„ç8aò»Q‹ãšÎ¿V*Ž0«çÖ5KRcµ<¤€kcÑDKš?jêc¬$¬´TLGCîÞºÍúó¿äö{ FC|( "Hˆêìű^Ú¢6ÔÕZÇm–Ó ƒãCv>àx8JóWmXUÜ”Q¿âïMìqûÆ ¾ñ×_çê•+\¿þ—.]`{{“­í-òFTì&Ð:Ù¡Ú¢­`mFžgX£yñ¥Ÿ!Ì®døgÿ÷2s±?ì„ûyêŒêûPD³ds#sGª¹æ'ÁúÇm?ž´½…CI'C 0][ßäò•«\½z…õµ6¹Q„bJÿð€[ïÞàöí[ìîî2™Lé÷qÎÏçõ@ÌýQ(1Œ*¸þìs„àCB©ÇÆ™š‹äOZfÍã)T4ØšGo.OäµãÒ:§n¡§;NO"'µüŸèþÇIµúcçb©AéÉÂBz^Û¹ÕÝ1’‚ç„£,ô#À|î‰]_óÐÙ”³ y¿Ÿùý a…œ¼o¤ÔyÏPUîíòö›ßc2)b6Lˆ–>±efiœ¨Å$ºÜÅ!éš sR$0 9Øß¥r>íGX 6Ö„ÊU¸þ"ñ O·n²¶¹E§×¥ÛíÐ[ëqáüyÖ{=ZÍ&"Bf Vm,y³í#ƒàœãððïâ˜Õz)WGø÷ÍU­jU«ZÕªVµªO^?u`ý+¯¼Â믿>Ößxã ^ýõùï<ÿüóó?¿þúë'ÀýåúÒ—¾ÄW¾ò †Ô®ê§·dI™åƒÞ×’<¸Å ×ie IDATTt¡‰óM*—Q9ƒõ ô©Qø|ÿÝ(â¢F͆¢ÓÉÑ™fZ•H㥃F–§m3ún 86(£Qš¨¼Ô™U4[–­íJ@+Ãp0¡*%bLÉc<ÓïãqÉt:#8‡xaëÜyžÓë­1›Í ûì=êsþÜ&kÝ&­v# Hlö^ðŒ]˜)uÊÙ÷Œeâ‰\V5_ü×ÞÝ uÒCv.ÚKá`)DöüF—iqŽþpL<¡ c\pHò˜Kçæ´Í€þ 5UÝmçªùgÏI–½ÊÖu'Cþ úJ-´,XlÿqA«œ 6Ÿ †$:Ìf4Ö7¸òìs|þ—‘­Æ*¢^]°TL‡¼ÿÎ[|ë[ßäÏÿ꛼~ã6;»Ç †`Z˜Ö:Û—/‘å9O?u…Ëç·û¥ãõiŒ9iu$Kö~Vàja~¾•RsP·öÅ?óÔêÎ%äPNAóàÁèrB]&2¾¤Â?´¨% þ¤ïü)¯‹%€çÐ# JæÇ`9Œ—¸WƒóÔþÜËZyµÜŽIØTU•üþª­µäyNžeI]NômŸ_€jî+^+™%e`4š–ÌÆ9Ò(0H:_ž€£, \å†q”w&bQ'·…Ã2<9ï.©Ý§çó‡F+Õ˜Ÿ¤‚Ç9GY–E­ÌÒw°FƒW08ÜåÕ¿}…oç v(ƒK“–ûåŸÉâÌ1J8‡x&‘T&‹žìਃ/‹IÅw¸û¯~ûÛ\¾|…gžy–«W®pîÜW¯]ess“µ^Íuº½½Í :½MÃh$qÁº›ë¼ðéç¨fCÞxýUÆ£‚ýþ¬†—¬Îeîãþñæ)9í¸þ· >‘µú€¿=ùj:¯ Ú6ØÜ>Ï…‹—ØÞÚ 7 #Žñ°Ï½Û·ùûï¼Æý÷ ‡(¥çcN¥ðàºkͧN¡Ž{Ò#]%ˆ%È=B£éž¥?¯ÿ'¢/éöß/uÊÉc÷÷é’Ç·¢Îž§>.@¿Œ±ÈiUgìÙI¾!ÞÈB8ïq)x\´FY‹±k-Fk¼ _N >ÈîOë…õФûŒ÷±s&ÞojÒ}ɆNäñ|€ÕE 8>O¾\‰TU –hù檂ý^ûÎßqp0ŸUÜ’Ñ2XÏüYq±ùp‚åQsÖçÔ’¥P\­R–NA(½ãp2âð¡ƒ,#o6ét»¬¯¯qáÂ676X[[çܹólooÑn·Ð:'kX._½FðŽA¿Ïd:ŒU­jU«ZÕªVµë²ëßÿûÿ˜R˜+ä!*ç/\¸0™ýÚ×¾v¦jþ7~ã7æ`ý_üÅ_¬¼êºáúˆ¡H ¨J´Î€ ¬Åš6Ê6)½Bt†Méë<Êê¹燥*Æ€T:L9¿Öã©ëÀÕîÓIÉ zÝu²< 󴀫$ R¡”AÁf†L2)½TX­hwrŒZ§‘åm8>1›¹E§Ä°N´E‚p|4Áû@å*¶Î­Ñí¬S•WÁÑá˜ã£ç¶»l¬7id9„ZÁA¢ÏrÜ—¿»®ü9F:—X--leÍÉZ+[ëÍùàb¨¨±Ðk*.l´¸~å<GŒ] ôcDj€CN€ÉË ý²ú?ÈÉßY&r¼wL¦c¼jTWUÉŠ`z2dîG8’@æ@ýò1>Ìú4ö'K±P;£$k­†”Ø›PÓlqîòež}áY®?{‰F´8Ä{œxl(Ù{p—oþõ_ñµ¯~ïÜ|ÈîÈáUŽÅ‚hBPH%x¯0&'Ëò°¹À2”Òd6Ãh³ .ä´³±,àäïÕ YRb/G°†Pç0Ș^7[ÈI‚éI6Î!† úåôfÙåaÞôD°F/lä䦗·N`r°âvŸŒ3¿ R÷Ba02ñþ¤Í‰RŠv«Íúú:ëkä9”e$IçßKÉâX²PZ£9·µF§Õˆt¤Âù‚Áñ1ÓÉdþ=çÀärÓÁR¯œ ”–Ü<Yâ}´%3ß'$6ÿת¢˜L ãÜö’R77¬b­•³ÞÐä”h©Ð:ÚDvôô¹ªDYƒÊEU•|ù-ÊfhH˜Ô1J¥-Vœrï™G¼ûÖ÷xïÆ ¡˜MØØÜäÊå+<÷Ì3|ú…ç¹zýiž}ñgyêÓŸ¦Ñn³e›ÑåÝ´ÖØLÓYorý©‹¼ôâó¼ÿ`—ƒþƒ™«jƒÄ*¨ú‚ý±~RПàI¿ :ö;l% ±Ûn‘©€+¦ì?zÈ»o¿Å½»w©ÊŠL™È»°Û㊱Êf(Ñéõh¶šs;’Òªž»âõ§Q©K¥&­ÒKb2­sŽ¥4ÖBP?¤#¨ž¨ˆÿÀR'sC>Ò[ä Ng* øªd62+Jrkie†¬Ñ¤ÑjÓn·Èsì*b'æI?÷‚¡µÖZ¬5ñ“$ª¼§ÓYÌ(ð^4J™'6¥¾¡ÁP|úàÙ+Ý fcüdŒ/ T·…_|âPâQsc”ÒË4O¾…y·Þ×Éšn)=$ C%hï'’, !$Îà('cÊÉ„£Ý]n¿ó. hwz¼ð⋼øâ‹<ýÌ3lmo£Ä±¶aÁWîíñàÁEQ|f¡NÜýV6ö«ZÕªVµªU­ê'oÝñcX7oÞœðu}ö³Ÿ¢2þ•W^™ÿ|Ð?íM¿ ê/Ó~õ«_]˜,Ðý¼U754ÍvN«Ó oZ‚r”~ƬšRúcÔIEÛ®)= G3Wl­5¹z¡Ë¥Í&W¶[vËíÂVEתXo?ö!}\kYÒeËWå·+¦<¾²þñe*4› ¬®-Qo@¤@9‹D#ÑØ"%ë÷é¶8;8¡Hµgä:55Éu%#V/l³¼r$®ã,˜Â`t1^xÔZSè·ѣѦðB¥ñ/k Ƙ²²±(¿j´1˜quea(´¥0‰cŒÆ:3K¿Ò¹ÄX¸á¼ÁáG½Rx¶“9a?æœ>Ê'öã¼R˜Yžg?n¨$2þÙqò)gggtÚgÄá£Zl,--qacf3$ Rʨ²• êP[D-­²½µÉÚrB=ñ…æVh„ÔÊ)ËÁÁ.g­3Â@MLµXg°¶¬žušÂ9Œ±å80e2ÎþJ׎O³°imHÓ”Á`€’%)1K> )ÅB-f¥ÑL$Ià«îE˜øÊúG°.ÓŽ gN$…c,Âå9¦0hí¼w¹”P2î+Ð:ÇZoª¬Ó!Ng˜b„ÍGH ƒn‹{w?௽Âÿù·Ëÿöÿ#ÿóøüÅÿò¿òÿõ5ì·d+”ƒ• Š–c¶·V©×CŒÍ™ÉÒNÌ|Ý£¬›ƒZFŸ?ÿE”Ôˆ“%%Vçäé€ÎÙ Gû¤YŠ6Ú'òœyìœt”ÉDk ÊuD9ýÙ¸[ÆNç·›ˆÚÒ”yœ;Ï™wsà&–_õ#f<¼¥#ÏS†ƒ>Zƒ6’´$õ¢0 ”ëö§µ´õb}Ç$IBÅÄQŒsŽ,ËÈÒÌ" ‰,_Uvycv9î ’祄(}:~ÇÑž³Ž,2èwÀj¤sDaÀB=f¡™(‚@ý’swÜ "QR0í¥’Ó.Åq—s˜<Ãd)V寋˜k³ó-MSÞ¿õ?øáùÙ[ïptÚ!/×¾0ŽÙظÀÊê2q›Ëó˜Ç<æ1yÌcÿòñ;UYçΙ¯›››Ϋ¯¾ÊK/½x±þoþæoϵï÷û­šÿú׿>ó_~ùe¾óïÌGÍ¿†®„‘Zo8YP…ë1,ÂÔ I@Æ8 ¼½¡ûØ¢å©åVA[–ë!Vb–‹a¥)Ø\«á:7²þ‘Açè²ý8ˆ#_½„ÀZÐÚ‘åd™0”BJÏ#Ö¶ T‚¸&Y°‰ÇA8kŠB—b_@ÆHápÆ‘Ž íÖ)C‚@Q¯7 »ôºggC67, MA di.hQjÌ«wØŠx럿oûIÕ§c¦¸”xñ¬Ä6híTëè²rZ(–Ë‹ $§D·÷‘¨Ši•®~ôì”H!&v‡Xk(ò Sè²ÊzŒl(«×ÿ,_<Îèïãa1nW¯Ö'ÞˆógѹÀ!<~T?I"š„(i¼ƒŘ‚"ËHƒ^†.œOH‰1“Ûã<Â…%žzæ³\ܹD£^÷˜[‰Ç HÏM÷UñÒ;eÖùõR"e‰&%ÅN¿'KœŽ(M@gˆÎ¿D%ð„ ¦U–AE¡-JÑeÌ‹©`fÄ·ªÈδƒb:¶Ý¬79UnÆÿÑUÊô«È¤é·+(˜±œSùŒq2GU>´ê™àŒÁÇG‡ìíÐëÃRDÅzB†!KKËloo³½µÉ°8#3Æ›–>büª@D$5¶.=Áöæ:(DXƒUà0(Q`tŸaçŒÝw8kyÓðqǃu~ý(×[îóäÿãŸxTAF–Y«ÑG™OV¸˜Šs•ús/$yžÓnw88ÝŽ¢° OÏ8ì éŽ KËÔ—XC¤$R BAK–—j$QP&í¸Ýj"²Ž‘(Þ>Yý'ÿ¤Õñ<7åܵÀÖiNUÆ3­«ž†ÇÔäžWEi4+ ŸD‘Â!l-2²tÄ0MÆ¥7½·ÈIåöøZUúº(é»V×h6š¾pÀú$6n‰6¥×Œ™sUßMöÒU׃ñ{Yç*Ô¿¾¯__¾F|\²¤ÚáSMRWæ¹ÓX="èö†Ô“DH"’¸A³¹@£‘øŽ»É±3wznfŸB)T½ÎâÒFÃ'W¤7.ïútû=бñóÌü®Ž*QyMDz8‡áùçÝ<Œc4ìÓná¶W#R’f£ÆÆ…Úg]Š|T~Ê« H!Ö‘ç×47™cNʲ@CLpA‘ÇÞYNçˆ5†Q·Çû„Iƒ¥õ ÔëO)¿^.¯¬Ðl6 £ˆÑ(ŸéWÔÏcó˜Ç<æ1¹XÿkŒƒƒƒGÄúëׯOþýúë¯ODù­­-žx≠ç­·ÞšùÕx饗h4 kH;ß]Á^(‡ È”ÌtéNˆDJT_õ^A„±EidêEQ1)õ Øi¡p)4qèh6BuI¨r ="’97±A†9˽–±X]P”ÜNNÑÖ ´¶ä¹A) ýM ¼¹ªq–@XT ¨ÕÌb‚Ñç ÙÐâœÁ:‡ I’€38g0Z3d„Ñ€F£F†Äµ…ÎéusºÝŒå/ä )À0AK#>â‘û܃þGùÿÍT»ê¯Z_Ý®yžc¬$B¥QL…,.4H’¥ÆwS/‚YÙ·bOEˆ²úXN.ãÏwÆ`²[8£'‚vU£ž `~ÓOxîñòÂTœxœ¼^ý·Ä“'}Ì?w³!çÏñ#ª¨0+Çï ” EY*.qxŠƒ¿Ö Œ•šÿ©\Æ1«<÷ÜslmnÄRºŠ¯p¨R„›‰úÓm‘“Êb_µX¾§"ìËI%cÅ_Ñ8²ÝcÍ]åœTPIUJLy@†¡÷|pr2Ÿª"û´H·"¸9/&Zç›u^:·Q¿šP©‚fdÆó`7Y»ÎóìÁ͈ý^¬g"*RõH¨àƒlžÓ:=eïˆÃṏ́Z¬Êjj —–ØÙ¹Äõ78îYSØòoW˜øB‚ŠXZÙàɧžáÒæõ0Äiƒ.™õBäi›ƒ½»<¸ŸV»ƒ©$*Ƹäñö»É>ø¯–*é&ây¡qÂe®š4N¿N5JQ9½V‹ý½=:”ü‚¥Œ¯ )#õW¯ì°¹±Âƒã3ÚyÖîܤôÇgqq‘gŸû,k y6Ĥ#ĨK>Ònwé§»d΋õA X\Yemm‰Å…:8f­¹H¤£Á€îñpï!½AÖ¦Êr’ÄÑÎá„¢ÈsNŽùáÌ¿û÷Â3Ÿ{š%‚W® R*Â'@]e¨væˆ_ }ŽZ?cFι_âߪ®¨®Êlô ÄÝ#ëš›üõÇhüYT]eWËnW1·Æ•&žÖws•×%?Ÿ=&‹R°¬&–¾3¥¹¼ÌÆæ‹‹‹w3“ˆ+“°“„ž¨ì]KR¹VΗ~Ô˜¯ õâÑ+Îù³4MÛGŽâÌüùgÈõÂUÜã·HÌhÆ“_œbtÆÛ«ÁHt–ÒîôX[]!dD$,--°¸Ð Õ:ÅëñFÓ‘ÆÔebüTŠÚB“¥¥eêµJ ¬1dYF0 7è{ƒÕ1ŒÇ_Wm%a;ý5…ôëI™Œ—|K:Òë´=P”Š8IX__go÷„^7%7¥ï…àã·¡\U×"¿˜F)EÕ¬½Ü§ ð†°QRCJ‰Ñšt4"KGm?bËÏm‡1¤Ãín‡Óv›\L¤¥¤V«–ÞUŒßãðùó˜Ç<æ1yÌcs±þׇ‡‡ÓØ—^ziÆ$öµ×^›ˆíUÙÛ·o?V¬øÆ7¾1©ÂŸ‹õÿzbŒ¶R“›>Ùða‘Ò0«,­Ö¢%‚( (rŽ0½˜ñ÷÷ãz+)AQ,‘ÊçCÒQ›Ù\Y'ª5 Õ;Ùdè\c܈˜:2|µºc (,Bj<¢X–Õº¾ Ï•"º $õFŒ³%,=i°Î`¬$JjÍL.,ÚX´Öt{,š……–W× zôG–‡û-VjH%‰”hÔF#JŽü¯O±ž¸„bŒe4Jé÷‡diŠÅJIˆB¢P1õFz½N’ÔHÓŒ4K=W|ÆÌÖ‹b,Ö;é ³–’¥ æp6Ç#Ð#°z¢`Ú‘Ú«1Q·ì°(p§v*ˆ;#Œ |E9¿ÚÄzüÒì“kUÅssåŒ/7‘T8a°¢"k 16lQ`Ò=ƒA*¥òÌkD5¢¤N܈QÅaŒÇà” ž¥ÅÏ<}ÏîI¶×‰äTÔvŒóË”‰‹ ƒÃTªÊ™¹Oó+Æ/[©dŸåÔ?~²ÛåЦÔâDz› åÑ/ Ïí6brÞ¤-·M ϲcÓHÿ»þ {3ì)¶ÈNñG•Î ;Æ_”çÈrÞàQ2CÆ;ïwpNÄs3ÄS2Œõ,—ØXH‡ Ú-öw÷¸sû.ë‹×©Guop bqeO?Ãï}ñK<8pÚIé{„•1ï1_¢VgóÚ¾òå?àÆµË¬4"„ñh£(i Snßz‡>Øå¬5À¹uSÁ_*ÏpGNÄu'ðÕùÊ•CÙ}DÓ„«Ì%KyÜñ„,X•á/fŽ«p ”ÀÃö{»»œuíl²°¨¼Pï@ K\_äÙϽÀÏÞ¾ÉîiŸnÞâl¨Ñ“¬hù7„àòµ«üÿÓÿȳÏ>ƒRÐïœÑ=>ÀõO9xpŸŸ¿ý.OZœv‡XÉâ*O=ó9¾ð…ÏòÔ“W¹xaƒí•U.¬¬Ðë´ø»¿{™ÿýÿø[vwwIÓŒDЇ»É[m¢(àPN ’„0¬ÓX\å™ç_àé«WX­7¹Cª€Üd¸““ÄÂX_sÎ?Èû}º­ÙHÓh^Ô·€“ˆP°ta‹§_ø<³zí*ûÇg°²¼Í•+×øÌgžâ³Ÿ{’$Ñ´Žöp„¬®­Qkå<êFÄ„ñ"7ž~–¯üáW‘áÏȄ䬛sÒr˜rÀ¹ ¿ÚËÜ~~™ƒ1e6—øŠa¯"Ø;WV¨†ÃÃÁЩ’5©O޶.]æ _úú™åÎ^‡Þ@c³‚¼uÄ;#ríp¹õú£ðì|'=ÞÜâ“"VŠGÑH“m{1ÈòåO")+`ÇHŽI1bÅýsJ]öI€J)³T’BüĸÛÂ:\6ätï?ûɹñ™ëÔ"®^\§©…PDABcikO~†?²1¥ \½þ'gmÒÔ TÂÂâ*k›[<ûùÏñÌçžãÒæ¡R8í q./Øûð>?ûÑ[üèwhuS ^ ÁÕ2{¾ðçé»(f#(ÅÞÊuâœb;ín©&Ϧ0L„éRw’eCNrów¸zy‹ÕÕE.¬5}2F*ÂHR[ÛáùßÿC‚ÚÍÅUn}p—£öEPo²¸ºÊ _ü=¾òÒW¸°¹†t†X:B§Ðª`ï,eÿð!Þ¿‹Ö9ÏÚÑYN¿×'Ï IRgcchKxò©Ïðï¾ö'¬_Øäöí;ìíí“çÎc©„@ I­±@sq…­‹WøÊW^â¹'¯²\‹PÖ"„A›‚A¯ÏÞþ!w?¼G«ÓÅZpÒVª`«©Šû¸5°b¦;³¶‰i=sUDþ$ çW$o”=›X®jì3>¢Â•Þ+1ƒ¡ç“Me©°À-M6FÚ”9µˆ…å¶w.Òéuéöûä…E‰ÀcHð†Ôa­N³¹ÄÕ«OpãÆSlon§CºzD£“,ÔQ2 Žõ&ÍFƒAÖÅ9Ã!¥À”º¦_‘„0á&®3‡Ç¬ùnæ¾Æ—¦{¡ß˜¢4J â¨ÎÒâ*ËË+ô²SÌ$±+|ÂLù{Ÿ\öx¾*–çSÞº«sß!&ów¼®Opmb:…ðFÍ:Ïh±¿·Ëêrxc™$ŽY\]eçòeºÝ>™»K»3`”h­Ê‹¾Îúqž4¬¬^àòÕ«\¾x‘µ¥%j=`Ôër´ÀÉÉi®1&,«ÄBx\”ÏÁ–ˆ6ç²R ¤bÚÀðKÞ€Œm™¤=”ªžš"ÒnóÁÛÄ:"¼@5©/¯sõú L᱄'íiî(´¯þ—RΈõ ¬¬¬réÊU>ó™gÙ¸°Jº-Içì˜@tœâP8!£:Í¥Uš¡`)‰]A1èKÁY«E¯?ÀbË“ð ¥2@*…TËkklnn²²¸H…(eȆ9G''ô²¢˜ló¯zû:yÌcó˜Ç<æ1ë?&ªú;wîL*à¿þõ¯óWõWÑï÷'ˆ€çŸ~"Ôâæ›ßüæD¬ùå—ùö·¿=ùŒyüNÉõØhí… A(©7k¬­/³¹¹ÁÒâ2IØ@¹áe=gÊÖÚR“”’( 1Æ”­·k Æ(¬¯÷F;G Ž#'…!,ËÍ]kÐ/ýQJP§ *ˆTX6 ÛïáÈ 3IÈ]¢&E‹c,Ú¢(`q¥,™II³ˈzÍP‹cÂ`Y’Z@«5`0ÈÉsÿ@†G»Óg¡¡X¨E,DñŒî>ÕqþøŸU ´ÊêfJJAR>h*(uH…UkÚøVqH!?Æ,ÌMõÄJ•¥(«îqå Ê\‘QŒ(áÙÁÖ™Y¦éou€NÑ1tC>âü*#´TÄûs½ïN<*nˆ)Håîþo¢Â!#D%á2»=ò?Çn·ËÞÞ“\]GÕBψ§$Éâ;ן&j.°óÔ3œµ;h#X^¸À•.¬6‰Ãý÷øùÍ]—øì‹ŸçBÜ ðÈQC„‚ëϾÀ× \ؾH¯ßçwïñ£7?¤“Û‰Ðjˤ›(Qrlø%šBˆÇ­Òœ zí³6éÐR« Óq‡D «¶xþó+vØ=è2jÒn—Ý÷ÞæÿD»Ÿã ëǶ³>±"+B“«òüEY%|nsK®ý¸¹aœ×‹ó>CQ)±œœ@1Ùy1>qe×ÅyqÌ ]bZ%;f’[yÊàôˆ;·nòÚ«¯Ðh&Ԣϭ/¡H¥PAÆÒ:Ï~v‰•õmžyîyŽOÏ 2‚ fyyíK—غ¼ÍâÒ¢ß'ç«K­Í(²‚ÖÑ?þÑ›¼òÊÏøð~›Q)Ô;TÅîq,½ÚŠlw~¨—‰¦ñ18-¯¢;„Eû¨Ô5Á‚LÊU'r²Pc£ðŒQçˆ÷n¾Åöö:këKÔ›Oc#ïMâ„" l_}Šæâ ÛÛ;ÜúàÇí¹“„õË.ðôsÏréÊ%%, ‹ÓÃ~—÷o½ÏOÞ|‹·ß½…±Æ¯—¶`ØïpÿÞ]Þ»ù.W¯ì°±ºB Ê™Ƭ¬mò•¯þ.]y‚‡÷Øß;`8ÌÑÚ#Y¬4šM––VÙÚºÄóÏ?O³£”7Lw¦ 9<8äïÜâÝ÷pÖîcphkp28çe2ß?Y›®oN<*1>®rzbý Øxݯ.Y3ëâxTÄyáf—aŒ_™µ$>ÿb’µôÚ-:­3k«¸$DªåÕu®\»Æ(ËØ?8¤×‚ðë ˆ’„…µu.n_äúÕkl¬­ãŠ!{»{„qÌöö&ËÍ&REDµ& Ëk¬mn3ÐÝ ¬éÏ¡cä–aïôIWï1ßÞâòÜ'W7ÈÍÓ!¦Ðà¤ß†ú"k›;ìtd" 7ÆA8Ž2ú™!Ó†*6Ìý²B=L“§®š´|¼Á##BÌtÅ <:È•ÅzÔc÷>k«M–j 1Q­ÉÚæŸq «<<äø´Å`0B¨`2VT²¶µÍÅ+\½òëëk,4(—Òï 9ÜÛã`ÿV»Cšh'±B•ùSQÞû0ì•ó]•ªôeò\qçéËû'¨Zº:Qõp°!°&cØkqûö-–WWH5ÖVâ&›;WPB€TÄŽéõSF£Œ<Ï'ÆÚJ)â8fkk‹í‹;\¼t™­­-¢P¢ó£Ñˆ““SFƒ!ÖèI¢ÔK§Óãî½]ê&ñrƒZ­Áæö:KiÔëpxxL/ËIµ!´&ˆ8!cÂ0$©ÕØÙ¹ÄW®°¼Ð$ Îæt{]îï> ÓëRè¢zÇ3×êç1yÌcó˜Ç\¬ÿMÄ·¾õ-¾÷½ï³ðßøÆ7&|úÃÃÃÇ íßûÞ÷øÞ÷¾Çõë×¹qãßøÆ7&Õ÷7nÜxDØÿÎw¾3A¿sj½ÃXƒ6­5J @KKK\¾|™ÍÍMÂpiCÈEE]ö‚Øã¤Ÿ1Ma1ÖkÍ`$ŽF¾Ú/”4×dh‰bÁjÓÎrzƒ€Ñ0¥ÈR¢¸N^ÆsÕ˶s]XÒòaG‘’(áp c Œá¨Õ"‚`4Ñîõ0&ÅhM܈ÙXoRk¬­-p|ÔâààŒÓÓ>ynqÖsI['Kõ KMÔ¢ðfµ•Ê´Oõ°#=Rãn[•A&޽©qMð#A „ °`´&Ëüƒ¢Ñ¦"ºŠÇþiy^ÈqãªbëE@ë¬%+2F£Á”®\>ÄÐú·’Re"A:;)¦þ²jöõ‘“*Õ±t‰“Fzá 娷[ÊòA„³(4jEQ £Î•ÂÖÔPrLoµÎxïý÷yãG?eqñHjµH”5} eHÜ\f»ÖäÂÕ $R(¤„:‡¬CïxŸ¿ñ ÷Æm•+ÔÖwHš Å„2À â[O4¸pé þø¿û:íûwùOÿ÷ÿÃÁî ½/Ö[!gD?¯|OÀ˜ûü©ÎŽk Ø´OŽ8Ø=¦sbXº@86tT¨ &õú¶¯ò"¡èóÆ?Öxë§o¢‚•DØŒtÉ$‰àðÕ–ÒJ”%Ö@"Î%j„3^ÌÅ–¢b e)«i­0Øâ*FÑ®GÂI”ó&®Ê¹Y½ðÂòäŽ1@²ÌÚ›öé=ä¾ÿŸ ¤¦ –¾øEd#ÆÏ··FQ[¨s­±Èå«Ox±‡Ò„W…È@ ÕdY¡!2Ã>G÷øÉëoðýçïóOo¼Mê"îQȉç © =e[÷× p Kˆ¡ï̘ ’ÎÍ á&¼oéŒ?.LÁ,h¸ÔXe¡ìzB(ßÝ ÎfÐrçƒ7‰Þtqeý·–I‚¶@(c×/òÂúÏ}þ˾ö¹dïgÖún «ÑyFH@3è¶Ù»¿Ë?ø ?ýÙû<ØïçrœÓ䩿Á½ÛüøG?b}mƒ «¹¸qF-@Pè• YݼÄç>o)rãͼ¥Ä:ß%–$>©Pä­5¡òÇĘМœœòîÍ÷yõõŸpëÃí)Szç!U Æ¿ZŒû% Êu¯òn’Þ”åÏgzŽJ쇜€¼ìäºPMç¸s ȱ焛ˆËvš@ÅNæßxM'Çr¨Äq|tÈþÞCÖV— 76hÔb—VØqWˆk5VîszÚ¢(4"Šˆ……E¶¶v¸ry›¥zÄ }ÆÛ7oróÖ.k;,/¬úã)!¬7YÚÜæêSÏ48mµèö{œž•г¸!~¹1á Xãï|LŽõéŸ0ì WIL²°ÎÆeƒ jÄkÛä:GØ‚|Ôgoo}|†.´7Ø­T¹êm(×#¾ê¼ìhŸ7Óñàb2Öª^r†¡/Ñ/ —÷9ØýF#d©_ºˆJ"’…u.Õ©/m°þà{{œµ:ä…FQ’P«×عt…Í­mVWÖˆƒJ ;äðàˆ_üâv÷öéF¥Áu¹¬¬’õËëýd¼Ç/s¬|Nvœäw•Ùá¥&~2¢ütkRÒAÁþ®ewkƒÕµe– %Is™‹×bê‹k,¯?ô&Ö½>£Ñm aP¯×Y[[cçÒ%VÖÖ¨ÕêÎhÝ>ûû‡Ü¾ó!nml¹?§ §Ç'üâo³¼¼B#¹D¼Ö–¸öô縰u‰“ã#ŽŽŽhõzt‡)ƒÂ ¢˜(Љ¢ˆZ-auu•­­mV–W‰£ˆ,ïÓïµx¸÷ÛwîÐô1Îùîй*?yÌcó˜Ç<æbýo.ªUô¯¿þúäûU>ý'Å;w¸s篽öög61žýæ7¿9ë_~ùå¹Xÿ»¬Ù—F^‡’Z³¸¸ÀòÊ Aà§µÖÓkƒ’%ÇÚr)‚YGš¥eEÞ­v‚ZIˆU€Å¡­ƒP’Ô"Ð,7%ë+1yªé µÇ>8[V.•Üð±«smÉ]áÜâˆ0ðʪµcüvS Áâb€5¡r„Ê?6k¡¬“(ÉB-! Ž8iå67ä Fƒœa?cØÌ/¤£~sKŠ×†m)ryý~Šòð^–Úh´ÖcpÎ~ÌØ£³mÍ«o=Ã׃Î2‚RÉpÖMyõ¿e‘ž²ƒCbã¯ØÆTx¦¼ìDØŒv]E诊úc|M)X87áÙ?*ÚX[ ¬.Ç2î¤À#,X\žròp—W^y… «ò¶7VHBÐL>Þ6“Š Héq'ý^›³½¹õóó÷ÿüðæ!‹;}®<ý 5jµ5” ¶ÉDàÅqa¨'1±” ‹’Á=6e“¤ÝD¶rÒ‹ÕzD'ÇûÜzï&?xå^ù§×988$ÆØ4SC1ìq÷Ö-^m,È/}ñ÷¸¸½ÉâB)%Y1†­ùcn¥¦# ¤õ8%@á|R&Í´ZÇíñÖO~ȯü¿üôç7eiy\¼…©¢D•?ÿi× r朡¨_¯Êù€-מ-âç02íT‘š+­a®4†µb|þ)yà†A·ËÑþ{+ËÔâ!ˆÂ¥•u¤ÆÂòYšá€(ŽAª2aÓL"Ú'Üûàïß¼ÉÑÑDL»Õ¦(.û]—õÅn<ý4/ípÖ:cÿð€›ï¾ÇáYgâ¡0Å÷=~!¯{îœH.…CÚ _äéµÏèu;Œ†+ÄAD@²¸ÆVTgakǧ@tJûäAÈÉY»L OEêGÓêò\нL–×le}SPõlºO7Y‡ºâ®2~Ÿœ)6pÎø™*@ ‡ $y¯ÍÞÝ»DJØ\[f©Q§–ÔX^‹aÂæö%ŠB{#f!PAHÅ$IBœÔƒ€¢HéõFì?ø?x—÷w2ï[àFïéðkŒ(;œ™|Öã¤7w³&Ö“]AŸè÷³YL(gãësÕx¹„Ä•k¤eïÁ}Â0$ÏR¶·7XHB!ˆk‹\¿Q§È ŒÖXkŽFDaHÇ(¥¨ÕjÄqŒÒшNç”û÷>àÖ­w9í´æc+óÒèt@¯u­wß!qe‡Õf@%ÔVØŒV.9…u!Êc•”(©£ZR'P‚"Ñ:=æÁýÛܾ}‹³NAˆ1nb0+˜ëöó˜Ç<æ1yÌc.ÖÿFâOÿôOùîw¿K¿ßçÍ7ßäÅ_üHCØ?ù“?á…^|Åý[o½ÅÑÑý~Ÿï~÷»|ûÛßæÛßþ6/½ôFƒÁ`Àááá|ôüNEÉb.ÕE­51„@†„* B¢(*»Ù-ÎJÏf‹X%óyb8ê¦Â¦·œ ¬Öô‡ggCIL#(„%’ÒsdU²@0d©P¬Õõs†ƒ>:aŠ¢hVtp^ü0Σur4T¾²0r4£ÂІ’¤£Ɇ` \‘"„!R’ $Ë5ë q ¨´9:ëÒ 1d£‚,Õhm=·^ȨÊŸò ðˆQ«sç>æj—ft%gTkK:Êö‡diŠ. Ï‹w=œçÙ:JÌEÉðvÒ{² 'Ö¢¬ÅŒ†£Ö¬ñ Î+ë~›¶²‡ÆÂä„Â"­¯JtXŒ¶(aù dˆ”šÇ£q ÂæžÏ_-u^ÖÌ h_‹=5ÿT!—= Â'6D‘:M œO¢”ݲ4ë+4¤r;N5èŒîÉoýäǬ,6I‡=ž}úÛKÔã:I¡ä¸ºÙç&Ò99æx÷>wÞ»É_×~ø&wR–2ÅôÖW¤zší Qì+ŠñÕ¿ÃÁÓÓ6nŸ¢ÈAœÍ)P¬ÑhcPB‚2Fˆh2ÇøXÇ”d1Y—‡wßáŸþá¿°\Oyêúe6V–XNê¨0ÂI‰1†"+&Ãd)g'Çœœœ0)Œ.¸—áláS”TH[&eD2ÀIIŽ¡kÔc±ÞæH[ ­A7DD ¥Bkã1B¢T€ ”/w¥j ®(pE:Çå!2”(ÎX¾½prj¾:>Â’“c){wÞç‡Î`F#ž{æž¼~«W.±¾²H³Ñ D¡D pVSMžŒÒ‚‘>±£&ÏrFÃ!GgGÜÿ€»ï¿ÇÞ}Öàáî.[Û;,,Ô¨%’0©†’Å¥T¨è‡Dq‚t¬ÑS`­7uuVM×8ç»È «q"üH_ PýÉSÎNØß}@…8³ÉB’ I3!h.‚-pYŸ´ßóg}ìŸ1îcpÖ¦ôÝBcG¯_~únÿ0£ð†ÙLº|d9æíd hp…_WÜø%ËÄ©œx“¸ñXœ¿Ïéœs×iœ5\ÚÚfscõuêõ„¨Ö ª5”ší¯tç:1èvi·»´ÏÚ<|ð!|ÈY«ƒ3E9ô§XÆ a|7tÒ¡(¥ ¼ªt"ˆOHm•wXV#ÑD²\…OçZ!ÊÏgüßöòÂ{ ˜œÖÉ!ÆhFƒ>½öU6Ö×Xj6¨%õZzÝÕ (´.ï‰¡È Š¢`8ŽRŽO899äÁƒ»$õH{mÎŽöqÃ:1ŽÀÔ¥¡év†#‘"D=©ÈO΂Í)†ºg'!MNH”Ó˜´ÇÙÑ­^J¦]%{â*¨€RÐ09£Î ý³#Ú' &‘Ȳ*Oa8=9£Û2H ¹qˆ 4ðEzÜ»Ã?¾œÓ:>äÁgŸãÙgždkcƒÕ•%êqŒµS¤äinë˜{·ßãö­÷¸uóï¼õ.OHÄìòÓ¼B½¦e)Ï&A3ó]ÉSG9>¼ÃkÿX˜Ç_x‘§®_ãòÆ %ÑEÁ°ßä#Ò~—ƒÝ¼ûþûœžµÉó)B$£~‹öÉ'ë4Aà K‘EŸÞI‹ÞpDf-Oá•H,Êi(RFÝí“Cj‘FG(‘ÌÈG´è3¬ð y'´ß‡R¬ÏÓýö)§{ÈtÑbDlÑ'’'­AJQš/‹*ZN“C8MÖïðàötNZÜ»}‡'®]ãú׸zù;·Y[Y¤ÙHhÖSäyÊh4¢ÝérvÚâøè»¼ËÝ{÷¸uûCÞºyË'óœ]…Ë‘%˜Æ¯É‹ô•µfD¿}DëäˆÓ¦—cŒ¡˜a—Ó΀~êÐV"J”ŽŸƒ~q’Rbñf˜Øb|lP¡”" ,èÝ3¥cK!TŠR,+gmv8M Ú.Çû÷¹wûÏ=û ;·¹¼³ÃÖ…uÖW–Q$Ÿ´ËF}Â'TT IDAT:Ý3NN¼Pÿþ-Þ{ÿ}Þ¿}›ÃÃc²Üam‰ƒ‘¦<ãÖ¤€"²ÿà§'ÇœpíÚ5®ßx’'®]çÂ… ,¯¬°Ð\ Ñ¨†Â'´¬CH‡=zý6½^›Ããv>àýÞãwo²¿·O·Û£(¦Õ¿³Ö'4*]<ãZõ1‡^|’€&Bú¤ÃhÐ¥ßë¸˜Ì å9yaÐÚ` 8üö¸¸R¶#¼¼:j0¹Çõºt膤i†Ö¦4Lµ% É'y KøŽ),E–2ìwéuZy€2ýáˆQ^;áxƒCZ‹±–^·ÅîE¦5ÝÁõ k,,Ô £€8 I¢€@ ²,'K‡ ú=NŽ9=Üçtï'GôûœŒèuO¹ÿ.ÍÅu¶/n²²R§ž80#¬Niµ[´Û-²QŽ-4&Ïô{ºµ‘…ÈlDžyoc¹3¨²Keæš\Š¡ÆœðžÆtÎNøðîmŠ"'MGl¬®Q¯ÕJ¢¦H˜Q—öñ‰75¾;L8‹NS†½ƒD"…ÒY–c­C–Ý ®bí¬¥È3²AŸQ/D˜ƒÁˆQ:­´vFœïª1ÚÙA¿‡Ô!C†½Y®Ë„¥|ÖMqÖ $ºÈhÒï÷9|xÀöÖ6—/í°º¶B‡“s(E %Ö²tD¯×#¥t{ŽiµhÒï¶) ë+åñI%!”¿råz‰ÄZM‘ö: 5Ã~ŸÁ`„6ÞDÝ ù‰Eã³Í3ô¨O6ìÑ/$ÒÃi¡}‹Œ @SSuéÎääCÃižÓïö蜞qñâ6ëë¬,/²°¸@Da@y^¼6š<Ï)²œ~¯Çp0 Ýj³»û€N§E«}JwÐÃ75 wãD…,;†î©æN>¤Û>åää˜õµ5uêID³'Rø˜jèBÓn·Œút:m9Üßå¬uÌ`Ø/Š);pd‰QšÇ<æ1yÌcó˜‹õ¿Ñ3ê«âúÑÑYe_ðŸþyþâ/þ‚»wïðÚk¯Í¼çù矟žßeñ_1ª ²[ †C:ÍæòÿcïMžeI®óÎßqÈÌ;½¡ @¤Hv/º­×2;-´×^ÔF+mµÐŸ VÚÉL{meÖ ±ÉV“-# 6'A j|õÆ;惻ŸÓ ÷œî»¯P#‚þ+{¯î»÷ffd„‡GÆwŽŸ9t4ÂÃÈñ¬¥ñÀ!¾t‚ɾ½x ¸)Î0Fc±TŽgJãZÆä˜6B;3ë±gL#§¼õµS.®œßDÆq‰Œ-ÎͲ±¹+b¢–nÑ'õŽb‰Ø4YlPZ&Õè– ZuOþx†w‚(5¾þú ®y“ÉÔqq±@œc¹\syÙ2;š0uþS­Äþü•½fv+ï‘hŸèûžù|Á0 Åê'/}é®Õ4‹zZˆ­Çz±'°°0¢Ã@Ç,Ì¥œeƒ•ÿYÍXƒ8ðâñ‡üÅwÿˆG¼Ã¬m˜1t½Bbäɇ³˜¯ƈ¦"nxñá»üÙý¿,ž¾GërÇ'–²??ç'?z›gç7¥ïQ·žäFJõc·âýwÞæ~ï¿ðý70mÙúëzK,¯.ùÙ;ïÑ­»ì¯ $ÑÒaQxúÎO¹yö”ýÍ÷ùßÿ·ÿ…×ßx×<ääø4 Aã’nuÅõÅSÞ{÷§¼÷³wY\/±Ô4Ë*«Å¼½fµ^ñ“ÿ˜ßøµoò«¯?äìdŠéÈjqÅÅù3ž>ú˜wÞý€gWhsÆåóGüåÿ÷'Œ‹s¼Ž·Ž©3œŽŒÝœw~úSÞÿè)j›nZÛÆ•Þ-‹lºpsu\ßðâýžÿëú‚w~ô·ü£_ûU¾õæ›Ü;;a6A2ÖË9¡[Ò-æœ?ÎOò.®ç¸Æ3‘V¼÷“òßšÈÿö{4gL$ iÅòú’?ÿë¿æü憦™bîTÜå†~ÉO~ø?øÝÿsÂý×bã€Ó@ã–<ò1?ùÑÛ\\Þ°èb¢xµçœ‹Åü’Ÿ¾ý·üW'œÌ¦p. º¦åãGòö;ï±ê{²G·²;Ns±m|˜-»WCà{¼ýƒðàÁ}¾ù+ßà×¾õM¾öÆkÜ;=f6õˆªF†¾çòòŠóÏ9úœ'}È|¹¢#lÓÒV—½>xÝd‡èÀzqÉð}~Ïõ|íÍ{‘±ï˜4–¼xü!?{÷Ëõ¸í†¾cÝIaÍüâ9ø_wø‚oæƒÞçùù9×Ëëð¾%™Û†fBÊa¸b[ñK ã*ò£|wßy›¿ü‹×xëë¿Â7¿ù-^{íuNOO89šÑ´›+˜c榄¾c½š³X^1Ÿ_ðÑ£xþü)ç—Ì×=®ˆ«¿õ’—b#/Õ¼>KÉSóJ05B#¼÷³wXÌÏ9žy&näæâ‚ÇOžFCdŠmÄf)gni¥ujÊr1çÑG`’øèþ '­C×7\|ôˆË«9Ã8æ®]äŽíÝt,+)Ž|ôá{ôao„Yã¸zñ‚ÇŸçDÙ…Ù"aGÎ/.¸Z¬8¿ºáþÜÏh[OÛz&­Ëë1Ò¯³°~qþ‚›‹sBßa1æd‰u¿äéÓ£ããÇ_ãÁƒ#NžÀ°¾áæúŠ«‹kn®nˆêÐh\<ÎO¼ãÅãN½£‰#OŸ>¥ëº¼:­\o·Eò=+0ݼÛdÕ(aìyöäc‹Ïž=çõ×^çäøç„1ŒÝ ¡[p5_²\uôc¤q?zŸ®[òñÙ1Ç­ÇÆž÷Þ}õªÃ»&ûªyqž~Ýñìñc~4ðáq‹iG·ZpuqÁ|±$ª‚sˆ(^#Ë«sÞ÷Bßs2mp©§›Ÿóñãgt]W©Ïs¼Ýš×}î¼WKžt#—/.øèÃG³£ ³iËÑlJÛ4Lš41tk拺®c¹ZqqqC)çꤔ×íˆË×S‡¡›CY¢ussÅ;ïü˜qµâ¤Q,t,æW¼8¿&&‡Ð~ŠPÞ<Ϭ—s}ðiìpfx',7}F7¿áÃÿÓ£6[hDÃHGÆY¬{Ô ¸ÈåÓù«?ºä§ÿýOqMÇÄb‰5eµX°š/ÑWf¼J¬·m ¥†Õõ9ï¼Ýñäƒ÷øÓYNpÌÐ8Òh J^¯;ºq$š$ ã‚Ÿüõ_ðñ;?bz4CÔpÞe‹#íI1põâšU7ä/EèK±[ñ£¿ù>~üílŠ…€¤ˆ“€s~½¦[®èûˆ³€™…š¡FÏøÁßü%þøGL8ÁÌÞ}ßq=_’"Ηž~@w†f¶]ÄB yHb5 „õ’ÕÅ9üôÇL'MÎ'𠾉4¢cÊÞØ!0ôc?_j·<žErÃÎé:aäùQˆcÇÕ‹Çüíâ’G?û¦³çŒ8%\:b¡çúú†Å*e‘Õ»àQËźҭ›bÏõ‹§ü·ÿçÿæh2ͧ—¼wx‰zúuÇùùJ—¾vãC7ù%V9®ÑøâryCwõ‚Gïþ”ÉtJ;iq‰bu•wdK ŒK†aIG«}ŒÄbm‘}¸7f-¾ØØlÏæ"`§\DÐDåõ­{ž|øMãiÛÜ1,.æ®x„InJÕ@Lã¸$¦‘~èX¯;Bïš\LÞ„W˜íÙÛ[¯ƒì…2WÛ§¼H“Hýš÷ß{—Ç ž€³±¬Té²­“k1Ùäe(F*Iùk¤AÇŽù‹gŒÝ’ÖCÛÂâŠØ÷E¤Þàl«\û]´ŠÆGï¿Ë³§à<4­'~=`¸²ßKn±3•\‰Ëð”Åù¾ăsÅRÌeÏðGâ8Ç¡ˆþeþ0Á’2vK.žÀjyNÛx¼d«3K=1„11Œð¤qäêü9ëÕ‚G"´šh5@· ïÖlã>KöÅfeÖ6þ]qÿL+×MyµCß­¸üø¾m¡q˜):öY„µÈد1¡@{žô.WOiÛAy\GM$¤b³ñŠáÙ“',ç×L[G´.¿Ça¤Dz= sik-Ó-oxüþ»\<~JÛº¼RÇåÕ£¦\”q~WG3Ù¯òçÉ+*&Ž(‹ù Ëõ'Ù’ÉK™{\É҈ƅëéºq›_á¶û®âF¶wÚ,/, ëÕ‚'>âúùs¦q:ÃÈzÈùGšRPvò‰E~Řß\1O?B4‡úÆ”X¯Wyõ eňPr?J³Ã&%æE¦ŠâX¤À8¬yþäÑÎ+Þ畦ºùÌdäÏO! 1¢!‘H¹€êö쯶B½!·ÏJE%i¢zλ%7§q0m”¶iJ´Šå¢`™J’&†>ŽÑ 1ãXl‘Jà·}Þ‚a¥R©T*•Jë¿?úï~÷»üÆoüÆg …===å;ßùÿù?ÿg¾ûÝï9¨öw~çw¬t*¿œ¨*)æÀ,s8ôt«Eîfs ó“xBó®ñ8¹Õ…W„aUA\ƒoZ4«.!6†Õ‘ãÞiÃýÓ ÷N'ˆ‹Yl³†V¯½~Æå20ï—ÄÐãÈw-Î7YX+ƒ–óÇH)ß ª:bÈÞ§) j š)¢è˜°—;Gsè`ø¦Å9kdÖÒ´ ÷'ÈÃ3ZËKó-*:– iåçøÚîžÈx©l_èΓìV ÜêÍ,ßšc¤ïûb[ÎnwÔo/·‰j‡­b¯õlÑb¡' kÒØçî”¶E€í›|éfï+Æò23eµ˜³ìà¤æ =‰gYX$Z™‘å ~1wÔšÑ/®—Wœ“-\3Éã4Eh<¤„¨n¢÷ÆóÆ×Y‰ãÈâú’ëË ð‚k\ë‹§°˜¢iÌÒÄ&SKhžiµASbCwQƈÍažBÈáª.[h8$g2¤Í{*[æ kæý’ùe¹lc šp€Ç¡Þï,40¬nx±¸ä…*~:É‚¤¥­Ø‚åכෂãÎâîÀÊÀ³óº¶Ë›+–WW8ó9kÀR±ÌIÌJµK­a) Þἡad~Ñ1¿<ÏÁÉ”€R‰E€Ð¼¦iÌð4Ù&Z1õ4¥]ñ8W<ÃMÊ 8ð|çU"™}:ÙL6Ÿ²¼ºÊ…‹x³çvr8Ú<–¸åà²ñ*'á}‹ªú5a耄8Å“hâȤqÅvM?q^6Ucµ°•›Éã]w~ëW5Ó­0kÀØ÷ŒCW¼ô÷BWËç ÕP<ÇIã‹?;e%Iîζ40‰1¬7Þ{8‹ˆ„,\#“rªÆ^»$ERÂk`& 4 Ùm¯Ó› aW@ߕŨÎuG,T~ŒEwÛ`ÝíûÚìS—_£[-éÖ«m³ƒ3ÃňSÝeئš“Ï—~½dì–xÑÌb¹<—ªÈÞD «åœUZqÙðŒ„Q_ÎGe÷žöÒh,×"_¦¤ÄØ÷Ä¿¼¥r]Ë×iWBx÷Ö>fA¹n%–1Ù„án*âÂVÈNã@7*=B“Fœæ¢YÜœQòÉÑçR> FzÂг˜—™`o¾tÞo- mSÚœ0²ëJÛØ¼)1h^Õ¡iû™HÊXØ~Vrn;;5üfiƒÒdÜþ˜çĶ!抑¬„¬«2Æž±ŒdO¾n!›ƒ»£ DË×›Ïe;ívB¥R©T*•Jë¿rNOOùÿâ_lEõßüÍßä;ßùÎçzžù/ÿågù+¿,f‰âFtìˆëýbÁlÚ€N„¦É!®)å›ïVí&um«’l:›e¢åÄk ј/º.°œ9ºqJP¹)ÞO'$AáäÞ=îÝ™^w,ûžÔö4~‚÷®t+ÛÞ¶OË"LŒÙ»=%A5ooj#"­z5JÔõ ï#¾i  þhJ;9ælÒÀñ”£uIRƒ˜ÿù}Çb‡ú¦ÝŠ´»œÃ;¹k­8rÐaJ C¿ÓÕ îí6}I‹x²µDØÈz ‹VXXa±ÇR$¥,Ƙî¾¼‰¯ZŽ~»³ß>Oª™í$’ÝÝ?8—=ƒÕ/¾Üø+¦Š“¦È=ºÛÕ¥0&œ¸­]f9cÁùì][<\Mäç]¡bÛ›­?4„r£íJ°éæ½ £sÛŸQB@L ‘X¬Þn \9_°Üù'9ÕYîÎÂjÄ\p7°‘WDdAÒ!µ!¦TÄ[ɯµ ±µÍù’Å!çb94Zrç~1µÚ˜ªÜ5<_ö¶½_(Ý™ªÐ6-¨ Š›C*B‡’h$‡Þ¦b$n#ˆOrn†Ñ,€w8×à\ƒyƒ$Û®X-99èÕŠHRd“ÜõjDŠ7?{¢z¶áHñ8±ïYÈM¶+µm2þ6§ rrh›ùP¤XT®ØR%Ë«ƒœËÙ:ƼâñX“Ð1çs0tLY s{Çä@βÒ&ܳtÈ:ò¹¬ 3ð³éNðÜx™o—ùè¾ì_NDÙbʸ\éàÍâXbÓÏ¿ó*ßÅ= ¨Ëûå9²†ärWî&èR KiO,öÛIP6°eÌ„ð~‚Ÿw*Ûí6Ö3Å»~+ÛàSá¢J'“]€ˆI^Udi»Êæ@4aŒ ç„Æ·ˆåàdc#úÙ'Ôo÷21>í´(RÞ—@ÈEiãl¯óºÝwNÉ6sÖ&¨V›)ö›l·Ò̆ã0Jzÿ}䢾—‘™ld÷<¶7fœË¸å3ï]Ÿ«lï3Ó¦¼WøÄÏš4jm¥R©T*•*Öa~ë·~ëÀç­·ÞªG»ò™TÑÍ=·ÆŽF„¸¸äڦܜ}‹æÍ Óiö¯Vuy¹°6¨O?›Ð¶žÆ,®˜Û‰,D’¹Tüí[Ì<±7ÖѸêžÝ$¦“D;q4í„vr‚óGÌŽÎ8ž-Y-®qaM;mi7B«ÜºEQ!jb{Rˆx1a„IÓ†l_0ÕÈTèþþÜÚùíú ¸¥¹o-ØS) EbYA´5”ú¤¯˜»n_ß7CA-ÝVú_ªÒ[ùËN䶆pë^ôð=d!ž[™ì‰vûå+9”DöJØÁ‹ßõÜÛ~I\9ØÐý6^“g‚Í¡°=;­²ÿ\®G·Lì_ßÚ–O2è[_Yé”=•[öö¹ì‰Ý&wªä@vº«ûo#tì órKcÚOPÞmÝþ9fÛ=²[ ${²²í‰”úÿmñnk‡³'ÊoÏç—Çí˜d¼tNɾ…žàs×p–—@{ßFNºw¨öíM³ü†î+r¸]Ÿ ƒÎ_{oBncá†Õáü·=žúR‡ø]vrçʹ5~äîÍ—0j{ é»pØâ?µwŽÞq\dg›ñÒ龿v÷.üä]üŠnb+V3vxü^Ò mï#wÏ’ÛµA&wÍJ]ÓÛg·‡Ü2!ÛyÍoÄØ­}g5xn­¯ÚŽ)‘Ûâg!Û`X9¬1›Þ±g*wDéÊþµÇfºÝdÿŠ }Ò8ä%ßðͪ…íÚ‡ý‚Òö×ôçÌÃMp·þ­ØímÙL“ÂÝìïãùKnn¹uÞÙÞ5h;æ6 r¸fP÷.VÂíÎôÃ.ñOs¾¼ônϱûó‹ÝúX ¯~þÃçÑ[Ÿçn_‡_ž"î<–j{EQ9ÜC/íÛ;ß¹uÞÜ5Þ¬ºàT*•{³Å IDATJ¥Rù…¤Šõ•Ê+PIJ’„w#æ=),¹¾zÂÉɦӳv’—¯o»…²ú8ß[?e'ÖïwÌÞv™nšsœE£"ï ïW¼ë Cd””òªrM–}TýÎ+ôУ –;í»_åU›aŸå ÷u,»ãFWn‰%¯¼)¾¥ÛÈçÛ'¯’Äås½Ï—ŸP¾œ úê“ý„¿ØpÙ°–Ïôžíæ®})vx*¾zÃ÷E*yeAK>Ã~Oµ£ä•oØ>ËN~Id½ýãÛö9Æ|ÑSÿ“|Æý&ŸãÅ÷ ö¥œ6ŸwøË§ÛKŸnì³§OÞ«ò Cl¯’vPà°O>Ÿ^5Îåçl­ìŸ¸ýv0Ïo³Èå®1_áo+ÂÊ~Qòóø‹¿|&¼ª¼%_Âyi&Ÿj;äööÜí7¶X/#ûJöúíÏ··íçÏ òΰŸwm—/:ËÔ®ùJ¥R©T*¿¸T±¾RyŇ{3ˆQIEwàV\Ý|ÌÙƒ×8¹wŸ™<ȧ‘XÉ–Î Îo¬î¾A8¸A;ðÑ,B¶9bưY<â,’’Ñ÷FHB«B´bA­‚s‚Ší Þ $/'C ë×4:0káôx†{Tm×ehZüQÙv¡ïûŠ Þùì-žd‰˜nlÐI 4 ÷4MKÓ44Çûì?nÅo8‹øûÛ›Û6e/±ôˆïù^gÝ!˜±è½˜óè|ÎMéC"©Þê´h¿ öäWºì¼%œBì CGŒ#¤,›J`­í‹þf_š÷eßtË—þxáÓŠ~5®m¿ÿû«ÜöÕløÿÔÑ÷ zÖÈW´¿+_í!ýJÇú/â›újæû%òìÖÝš‡O7¯Øgž“¾úùõó¿B+•J¥R©T¾LªX_©¼òÞ#ÛÔ¨:Td‚Øša¼f±|ÆÉâ>Óãû´“‡%„Mñ2™6œœLh'%œ’éò¾æ¾±ä®x·±É±m·ýz¥9 Šomþ~ˆ0¥FÔìS¼Ñ“ö™­>¬ØÇmÛ²Z-9ríÔáålÅUˆí¯¶½§8¼!SSD‹oª Ó‘q ]µ“¶e2Ò¶\ãÆã›×44m Í,!ˆûž®›/7!so×.ÀÕ2òÁãs~øã÷ùàã'<»¸aŒVlémrv Ôßqs)(ÎŒ†„†Ž4¬I¡ÇRÊ« ʱ;L«T*•J¥R©T*•J¥R©T¾dªX_©ÜÉÎÓÜ4¢êQT#~X­/¸º~Âɽ79i&81œ›0M9;;ÂycµžóäãÇ̦ǜž>àääþÎBö‚/Ërg¹í§í„fr IIªÄ˜PÕ´æÍtÞ͈šh[·ó†ßóßtÄ[QâU•1Žè°bz”˜´3„˜VKÿº”@³WöYo‚ÅÌH¦ +b;N¸½€;&EÇHð=xÁy‡o<®iðm›Có| Qt`Þƒ÷9¹Ò5‹t!²æëžWK¿˜óôbΣ'Ϲ¼Y°ê1–4ÿQÝŠõû‡u³Or¿!¦8K8 «9ãjC¶ÄÑDŒ‰Â.8pr÷÷¸‹¸ÖþaÌaŸp åUžß•/ã «çXårFøÜ9p@ª&ߟ{nØw±±:wÔÏC•J¥R©T*wSÅúJåU·¨bÙÎ\ Õìï|ĹH×_1_±X½ 1;òLgS<8âølÆj½àêúïø§'÷øÚ›oÑN¦““ƒàý.;°" GÓ¶ˆ—$%b)à0&³Ò8Ô”¤‰VÚRØ-ÄÎÝå–Ã\7¡‘fĈc?irÐl²í Vb@sW¹ˆ+4y›ö·w_°'•dSp®XéÈ.˜Nù¿Rp« iZ¤ñ˜ó¨xÔ æÌçïõšX 7«5—7 .n–<>¿âéù ‹u`Ñ !¡ZVX¶¬Ñ”½öÍì0 mϽF̲PoBǰ¼bX^£¡ÏEšI1’b"T:ÜÊß[ËJ•(*u¿VêÀüô‘:Ê¿ÜC _üUêl]©T*•Jå—“*ÖW*w’CO‹ I=Oh1utà ×7O8>9ãôô”{÷f¼þæÔF..\^>ãúú]·Ä,ÑN&üÊ7~SA5‘9wWè[q>5É1Îy¦mK«‘1ôŒƒ¡¢ˆs9v³Ý˜l=³£f!ß4KõÎm^S@”ÙÌsrÜCO[üõMrgý®?~ÓA~+ØÌ¬ämÚÕËZe¢k/ïלëªX‚ä s-*ž(ŽÑÑ£BÀxtñœó. .®ç¬ûÀ¢X 19‚‹ ØWt¯«~_°ßwsÎR ô ºå5C·€ÐC ¤јvûv[°_Ä![©Ô1Y©TêÜQ©T*•J¥R©ü=¦Šõ•Ê+ïÈBm¶À” „¼Ð ®®Ÿòðµ¯ÑL~•{÷Ž8=9âÅå5çOy~þ˜®_0Œ} =Í¢ûññÚvŠOHÅŽE¾ÁÎåPÕM ê®d`àFâdLÙ3^•X¶·Xë19%%E-ººÃ»,þG Lg-''3fÓVhãò3äö{¶ª{‘µ÷÷Ûì÷Eðlóíþó»ö­åHU’ Q"*Ž$-ónäzÑq½\s=ô¼óì#.Ösºr®÷„h Áˆ–P#ûÔ#8‘ì-¯Ê&'Ù·åyY óëKÆn‰†RÀB$ƈªþÂÖÚV©ã²R©üòÍu©T*•J¥R©üãŠõ•Ê+Ùy>›AJFЉÞ%RX-/X­Î72;‘ùü’ϸš_ 1`¾¾fx5ñµ7…‡÷_çøø‡© (&>‹õ&ˆ8´t³›Þ¶zïq®!Y„´µÀ§´Å³íʇƒsŸmgD !ðàÞŒ£é_„x)Bû¦H`{v:;ÿúÝ¿e¯ïþà¶Z5[ál¼øïú-q(FR!$a4Ï:(7Ëæ]äzÙsÕuÜ WËÀMébÀD˜LI %Lvs€3ÁL·þüR¾·ó—×íqSDB¿d}s‰ökˆ#F4&4Y«—_hÝ Ê•:&+•Ê/ßÜQg’J¥R©T*•Ê?<ªX_©|Â-£HîrǤx½' ¾Ad$+V‹s†îЬÖÊ‹‹Ç\^=cÕ-Q§ Bˆ‘åj éã@?®xøàuNNΘ´G Q‡Ò¶eÉ÷ÿw'x¾4Ž "~^[­f%UØü‡A ‘~½dhÆ~BЦnŠœb’;ùEr¡@îêJ¿ãÚ6ÛLÂ÷äüìŸà5HdË››NY ‘›uäùåŠ>Â:%càªëY‰!˜Š½å1ê­£e¹VaVôø¼"@Š'm·[‹PqÝ’n~IXÏq¡‡8’B …„%8\UP©T*•J¥R©T*•J¥R©|5T±¾R¹“,ˆ ž,6»Ò]ICÊ–2âh'‰õüœëËÇ\^¼N3=áÙó¹™_Ò@rLÑ&G·Þ„kâóåê’×oð­oý#Þ|í-š¦¥ï𠥄©Ã‰/ÝðïÞ{,e=Z£€•ß¡%‹Ê¥¸€¡É¾tìcÆÈ8®XÜ\1\u<ôßàWïqÿäNGÐ_€C둽TÖÝ‚ƒ[ä¸R8ô¬ß‰ûjDˆ4ôÚòäúŠ×#7ËIJXÓ Oçàz\sµ\Ч-Oã°õ¢ßöM]Er6ðî'²3Ðߺî[Âŧ#ÃòŠÅÕsˆÎª9P6Œ)¯:È˨&º•J¥R©T*•J¥R©T*•¯’*ÖW*w²³”9ø®e<†@‡:Ïà<~ô.Ý0¤åé‹tÝ$¡ê@qh’{]Ã20Ž+úaÅÍ›W|íÍoòÚ÷À<¦ ) aL¤˜°¤˜9Ô"ÙSÞLKHm©‹g;€–€Õ#!„ƒpUUʼnãìô.yÎÏ—¼Ó>áþÿñ¿"1àÌå^t'˜&;eþÓ.FW³¢—@Ö—éHɸéž\^ñѳëÐ0¦†¨ )9BRÖ)Ò¥‘ħ•Éoòl|õ÷¿c8 ÊÄÃÕù3V7ZgXL9P6)>§°Ë/¨T*•J¥R©T*•J¥R©T¾:ªX_©Ü‰Üú?ì7Šk*bø8"®ãüÙ®çK’´ 1WltlÛÓmZŠ’q=AׯY,¬ûžÙô„ã£lÓÎ<Œš}Ó 48Á‰Ë–<š¶:r²§|¶yIšˆ)ä0\`ÒNˆ1“!Læ”›õ‚÷>¾äáýœL”Óã–Ó£ ÎCÒ€ð99öÖ¾±OÞoöRký)‹ùš§O/¸¼I¨?×`æQƒ¨‰1†Ðí{{µdoû/ ÅòÇm7)ûç+q$œ;Ö‹KúÕ Äž%¦,Ö›îÖ±«T*•J¥R©T*•J¥R©T¾JªX_©|L•”!œX.®Ñu‡º×NpíßLPÉB» Û0Tç ç \bk–ë%ËÕ’ÅjÉÙÙܳÓMOi²äu3—ƒ_0[ß5›Ócf%T6a–ˆ±ˆõ“,‹õCÈ>úkˆ½°Z.°ü”·Þ8æ›o½F{ô:ÓÆÇg 'î jxE›ý«|ì h0qŒ,×W Æ0‰áÊ2Íþݬ øt4¶5î)tÔ+B‰xÄžnyIì¤qÄòPŸ œ“m8o͸«T*•J¥R©T*•J¥R©|ÕT±¾Rù;Á~ #ÓvJãaŒâ…ÆOq­C#ÙÆ¥4‡ç&u%„@07aŒOŸ}ÈÅÅ3šfÂtzÌý{yã·8;¹Ïñì„ããSbL˜ (˜l¼å•ü*Šš‘4¢ñÞaämÜ¿&MĘç¹¹YaaÄÆG>à[oÝcH¿Æ½‡g¼yršíëÕh̶ᶻw/Ÿa_éÖ g“AÛ­V‹ž0ÍdFÄ“’àh^0`JJ±þS¾–nºëm»bŠ“„#e±>Œ+.Ÿ?BÒ@ƒb ™m»ê7üfš_¿Šõ•J¥R©T*•J¥R©T*•¯˜*ÖW*Ÿ…M“µŠS„ øa7Å9OІô‚3CÜÏ=ß›æpË]ò"¾øâ(Î9\#8Q”@–Äë‘e7çxzÂñÑ)÷ï?d6;a:9Bh†Àññ)³ã “I‹J"©b¢8ã0KˆË‚¹©â½Ð¶ Šãèè˜ÈºwtQX£•>$Æœs?—ؾ§ýN”ß|ßÝáY ˜"Lp´$sÄÑ.±\/Y¬çŒãHÎøý4jyîÚßdÏ:! õ–hʵŽ"«ÅóóÇôósZK4Á”~µ"…ìW/V:êËßÄí¾2[·R©T*•J¥R©T*•J¥Rù‚T±¾RùŒldc3#¥„1:ăH jhò¤iñ.?*š;˜,€‹€ˆ âŠ0ž…{Ã,1„ÀVôý‚uL7.89¾ÏlvJã§h¦GSœïA‰(Ù'ÅDˆc~ `;Æa`!*ŠËíI G7VÝH?ÌÀç¨Ù/fs— €y E¬k0ñ€Ç(V=ãÈÆWöðËâý¾ˆî¬„ÉŠáÌp–°×sºùýâ–¹k>*„ˆ†ˆÅ,Ç—#±[ ±wô¥vÙW*•J¥R©T*•J¥R©T¾ªX_©|^¬öDb4\£4ÞÈš{ƒ¦€HÄɤ(óždVº´s¿¹s®üÌí¤–PS1b h ÚÓ+–ë“ö¸ü9âÞ½3ÌNA Õ„j¶t†žÞ7¨&æ‹ëå’¾!’Ti|ƒj$ŒkbŠÌ—#×7 –Ë5èCd»•öw“ílp6~@æ¡õY¸÷E°‡#1Tµtö†ˆW£¬V²Ÿ-—b ëç,n^°^\û%.v¤Ð`¤`ˆÚÖç~óŠ"öÒŠ—²v+•J¥R©T*•J¥R©T*•/*ÖW*_5%Æ„FÓ6€Ç4baF`R:ì]±À1œHé¬÷[ß•,1o;÷1œˆ$SRL(Ðõ­[qÿÞ¨¦\4P+>a&˜„0ryuÎü憡ïúŽ~¹ m[pBJ±_ñàØsq:áòùé_c:-ÝþŸÍ¢þç ä•~+Òç¯óê¹ã_Uñ’}Öçßû—idì–Ì/ž³ZœcãI#b4¬‰£¢Éáh÷ln9àÕÏ^íp*•J¥R©T*•J¥R©T*_&U¬¯T>·íW¬(Ùš”"MŒ8<â"±0€yÄ ia ®i@\Q•mKwñ]1LY4¶,fãH„Öo¾ñàZSbŒ1F4EÆØÓu+®n^°\.ˆãˆŽ#1ô #ª–ívVK|˜pu¹àéÓk¿uÍó 'Ç G³ r+ä5w˜Û¡x}°oôVGº•¦wAAÅ¡øòU#šbBÕq4®ÅR@MaÏJç®êAŽÚ5\é¦÷Þ¡_°ž_°¸yNè®hh-¢)B †„iCã۽緃WãÖ×U¨¯T*•J¥R©T*•J¥R©|ÙT±¾Rùli3!%‡H«ßFÄFIJØî,àlŒú{˜ó¨4 †8‘] )®„Ð2Íå9ªÕå¿GÓxš¦Á»l¡£fŒc¤!’ºnÉj5§ç]cDÄÓI‹¨4!)ÛòÄç—+~ôÓGŒCä͇§¼õÆ=Þ|ý”ÙD˜LZÚ¶¡i<¾q4.wÂ{ïçP3ÔR¶Ÿ1ÝJêb’Ó^ £&F”èkš,ÞÉŒ>ŽôãHˆšß¯ó8"Rä~{åQÈûÎq$œE$FâÐÑ-®X/^ú+$­@) „!#¨æ¢ˆÞ±„ÀØä ¼üÊ/YâT*•J¥R©T*•J¥R©T*_€*ÖW*_ˆ\ï15‹{ m¥ÖgÎ …æ˜äæ<¹«^J”«©4×Ké¼o¶Æ8â²§ºÃÑxGÓ44MƒsUAé‡ÅúIi`±ºfµš£2âÚˆI»†Y3# ŠhÀpS3®ozVËG¼÷Á¾öÚ¿þ×ùõo¼Æ½“–³³NO9>ž1;ž2›4Ìff3Oã[¢EB xQ<–ûåÍ03œkñ$`°D§‘…Æç€[ŒdʺÐbDKÑÂÙN¿K߈æBBqŒFÒ°f½¸f}sÁ¸ºÆé g#) }ÇØ'L=âH.6<§”¿¬*ò•J¥R©T*•J¥R©T*•¯ž*ÖW*_&h‚00p)✄€!0éŽpxÅ9J«`æJyñvl¬pЇºsž¶r||Œ÷ž¤Ê0–«5«~M?vŒ¡cWŒ©G]À$•×|tç¾üQçÐI Ia#ËÕ9/ž]ð³Ÿ4œL¹³ÎNxãÍ7xøàŒûÎxøð>'÷& 3eÚÂQÛäŽ{”±qâ1i‰êéƒp³™¯G5’I~w¦ a êHÔHtoF6ày•i~þ¾Ãphé¨ý‚n~ÉúæŠq5‡±£‰4öÄ¡gFRG“õx6ÖüÅÚGöºøeÏ¥¨R©T*•J¥R©T*•J¥RùЍb}¥ò¥°“5)‘¸w’‚G#¤5h‹HBDòÏÄbÙ>Û¯8€"Ý[î°7h}Ëñì˜{§g4Þ“RdÖÝ’®[±ê–ô㊤A&ÙZÇû6ûÜÇR0CÌáÊUÁT³¿¾kƒ>(óÈ|•x~5Ò4s¦­çÁƒkî?8ãÁÃû¼ñúCÎîŸ2›yŽŽ„ûgžM™MÞ f`êI©aÑ)O/×<Þq}µE¼'ª2¦!uIÒ£’‹Ù ¿a¿¿^^ÚëàLqq$® ‹Kº›+Âj ã€Ä€†‘Ðõ¤0BÔR,)Bý¶=g©³}{U¡ *ø•J¥R©T*•J¥R©T*•/bý³gÏøÝßý]~øÃr}}÷žo|ã|ûÛßæŸþÓŠ÷þÿÞ{ïñÇüǼýöÛü»÷ïꨩü\R*]ð%tÕ \#¨$­!yˆÐ"Ò"®<ˆÇáÐM·Ù®­Û޵̦Gœžá½'„À0ö¬»‹Õ‚U¿`=ÞÑ& Nð¾ÁKîx·fV²m³ O#  )!ׂCL lP°„çsåø¢ãìtÅýûKŽO§Í÷N[Þxí˜7qzŸó§ú§üÉŸü =àÞ½{uÄT>5ª‰ò×f†âñÙË^šÎM3œ›a€Š Vœê%{°Hê‡÷-“É”Ùì1H)Ðk–ë9óõ5«a…Zbæ[T Ã9ïïÁ Ö*fRþš”fêQg„^1Kà²HPÄyrzÞ®U€~XôKÎçÍZ§Ïo<<áõ{ÇÜ;=âìø„×¾Áý׎P'\ÞŒ|øáœ>Mˆ2ƒÖÐV ãHÐ%`.b’ýüMrt¬™àlcŠ£Û [Ì 4t 7—¬¯/Vslp$bêCße¡^G2{Ulì+ÿY©T*•J¥R©T*•J¥R©|UüR‹õ]×ñþÃ`~û·›ßùßáèè€?ÿó?ç?þÇÿÈøCþàþ€öÏþÙöqø‡ÈúOÿiÛýÆop~~^GKå3a1&RR\ñMħ„œE|3"Ó„ 4Þ3™ÉÑ„¨`jLf-ªJŒ *4Í”Ùô˜Ùô3%ŒõzÉbuÅMwIŸz¬Q¼¢„,ô‹€Ë}è!¦\h…ÉtŠEÚè‹•±îŒ‹óÀq;0›ôœ¾þ '÷_#ˆ'Ú}º!0¼€E¥K«°¢kTbè=ä ‡CÌçÞzK 1ï3É>õC¿¢[Ý0Üœ£Ë¤Õ :®Ñˆ!ÃH #¦®¼‡rŒ„WëñÛ^ú*ØW*•J¥R©T*•J¥R©Tþø¥ëÿìÏþŒù|Î[o½Å¿úWÿê {þÿãÌ»ï¾ËïÿþïóWõWbýùù9÷ïßçŸü“·¿ýmº®«ö7•Ï™‘bBÍHI™8A$_½(‚àgà'8ß Mƒ”lY'‚¸†¦™0;:áhvŒ%è×k–‹V«9}\“$³l³îŠ{éN/¦1¹#ݵÙ#_& ¤˜pZ6Z%+žß*›Ð[›.{ÌaNР`¹Hàz#J'‰sÿ?{÷ó$Y–žuþû¾çÜë‘U•õ«[R·¤# Ò=6ƒ±ÀŒ™–˜±V°cÁ?‚a†±aÇBÆ– Œ;ÌX°˜1„Z2¦ÉZÝU•™á~ï9çÅ9×Ý#22»Z]UY•õ|º£"ÂÃÃýú ¯Šç¾÷9Ü\-T¿åÝåß]qX'–jTgôø7*•J¡Ri>ºãmÜ=cwƒì#¸¯•XÔõÈòâ3Ï?áðì§Ø¡/&ÛÖ#e]Y–#µ¢UF“Îè¨ïu7¶-ìûàgvYz£¬^DDDDDDDD¾ ouXÿÃþ€¿ô—þÒ£½ô¿ó;¿Ã¿ý·ÿ–çÏŸß»üw÷wù[ëoõ‰dàÿðõL‘_HDÐJ¥Y%½/Û¸÷—´µàóJÚ]ã¾Ç“Ö6uw²ÍÌÓŽ«ýv»kÊRyþì9Ïž}ÊíÝs*+á·»cÞ?ÙšØ{µN¿$0Aš¼ÏÔ»Jk¨ý B´Ñç>Âú­†sÌn·^¥Ó"'¹[k[H­2yP¹‚O_p[wä+XqÖf}áܨX…•B¯¾  ,ÚÀ­‘l§Rë‘õî3Êí Ï>åøâ3Êígøz å@Y,Kì£õ:³Çƒ÷ø\q¼"{ùr½ÕaýßøƒßýÝß}e×üÍÍ }ôѽ˟>}ªg†|¡NK˜=@r ÂÖƒq¯`äd·=Ù÷˜eÌ)gæÝžýþŠœ'înïxöüÏ_åøâåxK”Qï(åŽe=²¬ ”6z}ìâ'ñð£‹EeÃùé½jÑY‘/Î[Öøá‡|øá‡¯üú¿ÿ÷ÿ€¿òWþŠž ò•i¥ÂV)³®€õfg @De]ï ÍLï}اìÍÉ9˜fƒÔ8¶#Ï7<;Þpˆ…Èôitwáxûœ¶p*“WÇÇã².Pë¨ÓyÝOã2„7=9EDDDDDDDäÉßÖþþÃà?ý§ÿÄÇÌ_ûkMÏùJµZ!ú¢§uZɵ[Åòæ„9-eV <_‘§k|Î\]½yáÙñS~r÷/lá.µ>…îŽiz#aa½¾¦§õ½ž Ó÷P¼FÐ,ÀA¢V§¬F­· O£›?gÙµŽÞ sÃÌØÅn;¨…¼{‡ë>zšùøã÷IùŠÛÛÌO~üôù ûé)“OÔÖ(å@µ2‚úŠdœlNn¿ý„vø”õöëí ëñ–åî†rû‚¶ˆºR£ÒÚÊñîî\}³mlÐ^Ž7?]å¼ì¬&èEDDDDDDDäÍøV†õ?úÑøÿâ_`füý¿ÿ÷™¦IÏùjEÐj¡µŠÕZÁ[%匙ãfà‰5Àç=ìÔyžr\?å°Â§wÏ8ÄJI}AÖl>É­×ÕÐûäÏ)»ÖÀ3¨´ÞGôƒ$Zä^™ã}&áXÐûþÖ…hD´Þ»_  u]8XpÜñ^æÝ'Oùþ÷?b]öüñ?çù§ÂÎÞ!›sl•Ãz¤æóJNQÉ5È5ðåÀñÓÿÁzóg¬Çç,Ç#­¬”㺈Z¨¥Ðj¡–…õ¸BlAýùè‚Å«cx‡1./yðÃÒóUDDDDDDDD¾tߺ°þÓO?åŸþÓÊápàoÿí¿ÍoÿöoëY oNQ 5‚Ò6MäœpO˜'8¾ Z¡ÒXw7ÏfÇÕ8ÜY*Ø41Ï3´rêÆ9^«ÎŽ7·ó¢³ £Y¢‘ ÏäÝd&Rdc}ó- iš *Ð{Z«êºðÙZñXq_¸~§òë¿þ+¼÷áž›ç ÙîˆvG­3•BIªq+ìwN¹»¥Þ-¬7âæÏòßXŸõ@A|++u9PJa]Wj­}š>NËèžö‚ÅËm8÷ö]\ªÂ‘7ã[ÖßÜÜðOþÉ?á'?ù ý¯ÿu~ï÷~OÏùZh­±®+­5jM¤œIÓÄõœ¨VY/xñ“#ÇÛç0]AÞciÇõþšdôI} ð±(ì«î©WÚ4Óp‚ ’(æg¦4“b«c-õ·í­‘¨˜5°6Þ4ZYY—#‹XÛÊ'‡ÂúÉ ÊäìÞûcþâ_È|ôKïòñ¯ÌüÙgϸ}~¤í ò-ótÄÊ í“ç”›OY?{FyvC;8Þ}ÂZ´VNa]—~` Vb ê_î¹áu{ábÙÝ Tá ñEDDDDDDDäK÷­ ë×uåŸý³Æ~ô#þê_ý«üÝ¿ûwõÓ—¯ˆè=ð­Rk"ׯÁz¸%Üi£® ä–¯˜wW´zÄËŽ4íÈóUám á½×Üà´1I`aXŒ >A• K‰œŸ0ÛŽX Jë Ç,z@O²á>>·Ñ ß*m]XvŽåŽÚŽ<_ åÇÏHðÇLÓÌoÿæ_à7~óc–?ú”ÛOž êá”çÔöËÍi‡ç´›´Û;Ú²bÞ+ÔJ)ÔV)ëBY".ûéa$ñ?;\·Ï{¡ZpDDDDDDDDä+ð­ë[küóþÏù/ÿå¿ðƒü€ðþf𔕝ˆ8=W[k´hD-*ž{%Nó„røXJ¹£ohóŽiÞ3í¯±4ay"¥™æ™ä;šMT Êhg7œÆd3‰•JÔ·÷‰”÷$ß÷žœ±š±Sg}?¦„yù¡áÖðØUvõÈTn9®·,Ç[^îøoÿýO¹Þ'Þ}ÇùÎw~‰÷~ZùäÅ3îÖ#ëñ'¬ñëò‡›?Ãë_ް¬”Rðy¦gò•u]z`_V¢Ö{qÛÆ_ä¡ç¢ˆˆˆˆˆˆˆˆ¼ߊ°þ÷ÿ÷ùÿñ?ò[¿õ[üÃøI)é'/_+fFD`æ@£µÂZ­9žžišú¢®¶€e–c"çDä‰ê‰›²0í®Ù=yÝ;Oñù éʉif%á$Z3c®¦+¨Îía¡-öùú‚õö†Z+µ5Z­§øÃßãG*l€Çën^ñsàåáúÊðEDDDDDDDäË÷Ö‡õÿê_ý+þÝ¿ûwüê¯þ*ÿèý#v»~êò5×—ˆm­Ñz =Z+xêá½gÜÚ&(Gš­RêB[ï8Ü<#¦+l~ß½ƒïž÷ï°›¯zh¿Z+DsX S[(-0&&Oì2¸‰h=¬zíM¿~Z\¶áî½  ¹­8+)lo¬8¥>ãGÿã'Ôòcî wwŽËBmG‚BD¥ÖBY×1=_(µ­ôÑmõ§À^DDDDDDDDä-ñV‡õÿù?ÿgþõ¿þ×Gþñ?þǯ¼î~ðþæßü›zFȳU3çÈ´hX ÌVî•”Þ*ÍäFv‡Vh+£*çHî°ü>í‰ý51íñ4C$Ži&"Q–ÀJa²‰ä39Á” ' ÜO“õX#¢ˆ(ôZœFÔÚˆV€B«¢‰²BY˜ÓŸñßÿäÏ  ¶ ÕFóúµ5ÖµPJ=uÓ·V±hý@òyy‹½ÕaýóçÏOÿøÇ?~íué—~IÏùZ¶Å`Gxý ,°¸µV’;)%"glrRkAí cMÎêÏ{Òþ Á$Zs¢Óô„ÄowPw Ã!ì´eÄë—[¢lLÚ7 j[©e…(°°²@[±(ìv†§+7ÜÜÝa–§µ ÕÜ—¬këu7môÄxÏÅyûØÍÍæUå%ú§Êoýo?Ð/ÈXˆxk„ÇFƒúÔßÛ°±T¬žfF«•œ3Ó<1Ï™Ý4÷ú˜’ƒ`‰ð‰šfjK„%°„“i-‘0nf}¢þt×ÖÆv4ZT,zG=‘btÙ7¬5XP¬U¦x +%î8–#µAkôÉú%(¥õËÂûã¾W?:çã|Ñã58wÖíÑÿ±Ÿ­Å«:ëu˜@DDDDDDDäÛì¿þÁÿýs|ÿñü?|ï×~ãs_?k7‹¼Ú›êF·~焽âþcû:=8ÛZÚJ«•õèüÀn·cšRï£7ëµ¢à=7‡pŒ­îÆÇä»Ý‹¾ž£Eaý¸F´m£ñ³©^YJ¡. k]Xë‘ZËØü¾¨nTëgcÛ8?ÆWÿd^¾B¼jòÞ^ñ³}üVEDDDDDDDDÞ…õ"_3¥3Ø+ªÚOñó˜œÓ§}aZ3cZ Ö5õï1Ná¼çÜoå4]n¤”1l´Þø#wzwZ¿ïÓ¶Žq[Ý2{ŒÞµ¿®k_4¶®=¨Æýý¼ F})‡¿œj{Å+öŸ½jo‰ˆˆˆˆˆˆˆˆ|m)¬ùš²ïÛÇã‘ãqÜÎæÝišîÝxD0On—þƒí±Ë?^:렔º–‡[B©µwз-`·—®sÿýc{â‘ï±×ÆùFQX/òV:‡éÛâ´[Xߢ/àzïÚÑ8œ¾á±>÷‹Ë­Š‹ÿ‘ëš=ºÿl¶Mù›jjDDDDDDDDäí¥°^ä­ÔCñmP>Â^¶Çi!ÚñÅׄõ£'Ú£÷i¼.ä·_`ÁÞÑŽÿºoW’/""""""""ß` ëEÞR—ÁxííÞ”û9°·‹ëǽnz,1»}ßã¡û/Æ¿N<ò¡’yy»(¬ù–¸œ¦Xcs9ý~ßë'ì¿Â­çMÜ«ˆˆˆˆˆˆˆˆÈWŵ DDDDDDDDDDDÞ,…õ"""""""""""o˜Âz‘7La½ˆˆˆˆˆˆˆˆˆˆÈ¦°^DDDDDDDDDDä SX/""""""""""ò†)¬yÃÖ‹ˆˆˆˆˆˆˆˆˆˆ¼a ëEDDDDDDDDDDÞ0…õ"""""""""""o˜Âz‘7La½ˆˆˆˆˆˆˆˆˆˆÈ¦°^DDDDDDDDDDä SX/""""""""""ò†eí‘·A|·ÙôcÖ‹¼5¾I½‚z‘K ëEÞ&ß” <ô£¹¤Îz‘7La½ˆˆˆˆˆˆˆˆˆˆÈ¦°^DDDDDDDDDDä Sg½ÈÛ Úxo`†f½Ä¾¿ Ììâ2ÃÜOŸç”¶+ŽÛŒ~sa÷î(ât‡/mD‹ "h­шÔÚ^¾ªù#·aháYù¶RX/òÚbï䎻ãn˜¹á# wsÌÏá}Î÷_"¢ßJlŸŸ¾Âca}pêk­´Öh-X×òðŠ4ú€ˆ¸÷ûNö¹["""""""""ß, ëEÞnéå_ðœ™ç‰”ÎÁ¼»“R¿®Ùçœd»˜¨97·ÐZPÛÖ7rª—7DÔV)¡þéAˆˆˆˆˆˆˆˆˆ|K)¬y ¸9ûý<âîëú~¿gš&l|~ž>oôpü2xM ;|Ïø²'ö#¯P«Ñšã~y¡oiA*•R ¥”Q›Ããí:"""""""""ß ëE¾‘î'Ûž2××׸q ê¦)ãÞûákíîîÎ<Ï/MÕ§”0óQ[ÙuÿØç÷™¥Öu¥µvÞ)½üM¼’R"çL)…Z*¥4ýhEDDDDDDDä[Ia½È×Ä6• Ìçi÷»;É–ÀÍ0¬‡ÞÉñ4ºéÍpO$·‹ŠšLDåw»Ý¸ON |N©_o,N{ï~O—õËO¾gí˺²¬™õ7Ð"(k=õÙ÷7H@K‰©Vjk”’)¥Rk÷…ZÛÅ™ªÈ‘·›Âz‘¯3ÃÜ A´JDF:O³`|ʉÝ<‘§DN}r>"¨­€Ù˜7¦Éqs’9'¦iÓî>¦í·PßÝxõ¢­f6¦ðÏß»›&®ïuÙµ6^ÜÞRk½Xt–spŸµU²'bsg]W‡Çã‘Ú‚h êEDDDDDDDäí§°^äëbdÜæi,èÚ'ËÍŒ”Ó”™R"yŸ ÷Ó{gòÌ4erÎLÓDÊŽÓ~÷ÞßCöÇÃo•õ÷®F<ÖQºå‡·qî½ï œ§Oߥ5ÆÄ|%"F¿ô©ûðGlU=Á<Ï䜉ÖµPj¡ÕF­*µ‘·“Âz‘7&|ܧë{ľMÔžœœ3»yfÊiT߀¹‘S"%Ç“3í&rÎä”I9õEe#z…ý¨Ëéÿ?ßï–ÉŸÞsêÍzPÿH$?juNŸ¾â¡îÆ<ïˆàTqÓZcš»ýŽuYY–•Z*kY9,GÂsH8x2RqJ)xi´çiEDDDDDDDDÞ ëE¾b[µÌÆ3rï>ѾuÒ÷Iø>9o$OL9“ÇD}u79ç^‡3e¦ÝDòÔ«nˆF´xe•ÍØšñÞî]dFúyE Îåv?’ÖoÓøfFNNô«Ó š)Oä)S¦‰Ý®°¬+Ë’À{¨ßƒýJkAÎ}ÑÛäNÍA-…RÚ)üy(¬ùŠœCóŸÛÅd{ÿÀÍHÉûÄü˜¦77Œ>!Éaž&¦ibžg¦¹öžòXìu[ ÖˆÓ|\lFð[͹à&àa}k·1‰ÿòu.¿3"hˆJÛ")æ,p‡qß û„eÇqjJ¬¥PK¥F£µrzäãÞëÑùºRX/ò2³Spn6*mrfÊ™”3îNN½§W¿)÷Ï{í:œÜ¿?ùi:¿wÍØ˜®ß«æÞ6ää§Ï‹ÉޝŸ¯ù3*txtªÀ-Naý©öçôµ¾Q glo¯û‰è æ¦SN”Ò˜òIJÖµöо»cfTOÔZXÖ E»ëgUùZSX/ò9Mx[ƒÑKŸsbšzÝͼÛõënœê_æ)“sï§O~®„é·ù ‰iÑÚG¶ƒû ËÞkˆ‰s×|Ïþ_ØoûVÌØeoçûS4?¶o»Î)S^cýŒOAòLÎu)¬¹²®…Õ fÐZÃÝûD~MÔ¾’-­o·V¡‘o…õ"_1KiLÌ'æ93Ͻ{~·›û×ÙÂz¸ºÚ1M™”œ)% õEh· >zXþr»|poÄž-¤ïÖZûef˜)û8Çþñs„Ü?«Þ.êyîp¯¶§wÏG;/¾kn$À-‘’1å™ZƒeY9ŽÇ#µVj­´Ö03Ê4anýòÒÆ}lMü¯éàyÃÖ‹|ezXÜ'ê39g¦i"ç^iSkU7[_½3ÏcÂüô—l»‹ññeÞncUÙvZ|¶/úú°!¦/k÷ëq¶¯™anøè¸ß.ûó²{ëÂÆ½·mÔ¾`p,õ^þ”èûÃÁSPJa]¡Và ”šN»º=èêù:SX/ò…º_ü~¹«¹ã9%ò”™òÄ4õÐ>¥DN½»~ž·Ë÷u2cAVz‹Îåä{D¿‰¾ÛÍä<~zïSöé\'“Üú4= 7ˆ8O›Dmc‚~¼/•(…VJÿZm§©ûmªÞFe;äœÙï÷”R©œ~ßkYÀ=‘’“R_ØÖÝ©µÑZ!¢Qk£”€e9Wâ䜙ç;®®®i­±ÛíÈÓDJù¥î3ë“÷æ´Öú#3ý×Ç+÷ìVµ“³÷€ž„ÅJòîÐZÆ“Ñb"Fß)ÆD¿YÒ“TDDDDDDDD¾6Ö‹|YNA}AýyQÙiêaý4õiûäiLàÛ©£ÞFÀlòëh=gLîç”F«;4¯T¯xµÞaL)3‰÷iÞ±¿ºæx<²®‰ˆ åÄa9Ñî×àŒ œu-cª¾6¦^i­ƺ®,ËJ)ý²««+v»=»ýyšîUÏlÍõn½7ßskÏÃYüx0 j¼‡œmÜ‚+î•ê½ÈÓ©ïkÔÒ.±=oˆˆˆˆˆˆˆˆÈ›¤°^ä‹p™-[““;Óè¥Ïé~Wý”§¾ÈìÔ+pÜlÔæôåT·²Qïbf}áØÖhµ’“݈ä”ä´Z{ˆÞúj¯­VÌŒ]žzX?OLÓLžv˜9÷j˜”28´Vû±)áÉqs¶ø|) µ6úéÛèï!~«PJ?PÊÊñxäêêš'W0zí/{ÑúB³½âg;«`{X\,ÔÛ+yzÓPŸ®·ä`£èÇ ëg ´J«[UζOKô }¥^çå ~…÷""""""""òÕSX/òÚªo¶ úÝn"Z»Æ~ž˜§Ì4%òÔC|·EÛ½‰òí²Ë϶Ee ­–Ó×{8ßhëÒ'ù§©$H™uYˆÚz'þ4‘r†”€Ænš˜§‰ˆ Ôœ3¥BDÅÂú›5Œ^7c6‘¬/[Ö#µ”1¡¾Uõô·Zue]ŽÇ…v~ÏóLJéÔ{o£Ï?¢wñ½_ ¶[@ïŸý¼ƒí–“eÇ,³ /ã  DËPÇS¾=ø Šˆˆˆˆˆˆˆˆ|õÖ‹|AŒmaÓÞßžó¹bf7Ï\]_ñäÉ5fvª™9Ošoõ7ÐGéÛ)·7£w®·F­ ÞµQëÚCóÖ° wÒ›1çÔú±ÐmJ}[KN˜Q[£€¼á÷µ–þfO>ÀMç…rÓÖ}ß·½WáômîÍ2qꧯ¥pŒŸ}ò)­ŽJžQ­Ó—ËŒ?­ýÚô^ù8’8UçÀ¹Ú¾ÅyBßÝ{ Ÿ/_ÖêxŒFÊÎ<÷é~KÎqY©õÁT}èy,""""""""o†Âz‘?·s²knNÎi,´šI)Án·ãúzÏõõ5ûýžˆóDù9¬—+Ô lØ#L¯Dë½ñF©…RV¢Væ”IÀdÎ.eæ)cÓ„Ù¨×é+ÍRÀÖñk¿oÅø1jnjTRKDëSûžÒ¨™éršz/üè~°S˜~¯§­½ï~܇[åsΘ۽Z7 ìbZŸÓÇçÒ?oX?8Ñú‡íf<9ÙHãº1ÂúÖãþ)ýпº.•ZÛÅýˆˆˆˆˆˆˆˆˆ¼ ëE~c¾/ôj§…d§)Ÿ&Ò¯¯¯¸¾¾âêꊔS_uL”w£—ÞÆÇcRütôີ¤—Ú'àK-”ÖhÑ Ffwv)±Ûªo’÷h? - 6ÃRO”Jñ¥–Ã2¦Áƒd©×Ü´FŽÆDc—Œ«ììv9ûäAřèÍû}틱ÞÄÊDfu(}ýZÊÚXÖ•R+¤Œ§ É{­N©‰VË+ÛcÌ`š'Z«ÜÜÜp<¹yñ‚÷?ü§ï¿ÏõõÕ謿 ævîªí¬ƒ g%§…t·ú›Ö¶}g£ŽhTíŒïìÓþ~ú¬aH€³®K_tVDDDDDDDDä QX/òs î…ëq®sîýîîFÎÆÕÕ̇ïHž2Éýro½6÷j»¬Ô1œÀ1œ´—J[+˲p<®—•¨ ÞQŸ¦l<}²ç£Þãý§ï³»šO½ø½ê¥gÞa”¬¥²Ö•µ,¼“ö,kbYW(¥rl•\ F#Áè½Ïdëõ1Çue­­‡ææ${P‡A£Œjœóâ¸>%¦9³ßÏì÷;`HhÖâ´ŸûMŒ}—Ëí>öU#ðè—7Ú©û¿i¤Ô—÷%bLü÷ýŸÌ±h´Ú(ʼnXûm›™‘¯žÂz‘?‡Sll6Âz'%'e'O‰y7suµçÉ“k`«…é]êÛ¢¬s(}yËNôÅ\Ô­4b­”ca]VÊZ¨¥Rׂ·>E>í'>|÷šï~ð”ï~üOŸ¾Ï4%N…÷—X ÊZXÖ•ãj,–l×Äquî–µp48¥¤„çŒå™”K)ø’úcSþnçîý$ZÝjnúAƒ5··7Ì»Ôïv3ó¼ëAÿ˜ôÖúZµÛ‹Ñ2¢ ë…8íÔ•vïqž÷­Xò>EoY¯ *a$‹ý&tÂ_DDDDDDDDä«¢°^äÏ¥—ª»õ~twÇÜNÕ7WW{vû=¼ Ÿ*ë,žjôÚ Z©Ôee]ʲPké½ò´Zñædw®ç‰ï}ç;|÷ç|øÁ{¼óäIß>w°ûý÷ÔF]Vª‹ÁìÁšàèÆìŒ7gYW–”8¤ÌÒDKNK†§Ì"X–…/^0M™¬ÿýßÿ}þå¿ü—_Êmÿ¿ówø{ïïéYô­ÔÃgO§„§>¥=Ϲ/&{}Å~·£áíþ·Z_ õ±Lج‹Áðe]9.¦gbj IDATG–e¡ÔµØ­µ`µ²Ÿ¼{ů|üßûøc>zúï]_1Me-$s<¥{÷ѨÔ¬Ñ+nˆ†Ù„Û¨õñD¶DòL^ k£Zv;ÖV¹;¹ËÚ©ªæ5{ì2°oãáÀ§Ÿ~JòÄ”'Rʤi&s죵‹}Ób´¾ûÇ€^[c#¨Ýý›)÷ŽúVËX ¹3ψÑᯰ^DDDDDDDD¾zþ¶?À/+¨ÿ²o[¾ŽÎÕ*†án¤äLSî ËΙý~Ïn·cžfRJ§¡öËôs…Π·°y»nëXוu-ÔZÆ}7ˆµà<ÙÏ|üÁS¾÷øà'¼»Û±K‰Ô«0…Ý{›-±Ë™}žØMýmž2SJLž˜sb7e®æ‰ý<±›2»)1%'$ öÓÄÕ<³›úd½{1y¹í};O`ìÁØzí åî¼xñ‚77Gj­½Û?õþûf~±¯ÆþòûŸ¿ò§¶1pµ79Άðd¤ÜÏÈ9©³^DDDDDDDDÞÕàˆ|.#¨7H¶õ‰iʤ”˜§ÌÕ~ÏÕþŠýnfÎ7§ûÝVç‚mà}2|ûšo‡Î"ˆ”RY–•RJ¿k3,´J"˜w™ï~ðßÿîÇüòw>佫=ûœÉ£ &}Ž|«×éÿ £o›aF3§™3%VÁ,ð0hA«½6¦´Úï?À-˜²³›2sN,«]tð_ÞÛËÃî}?ˆÖ(¥p{{ËógÏÈy"O3ó<- Å©GÞb[h¶õðßofcS,¶nü1uß›íÙŠî·­JîLÓDmˆ^i4ϕւu]‰è9§mù}«ÂúóoþÍr;¿÷{¿§gηNêÍ`žç{SõfÆnžyrý„ë«ÖçÜ«g¢ÖËrz¶ 9¶ ý±ðjJ}aÚhÚK=r89–Z'g²LYX«\M‰Þ»æ/üÚ/óßû%¾óÞ{¦ÔKÃr#"Adj-,k@«=¸?pŒýœy²Ÿ9ïXì|ða{¬}Ͻ\³}—#Ÿ~ö))%Þ}ç]È™õاìw»]ï©©¿E:…öÍ s°flÿsœ[•PÃñsoþv¿8ÆÕÕŽ­ ¥pçêjOD£”•ˆ ¡RŠ~DDDDDDDDäK¥Éz‘ŸËyª>¥tZœtš¦SŠ»_^ýá°ùè^?OÔC¯tÙ´ZYוe]h­ž&㉆E#;¼s5óë¿ò]~å»ñôkvÙ¸ÞíH1Šg^Z¼vÔì˜&ÚËZÈžHžð”XÊðÇ«‚•ÒGó§`_gjƒÒQè×Ãð’Av£Ô¸Ÿ¯²Mª7€R¹»»ã“O>Á}â»ßý»Ý·ßÎû³ÙiqY½õnF%>ïw'çLmýìÞkŸÉÓD-•­²GDDDDDDDDä˦°^äçdÖ'áû[b·›™w;¦i ëíTy³-¨Êx×?=WÄŒÄ/&àkk”ueYŽ£âå|]wãêÉßýð}~íû¿Âw?ú€÷ö{¦€išH<˜¨?`@k­/<‹í Âú´Ô1ž‹-,æ)³ÖƾVÚXˆµOºW’ÁäN1aùðþ´,ìé ÅvfADÿJ)•Û»;ì§?e¿ßñÁô©ú”?쑇ýõf|žƒç-2l„õ¥VJ3ˆÀƘyšXÂh­ÑšÂzùò)¬ù¼FÝü6MŸs"çÌÕÕžý~7úëÇB¨Àéç¬þ"t¶‹Åg·ÕeA-¥OÖ/ Nàf˜Ö‚ëÝÌÇï¿Ëo|ÿ—ùÕ_þeÞï {3R^ÉsZžv›Ü?mÈé¾½5>&þÛø_ô“ØÚk‚`j]ËÔhT‚»¥x420¥Äâ «õ^C>÷–—=³Ôo§Dk¬ËÂóúŒO>é‹ôNÓt®îyÚÖ—ùÝöÁç_6N·‘r"UǫӚá9gb"Œãñ¨ÉzùJ(¬ù9FJùTƒ3M‰'WWìæéÔ{ŸX·Öî%È÷ƒz;>‚æÖ Ôʲ®,ËJ-‹ 5¾óáS~ó׿Ïÿúkßãƒw®I­anÌÓDšÒ˜–·—&Ñ/·?jÈF#‘# ~ß×çÞ3ý:©1MÁ®A­p8Þ@mX RÀdF6Ã1êçÙq±k¢ß_ ¨uåÓO?c¿¿bžg®¯¯‰Ãú[Îiš~$õfŸëÞAŦ䴔h­RZÅÝû"·a¬ëJ­UO|ùÒ)¬y•Õ)9»yfÊ’×û=××W\í÷ä± ë)[6'¢jZÜ K~±Òé0†ïÝHN«+Çà Çå<‘1ò”y÷wøõï|—_ýð#>¾~‡wv;&‡9'æ<‘|Ælë ÷1}Þ;×£5Z«DkDƒJfxÊýEÀÞ*)M¤4±”•µVXŽÔXÈLуúi ö󎶬”²âÛÀ=Q[ƒ‹ùz¸XXw|åbØÅ”}-¥÷ó~šÂçb±Øñ>.&ßÝû‚²ÖFµ­%"Ú¸FëûÛ°à8)yJL-A j ÂúÙ»iîÿ ìEDDDDDDDäK¦°^ä5ÎuïNN©Wݸ1åÞUuµ Ëf’ûýðØ Ç­wÍ»;æ6®Ã½zó.G¤ñ>z` ¸“'ÞÝO|ðä O÷×<™fö–Èɘr•1÷Lò>õo½†}ô®7¨F£‚·qtÀ0Éz|T;]?E£FœÑ5ï·ëANœ'R Ü*‰>QŸÌÉ)¨açÇvšžçþb»÷¾8.ŽQºÓµÖ¾)õ?‚v/ìçÁ÷^ìÇp° ]tÚGœï|›èè Èöžz#g§U'Z¥E?ðs&—¬°^DDDDDDDD¾t ëE>‹‘ö°ÞÙígž<¹âúúŠ¥Droݘ³³Ÿ×óŽ«ifö²'OøxK)“<û”kí´=1Œm­98¸õÖ¿pê¨?ëF¹nŽà>ßÍF™ z¯ó¹¼ãõfÐÆÁŠËä~+ßiã Æº®¬ëz/¬·1±¿ìØÖ¸¬Åqú4}ŒÀ¾m¼‡'Kôð߯Ï(¥„§Öï§;äœH9“jQŽˆˆˆˆˆˆˆˆ|©Ö‹¼Â©Â…^3M™yžH9±ßï¹¾~Âõõ5ó<õ™vêjé߿ոŒ)÷GïàÔ 3Bñ—Þ &v»=û«ó®oÃ9$ïaý4eÜ2)ÀÞ¥Tˆ ζà¥w¼GÃXæ£Æzhnf$Ï@íF7ü6½ß'ï{pŸ=(ɃVƒx)öïœs/þf›¬o-hµ²Öu=íÃ>ˆ ¢6B{kЬqhuTØ{¯ÂaÔ5{p&ƒÙÅ¢µàÉÈ‘(¥Qk£Y¯/J)3M•µ$…õ""""""""ò¥RX/ò*Ödu7rNLóÌn¿#™°þšÝ~ONc‚Ýb ÓŸ§ì“nð0­¿ ‹Ç]ú-Oî˜EÇÓÄ4MìçSÎ}º=y?àn½²f›|wO˜÷h‡p¶Irïýõ8xàV¶)u£ÑõÞÆóàŒzž,‘,‘=ûm¸Éð¾bn‹‹Žúñým»­ˆ‡»Û&ëËJaýÆ·ÅoGÍN´Ñe¿­Î½‡¿WÕ÷mhÍNÓõœÖóµÓˆ8Õõíëû¾ÑjЧ‰ûœ3¥Zk§ƒ¼f!_‘o:ý7ˆˆˆÈWOa½Èk˜ó43ÏóiÙ«ë+®¯¯Ù¾úQ@Oedò#ä·S Ë2ÿìûÛ‚á<õéy‹:ºÓ'öû+æyGÎs¯¼I~ñ¾Ÿ{Âløv~ =¼vì´pk_ˆµoëù €™…iíÔTsÚl»x?n#§ÌzžÞ3þJYWÖe¥ÕJÊùÞÁ0#ZЬánD³Ó¾]¹xúzØé>·°~ü5:Ìô}Y=ÆâÀ6~ô·¸ ë_>Þpº]‘oÂkãw4j»ø]¹øÝxì5ë |zß|Üoë B³iŒÓ‹ê·[üb?‡‡`Dðò©O ãD¾u/-c­%s¿7Ä’Ÿj_õ¢c¯xyúÿöyé»¶ wïg}ŽÊÃû÷ÿòml炆~Œ"""ò–QX/òº?)̘çÖ{J´Öxò¤×ßìv»Ñ©^ Û&¿/¿×/3}ùωŠß¿¬wã÷)zO jô˦Ì~×ûñ{@ŸÉ¹÷è§ì£®eäØ#Tm—ùxëü)mßÛß ¿êÇuÜZ?ã ³‹àªU ÁÚ*¥UÂû|Öú>œ¦Þ©ßÖµ²Fé=ââ¶£/vÛ*­TJ)ÔµrŸÜoÑψˆ^{óøì¥-5â4ißûpÎ? Ûªˆ‚Ób¾ÉýâTgHô°¾ž˜çozôP‘¯çëÙ½Çó¿E»¸l¬\œ)ôç d^ÿ[P¿…4ãçx= Aó±=ñÿnùÅÞ}U(5ÎÖúƒ©€‹úµ¾ˆùéuÒ\¿ ßJçµt~ŽßäG~öóW‘ê×âßü<ÆpÂøoÃþzÜz…àé:~Zgé4÷Û?ÿKô˯yýßÛ¦}­¢­¿F5ö>Ö!Šû·ôÿ¡ç¶ˆˆˆ|±Ö‹¼îÏ‹Ã&?Õáìv3Ó”pgLÆçüÔ^út ¯l,>ëÖïÇÌ1w¢ø¨»Éç.ûä>joÒ8(.þzì‰všžz݈ÿi²ÉÜ 3ÚÐZ/Ë9m»''ÌT'ö­Ñ܃у÷èÛ>åŒy¢´ ÕF¹7¦ÿþûY½èô§¥õ?#ë#=^÷ÇRŸÛ‚.üOå?~qî¯ÏNkíT£cãÀD«­OõGÓ/‡|ã\þŽÜ«áòt NbÔWÙ)œùbóm"²Ÿ½rªµÚk³Œ±ÆDYÖ"hâû ã©ÿû£,Çx¥~öV)Z—Cä[ø_º½þ°UÌ÷>ü±.7}#˘õ °ôÅ¿»÷ÿæªõØç Ì1?Ÿéãã¿[S(."""ß ëE^óÌÒ&wæiâújÏÕÕžižÇmLÿÜŸë_[€n—ßäNÉûD·'ë'Óaqî¦O)á9÷Åes>_6ÞN7þê?ÇÎoqžœe|¾UÀxrR(н4D×Ãs'yŒ~{˜Zfï%#'''gYWjk}QÞÔ_jÖRhVg”×_œm=RÏÓÄ4O¤)Ñhc²ÖØfkã矊‹É-ß‚{3Úƒ5.nî=°O©ÿñè£f(ZPRÁ«Óê› ë/Ÿg¯ RïÎÁƒ'åŤÜëïÈÛ(.^§âò9uªDyx¶ˆ}aÏÕ­ZáþI1vÆDg«e,Øíçßãh|ójZ.÷÷ù ¥Ÿ5küðëçßô—/ùÙÚK·ÜZ´ÓG jÕÈoìï5?{fýþsÊ^ûo×ßÊëî÷|ë_Æ>ùrž3îFö‰­T&ÖuÅÓ„yŒ%Z?ûÆúCXOÔ®ÿ{ì¿`¸8êoK󱣞ÇlT*ö3/_ϯqz¾‰ˆˆÈÛEa½ÈöGÄå¤éèyïžý´Ü!ëA_|·eðþGßÊ'¹Q[ãj¿Ç¶à› äÄq­=8°§Q)'òÔ»øïa8¯ÚÉ”ÈG\ìç‹á¥ëÞ?Ðâ>~&ÍñÚî-þ[SÅš½‘úïn÷ˉ.?;Ÿ·p–žOaÕ|‹Œƒ]ï½ÿ”÷ÞïâX4Üàxwàæö†ÛÛ[j­lµ4¿PdqÿEÀÓ4³¿ÚsuuÅn·;}Ï4M´õÈñpËáî–››k©ãu6¾™}êöàw7ο™çÝ2B©Ë*.^^q›ŸïÕ"ü»Áúþßï˜R_¯¤µ ¬•eY¨µžÒVý7ä v:мª".^þ÷e¼tà,~ÆÙ^óGîÐÆSûâ?>к._»§9xæúɦ<e9’“±ÜÝÞQZëC!fÔ¨>W>÷¿/.æ ¶g¥Ì<︺ºfš'j)¬Ë‘².´Z¨µ×-zì™øVW¥‰ˆˆÈ·‘Âz‘`žN»MÞk3Ü)O\]íÉÓyÁÓxEà{91jÓ Û"¨Ûé½Ûb¯)9yÔÜä©wÖO9÷ZOà Ëéà÷d ¼Oÿ›÷໲穹ËÅU/ ì"¬î/ÐÌ>ÞðÒ¿o|˜cÒ}›u3²f=`ß‚ú<Âúëë+0£ÔŠëZI¾öƒ§Vüó>ôœ˜æùtöB؃=k÷¿ãœçß{€çÇ¿Ýò¶€ý1ÄÀb[`‘~À¡Wá8ÕÇbÁn§…|kmãÖ¯ò™9Þß F¶†o??ÛNÒý@’ô¾Ù8Í<†©Cø[òj8AÂsâ7þâïðüåÿ“œ 'ð¨d*³ÃŸüÏÿÉÿð‡üðÈóÛ;Z}d ÿÁïÞëî9ìÁ ¥FÂÓÌ»ïÄ÷~õûüÆoþ/|øá‡ää¸Á»ûëís~ü'Âþ¿ÿÆÿûÿ•ç7·×2^¯ü4aùÍ Çœð„yêgQÐp*Öµ–^Á/­òóß×9$S@ê¼óîû|ï{ßãéûï’=XŽw<ÿì3þôOÿŒ››[þöÞìI’ãºÓý|‰ˆÜ3+kï}@‚à"pƒ(q3q4²™¾ŒÝk4ÚÕ›h¦7Qfú#d|ù*õ(¾Í\d²««¹„$JŠ$ béÐ{uW×–k,î~Ü#2³º ‚ ™ÇØ(vuUfd„‡{øïœóýÒ4õ B-o¢Ü==ÿ”üg\0i–þYÅ›²['ç …«5õX²Ü±ˆˆ›%¹ßûäQiëqVÆVE ¸ùµÆÍï£ï³Œ_È„„CbdÌêÖú½.I¤H§C„ÉØÝÙa'›PƒR 1ssâûÉ(Â7{B¡kMzkëœ>}šV=¡HÇŒŽ8Üßãð`ŸÉ4%/¬O,,cËXÆ2–±ŒeüÄR¬_Æ2NؼDQDE§<¯¾2›•ž±,JÃÒy¦Ì±zg‡[ð$ÕZ{Ñ7ò¯§”¯b—ÒobÛÆ`òSä ö÷)ŠcŒ¯è×1B(œc Ú)l¨\s|—²¨xÓ±Ò8k)²œÜN1Ï…‚Üú²¦8©Ñl4˜¤)L¦d…Á)…³ ¡BiÆ' ”D:E¬´ÇÜd¹)0Öxè$qD¤I¬=G'X‘uHƒá¸"àÏ›‚ !J‚„V§Åêú­NSUyúS­µö‰„ã"Æ‚æ>ë­µ©ásnÀ ‡Åa¥CZJ³Y…Å9‰1YzÈ¿ýó?q°{Ÿ S˜¹¤ß±K*ÞÍxèÖ ÛWžæsŸûMº‰BÛ)÷oóúË/òüóÿÈ8OB¿eÿÇ2–±Œe,cËXƯJ,Åú¹¸ví—/_^žŒ_÷íK0ZUZ!¤ Òš$©QKêa\V‰IÊjÏã$p_uþè¶BJ¿ÁU«i] øÞ`ËP«×H☱RXç(Š‚"à ¬§ £Êjwð›v¥}ÅxÐ`]ø=[\ÞÊ=•”žwo‚-”BE*/JU5pÆ:ò¢ 7™)È‹‚¢(ÀA¾_ƒ³vV­-<_D:ˆ}2¼±¥Ùky~üûX_ŒÒŠf³N³Õ¤VKáóe—€”­Bâå¤M£Å‚•Õ6¯4¯-E|‡Ÿ`ÁI8.`óÝBWïç¶ÑÍõ„1¥"Ÿð) K”´h¶º4[-–H L6foï“Ñg,3ê¿ô¹¥Ò`¹õýÕb„ô:!nviõ×è®whJI”§¨lD ;½ízL$E˜Õà]§ræKr]97j5¢z—Îê&ݵ.u%‰ C”(Wìvt‘²éÂ|[Vç‹_¢ÊzWuñTÈ!‘qµ­S\¹t ÛkÄ.Ge#ŽvïóÒO_$Í ¦Yuåﺹ*ùw;"$RFDQF³M« ÓØ2øóC­VCëR¬Ï±ÖT8ß%çÿXVÀ¹z¥2 ¥Hæ<-Ü|'› â¾gȳ ÷îÝá‡ÿþC†£ó¥ünÎc9¤~ѳÒü|äçe!t½CÒìÒhÅDF¡Š‰–(, @Ĺg2(}HÞÍ…X#“Ik…z±Ñ:õ$B•È6AõÎù9Ñb—éže,cËXÆ2–ñ+K±‡|÷»ßå{ßû_ýêWùÚ×¾F«ÕZžœ_·MÌúÕ Â)%QS¯×i4h­qÎ /g©°ñ ;éRŒ>.°¨À§÷õ²J DZcŒ!Ib:µzi\–‘9Ó,%/ü¦á·/yQ€5` á…|cq…ë0YÖ¢¥B)1CÞàsmžQ…íñÆ«ÆYrS9“tÊh2f’¥¤YN–å乯øÌ C1Ç“öHxÿ2óëô…ÊÜV†¢-OôÝ íN›V«I”Ä ®xU[¨šWŸºðêo²Y´XOv?¢¤Äc3éü¹ój!ì Y$¶%¿¦QŠõˆãˆz£F£Q÷Õà.Åâ«»˜±^ÅóUÔÈ,”VsƵ3Ñ^H/Ž%µçšLG-â˜,ËÈŠœ4’Æof EšSXƒA`¥¤°Ö‹ï™Á•¢•¢YoÐnÔ‰µçÊ;:Ò¤A¬·ÆRãEú<ó"ýtÊÑhÈÞÑ!Ó,%KƒX_8çôÆšYµ»R(­‘R e„ Â÷Bò"œ1g[K )Б¢ÓiÓl6‰"]U¼—%øò˜(¯TÉT6³/å·NØÁYg«„Œ‡E:³ÎWÐK/*–H"’BÈ ƒ#ç„{g~Þb})ÔÛ2¤1`¬@D5Î\¼Êg¿ðE>ùì'XmÕÅ”×_yl¼ÏáÃ]²©Gx¡_;î3™€Éî2M(ò¬:¶ G¼·çàÝŒý·ðQ}7W÷ƒ-#ŸÔ6fƒ¿¬?zã [)²8 BzƸ”bÁÖâ‡VéIão¾“P`qÖú„H ™¢ (Ì£ÆôH¬@NQX‹pn)Í@Öˆwœló|)˜‹÷ý>wouŒnÎ{áÝöËçŽe,cËXÆ2–ñŒ_[±~8ò­o}‹çŸþÄßÙÙáOþäOxî¹çøæ7¿¹¬²ÿ5 )%Q¤t¤ÐÚ‹Ñ8ã÷ÈA\Çx±;¾¥š¡‚G­T"}ø`ŒA Ÿ 5hwÚD‘&užšçž]`#›NF¤yFî,Ó¢ + ò<'O Lž£œ žÔè÷z×£Õhë!%R© ú,Y‘3MS&S_M?9qptÈ4ËÈBe}Vä8+¼ äœ7áUþ¸u¤QJƒöf¬¾âïÑiFï˜^£ˆf³Ak8Öšÿ8ùBJf² Ahâ±À3ìý¿xÃY¼±Ö"fÃWÊ ÎË SÉ:A IDATÞf}ìßß°,BIÿº³ke± $„ ótùL')3~íðfìÖX¤’Ì[o'ªã ãÌZ®‹xË{g6¿Ë7›æÿ­\“ª)Nƒò™„—ãX¨V­\‹EyùuT åŸ+… ×ÿÑñï`v/Î÷àóV7a5ýª\й¹CVŒpÕI§†nwÕU‡5dA:°÷à.¯¾ôãIJQ8° áT¸¿ç>ÃÜ-rÀ2û ±07Š79‡‹"u0Jxûç`~~o²æTËÂ\wŠP³DÒÂÚ"ïÇS&ƒœ{›‚®›KXÍæBYÍQ‹Bòñ„ÅBR‘E7ó_ý=üޱÙBÌÌÍäø\jÃ:zBbáØíJH–øçDžæDôp¯–¯P‰o2žÊN­rÌw>*ÖÏØû‹ÉÛ¥H¿Œe,cËXÆ2–bý/$þðÿpáï|ó›ß|„Kßjµøã?þc¾ò•¯ð­o}‹û÷ïð£ýè‘×XƯvá+í#­}U²˜¯õóÂAÅõuuL («³¤òÚJk¢8ªªÞd…kñ?kC•¨Ä>/êXáÖF£ÙxÄxp䋤BEº´†(©!¤öÊÖs‡-ŽÂZ†ãQHH:6*‰‘¶ °–ãÁ`4âàhÀ8K‰â˜Z£I{¥ç<Î óy^`sKžç¤YJ–eDqìYËåç­„71«~ âËlSéÿ㫚µz^¯çÛ÷£È£ œÀZ†Jk‰µ6ðæ©6deÂCJ…SeFX+Ã5ðçS ›«ª* °ÖÁìÌW±ª¤V¡â^Ä5a'^á•ø½ÈïÖ bj­/]åÌ™3t;-pŽÂåhgpÎgSdPøŒ³X“¢¬®’K^‘[Üô«PAhŒõUæåØ46`ªÚœK¥ý5°n±j¶ªÎv ¢ýqÁ{7xqÁ&Tð‚)+¼­7U:ñ•á…|ubOŒA}L,.ý$|‚¡(r_ͬô1!1_ÕîQNQà†/´Åbòb6–ƒ0'¥:A¬ô?£µÆ/rJ…êùGÏ…+u¨*·d&%KÓ9AIR"t6¸*2«Ôï”@HW&sü]&)]!Âç.%¶ Ï TTd¥êK­fÆÓA|—J â˜<kþ” Ê¤IHNøŠû¹÷1I²yä•8öýEÁ¬ì†Ò'Š8Ñô9ÆéùÙnýGx 󆻿]ŸãZô›¿ï¼K·õÖ®*ÇZÖ‹¥ã*áêÊ.–ð~Vhœ…¢°&ØOÏ’²KÀw|Ø*©Z‰ò!Ó#‚ 9ÕœqRµ8'Ÿëp[k±EƬÄIY™ÛG_M ¤ÔU~™ü-Rà''ªŠþ·ºÌÞ_ÀÍy¶H–±¾r»<¶ª«ÀºEAú] ¦Jž¬DÍòµ‹"e?ëHq PQ½œÃ8M”d WǤY³¾ë@8‹-¦dÓƒÃ]ŽSŠp*lT˜{ʵÝwÑQ&ô7„„¾5³k"dX‹g>bî{¾;Á†Ÿ“9Cb!aY&ççáùûÚÍ%A…+×SNâðºRi¬‘8[àœA(@tί5å<î;ˆÊ¤ñÉ“E•Œ²&t´Í:¢„ <+ÙGDúùD¡ÿ*qfÜ#âóãÖV¿î¹“ü¬s—˜Í%b1¥åÅ|凜ñÕí³ç²ÅŸ·ÎâL®£¿„yÁw˜†ä™”URÓÛ• _q'=«K„:©S°Ä–:s]l ÓYÆ2–±Œe,cK±þƒ_ûÚ×øú׿þ¦?ó±}Œ?ÿó?ç/þâ/øîw¿»-¿f"}ù5Žcâ$üײ5:l’˪.¶n¾ÊÞReµ‘¨*ö£8ž«¨A|4Æ, ¥˜©dÐ: “ q¬)j1qapèuŠn»I¢!V›ydEEtÛ-âH¢”=mUy.ç°!'‡í5ÎͪmeUqcg&R(PªjI_DÄ<ž¯î¬#/… ¢š<óšó%´G7„ÊYklð^Ð~Î BÇ1B$„˜Ý«AºxÁÒú”ÖúÄ“"¡TPJ^4·ØÊCºÒV‚¨œgi¶E%ÔöM‘1IydL©¯I‡¤Äu€19‚0ÌaoÞ«ñw<ý$„@̹zšOèœ/w—R‡DНÚAX±„ûÍZÊw´àÙÙNFH©ü}ªRT>‘&ñ],2Ì{ÞÓC"•@ZéÑ8%BÎ𔞅¹\¡Òñíá%ª1R!÷¦÷ÌcÅrñVgûç:yœ ¼Yÿ¥(À¤(W2·Ç^ø{B¸RöפLdÆI,›†uÀEªZJ±±LªV¦ÁÁX·¼EÇÏïãC†1äœCE‘C­Çhy“Á 'vJzSõÂ_…/RHœ.ÅuSUîVXH[£gÝ^‹F5A̵¥GHøZ ‘ÌhfïMœ`B,7ŸÉ1E5þ3K!ˆ”"Ò­æ:‚ʤÀ1“hyµ«ªÀ…DªÈcܬÅy5O”É8k²p?–8:MÏwäpþ«Ì`xN0!)P=»•IM¿^—É-0HNˆê¹À¦Qq  0†u-‰¥ é½•>ýÙç:âÁ`L&"P1nÞáú«×¸yë6Scƒ”T #‚¢°•1°Šb””´Û-Ö××éö:´;]ÍQ¤6ÆcfYNQ°³³ÃÑÁ!ÃÁ!Y–⼕avdu"ýýQV jt\£·ÒçÉ'ždccF-%$‡‡Ü¼u“×߸ÅÑ`€Ò++}¶··YßX¥Ýn •"^}åŽFœ½ôÝ^8ŠX„³á~µŒGC~ò“sûÎm†Ã1Æ:ŠÂ!œÿøOÿÈÁá€4Íg×ÒÀLP+[.½•««}úý>v›F-!Ž|×Ba,Ó,c2ž°¿Èþþ‡{ìïÞ'Ëó9´Žxç"°;–d¨LŒ¢¬‚-‘VÒ ]6OA(¢z^·Ë©í-úý:Ý6õF' Ï3¦Ó ƒÁ€<ØÙcì1J®Wà¬ï`°ªôuUE¾ÇmÙÙß+¿9³IöŒ /À"év;¬®®°ÒïÑnµè÷û$QTfhBr¤`:M9:°»ûÃÃCG‡ ‡G¾Ë¦JÈùžqLø™U´»·¹’ð˜ªú÷s5›;v—þêÝf›F¤QÎ0ŽÂ}0"Í‹* êDqÂÊÊ*+ý>ÍFÃw›sïÞ]ì>`8Q‰Žk$IL«Ù¤Û^¡Ñl cò"£È2Š<#Ï2öövÇe¶ÔœØBÅ ››¬¬¬P«%HÓñ½Ýܽs7ÌÙTÉãQuy8ARoÑíõèv;tÚm–éxÈÑÑ!GGG 'ÆÂ#«q9.üߢX³Ö_%I’Zn *Š|¢./Ȳ SäL'cÈÓ”,bŠ|–쟓óßyg±jz¶LŠã™·JVŸO8cBÆ(y¬™ó¾Æf˜"ÃþÅ9$%®LÌŽ×ͣnj¿·E‰M‘HÇ5bSKÚ­Få ÇIHäŒ)Èóœ,Ë(Œáh0ààð€,K«q!Ê÷-¯q5¬C÷BÓëuY]]¥Ûñ×u2st4ààðˆÁhHÅ4[-:Ý.n›$ŽÁZÒ‘G6ÚmZÝZiÀ#䇇¼öê5Œ5X‚À¹Ÿ¿¯„››?g•ò‰Ô1+Ýýþ ÝN­%ÎF£!‡‡·óëý.±tgn¼ñ:ÏÿÓØL(dL§ÛãCzŠ>ó W®\`m¥C,-uiùÿýÿæå×ïðñßú"WŸ¼J¯Ý"²å²‚½Ý{$2e:Üc2`Xãf^ XÜ‚æ+ê[Ý5.}èãü§ÿú_9wjv-F9‹°é “ñ€—_ù~úâ¤ød„’Ú 8Rךôú}Ξ?ǹ g8sj“³§O±±ºB§Õ¤žx$IVŒ'ŽŽ†Ü½»Ã­[·¸}ë ®¿ü÷ïßc0QëÔŽS“$[1§å•ô’?Ÿf¬mË gàÇ–Bè˜f§ÇÖ©3\<Ž~äCœ=³ÍÚºO6  Ës†ã÷wvxõ•Wxù¥k\¿v“½Ý JZœ)ÀZ¬ñ6 ¶ä¢[SUM[kg®¬€ö"˜„BG5õ&«+«œ?w–sÏrúÌ6«k«œÙÞ¦Y¯yy2 ´Š:bï!ƒ£C&“±OX–‰„P‰î‡—})Å‘(8 ½-f]1eÒéEL#U4‡‘qÞ¼·08c+-z¶ ëí\tY­´~ ©c¢F“~¯O§Õf¥Ûcs}8Ž©ÕjÔj qc âé„ñxLš¦ìîíqoç‡û{ŒGiŒ•§ÇB_‚È(fem“«O>Á¹Ó§ÐÂòp÷oܸA^¤EF¯·ÊæÖ6Û§¶YßèÓnÔÁ vwyù•k4ûëlœ=G§»B¤ÀæSvnßbÿÁ‡GG¤™7 w!麘]±åƒDH(z»Òuú[g¸|égOo‘D›§Ü¾}‹kׯ³··ç\ܬr](I¤5õ¤F}µµ5ºÝ.­v›þJŸ(Š2ƯP¦°¤iÎ`0bÿ!{î?äáËt2¢( ß%(ÕìãÊ,í›rW?ëæ’¸3µÞ¡ª®?¥fƒ~¿ÏöÖ6««+t{êõBŒ+°8ò"gpxÀáþ>»î³û`—‡‡cï§#r/õÕü_f‰×«Z $BúäO³Q§ÛiÑíuY[[§ÛíÑjµiÔ ôB’u:31±··Çþþ‡úÕ\'„[VÛ/cËXÆ2–±Œ¥Xÿó‰‹/rùòåÙw_ùÊW*Úk×®-GÐ/yT-ËáÿI!Hb_MiM³Ñ Õl¢ë=Ö1`æLSÃÆTØ9RªüI-!Ž“À`Ÿ™ã=ÖRHÏô mºÍzƒN«Îsbõ8¢Õ¬S«Eh- Ž0Æ „$ª7‘¯’¡·J-ЉuŒŠXÇÔㄚ҈Ì`Ó3b²Ìo„mÀšcUáZiµ®pH5°ÒîBÛ·s§iJ:M+#H߆®¼¾,C‹ñÜžPq¤±…ÆXG¤"ºFšå0šb†‰ŽÈ8SP¹çι¡Õ=ŽèwÚ9OAà¤@FŠ¢p¦âè‚-¯‘ó'Êaœ?÷"OšPåKÉ’­¸ø’(Š“ŒùJäŸkPDt;«|êSÏñäÕ‹t:Í™¹®uÈ «ÞlWµ{´VÏ\@&5¤Öé˜xzÀÿþÇ&¶˜ Tì½°3`ÜCÕ{ô7¶ù—¿È§Ÿ}–+—/°ÖïÒjÕi·›Ôk5t$‹q9¹ÉȲ”<͘ F d“!ÿûÿÀÿ÷÷Ç¿üàŸ9N¥+QQ \lc-¸ˆ(nÑên±~î >öÜg8»µFl Êf`&t» 7îÜÂEó4ùè'ø½ÿò{<óô‡9½Ý§ƒÊ´Å”WônÜÙÁ$M.=ó4—NŸ¢a vàDŽûnrt÷§\{ñ'Ü»³C†UÆ©3õÄ ÆX5z›ç¸òÌgyösÿ™KÛ ú M„…¬@šœ[7^áÎë/=Àdã ^ijQc%Q£Ãæ¹+|éw—gŸý8/œ¦ÓŠè·›´k1µH)Ÿ$³Î’fÃá˜4Ë9Øßçþ›¼øïÏó÷ÿÏß𣟼ÀƒƒÖ)ò!À€¨-È}e²ÊКY7JÙó0oè'½ébf3jª† k¦°Pïrå™Oñ¥/}‰Ï|úY.žÛbµÛ¤Qˆcí±$Î 3ûGûì?|Èk¯½Î¿þàGüÝßþ/òB"LŠtÖûõÚ0y:ƒpvfä{Œâʪ|áEF”¦³ºÎ‡žzš¯|éË|äCO±¶½N«×¢Ù¬ÓmÖI”B I-IHÓ”<÷ yžsppÀþÞ.wn¾ÆÿåñÏ?ø'^xéUîí AÄCäJr»¬˜!PÞŽšZ šÌXI3¼CÙ‘õóKü  o‹@G-Zíu¶6ÎqùÒtk39"‘p³Ûãhï€ñpìqBøûAÖ!n±uæçϬӊ¡f&ܹñ µDÓìvYÝ:Ëå'>Ì©Í3¬vWhÇ ­V+Œ°¨HùÄÞdÂppÄÙ³g¸ï7o¼Á+¯¼Äp8ô÷×1'F5höO±yö2›+M1ñl IDAT™3=l“öø7 ¨#¤·‡-;0ÜÜ:8èNFd"¡µzŠSç¯rõâ)b™ñ`G1?àõ9¢ºNsnJVˆ®õÓ§¸té2W/]¢ßjS‹’$AÇ1H…Ž#ßYR˜àûàŠœt0b2òÆë×¹~íe^zé?ÐBîÙ ž3oÌ~ò3Ëqª{d¼ô»röU>DV|xƦ-$Z(”Ôh¡Tµ"àjl¨®/‡´ŸÇ¥P 9àt‚ª·h­®sõêÎoo³Ñ_£Óé!•DkEy‘5/2_UŸ¦äEŠ) ÓtÊÑ`ÀÍ7^ç¥ý;;·ïú÷ÇûŠ<$yNHŒPÔš6¶Îpéê´"عw›ñxÄÍ;wXY]çÊOqõɧ8sf›zMÑЦê’{·o “˜fo•­ i(&¥U¸û5^~ùUòlÀÌâ;$?„¥ô˜án$B%8ÕÝ »~†í‹OrîÜ6ÚŒP LJ¶À[c’•IRcmcó.påÊVWר5j¡3Óϯ*Šü:Z¬ñ3Ef°ÿp‡×¯7xíõW98ØÇŽHûuwÆÞwoúüâfrýl¾*WvhhdT£ÕïsîÌ)®\¼È¥‹¨×õ˜¸¦Q‘b2S¸c òtJ:q°·Ç7nðü¿þ™D½ggÞ#³*Ï’Å#ÃÀ ]±n±±¾Å™³Ûœ?¿ÍJ¿ÃÊÊ*Íf‹(J|‚|Á_Á‘¦¦Ó1i–Rä)»pëæM^üÉ bŠ¢Ê”IÄe,cËXÆ2–±Œ¥XÿÇŸýÙŸ½ç¯YÐ.ãWS¼¯,Ce^E•‚ÊÈNø-V¨²÷hœr,‚Á¥V­Z«`¤*ÿÞóüó°ÒJÒ¬Õˆ[-XêQLÅÔk5”()Hâ™±¨z Å4“²°LFc„uDZÓ¨Õé´[´ujqD$ ›L™ Fd“-½ ¥„ôöpÖa¬ÅƒË Óá)Â8z­6Y–“!Á¯0Ïó óSah„7 ÃRU¨ á‘<2ñœX¥u­ÑT£­EÙ€™;/U5».ÿö±fr ÆfïàÊKæÍg=¦§ªêZøÉ÷¹I:˜A–FÅ!ŸR¡™Mƒ!Q! ÆÁVŒ>AQ˜€eÈÎ q˜,ɨª°Dר8}‰§>ü Ï=÷[<÷©OröÔý^“F]!ð qyŽx–¥©'q½Æd4¦Ñhrjk‹l<¤×޹xá4yæ)þúüw^½¾ÃáØ`òŒÂ¨9Y.p‡Q¡È„¦‚áÚ!¥£–hºë›\¸ü4Ÿyî7ùô§>Åj¿I½!mNJ†3û{ûüë_à³_úMÎÏÉVøÚÇ8Ö\8šÍõLÇ®ȹÚzWšá ºÆêæiÎ\ºDo½NÆY”µÄÊ'éööwyõå—ÉÓܳۥ‘ZÅÆöY>üÌ'øòïþýÄ3ln¯Òn&4bAM "‹DPB%Ô[  Ûn³µÞãìV‹íÍÛÛ›üÝߟ»;‡d•sžú™æ¾y?C°’ˆÜ‚3¹ezë<÷ù/ó¹Ï‘g?ù .œÛ¦‘ê‘$‰KÄ•gÜëHÓ_Y¥Û]aeuƒ~“^«Ï+¯¾N¯Ûö]L‡¯¤@ Ï«/1Vžkïÿ]"@E8å+[u\ãÜ•ó¹Ï}‘Ï<û)~ãé§Yí÷¨·b¢º&ŽÒZ”óIPc-…µˆHS¯'¸iN7Jhõzln­³½ÝgûÌ6ÿüÏüã¿ü{÷öÈ'á´7AÄ3||/Vñœbß‹bgøãŽéJsa+ð¾Q”7:/«yCIE³Ñ¤¶²Æ³Ÿ}ŽõÍ3´Z]êQBL`ÅsH HÓhj’$¡ÙhÐëØhtÈ7n1OOH5H C„!Â4‘—n ‹ *àDóÉyL”FDX”O`ˆ`À* 2‹|Å{½ÓáÜ¥Ë`:xÖ~Àò ¥‰¢„‹W.óä“W¹páíV›8ŽÑ‘& ÝV¦0Þ3Æ%3>R¯7©Õë´;mÚí:µšC(Ëí[7xø`¿œÙߛĠTŒª·h÷Vxò‰'¸táüéßä _ø<Ÿÿüslmö©% %-ZX´3Hg‚^'±R`…ÂH ­q,¨Çˆ"oÔ˜NS¾ÿOÿƦ¹ðmÿïhXŠªyA”ãf¬u8©é¬¬såéßà·¿ø%>ý©Oráüi:­AŽp9…)<â«ìÐQ ©b"©QQ(ªSWuÖ76(¤ò•¤î1BóFÀeÞJâD‚®7YÝ:ÅoÿÎæK¿ýyž¾z•íÞ µXÅ µrß)ÓÆJ7ÛB(Œ’È(AÑ iµh´4ÛmêÍ&¦(ø·û ÷ï H'UÙ„º÷îvwï—Ѭ{ä=ݱIòøwf ž bøP Q­ÍÖæi:ëkœ?µ…ÔŠñ`»‡L‡ßXá¨7›¬¯­Òïu©%1I½N¯ßǘœñèˆñp̳Çdš[½ïMTß™«x¬²X~®ÙëÍÎMÀª{LŒõŸ;©7Yß:ÅSO„sg¶Xi·It„Ë-ûìïs4’å¹µ 2Žˆ“„(Ši5;lô7ˆ£˜ÞªOÕjš"O1&'?Ø÷ÒB=z½ÞsÁ~î#ºGÇ ˜{{Á<þfþ¨Â9“¡lÁ8ÅÔÛ]Ξ»Ì…+W¹x齚 +0£á„ƒýCGÆãIÕI¡•¦Vk°²²B¯ß§ÙnÒn4Iâ˜f¤Ð@šæ¼vk‡Q ¹[ìذYyQ „¤Õl±µ¹A§Ûcs­G=L†L³1‡KÇ §9{“ÑáqfiÖ"œôÌøÓ§OÓj¾€R‚¹j”- bÊ©|^ ¶Î†±Nb‘4›DqL ¨×jDJ¢•D©ˆDEÔk‚Â:&Æ"¤"VŠXÆq‚Ér„u()iÖjQ„’`ò‚< †nYŽÉsoüª¦ðÜU[l^`ò«r/Â9‡´-B{ñ4Ž"2­ƒñXc‚ж„¢¬„ôÕ±ZkÁL,÷x)5RÉu…ò:”x”ÂÉY‚˜3t3ÖÜe4™;°B"lÁ›wØ 1NǦP]§Ùßæ©š/ýÎWøô'>ƹí Z1Ä”+pY X¦YÊÑhÌÁ`ÈÔ:"ªÕHZ-Z&*RÖáD„jÖèÔ›\m6Ù\iAa˜LsŽ~ò&›U¤.&]f]-‡Ù•~ŠN«ÃÇžy†'Ÿz‚³ÛkԥǦ8ø¹QL‘*rãIÊÎÁ®ýô6O_¾ÌúÅUŠ*QãÍÿzý5Ξ?ÏÆúkܹ?ò"ïõ ÄødDŒŒÚô7ϲ}ú4ëë+(‰ï¾À!DLÙ{x›×^»Æµ×o“–'êȸÃé'>³_ø"ŸþíÏrîüu /ôÛ"c48äðð€£Áij±*F×›Ô;=ºÝíZL"@¡qƒ­ÓxV€Í'ìíÞg2ÉØ=È|%réš,Ž à‹·X…m˜3ô)ÒŸá+U½Íæ¹Ëüæç¿Èo<û\ºpšn3ñv¯"`LV08<`82Í ŒÓèZ‹F«C»ÕâÒ•«4š-ÓÔ›þ ñ6ùÀewCB³»Í¥§?ɾüŸøÄ3O²ÑiŽˆiRòé£ÁC²Ì3îs+p2B%uâz‹¨Ñ¢Ùiø–Ð4ºëu”„éà€ñÞ!ÙðuL§øŒŸI[¿`±Ç͉p‹ò4ó÷—{;8¯ÒäSctW7½YíÚ ¢Hy°s—Û÷îñúÍÛŽ(Šàÿ!Ý~ŸK/rñÂ67Ö‰#IR¯³ººJ~ö,»;;LÆSÒôû6fÅ /4kws©ñˆèýÖç¿jœ(…àPÛêt9uæçÏ_¤×NH”$›LÙ»ó€Û7orëö-îï>`š¦äÆxŸ‡HQo6i4Ûlnžá‰Ë‚ÕÞ +í„No­û002Ž‘QŒïdpoû˜ß[!_¼í1Uö 黢¤Š©·VØGáOט‚ÉÑGÓŒähÄÁ`D§®)´Oèö×Öèõ:Ô“˜ád†¾b&&Wå}"Q³²Ú§ßïÒ¨Å(r9ƒýíï’NF¾“ÂJ„RÔêmNŸ»ÄésY[ß Š|Âp0àÁƒ\»~{wïrttDšeXç³õI½C¯¿É™s—¸páëk«Ô’q¼Š”6OÙÛÙa:šbŽßãÕOx³nÆ…ÌÍÜSHœÀO÷ûœ?ŽÓ§6i7ë[N¦ ¦c^»~×Þ¸Îûwe ë‘Í$asc‹Sgϳuî<ýÍ-ÎY@Jê1hía]µÎ,˜Ž[@ŠˆZ­ÅêÚ—.]dk{ƒV+ÁÙ ÿ?{oÞ$×užyþÎ9wɵ²²ö*ì ÁU %K–-­¶»mGÌô´#fæÓÌGšˆ‰ðLD‡—vÛÝmÉ¢Dk!’ (Ô¾feåzï=ËüqN.U(p‘DI‘/#¨"2óÞsÏú¼Ïû<í³Û϶ØÞÙã`ÿˆöYÇïGÆæö‚ú\ƒÕµUnܸÎí[×YZhPJË$K’—ï½ÄÉÉ>ÇÇ»…7@ÇÍÀúYÌb³˜Å,f1ëg1‹ß«ÒšQØÉSà‡7L ÛÿÑá&`«.üNFž1.ƒ<ÌÏ–%í´gƒ:ç X•¢T*SNSÖÇ a,BŠP¾<ظ A-©—Jôã˜|˜a´ëH“ˆ$ŽÎ2Èž-뼤LžåHŠBر~ª-4&+0B!ãØKÛ8šZOéöŒö8¡:Ðá¥t‚滼4÷ ñ¼(ˆóœ(ÈR7eÞ žÁ>RÒ³v=Kjòy0’Æ‘ÏIUŒžp/fÄ:¦üâ„øt|Gü¶m”¢Ý>ãƒ_¾K§uDZªrëî=¾õïòÝ?ú·ÖD YŽRg4{;ÛüÓ?üïÝ¿Ïa«Í°0H {zÀîÖŽoSÎâÚ+/¿Ê_ü/Í·¿óMn­/Q¡p$±Àƒ~›,òôÙï}ð€_¼ÿ!'í2©°rí:¯}õ-¾öÕ¯rc}‘r-A›ˆ"à]iežë·^æÏÿÃ_rÞ-x¼}ÌÉiŸÂ,\ÅsmíÆÀ½gÃZëH¢”Õ¥eV*l\ß`¡QB1D‰í$ÚZ´6$BR‰ÆaŠœ?ü€Ýo¼Ä«/-z¨ÁIŸ8aqe—^~…Õ•qï>"š’‘±BLò#„*±²q“åÕUõ åèÅŽä¦Í€½Ý'ln?á¤}Ž±×º%J•ßù“ïóÖ·ÞâúÍ5b刜!) ºÈøøÉC~ðƒòãw~Æ“íC´LX¹~‡¯þÁwøþ÷¿Ï+·6Xž««­ ’´Â7ˆÝ·xÿ½wÙÝkqÖ>d˜åHåxØÁbœtºX!â5ëý ÄÈP2ò’µù%^zõMþüßÿwïlШ—H¥C‹µšH‚AÒtùùÏ~Æ~ô6}ô•ÔXÝx‰7¿öM¾ý‡ßacewîØØ?ôX‚¥d¨`ò/!¥W¾ªÀ‰UY¾ößþã?ãåW^£¹P'!Ö Èú]öžðÑGðOÿým¶¶é 5¹¢„åõÜ{ãk¼ñõoðꛯÐ\h+!¦œÖ¸uãâ»ÌÖ'›ìížqvv„ѿΘ ¿!ù‰/{®ù€½m·îÜEXMQôyôè¿|ÿ>Û»{´zL”`‡N;ˆ"ŽŽŽ9ow8ïôxýW¹~mƒZ)!-¥,.Ì3?W§Z.ÓŽäZsÁ3âÊK ëWX³ÂM™Oc¸î û™pµ3~ü»¶§˜›_`ýÚ æˆÈXÙ€{çmv·whµZô‡¢$!ׇŠcÚçgX§ØÙ>dïŒo¼õuâÛ×X¨§¤i™ÕÕ5NO9==æ¼7@sý[Mîˆ_¬÷aÇë“$.—i4—¹uûe®o\g±Ù¤’Æ»û»|ðþ|ôácÚí.ÃAV”*äyá+¥àää„í]Þ<ÿo¥ß¤Q¯‘ª„…¥¢(âþ÷évZô9FÈ@‘˜ò~&ØÞœÞ3°+• iS©¤ìòÉ'øèáÇ·ÎÆ•}‘Tô5dªNÜ:cggf%¦¬J”œ NR—iÌÒœV¤q¶ÈŽüœòþBŽÙßõF¹F•rI!Ì€bاwÞfÐëbŠg8…Šbjs nÝ}™FsÅHéÀj>zð>÷ïßgssÓ›dkÖzbÊ•Ù?8æøøŒÎù€×_[·×A*——)]ö·ŸÑ9;çì<÷„Œ_£Š“8fqa›·nP©¤(i±EF¯ÓæƒûïñðáÇìîírÞk—Ë $Î9ú(NŽÛ<Ù>d}ï˜ïþÉÿÄÊò2¥RB‡}¶‹ñ¤‚y0^–ÄÔjó¬¬mpýæuJåAž<}ò˜÷yŸÝÝ}zÝY¦ƒ'ÈHLp´»Ïγ-žmïÐôxõå;¬./&‚åå%®ßØ`oo“½½00êg1‹YÌb³˜Å ¬ŸÅ,~§À|`ÁÇÑ”Nº"Š"â("VB8ŒÉÒª©$I!¦$nä„¡-ëÝO­‚ËÔA«-yž¶š³´„4J¨Åó±"UŒÅC,#¢ ¥é,$Rú\ólõ4ŽÆà¤ c’H¡„ÀH’­½îûˆëœC*I¢R¬ð¥5SŒ2DR!”@ áÙtb(¥<e N)œõü-¯=ïh2è 鯱КápˆÎ ¥JíVEt;]æÊedšxCÙ©¢s°Á#`ZKÞQÒÁ9œrãû²Îz¯ VØ1Ë^ˆÉs6T<8dfF™oÐ(D ªFrHélœ¿Ì°Ãí#CÞ=G©„¼€õÛ¯ÐÍ4…qãPð ¥Èìn?ãÃûï²wÜb¨}ï²ù¬?D#ÑZbUÊÂÊ_ùê×ùÖ·Þdq±NyF}d4CÞ?çôh·ß~›þøîø£VÛ˼D)iuŽüð§|û;Ä÷¾÷]¾ó?`nN¡T” ãʬÝz™¯¾õ ¾þ‹ùñNWhçYìÓ0¡³S@½ ìu'©Õêܸ¶‹Rªõ›óxkŸû<àéÎ!gÃb~üãŸqvÖÁè:O?d{gAþ5j%ÿ™Æ Bª”•ÕuÖ×VhÔÊ´»C¯÷AC‚ˆQÊêÆ5®][cq±ÆQNÊjL1 9O?dóÉcý>ÚV±"F¦Uj K¼õµ7Y_nRРܢ {=ž<ú˜þÿÁ~ðCÞÿè§ CÂÞq‡ãnAR©‘HGrë µ *.#eŽŠ"æU^}å.?ï!Ÿì¾¿H)°ÂÅ“q2D`]pàpÂ3h£Ñ2…¤ÂõÛ^zèúõ5*åÄóÅ­C9C"-ÖæìîòÿÍÿÃþõÇáÃ?áÃGùãÃïóõ¯…W_º IA%c^ýu>z¸Ïö~—¼3À¸ “"üñk£Nü%p¾(4„˯ÎT2]¢‘–zg]¶6Ÿòþ»ï²»·G§×C[ƒ³ÚƒçÊ—DY£9kŸ±»@siÉËu$1*Š©–K4æêT+eo2YL9’’­B„•ÕÏ»ÏéÊOk°OVÚ°6xF®(V“Ï™¿‡ '´¯Ö)WëÔóäZSJ#̰ËñÑ>»[›œžœ0ÈhcÑ& ‰_¶¢8§h88Øc{{‘¹rDäæ©¦2x2x}m_9¬žGU1_rŸ,‡âÊgýet7<9â´Bcq…ë·îÐl6I”@g=ZÇûìíl³¿»Ïéi]8¬çz릭s môqÆ'Ë$µ*o¼ö:óµ!$*VÜ»w›~·Å³í¬±H• ×â¦Êíz'Q’KÐÙ€ýÝ>þèCž>{B»Õ"j¬ƒ,ô#cl”3ìvØßÙáεeì\…()SV°¼²B£±Íþa ç,Öi¤”$J‘Y;©çp^‹.N½Æ|s$Qà ƒ.ýÃNNŽévúä¹ÃZ?CWÊ––—Xh.& Æù€ãƒvvv8<Y”Š‘iBsa‘åå%s$ š~ïŒí͇<{ò §G‡è,#N[¬ ×AžåèósØÛãý>àͯ¾ÉJºˆsа½›¢O1>«TL’T¨–kTª%âÈ¡‹g'Gîms|¸O¯}†1aÊÄçðUr@‘ùjƒ‡ÅÌUËÌÕÊD*%Ïs„ð^P¶ŠnW$û„˜ø³˜Å,f1‹YÌbÖÏb¿•™˜ !Ç•Á^úfò¬Á"åM^¥Ä2bsÕˆ„îyAõÑÁË:çµÆÜö²4i’RIª‰"B 9èÅ#½7™sDÒ3Ú±ç ‘ò)¤¤”&DR‚5‘ŠpΆ”»ÐJ0Ä ¬±Xm0…Á*/o#¥ ŠÞŒ{!fĈ …r¤/JY/çÄXúÂXCži´s^ž$M(Š댗u ‡C7-¢û)ÇK¥ädZAˆÇ†öðƒäƒÿÓWLøk3Ör"ùÇåî#íý©:Á´Þú—ÖI«sr]z@LcµÍy?#3í|É o+„ÀiM¿sFëø“£¤pjãDŒu1Iyž·ïño}ƒ{·–©§IH@99Ã~‡gOxïg?åþþøé/ÞckïˆÂ´L°2ÁÉÇ#Z§ç sG¹(í IDAT±Ä›_¹M½¬H•ë3bÊe^¾÷ßûÃoòèþ}òáã$bÊîa,ošß9Æ¥´ÂRS„ƒÃm>|Ä;?ý)ïÞÀæö^†Œ$óeÁñÑ1^«;[Oyöl‡ãVÒz•H‚3k©J˜›_`eu…Õ¥y†ýCÆRêNLU “„ÊÂ"«×¯±°4O9F##Â`MF§ÛⓇ³·»ƒsc5N ÊÕ*ëk¼rç:kóU*‘©m¯ƒ^g››¼÷Þ/yðà#v÷¯ÏN_3Ô‚Ÿ,-qçÚëK TK)åXÍï’$æö›¬,/FŠŒÝ”6u°.øx ÂZ‡q`¬ެõ†‹"ITm°qû%î¾|f³J¬'Å$–Øåîðî;oó·ÿù?óÁƒG´;C„ˆÉJ²·wÌÞÁ):š#©ÍQ®5¨Å Œ `ÌU £»4Î%qZgn~ååkTÒ)lðg8gÙÙÛâ?ÿï¼ó dF¢ôž“pÒâðè„ã³sœˆÎR$©-°ýyçˆóãmŽOÎ(´FJÏŠ—ÂâÄe™­ÏØL3»Å¯ýF§1ùs|'#gщÀÌ |oÅ8yèDÚSž>ù„g϶èôzäÖWšŒž—Ô¬aØpÖnsrÖf‘TÄqD¹”’&1RLi» Ø>ÎÈŽu¤Åør§çŽI哸”^˜ñÅ4˜Q©ß{•رY<Âk'¥rûÁè‚a·Cç¼E1ìƒõ†Ý…±ãê6*— m%³[›OqY‡ý¹iä8o±¿¿C0ðŸë®HŠ| þS~ã.¤gÜ Ò6_pIýG1i¥Æüâ2Í¥ªÕ ‘ÈôÚìî°³µÍñá Ù°×LkGmí³rZk´)ØÝÛE–ê¬oÜ \ŠQ1ÈXqûÖ{[ÙßÛ!Ó~໊kh¹`=,TDœ–@8†Ý6»Û[lm=ãðàLk ¼Vðû%"¯«Ÿ÷»œîÓëvæsT£©b—i6›ÄÑÖ¿gƒÄŸ›°·e""­Í1¿´Äòò"q$€] 9>9¡}Þa˜åëÆÉë,Ã~ŸÝ-ºç-ÒØ¡L—Ãý-vvö8ïtÑÆ]ì¡ä‡ý>­V‹ãÓSλ}æ›M¯…ÇÔªU’$ ¾Böb_yAW»`8<½ó’$)QŸ›cnnŽR)A© —ôÎ8:ÜáähŸa¯ÚKßø½•GáµÖ^š&sØÖ =dãú5æ›óDQª,'Õ`+X%ÖJ¤ˆ‰“qƒ »tÚ§ô;g䃦ÈDHwÑý×ä’¬f8è±·¿Ë‡Æ´ÏŽ)•$½n›“ã=ƒ¡7ïu|ùžD³˜Å,f1‹YÌb3°~³øü§Ð‘ÌÍѬCJAÀÁ=P/%J Z*¬ú³Éô)¶ð4+Æ@s¨ ‚’JHã„$Šƒ1—õ€¬›‹èŒ Ú zk‰”ôR …O¤i>`FkŒÔ%Q2$"F’2ÓgGw’>Ö–3Øqyy!%)†9Ãá"EU8œpLF8_à„PÇŸ%ž3vœGJD”Ö1År.Èæxf¥”`¥EØ)°êyeçñÏâJ ã7ÂLí…$á„À…‘7ÖÃ0mo'œC†¤‰ïwAkÖáH€ µæw_~•¯å æËjœ rÂbMN»ũßç¿üãå퟼Ãþá ÃÂbe„uœã0ùO|H\i0·vƒ¥ Äb Q‚XH´‹()X[ßà;ßüÿøÿ68ïôÝX–å¹Vuö7DD‘×x/†m>z÷'üÃ?ý7þþŸÀñY^Ï DÅ1Òf¡Ê$3 }rÀ³Í-6·YZ¹C% ß`!b*µ:«++ܸ¶ÎÁÞ)¹vØ©öv@Z)±psƒÕ›TkU„s(ipÖ!„¥È‡ìn>cóÉ&­Ó3ëÈIcG­¬èí²¯úœEáÐÃå4'G{Üÿ>ùä ǧ§äE±G(LÁ°}ÆÇÄÁÑÑfhc!TÈ+++,.,PIÓÐAÁÛÄÅzi+g-΀ zûÖzígÔ› l‚n¿OÜUç—X½v›Õõ ’¤îö—÷ØzøÿòÇ÷ïsv>À#” – 9ý^—ýýC~ôöÏX¿ñ*ëk·xõf5˜E‹ç íi jz4¤¥*µJƒrZ!‰J„¹Oyy­ÁpÀy§Ç0ƒ"˜Ké>9¡Ñ½ûOs¿ZF™!ùÙ 2ëÓkÑiÒnís¸ÀæÖyðjÒzh7ºÞ/b<è>(å·Š9qÕTõyQ©B;$φíy¶r·‡±6|öt&ÀŽ4ÌÀŠ,§Óï3, ÚB"AŠàÃ"ÅØèÖ]–°+“meý”î~í©W0ò‹à_Œ*TREX—ƒ³¡ªÎK¿Æjg1n¤n}²lìa£±Ù€ÃÝmÚ[—¡ó.¦ú1'ÀJ1¡zŒ©*~“,Þ«ú¡ûÁúIÕ‘ŠRÊÕ:s MÒr‰H+2†Ý6»{íÒ=ï"]`bñ)ß+èvúììpÖîÒlÔü8W°´Ôd¡Y£\ŠèešQÖÑWEL¯q!#™’e=ÎÎZìíîp6NI !#~^ôNá“õéžÒnµè.ÎS«”cK£Ñdqa‘j¥Ì ?D9éöF‡DáÈ'6B¤j&KËË,./¢dN“뜓ÖÝaFa½”áHl0è±³µI§Û%M’"‘Ó=?ãô´EV8œˆ®x¢n<cfCºƒ½Á$y¤TD±"Iâ|üìªùƒ½¦EнGzÐ?Â3‰6XýùKì­sc1ZcµÄE ©¢pz™0².Ë;1b¤Àu¬+!Aˆ<8ISòÌkü^4L~¥¸ ¥ÿ™H¤Rã÷Àz´l…1|é¼KÚøŠ-<ŸÞ Ø~.< éJîÅ“Å!ž“ìË—s¤“AïÚ1ÒP÷ì0#¢š¹Ô¨WÎzößÈïÈÈ +7¸{ç.wo¬ƒŒPáõa.8::âÑãÇ|ðð{­sú…—·pÖbí¥@Ɉ“ål~ò˜¼ýßû³?gn.¡œJ”Tˆ(%V)¥¹9n¬®ðÚË·9<ëÑÚo{‰$ìDäª'”ÅtÎÁæÇ¼÷οpÿ?áððB¤X©pt¦=@úªŠÀè>[›ÏxÿƒG¼ùµ;$$qD$„3Ô ®_¿Î+/ÝáÃûÑæç0T§ÔÊ\¿³ÁÍ—nÐ\˜#M$•8F˜a4çí3Þ{÷=ŽöOr2mQk»tO7ùåO:üŸ¿|‡$HF9«1:CI‹£ ?èrvÚb˜e>Q&¥°J0ìõ蜟“šR©äe‚·„Šê|ƒZ½F9MˆekݨûÓÁ[^Óð©q™…•uÖnÜbqiy Spq`çì|ò÷ÿíG˜<óƒÃ©‰°§ ²N½C|øˆ7_¹Ãë7_'мœ˜oDÉŸ¸`0ñ? zú>%JDÂ{4t¡š(ÖnÜàöË·Iÿå˜LbŒ `‹EEÂé¯A‹'÷ÊÁãù׿ýŠ^§µO°*Á`y¦œgÖ[§qÖ€Œ™öÕøâ`éà÷ï2ÜôþY ­¡‘n@§ÄÁÑ»û»dU>NdŒdiFs뽦ÐtûC²B£Ã…ç;ZK?OÛ¹ßü²î%ÛÆ9Ý‘ ¿—\†YîË{ÉT*%êÕ .+fC°ÚÙ Ú°.ºLRBcó.C«±6ÃèÁTJصQû9g/®$¿°þlúËÕ_¤/ …HÊDIRuŽj£ŽP£3ì°CÖïpÞj1è°ÆðœÛõ¤õ§.+a œ¶ÎYZjPNSÊRPNc–š çç8mÉõ'¼”ÙhÏ0^C¤O² NNŽ88: — °R"ˆ²ä1NExX;ìúìïl³²¼ÄJsA£9ÏÚÚKKKl>ÙÄÙ"6B œq'QDZ®Ñ\\fiy•Ú\òœ¼7¤}Þf÷ð˜³nFnÀI…±¯2Ô½ö1ýn't‹v²‡ñ ä·\¨ú«ÉŠ‚Á0cå¾RCH¤ŠHâ„r)ñþKBO™ô|±}Ëh«“Ä õ¹:ÕZ¥ Š``rƒ.½^›\ç8_ã0U-eC…ã¨Å òžáèè„•ö€ÅÅ2¸!ÂåcÅçûŠÂhÈÂØS–æçëTJ)‘à¼Þ½$·“Váƒ3œÆˆöËQ£ ë%Ïœ¯¼¥)„d³˜Å,f1‹YÌbÖÏb¿á½n¢S,¬¤BJçñ[y `Ÿî @ rÌà ?;PÎKThcȱ =IŠ"J£ñ©é“š±ç™ÇñR9‰q&×ÁˆõjÈâ9Ê…$ÖŠH{ýú‘ÿHJÁ9;Ýbâ¥+¦´-F÷š(E5MuÏb–iéJfDNWLéÍ_Þ‹ðÅRJP ¥”/Á&èòKor¦”Â8ƒù„jˆç¾œI¸Ãëß;g'À_² Îó`‹…)g$Óò|»9”sÞRÍúŽáF÷ã8WX^¿ÆÊê2•’ 8¿?+4˜œvû”½ý]vöö)F@ý˜óïËï¥+ˆeŒµŽ¬ßçxï€Í­m®¯¦ˆz-`¯ œF)E£9ÇÝ»7¹ÿh ¹ßžR¡p/LÈHéûr?Ëxðà}<øˆ†™ÅDk‚„uÈHátqÈç ;[Oyÿƒè þ‚J4’Ò–Ä2!­Ì±´¼ÂõuÊq„Ã10âmv½QáÍÛ7XZœ§RNˆ„S m†Ézœòî/?`ïð”AîMí„l-zôϽ““ RJ‹\µ…¿Ï8ñcGJOÂ"\N$ ÖhŒ5^ÂÆ8‚3NEäÚëì á<31˜éMÓ"§õºåXQD ì´ñl] ÉUJ©6”*v_Àw`8Øßaw‹³Ö)ýÆØxœð %È+$ÃnýgÛìlí2È_'ªúgk­—âÁzýê‘\µ^ĆŠa¯G·}ưףÈ9’ ‹±8nݹÇüëÿƒµkwøÑÛïññ'Ï888¦}v†Rclа°ˆ¢OÞÉèôÚ€À(DÖ"Œµ$#¯ŒßèÿÝK×Á õ=80èžÓïvÐÚxÀ’ ¹>º¡é 5Æë0…Ak‹¶ƺÚíbêM6¼éWe~ö|ꦌ1Ü…j±p¯Öƒz˜“õzcPR§%VW×ùÞŸü)>dkë'§'˜<3#À{4P¬ÁšÂû¥¸öUcN†u_†ì¯¸¸î|ét °W÷ŸÑœÀ)åJ•ùù&J9¤08W ³>ýN|˜ûê°QBîh9Ñí=F[N[mŒ»Nœ¦“ƒ…JµLc®Nµ(߇\ØC]ø$Gžet»çœŸ·}‚Nܨ½­¿7JÊŒ“JŒæxÿöYcÖÑÖËÔ”ëeÖÖ—xöô±—S1qœ`LÚQádB”–©ÖªT+ BgDhÃ>íÖ§­súƒ‚†d¨žt!}Þ‹£yù>´ %œ*­¸Pp±¡JaÃ^kM–dvü5Š$q!Å¥äþ¨Ó;75&‚4Ðs&Ï£„¿BE år…r¹Œ ‡t»:ÝsÃ!#ëø Ÿ  œ5©øjFk§§-ŽNZ¬¯e¨Ø¡¬ÃX‡qíÆù¿; ‘tèbH·Û¦Ûí2W‹‰ãõ¹^yí „JÙz¶ÃÑÑ ½î ìÿB_E!£—Ðyî++B3DBa¬ß׌’Í3yúYÌb³˜Å,f1ëg1‹ß˜þ¡9Šq¤ˆ#_2-%Ha'`×€ß]ÔWwS6wŽ+Hâ¢*(Êóž®ú#{~òo%ÂKปOzVpü6Zc­g99!1Ö£®ˆ(òì}ërÏ¢wn@=U‡ r,&”Œqß1pìÆæ¯ þùSŽ eÉÊ Ò("ªÕÈ­ƒ8&)%ÈHµ¼§%u¤ò%æcc5ðšún¤³=j߉€1­µ¿çAÀQ ´t#ìXnÅš`ï+¦ÌŸc›º`.g¾ðèÓzdc¹$[ñ¢„ÐV 28ã[ÒA"Hy¤)‹++,.ΓD¬ ÏϳΊ¼ÏyûˆÓÓcλ=Œc¤Œ?%Ãä°60’…ÄåÃÖÇÇÃëHWCŸi,ÂY’T±¾±B}®Øën<>F¯‰ ªµ½åÂó^›‡7y¶{B«=Ę,{ ï—`]09öÉpœñôÉ'lm2ÿò<•J„tŠÜZDTa¾¹Èk¬,58î è ¬/³— •T¨Ï/r}m•f•jI!¥¹‚N§ÍÞÎ6ïüˆƒ³CÚÂè ¹d(ò«%”×T.•IÓˆR¢ˆcAµR&I#”’ÞôÕúïJejÍ%–—(—K8ÚŽ€÷¡J‡¬™ &ÉjÄ 'W.`bL’<.L&.PØÅ¸wyÆa£Ñ V¯'¡¢g ¶ËñÉ1ǧ-†Ã|bþéF†ÐÒKM`}RbÐåü䈓“#zEABä+‹Â†$`ò9£HÅ Ïùɇ{» ^®{Ýz5vê%^ûê·YZ»Í»ß`{gŸÃÃCöw÷8?oÑ:>áôø˜vû”^çœ"Ëp¶a0Nø©©†*¥ s1Bê§eµ>’íÿï1êM $y?'d>‘2NôÊQöÖÏ%!›ëF”gAQ8´ñãDE¾Ï+áPXÆ'{Æ3 “Dâb Fk¸bœtu72~Ÿú?Ó\}/«¼ œ ¡áü䘃ÍMn­.QoTQBµ:Ï˯¾Fm®ÎÒú*‡‡‡œµÛtz]zƒ>ƒá¬ÈqV„!i¼O ‰Ï—8u¨gҷįԅį¸çùUÖ³°–G1åR™zµL,!Âb´Opä}o"ïõQg ˜¿$g72v·ENû¼Í0bÅB)„STj5ªõZXëå$qŽÀZã`gNcÌ€aÖ£?è’™OÔ1Ë#c’ ¥n˜ºI·Ý¡Óê0èåäi‚”‚j£ÂêZ“´,è÷ÅÈÄ…5Zø ²¤R£9ß Y/“¡LFvÞâôà€ÎY—<·Xö|#QøÑ˜±DìûD“TJTêUÊiJ*%qùä–~/Šÿ;BRX é «4›óSäùI•‹›6y¸Œû;.Œ‰`2ö„O É'”*ÒR)Ý ò<§ÓïÑÐÎùbšÀ °#ŸáeŠÆWaÚéôètú¾ÚFá× %°Ò¿ÜTrØé>Ãa›³³cö÷ö(ß¾FRNH«s¬ß¼CR™cyý:‡‡ŸÒjµév{ ¹.&Û;kqÆx¢‹TH¼Ùú˜2&%ˆKÚ•³˜Å,f1‹YÌb3°~³øõá°"Q‘$ Q¬ÛÈÌz1«S…³µ=¥µŽð@ô%ÀL\h+áen„Š@yA„“b¬eËP¡œð‡ÆðK)±ÆP¸‚¢(<È&%RF:'Šý}¥iJ'8çHÆ9¬cÉ—HÊñu:á4y 0¶á->Y'Öª’´”⊒„j½Fœ$8@[3ÖëöB¨ñýJ!ÑFS…7‘%€ñAÞhfZë‹æƒBx&½`<˜¢µáB­ÂÔaÍŸE/3<'‰ ¤œ°³¾,°~Ú8ñò9¬cú˜9}¹D0ôs€Lbæuêµ2J:œ-BòÇ!œFç=zç-zÝs mÐNöÞôóôæ½Æå8"Ю?`pÞÅdi‘ð‹ ¬E¥>ß ­¤“òò)£åqåÀ8d@h Ýåìü”­Ã'œ~ÞkÜð„)X¬¬ViÉNöwøøÁ#î]{“ŹB°oHdBµ6ÇúÚ*7®­òô Åñ`ˆEàdLZ›§¹¸ÆÚâ2Ks%*©@‡¤ ²šÁY‹Ý­-6wöh †äœ˜B{ÐE(ŸLˆ”gc–*Tç,,.°´´@³Q£RNhÎÕ¨UJ$±Â9q”DÆ1"J¹÷Òmsu@ ‘ˆ*%ŠË±6À v¢ÿý"(o¤9¼"žëwÖâtN­V¡^/“&Qèra¼[†ó~Nˆ6‚8V¹'¯þ6 }òA›^ÿœ^‘S¶ÊkOéƒå@¦EXãŠí“}ž|òßøÚušs D$)Š!!ŠJ”k%V“×n¾”Š,r°·ËÓ'yúÉ#¶ž¡TL$- Âxi´1(?2š  #œ\c@~”ÈV\êG2)büç¥; ­¯EÉ8 0†³ƒ¶“”»ëÔÄ5¢Z™H&Tççyy~ŽëwîpÖn³µµÅññ§­­³3ÎÛmò\Sä–|h|åˆSt€ §æÆÂRW“Í/¤~ÓÏÛýzýBH¢(&MbJ±"ŽÈY2­Éz}t^xFø´£±pïWŒ**&€¬5½A—Þ°OQhJ‰DÆ‘ˆË k0N{ɰ Ug´7Ç„ÓX›£MFV Éò!ÆXœ%F¦åë“m™ÀɈbÑ=ëÒi÷h6bÒ(¢R/Ó\ªQ™KègY¡É‹‘ð¡ vJ¹^g¾9G³V"&ïÓopvpH¿Û÷Ä€°Wôþүƀ“È($rçª4çY^^ba~ŽFµJ¹”ÄŠH %‰¥77r§0Q™RmŽZ£†žï ^_ß¹é6Ÿt)7=Üd_;¦‘ˆ0ë *‚8&NK$I §b,0ÌrzYæbJšhº«ÄïG{&¡È²‚Ì°Ú ¬×V(çÂ!#Iœ(T$ƒTÌÔSÇú€ÇIFgdYŸÞ Kw8¤—[ Ü ”£¥óàœ³—éžðî»ÿÆw¾y“…fƒD ’JB”ÒR™Æ|ƒ›·nR{¸ 'ލTaae›·îpûÆM*IB$±”D‚ì÷8=ÚçÙæ&Þ¡ÜàEEc°¥Pi™¹…E^zéò§ÿŽo}û¸yc¹Z ”b‰ Œ?cͤŠ%Š|Ò ­Äɸ‹Ú±t^ê…sd¢Ë-™:Ç-/.ö%!¤g7Ê‘aö´nïHàÀ?ïÂrm<+ÒÚðS•6!idC²ÓXM¡ 2£É#Þ^¢kÎ 1õ€…Ýå`ëc~øßÿ o¼ºN­ü&«+ó”’RøTªu "å¥Ûn3è0^¬>Tú ù©2*­S›_äú­[¼úú«ll¬R­–H£ˆXÕ>­„CO")¼à¡1+±Q‚Œ$&?ŸôñËÃX\áeÇ£àÅÏÜW{ÓÁÓ I`ìûµ$x]œ &Ô1U7*Y¦¤Çÿ,üZÈ9ÂÉÉ3Kë4âéÓ”R)åÖ­›¬­-ÅÊkÖKE¹VãæÜëׯ¡ .4GÇ,j IDATÇsppÈÑÁ!íÓ#Š~ð1íî€Âz6>B%%L¡RQn4¸ûÊüñ÷þ„·¾ñ¯Þ{™µæj ‰b̰Á«b4F„TˆÈQk—é‹ñ¸¡.ñëõF7®&‘Hé“…J)T$PrRM!¦z\‘ä¹A뀓]ê¡búi ÐF“e9EVŒëž|-Æ0Ó‰ƒ‘<¡r²Á!?ü)ó¥ä½ÿ™o~ó-ÖÖ–(W¼D„gìzàÐob(„ \®P-—½S$©Öj¬¬opïõ7øãÝ>zð€wß}—wþ.‡ tV`°¡zdzÿ…øÜÖ½ç@1íÈ}Õúò{°ê¦Á±T†›Èg]˜>Ä%–©ä9Q²,T™]å™Z?¦ŒA/c·ŸÒFc‚°ûµ'Ô S;âùï‡ì<{Ê¿â¸qó·nß`}}‰´”§ JÅD©$.ùv1ÆVçXX¾Æõ}ÎîsÚ:âà`“ããŽ)†£í¸=S8¹øB[Œ/ÐÝ¥>xùßüjŸ<ºãŽw¤Ë¬ä‘/öØž{—pS3¢›Â}{Ñ“WÜ‹3Z'‡ìííòêWîRV1‰ªP¯7¹qã‡}úýZçãþÅ1õzÕ•%õ*qv:oŸsrrÊÙÙ…Ñ âñT0b²‹(¦<×`ýÚm^zå5®ß¼N³Ù Z+SNp†a¯KQdˆ õC0"VH„ˆ)P2F•*”Ê¥ þ9:ÑÄûèùÇsQ‚jZ‡êò³»ªúãâJp¡S;ù©=jœd¸ôvyÿ“,r°¿O‘çpãÆ×®o°ØlDZç²Eš*J%?o§å KËëܼ›1èt8;Þãü䘓ãC67Ÿ0È4¹ñ2sîBµÇLg³˜Å,f1‹YüvcÖÏb_à0:9½|ñû°—Sµù#°þ"˜?ë%#@=@V!œ›|:1GLÐn7Z“ç9ƒáÐKÄ3U!¼³t©"¬•hkÑ΢­™ØúM5ÚZr]›˜ÂyKÊ‘}y³ã²øÍäŠÜó'¾P _ƒ6Ú§T”kuêóMÊÕº?ˆI5Ö5uŽ+é†ÎM]^>Åb´½Ô[g_¬ë>냎b,Y;~=gôwÉÔ÷·í<6B³¤xñ‰ÛñâÃù`ËßŨÈë†ÇJá,c¤±#Íãä)DkÚ¤xÔn Äôèbä BÇ`½"Š¢ Ûâ¦Á‹ Ó`½ãA£ ïá.7ŒÇ…D ]àèZMÞï°»ù„gÏv¸qû•zJÀâ$I¨6\¿}‹ÕÕeªÕgt:†8YXZbccf£L¤ÀMa4ZNyüø1OŸ>c<›^ 2B(A©Zçæ—ø‹¿ü+þÝŸÿ÷^ºK­T¢ ”,Àdè<'3Ž<·hm¼Yeø ©bd$)UÊDQt ™ÈÆŒ“HâÅ’SŠ “gçâ‚ãBzf½T ¥¦˜õ—>Zë‚"€õ>96ú$÷|·^â*+rt^x]øç#.ÞÓ¨w ‹žÙ:ìðö¿ä(àôð„7¾ò&·î¬QoTIR…†T%Á`;HgI9®ŒÒ8âJ¥JÅÕ î¼ò*w_ºÇk7hVëüÛ;?áÉöín3öÉ\–Gøð`.˜zþ>€@SyÊ ¬:Í’wŸr§—Êz®¼ù+’‹—Þæ^ÔžîêUXˆÉZ9Yø"¹Ê ‰¾ ¦ÉbÄÈž„u–ÁÐòøÉ#ZíSNÎŽ¸v´Áüü<õÆÕZH)ÒRÉÏmHÒrj½Éâ’dm=§Ûmst¼ÂþÞ*›O?áhïÎy—,+<ÛúíÄ—·‹yñï~…ÏI¤„º¬‰™§˜B€/Ð÷ùìËv/ºâ‹©Ãq m:¹4ZÓݤR|ž/u†îy‹£ƒ}:Ýår$M)Ul\¿IóñívÁ GŠ„$ŽbêÕ +K Ô«e$]´Zgœ´Ztz}ï¡"Ñ`ÄDwP*WYY»Æ½W^áÕWﱸ´àel„cØëÐíœstx@ûì4˜¢zÃqg¬ß' Ea²2ÇüÊ*këk4_ØÅÕ üs q9!ç.ú&ˆ+È„›qÅïG,ýñÀœÞ‰OmÿO—ó ¿- úÅ9Y¿Oûì”Ó“CŽX]Y¡9?OµZ%IÊår¨&U$i‰´Ò`^DkÈ6Vé¶Ž89Øg®Zfkg£Ö9~váæg¢7³˜Å,f1‹YÌâ·3°~³˜s\Í7sËÔ§€¨ÑOŸ L•õ D‡'@ý˜á=‚¹Æg\Ip´õÿGyƒGd0~ž o­ÅπγŒÁ`@¿ßÇ:‡’’˜!ºðRÚ9dÓÏs²"'Ës†yNf F€‘8Èu¶†ÂY #À o&¦@´ Àù‹ €1Z'ɵ&×ÅDqBe®AmnÅ8<Ð)…7Ùð—ƒîBû9çÁec ÖNôë¯Æ©'åÖR ”Ti‚ɹÊS€šs—Тß6¢ö«èÚ äÈ(VŠK<Ö`Òkë=LxG‰¦çL“…ï›:<‡ñA}ä³ „—vù /7%/±u/Þ·R1J©1Ê)ÏôÖöêfrŒ@h¯Dmm†´é¶ª<}ú”;¯Þeec°TqÄR¢Je–WXZY¢1WãtØ£R¯³¸¼Äâb“44“kŒÎѲàéæ&Ÿ<~ÂáÉ Ú:PÊXƒ¶—i®Ýà­oýÿé¯ÿWîÜÚ #Lfˆ„"ÂPè½v‹ã£sZ­.^Ÿ\¡@¤HY&NK¼tï&Ë+MJIr6>aǾ ¡ÝËùrD\Öò¾H–dTI2ÒIà ^Øå­ua¼M*^„Ï%^2ZVøä¢3v"Ëîg4že`÷“Ò÷>«8cpVr²oùçø;~ô€oþÁ·ùÖ~“›w®Ñ\š£TŠiÔêTJeÒ8!Š"¬ñÕ ‘”%1N„땤µ·î&4ª5ÖæçI¤cX é zXíP2h‹;ñ%²L—ò|þ·}˜+®ÀàÄ”9ùåïrâsÌ3î3¦•KÉÍÏ‚¹œ¸œý"óáÔÚ=ö¹˜’PyÆL†îEõ¸œm$Åb¦Ð÷•”0EÆÑÑ>§í?yÂÒÒ"K+Ë4¨Vª4šÔj5â8¦\©P–q‘T"Vçj,.7ÙX_e¡9σä}¶67i¶°Ú„™êRšàKÏå¸_Yƒà# ^zpüÂܤû„|^Bî¹ò(ƉÝé+ù™LŽ2ø ø=ÐX]ÜYß'Æó’KÎ|î6’b8¤}zÊþÁ¥rD¼A—×X\lrtxBpŽ¡q’P«–iÎÍQJ"´î3èu9>=áì¼C– Õx^ö3w„’z£É­»/qûÎ-õ*‰´H,ìÏγ-¶··ÙÝÙakëÃ~£5Ú83ñG2ÚRZ\åæË¯ð•¯}•FýÞT"öùÇæ^P´r¹™.ƒö/Ú;_ú¾T<7ϰýR2ÌM]ϹÁ+ºª5fl0 ^F¨“gt:glíl1?7ÇúÚ:”Ëe©×ëÄIB’T‰#ŠË”â˜zcž¹j‰åÅÖW–ùù»ïa~Â`xä=5f@ý,f1‹YÌb³øÅ ¬ŸÅ,Æ€“¥Ð^K9ŽÕ8WR!ƒ™”TAkÖMË^ Ïrâ¬kç˜2€ÑR*¤ ú¥BŒ%[¦ß©#7–H9R¨ÄR ”ôÂ!ÖaƒüKžeäÙ\ %Z(ކœŸwètºƦ%â4¡7Ìȵ%wŽó^—^–@^xé ¥J™8‰AÜí™¶áÌ=6u… ó)çÿ¾«8!’ %Ì5©7š”+5d”â”ÂÉÀ¨n£Š|k¾x¨‹£xb ¨5ÖŠ >wI"D ÿ|­%=N xý]7–ÂqcÀÁ]bt^)|û{ÎXòþ€Îù9ý~£-™3(”ïÓREŠ8ŽI’˜R¡I)´Å9‹Rr,×r!¤B•JÌ5ã~㚢È=€b-ý~¼È±8/32ŠeàÄOد2¿ÖZ¬±Xã¼,cÌ9‘f Ú^ÓX…Qê°6'tùøáC^zó5^{óUCÒÈ₦|­¹ÀÒê*ó‹óDgÍyW–i,Ì#%äÃa ”-ÐEÆöÎ{G§ôrˆâ‰Ê„TÄq‚ŽçØxéM¾ÿWÿ‘ëk+T#å“I„pš"ërz°Íý÷îóOÿõ_yïþGìÓÏ3´SX—Åu Küoÿûâ?üåŸòú/£>é÷)ƆWãlòÓp¸ k4ÒÏ‘‡r½^ó´)˜®›¨Œ%&8(IR)S­×(—J$BâŸPÐrüç$‘é«=|bÒû/,Î èžïóèA‹í§øçþ[nܾÉË÷îrçÎmÖÿ?öެDz$-×|ÌlM{ž|öð˜2*22+k¢Šâ:áÀi!5jµZÝÿþ¿ƒ;ÄBüîŽÔRßœÓ( Æ¬"¡*³rŠ9ÂÃçaÏ{ fÖf{p€ª´?)‘îÛ÷^ˆeï÷}Ï»±ÉêJ‡v«E³Ù Pår‰JµJÅå¼8´.(+…”õzÛ7¯óßú&'œôÎyöâ韖̿x²ÛÙú"^*÷I{Uµº¸$v}¶Ôº@'ó÷ÀÌ•¹†FëD;;_‘Å]góß|¡›ê_O.¾:™0ì‹«ºE›cB3“M»øp!iéÞûBçP¨BQ¤#÷ï7ƒÞ9£aÝçO]÷š¬¬mÐYY¥ÑrÆ õF‹f­E½ÚÀ£TH­ÞâÖ­;Ù˜<’äB“çm¥ÿÝ¿Ê eaM]ðoyé®I Œðžö¨ š¡W¬<÷tV{¤ˆð“÷UšéØFòÏG~ü£ý½ZèHœŽocŠ,Fk´öû…1Îÿ‰D]0Iù“û½]¹½$MÇ<}úœÍ £ÈÒDTÊeJI„µ)A’Pk4Y]íP.Ç(:Íè÷ºœžÓÉ,®øÂ#ᦶº"©ÒXÙbëÚu*• a ÐéˆOÞû)?ù‡Ÿðìù®7+NÝøb†‘‘¡ʌ \›qÏ(R,~ü3‹ >o‰€õÉ÷<+¿ðÌžYLŸÅ úҳł—„TÓMdÈ|eÖYÆéÉ)½ó.îßGHI£Ñ ³²ÂÊÊ õF›zkVgv³‰¶±’D¥ í Å7¤`4p|ræLê‘KÉ~ËXÆ2–±Œe,Åúe,ãW*`΄__£e¡( w “®ª7˜"i|%²°Ì Î ó £¬K±”N¬WÓƒxY9^ŒÖÆ’SÙ) RXŒ Õ²Ú˜ ÆL…s1S4=åÄc)ŒÂ¡<¦UÓÐÖPWA¯­%ðx˜Âh²"GdîÐ"¤$ô•¼fÁœ™PúiÂŒ€ NJTëMÚ+kÔ›-¢RÉc7üÁHX¯ïÙÏ}ì>ɰ(Â\ÎLEL3E²Lå…iE¯>‘⫊]éž÷_³³$ÁLà®ÅÞéÿÚÝÕÚ§÷,Ëк@)7ªµub•Â0¢R©$‰G:÷ÓùlÆýl³Ñ Ib'°jMAi0[äôû}Ò,»PQ·(˜\tŽ—ZííâM粟ÁâÁÞ,{1–"q°ÀþÁýÁ˜RÍ™ÜZ!1RU«tVWh·›”^œ±±µÉæö6ÍVk@áÌe…ÑL=öö9:í3J-Új¬šÏ”Ú 6oÞâÎwHJ1JÌ…IÁ°wÊÃÞã¯þûÿË;?ú9OwOèSÆE ª„1 Råä:d<Ñ3f=òÓ¥ÎÙ¬\¨n^ñź`<3ç¹…è埬T«$I‰Bƒ¶Nl¹@°aƒc$ŠcÊI åM"§k¯kÆð±fšŒ›&ÇŠ@J BSúý”´È¾ØåƒŸ½O­V£Z-ÓhÔÙØÜdee•µõuV×7h¯¬Ò^éP*•ƒíQaœÐZis÷õ;Üüàï}ð{{§þ}?þ¿˜Áì…*VqI!®øÓwRYPg—…Mñ©z'ÖÉWÒo&—Eu!qnŸgÅp>³¾ñªþôeÅ«®È¥±ú™âââbw׫8Ö)PA@(¥Ü=½|IgeÄfAöÿo ¯,,~ÏÕP,|$eôNI*Uvë J• ö;;·ØØØ¤Q+‡1ÍV›kÛÛôOœžr|x†K]Zob ¿zÁžWŒ½…«k/NžçäY†U±ßQE!JI(¾€Y§ˆ`Š ]R·ÿfYF–e ‚ý‚½‚”ó1±è}b/Í¿Ï^ý0¦ÀbH'cž=ßçÞ›cVZ5”Œ˜f«I«Yãðè£B¢8¦V¯³Òé tÎdØçäøˆn¯Ï$ÍgèÂmɵ¤T£ÚhS­7)•âHb‹ ÝÓCž<ø˜ãýŒúçX+Lç‰ c ¶+”ˇ*éqiŸÇÐA|ί-L(ã:î´Ö¾ÊÝ' ¤@Ê{àL|o8>3ŒW¾|’ÄÄqì Q¤ð)3ûЇß±7§àû)ƒ!+4Yš§Ã~Ÿ£ƒâ¸L¹Ö¦½ºÉÎÎë+Í•$$cÚ­6Û›¼xÖ¦wvJn|ÂS,Åúe,cËXÆ2–±ë—±Œ¢=3±>Ͳ9÷]Ê™X/g¤Tæ¸_YÏEúì¥s¨«›þ75+´Ø âþ¼uß8¶¦Î‘Ò ¤ ðÜg¼i¬¶ŽámÄœ9o\N¨7Ú Q€-„G@8Ñ^ãZ¸U t€ÖÆx¬ÿAVˆ\b„ô¥¯êWJÎxãvRºx®—NÔJ‘T«tÖ×iuV “¡_Å$.ˆ³âjÝýê㥸hÚ+¦ñ— 錵¥qé…Åô¾Xƒ”%§â¡öçCq‰ZÏç<ÿkÐÏ[ÅçÏ F£¡ØÁ)a@T«°½³ÍµÍM:õq á°âóHZ/}½Ô‹ó9­Éç“yƉ±Ÿo~æ/Xèvø×\¿®\°íˋӂxj/¯[‹¯!®žûbÆCç%^öUâ/(¤ ˆ¢ˆ8IÃè¥uÆýÕW€³P<ÅçÈiÂg¥ðvÓ_?ö˜ {pr†¨ ¤ÖèpzÚ#Ë ®_ۢݬRŽVV:¬¯­rЬÓ;é’J5bAý7‹¦:C9iš2Ž©Å1X‡-«TªT*e‚0€4çs;æJ…ˆbªÕ*Q!…œž†#†Ã¡V2>±ÏB¢}ÑëB̪Êg¾*–—xè⥬".1#$y6áx“.›ë+4“2‚ÂáVÚ<{þ‚‘VÄ¥’«àn· ¤Àä£á€£ƒÎÏ»dYæ=x¦*;œË•µF‹rÅ}Þ 0¤£§‡/xñôãAeµ3OŸÁ~ì»q‰U%Q* Žc’8öUõöÕÏÛ—Ÿ½Þã…l‡K¢yA–åÚõ¯`…c‡aúkj/yN¼!V­V©T«©Ê)ä¯$í_n¡ƒç*/)ÿž³4%›Lèž îQmìqr|Ìk·oaoß@®t¨„q"X[é°³±ÂóGä†|–<[Æ2–±Œe,cËXŠõËXÆ/÷Ü)äË8/M&Œ5 £¸ ÖËgÄi¥—ôìíW3R ¬¦-Þ¾:ý¢QžõUÜ®ºUCn $2(Rj¬(V`\s&ú_1˜R;„…PŠ ŠJc­ 7šÂ8#K*’rɱê‹ ‡ v 4°ºÀæÖ#PéÊ3ã§̬É^V¦ˆ *%ÔZMʵ*Ú:íÃN…öi%0ˆÎŸó^ŠÙu^ËÙoª­ƒÖ/WúI!J"­G)ï58eÞ"—×. :æ— Ö >Õ¬ñªƒ¸Ÿ-ÔYËáá!‡‡ÇŒÇ9a9ð…sîÆ'IB§Ófmm•v»Å(=ÁÚ‰îEŽEa¤ô8w}‚R™Úú;×w¨”K®C7F…袠wÞåÑ£ÇtÏ»— o=þäÒ'½hîyIX¹`·PµèÿYû!寲«Ž=98àñƒG<~ø˜¯ÝÙ)1ÆýþR¹Bgu•­ 6öºlmoÑ^©—¡²’¥3²þ Ÿ|øßÀÁY—|ú޵V²4êušÍ:Aè«ÃDY‹²EÎdpÎéá'ûèL‚ |ŒÆújÔ$.±µ¹Ãjgr©ìæ†S‡Œø¼Ã花zùß-&/螟Óëv™L&X —ÞF“ÕÕ­V™ÞuúÞ›”ˆJ™Öæë[ëÄq@ ½j¦k—é­Ñ weõÖXPóî0zû J ¤)ðžŒX+0…E KžNôº¿Šá8éÁ•Ìú«„ú ð÷YX¤0 ‡|;k®2@û…‡\»æÕuÓª˜š»ÏjÄUEøSeTƒÍ8ÚÁîó=κcJ¥†cV"Qa™J¥ÁJg…í5ÎόƇfÒÚ–…Ä å7E£Ùàæ­6·êÄIàñ*pˆc›“æ9§§ç<|ô”óóžsžZîXCsts£Û)ÒÅX;áØW‚3æ-÷Ók¤ñmòAù„£çOùùOÆoûË$AŵÞ[‰RÐhu¸qó6'cÁöö:F™8„ e@SºGÇ|òÞ{1)r#÷{­ç ˆ“Q’¸Êr_9œ œ9ž.´7÷]³$¶(@Ä¥ˆ×îÜdeµI(¿ykWŽÎK„ka<Ïø¢Á²ôW:ðŠ ‚ýƒ€³÷;ëΕzƒJ¥JGÔK%JI@9rB  IDATŽ)G1ÏŸ>cÿ€þ`„ ´P΃᯶麇Î÷øðýÙØØæÞë¯ó¥ j±ËêX«AQ PÞh×믄÷ÿKöšÙ V"íƒs…öþ…$Ö‹B½¿´/×L«{Ebì_ ñZб³ö °éF†Ÿóv —[˜¿î+ÊÏøw{’ñûÛb×|¦_9rÖ=†Ê%‰éÍ…çIi¥7I½ÈkJ„!q¤´ÎÈ3CQØYÝ4©¨Ä¼£KÓn,Wý|t|ÄÑñ*Vµva ŽB*åq’çi|Õþ/S†fÁ\÷å-|ÑØ%ãxÿZ£uNš¥Œ&c2c‰‰"’r•RR&PŸ»EX‡B CÊ•2I —àÔÆŽ'¤ã±Óàµ} k#ü\•ÂuBŠO}{õ5 •B#È¥‚¸ÄÞá!Gìl´ˆ¤"c’R™jµÂù(§Õl±ÖiS+„ÒÐíèu»ŒFcrí Ô¥òÉÜÅ+!dD "·ë‚ÜdL&cFãRùëÐUn<ÙY'œ{ å ž$Ú ¢‚À*”•(ëÄ# +RÒ<'+rŒÑŽ[*ÊW*ÛÐÎH7/ƒ€z¥J©\¥?1L' &cF“‰3†Ó®½ÚhÇoB •À ÖÐ*!=²Âa9˜ÉíââAáz‡* #­ç”Š…ò^)=^ÈW±»®lyA,Þ Öª)ïú"~È^ª~¡‹è ÄXC!ôL­1¹AZ—”°ÖUÙ‹âR‹øìµç<í_«~QÕô•†ÖãEÀ±Ì‘^˜ )U*¬®­S®$ÕÃhÇó1bõ†çt÷xúô9žÒZ­ ‰VŒˆi¯nrïõ{|ûù!ÝÓ3ží0˜äóî#@…Å”kn¿ñßüÖשÕc¢H(oÀ'd–ãÓÞÿùG<ß=g0ÔX DˆEú1¤‚ÀZ¬ñxëÅ ûröA\ñUÏ‹€âé$š*üŠ ƒÓö?àøà”v­DRŠÒ"¥¡Þ^åÖ»è¤ÉÆíšÕ À@$%ÙhBwÿˆ'? {֣ȋ‹cDI„°B’iË$7dÚÉó~åÀ…µ*¬% ¢¤ ƒ …Õh@ˆ€ I¨·W¹{ï_ýÆ\ßY¡Q …AŠ ‰! I¢ˆ8ÊN#cPée`Ch5Áuç\ê§B¥œ‰/V(¬ 9?:âlÿÁyŸIÖ& }E³±(U›\{íu¾þ­oñÉ“vºd™F¹!£ •Îwî¼Î[÷îrsgƒØÅ.W©­qU±ÞcSyá^ /Û‹­k¯ñú_æÆÎ« õrH£S/ÇüÃßáoþæ;üüÃ06G éÇu?/ƒÙJ¤a2ÉŽÆ ‡c´÷î°¶ /R´É(lAa ´6X#½Ò-Áì§ à"¨â³7!Ñ‚¢äÅ\¤’Ò |L+dV˜Y¥¨Y|;OlÍǾuÚS€ýÂVóªnŠ âÌ7ÂÏ›Wù#ˆK9  {±E`šž³ ¬EZãÓ±~ý² k•Ÿ)´& )F#tžaL† )—+T«ŠAꌫý5™rþg¼z TD'ln®ÓjÖHâ¬FJ”H¤U®[M†—(—+Ô5šÍ*j‰btÆÙñ‡‡ Æ*/,ú=hæÕ ç´ªÛ²4%/r´ÑdyFP.!î»:r]PèË¢æå¤Žý”'™W÷¡ÍÖkñYOCWÔžÏè(—cBBbŠ‚Q¿Çñé1×w¶‰”$PA¥J»Ó¡^-qr&H­ò‰]±P m.VDKIR*ÑYY¡ÕjQŽb@†qoH÷ôœ^¯ïÐ|L)îîÄÙ^`Œ»}Äù_\ýá/'Ýõéc! €Â期p|tHwxZIBP©µX]Ýâ|Ø¥Ýè°R¯Q ,:1êžrr|ÄÙÙ9E½ÄãcŽê1…¡È -B¹Pk‹ñ8·©é¶µÚuIå¾î8o¨0¦Ro°¾¹ÉJ§C*¬ÎA¹ñÈ(ˆ dˆÚõ#MݺåBõùBº!Yèž+°¤äù˜Ó³ÎÎÎiÕÊDT’ íf›Õ•5ŽŽ)²Âÿœ™=³8l‘œq(jÍ6ëír‰DX¤q¼ @àÆ‹~Ï!aÓ¨×i7jÔ’k5½^—ã#†ƒ÷˜ëb¾ðYÏÏ—Êw\@žeäy꼩ü½—´¶diáMo—¼úe,cËXÆ2–±ë—±Œ_^ˆ—ϪK^hbÏMβŒÁ`@‘빤5m½vn'¦¬zf‡WÐtQ ˜ §D+æ!.žY…¥嫤ݡ3—‚L($‘žƒ-(¬%Óš¬(ÐEN(é*饔(ohk%y”c%ŽJQLÔí ‡„R IV¸Ê©ÂhÒÔRs±F”„3ê+ŠÂ™Y'Ì."pÜ¥] J*pæ£X‡Ò__í+¦¢•«V6ÌEñéáÚâOÕþ‚i}ý`­¼²^XƒÀux溵†BKŒœŠõr–0˜v5,¼²C ÙWþB³K;d|rd¦COo))×ÜþÒ—ØÚ¹Æn?gÜË\µ£ˆÈ³Œñ$'O»ŒÎyòð1?}ÿ7ïÜ S‰Aœ É­¡Ú\ãKwï‘RÎŽQR±{tÎ$ÓdZ‚Š J5âæ*7îÜå×ÿÓoð¯¿I%QDHiÐ(-£Éˆ'Ïžñλ?ãètÂ$«Ì-m4NÖ¶ ´/ ù®‡)üBˆ¹aß/±€À˜I§~  :%œsòb—'_°µ±J­TrÕõ¢ Rksí†%n®QÛØ¢Z.!µ!0–ÃÙY—ƒg/Ø}úœñpŒ1ÚgMäÿyF‘gXkR¢‚ Ž “*Œ@¦þyR¸œ™ºx+TQ­×ÙÚÞfg{›V³á:.­A(÷ £dH "¤&´‹ù…98}örS1&îzj„(°6£ÈFœžszzέMPŠ8*ÓjtØZßfowíM^µ3,‘ÒÙ×[ •j·^c£³B#މŒõOŒî™Uøvç?ã’—I¥ÎÖÎM^»q•jOØ?ØG»YF–¦¾S eðŠ.H·G‡qHED¡ÇúNÏÑ8eœ³µxËXÆ2–±Œe,c)Ö/cÿbаÖ2Ž( íKEA É®8ÜN͵Äü€xåáðª#¸@ U€cœm-@ áªýû* Šbò<'Xò<‡¼©Ñ* T2pUV¡BÇe”À­$±PdB’!ÉX¡&IÅ`<;ŠT •rÕç3gÛËÊÔ"Ùzúu'hkЦ ”®ÙˆiÙIà?·p/ÈýÖ¼Œ0õf’óËêÂ…ž‰ÚÔú«äé™·R`ŒôÈÁ:™ì¯ÎxÌûè‚YÕ¬aZElIªu¾ôÆ[¼ñ•8šHôîY®Y­ÅŒú=ŽŽÎéfé°ËÓGx÷Ý÷øÆ·~“ÒräøÎº°¨¨ÆÚÆuâoÆLÆåZ‡Ÿ~ð {G§ S‹ŒÊÔ:ëlÞ¸Ãþ­ßâ«_ÿ·¯¯SK$aàÆ±1–¢È8=;á“y÷ýè§…UXÌ\ÆÏXÕB.“Ê%ä ÉôRNhžÈ¸à(,çêåô^ê‚|<âüä„?~Èë÷î°Önc… 3†¨T£³RªçDõ…2Ò8äÃÑáOž<ãèð”,Ï/ÌYë¹õVç% #FÃJ.`Šq"ˆ!ÕÖ*¯½þ~ó·(ýô=žï’æ–¸Rãæí×yó«_ç×~ýÛܼ±†Ñ)ƒAN­E¡«ô•ŠI©ÆÚÆ5Ö66á½H¤$Õ™:g¦Â–O8D‚ã㫱ޛÁ (W›lrôdÌþ³§<{ò˜IþuçWa%Fd6 ¾²Á×¾ùmŽŽ £÷?yÄyoLZ(êk7غ}׿òk¼ýÛos÷æåè iÐÎý-E¢ù$”« Ö7v¸uûuÚUE5‚XH=âË_ù*Ï÷^иÿè O_r>“Æ D*"ŠËTë V7¶ùÊ×Þâ­/ßckkÝ_ÏÌyŽŠ~Èáñ 'ç] ³°œ™é˜ú,6‚ðÉóÊõf’0JHʤ (ç—΢(S„sóÑ @÷éÅ’¯–Y/%eXíí¬Ý‹žØ¹`!`<²F¼üZŸjðz¹·j.¨Ê—7^®Âoè,ÃjM`r„TT«5vnÜäè¬Ko’’kM¨"·6 áð5*@!Ív›[·n²µ±N)}Ç–õ^®êYX—ÐvÛ·@K§³Ê­Ûw¹}k›v5"ë6Vs|tJ¯¿ïöe³èiâÅo!J8¡’µFZ­BœD³dôd’1èɲ kìUŸµ˜ öÆ/ž>={Ï_x3›#ÕÒtÄÉÉ!Ï_<§Z-Q)× ”¥¹²ÎÎõ[ôF)½G»äÅÄ'ΔG ˜¢ Ès¤ (U꬯opûú5å›çä㔽½Cº½! ˆƒá;Êeu­C B¢¤J»³N­:¦Z©PŠB¤)È&Ýsú½¹¯ªŸc].¯–ñh€ÎS’(D)PÒÇ%­åZ•óáˆ<ËÞ|Øå²<:Q…$å«ë¼qï.këkT’c4QàŸá„Â…±.™?M< ¡ó–¼¸"OÞ‹_A›O z ‡C´vI*%CJ¥««\Û¾N:)8ÉN06G¡P*ÄÊãØd„aD{u…7îÝ£ÓjJ‡³F£|gÚúeǺv )•ÙØ¾Æ—î½Éj5! ˆ“„ÑxB¿ßãô$#Ës¤T>¡³˜—˜vj„ЍÔj45jå ƒ–qQ0L3Š +Õ2–±Œe,cËXÆR¬_Æ2~õb½q‡µ¢('ŒÇcÒ4…H:ƒIõjê´ªnjtvñë|*ç\¼¬ ;~«H”¯Ž4³‚ØéÙS "lA%ù8#ÍSr)È=Ç)œ‚4/Èò‚¼ÐÆ0èõ ‡ Ç#£!™.ÈlAn &iJ¡sÀFµr…( ‰Â!EQ\2ú^HõºÂÎì&…uÉ„ó³s2kh¯­Q®× âÄQ*^ˆ4 âµi嫵ƒÅ¿Z‹‘†Ë^R¼\a'„ÃÄk1ÆáP¬³êP;~ÿ¿ oÙWõéxDïäÞÉ1ùZ ¥Ø™âlXbõú]þëÿþ³zçëì#­!Êzüã¾ÏwOL‹2)ÃÓ}>yïøî_ÿwJ¿óŸ‰nnbË e¥ DX hÊ„oü'Esó6_þµçì1É QR¥ÙYcuk›×î¼ÆÚÚ õZàŒ?D[C‘å˜qþðüÏïü==:`XŒ˜Y#/¥#œê¼PÞ J •õ/Ï?{Åx)£ãs‡¤8=íòøÉ>Ƕ7!( ¤ ˆ¤¢ZŽ)Wã>/ l‘"II'Cžï>áþ£' F­Ö†NÜöH;Åö`éŸòâÑ>Oty}» ¡rÃ@–kl¿ö¿ܸw£“3´±4[mÖÖ6ØÞÞamcƒQÚçáã§H°½µÉÚê qPBJçU¡ܾ÷þ·ÿcÌæö6Y¯Ë{?ÿ˜p^8}'G’ E&替ô"°A£)0¡±2Ÿ3–ŠœÝgøéOß寽Á½7îvj¡@›d‚DRmmò{¿ÿ±½s—žp|Ô£°õ•-6vn°sã&›ë+˜tÈÑ~J­F«‘ …Äêùúg;!.Åýûù§Ÿ¾Ç×^£uw9ÁIS¡Tøöoþ.•M>øè#ŽNû F)in0V Ã8I¨7›llmqçKwÙ¾¶I½ ”Æèœ4“žŸóɇŸpÿþcöOÏÈ#¤¿iæÕ®§Ÿr†òºjä ¥(U+´Úmo®È ½ B:î»6–…®-1[˦]£ÁÀí]ÓWðà„taæF’3ÜÉbÂë*ûÛ/ø¹/¥¤]RÀ}kçì#ë¦ÂÊ…Ÿ3œžp|tÈÖö:qàüÊõ·îÜåø|á.½óÜ8†w—Jt66ؾ~ƒí–áyE$µ²{u!ÑR ¥Eë”iŸœwÙ{þ˜õõU6×;ŒBIVX»v›¯æ‚¤òˆÓ“.½þ€Ñhä*¸½ŠR®ëÌÝÓ+Ûܺy“­õ5Zµ*¡ÐôNœrÒíºî \×ý÷ñ”ä“ÎŒ>õ8Ûßåy­ÎZ»I½DÕö:7SÆV £{ûûôú²¼@zS¥"J¥íÎ ë[ܸu‹õvJh‰¤fÒ°ûô=á¸; µ -C‡—™ Uó)OU Hœ–eq ]±ÖEû„¼‡£á€³“S”PDaU²4š–»wCVVÛHi:a0rvÞå¼Û#Ë Œ•+•ˆ1 i70†Ã>ݳúç]ÊQ•K”ÄllopëÎM ÇǧLÒb–” „8.Ñét¸¶½Éõm6VŒÇ}^ôÎQ*àúõkDå«dÒ ¨µñ2˜Žq…%ÀÊ%J ”’H%Q(ïÓ!\%ÿô3 |CF¿{ÎáÑ!‡''¨V…’ ˆÊ5V6¯±3J12¢´¿ÏÉé E¡Ý dL½Zcm½Ã­[;ܺ¾E–iÎê²NZÂæH›£¬E×mc)†œuéöF´ëM²de}“×´»»Ï*)ËO&3<ã4Ÿ#ƒ˜R¥Ngu•ë7nòÚÎ&­rDh &Ã{û‡<Û?&µ®šßÚ¥X¿Œe,cËXÆ2–bý/4úý>ÿ÷ÏÏ~ö3^¼xÁp8äÏþìÏPJ½òg´Öüà?à'?ù OŸ>¥ßïóGôG¼ùæ›ËÑó,.‹ÆhòB aœN˜¤)QXÆXãŒèŒðeâ¥öê©0/äE㳫„úû|Ax± •ŠÓ¯Ë@9aE/J'Ö×ï B¥œñV¬I¤"Rб“S¬6ØBShÇ_.´Æȵ!Í Ò<#OÐi†N3LšSèœÜd6§ÐÅ̰5‰cÂ0$CgX»ðùfŸ{ö'Xã+æ¨ Y–Ñ88;e\¬#¨·±=q)é1+âå–fû*±ÞΪÅ™± ØÏ쥫¬Ôdä”{±ho†±ÿ,Åî‹Í©È æ)ɰÏéÞ.çGû¤7;ÐHÜx””BFeÊ­×ÞˆilÜd8žKËàÅ't÷Ÿðï*ª…%39éà”ý§Ÿð½ïüZÕa¾Æí[×hTr#DD•€ëåæ*Û7ïÐíÑÂ(¡T©R*—©V«$I@ \·¾ Ë2N¸ÿÁOù›¿ý.?ýùGô3*ÂÚÀ'R¦¨À. g¨7õv˜#û§Ì[ñÙ®Klû©æOìFkFƒ=åùî1·®_£%D( ]HAºäM€«&TbÂéÙ>Ož>æÑÓ]ú£‚¢3Þû´2Õ¤*Œ1Ý3>äýwßg§öUªÍ2òfÀdSk¯p£”ÐÞØ MS„€RœPJJIL–xøÉ|ïÇ?#.7ÈŒ¢\oƒr©5°¶}ƒßHîÞ¹íŸðßþÛÿÃÑI³ãœÂh´gÿÚK6 V¬+-VZ„0£±³ àîÙîÌ;ïü˜j­F)‰ê J D‚‘(ÒY¯òVXåÚÍ7R,’¸\¥\«S*' zg<}ö”q¡¹þÚ]¢$¤JOv°ó®&¸PÕ9‡/vyïŸþ‰›×¯Ñ¨~ ¹µB­£”3\Ù¼F\­±~í“T3É Yî€d2a@GÔšuÍ&¥RL ,´˜\Ó;?çɇóý¼Ãý‡ '»8~Ì++Ø?kZrI(IR)³¹½ŠB&“©”Ç,Ïqi`gLöWä)ç¿M>úà²<à ³€í™pzŸ黉¦þB:v»±Ží,¦Ý,Bºî¯á¹×pßÿiœu;3²\dß/và ïÓâÓµ€åôôˆƒƒ=ƒ[„*V¨¨Dse×ßü öêL¤R*’r™J­JgcF«MFœˆ ZÕê¬zØLQshg0ìßWïô˜ÃýœlmP«–"¤ZïpývH©Üæèð˜ÓÓSƒ€÷¯°A@F¨0¤Ro°¶yµ5ÚÍ:JZŠlÂáñ ‡'gôG©3ÏÄÌÆý¿½Þ™þ"$6OIû]^Ò^Yáî›o%eéõ†mAFDI…J¥ÆúJ‡Õ6ÍztÊñÁg½!I¹Êêê*å$!’z›[Œµ ~|L:ÉÆ Ç9-|úÀøki’¦‚EbšêݵM'cNŽyüø1µø6ªR" cªÍ€íë7 Keš«k‘g™O2ÄD¥*µJ…Õ•k-Bexqr‚P QG!ÖX“#„v&ÓÂ:«™ ìïíñ¸Õ¦ÓlS)‡”jM¶w$qÑYYáìì”Á`HšNæÞBþ3…q…r­I«ÕâÚæ:«í:IÒhºÝ.Ï_ìñlÿÌJÿd²ë—±Œe,cËXÆR¬ÿ…Åûï¿ÏŸÿùŸÓï÷½(¤¨ÕjWŠxÓ8>>æOÿôOyþüùLì©V«DQ´9ÿAÃ.ˆçÆÎi¾£ñ„ñ$¥Q«NÝ<^ãEzq¥ø/f¦]‹ÂüK¢½ÿãÿmZ%éÚ°ÅŒ>õ“Ò•4Öu[;ãv‡J!ã¢$‰DHª&è,'KSŠ,ÇS8†«ÕŽójŒ³óRR ¤$PÒØ"PVJ Q’$ A:‘Æ¿÷©ð}q>yF‰˜²ƒçÌä,ËèözôÓ A©DµÙ¢RŸÏG±Pº:GÍ•3éTˆF ´ À\`2ZÃô†Û ¾ â¾ïŒ>q3­Ê3Æ:д:õ—€¬þ˜igU¹†É°ÏñÞ3ž?¾ÏéÍ56š%¢jìÞ– ¡BPm…TZ«H!H¤á¸lXé´‰EIrSPäC§¼ÿîhVKÙ£ ^»µA%N “¨Ð KT›®yÖ¿R )Õ Ÿâ„^7sƽûû¼ÿÞ{üÕÿ÷?øÁ~ÌóýcPå˜NvŽP %°Èiu½õ•߯y"̧Wk/Wˆ™ÓŸ]è‰ÏÒŒÝç»awÿˆaZ EB!­¯R÷ dàDã>GO>æ'ßÿ÷¶ª”¾t‹ Y%P¾ƒC)dœ’R­F(£É&cúë ¬œ IDAT½sž~@ {“•Vƒ8®ÐYݦR©Óé¬2 H' È ˆã˜jµF£Ñ \*H»¼xÎýûóñýûœ÷dÚwÛPaàA:_Xõ}"ÔZŒ•g{Å+ö†Ë{ÈUæöLH&ãgÇGìÐL¶)UËTkabˆ…0&£1§'gô{#ŠÜ8ÌÌBfTxøÓL–¢sv²ÏÓ'h·ªt:5*値ÔàÆ»T«m¶ÏÎ †…AJE'Îü¸R&Q‚|2âÅ‹=ž=~Êù0¥ÙY£?P«×˜¤Ú`çækT›Múçgô{}=xÌîþ “Q޵Ó$Õô}9Óú‘ÒÜÆú%P;så<¥{rÌã‡XkV`µC³^#IJtVW)U«¬®o°u­‹. „PDaL\®‚R$DÎáá ž>?¤Tn²¾¾êË&ýs˜n°Xt–r|¸Ïý8¡Óì°±±B³V¢Z¯S*Å´W:ôû}FÑvc6Ž Š .%e¢(¤YŽ©D&3öÙÝ}ÎÓç/8<é’9ó™YÆ2–±Œe,cËXŠõ¿€øä“Oø“?ù´Ö¼ýöÛüîïþ.·nÝúÔŸé÷ûüñÿ1'''ܽ{—ßÿýßç­·ÞúÔ*üeü{w€ÓF“çš0ŠØ¢0 #Æ£ R(_8­’š£°ç‡AÏâ]0™\ _2;õ/`¬!Ê ÛÆ }óµ±m ¹ÎAk/æI kÉ­!Bb€4Ï]Ss8s1Ÿ” £iA … 4y£Âˆápˆ´)ETJr€•í‘EH,g…T‹'Ù3}*´J!±Â,\1C˜XßîŽ_Æ 4SÎïT(ꥳsžçŽ[(ךí s¥• \÷‹1#] cjv[hÑzžL¸|ͯ/|FD;a!ݽ(Ò i¡Ð†"Ï'€u–{¯òÒÅù ö Q¤CNöŸñî;ßåÆzƒ•f…$Ùr¦Â‰ƒ9!¬Ñhaô„8)&% `˜f"DÉô'|ÿï¿Ãþþû»/ø¯¿û[¼q÷ñZ …!×nüGb’NÀ‚Ð5TàÓ&Çä)Ÿ¼ÿO|ï{ßão¾ów|÷‡?¡?º^ëêõ„•n”{4“ô¢¬Õ¡´D“6tê»?òbv=f"@_ðzÏP8Sä z]ž?}ÂÉñëðú&2ED(iF#ŒÅêŒt8àñÃû<{¶ËYo@†rf±Â­SÜj0V»%'œ=䛳V”ƒÿ“úWîG01Ú%þü ¦Ý ¡œŸŸòà“ùÑÈ_ÿÏ¿áçOioŽh¯ïðÆ—¿L£^!ŽŒòõÇr:s´±hcms¬Î RI"l€P!B…Ž+ì=%,…Í tÆÙáï|ÿûAֿɵ­Mª%‡â²(o¦É¬ “!‹ ƒ³C>~ÿþú¯þŽ}“·¾•ùä—¿K•“Q×#a¤r~BH¿æå3áx—|÷ïÈÆczg=¾ýíoðÖ[wˆC(t¢0¦ðh pI £-ÖjBßµ¡µ&8ØßçŸþñ]Þyçüäòèá#z§}òL£P—:[¾Ð¼]°î°Â%ÿ¬u© 5C†9ñ±½Ò¡ÍÊ…5jºþÊOqǶ%I‚6Ú£"N‰’Øxû·Ê'Eæ,}cœ±º5k„KTO÷)]`òŒB;!OøuÏM%q ï6eYY®Ódš8uN‰%%R¸dÖ:Ë–C)÷ýkYc1¦pã9ƒÃý=~ö³¢G„Û›ÔªBÕzÛwÃeÄQD .2†£sŽö÷yðñ>~xÊö5K­±Jjän§UR"=–é…ja@çîí’¦)Ùx̯¿ÎÆÆq­B%l”K¬ol8Ô†â}æw_z¼±‚,Óëp|´Ë£‡÷yþü9Ç'gŒÓ“iŸÿ•¯•j½5Æíg¸dV‘XEñž6/a@.X#ÏäçMž¹ÿñ‡sz~Ê[o¼Éæú:ÕrfT¦ÙXñÞî:Iå?¾ËCIÉs½OÜçþƒOxôø1'ggÚ‰­nÏè4CH·O#|gˆrÂ|žjtQ€€ PJ¸j|sWúWd0„Å¥ æÉ*ŒÆäFÃÇG‡ì¬µiTJDQˆ À&éˆÁ`Èáá ½Þ¼°³ßeg¯5eÖ ¬÷Béžîóàã ¼õÖ—‰ãut ˆKe6¶¬­ç“åcB%ƒ©:ËuÏ9<ÞãýŸ¾Ëîá9£(¬äää„F«C%*¢½²ÊÊJ k &ã1“ñ˜ÓnŸî8¡1¶@JK)”0B ¾(djk1ß§ÈRÆýsö÷?_2¹}yó&åR‰0 iF­V‹íííÙó•õæÏE‘2³¿¿Ë~̳½ë›71V“eJ¡uþP2ô? œ™V)Ò,coï?úÉO¸÷ú®_[c}¥A¤ Ùj±º¶æ ;˜?w»)*ɵ¤0t,& Sz½3>úð>üèv÷gÆ5‡qüÌ™d—’þ2–±Œe,cËXŠõ_(Š¢à/þâ/ÐZó‡ø‡¼ýöÛŸëçþò/ÿ’““Þ~ûmþàþàS+ð—ñ(¬ãÕk­É³œTIìÿÏÞ»ýX’Üõ¾Ÿ_Df®K­ªê®¾Îôxì{¶Æ6$Œð´-#xE²Ä£%@2B‚'žùü€d¿€Ä«å$ÎÆûÇûl¶±=c3žé{W×½Ö=3ãr"2×ZUÕ·™éžñ8¾RM÷T¯•+32"rÅ÷÷ï×9Æã)óÙg]0»àæOª,e5̲](,ülO*"PQýI“ê}«6u„Ì-ãµ…š°ÀÕQ¡¬¼ º-hEÞée¶2Ôeq¬…LÅW‡5½ðQ‚äZy2ÿ„ÅOPû»VéÚ0Âå0È6ÏÐ-®ßZÿ íÐétèõzQ©¿ºø þ®J©°sàd{i /Õª1•Ž6AKçuYÿ@b-*FµVX+Xc¨ mÏÛXƒ=¡ò~úpK´H(zP™íÞâ'ÿéù¹bt°Çg?û‹¼øÑØÜXg­ß¥È4¦žSÎgÌ'#&G{\ÿñøÁOÞäpZQ‰ŠþסÆãý]Þ®-“á˜[oÿ”_ü?^á•O|Œž»Äù­óœ;wŽõZ›¼£,KÆã1“é”ãîܹÍ[?}ƒÿúñ«üäõóÓ·o0Ï¢R–¸±Þ/vA =µ))ç3ÊrÆtî¨ t# ]ds¥¨kü218¸¹‘$|loÙÆ[ÞPÍGܺñwï|вü4½N°*h2“·+SFGCn߼ͽû»g¤UH.8ÜÆò ÷O]Ù¿{ÿù?þOÆÇC>ûKŸå~ñ®\½Ä¹óÁRF« S—Ìç3†‡ûÜxë§¼ùúyýÇ?â‡?ø!o\¿Íh.Ìëüë¿þ Ý"c÷×~•O¾òq._Ø¢[äˆ÷LÊ åñ.·^ãúÝ»LæsÀ‘ièB·Ðh½4BEaj¡ª…yå™—•(kq–¼ËD8‹¯J~ô¿þ?ÜlÊέ›|æ3¿È'^~‰‹·X Xëu°Àt6áx´Ïèx;oþ„7^{•þèÇ|ÿµ·™»œÎà<ãÑ-–\‡³é­3ò¢‹ÊŠ`ÙÓìrifoðõ„éžåûÿï¿3òãŸü€W^ù/¾p•ž»ÂåKÙ*ËE‹oÉ%9±]K=ªÈH´ðʲ Œò,ì‚Â7Êé&‹›H8‡@Ä…VÖY¬s8Î ,’uÐE°> ó·m ȺªC^‰6ãÎÈølEÅ!ÌÔZÃd:¦,gX[#Ò%Ë *c©jìšœ ÏY¯bP¯RL¦Þ~û&Î /¾ø®^¹Ì ßçÜú€n§@k…ÖuU3ž™Œ‡LFÇܹû6·îÜæÎö!ÃcÏ…‹3j[aœ¡“+È ¼Ê1^cE°âWB5½­™yóõ×™Ç\¹t‰K·¸°uŽ¢“S9¢ Èòöû1¶-$O§3ööö ÙÛ»ÃÞÞ]vwî3ž–Lg%µuÑúíavBO¡¬4Y^çy|V;”Î Ö9jk0Ö†Xüé vTëî$²¹Îbç3Ƈûܸž1ŸÍ¸|éW/]âùKèdNFQääy†(G]WL§SÆ“ÕlÆñÁ;»Ü¿·Í½û÷Ø?<`^UøvÉâÚïWÍÄLh%غ¦.+Ö² UtðÎ3ŸÏãNÀdО Ýî€i’½£žÏ¹sû&ŸüøGpœÃøðÈ;šùÔ²w°ÏÎîãÉ gA‡>ªb‹ÿ‰¡lª’ým^}Õ1—¼ô±yþÊEzÝ"´W®È²0TuÅx|Ìd:àðùk 6Ö7èõz+S_U×ìrt|ÀÎý[ܾý6wîÜÃú/]F‰ ß¿¼Á¡èô×È:YPò[‡­K¼À0/kîÌJ\=ãpÿW/g0èrþÜy66Öé÷z(­ã¼¨¬¡®=³iÉx4d´¿Íäø€áá>wïÞæÞö£iBÅEÅoµ)b6!!!!!!!‘õï9¾ûÝï²»»Ëç>÷¹Ç&ê÷÷÷ù÷ÿw.^¼ÈýÑ%¢þç¯÷¬·Ö`Œç™N§L¦Sjk(Š|áwÞòr~…Ì–¦Ë>ë‹ÿ®úi+QhÝøÿ‚s ¤z+‹»°•×¥³s#a[µ´–A•Ÿe!, §ñ¢‚*ÒY”sH–ᬠ¾ôuÁax­< v$Þaq+A¹ÍI8ˆ›&Œ—hÕCk€¶ô·†Š¥èõ:ô×ÖÈ‹âY¿hœJ…À>iÔŠM‘Cm¹`í-œwg/²„%ÕÜâžµ¾õ™F¹ Ð¯MI1&(÷›BÀÊ2tùϧSIŠn·4‰¹Î”înóêþ“ÙdÄíÛ7yñÅçÙ:Žõ>\S—3ÊÙ”ÙtÌèè[o¿ÉOÞ¾ÃÔéàÍÉ!ñ!ÀÍ–sFG‡”µa¼¿ÃýoñÆ«W¹öüe._½Ì… [lllÐëv‘¸€.Ë’ÑhÄd6eÿ`Ÿ;·oòö[?e÷þ6ûŒF#¼剪ú°½a7‰¥®JŽŽxýõŸðýß^¿¸AOj WÑÁ0:8à×ß`wgé¬ ¤ÞŠõqYª†l0ørÌÝ›oð¿¾÷ÿ°ÑWœÛÌÁÄ;² ¼µˆÃlÈt÷?øß¯²»{€uÑš Z_è&iƒ1ƒ YùQM7ßz[×ܻ뷮óüóWØ:¿N¿×!ÓPW%³É˜Ã½]n¾ý·n¼Í­›7¸}û6ÇÓK‡Ús÷ú[|çßr&ÇÜøé\¹´E¿Óg)§cÆÛìß}ƒý×› ç(E]M¹þæOø×ÿùOœ?·Fá  ñx[òƯóÓŸÞb2«±N-Õ M®ï,Ô%Ç;Û¼nkæ£cîß¾ÁÛÿ8—.^dcs^¯‹³†ÙlÈp¼Ïðh›oý×úSnÞ¼Ãöκ·É;7øÞ÷¾Ã|¼Çf¯Kn-â¦h]qãÆ›üø'ÿÅÑш²2!P8‡òqg€õïÝã× û÷øé››¼xí /<…ç._äÜÖyŠÎJ(Ñh‚ÅYCUΘŒ"Y¿»Ãö½mnߺÃáÁA°çšN‚Ê}ÆÎ™åɘw@Ü{|U1<:äöíÛdvޏ ÝØ>AÖ/ÏS,2Çñ¤u†÷SWÌËãñxQ$Æa­a<qoûY.ô³ 3=â`w›Ý½]f³'g6c-ãáׯ30è@Oæ\¿q㣰Kê,R4%ˆÒx'[1sïÔܺu{q,ïƒÝŽÒA‰ÛˆüëŠÑÑ7,ŒGîßßescÍÁZPÛgŠL ÎTÌgS&£!£Ñ;;wØ?8àx\bLÎx´Ï½»×ɵ¡“ õtŸ»÷÷Í,µWAñìÕJ¸®©JŽöw1óÇ{»ì_ØâÂ…óEF^¾È2Š¢ÊîÚ`L1–étÎÁÁ“ñ1ãûŒ†Œ&#j¯hòƒE$§ŸôX?Ù ÞÓ/;¡?ŒÆÜ¹s¡fÐWdõˆáþ÷¶·aïÎòîsh°KjB8còº³Ô³ G;Û̧Žö÷8ÜÝáèÊE:™¢“çKd=S1NG”Ó)ÃÃ#÷‡Œ&cfU2 ¼Z|jÞÑ_Ê9ÇðxÈ­[·p¦¢'±s¶ïÜex<Œ…õxÏiß,‚ Ž´é×SÏÙÛÝæÍ7^g2: “…]*™†éð˜[×ßæàè˜ye¢…׺n¥¦»R4 Ï¿j>åpwæÓ)G‡éu3:EFž ™öغĚŠj> dóÑ!û{ )gã§<ÓÉ”[·nâ½çø`—­Íu2åñTTåŒñpÄýû÷¨Êà±Õœ»wo£¨8Üé’S1ísx4¤v9β X¼×¾ÆxÇè°„º¤šŽì³¹±¿'¬’õe]sp|ÌÑñ»{÷ØÝ¹ÇèhHÞÙà`o›7_ÿë¼+™Ž8ØÙff\Pø»°ë_žg˜Usîß6ÌÆì X[ërns“õõuz½^ØiÚÄe4…ã)g%ãááþ}FLJLFC†Ã!“éŒÚ‚—¬ÍPE•'­žd2™|¨÷î}ík_ã{ßûñÁþþ>ÿñÿÁññ1çÎã—ù—ùßøS$á·¿ýmþîïþŽßÿýßç•W^áßþíߨÞÞ¦ßïó‰O|‚ßþíߦßï¨;Æýû÷ùÄ+ŸþùJèu;ôzA™xqë<ŸüoŸàW~ù3\<ž\‡=‰Š+¥|+¤W*‹^à {Ij|Ô&¡‘`Y£T«ì7ÎBÞY¬7xˆøèôDèeŠn¦Ð>’ƒ Yï ÐY°Öq‚5–j^QÎKª²b83™M™ÌfLfS,‚qŽÊÔTÖâÄc¬¡¶õ)Á²s޼ÈɳçU]£ðÁ^è½KØ¥PÖÑ–Æ„`ÛÚXŽÆcjïœßäåO~’KW®Ð È‹ÎbUçâ?xÔŠVqáµh;·¤žwÖ1/çTUE]×TU…µ¶µÍY†µŽª v6Æõ qwÞc£šÏ9<qp0äèpLU{æóY°C0æ÷H·´È—°E_kDiœT^ÐíõÙØ°±±ÆÆz?(ëµ`ª[WÔuÅ|>g<™°xÌÑp‚k<ð½Eœ‰6]T†öe­Wpîü:çÖY èôzäyAUU˜¸c¢ªjªºf2s<<äèðïlë9Ù.õå”Ç{…Êr¬©!ïÒY?Ç…k/rþâyz9t¨ä U—ÌÇ#ŽŽÙÙ?âàhHi ¢‚­G±p?MàŸ¹M]4dºSpéÊe^xáyúýÆÌñ®FkÖ"¶$«ædó)·¯ßàpT2³`D¨}‰ÇÁµÆ&žÆk½) „¢ˆ±Ž¬Ó§¿±ÉÖÅKQýWÐÉ™ò˜º¦œÏ˜ŽÇŒŽÇL'Sæó9ViÐá¾ 4Y·ÃåK—Ø:·A¿[Ð+ Ä;ªù”Éð€Éhã£cFÓš¹ï‘uú\¾z™«Ï]¤×ë ¬¥E‘å(<‡GGloo³½½ƒµk’T-Ó ´÷J„¢Ûasó.\á½.:˱¦¤®gÔfÊ|:æèø€ápÄl:ÃÖÝé3¸p‘ËϽÀ…sçée¹w(;Ç1g8<`owŸ{ww)ËàÝ®³ S;„,X;‰¦²Ut,C)ÅÆF—ÍA‡A—Á` /yTh‡B(>¨¤MUáMÍl2f23ŽÆÓø—k´Î‚²t…ä‹…¾0ëyðfŽÆ.¦ÝE"ÑLr §wn‹õs›lö4¾»š 9«§¬–òäDy¹¸ÙØ›8oÙݽÏx®-ßtçÙ8‘Áú™ãªåtÄÎöµOUÌ$Ge^—ÍÍ5ú]E¡ ¹2 9Ž9šÖˆÊñ¢ÛB˜,kR%X9Ñy¯ÇÆÆ&½nAžC‘Ãèè€ÙxÊlR1Ÿ×dYÑ9‡±UkHÔ) :ý.ƒµ>…VäZ‘kAkA‰ÃÖå|Æl6a>ŸDÕ¾à$£?Ø ×_ ýUq³éˆÃ£C*SG޾)¼ÅÐ]TÌy±E‡þÚ€µµ~ø¼h㢲,Êz‹þSæåœºžc«1ÖÌü©²`ƒGÅËC8ùåUþ vy™ Væ › bQà3  ï­187`°Þ¡“9¤afSfÓûGŒv.**ðq µ9ËiÕ±ß6?"dyN¯ßecÐC‰Ù8:k,œêŠª¬0UE9›1ŸOÃN|(Ø£Z;–åbA:¬(:ƒ 6ϱÖï"õ„®†j6æèh?­\ì× ˆŽíçiÂî-‚ ÞåZCÑAç7¬õ r-8[‡ò¬©™'ލ*p.ØxyMðƒ÷3XB˜·‹ß páY9亃>››}²Ì£Uðlo±u ¾):ΙNÆÌçÎ ….ðY+çC˜ø`0`Ðï²ÖÉp¶Â‹ ßf3ªùãµË±.góÊeÖú… ©P¶bwû>;;ûKÞûqgŸÒa,zcM@mQy—µµuÎmž£Ó˱¾*ÿÙŒétJYÖ8cCÎhжm.R¦Éºy‘Ñív(Š‚<ÏZG£¬o¬¹lm©ç%óÙ˜r>£®«/â36[™sÏÊáspBBBBBB‡o¾ñ#®\¹òDï¹þÆyþ#Kd}ƒ¯~õ«òÊ+¯ðÆoœú÷OúÓüÉŸüIüBð·û·|ç;ßyà{.\¸À_þå_²µµ•Èú1úk}ƒ>ÎZ6Ö¼ôÑðÙOŠ}ä#t;Yô§Ž¡yKöô'Éú†¨÷.mV›¬*뵎61´ÕÔ5¥©["¹!ëÅ{šŽ:Zè*EG YÜŽuí¡›ZGû‡) UYSVãÑ”ÑxÌñhÄñð8|ü<‡WBåjªº ¼ÅÒ¢¤®kò,ö:ÎbŒE d:MFBÖ9˜•Á>ÈXOeµ©9ðJsñêU>ñ ŸäÜÖ^åˬBð8U‚ˆFiÃLU«¬olš‚Èl6‹d}P5Öµ‰÷æ1Èz²àá<›Í8Ø?bÿ˜ãá”YYSÎçTu…µî}%ë=±!klK>&x}+¢'¼G°h%14R¨\tŽöͶ·DÖ{¼ïD²^Sˆ'ÃïgL¡CPYFÑéPÎgXÈ8ïCènÃŒ„)Ù¥ñô™¾ ¯ ;ÂñÚë %²ÖE$åZTLðú®_ØF¨¬%è}kî"K$ÒÃÈzPY B”C{8B‡V` ˜šÌzÞƒõ8•S£™Ù­-¢¢ÿ²[&ëY!±%ëô­ñ¶Š„N4¦ˆ»$ªª¦6€ê"YŽø@ú*»h™p–ž²Ùýôp²ÞE²ÞŸ ë³0¾bš‡`Á›²9+µ|Ùzí$YO»3¨5†Š·ÃÅBÎ5†ù TÊ»äÝo&`§ˆ¯©«&Ä:’È‘¬'ηâ ‚1 IDAT"%†ÜUh ÆyJ'¨¼‹kmpN“õYÞÁZlt²,ÜF«,ÞÖ()[—–¢»"‚‡õ4ôÑ@R´)™BªÙ¢B°Ñs56ÎAˆFé •i¬qa·†Öä‚ÇÔ&x·«%Ò»¹¹Ö†ìƒ¢‡k³V¶&­ßúIÿþÅ=qÎR×óp­Þ…g´#EÜÙ$ˆã™õ¾}­"°Èá9"áTfñói[¼µ¨øšP$Œ)‘¬_öÕoÔÇ‘QY‰ûð qm}SiÏ-~G 986ÚۊҢ⸌!õ,…àÆSp±˜ :(©q]-ˆ7Ô&îñ±_?YïÐñê|´ˆóx-ø,Còñu¶5uÇ Ñx#x—á}ð}w½é½EÅÀä@ÖÇ`u¥ÃsÃçXŠXðrˆ2ˆr‹\$ç°U…"¡nc. ('ÞÅ{¡ÂC!׊"ªºÄacû´Ê@² néöÂçù¥ÂwW¬qmA¼¹⸎ÛQ:d(…owó,åˆ+G‰Ö[¸…E–õh¥È³,ä‰oç6¿$‹iº o?ß»Z-no{mŸlüšÚ?c¦Rؘ‰wcëæKA"ëÞw²þCmƒ3™L8<<BÈìïüÎïð[¿õ[lllðÃþo|ãüèG?âÿñùÒ—¾Ô¾ïÖ­[í{>ûÙÏòð<ÿüóܹs‡¯ýëܾ}›¯ýëüùŸÿyê¥2,/ƒkk¨êŠLgÔÆ0ØÝÛãÚsWÉtTÌ2Õ†¤zGK´‡…¡?û‹|³ˆ8¹—Å‚¿y}Þx;q '–L W ÝçU޲—eM[C@ëp®™Òd™ç:ħ5Ü€÷­7{Ö\ƒ@æƒR±r1¸ÕØà×nµ¯qÞ¡EPâÉóHÞ[^g]P¦,dœÇˬœãÁú:Ï=ÿ<Î_ ëtð>„É%¼Žö6‚ÖY ׳á[/üæÆ5‹­?3òˆ-˾U°RÅ£”Æú ¦u¢)£26øfÃñ,!øRÒƒÎ"ZÞHCn4²qAÈ É…²×FË7¤F³@Ž}G|ktÕ~58ƒ‘Æ»º¡y‚*Ú‡’µ‘ô‹÷ÖÓ»iƒ®ç&M´^¤ôääB7“Îgá¸Þ`ð¨Ö?]–å̶9ë^¬›KÅ'gë†ÀÔf±¸·!|°uhvp¨–Èõ¼À‡0ÂÐ;Õ©ójŒDÅ¿û¨Nu1¨8†î‚oïGacoCì6vSáþi¬1xcÀ›øÚf‡O<–jHçñÆÄþâÚ´@‡¥¶spP¾J‡b]$ÿ|ì#á0ž².C†…ÊZêÏù&}Ð…°\ßì:jvRD"2žO“Sè«ï©‚eøØ^M0cÌßp ¢©co8¿ÆzÃÆþr7¼ »6ÚL"ùØ8g814'ÁÐtÛ8Ÿ·Ù²:¤OÚÓxcXŒ ñïë¥çB¸'^|;ŒN}п{²¾µkh•Ͼ%§„˜€Ã™’jV"¾Ž»špXY9~0\sñc£ÝŽYØ‹!WEZëiB(c0uÕZ•Õë¾%1Cßóíc+$~Þ"“ÓX j›Ú›æýb4KÅTi¾æ†st±àGÌ ð¾ÙQä—ÂãW˜Ûöö…ðâhÔØy9›\Ú:ËÉç½ þ×Qìpˆ“xý‹g˜oŸ[òˆo'x*øÇøn#K¿‰äy;1Û†ào‘,öÿ†]äÐ,ŠIËá³KÅ‚ÖmÆ-îIü b°³ÃÅy3Ì ~©ï"Ѱ±Õóg=Ie¥ïLÛGÅ;Jæ£ð~½Txt)а˜$Ú.°DøZ»øûmÓíõ!q ßǪ…–Zº#!˜¨ÉãXØ ÷$Ø ®ŒíxŸÂ'C‰Ž]Vba¥i¤f,†s®}–ûØÆÎµ~xT+¼-ñ1ÚâCaÁ©X0^îúÛ?çµ,~óxg—椕Ép‰;LÊx¼à-ÔÎb}[y‹ÝjyGQ|þ·ãÅ-ݦ8ÜrŸ;aQ¸<¶=(O¢²Eó®UäC²¿IHHHHHHxöøP“õ£Ñ¨ýûþáòßÿûoÿÿWõW™N§|ãßàŸþéŸøâ¿ØªoÇã1ŸùÌgøÓ?ýÓ–ûØÇ>ÆW¾òþê¯þŠ×^{7nðÑ~4õ¢#¢j»ªk”Òk˜N§2™NÐj"ÏШVIèãÂû%‚äÌeài£c9›½G‰„múñïNtüÆ} )´Þ®XÂøHºoû¨´‚¡,.¼‹"§Ó)èVên]UÔÑ“ÝEKU_*ªa—Ãa}Cj…VÁfB)ÁÚðû`МWÜ›ÍgŒ&zƒuÎ_¸À… è÷×p¼LçU·ÆÇÝ J(:¼oœð½w­ÂÎY·i´¶U™µkþxzÉWANŒY¿L|u»‰¥Ø—èÇÑМ{Cþ.±M 9¿èK*|ˆéE÷‰Š¾†jŠ-nAµu«6Ka‰|õKU$t;h ýæZ]“ÿÐ6x£§ jû >•òK–ØkiÉLÎ(šéçì[Âná}½4WÊÒ¬)¡€±\ô\¾Ë}N¾Ê-£¾,GW¸åŽ!¡Ój—ÛáäO‘åáíÙñÂé¸X€9ý:ÿÀ#ÈãN Km»x­èŸc@8ÞàM£múŠ?1~}$ÇW'NO¦nB¶½œ`‚%ì$‘¥bªwËÖ)¬šw7¤¾÷‘ØáÏÞ¹ÕqƒGĶ÷Û/OÅKžù~iFÑ«3öÊsÙ/ùù/Ï×ÂYhïí©[+'&zï—Ÿ;Ëd¡¬Ú'­ÁËååw„ðèן¾¬¦¶Dô7ç#º%R¥í›«ó³,ÏyËM+Ët¢`*rú´s€,}’•Xˆe¢úìñÐü¿C4å>ßä[´Ç“3=ãOjñ ù7ñ—ÈòvgAœ§¼û¢`Ú†s²]du,øÅ3Yš¾ÝL¾þdAÇ‚‘´ßc…á”0@BaØ-(¤ÍVaÑn"q'ÔbÞô¾)ʼn¿S'䡤 ,ÛxùÓEõXrg™GoïàIë5V»™,5ýr?’x¾§Þè0F–í÷›es/—ú\Ê,KHHHHHHHdýSÀl¶Fçyξð…Sÿþë¿þëüÃ?ü“É„ëׯóòË/0Nøâ¿xê‹Ú•+WøÔ§>Å«¯¾Ê«¯¾šÈú1‚RÛb2Cæ„yU2s4Òé?ÌV µ²÷ SÎbpõ™kÆÖVŽÒWf±ˆï”@A…|á½’%¡ ÃI c•¨új¶£«àùZEXlÚ ž·Þañ8qÁË}ÉÎG©hG£T((hÝn÷oÉtçZe«jS3͘ÎJ.\yŽ /2X_Gk^k-óé Ñ Q:’õ ¯„œ­ƒò½!?BŽ]X„¶™Ë$ÕÃ8Œès»X@«¸(÷QAé˜ÍæÌ£©u>ì(pî„ Ü?fžëõWˆ¢“ohH&QˬV»½ÿÌ5íI’EV «³É–‡QKÚÉ…o$½÷+OC¥.ø™Hä.ùaûS-!OÖš~Q¸h·Ë·jÊ”Nô!h1– öÒ·ÑÉK<‹#ðõNh_¿D CëþïýYí ¬qN²‹sóËDÙÒn¿BV}=' ;Å»?Aª¸Ç'¨«¥ß*–í>Ä—ç²D®´=ƒð’÷9c ,ˆ=tœË#G°¬XÄ,μ%EOt yôàȹ4»‘NþÖ8ŒjÉÛÕ1º0N91„›œ$deQ€;köòþŒb¦¬’­ ‘Øí»¥™ÜÒ¡äñÇ'¯Ö·¤ôcN´ò8³ðÃúÀÏ…•_«3æo9ñ'ï䦿ƒ§Ê’Â{eF”3o“œºž“y œV3Ÿ9ÞücŸá¢Å ¬þ¬~ÛNíþ1›Ò¯NPg<çürç\Ä¿¯É^çàðûÛÛ¡ÔxBk“ònÐøÛ.T¶a±¢´ AEž“g:ËPºñqW(­A…P1c=Um˜ÎKʲ¢ª µuáÏÚR[‡Œ7A‘—g:×äEŽÎÆ[ʺ¤ªKLôEuÖâ­ !·J¡£‡¼Î2´ ~ÐAIo[•{£¬·&ø[çØØÜàÊsW¹òÜUÖ77‚çv\à¯þ„v©kCUUíOs?¬µáÜL°å d½kI'°-Ùó é¯mq‘Viﬣª*†£³Ù,Ø5mà—íÜ ²ãi.…'%¤å‰—Ç^$?è|äÝ^²ôue ±ÚâòÄmÔ¦þA´ïìžú%*öá·û¼ÅÖþ§‰°ÓáÁç¸rFòt{¸‡Çh¯wk%u‘ôDcïa÷ë1ÚÚC=ÀoüŒ^,þÄÿó^еþ zº?ÑOÖ?WeN2“ž÷ì^¿wmóÎzîÊÏÉçÂÊÿ»';Ö3y¶<ÞžÕwÞ]ë?Þ´÷ô¾6cPü#Û[ï¡zö‹N©ÉϾŸ'SNrãû8'êg=KüY³Ë;xNqB©þtFž¼ë±˜ð³µ²~0P–eÄÌóS¯i~רr›÷´v8§-ÿËïIøp¢U×kC­eU³pÄóÓ›µ ù]ji÷ñòÒáA {ÿ{–Æ?ýÄ{•zQ*ø2/Ù_Hc×! ×±‡wgÁjM‘i²h‹#Þá|´ÈQ§ÀëÔ§D#&-˜Êa¼Ã¡q6âÖ:œ÷Ñž'‰i´¬êxk] ì]øÓÔ–ym©jCÑ)¸öâ‹\»vóç·è]Ê:xß‹(:ÝnPíÇb„ˆ´šv©P ÿ¯_õ­?kÑ/Xu‡¶Vˆ,|Á‰Ec,Ó霪ª±Æ`LôQgá1MãýþL ïòUOF|ùÇ9Ö{æåúp¢þÑï•wÜNþA {yz÷è…‡O:VÈÓîßòÛVžÒy½3œú?tÌùÓ·É?…æ-·§MèŸÞ½zßFÝãv×3,;Ù;žú ¯WžÚx”÷éšä1ƈ<` µÖeò„Ç÷˜N*ðÏÞ’tÆ,ãÏH¹ðœðozàFÏ>w;_Èd|'û›„„„„„„„÷jeýÖÖý~€ëׯŸùšFQáÂ…öwrþAïiõËïIøð¢ L5–º2qxtÄd2Á9¿°kaYÛã—tM~åÿ›ß¹6$‘U› –üGEÃÖ–—/²ø‘ø”ãUŽCS[Om<¥±ñÇÅ? µ5ïƒ:K ªÈ Wx-xNÅa¬Å˜ omˆ|Ô*(û•B+‰? ‰ö9¦ä¶µ®µÁ±ÖQ›š,ϸxñ"ÿøÇ¹rå ýþZëíœG”¢×ëÓë¯Ñ?kƒý^­4um˜ÍæC×–}飥Oöç—¶¦‹„]jåGµíª”Fé,¼F)ªÊ0O˜Ïçm¸Û á—ýÁ‡<ƒc½ËÏX³l]Xä ÎIÞ‡6}—ŸéŸþYË{~ÿ?È}ó 'ÏúÜÎîB§4 O ¨–¯Øny"õëÃ_»øWyhÿ~àxy‡ygžÑ“Üò³æëêðx¦Ï–^õM¯ÊKÀìy€Õ•¬.s使3„üY§ó>jå#ŸZåìq.5Ÿ<ÉsQžáPJ„{BBBBBBÂÏ.>ÔÊz­5¿ôK¿Äw¾óþùŸÿ™W^yeåß_}õUŽéõz¼ôÒKíïåW~…üàüË¿ü _øÂVìp&“ ßÿþ÷ø…_ø…Ôƒ>ÔþÁ!TÕa£® ÇÇÇììì°¹±ÎÖùóhOx·Ÿ ^Û'7û VÈx-uÚ]Ô1DV")o½‡†·£ ŠpÆG)jïqUÎ㫚…’èí%x±{‡W :ÞÇkô†ÉzƒõAÍžgšB²p¾"ûûðÙÎYŒ©©«*d`ÚEØm³ess“½ô/½ôy·¡¬jœ J/åEÎò@žg* íÚXªªÆT5EÑ ¶?,Tõ‚àp8G¸]"ìµÖdY¶²ž·Îa¬ÞøZȈÓ[1›Í888¤,K”ÒháÜ<úÕ¨W/ò„V8iiCýc[äIˆ³‰ ¦o?Ùþ乩wÙ†É#,ßÉ;™Mž€ÎxÌ&"gÞ¯Vý(ï¾,ÿþA»…¤ j~Ôñ½_Ê.XöB–õ]r;g·<£è•ÏôÖOÞoy`ÆÁéCmÜà ¯Dµ°_Nô~è|€,BXO~æ™ç{v2ûC÷tP¤÷<b|eŒ>³ÇYs¢{Œ™èqs4a]öT®Säoð8ϨÕLWˆ¯Ïì}z8ùGlfZ™k2OŽyïœÙOQð'ÇÍ™}ã!Û¯äY5÷vyqÇé#/ô©öÛ„„„„„„„„÷îý‡ _úÒ—ÐZóÝï~—o~ó›-q¸³³Ãßÿýßð›¿ù›+9Ÿÿüç¹|ù2{{{|ík_kgg³ßøÆ7(Ë’—_~™O|â©ýÀû†ÜµÔ¦f8±³»Çþá!‡uöÁ–7ÕÞ ¹DEeþȪ’Í ž£¢ÑyAÑëÑé¯Ñé÷Ñ^4ÖUö6\ƒµÌëŠY]1¯*ʺ¦¬*æó’YURššÊš`™£dw–gäyN–e(‚eE<ÞÇàUçϼöy9'Ï ®^}Ž¿ü ÝîJé`53ŸSÖ:ËXëõY[[g°6`}}ÀÚZŸN§”ñJ‘7d~´Ç á¸jåGDây=zêÑÁ:ȃ±cjF£1£Ñ˜ºªÁ‡ ËfwÀJpmBBBBBBBBBBBBBBBBBÂ{ŒìÃ~W¯^åË_þ2_ÿú×ùæ7¿É·¿ýmÖ××¹wïÞ{^~ùe¾ô¥/­¼GkÍW¾òþæoþ†ÿüÏÿä«_ý*—.]bww—²,Y__çÿøSïù9d­Uk…L)Æã ±¾¾F·ÓAk9ƒ”J®%¥}£lTó ¢9ü6¼&ü~ñ›“Xõ¬èÐ- 4ŽJ õ|ŽÅãŒÇEŸ{çï0uMmjªº¦ª*êºÆYKm Æ;AEŸ{|ò‘ð×ý×|ë[ßâµ×^ãÞ½{¬¯¯ó¹Ï}Žßû½ßckk+õžŸx+ÁL§3öÙÞ¾Ož_ Šogoí?Ûþ£Q«Æw>*Â5½ˆ {Ùþ<(E^tèõûä 2r<¡öë=•±8gƒW¾5TU‰1†ªªd½óXHt¥59à”#p÷Òn‰nü÷›ÏvÎc#Ù/~±}Û¢5këë¼ðâ‹<÷üótú}Dk¼µ(¥èv»è¼ ßï‡pÙ, >¼ÎyTõŠ ­ÔÙ›‚ò<ÇZÛJc°Æ-¶”/YQ4í윣®-eU1Ž˜NgÁÂr ê>õ O ÙÏË…~üãçÏþìÏžè=.\àË_þrê%?8eÁIiˆ]™•sûö]®\¹|ÚýŸ6¼ÃŸr‘^þ»ˆBiuŠ<ö+©dgXËD`iÌD!J£‹^ŸŽ”³Œóe lðy¡´g-Î:Œ1K?uPÆÇk„@;¼E¹óñ gbOÔ{‡·k,8Ê Y¯‚ýÖ…‹\¾ö<ƒ­s 5óºÂ8K–åôŠE¯KímÔìÎ!NOkó¶Õ§Èú†à÷Þ‘e9y^0 †Ç#Æã Ø%¶^$¨óóc˜—5£É”ª®É² SUTUMUÕ§wLü ºá<̪陫wüö“wqPÿä‡òþgí¦?ú5×õwåôÛå!ï? }Î?…óÏê>>Ëù@äÉÎé]}ÖCás>xPg|Q(=óNÿù±Ïr®{¬iê4£¯ùƒžþñüøÍ*?Ù¾Ï9ÿ asâÅ>æc¼_=Yø]àÝÏëÞ'›Ã„„„„„„„²Ô g/VþîÁ9Km ßëBYÖììrëæ6½Þ€‹ý5¬«ÑJa­ÁšŠÓÑ\ Õ¼RK´^ðNÚPÙåðXN-–<ÎZ¬±ˆÝN—~sç¶ØôÑÎB5'S ” 3MÞëÒÉ2ªºb^uuôÉ÷ˆx´ÖÔU…ñQà(Qx%8q++ÇÔ56úÔ‹÷tó xç˜ÎKœÖYNws“ÿö‹ŸâüóWPýue˜Ö&*æJgäyA§ÓEis…Z™˜©æ%ÎZò,~ùJ£D¯´‰÷ë‚ÝuŽÚ:D ?Ð[[c>/™LgA)ï\¬skc,;;;”ókCXp]–˜ªÂY î,U}ÒÙ¿ó‘õ^.åý{w¨Uk?æ=A!OÐvˆ~Æmð,?Ï¿ýÿ}ÂäwÈ»'ü{0ø§u7ä1»Á³¾÷ïrä}çÂ÷f¦—ÂI¼»›àýS9ìYpÀΑ’ƒ~^Èú„„‡,ådYÇãÝø —óšáј›7ïpþüyÖ×…„±%Áá½cAÔrü¡+!Z®H<¡U/|ïƒÚÝ{Î2:Ý.kƒuÖŠn©K”´’ €T !C‹&Óš J·Ôu=–dÎé ˜t ''>†ãª•óóÞ£lTé{qˆ(Äy<ŽB;È5Ý­ól]»Æå®Q¬­aE¨E<'×¼C·Û£Ûë’0Æ´á°Þû\Ûì°t»BQtb ´Zi8ï=e]c­”þÁNÇ£”bmm@·Û§®kÆ“)ûë˜ÏK†£ûûTUmq ¦6XkñÑ‹_žÆâÿçvd¥óüp]…| OXÞïó’'8˜¤>–Žšf¶§{±ò3݆òA8Šü ]púz–ð3ŒDÖ'$<¢› [÷%a·€© ‚E+íõNdAØŸpðïÉ”Â)ÕLÇ9\m±ÎRt{k=.>+}‰Á¹-,`­ÑítŠÝ¢C‘Áƒ^+\ð"‹á±ÖY¬ áµÖÚ0ae½^"/N ̼÷ˆRÔÆ` Ek£RÞ£3E·TüZç”UÅÁÁ!ãɔãcfÓ9¢Ý‘ÁXб­ž&YŸððÞc­Ck­V £ñˆû;»\ºtÍMœ /¢ÀÛàMï{›³ˆßèp‰á“äð‚ô_0Ô"BQoöõõ ò¼[SWe9ÇÔå,Ê7ç @Z+:EsuPº{w!„ÝúÆ“>žç '.Áå£O|l _á¼Ðét\¹Âs/¼È¥çžÃ]LUŽ<Ëé=úÝ.E^Äó »¬dQOúj_S–%ÖZò<§ßïÓëuɳÓd½ó!hW›šº>üV„, 67³Ù M¯Ûec}ƒµõ Æã1N9>>ZÇÅs‰ÿYŸðÔ‘Èú„„'€0Î’GÏ^k-Îyvww¹sgƒ .°±±ŽˆŠV6Ë‚¤÷ ±jþý,‚¸ùˆ uP™çyŽóÁ*Æ–s¦“ “ñ˜ùl‚ªkr2Ñ(£DÈuA– ‚ÅÖ5uUcATØ àu •uÝÎésPÐõÎ{¬õh•ã¼@ÑáÂå+œ¿x‰þ`ƒ©u(íÉ„*ÛëÓ-ºdÑ£ÞZ?+xà+­ÑZò˜Íf8ëé ú¬6B-ÂÉæQ@–g ‚RyTùu]ãœ'ËrŒ±Œ'c†£ÖÃþÞ>£áS[t¦©«‰~}ížYŸðXˆ*s4ðµ5HÔêJyއ#îÜ½Ïæ¹->öÒGÙÔ´¥T$´Öz¼·dY†"(Ø‘…r]¢?="øS)·Íç{²¼ Ër:.kƒ ºÝZeˆÎ:F£wîÜÅN‡¬:¹$¶ðJFQ¨ŒN–ãsýéÝ"HÖÇ¿úçÒõÎa¥6–Ê8T®È:=ÖÎoqåÚ5çÎ#Yw5y‘¡uF'/èvúh|,XçqQý_úý5¼wL§S©+Ó’üEÑi «E„PTÈD…ˆÃ‰n‹&MáÁZ‡óžé|ÆÁÁ·ïÞáèßšÑ[ IDATøë\hcƒ_½ …ƒÖõÚ'e}BBBBBBBBBBBBBBBBÂÓE"ë ËA³>†Ì‚x!Ï æ³Š½ýÞzûÝ~¥4ƒµ™…ó ëL°ÐÉ„|ˆw $}ô•÷ñ£$þÝ{øÅÿ+­é]úý½^ŸÁ „¦æYލáðà[7oÒÏ„þ… dZ“çÖG²Þ:¼³ˆ-ŠBgcð^>^)dÉï¾AÃY ‚w–ÚP5N,*ïÒß<Ï¥káüå«è~Ÿ @2òrçî=ŠNN§“³¹¹NÑɃՋªÞ÷A¿Ýʆß.HbO§è¢”FÅ0Ù^¯<ï#™Þú±Î[¼žôÆÔ”åS•8kÀ‡€V‚CWh­â±5ZiЪUÓ·d½H{É‹³¢µ²Ö‚Öt{klnmqþâ%ºƒ *ï‚’ß ˆþüH ¬õ(Yž‡‚x¬1 ‡CîܹÃýû÷O&à}Ø9Ðéå9¢Të™îÔ½‘öL¥âÿi¯³YÉöö7nÞâÞ½û”óŠ<‡²¬˜ÏçÁF‡¤¨OHHHHHHHHHHHHHHHHxÈú„„w¿ô7禮©”&Ë3Œ™rgQÐëuA®±¹±N§[ ”BÄ"âYfœ}€‹D›AºÝYÖ!ËrúýEщ„?œôÑO®E¦É”³ U9Ù å{(|TÊë@ê+E¦3²,ÃY‡ÊôYCn—Ân p`GK†ÖÝé°¶±ÉÆÖE6¶¶0ºÀ”%…Ò‚ÇáœH{!Xút»º.³ù”ãñ÷ïßçÆ›ŒFC<°¶¶F¿ß§Ûë’çyð›_."¸“Œ½´;¼ó ^@#”eÍáÑ1¯ýäuÞ~û:GGC¬õXW1›Í)ç%J+•ìéÞ$²>!á q"ÖÇ8TsGQ”eÅÁÁ!o¾ù:/ð(ΩŒ~¿C–iD ˆ‹ä8Á"'ÏP*(Þ3S²¬KžuÉóyQ tFži2¥ãk32­ÐâQª Èsú‚A·`´»Íôüæüz}€àÂÁ{P*£è(²,§Ê«­'à‚?LNío¼E“ÑÉ z›\¾ö".CÞa<-™Î+jkñ"äyޱœ#Ïrúݽ^—n·À{ÏÝ{Gܼy‹»wïq||L]ºý½þ€Áú&ýµµHب,'&¿²89‚×~–eXc¨Å‹·†ª®¹¿»Ëÿþþxë­·9Ø?¤®-¨æ%µ±Á¦Ç§¾ðþ!‘õ O‚¨®½ó T´¤·S“Îzò¬@”ÐíBžy¤µ—Qh•‘çyžSä9y^eJr´ÎÑ: Ê器6-ÒÃ{0Æ "¬­­qéâEülŒ©kFÃÞ=Ñdy, xDk”Ïxç‚:?¯À©à©ï<(vx<ÆBV(t¯Ç¹‹—YߺE‡IY3-+ÊÚà|hƒÊWˆ‡z¼ëàïî}®êÃ1Ea/D?w,mñŠN§Kocƒþ¹óHÑ¡´ŽqU1—8ëC@‡4ݼÈéu»t»]òN޳–éxÂÞÞ»»»ŒÇc¬µEAQtØØØ`ccƒÁ`,Ï£}jÛZDP:L_ zb[(P ë “ÙŒÝ]ÞxãMþë¿ÞdoŸ²¬©£® ¦6±@Á‰] ω¬OHx/ ‹àÕ–°WB^äñÜ%èòÿŸ½;µõ®ï{ÿþ=ÓöpæÁ>ÇÆÆ¦`Ãu°/&7ªe¸í%”ÛJ(©hÓ†¦­ªV©ÚÑ–F’VjŠÔ"$„V )äC± u*»˜Á€§cûØgò™öÙãšžéwÿxöÙœc%{ÛÎû…¶8ÏZÏzÖÚÏÚ^|žïúüŠý †;(Š>E¯ë£ï÷úÌ †›Õ6iLw©ôÖ¯—/zú¤IðIèõ{ìܽ›X¾€éd̹'XϘ_“g¤YNÈRˆíeÓù[¶Ž»Éû$@HhcK›¶ÔDH ä=†;v2·s'éÜiÛ0.+FÓŠé¬"!!Ïr’¬ëñôû }Š^A鯄ååeΟ?¿Ô·EÎ`0`8²cq‘……†Ã¹®g?I!Ù¼#Yèúö¿{.º×Þ¶ÝE‹ÑxÂÉSOpäÈî{àŽŸ<Él6£i¡nÚ®&Ç ^’$I’$IÏ"†õÒYŒ‘º©IÊ@•çôz=¦Ó)§ž8E–†Ã‚;HÓÃÁ½^"/ºšœ‹]ì\ZIàÒéq. î»Þö@–ôz}šùØ·Ÿº*™§¬-gu4b0Qd9Iè.NÖ‡nª>EÑÕUUÅÊê*K–F@ (º  ùù96+pŠ¢ ‰m71qñר}» $ [«ßnž÷YY2O8sæ,>ø ßþö·9qâ$£!IhÚš¶m‰±õU’$I’$IÏ*†õÒÕw§µ›¦¦®+’$ÐÆ–¸ÑpêÔI²ÍJ›á`Ý»úô{²<'ݬz‰1Ò¶-mÓf)IÈIBHºiòtsÊ< I×Ýž„Í>wÈ{ýáIìâöÕå5êªac}¥ ËĺeanŽ^±ÙƒŸ’$! ¡{ iJš&$IJH’ÍÅs[ꦦŒ&M EŸb~žÐï3#0+k&³ŠYÕÐ4±{YNQÝ…ˆ¢›¦ŸL&¬o¬saéçÏc}m¦ièõz,,ÌÓëõ,,,0˜Òë÷ɲ Ú¶»t!¤yJšå[58Ћ¶LWÖxôÑ£ÜwßýÜÿýœ;{ŽÉdBÝ4ĪڬÁ©¶¦ê%I’$I’¤g ÃzéÇ® ‚ÛØRU%1¶¤MFÛÖ¬¬4Ħ!KSмG¿?$Ë ò¼O›½ì!v‹ÈFIFHºE`»iò”$M7;Ü» ü¶TmM»ö4+è z½û®Xe´1fc}ÄÚú˜,‘ºêÑëõÈóœ$‰[ðYH“®OŸ4¡¥«¡NHÈr’þúfêéŒiYS– u‰IJžçôzƒÁ€~¿G–eÌÊ++Ëœ;{ŽsçÎ1›Lº ~~Áp@¯×½¦ápHšg„ж›u=›‹à&éfPŸ¤Ý9JÚ&RÕ ãñ˜ÇçûäÁä䉓”eI]74MCUU”eMÓ4—Uß<õ[Oz7­É‘$I’$IÒ3À°^z:DhÛ¶ ‹›†¬©‰1ïîk×xøáGÙØÛ@ü?àðáC ‡s›‹¼ Y–n‹Íue#‘„Í^û@ÓÔ”eIUN šÄ@žfEŸ^^°{ÿ¬­¬±töÕú ³YEYÌhª è‚ê,Ë6ÕÐ4I7¹ßÝKÈ3²,¥G÷m€:IiÓŒYŒÌ&SÊYM5«i6ƒú¬dýts¡Ø®Ú¦m[Ö×Ö9wögÏže2™0èõ˜››cnnŽùùyŠ¢[T7ߜ†²ªhš†¬èm.²›‘æ)!¤@ FHCÊ´³²²Ê©“§øÚ=_ã‘GáìÙ³Ýy©*ªºÞ êKêºÝ<ÇñÒK’$I’$IÏ$ÃzéÇ® c©šŠ¤m» qº©õ˜LÆ3Nž|‚/~ñËlllðÊŸ|%7ÝtmÛRméEQP×5]Zß)»ì“’êªa:›²¾ºÂúò9úyÎÜpùù„´`Çîýì¿bÄé“'X­QV%“IJšdÀ„a0èo…êMÓФ M ! ¤EŸbaŽ ®êºf\VŒ§%³iE=« j!ƒ4¥‰‘¼(h놦ª™6-ãÉKç—˜MKçÙ¿w?Ãa7u1Ô¡«²I’n1Û¦½tÜ´«ìI³Í Ò$%I2 rþüzðA¾ñÍoòððº²Âl6#ÆHY–[Lêº&Æà¤¼$I’$I’ž• 륫K§µ#±mi7o½ÏÊ’º©™N§TeD&“ëk\sí Øµk½¢ iZ"íæC·Î+l. ›¤ ‘–ªœ1Œ™Mg„yÑUÒÔm$ëõXؽ›‡Ó–c&«XéçÄÐUÉl¾¾4Ú4¥n"´-!úyA6œ§Š-ÍxÌÆdÄòÚZW{SÖĺ%kYmÓPÇHQLÒ1mÓ’$ M[‘ç‹ ‹ôŠ‚þ O¯We]O’$@÷M„º®»¡Ȳœf[ýôIȶÎoYÕŒ7Ö8qâ÷Ýw??ò?ö«««Ìf3ʪ¢*KÆã1MÛ-&ÛMÔû*I’$I’¤g'ÃzéøÑ§°DˆšºaFÙÕ·lvÎ×Mñã'˜NK666XYYáú]LJ$i×1ßMžw‹È†‹Óõ!cKÝ””嬛ÞORÒ,#ÉMl @1°ÿð!ªrÌé¦a¼¼L¬Ò¤&ÎÈC —f´IJ“4´IC²¼ æMH)ëšÉtÖuß/¯)´"Äv¿`#mÓuÄ×MMºþûùùyÒ$¥èõ(òœ4KÉæ…ØõûÇ6R7ífXÏf7Jš$IÞuØeYráÂŽ;Æ}ß¹Ÿ‡zˆÓgΰ¾¶ÚUßÔ]5P9›Q–%lVøÄ‹Ovñ›&÷’$I’$Iz1¬—ž6$ízêc„ºn©ë®7=˺.øH nÆL&Ç9{ö'Nœà¦›nâæ›_Î/} ýAAHIyžnÆÌ ±’Œ@Klš¦&†„¢ßg8? ×ψ±fVÖöº’6DÊ6Rµ0[['oZò²¢NÚ¢ I€$!&)½ùy(zŒ¦3–WWYYYa}y•éúˆ~¯[÷âd| Yž“÷zYNQä 6knÒ,%MRÒ´[÷bp/.ÄÛ¶4MKÓFÚØ-˜’„4OÉònñÝ$d´m¤mVW×xàùêWïá¡‡Ž°¼¼LU–ŒÇcʪ¢®jªª!¶m·hïæô¾$I’$I’ôleX/=ÃêºîzÙ›”ºnȲ”6Ë Ž;Át:åÌ™Ó}ìQ^úÒ—pøª+Ù¹cÇæc+Ò"'Ë6ÿÓ‘@·Hl2—2 ºŸÖª5ꦢWôØ{èI–Sô?ò£ÕUÒ}`m4¦[ò¹„^–Á G“§ŒªŠÑxÂòò–.0›Î˜ëÏ‘$a³c>ISzýy¯O¯ßg0Ð è÷ûd› Æ&¡›nO’„˜h[b„¶m¨ën¿½xtýõiF¯×£m»~yy…ÇOçÈ‘#<ôàC<öØ1VVVhÚ†ØFš¦¡ªë­cu7K~$I’$I’¤g7Ãzi´M»07MJ PäeYrþüe9ãÂòOyF’¦¦eÉÊ…5Ž?Á‘‡ŽpÿC±´´Ä… ˬ¯oP–åf×}Ål6£n*ÚÍ}/NîK’$I’$IφõÒ6é<í~ê4¥mB€ÙlÊÒÒŒ•ÕeÎ;ËÙ³g8ýÄiVW×8tÅ•8°Åd€¤ôsdYFžådYJHSš6nõÎ_ìÍOò‚¹ùyææYܱƒÅ;8ùÈÎ:ÎÚtBzyJ2³œIY²²¶Î…•Æ“)yž“å9!ItA}Þ+èõý½~¢_Yž’dÝ$]P[ñy#uiênÑר•Ô“)YÞ£,KÖVW¸°¼ÌcGç‘#säáGxìØ±.ŒoZš&RÕu]S•%³Ù èBúØ^òd’$I’$IÒs€a½´ÍbŒTUÅd6%k2Ò$tCèIwûêê*y˜»îú_¼úÕ¯æÖ[_Áõ×½^Qå9ƒÁa8OŒu7­ß¶4m@šõH³¼›`È2Ã!ýù9æw̳s÷"™ã¾o}‹º—C¿GÒïSX¸°¼ÂÊÚ:óƒišvÓôiÀ罂þ`@oÐ'Ír²¢ûI6/$iÚMøˆ1p1AošHÓ´´I7’®(¹¥ &¶‘þ Oš%¤Iw!¡(zÌÍÍSô{EAÑëmNÖ„4%D é:ê»×ÐÒÒÄîw‹±û}ÛuÛræ‰'8}æ Oœ>ñcÇ8qâ$§ÏœfmmØFÚº[„v+¤¿dÙ­ ñÒΛ.¤Á°^’$I’$IφõÒ³ÈÅоi’4¡œE²,%Ïs2b1Oxü±Çùöwîãðá«xÑ‹®ç†näàìÞ¹‹áp@¯_Ðë÷H’„&BbLˆ$´±« ÒœÞܬ­3­Æl¬ØXÓV YžÓ„4¥E‘Óë÷»°¾è‘åy÷Ú’Œ&41BšB ÝBºhÚHÕ4̦3f³ŠÑxÌh4bue…|G=ʉ'yâôi Ò¶±[$6¶ÔeM]ÕTuMs1¨ß èãÅIýË‚ù‹Á½a½$I’$I’ž; ë¥g©¦nˆ±¥i#m „’eÝâ¬!1²²¼ÊÚÚ÷Ýw?ŸúÔÿÇ ^ð^ô¢ñ’—¼„›nz);wî$Ïsb’yNÓ4TeÉd4bc}å «¬-¯2ÏHcÆÎù9B/%æd EQÐëõè÷û sdyFH’$ÐõÓ'iF–æ´MCÝ´TUIÛ¶$IÆtV±¼¼ÊéÓ§yøáG¹ï¾ïðÀ°±±Ñ½¾UUS!$´mÃt:£,K꺻€Áf¿‹ÇJ’$I’$éùư^z– !¤Y7¥Þ´ŒÇB[}öiÒM°g@]ïý‰“'YZ¾À½ßº—Ï|v°ÿ~8È5/¸š]»v²sÇ"{vïZªrÄÆÚ –Î3Þ˜Ò´)y1×-›÷EB,y‘uýôE<ß¼/I!@K€mÝÐV-!ÔL&S6F#V×ÖyâôiΜ=Ëé'NsæôYV×VÙXß`<1NiÛxÉïœtá|US–%ålJ{q‚>šÐK’$I’$éù˰^z6‹éÂê‹•/mÛ4]X#duC–¦$Œ'&Ó)X&„À‰“§X\XdÇÎìݳ‡¹aŸÅÅ8Hž§¤ Ð6TUI²$#Ïs†!%Ë Ò˜B“K¨›šdÚ3ꦡ¬Jʲ¤ª7ú£ñ˜å••­¯¬¬²¼²ÂêÊ kkëL§Ú¦[6Fhš–‹Õ7MÓÒluÓW´MóÇ8iÖßH’$I’$é¹Ç°^zë&Ê/¿­mcWCKÓD²ª!Ë3Ò<ß\Œ6%I1FÖV×Y[]çĉ“›vd0è³wï^úýÃ~ŸÁ`@¿×gn8¤W½‚¹Áþ OÑï“æÝt t=òuͬœ1™N™L&Ìf3ÖÖÖ¸páËËË,-_`:›Û–š&Ò¶]•MUU[¿[Ó´[ýô×m›†¶mºß=tSûO‰ß¿o\XV’$I’$IÏI†õÒsÐÅ)ûzsÁÕ²,idY7Ÿe)IHH³¬ë”Âfè=›–œ;wnëBÀÅë#îYH³Œºi˜Í*’$Ht“þlé!$Ý}!P×U5£ íæq’$!I2ªª¢®kªª›šoÛf3 ï¦ë»ŸÍ«±½ä7ížQ’$I’$Iz¾3¬—žãºŠœ–¶m¨šš¦ªÉ²”,ËHëú»aýæþIÒ-Þzq ½[ 6·Âó®–&„„Ä6’$aë8ÐuËw!zKŒ-1B]WÔMµyÌI m[ÊfB]ÕTuE]7ÄÍ úض] i°ùb/7°—$I’$IÒó›a½ô<#]ÈéÂðºÛnêzkbýb=L’$”eª§i²§iúÝ ÷!Ä­à¼@Ûn#nN¿ÇicKlc×3ßÔãÖ¤~š¦Ù¬¸i.™žÃåm6›ýSjlBØ\[ÖÀ^’$I’$IÏ_†õÒó@BzIÐÝuÄ×u³9E1¬¿†Ï!|w Èó‚$IºÛ“‹õ‘ö’°ÿ²Y÷ÍÅo7ŸŽ¦©©›Š¶iiÚv+Ðïž³ûÿï¾Þ„þànù­`_’$I’$IúÀ°^z¹pÇÈVHŸ$é÷Ý7ÆH»™©7Íô»w†ÍI}~øÐü©û…‹ú1 Å»p¬$I’$I’ž¿ ë%O Û/šÿc [Ç"üуöïVîħVãH’$I’$IÏ3‰§@’$I’$I’¤íeX/I’$I’$IÒ63¬—$I’$I’$i›ÙY/éi÷Ã.R+I’$I’$ýIåd½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IÛ,{>ÿrO<ñ·ß~;Gå†n൯}-W\qÅ÷Ü÷öÛoç¾ûîà–[nᵯ}í|LI’$I’$I’~ÏÛÉúååe>ô¡qôèQî¿ÿ~>ô¡1™Lž²ïí·ßÎW¾òVVVXYYá _øŸÿüç¤cJ’$I’$I’ôÃzÞ†õ÷ÝwÓéô²Û¦Ó)÷ßÿSöýÚ×¾ö”Û¾þõ¯ÿHÇ”$I’$I’$é‡eg½$I’$I’$IÛìyÖßrË-ôûýËnë÷ûÜpà OÙ÷§~ê§žrÛÍÙW IDAT7ßü#S’$I’$I’¤Öó6¬ ¼ãïØ Òo¸áÞñŽw0 ž²ïë^÷:^óš×°sçNvîÜÉk^ó^÷º×ýHÇ”$I’$I’$é‡F£Qô4èÉΜ9Ãõ/z™'B’$I’$IÒŸxù6ø#=æ±#÷såU×üÐûÛY/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤m–y ôý4õÈ“ I’$I’$éO¼£G>íÏád½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í ë%I’$I’$IÚf†õ’$I’$I’$m3ÃzI’$I’$I’¶™a½$I’$I’$IṴ̂^’$I’$I’¤mfX/I’$I’$IÒ63¬—$I’$I’$i›ÖK’$I’$I’´Í2OôܳÑF+–šÈ(FÆDÆfmdJ æC`˜ú!2H`»¸:K™O¼N'I’$I’$=›ÖKÏçÆ)#'HY Ó¦¢N-@ B¸ø¿ ‘YŒØn¥%ŸV$á0peÙ37ðäJ’$I’$IṴ̂^z[]ßà‘³çøìW¿ÆðÚëÙsÕUdsCúi—ÁçÚˆa3¬I$tÛồôY€iÕòÈú˜/=ò(GŸyõÿÅ+_öb熞tI’$I’$iÖKÏBM¹ÿñãüþ§ï`ÏáÜxâ,/9|ƒ4’'R-4!кÉz)i€7 ‹÷9‘-e5£oðÐÑG(«’#OœæÿyÕOò‚½»HBðM$I’$I’žA†õÒ³L#G–W¸ë›°tî{¯¸’PÖ CÂ\HHÚHljbÛRÓRÅ–&FÚÍ`¾m#ÄHVä"±i‰±¡®+Byš‘µPNGLV—©Ë !©™5Sî=qŒQ[ñâ½{ÉÓÔ7C’$I’$Iz†ÖKÏ"ª’£³Ó1IlIÚ–´iHêš…aº¾Áxu|Çù~ŸÅ¹óý>y $ME]×Ìõ{œ:wšñxÄO½ðO1( ß4I’$I’$éi`X/m“ª*¹ûëÿƒ, ìΓ');²œ4d´I$Oò<ZÐKzI $US“æ=²"‡MÓÐŽ¦´ ìŸ["ss ±EFž¦¤YJçFˬ]X¥ž•,f;Yìõ™O 沌´¤›«Õܹ“²$4 œ=ÍW&Iß¼§ÁÑ£GùçÿüŸóÄOðÓ?ýÓü£ôH7¿ÍpçwòÞ÷¾wkß·¾õ­¼ímo`<ó+¿ò+|ãßàúë¯çŸü“Âþýû=¡’$I’$IÏ1†õÒ6ˆ1òð£ßba8 =аA 9»ò>± ”YC¿WPô ˆ- óóô‹œ”®—~0P–5ý~Ÿ,˾Ö× Ä„4Ë€HLrˆ€”jV—VY:wž„”;öppÇn1!+Ò4¥)½4g!ËÙ·°ƒ<ï‘%+£1»æçvØÿØ}ðƒäÑGàóŸÿ<¯zÕ«xÍk^ó¿}Üý¯ÿ•»îº €ï|ç;|ìcãïý½¿ç •$I’$IzŽ1¬—¶Á±c3ÚX%IRzyÊÂ`ÀÆhJ„阪,iÛ–ª®™Íf\}øsý!¡´mCfdIBä¡›t¯c¤njªjJU7 4 dI I $D"uYSU yšsõ¡Ã\uàJ†Ã‚$iIÓ@š&„BB % !B©ÛHžÖÿQ´mËG?úÑ­í}ûöñÆ7¾ñ²}ªªúÛßÏ÷q’$I’$Izv1¬—ža?ú0G>@QtaøtZ±¼ºA’´!²°°@žÏ¸êêÃìØ¹ÀÁƒWÐFÈû}°¾¾Îéc§X[[#!¥9¨ë†²œQN§ìÙ³‡Å;عc'Ã~Ÿ¶´M»õ:Ä+^q+ÇO<Ξ=ûHÓœápH¯—’$ ªÚ6BLèfó!ƆI9…¼ ÏüøøaÅù­ßú­­ín¸á)aým·ÝÆÑ£GYZZâ¯xöÏþÙêØozÓ›øÒ—¾Ä<À¡C‡xË[Þâ —$I’$Iz2m“žAgÏá·?þ[¼äÅŠ^QBBŒ4ÏÙ¹k7««+ÌÍÍ3+g$I`Ï޽ĉ±…¶áÂÊ*ÇŽãܹsìÚµ‹ñƈ$tazÝ4Ì&SÖ×Ö˜Ÿ›'ß‘çÝâu]o¾‚n ¿?pÝu×qÍ5W³wßnÜO¯—AÒÒÆšº® ¡ëÊ'ˆ]X_U§ÏåÂÒ7½ô¥,.,ú¦þ˜Üpà üÞïýeYRüò]\\äýï?³ÙŒ^¯ç‰”$I’$IzŽ2¬—žAûãüÒKË« çæH“Œ,/†4mäôé3ô{+äyAQ¤iB]×$iBÓ4ÔUE–e,..2ڀŅš¦`þŠƒÄ6²wï^(òŒ¶m)«’éxJ–f$iJšeäyNÐ#„ÀÆhÄÉ'–XÛXe:3™Œ™Lf4UC]·”³šªª™•%kk¬¬¬pß·¿Ã/¾ó¾©?f” þRõ’$I’$IÏm†õÒ3diù<ŸxŒ=ûö1\Xd~~$ÍiÛ–IU±òÄaçÂ"ÙbFš¥äyFŒÝTül6£¬Ê­ãÇcv,,°gÏnb‰DvïÞÝ-ÛëwUSÎfŒ7Æœ=s–ºnH’„$ÍÈ‹‚Á GšÖw/²¼zŽ¥¥³¬¯¯1›MiÛH5«¦¬­®³¶¾ÁhÏý÷ßÏüÁpï½÷rþüy8À­·ÞÊÏýÜÏqàÀËöÿÀ>ÀÇ?þñ­íO|âÜqÇ|ò“ŸäÌ™3¼å-oáMozÓ÷¬¥¹ÿþû·ýßø n¼ñFÞ÷¾÷ñÉO~rkŸ_ÿõ_çå/ùÿöüÜyç¼÷½ïÝÚ~ë[ßÊÛÞö¶§ì÷È#ð‰O|‚o|ã,--‘¦)ä'ò'ùÙŸýYvïÞ}ÙþçÎãç~îç¶¶á~7¿ùÍüÎïü_ùÊW8{ö,ƒÁ€›o¾™Ûn»«¯¾ú{¾¾ÑhÄ'>ñ ¾ô¥/qòäIêºfïÞ½ÜrË-üå¿ü—9|øð÷|ÜùóçùÏÿù?s÷Ýwsúôiêºf×®]Üxã¼ñoäÖ[oõCE’$I’$=¯ÖKÏñt•×ÿ߯ƒ4g÷î}¤YNŒóç/pôè£L6F\}ø0 ‹ ‡sôz=²4cÖ–¬¬®2•¬®¯súôΞ=Ãp0`ÇÜ<ý^$I¨«šØ´Œ&š¦¡m[Æ£ÕtFÛ4ll¬qìØ 66F@`07daaŽ[þŸ¸‘^/!IRÚ6’¦»v-2Ïȳ1± ´B$i¶Uó_>õɧ=¬²Ï}îs|õ«_½l!ÕsçÎñð|ë[ßâþÃÈ»Þõ.666¶î_^^æŽ;îà®»îâýï?W^yåeÇüà?Èïþîï>幎?ÎñãǹýöÛyÏ{Þë^õªïûºþÝ¿ûw|ñ‹_ÜÚN’äYó·÷ñœ~ðƒÄ/»ýèÑ£=z”O}êSü³öÏ~`þÀðÎw¾“sçÎmÝVUwÞy'wß}7¿ñ¿Áµ×^{Ùcyä~ù—™¥¥¥Ën?uê§Nⳟý,ï~÷»·.\\ô­o}‹w¿ûÝ—½‡ßç;3;37¼á üƒðžUçY’$I’$éGaX/=ªjB*®¹æjÊ:CÆhÌÁ+3 XX\da~ŽÑósóÏØ¹üŸÿó~ßûŽ=Êßù;g«èÉÖÖÖøð‡?Ì{Þóž­Û>õ©O=%¨/Š‚ªª¶ÂíétʯüʯðÑ~ô)ö]ÔCwa#˲­ §NÚº/ÏsöíÛ·õ\O§Ï~ö³|àøûL&Þóž÷ð›¿ù›\sÍ5ßsŸ»ï¾û>þ7ó7ùÕ_ýÕ­Û–——ùûÿﳺºú}W×5ÿâ_ü ®¾új®»î: [@ùÿã|YP¿wï^z½§NÚzO>ó™Ïpå•Wòó?ÿó~ÀH’$I’¤çÃzéð?þ!;þe£²¦?\ +½{÷ìáÆ—ÞÀÜ`È…óç‰m D–——9{æ,Çãëßü&¯¸õ•8pÉhD]–Üpà ìXXä›ßøeYrÕUW±ÿ>²,ãôéÓœ?žªªØ¹s'y‘cë^õÓö1š¦áõ¯ýÖ>×_=ÿá?ü‡§ýsss8°Ÿ4KhÛ–ØBܬ¾É’œ,Í! lÞN€@¼,ü~º½öµ¯å—~é—¶¶:Ä_ûkmk{0ð¯ÿõ¿f×®]¼ìe/ãž{îáèÑ£lll°²²Â®]»ˆ1òú׿~kZ{×®]ÜrË-ôû}Þþö·o…õGŽù¾¯ëðáü÷½ïÝš6¸ãŽ;F[Ûá/ü~ñqkûå/9ïxÇ;xì±Ç¸÷Þ{yôÑGyá _ø”c]{íµüê¯þêVíÌM7ÝÄ·¾õ-|ðA  ÝOŸ>ÍUW]Åêê*_øÂ¶{ÅWðk¿ök[AþM7ÝÄ… ¶ö¹ûî»Y[[cqq‘3gÎ\ö¼¯~õ«·þ}ã7òæ7¿yëõB7Õ?ý ‘$I’$IÏy†õÒÓìßþ*½á¼è‘¦MÓRUÚÍ0|21™Ì‘§½¢G–¤yΞݻi›†\s- œ>s†õ•U†sô{Ü €Á`ÈÆÆ>üû÷í#ÛœìÎ I’@S—llŒ™Ì¦ìܵ‹;‰±%I¡¬*†sCò"'Ïsò<£m#èfç Í úáâd}@¤m[Ò4}FÎç“kh®¼òJ’¤»À]eÊÅ þ¢Ã‡o…õÐMœïÚµ‹·ÝvÛÖíu]óØc±¼¼Ìl6c2™\vœ'w¨_ê¯ÿõ¿þ¬ ê¾öµ¯]¶ý†7¼á²í$IxÃÞÀûßÿþËó½Âú<¥þê«¯Þ ë/žW€o~ó›—Uýù?ÿç·‚ú‹n½õÖ­°>ÆÈƒ>È­·ÞÊÁƒ/Ûïßü›Ãm·ÝÆOüÄOPãoü ?T$I’$IÒó’a½ô4{ôØc4m ª[Zj)I’’eiš’çE–1?¦)Yš‘ápÈ¡C‡èõz,.Ì“$Ñú:MY²w×.V.,›–CW^ÉÜÜ<±Œ66¨ªŠÑhƒ$bliÛ–¶m¨êšªm¨ÏŸ' ÙlF¤%Ò’åÉVMÀC M³.”IÜÇÍ»6w»¸Ð,qûÎo’$¤iºÖϺìòº'ï{üøq>ò‘ð¥/}‰²,¿ïqž¼@ë¥úýþ³îoïÒž|à{†ðO¾ÀðäÇü Oà/ž×“'O^vûG>ò>ò‘üÀc-//ðš×¼†ßùßÙš°àx×»ÞEžçÜtÓM¼ò•¯äÏý¹?ÇÎ;ýp‘$I’$IÏ+†õÒÓ¨ª+ÖÖ6رc/½~4IiëÈ ?`~až¹á\7?27˜cuu•µõ5B ¤IÆ`0`qq‘S§N‘& ålÊŽÅyvïÜÁ©Ǹþú²±1"Ír’$a­_0ÞXg0PU3ÖÖW'$IÂÂâuÝpaù“É„º®ˆ!rå¡CŒGcꦆÍIúÍþIÿ¾xSò¤»"žÑ*œ§{ï½—w½ë]Ìf³çÝßߥ8EQ|Ï ß÷1\?èßÏÅó?77ÇûÞ÷>Þ÷¾÷]¶˜pUUÜsÏ=ÜsÏ=|øÃæÍo~3·ÝvÛ3öI’$I’¤§›a½ô4ªêŠ7¾ñÿåâ@öòò2_øÜçÉ‹œ^¯·95¿À}û‰;#ÓéŒétJR²´«—Ù½{7GŽ!i›Š^1¤i[ÊéŒ,IYºpž^¯Ï`0dùÂ2§Nœä–[n!IÒ­©ú¦©Y^ºÀt6e}4b2SU%Iš0?7ÇÙÁ€Éô:âæˆ|ï7D¾µa«Ó¾<×ølÛ–õ¯þÕeAý[ßúV~æg~†½{÷2yÓ›Þôœýû»´Ë½,ËË€½èÒÅ\¡ ËTEQ\¶}Ýu×±oß¾ø˜ýû÷oýûÀüËù/yðÁùÃ?üC¾ò•¯püøñ­ûg³¿û»¿Ëd2áïþÝ¿ë$I’$Iz^0¬—žFeÕgÃÍà;Rd3z½9B4Md2™‘&Ã1iV§)ƒbHš&ÄØ2™ÌÈó.Øâä š¦f:žRM+>ÌÊÊ £õ v,îàŠû‰mÃ}ßù6{Œ+bÏžÝìÞ½“µuÎ?OYNÉØ¿o/ƒÁ€¼(سg{졬J6Æcvïì‘g á’Æ›Ð-8K7A¸U%³Ùòì¹5åüàƒrúôé­í?ógþ o{ÛÛž7W\q>úèÖö£>Ê‹_üâËö¹´Ëÿâc~T—ï7ß|3ûoÿí?òq^üâó⿘¿ù7ÿ&çÏŸçsŸûþð‡·úð?ýéOó·þÖßzÊI’$I’¤ç"ÃzéiÔÄ@–ö€.Ò^XØÁ­·¾ò’="y–Ñ+ &Ó1 ¢(˜Í¦ll¬SV ;(§3.œ_b8Ð/úÌf3öïÝËãÇÓ+ zEAY–̦S>ÄîÝ»diBÛúý>»wíb4î1˜ŸŸgïž= çæÌÍCL˜LKªº!†@Ó6Œ¦3zEA !Ä@Œ6FÚ­‘û®×ž»©ÿç`ιsç.Û>|øðeÛëëë?–çyr=ÐêÅÿqºùæ›ùò—¿¼µýéOú²°¾m[þÛûo—=æ–[nù‘Ÿ÷ÉÇøÌg>Ûßüæ§,{üøqî¹çþÒ_úK[·ýüÏÿüÖ7n¾ùfÞýîwÝÂÁå¯ü{ì1î¸ãޭ󏼼ü”‹’$I’$IÏE†õÒÓ)&dYïâÉ pøðÕ—î@š&4uÅ™Nsö̦Ó)³é„ªœQô v,üÿìÝyœuÿñWUß×ôÜ3™Éä¾O’IHHH­+ ¸ ëAQVY× uwuwa]Á]YQE *,·B.Ž$ä¹È$’Iæ¾zúª®ªßÃ̃!×$&Á÷óñàñ`ª¿ÝUý­êoºßýíÏ7;—ÃuÜ®õ\]¿ß‡Çc °-‹Ö–fí”’‹ôûÞ©6ïø ð|˜¯×†A0$‹i …1½>lìw¤5\ÞY`§+¨·]§kÁY ×Ávlü>/_ì”:=………½þ~á…8çœs¨ªªbÛ¶mÜu×]'d?¦izBè]»vñä“ORYYÉÀ?°°yÑ¢E<ðÀ¤R)ž|òI¢Ñ(gŸ}6Ùl–Å‹÷šy?a„ƒœ=eeeÌ™3‡¥K—]uðoºé&®¹æFE.—ã7Þà÷¿ÿ=©TŠh4Ê‚ (//ç7Þॗ^bΜ9Ìž=誅¿}ûöžýø|>âñ¸ÆùHPX/ò2LÞîW™ëbÞP××pÁpñé4X¹uõut´·“N¥H';1 ¿Ç‡‰K0Ä4M\×Åô˜dÒ)BÁ™tŠdg¢kf}*…/Å +Ô7pñ˜&Ócbàñz°r6Žë’Íåp\‡@ Œ× ÉÑÔÒ†ë8xL9Ó}'¬7ÀDZqpq°1Ü®¸>ceèL%ñy½åZaýرc)//ï)…S__Ï 7ÜpØöÝ¡÷ñ9r$›6mºf´ÿ×ýßøÆ7X¸páòüb±ŸûÜçz}éðè£òè£ÔÖçóñå/ù„íû‹_ü"6l µµèZ¯áÇ?þñ!Û>øàƒÌŸ?Ó4ùÿïÿ±nÝ:lÛ&—Ëñío›¢¢"b±µµµ½~•°hÑ"€ùHPX/ò2LÓì*ãº.¦ëÁõtÍww Œ®íñ‚b±®íI&iin¡­¥l—ªÉÏcÛ6¦aâózéèè °¿³“¶Ö6lÇÁ¶mÛ&gY¤SiBáÁ`_0„³ ÄÃa²VŽT:K{[;9Ç%á:’’©4YË"ððø}>¼¦ NŽl¦kÖ¿c[à:¤2´u´â7lø)u~<ßúÖ·øÇüG’ÉäA·G"Çé é›››{_ŸúÔ§øÖ·¾õ¡?Çüã´¶¶òàƒ¶M(â;ßùÎ ™Uß­¸¸˜ýèG|ýë_ïµ.À{ 6ŒþçÆ4M ë ”¯ýëÜqÇ=Á|SSMMM½î7}út¾ð…/h‘ …õ" žòî¼³H«iv1 À¤{aŸ#b IDATqVŸßG4Á4Mü©T’D{&‰Ö60 \×Å5 ¤¤„Õ«VñÖö¸nW™¯×˨Q£Hg2456â÷û …C¤3Y:“œ9s&b˜^ZÛÛ©kj¢µ#A"™bÜ„ÉÄ KhéH²gÕ5{1|&ùùyå†zM¼vŽLg;V6 nÓ´1=~ŸÉ-×ý“Nºˆˆˆˆˆˆˆˆ|äìÚµ‹²²²cºÏî[¨¨ÒçöšY/ò2 ·+¨w\ÇÆ¶sàº]5ëq0Lðx ¢Ñee¥ì{{/¥eeåI¦hin!‹ÍËÓ ££–¶6ZZZ¨¯«#‘Hôì/“L&©¯¯'//Ž„iikçí½oóÆêÕìÝW‹áõÑžHОì$›sÈ+(ÂÎ94Ô7²ko-{ÔÑÖÙ‰×ç#•ì$ÑÞJ^$L<¢(/†ß$ â5l)Ë¢°¸Œp4JCs-­-´¶´`uÉL;ÂNgÀÊaØ.ùñ<"ᘉŽfZö‘ ë„‹ˆˆˆˆˆˆˆˆ'…õ" ;—#gåºjk¿Sî&—³0LÀc`]¥qlÛÆïPXXDqQ éŽ$™D’L&C4%//ŽÇ롽½ÎD'‰öêêêp]—‚B<^‰D‚D"A0¤¤¤„p(D.—#gÛ†IA~±X©áhŒxax½$RJ ÀˆÐ™éZXÖc6N§qLÃuq pmÀõÐÚ–$“…‚“X8@cS‚7×oeXU¥N¸ˆˆˆˆˆˆˆˆÈqRX/ò²sYÒ™ ¦ibšfW0ïØ®Ç0À4q]—\Î&“ÉÉd©P–Ãþ}µàÀÀÊJ¼étŠúºzöíÛKkK ™t‡ÃD¢QÊ\—x<Žãºd2²Ù,~€H,F~¼€Œ•Ò˜¦ƒ®p )).%™ÎPPP@ÕÀ467Ó±§¬íðû1=^ü¦Ÿ` BCS3 M :R6UedrZZSGFuÂEDDDDDDDDŽ“Âz‘òæõ`ÛvÏ"³®ë¾Î[$“Y¬œ…ax¼& uõ$;:°²¡pˆòòr:£QB:™¢­­d2I6ÁÊf)//#gåðx<är9ìwfèg2âñ8>¿ŸL6‹Çë#//N,%“³0<R‹ýê1<^ÆMšLGGi+‡iúÈåQV\B]m-©Î$N6‹íËF°26‰Ž4¶iÐÔÚA~~!±‚†ŽͰa#tÂEDDDDDDDDŽ“Âz‘Ï㡱¾«¤L:Ʋ, «Š ‹™0vŒN¸ˆˆˆˆˆˆˆˆÈqRX/òA¾À¼^JJŠilhÄx§n}OXo€ñNÍy †LÓèšuO–` €×ç%I‘—£´´„üü8U2 b–•% ðy …ÃÄâyDb1|þ®û™/†éÁv\lÀbz}x¼ré ~¿?@ÖŸß& ÒÜÒFs[;¶ã 0 pq ýÄóó((Œc›&ÑH€tkÉd‰T’1Æã÷ûtÂEDDDDDDDDŽ“Âz‘؈áÃH§Ò¦ €ã8¸®®‹ã¸¸®ƒ³1pH§Rà:„ü>"ár¬L†¼xŒà:6………xLۀ‚¼^/áh„P$Œ×ïÇ5L2¹©tšœíôügÙœ•J“³m|¾ŽÓUG? bçÚÚÛijjÄq 2é4©TÓ4É/ˆSZVBAA¦ÏðaƒÈlÛŽãX$Ó)†V–ëD‹ˆˆˆˆˆˆˆˆ¼ ëE>`ƒU±uëÀÅv2é4¹\Wúœeuý¿•ÃÎY¸ŽM*•$Lbg-FŽ?!—ËQTTH{{Ùl† ßOQA!¦Çƒi˜øƒ¼~.HgHe-2ÙË"›Ëaç Ó É’èLâ÷ù€NZš[iOtR6°Š¶ŽZZZ°2YÒ‹öD‰D‚¢âbV d`U‘Xˆ@(@ à§¥¥‘ýu $:L^¥-""""""""ò>(¬ù€E£òã1Þ®ÙK:¦±±‘D"A[[ mím¤R)²™,¹œE4&Nã5ML×eðÀ*ªÄçó1räH::ÚI$.øü>"‘®šöÓƒaX¶M[{;VÎ&Ë‘¶r¦‰×㣭½×…h,†454Q[[KGg’@$J]C#ÁPˆåHt&Éæ,¼^/‘h„ŠÊ””á¸6ÁP¯×¤¨0úúŒ®*#êD‹ˆˆˆˆˆˆˆˆ¼ ëE>åå¥ü×D:¦££Ó4ñz=x<&^¯¿ßO4¥¡þ†aà÷ù±,¯×G¢3A&&à÷c¸.~¯Ó0°s6¦a¾33ßÂq]²9›T:E.çÊåÈX6¦ib†< (¯ à÷ûilh ¹¹_0€ÝÙIKs3%ÅE˜^Í-­ìÝW‹í8TVTPRRŠÏï'gÛ˜@6ÛNgg'ñ¼ùq.]0['XDDDDDDDDä}RX/ò!?~•+xãÕ]µéMƒ¬eâñ˜üLÓ¤µµ +k“ËÙ„‹£Dóâ„"QÂá õÄ"ÂÁ ¦ià:Ùl–lÎ&kY¤3i2Y —üXœýõõd3Á0ñ‚Bb±8¶ --mìÚ]Cg¢“aÇ3tøH¨#??Ÿt&Kgg‚–Öf²Ù,+‰FÃt$X–Å™ê‘ÇÍ7p»^|¦a¸®‹eYdÓi\×Åql:;“´¶¶Ó‘H E(,,Âãñ`årälÛ±q0 Óô`z<øüâñ|òòºþ‹Ç ˆÅòXVŽö¶ö®õ¾…EÅø¼>š›[(,*"“ÉÐØXO[{V6 ¸är9ü?†aÐÑÑÁþýû©¯¯Ç¶m?W³êEDDDDDDDDN…õ"’É“'qñÅa8.¸.¦¦Ñ5K>gYضãØàB*™¢¡¡‘ÆúÀ ¸¸˜H4JÎuèHvÒÑ™À²s€éõà‰D¢„# —p$J8ÃÉZ465ÓØØDCc#íDc1âñ|477ã¸. 8p€DG;¡PŸ×K0À4 ‰d³Yr¹Ã+Ê< L'VDDDDDDDDäP‘Ñ—oý2/ÿå/t$:pÃ0p‡\ÖÁu]\×Áp]ÒÉ$ ¤Ói"á0±¸I:—¥¥½•DGÓ$b˜&¦éÁðxpƒŽ¦fÒV†´•ò;Éd,’É49;‡cƒá1±‡t2A[GùÔÕ ¹¹™d2…mÛx¼B¡EÅE„#\’É$„B!‚~?SGÕ 9AÖ‹|ˆ øî¿ü3_ýò­˜.ุŽMβ0 0À01 ƒ¬eÑÒÑF*›!‹â`É‹“oçhmoçÍ-[x<^ü>?¯×ôàš®a’ÉÙ¤³Y¼^/±Xœˆ/Š?ÄëñÒÜÒL}}É$ÑXœŽDÃ0d펑ÃôzPQI0IJ²¤S),Ë¢¸¸˜s¦L è÷鄊ˆˆˆˆˆˆˆˆœ *ƒ#ò!›7×þýuØ–•Íbçr]³ééªgï–cÓÚ™ ¶¡ž¶T†´ãЙÉb9ÁH„òŒ3š@(Dg:M"¦=™¤±¥™¬ãàz "±(eåå :ŒÑcÆ0vÜxVU‘slZZÛ0=>*«ªp\Óã¡­#A{G‚\¶ëxl;‡‹‹at&:©««£®®ŽYS&0°¤P'RDDDDDDDDäÒÌz‘~pó-_dë›[YùÚ«8¸8˜¸®KÎuIe24·µ³gï>ŠJŠqMÇq±L/áXŒq%etv&ÉXéL–t6Kaq1¯׋Çë#á iO$hlh¤¶v?-­­X9›Ît \—ÖÖV2™ d-‹`8D$! u-lkY¤3i&ŽÉ%s?ÜEeÇá«_ýêAÛ Ã 3hÐ Î>ûlÆŒó‘¹>6nÜÈ/~ñ Î:ë,>ùÉOžÔÇZSSÃ]wÝE^^·ß~;¦yò|ìº.¯¼ò +W®¤®®Û¶)..fÚ´iÌ›7ÇÓ«ýþýû¹óÎ;ûxóçÏçâ‹/>¦cH§Ó¼ð lܸ‘––¼^/ `Μ9œvÚi‡<æ×^{W^y…úúzLÓ¤ªªŠùóçòohhàùçŸgÇŽ$ B¡C‡eáÂ…TUUö¸jkkYµjëׯçöÛo× ,""""""rPX/Ò<wü×|öÚëØ¹};.]?sqp1 °²YššØ°a#++(,ÊÇ2¹9ÛÆëóƒÇC8Å›ËáÙDP8Ò5Gß5p]H¥Ó´utRW_OÝ:Ú;ÚI¦Rd2Y:::ðûý¤R)ÛÁqlÇÀçóF1=&–e1 ¸˜ï}éæ~ c Ã`æÌ™=Û¶Mcc#Û¶mcË–-\xá…,X°àC9–7²oß>¦OŸNQQÑ_õµ¼råJÚÛÛÙ¶mcÇŽ=iŽíW¿úkÖ¬!??Ÿ)S¦àñxxóÍ7yúé§Ù¹s'Ÿýìgß)?EÏs(--=äy-+;¶•Óé4wß}7uuu 8³Î:‹T*ņ xøá‡ihh`áÂ…½î³xñbV¬XA~~>gœq®ë²víZ~úÓŸrå•W2cÆŒž¶o¿ý6÷Üs™L†1cÆPZZJCC›6mâÍ7ßäÆodĈ=í“É$kÖ¬áõ×_gß¾}=c‘ˆˆˆˆˆˆˆœÖ‹ô“h,Æ]ÿ{7]÷öÖìÁ0ÀuÁp]+G¢£ƒ];wÒÔØD~AÇ5ÈZ9,ÛÁãñRW_Çã!±°r9üÁ–íbårär6V.‡íB.gS[{€æ–ÇÁÊå°r9+G¢³Çé ê=¦‡€ÏÇãÁ¶mÂá0ñhˆÏ_5ÑH¸ßúË4M.»ì²ƒ¶ïÞ½›{ï½—§Ÿ~š1cÆ0pàÀüX6mÚĪU«6lØ_uXoYk×®%//ööv^ýõ“&¬ß¸q#kÖ¬aðàÁÜxã +@ÿÑ~ĶmÛØ´i'Nì¹O[[çœsgžyæû>†gŸ}–ºº:Î>ûlþæoþ¦ç‹yóæñ£ýˆçž{޳Î:‹h4 t…ï+V¬ ¬¬Œ/~ñ‹=¯¿sÎ9‡ÿüÏÿäøS¦LÁï÷ðÛßþ–L&Ãu×]ǤI“zö»bÅ üqžxâ n»í¶ží¿øÅ/عs'‘H„Ù³g³råJlÛÖ`,""""""r’PÍz‘~TZVÆOy˜‘£FáqÁ똮ÇÓ5Àvɦ3dÓiìœMO¢ضC[{;uõ ì©©agu5»vífß¾}ìÝWËî=5TïÚMMÍÛ¨k ¥µ•\.€ëtÍÞƒD"aš=¡Ïïë™mðû)-Ìç‹W_Ia~ü¤ìÃ!C†0kÖ,V¯^­‹êC´iÓ&R©³gÏfèСlÞ¼™ÎÎΓâØÖ®] À¢E‹z‚z€`0ÈìÙ]¥œvíÚÕë>Ý3ëãñs­¯Y³Ã0¸ð {Í௨¨`ܸq8ŽÃž={z¶¯_¿è 练z€ââb¦NJ&“aÛ¶mÔ××S[[Ë Aƒzõ3gÎ$³ÿ~2™LÏö1cÆð™Ï|†ï~÷»\zé¥x½ú¾^DDDDDDäd¢Oê"ý¬°¸ˆÿ}ø!îþÁ¿óì“Oa``˜~l ×  a¸ho'š%‰bÛ9Û›(.)£­µ Ûv‰Dcx}²9Çv±¬Ù¬…e¥ÈZ9²–E<ÇÊfÉ$ÓØ–ã8!,Ë"—Ë‘N§1¼&H˜âÒFVU0ë´qø}¾“º‡ÊK/½DCCC¯íÍÍÍ<ÿüólݺ•D"A,côèÑœwÞyôj›ÍfY²d k×®¥©©‰p8Lee%çw^Oíï‡~˜uëÖõÜçÞ{ïàšk®aÊ”)=Û׬YòeËØ¿?¦i2hÐ -ZİaÃ:öåË—³|ùòž}Nœ8‘AƒÓóß¹s'þóŸÙ³gÙl–¢¢"N;í4æÏŸß3 `óæÍ<ðÀ,Z´ˆ‚‚–/_N]]¡Pˆ#FpÉ%—ŸŸßçýv—À™6m‘H„]»vñÆo0gΜ^í:::øÎw¾ÃÀù‡ø‡^·mß¾{ï½—©S§rõÕW÷lw]—eË–ñÊ+¯ÐÔÔD$aâĉLŸ>»îº‹3fpå•WöØFŒAaaá!û²;÷½çº>‘a½ëºÌ˜1ƒ@ ÐëË‚÷ûÏÏþýûYk¾ªªŠ×^{ýû÷3qâDLÓdþüùTVVÔÖ0 B¡©TªW î¹çjÀ9‰)¬9 Dc1¾ùoßgáEòo·ÿ êšÀ0‰CŒ9Š‚x5{ÞÆôQVVB8&Ëb»]caQ!@(D8£­£“ÐÐÐ@{{†'Kùd¯¾é®7ÿî/KŽäÝë¼×öíÛúò¤;¬ommeíÚµ´µµF™0aÂ!¿h9Ã0¸è¢‹y›ëºìرŸÏ׫lS"‘è5«¾[$éÕ¦¸¸ø°‹Ý677ÓÔÔÄ!CT“^DDDDDD䢰^ä$rÆìY<ü‡Ç¸ëÿÅÒ¿,§¸¤Œ±£ÇŸ§±¹‘Ö¦fÒ©$áhé!“³±,‹t:M2•Æq¡bà ,ÛÁ±¡0Žãâ&:{‚ìl&C²³“T*M.—#›³plÃ0¹hÑ|¾ù•/{'<lذ 'øt]—‡~˜d2Éßÿýß÷ªK¾víZyä~ùË_òÕ¯~Ã0ضm555Œ3†Ï~ö³=m§OŸÎOúSžyæÆŽ˨Q£5j{öìaÏž=Œ7ŽQ£Fõ´ß´iK—.eĈÜpà =}^SSÃÝwßÍâÅ‹ùÇüGöíÛÇË/¿L4å+_ùJÏln˲øùÏÞSîäHš››ùÝï~G(âÖ[oí©Ÿïº.?þ8¯¼ò O=õ—^zi¯ûy<n½õÖž_̘1ƒŽŽÞzë-ª««9räQ÷½jÕ*\×åôÓO  1~üx6lØÀÞ½{ß×Úû÷ïß}s8555¬^½šÊÊJFÝë¶îšõ?ûÙÏzmùå—™3gó7sB®×%K–ÐÜÜÌܹs …B=Û-Ëê9?ïÕ½­»Í‘<ñÄ€fÒ‹ˆˆˆˆˆˆœjÖ‹œdbyy|û߿˲¿,cé_^¡¸¬_ÐOYy)™½iØO*“"ŠDñùý8ŽC.—£½=Áº —\®«Ìé1q “DSÓã¡­­d*I6cá:N׊¶@EY)_¼ñï¹pÑüS¢ŸÇ¡©©‰+V°aÃB¡PÏ¢ Û·o§¾¾ž#Fô ê¦L™Â²eËØ½{7;wîdĈ=3óß[®d̘1\wÝu}ž¼lÙ2>ö±õšå?hÐ FÍÖ­[©¯¯§´´”5kÖ0{öì^eW|>3gÎìS ýꫯ’ËåX°`A¯…n»ë¤¯^½š×^{K.¹¤×ñLš4é 2@C† á­·Þ¢©©©Ïa½×ëeòäÉ=ÛN?ýt6lØÀÊ•+ßWXß={~Ö¬YõÍìÙ³;¬ïèèàÁÄ4M®ºêªƒnR™,I²Ù,þ@€H4J*™Âu]R©v.‡cç0\3|(Wÿíe\tþ‚“º?lÛ>¨Þy·üü|®½öZ¢Ñ(@Ï¢cÆŒ9dû±cDz{÷nöìÙÈ#;v,%%%¬_¿žŸüä'Lž<™áÇS^^~ÐâGRSSƒalذ¡g¶·d2 @]]¥¥¥ÔÖÖô)?œ#=Ïp8ÌàÁƒÙ±cµµµ <øˆÕæw/B|$ÕÕÕ466rÚi§ {õk8fÍš5|ìc;îL»k·¿»dÐû•Ífyàhmm媫®ê)ônï98ãŒ3p‡Ç{ŒW^yå}…õõõõüâ¿Àçóñ™Ï|æ òD}ñî…jßkíÚµ<ýôÓTTTpÅWh9Å(¬9É ¬,g`e9mííÚÚZhïhçí·ßfÿþý1|ÄÊ+*)--Å벯öéŒE:ÑIg*M2•"â:NWMúª f>K.XȈáCO‰~0 ƒ³Ï>»×ß¡PˆÊÊJÆŒÓkö{*• //ïÕ=[»;@Üzë­,_¾œU«V±xñb ëK€Y³f1oÞ®>y÷óÌÏÏïÓó|¿²ÙlO™š;w²sçÎC¶{ýõ×;¬ïŽJKKß×ñº®Ë£>ÊÖ­[™3g .ÚÚÚ¸öÚk{­sðnÝ_Ntttt>»–íþõÈ»íÛ·Ÿÿüç„B!>ÿùÏòZ‘“ŸÂz‘SPaaž>ž¾:ãºK¾lÛ¶ùó®Áß]ó¼»ÝêÕ«iiiá*á è IDATÌ3Ï$‹‘ŸŸÏ´iÓ˜8q"ßýîwY½z5—]vÙxÃ00`µµµÔÔÔµìLee%[·neÇŽ 2丟ç[o½Å¶mÛ4hP¯ÛR©555x½^***NXß®[·Žl6ËܹsùøÇ?~È6ÿþïÿÎöíÛimm%??¿§ÄN÷/ÞÍ}gÍ„w«¨¨`Ó¦Mìܹ“áÇ¿¯ã}ê©§xã7˜>}úaº)~衇˜7o—\rI¯Û±m›²²²cÞ¿eY<ðÀ8p€+¯¼òˆe•*++Ù¼y3{ö졪ªª×m555=}ónMMMÜwß}†Áç>÷9JJJ4ˆˆˆˆˆˆˆœ¢Luˆ|ÔŒ5ŠÒÒRvìØÁ›o¾Ùë¶õë×S]]MyyyO¼gÏžyæ–/_Þ«m&“Á¶íƒf[w—yoøÒÜÜÌzÚe³Y^~ùåƒî?uêT Ã`ùòå½ú&›ÍòÒK/õùX—,YÂK/½Äĉ¹òÊ+øeËÈ‘#ñù|¬\¹’ÖÖÖžíŽãðÌ3ÏÓúÐõEÄ/ùKª««ùØÇ>ÆŒ3ŽØ¾»þ’%Kz][ ¬]»–P(ÔkƒD"Á}÷ÝG&“áú믧²²R/~‘S˜fÖ‹ÈGŽa\sÍ5üä'?á`„ ÓÐÐÀæÍ› ‡Ã\}õÕ=áí¢E‹Ø¼y3/¼ð;vì`ðàÁd26mÚ„eY\tÑE½¿{Öóâŋٸq#3fÌ`äÈ‘œuÖY¼õÖ[¬[·ŽüàLœ8ŸÏ׳˜í„ zjë———sî¹çòâ‹/òÿñŒ7Ó4Ù¶mÛ!k–Jaa!—_~9¿ýío¹óÎ;™4iáp˜êêjjjj¨¬¬äâ‹/>aýÚØØHuu5¥¥¥ 8ð°í¦M›Æ3Ï<ÃÊ•+Y°`†a0kÖ,ž{î9î¾ûn&L˜€ëºìرã /5JKKY°`/¼ðÂA}s¨ö‡²yófþøÇ?âñx(**âÙgŸ=d»3Î8ƒââbÂá0ŸøÄ'xì±Ç¸ãŽ;˜8q"@€;w²ÿ~ÊËË9çœszî÷o|Ó4ù×ý×ÃÓO>ÉÆÉÏÏ'™LòôÓO²Ý\ÐóËŒyóæñÒK/qçw2qâD,ËbݺuX–ÅW\Ñë‹—ûï¿ŸÆÆF† ÆÖ­[Ùºuë!¯‘3ÏœE‹‰DX±bëÖ­# 1nÜ8&OžÌý÷ßÐc\pÁäååÔ7ƒ âÑG=êšo¿ý6е0ë¡fïw1bDÏšgžy& àÏþ3Û·o'‘HÇ™3g‹-굸«ã8GýÅB÷1´¶¶qÑáóÏ?¿çù\rÉ%”••±bÅ ^}õULÓ¤ªªŠ 0zôèC>~uu5ÕÕÕ‡|ì!C†(¬9E®ºAÞ«®®Ž¡C‡ª#D䤲dÉþøÇ?²páB.¸à‚~9†¶¶6¾÷½ï1|øpn¾ùf‘¿»ví:æõìvïØBEÕ>·WÍz9é,^¼˜M›6õÚÖÙÙɲeË7n\¿ÛêÕ«ŽZƒ^DDDDDDDäX¨ ŽˆˆœT²Ù,555,_¾œaÆ1hÐ :;;Ù¼y3Éd’™3g2xðà~;¾úúzÆÄEvEDDDDDDDŽ•ÊàÈ!© Žˆô'˲xõÕWY»v-µµµTTT0sæL¦OŸÞïÇç8¦©§‰ˆˆˆˆˆˆüµø0Êàhf½ˆˆœt|>sæÌaΜ9'åñ)¨‘MiƒˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""ÒÏÖ‹ˆˆˆˆˆˆˆˆˆˆô3…õ"""""""""""ýLa½ˆˆˆˆˆˆˆˆˆˆH?SX/""""""""""Òϼê9VÕÕÕÜsÏ=,]º”ýû÷ã÷û=z4ŸøÄ'¸öÚkñûýê$yß~õ«_ñ•¯|å¨í®¸â ~üã Çrùå—³|ùò£¶»ÿþû¹ä’K4|Ç´úúz&MštÔÇ/..fÓ¦Mêh9f ëEDDä˜<÷ÜsÜxã¤R©žm–e±fÍÖ¬YÃc=Æc=FAA:KDD㾈ˆÆ4‘>RX/ò!¹úê«yñÅÚnÁ‚üò—¿<îýTTTà8ÎQÛýð‡?äÓŸþ´NÌI"N3dÈ>µýŸÿù.¿üruÚ_©aÆ‘L&ÚîöÛo禛n:áûûí·ùÜç>G:>l›7rË-·ðÈ#è„}D}îsŸãüãIs<Ôõ."÷EDcšˆÈ‡I5ëEDD¤Ï~ùË_ñÃM·^xÝ»w«ÃDD4hLé#…õ"""Òg[¶lésÛ7ß|S&"¢q_DDcšˆH© ŽˆˆÈQ<òÈ#8pà¨í®¹æÊËË?Ò}áñxúþ&ë·""÷Eä£.›Ír÷ÝwµßïçK_ú’Æ4]ê0‘#=ê‘#{ä‘GذaÃQÛ-\¸ð#ÖO™2…gžyæ¨í Ã`òäɺxDD4î‹ÈGœeYüð‡?»æšk(**:j»OúÓ”••©ÃDD4hLé#…õ"""Ògüú׿>â/.¾øb¾ÿý﫳DD4hL9*ƒ#"""ÇdòäÉ,[¶Œßüæ7,]º”ýû÷ã÷û5jŸøÄ'˜;w®:IDD㾈ˆÆ4‘c¤°^DDDŽY,ã†nà†nPgüúþ÷¿Ï7¿ùÍcºÏܹsI¥RGm÷¥/}‰OúÓÇôØ:)"÷ED4¦‰È)Oa½ˆˆˆˆ“âââc¾a}jÇ4h:YDDDDDþê¨f½ˆˆˆˆˆˆˆˆˆˆH?ÓÌz9.‰D‚M›6QSSCss3©T ÇC$¡¢¢‚aÆ1räHLSß ~TX–ņ ؾ};MMMضMqq1¥¥¥œqÆÄãñý˜êêêØ²e {÷­L&C  //ÊÊJFMee¥NÞGH]]ëׯgÏž=tvv‰D(**bÒ¤IŒ1â#û¼wïÞÍ›o¾IKK íííd³Y¢Ñ(yyy”””0a„ãšíþ×Àu]vîÜÉÎ;©­­%‘HËåƒPUUÅ„ úe koogÅŠìÚµ‹l6K,c̘1Ìš5ë”éß\.ǶmÛØ¹s'ííí´··cYñxœx<Έ#;v,^ïÉù±#‘H°víZª««immÅçóQ^^΄ 5j”^ç';v°yóföïßO&“!SVVÆôéÓ)))9%žƒmÛlܸ‘mÛ¶ÑØØˆeYD£Q† Æ´iÓú<þ´¶¶²nÝ:ª««éèè PTTĸqã7n\ŸÁô×À¶m¶nÝJuu5 ™Lbš&………0vìX†ú¾o~óÍ7Ù½{7õõõ$“IB¡%%% <˜ñãÇô~êÚ·o¯¾ú*µµµ2}útF}R_uu5ëׯ§¾¾žt:M4eРALœ8ñˆ ÞÊ©õY0—ËñÚk¯±eˉáp˜ªª*Î=÷Ü>¿æs¹[¶léyÕÖÖ†ëºäååÇ©¨¨`„ D"]A ëE¤ÏšššxôÑGyòÉ'Ù°a®ë±},cÞ¼y\~ùå,\¸°O î¾ûnþíßþí¨í¶nÝJ~~þao?ãŒ3¨©©9ämÿýßÿÍ'?ùÉÃÞ÷k_û=ôÐ÷‡Ù¾}ûI>œH6là¾ûîã™gžéù ñ^‡3Ï<“[o½•Ù³gðõ¯_üâG|ìn¸ù—9¦ãÙ¶m>ú(O?ýôaÏñ»UTTpþùçó©O}ŠI“&õi3fÌ`Ïž=ÇÜWçŸþAÛ¾ñopË-·|d®‡]»vqÖYgµÝÀY½zõAÛkkk™:uêQïÿÐCqÞyçõ|àþÝï~ǃ>Ⱥuë{ŸÊÊJ®¿þz®½öZÂáð ;ϯ¾úêQ?Ð9’ŽŽŽ>½žJKKÚÎu]–/_ÎÃ?ÌòåËiiiéÓµ~Î9çð©O}Š3Î8ã¯þ߬¥K—òØcñç?ÿ¹Oý7vìX.¾øb®ºê* pLûºí¶Ûxä‘GŽØfÊ”)<óÌ3$“Iî¸ã|ðAÒéô!_;—^z)¯¼òÊQ÷=uêTž~ú飶ûÙÏ~Æ·¾õ­£¶3M“ 61niiañâÅ<ñÄlܸ‘L&sÄÇ ƒœ~úé\uÕU\tÑEýN½ÛË/¿ÌOúS–,Y‚mÛ‡l3fÌn¹å.½ôÒäN•×ùû÷ÿûßó…/|á¨÷ß±c±X €ŽŽî¿ÿ~~ýë_³wïÞÃÞgòäÉ|ñ‹_䢋.úÀƒê¾¼ÎÇŒÃË/¿Üó÷Þ½{¹çž{xüñÇikk;ôr¯—… òµ¯}1cƲ͋/¾È}÷ÝÇŠ+pçmŠ‹‹¹îºëøìg?K^^Þ!Û¬Y³† /¼°OÏ÷öÛo禛n:j»û￟oûÛ}zÌßþö·èÂŽãðì³Ïò»ßýŽ%K–ö}k·ÒÒRæÎËõ×_ÏäÉ“ß÷þ³Ù,øÃxâ‰'xõÕWßßËçó1cÆ >þñsÙe—õé½ËÉò~ª¯û¯d2yÈPúÿþïÿ˜6mZÏß³fÍbçÎG|¬›o¾¹çÚ«©©áöÛoçÙgŸ=¨ÝW\Áüã6¦Å‹s÷Ýw³m۶ö?~<×\s Ÿþô§ñù|'ì(//?âùØ´i ,8êc >œ+V|(×@~ìöÄOðùÏþ¨íª««{^+<òwÜq µ[¹råK=¦Óiþô§?ñ›ßü†5kÖu 1 ƒ‘#GrÁð·û· 2D¡ÕG„¦¼ŠÈQ¥R)~ðƒpúé§ó¯ÿú¯¬_¿þ¨A}÷­?ýéOüÝßýsæÌaÉ’%} Ïúbûö퇽­¦¦æˆÿpí8Žô&êÝáÈG=¨ïììäþáX´h?þø?ðض͊+¸üò˹ñÆI§ÓGüp}ê}ûöñ½ï}sÎ9‡M›6²Ï}ݺuÌ›7O~ò“<ùä“} ðº¯õ_ÿú×|ìccÞ¼y¬\¹ò¯òÚY½z5‹-âŠ+®à÷¿ÿ}ŸûoË–-ÜyçœqÆ|ãß ½½ý„WSSSϵ}ÑEqï½÷òCX÷¿-_|qŸwýúõG ¤€>ÿ3gÎË—/gîܹ|æ3Ÿ9â“÷ž¯ßýîwœwÞy\vÙe¼õÖ[ǽÿßþö·LŸ>[n¹…—^zé¨!t;_¾|9·Ýv§Ÿ~:?ûÙÏŽxŽõ~êÐÿ®¾ñÆ,\¸ðA=ЧàûƒÒÞÞÎå—_ÎM7ÝtÔϘ›7oæŸþ韘;w.6lЇSè³`ss3¶msóÍ7sÛm·2¨?Úµøûßÿž©S§rË-·ðÊ+¯ôi q]—íÛ·óÿÙ»ïð˜²ÿàï‘H“D0! Q%!Dßh‰mwµÕ»Öw—µkµ/_‹h«·VD·zˆÞk¬Ñ[Ho¿?<ñ“2sÏdf23™÷ëyü!sæÜ;wî½sÎçžó9sçÎ…——¾þúk÷ÁI7¬'"¥îܹÌ›7 y®çöíÛèÞ½;~ù夦¦*,W§N˜™™IÖ§,X/Œ?zô¨Ò×E‚õ¢ Õ³gÏо}{«üÞ°°0ôîÝ[­OnÁ¦M›bÇŽjÕsèÐ!´hÑ!!!¼¸ hsòäIøúúâúõë*½7::~~~ ƒúlÁ‚hß¾=nÞ¼©V=‘‘‘èØ±#ƧñŽ¿¾ÊÈÈÀÌ™3áçç§V'7%%+V¬@óæÍqùòe’““Ñ«W/DFF*,—¬)œ––†³gÏJ›S§N í§¢‡gΜAãÆ±xñb¤¤¤¨uF…€€?‘òäÉ´oß^8¸øy»Âßß_iÀ•×¹fîûK–,Aß¾}?áD;v íÚµS É/¯_¿FRR¾ÿþ{L˜0AèaÖç÷žÑ£Gcûöí>˜Úµk'4ÿü8(œqãïï/TÏ™3g$RÅÆÆ ß[:wî ­Üû§M›†€€Ü¾};Ïõ?~<×&RÞ¿¾}ûbäÈ‘xöì™ZçÎøñãÑ¥K—Ov¶§¤Ùƒ¨ôþ¬óNDRR:uꄈˆ•Þ…:HöY‰¾÷_¿~ &`Ë–-JËå6Ø/)) ƒ ÂðáÃÕ~è¼wï^4mÚT§ƒ"H3¬'"…®_¿???É)ˆªX¾|9  0`onn.4 UY@]ªaóüùs…äçÏŸ n+ÈÁúØØXtëÖM­ BDDîÝ»§‘ý ÁW_}…>h¬áD=ò”’øøoøðáxøðaŽ×Dƒõ©©©’`:¤tÎç´r¼ÇŽ‹¹sçj¤®„„Œ=ýõ—PùwïÞ¡K—.Ø·oŸÆ>Ï©S§Ð¡CµÿÆÒžzõêFŒ!ùàWW#ëß¿7n乿òõ×_ktð“¡2„¾`XX–-[&Y.{°>%%üôVSíQ£FaÉ’%ìP0ë‰Haã'00P+ ³½{÷â·ß~Søº———dŠFÖgdd|Ê£§Ì±cÇrý»È¨úB… åÓ3T?ýô“ÐqÈ'OžÄ÷߯•º'Mš¤öè Òž£GªÝ(ñâ-ZdŸ÷À˜:uªVêÞ¾};¦OŸ^ Ï—¹sçª<RDBBúôé#<ÕZŠÈùøyPA4ŽÔ‘ßEàãƒèìk*ܾ} šŽ­ª+W®`äÈ‘ùrŽÌš5+ÏA^çùc×®]j×®óѨ[·nUëýïß¿GëÖ­•Î"Y³fåø{ÅŠQ»vm¡:<¨ôuÑ u¥J•TÎ-bõêÕXµj•Æëýí·ß$ƒg4hFâewïÞ=ôîÝÉÉÉlO)qáœ>}Z²œ¡¦.Í º3Cé Š^ÙMŸ>]£û>7aÂÉ{8é/ë‰ôLRRž?žçšòÃ?h´¾ìV¬X¡pZ¯È¨uE˜«W¯ T4RHd4yÍš5 ìªë‡V»“©)±±±>|¸V§ö3F£#EIÿkt«¶:c?ýô“V·±hÑ"ɵ†êâÅ‹˜9s¦Öêÿðᆪ‘óHd½—σ ¢Áú‹/*MU'¬Ï¾½ŒŒ >\+úLÿüóÊi>Tuÿþ},]º”×¹‘X³fÁÑ5 ¤„……åšÊFttýÁƒÞ·ÒÒÒpèÐ!¡z´1ª>::'NÔÚw0vìX¥Aî̪µåêÕ«˜1cÛSjþ¦fÿ]54çÎÓȃLCdH}AÑsñó”Lׯ_ÇâÅ‹µz G­± ”¿¬'Ò3ÇŽƒ»»{žÿiâÇ,$$Då|®y1jÔ¨\ó Ö¯__2Oï“'Orí|(1ŸÝ‰'r..¬¯_¿~<÷ÒÓÓµHPů¿þŠÇkuoß¾5ú+Ý‹/4šw\öìÙ#t®)R#GŽÄ–-[ŽôíÛW(¯yzzºÐô\C“’’‚aÆi=€pîÜ9åËgú<¨P¶lYxxx‡óçÏ+ì@Šæ”nß¾}ŽßJÑëÇÊÊ íڵÀбcG888fmØœ1c†ÎSÄð:Ï?R “¤¤¤\gtêÔ … I‡ž?®päøéÓ§…gàvéÒEãŸíÇZD6¯^½z… äúÚ;w´6Kæs .Ô›E¤ ¡=%ò»jˆ¦M›f”÷¯‚Øü|dýŠ+„~«Ê—/iÓ¦a÷îÝ8rä–-[†¦M› mïéÓ§M±Cùxßâ! ¢ì½?ÿüS¸|ƒ àçç$$$àÆØ´i“Ð_/_¾ÄªU«rL·µµ…«««Òø€Só³1D§>ÇÇÇãüùó9RIÓcˆ<¨RªtëÖ ...HMMѰwï^\¼xQí}‰ŽŽÆæÍ›…྾¾hÖ¬J”(ׯ_ãôéÓØ¶m›ÐhÐððpœ?>Kj£'Nd!áëë+´`åîÝ»sLóÖÕ¢V…\.‡¿¿?ÜÝÝaaaÇ#""B¥)£çÏŸ xêŠH#ÚÊÊ {÷îEåÊ•?ý­jÕªhÖ¬jÕª…Ñ£G ŸIII077/0çGXX˜pò¢E‹¢k×®pww‡ ž9zôhž‚õuqY‘€J¦¾}ûbêÔ©9¿#GŽDHH~øáµFµ-]ºTh–ˆ Ö¯_Ÿc¶CÏž=1dÈ Mm\°`V¬Xñéÿy °*TÈàGïèooo,]ºÅ‹Ïò÷AƒáÔ©SèÞ½;’’’$ëQ7ﯶ‰,öå—_f àe?ßgΜ‰§OŸJ°¢££ÖcˆD§»¹¹aÆ °··Ïò÷~ýúaçÎøöÛo%ïYoß¾Epp0  ÕÏ”ýþãçç‡I“&I¾OQÞz©Åg3uèÐ!Çßnß¾-ôÞ±cÇf Ô€……&OžŒHÞ‡ÓÒÒpêÔ)´iÓFãÇsçÎB÷ Ž0 enkîܹ9ú9ÇǤI“„~ÃÂÃÃs샾´§>?®ª´ó»­¬Ë¶¹››V¯^ãUæý k×®B޶lÙ¢—O´uèº/¨íöÝ‹/$Fμ×+J¿;zôh¡{‘TL…ôÓàQ¢y>;wîœ#PŸ©hÑ¢X¼x1lll$ëyþü9öîÝ›ãï"ñìõ3gÎ(ÍÙ›[ã÷s111¹¦Öù\… r$ ‚øøxáh7nŒéÓ§+¥Ò½{w 2$Ïû’’’‚àà`¡²&LP˜–ÈÕÕ³gϪgÏž=B³A(ÿX[[cùòå9:–™¼¼¼„sîJ·tMdt¤²ÑÜ2™ °±±‘ü'˜0$.\ikbb‚Å‹çÔgòóó¾gi*v:uðßÿþGÅÍ›7ñäÉüûï¿8}útŽüûŽŽŽ¨Y³¦dçÏŸÏ5Ø!´OÙGÞÿ?Ê\ê_:ur­ÓÂÂB8uœ¶®SÑ€b5ð믿æšn¦lÙ²Xµj•ZëÕð:—æåå•#Àý¹!C†ÀÙÙYïïû­ZµÂ”)SrýÕªUC»ví„ê©X±"þúë¯ú̶¶èƒCE*___XZZ Ýk³¯uçΡYM¦¦¦èر£ÆÛ¬Û¶mºž¦OŸžkPÐÅÅEøÁOöÁG7n íää„9sæäÔwL˜0Ax$ïêÕ«Ùž’àëë‹Å‹ãÌ™3ˆŠŠÂãÇqíÚ5DDDèlT±™™V¬X¡pfIݺuñÝwß Õµÿ~£ér_°lÙ²øñDZwï^\»v 111ˆŠŠÂ¹sç²|‡¢3£”µ *V¬¹\.Ù&HIIAjj*;—†Ãÿˆè“ÔÔTœ>}Z¨ì°aÔ¾^²dItëÖ Ë—/jgoÈ‹¤šÉ>ºC4_}¦K—.áýû÷Ÿ*s œË—/ „?~¼džSEÑ}‰‹‹“,W¢D tïÞ]i™–-[ÂÕÕUrªqFFNœ8/¿ü’7=amm ;;;ÉëQ¤1/šSWWììì$÷1,, C‡U˜\Û£ô‘è=ßÇÇU«VUZæÛo¿Å¢E‹$nÝ‹/P²dÉ<ï÷˜1cðý÷ßç¸-ZTa???…y£3%%%áâÅ‹Y~§ÒÓÓ…~×ëÔ©ƒråÊåøûï¿ÿ®ö÷T¾|y¡rÚz`*uÜ2õë×Oé¨ÀråÊ¡N:Â?xç-È¡ŒL&ƒ——îß¿¯×÷}¥¯×ªU aaaBmNešZµj íOnëC×GhÓ¦ä¾dddàÈ‘#Yò΋®mÕ²eK+VL£Ç÷Â… BÁò&Mš D‰ _ïØ±#~úé'É:Ïž=ËòÑ{@ÿþýaaa¡ô|:t¨ÂÁOÙûJlOåÎÒÒK—.Íõº“Ëå:dekk‹ *(-Ó¹sg¡…„£££µ–.Nû¥†Ølݺ5‚‚‚`kk›åïVVV9îåR×d¦¥K—¢U«V¹>ô ÖŒ?ÒoYODŸ\¹rEhž££#jÔ¨!YÎÏÏOh»¹MÝ···—Ìo™=X/š»2SZZZ–Ư1/.+’ø8B¡víÚZÝE©²kÕª•PÊÜR;¨³]Ò¢S‘|•º$Õ‘>ŽÀiÓ¦ Ö¯_¯÷Ÿ'¿äuÑTEç’èÃXuî¾¾¾=z´ÐÂŽš¸]¿~]a ./¿×y!:-^¤c®ª7oÞ/N׺uk^ç¼ïç u4ä¥eÇBtDuöQ½ºL#šòRªÍnjj*”.êóY©©©8{ö¬ðý^ŠÐú·oßÖêŒC¾®~ùåÉdúÌÙÙYxAvc Ìb_°\¹rX¸paŽ@½"¥J•ZéÔ©Shß¾=ÂÃó¬§FGÖÑ'¢ ƒzzz •«[·.LMM%§]ݺu qqq9¦—7hÐ@é‚§=B||<¬¬¬‹Ë—/«ü™=жmÛ0î|õ"* E‹Zß—K—.iô<ýÎ4±0.å/E£L²Sgý„üàçç'´ÈéË—/1zôhL˜0Íš5CýúõQ·n]Ô¬Y³@-«é{…èCÖ ^¼xñbžÓ:4kÖ,Oï«X±¢ÐȰ'NdÉ--:S´#ûù5uòäI\¾|‘‘‘¸uëÞ¾}‹¸¸8|øðA8÷ç´Ñ ͹ïèè¨õÑ—¼Îó÷¾/’ëXß?C~ü¶hÑŋϑæ&»#GŽ ==… ›7o„ÖÖÖÖZy&ÚÞYèò×_• ‚H½sçŽÐÀ¦2eÊä:[);sssÔ©SGèáóÅ‹ѪU+¶§4ô»ªOêׯ­[·J–‹ŠŠ‚··7Ûwzج[·n®)Ë111AÛ¶m*YöêÕ«èÞ½;Ê”)ƒ-Z nݺ¨[·.ªT©¢òà2 ÖQ–¢hÐ@´áW¾|y¡k_½z•#Xïåå%¹ ü­[·P»vm?~\aǬaÆ Ÿ”ž·^*X/—Ë…?»¡yóæP9WWWƒ;+Uª¤ÑíiZ§N0{ölÄÄÄ•ÿðávíÚ…]»v .ŒZµj¡U«VhÓ¦M¾\§º–––&tß211Nâï÷Š:HëÏ;‡”””O#ÍD—­Y³¦äL¶L<À’%K°}ûvƒ¸gЦlprrâuNz'?FQfæ”_µj•d;ñÂ… ¨W¯8 ô0ÄÏÏOi˜¼Íõ\¦LÉ2 6Ôiø˜?_$XÏvjÁUªT)þ¦1&aí»o¿ýÛ¶m~öäÉJYemmF¡uëÖhݺµðyD†aˆôŒž>}šçê<] ØŠ4~Um|ä6¢Gä)xf*e)pºvíªpq¾»wïâñãÇÈÈÈ ÖÔQõ„Ò$è¨Cô<”Êm«ê9(º]"M+R¤æÎ+œ.$»””œ;wÓ¦MCóæÍ?¥ÑÈËèfC!z½–.]Zø¸êû½B$UMBB§Q§éééBSºEêMIIÁœ9sдiS¬X±Â`‚F>|*§hña^çd DSá8p€nSàâKM¥’ê¯äW_‰íÔ‚Kô\5Šãa,}ÁZµjá‡~P«³oß>üøã¨]»6úöí‹C‡ñ‚* ¬'"•¿"ùÕT-›Ûc¥J•”. ˆë[¶l©4}ËÑ£GñðáCÉi­uqY’‹keRezŸ¶h¢çV¡B…„RÄÇÇ3èA:Ó¤I¬[·N¥û«"—/_ÆèѣѰaC¡ãø{¥ZYÑ`¦U­ZU(¿ræhú«W¯ ÝÛ¥Rत¤`àÀ˜1c†ÁÝ#Eƒõ–––¼ÎÉhyzz Æ8xð RRR„Ò9ÙÛÛ£Q£FZÙ_Ñ&šJ7¤Ï}%*Dí¯:cê Ž=?ÿü³Úõ¤§§cß¾}èÙ³'|}}…×u"ýÅ`=}"•[>“ÈB.ŸwòÕ!•køÖ­[xòä îÞ½›ëënnn°··— Ö‹ä«/¨‹ËâS­UùîóJt* ©©©ÆÏm"]jÑ¢Ž9¢±µ!bbbðÃ?`РAB9v âï•*÷ u¯òƒÈb¹™£éEòÕ»¹¹IN#1böîÝkç‰èïI~ü¶ñ:'mµÍ4¡sçÎ’e®^½Š­[· =ëܹ³Ör)‹Uîÿºì+±J¢klK~rcë Ž5 [¶l‹‹‹Fê»páºté‚ùóçóâ2` ÖÑ'E‹*— \§hYE# ¤F³ÿûï¿YòÎg÷Å_êÕ«—#'~¦cÇŽ!22Rév¬¬¬P£FûÝÛØØ•Ë@€¦ÏÃääd¡FŸ¥¥%ï#sttĆ ¢±Q‰Û·oÇÈ‘# Ôq…¦ß«bÅŠéìs‹,{æÌ¤¦¦ å«—ªoÿþýB‹Þ§ñ÷éÓÿýï1þ|!((mÚ´Ñûß¶ÄÄD^çdÔDSÖL™2E£õi³˜œœ\ ~{D·M†Gô\ÍÎ1&a}Aooo>|³gÏF… Ô®/==S§NÅÊ•+y(ë‰è“’%K •S%Wí³gÏ„Ê)Jw#•'>::û÷ïWøzË–-|áÒ¸qc…Ÿ',,LévêÕ«—ç<³©Q$ú}êÓyøôéS¡rÚÈmJ”WÍš5Chh("""0räHµ“ܱc¶oß^`Ž\.×øï•!Ü+ªW¯.Ù‰‹‹‹Ã¥K—„¦@K嫟:uªÐ~5jÔ§OŸÆÌ™3ѯ_?tíÚÐéB¨¶¶¶Båt•^‚×9é‹Ê•++\ßésÏŸ?—,SµjUT¯^]kû*´ÖÆbœÚè+±J¢çªèhÆ$ ó333C¯^½pâÄ „††¢W¯^*­‘›‰'âÑ£G¼È ƒõD¤ò£¢”3Ù%&&âÉ“'jý8Ö¬YSi>ºŒŒ …Óó‹)OOÏOÿW6åüÆJ÷¯ /. ˆ•:NúxÞ¿_¨œÔúDºP©R%Œ;GŽÁµk×ð×_¡ÿþB¹Ë³[·n]9.¦¦¦B÷­¸¸8¡àÜ»wÏ î" Â.Y²D2UE•*UP¥J¥÷Ø›7oJnËÊÊ K–,ÑË ‚èo›èï¯sÊOù™_h6¿êQ÷, ÓeÕ~{H{DÛ)¢ƒ«“0ì¾ L&C£F0{öl\¼xÇǬY³ÐµkWáÅr3%&&bË–-¼È ƒõDôIµjÕ„Ê={V¨Ü¥K—„¦œUªTIá´>Ô­[Wéûm£iÓ¦YrFª“¶ ëÝÜ܄ʉ,*¦oçá¹sç„ÊÕ®]›7##“É„ÊåwÀD¹\ŽŽ;bêÔ©8vìNŸ>~øA¸ó!¼àfAúÍ:sæŒP¹óçÏĽB$oýŽ;$ËHý9"´?:tîXç7Ñü¯ÿþû¯Þä{çuNºÒ¹sgáßEeºté¢Õýtww¾®¥cÚ´iJÿ}>[¥B… °°°¬÷îÝ»xõê•d¹ääd\¹r…íT#wëÖ-¡rÙט1´v,û‚yoËôîÝóçÏÇ•+W°{÷nôìÙSxÖ¿¡®;dìLyˆ(Sݺuaii)™ÿíæÍ›ˆŠŠ’\”nÏž=BÛ•ÊKïåå…cÇŽ©üy2Sàdrrr‚³³³Ê#èLLLàááQà¿{ÑÆÎ­[·”ŽÆTW“&M0sæL¡†Ç”)S$[=6l¨ö¾‹.EúAÑ:Ùic*}¦;v ))IòúÌ-õ‰““þóŸÿ૯¾BÇŽñàÁÉóóÉ“'y­«š4i"´ˆêîÝ»%Ó¯_¿ÆéÓ§óí^¡ŽÚµk£|ùòxøð¡ZõH嫧ϤâÅ‹£\¹r’SÀÓÒÒŽvíÚñ:'½‘ß¶Ò¥KÃÛÛy®£aÆ(W®œV÷³~ýúBåNŸ>*-³|ùr\¿~]i™o¾ù;v˜››ÃÓÓS¨_²wï^ôêÕKi™#GŽHÞ€AZUGÔê+¶•³JJJ’<3eO/%ÚŽ}ÿþ=2224ò0.?ÎCî ŠˆÅ¾}û$˵mÛ6×ððð@·nÝЭ[7É5Ôm/’n0XODŸ˜™™¡AƒB£é.\ˆY³f) |lÚ´Ih»ÞÞÞJ_Ïë¨öÜFÒ·hÑBå…VÜÝÝ•¦â)ÜÝÝajjŠÔÔTɲS¦LÁš5k”–yýúuž÷ÅÃÃEŠA\\œÒr111ضm:w̉'põêUµh¢[u>7å?Ñ‘ªgΜQúÀîúõëy•ûÇàöíÛJËŒ3£GV`8p Æ/¹½/^¨`ýôéÓ%ËíÚµ ÑÑÑpttTXfÅŠHII‘¬ËÅÅ¥K—Öùgoß¾=/^œç÷W¬XQrF•ȨP‘Nw~/Þš]íÚµ…òµ._¾\i°þÑ£G¸|ù2¯s*ÐÔ Ök;ðñÁVáÂ…%ïÙ‡ÆÛ·oæ¸ùò¥Ðèûì3‡š4i"¬_ºt)ºuë–e–ovK–,ÑH_Iˆ¶•_àûVÀÇ ùÇQ¾|y…e8 Ô†,[¶lŽÔn666Éd’öâããqõêU¥³RDg!æÇ9 }AMJNNÆðáÃ%ËmݺUé>yyyÁÇÇ»wï–lÏ¥§§K>Ô ýÂo‹ˆ²èÞ½»P¹uëÖ!888××>|ø€¡C‡ -Ø&—Ë%G²yxxÀÔTµg‹U«VÍudO^Ráô8ÀÇœÃmÛ¶*»oß>LžÿÍ7ßHæ~´²²‚»»;.\¸ ü9å7n,4çsƬÏììܹS¨ì‚ pèÐ!tíÚÎÎÎHNNÆýû÷±{÷náÜ›Ê 6 ëׯ—±ùúõktìØíÛ·G“&M —Ëñöí[œ9s[·n42DéëŠFee·aÃÄÄÄÀÛÛ666HIIAll,~üñÇ|ÿ>gΜ)4…Tä6mZ<çkÖ¬)tο|ù>>>èÝ»7jÕªSSS<}úGÅþýû…ÊŠøùùIN…½~ý:¦L™‚qãÆåšŸ2>>7nÚž²Ñ]†F&“aذa5j”dÙK—.¡iÓ¦€»»;lmmñìÙ38p@h*2ðq[ïÞ½õâ³{xx L™2¿µ¹wRD;­{öìÁ‚ 0dÈOÁ„„„„„`Ò¤I:àçëë +++¡ý˜0a8€: téÒxõêΟ?¯Òï ¯sÒ]ä™¶±±AëÖ­…Ö½ÈÎÇÇ'ßÀ8p ¶nÝ*Y.447nÜ@·nÝàää™L†Û·oãï¿ÿ–œí’ÙiÚ´i–¿988 K—.B3ˆ×¯_“'O" ...055ѰuëVáѾÞÞÞÂyúu©P¡B°µµÅ»wï„úGEõêÕannŽ„„/^=zô(p×ñåË—Ñ´iStêÔ ^^^(Q¢Þ¿K—.aÆ ³r;uꤰ-.ùþãÇÃÇǨT©’’’ððáCìÙ³G8§{~žúÖÔ´öíÛKþ¦¯Zµ 5‚¯¯o®¯ß½{Wh–²™¥¤¿¬'¢,LLL0räH¥S±?wòäIœ¯*V¬ˆqãÆi­þI“&) >¡C‡*=ßÍÌÌàããƒ}ûöaâĉÉdÂ3OÖ­[§õcV´hQ¬X±›6mB‹-”ŽD¬U«-Z„U«V}:TYt—×92ÑÙ¥ºJ“]óæÍqìØ1,_¾mÛ¶jc–*U Ý»wǾ}ûð÷ßç9Ø/“ɈsçÎaÞ¼yhÑ¢…ÐÃMÔ¯_S§NÅ… 0|øp˜ššü¹ãææ†þùÓ§OY.—ËQ»víuýØÙÙÁÖÖr¹!!!˜7ožä@‚Ê•+câĉˆˆˆÈS?ÔÓÓ˜çììŒÁƒãСC|PV€Èâââ2x(»gÏž©—“ ¶>àÚµkxðà^¿~ÄÄD*TVVV°··‡‹‹ ªV­šçéx¤’““qùòeܾ}¯^½Bzz:är9*T¨€úõëgé\ôêÕ ”¬sÚ´ijlxöì"##ñðáC¼{÷ÉÉÉ(\¸0lllP¶lYT­ZU«³#âããqéÒ%Ü»wïÞ½CJJ Š-ŠbÅŠ¡|ùòpww/.c‹³gÏ"&&oÞ¼……ŧÙ6µk×Î×Q„ø÷ßq÷î]¼}û±±±HJJB‘"E`ccƒ’%K¢zõêJÂ3fˆŠŠÂíÛ·ƒ> 55æææ°³³ƒ££#ªU«Æiû*ÓÈÈH\¿~¯^½BRRär9Ê”)ƒ hlªz~]ë/^DTTbccannŽ2eÊ FZ_ø×9é³ï¿ÿ6lPZ¦Zµj8tè^îjj*nÞ¼‰¨¨(<{ö ñññÉd(V¬Š+777­^ã)))ˆŒŒDTTž?ŽøøxdddÀÒÒr¹ÎÎΨV­šÚ¹Æ ÁË—/qñâEÄÄÄàÝ»wÉd(^¼8Š+†Ê•+£råÊFs]EEEáÚµkxúô)âããQ¤H”+W5kÖD¹rå4º­ÇãÂ… xùò%bccakk‹Ò¥KÃÍÍ-ßc=Ú:tÝÔ¦¤¤$\½z?Æ»wïðöí[dddÀÆÆ¶¶¶ppp@5„R ’fÝ»wOå™–÷oG¢lygáò ֓›ƒõDôìÙ3•ˆ^¼xOOO$&&J–ýûï¿5šßžˆˆˆˆÔóæÍxxx !!Ai¹ß~ûMcù≈ˆ A~뙇ˆˆruûöm4jÔ3fÌΛš‘‘qãÆ ê . h""""=òçŸJêe2:wî̃EDD¤a ÖQñññ0`âââ0gδhÑ»víBJJŠÂ÷DGG㫯¾ÂŽ;„¶Ñ²eK£˜úKDDDd^¿~©S§bÉ’%’e½½½ z!T"""}ÅDºDD”Ø1cðï¿ÿ~úÿÍ›7Ñ¿XYYÁÛÛÎÎΟÛ{ùò%._¾ŒóçÏ À€ð@éÈÝ»w1dȤ¥¥áíÛ·ˆ‰‰nËòiƒõDD”ÅêÕ«±eË–\_‹ÇþýûÕÞFË–-ѤIl""""IHHÀ•+WT~Ÿ\.‡ŸŸ ‘0 }rùòeüúë¯Z݆\.Çÿþ÷?l""""4bĘ››ó@iƒõDDôɃ”æ¥W—‚ƒƒaooσMDDDd`œœœðÕW_ñ@i ƒõDDôIÇŽ±páBXZZj¼îêÕ«cçÎpwwç&"""20æææX´hGÕiƒõDD”EçαgÏxyyi¤> Œ7ÿüó*UªÄLDDDd`¬¬¬°jÕ*xxxð`i˜%"¢\]]†C‡aùòå8räÒÒÒTªÃÉÉ ½zõB`` J–,ɃJDDDd€<==1gκ ""Ê Ö‘B-[¶DË–-ñæÍ>|gΜÁµk×ðàÁ¼{÷iii°µµ…­­-Š+†ªU«¢N:¨[·.jÔ¨™LƃHDDD¤‡ìííˆãÇ#::úc€ÀÔ666pvvF:uо}{x{{ó`åY\\\e÷ìÙ3T¨P‚ˆˆˆˆˆˆˆˆˆŒÞ½{÷Pºti•Þsÿv$Ê–w.ÏœõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘Ž1XODDDDDDDDDD¤c ÖéƒõDDDDDDDDDDD:Æ`=‘¥§§#88:uB•*UP®\9xxx`øðá¸~ý:3f ìíí%ÿ­^½š‹ˆˆˆˆˆˆˆòÌ”‡€ˆŒEtt4îܹƒGáýû÷HJJBáÂ…aii‰’%K¢lÙ²¨R¥ Š-ª‘í%$$ oß¾8vìX–¿ÇÄÄàï¿ÿÆÖ­[1cÆ ôîÝ›_‘‘c°žˆ ¬ôôt„‡‡#44áááxþü¹ÐûѤI´k×-Z´€‰‰Iž¶?qâÄúÏ¥¥¥a̘1¨^½:êÔ©“/ÇäÒ¥KhÛ¶­PÙ½{÷¢víÚyÚΜ9s0cÆ Érööö¸téOV"""""""2zLƒCDÒ–-[ФIbóæÍÂzàãüõë×£wïÞðôôÄš5kššªÒöãââ,Y.##Ë–-ãFDDDDDDDdä¬'¢åÁƒèܹ3† †»wïª]_LL þóŸÿÀÏÏ÷îÝ~ßÝ»w‘œœ,TöÆü∈ˆˆˆˆˆˆŒÓàQqøða <ïÞ½ÓxÝ—.]Bûöí±aÃÔªUKúæj*~{•*»víZ<}úT²ž>}úÀÞÞž'‘b°žˆ „;v`È!*§«QÅëׯѧOìß¿¥K—VZ¶R¥J°¶¶Æ‡$ëõððPúúÚµkqåÊÉzZµjÅ`=‘b"2xGÅàÁƒµ¨Ïôüùs|óÍ7’)nÌÌÌ0lØ0Éú,--1xð`~‰DDDDDDDDFŽÁz"2hÑÑÑ0`ÒÒÒòm›.\À¢E‹$Ë5 _ýµÂ×íìì°jÕ*T¨P_$‘‘c"2Xøá‡«ÒûlmmáîeË"%%/^¼ÀÅ‹'\GPPz÷î%J(,#“É0}út`Ó¦M¸qãQ²dI4lؽzõRú~""""""""2 Ö‘ÁÚ¶m"""„Ë+V &L@§N`aa‘åµÔÔTlÛ¶ “'OZÌõýû÷ „ $ËÖ«WõêÕãFDDDDDDDD 1 ¤ôôtÌš5K¸|•*UpøðaôèÑ#G LMMáïï½{÷ÂÁÁA¨Î-[¶ ==_©Áz"2H‡Æ;w„Ê–(QëÖ­ƒ½½½dY{{{ Õûüùsœ:uŠ_©ipˆôHJJ nܸû÷ïãùóçˆXZZ¢dÉ’prrBõêÕann®“ý{öì._¾Œ ..EŠA‰%àîîŽJ•*å뾄„„—;v,…Ë7lØMš4Á±cÇ$ËþóÏ?hÔ¨O^Ê!11§N£GðêÕ+.\r¹•*U‚»»;LMùLDDDDDDDÿ‘"KNNFXX¶nÝŠ“'O"11QiùÂ… £AƒøòË/áïï+++ámÅÄÄÀÃÃC²ÜêիѦM@ZZ6oÞŒU«VáÒ¥K ßãàà€૯¾RiŸò"%%*ëää„=z¨¼€€¡`ýõë×¾6tèP„††JÖñçŸfÙÇ àÁƒ*ïsÛ¶msümܸq1b„Á]¢çª½½½Òó®]»ɺ\\\püøqµ÷ýÉ“'˜>}:vìØñé[vEŠŸŸ† WWWÞ‰ˆˆˆˆˆˆˆipˆt)$$žžž1b>,¨>ª#""0fÌÔ«WË–-ÓxÞô—/_nݺ…Ö­[cÔ¨Q’ÑÇcâĉhÞ¼9®]»¦ÕãvöìYÄÅÅ •íÔ©SžF07nÜX¨ÜÍ›7y"Ó'[·n…··7BBBê ..!!!hÙ²%&Mš„ÔÔT<"""""""#Ç‘õD:ðþý{ 6 ûöíS«ž×¯_cüøñعs'–-[¹\®‘ý{ùò%Nž<‰>}úàÇ*½7::~~~ذa6l¨•ãwþüyá²¹6áàà€#F 99Yi9™L†ääd˜™™ñÄ6r[¶lÁÙ³g‘‘‘!üžôôt,\¸·nÝŠ+x1ë‰òÙ»wW¯j¬ÎS§N¡C‡ CéÒ¥Õ®ïøñã˜?¾ÊúL‰‰‰4hŽ;;;;Ã7n•+\¸0jÖ¬™çíŒ7Ž', ;sæLžß{àÀŒ;³gÏæ$""""""2RLƒC”2220hÐ ê3Ý»w½{÷– .âèÑ£yÔgzñâ-Z¤•ã%T®bÅŠ\Ä“ ÆúõëÎADDDDDDd¤¬'ÊGýõ—VƒqW¯^ÅŒ3ôæó#--Mãõ>yòD¨\ÅŠyÒ©áÍ›7xþüyžþ‰®)@YMœ8QãkP‘aàS¢|rçÎL:UëÛY¸p!Ú´iƒúõëëü3¿xñ—/_†‡‡‡FëÍ\WJÑ¢Eyâ©!00!ŸÝ¸qÛ¶mCçÎy0ˆˆˆˆˆˆˆŒ ƒõDùdÁ‚Â)jœÑµkW¸¸¸ P¡B¸ÿ>BCCqóæMÉ÷fdd`öìÙ Q{Ÿår9üýýáîî <~ü*-Œ{þüyë“““…G[[[ä¹râĉ,‹”úúúâÊ•+’ïÛ½{7ÜÝݳüÍÄÄ„_>«Q£:tè'''˜šš"** ÿý7nݺ%ôþM›61XODDDDDDd„¬'Ê/^¼À–-[„ÊvîÜsçÎ…™™Y–¿>“&MÂâÅ‹%ëGdd$ÜÜÜò¼ÏÞÞÞXºt)Š/žåïƒ ©S§Ð½{w$%%IÖ# ¥JN~+++¥¯?~üOŸ>U{ŸjÔ¨sss}ƼØ *Äý:6qâD|ûí·9þ>tèP|÷Ýwغu«dGÅË—/!—Ëy@‰ˆˆˆˆˆˆŒ£:Dù`ãÆBAf'''Ì™3'G øˆ0aΞ=‹óçÏKÖµzõjLŸ>=OûkmmåË—ÃÎÎ.××½¼¼àïïàà`ɺ4 ÿœ*9ðe2™Ò×W®\‰   µ÷éÌ™3pttä‰näzöì™k LMM1cÆ >|oß¾•<Ç:„nݺñ .0K”"""„Êõïß _—Éd:t¨P]ÇÏóþZ[[+ ÔgòòòªK*0ITPÔªUKéë¶¶¶øâ‹/„êºzõ*(‘‘a°žHËRSSqöìY¡²¾¾¾’e|||„R®Ü¾}[x!Ö¼(Y²¤P¹ÄÄDnW•1¢¹í‰òKãÆ…Ê]»v‹ˆˆˆˆˆˆÈÈ0XO¤ewîÜA||¼d¹2eÊ \¹r’åÌÍÍQ§N¡m_¼xQkŸ+·T=¹Q%m&· @è¸å§ •»{÷.‘‘a°žHËDG·W¬XQ¸NnÛ˜™™Iæ¢ÏÄ`=é›R¥J •{÷î‘‘á³DZöúõk¡reÊ”®S4à÷æÍ›yLår9^¼x¡±cO¹Û»w/j×®§÷Ι33fÌàAÌÆÚÚ… FJJŠÒrIIIHJJJyEDDDDDDDGÖi™è«VVVÂuŠ–-¨ÁzÑL%Bú¨hÑ¢BåÞ¿σEDDDDDDdD¬'Ò²ÔÔT¡r… ÖxU… „ÊÝ»wOéæñãÇãéÓ§¹þ[³f O^ÒŠŒŒ ±èBü‰&""""""2&Œi™P¹„„á:EËŠnÛÐT«VM¨\ZZΟ?Ï“ôJRR’P9kkk,"""""""#Â`=‘–•,YR¨œ*‹Á>}úT¨\ñâÅ ä1­[·®pÙÝ»wó$$½‘ššŠ>H–377‡™™‘a°žHËDƒõªäW¿wïžP¹%JÈcêéé)œ·Û¶mHLLä‰HzAô¡œ­­-‘‘a°žHË*T¨ ÉrwïÞÅ«W¯$Ë%''ãÊ•+BÛ®]»v<¦æææhÞ¼¹PÙgÏžaÙ²e< ŒL&*'šÿ]_ܺuK¨œ‹‹ O"""""""#Ã`=‘–™››ÃÓÓS¨ìÞ½{%Ë9rD(çuÅŠQªT©{\{ôè!\vΜ9¸víZ?×ÒÓÓ Ìg)R¤ˆP¹÷ïßTÀþÂ… BåªW¯Î›'‘‘a°ž(4iÒD¨ÜÒ¥K‘’’¢´Ì’%K„êòöö.ÐÇô‹/¾€³³³PÙ¸¸8ª°þü¹Þ|VÑQæ¯_¿.0߯ÐçŽÇÕ«W•–9sæL¾ìó7”¾ž‘‘íÛ· ÕÅ`=‘ña°ž(øûûÃÔÔT²ÜÍ›7ñóÏ?ç°ÏÈÈÀôéÓqüøq¡möéÓ§@SüøãÂå_¼x6mÚ`Ê”)ˆŽŽVXîîÝ»7nÆŒ£7ŸU4?ÿ®]» Ì÷+“ÉP¬X1¡²'NT¸.AXX&Nœ˜/û¼zõj¬^½ZáëAAA’ýÌÏÞ²eKÞ8‰ˆˆˆˆˆˆŒŒ)‘ö988 K—.Ø´i“dÙõë×ãäÉ“€‹‹ LMMñàÁlݺUrq&ooo¸»»øãêïïµk×âôéÓBåÓÒÒ„   ¸¹¹ÁÑÑr¹©©©xóæ nܸGéÝç´³³*·aÃÄÄÄÀÛÛ666HIIAll¬J5ôIÍš5.YîøñãðññA`` *Uª„¤¤$<|ø{öìÁ¹sçòuŸúé'„„„ cÇŽpvv†™™?~ŒíÛ·ãØ±cBuxyyÁÞÞž7N"""""""#Ã`=Q>>|8BCC‘šš*Y6** üñGž·õý÷ßÅ1•ÉdøóÏ?ѪU+|øðA¥÷FFF"22Ò >gùòå…ˆ‡‡g p[YYl°ÞÓÓS(XwîÜÁäÉ“õb¿/\¸ œ›>7¼a!¦Á!Ê'UªTÁO?ý¤õíôïß76šãZ¡Büõ×_(TH7·3;;;ØØØhu^^^FyÍøùùÝg®P¡ºwïÎ&‘b°ž( >M›6ÕZýU«Vů¿þjtǵeË–X¸p!LLLòu»ŽŽŽ έžWMš4µµµÑ}¯®®®hÞ¼¹Q}æ_~ùEh} """""""*x¬'ÊG2™ K–,A54^·ƒƒÖ­[ £<¶:uºuë„ó»««W¯^8xð \]]µ¾- 0À(¿×ßÿ]x]E¬­­Q¢D ­î§µµ5d2™ZutèÐÁ(gÑG Öå³bÅŠaË–-hÕª•Æê¬S§vîÜ©Rnó‚¨E‹Ø¿¿Vg/4hлvíÂìÙ³µžþæs£F‚§§§Ñ}§®®® Êó¬ +++lذAëU5j„Ù³gçùý^^^˜;w.oDDDDDDDFŒÁz"(Z´(Ö¬Yƒ9sæ T©Ry®ÇÖÖãÇÇŽ;P¦LX|\ŒuÓ¦MX±bÜÝÝ5R§L&Ã_|7bÛ¶m¨[·n¾. ¬]»íÚµ3ºïÔ××aaa([¶¬JïsuuEhh(<==µ>²ÞÉÉ ={öļyóTNYÔ·o_lܸQíDDDDDDDdؘ—HGd2áïï°°0lݺ'Nœ@RR’Ò÷™˜˜ nݺøòË/ѽ{w£Ìe.Â××¾¾¾8wîÂÂÂpèÐ!DEE ¿¿xñâhР5j„öíÛ«(Ö;;;¬\¹ûöíÊ+pôèQ¤§§+,oee…FˆïÓÓÓX¿~=V®\©ô»tssC=Я_?.\ —˵ºNNN€nݺ¡qãÆøã?°sçN|øð!×òhÛ¶-ŒÚµkó‚%"""""""Èâââ2x(»gÏž¡B… <ù,%%‘‘‘ˆŠŠÂóçÏŒŒ XZZB.—ÃÙÙÕªUãÜëüùóxöìΜ9£1/>>;wîÄÎ;‘ššÊ†ÑAúÈÊ€q“æ€ñó˨<2DqautÖÛgùùùA&“áÑ£GgÛý‹™² ˆ^< ¬ E^^Z·nÍ ªB”?¬¨¶ËãÇ‘——§À×///:týû÷ט÷äÉìÚµ зo_Ô®]›SNòÈG4ƒòò¨ÀÌFöõöYîîîxðàìííÑ¢E ¶-Ñ¿ƒõD/m=ëµM#Ã{øð!õžõÚ¦éÃðáÃ1|øpVz%‘GiéAŸ– ¤§À¸™ `l¢·ÏjÕª¶lÙÂJ'""""""ú`¢—HPPLMMÕzØjëÁM† SSS4oÞ\œVQÁzª\ÚÒÝ<ïmÿ +ˆˆˆˆˆˆˆˆÊ„=ë‰^iiixòä Z·n sssqzQÁú±cÇB*•böìÙ>|8öïß‹/âéÓ§077GëÖ­1yòd¸ººêüܘ˜8pþþþJ¥°¶¶†‹‹ FöíÛ‹åd2FŒ¹\ŽO?ýîîîï5wî\âÿû¼½½5æ/]ºç΃««+Ö­[§6/** û÷ïG@@¤R)ÌÌÌиqcôë×£GV«“ªÐVOŸ>EË–-ÕÖK™Ç¾eË–:—ýûï¿qàÀ#//0`ƇŋãÚµk3f æÌ™#.óÅ_àÚµkjõ6aÂ$$$¨½÷´iÓŽŽŽØ±c‡ÖÏ ľ}ûðàÁdeeÁÎÎýû÷ǤI“P­Z5µ²‡† —.]Òú~ß|ó .]º„V­ZaãÆZËäååáÀ¸xñ"âââ`nnŽ-Z`̘1èÙ³g•;åQšipÄÞöM^ÑkÛªÖñùóçabbRæ¶%""""""¢ªÁz¢*¬Y³fGiœT™¯¼cÇŽ8wîœÚ¼„„̘1QQQâ´¼¼<üõ×_ð÷÷Ç·ß~‹nݺi¼çùóç±bÅ äçç‹ÓRSSáçç???̘1ãÇX[[£eË– B@@€F°>##C̹ýúu­Áú»wï:wî¬6ýêÕ«øöÛo‘——'N+((À£GðèÑ#\¸p«W¯F5 ÖV...m ²C† ´oß¿ýö›8}Ïž=)O"##±}ûv\½zFFF%^Ÿ5j ''ÈÎÎÛÈØØXg=>|Û¶mS›‹_~ùwîÜÁš5k`bb¢×zËÉÉÁܹsñèÑ#µ}3 ˜:u*¦L™bÐã0÷»¹(üó¬ÆôìIšÇLÞöåÈÛ¾`yè.`^­J´-U} ÖUaööö¨^½: 332™ 666°´´ X'%%ÁÜÜuëÖØÚÚj¼Ï¡C‡`nnoootïÞÆÆÆøë¯¿ðË/¿ //ëׯG×®]Õ†X²d  K—.˜>> B`` .^¼777½Ö[LL ŒŒŒ0jÔ( 05kÖDxx8vìØèèhìܹmÛ¶E»ví Ö¶F5jÁ¨N}€Ÿd¦æÕad]S,#¤&‚ –S,hTeÚ–ˆˆˆˆˆˆˆª>뉪0???ñõôéÓqèÐ!øøø wïÞ©GÆŒ///¬_¿^çû˜˜˜`ùòåjÏW^yùùùðññA\\âââаaC€\.ÇòåŠÞÁíÛ·Çwß}'òmmmñõ×_ãí·ßFDD~ùå,]º€"Ⱦk×.$$$àéÓ§°³³?ïúõë€jÕª!777oÞ{˜Ï{ÕרQÎÎÎjuðìÙ3À’%KÄžê‰-Z´@~~>Ž?Ž+W®@&“ÁÚÚÚ muñâEñõìÙ³qôèQlݺULãråʼþúë5jÖ¬Y£±üöíÛ5kÖÄ?þ¨öô„‹‹ š5k&¶IEéÒ¥ –,YSSÅ¥ÁÑÑ­ZµÂ¤I“ “ÉpóæM½ëàý÷߇§§§øãÆÑ¾}{L™2éé騵k—Aƒõ泿_œ9€¼ a6zÌ&ÎULÌ{†ìqaTß[.Tɶ%""""""¢ªÌ½$üýýadd¤´ô÷÷ H}S777­ÁNÕìOž<_ߺuK̉=wî\&&&=z4Eye0½U«Vb°< @,/—Ëñ×_ÁÈÈ'NܸqCí=ïÝ»'n‹±ñóS“L&?SÛS£F¸qãàå奖&Ç`dd„¶mÛªM€:h”—J¥ xxxhMs4dÈÔ«W¯B×ûƒ>õJ5kÖ¢/Ê4OÚ(Ÿ €ÐÐÐ*q,†*‚õ&Î*ÁúGŠ}×DK°¾ª´-U}LƒCôPö 1(ûömXXXˆ9ãKKµÇ¼jÎleîø¤¤$qàÚ¢¨Ð;wîŒ?þøC-X¯LÓ½{wØÚÚ¢E‹ Ž{÷СC¤¦¦"66V\^U‡0tèPœ:u çÎÃÅ‹áââ‚öíÛ£k×®eÞöŠ¢ÜîŸv€……Z¶l©±ŒT*_ÛÛÛW¹ýO¹Ÿ”&¯º>H$­ud0¹9¢Ã`dߨQKœ\¨ìmïÜæ¥k["""""""ª:¬'ª¢zõê…ŒŒ @VVàØ±cj¹Ñ¥R)LLLÄÞì...Ø»wo¹?ûÅÞëÅQM?£ ¶'&&âÉ“'°··W Ö@Ïž=Šëׯ£C‡b¯ú&MšhMòñÇ£ÿþؽ{7îÝ»'þíÚµ 4À”)S*$—zI 0™™™€ììlÀ‰'pùòe±Lrr2LLLÄ:hݺ5víÚàyuµ''þëjÕzW¦Zªlyë¿DaÀ5Å?…€\Aú9o>ï%/¤&r—ÏŒMªY°m‰ˆˆˆˆˆˆ¨Ä¬'ª¢bccÅ`½RFF†Æ´ÂÂB±WºjZ›ò033 è¾xñâbËW«VM|-‘HШQ#ÄÄÄ ‚ ::õë×G³fÍ=zôÀÎ;qãÆ Ìž=[ÌWÿb¯zU:uB§N™™ ÀÏÏqqqXºt)BBB0{ölƒ´U\\œ¬/®­âââ4ÚÊÂÂBœŸ••+++PÿѨ¨t9IHO†¯>1?Os!9áù?r9Û–ˆˆˆˆˆˆˆJ…Ir‰ª¨ÈÈH¤¤¤ %%NNN022Bll¬8mþüù€µk׊Ó.]º¤—ÏV’£££aaaQìß‹ù¶•A÷;wê»uë&ÎoÑ¢ê×¯ØØXÄÆÆêÌW¯M5Я_?¼ÿþûØ·oúöí 8tèø£Ee{ôèâããGGGáñãÇâ´?üðý÷ß‹ÓNŸ>-.¯ú4AE âZQt¥QÒ—§OŸj­£ÊTmÁFXúÃÒ7¦n^Ši_m§U_ê0éë)N³ô ,¬^ê¶%""""""¢ÊÇ`=Q—ÈÈH8::ÂÒÒRœþðáCÏ`Õ§6m¹·“’’Ä^ïÚè Ðj Ö+Ó¿(õèÑpþüyDDDÀÌÌ mÛjÐùÉ'Ÿ`Þ¼y8~ü¸Æ<333L›6Mü?<<Ü m•““ƒ¨¨(4iÒDìQ <dTW~}ÕéEýàRXXX¥öMÕýñÅ' ”TÖ¦¨ô6W®\ øQà•W^1øöÊ£BNÇWT¦…jLû7´-U>뉪¸‡B |PPh°´¼(b×­[§5 š••…÷Þ{§NҘ׮];˜šš")) ·oßFµjÕļúJÊ`ý Ú´i£–NGõsîÞ½ ___äççkÌWÀÓÚÚÚ m A4‚òÊ`½³³³ÖåêÔ©#ÖÏo¿ý¦uÌ€'N”iUSÓçÙΔùôõ¥Q£Fâkå ȪBBBÄkt‰ŽŽÆ±cÇ4¦§¤¤àÌ™3ƒ ÛØØö@È£ÃkÕ}>ð­ÀoòÊ¿ªm‰ˆˆˆˆˆˆ¨ò1XOTÅ)ƒò...â´gÏž!<<ŽŽŽ ¶²²ÂÌ™3aaax÷ÝwqãÆ ¤¥¥!11.\À;#ÀÀ@9rD£÷tõêÕñꫯPô¾ïСÌÍÍÕÊ´k×–––✺RàLœ8€¢×ü‡~ˆëׯC*•">>gϞŲeË(Ò(?ÓP”O;¨ëŸ={†ˆˆ4iÒ¤È|åo½õŒŒŒžžŽ¹sçâòåˈ‰‰Áƒ°nÝ:¬^½ºLëdgg'¾Þ·oBBBðàÁ½loË–-Q§NÀš5kàëë‹ÈÈH<|ø»ví¼yóŠíY?üðÖ®]‹û÷ï#&&—.]Â{ï½™L˜:uªÁCái ð,[£½®®®?uõ —G‡V5`dk÷¯j["""""""ª|ìYOTÅi Ök›V&Mš„-[¶ÀÝ݉fff°±±AË–-1wî\¬_¿^çÀŸ]ºt_k Ö@¯^½(R…4mÚTçzLž<?þø#ú÷ïzõêÁÔÔæææprrÂøñã±k×® ¯‹’Pö¬WMM¤ à—$]ÑèÑ£±jÕ*têÔ ÖÖÖâ6¾ùæ›øá‡ħTv-‰o¾ùîîî°±±™™6l¨·mîÛ·/Ö¬Yƒ.]ºÀÊÊ ¦¦¦¨_¿><<<°yófqü]$ Ö¯_7ß|NNN077‡••Ú·oeË–áõ×_¯ǡ؃^%X/$ÅÙ2)p^ö¶%""""""¢Êe”••%°èE prrbEU!ÇGVV¦L™R%RÃÛ–ˆˆˆˆˆˆè¿"""‰¤TËD†>„C#Ç—gÏz"¢*"==]缨¨(deeXYl["""""""ú—a°žˆ¨ ˆ‰‰Á”)SÄ<ÿ/Ú¹s'Ežx]ùý‰mKDDDDDDD//0KDTœ:u éééøøã1vìX 4uêÔA\\öíÛ‡k׮ƌƒÚµk³ÂضDDDDDDDô/Üõ¤sÖU®‚‚,Y²—/_ÖYfÀ€øüóÏabb cÛQ%ªŒœõ Ö“V ÖÆÝ»wñûï¿ãîÝ»J¥°²²‚³³3<==Ñ«W/VÛ–ˆˆˆˆˆˆˆ  2‚õLƒCDT…´mÛmÛ¶eE°m‰ˆˆˆˆˆˆè?†ÌƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘1XODDDDDDDDDDd` ÖƒõDDDDDDDDDDDÆ`=‘™² ˆþÛòóóñèÑ#$''£víÚpttDÍš5Y1DDz$ÂÃÃêÕ«£qãÆH$¬*‘ÄÄD„……A.—£Q£Fhܸ1ŒŒŒX1DDDDDÿ2ìYOô•ŸŸï¿ÿ...4hÆÁƒcÅŠ¬""=:zô(ºv튞={bìØ±ðôôÄ„ X1ÿa›7o†ìììpâÄ åîÝ»OOO´iÓ£G†——ºvíŠôôôb?#88XüŒÏ>ûì?YÁÕÕvvvèÙ³'wä—\hhh•?F¦L™"®crrr¥~ö®]»ÄÏ>zôèbŸXø]z D¯¡‘HK—ó !xNŒF¯¡‘˜<#Î`ëpøD†¸_^òËf£ý0XOT ¾ÿþ{ñfWÛ_Ó¦Mѽ{wLŸ>¾¾¾(,,¬ðuš7oV­Z…ŒŒ µéµjÕbƒý‹$''cÀ€hÞ¼9~ýõWVQ%Û½{7fΜ‰èèhµéµk×fåP‘nnnˆ­°Ï»sç> °µµÅŽ;‚ððpÌš5‹ ¢…jϦ’ôh¬ ÷ïß×éË/¿ÔZæ?þ@PPd2¶oßΆ$ªDyyyøæ›oÄÿ-Z„{÷î!::;wîdQ‘–-[†ìlEº±cÇâúõ눎ŽFPPSà!!!ÇGNNöîÝ[e®Ù¼&W½{¤—÷§ªËÝ+ ½†Fbêìx½”{ݼ•ƒ$i!LM÷ÖZËddÊñÇõ,Àð!Özý|iJ!.þ‘…Ü\¿•!S¦ù¤Ä§ß$Š=ÖµÍ'"2æ¬'ªdÞÞÞèÞ½»Ú´ääd„……áСCÉd Âo¼óçÏÃÔTÿ‡éü!¾ž?><<<Ø0ÿRݺuCƒ ðäÉŒ3†BT‰Å@á¨Q£0cÆ qž¹¹9+ˆŠtõêU€ƒƒÖ¬Y#Þpß)Z½zõлwo\½zƒ®RO!ðšLÜŸè¿âÄ™L@ŸîV¨e£½èé 2äç¶uLн³¥^?¿N-tjW·î‚»»;ââ⌠.ÀÝÝ]ïë •>ÐÕÕ•ò/fooäççÃÌÌŒBT‰x®¥²ÊÌÌDnn. U«VòÃý¿•±±1<ˆ¼¼¼*÷ïÉÄý‰þ ’S ñçMÅ“ažîº{Ì+únÖ0Ñs,ÝØX»Ôùù"zéîgYDU‡­­-fÏž-þÿbžZ}A|Í›ûÿ¶3Qå“Ëå<©ÜûõeS•Ÿ@àù€¸?ѿ٩s2Ê»ú¦èÔÞBk™Á¹ˆˆÊx®QÇÛƒˆ^> ÖU1Í›7_¿8ø«*ApáÂL™2;vD£FЦM¼ñÆðõõÕ(Ÿ˜˜(æîܲe‹8}РAâô?þXëgÅÆÆâ믿F¿~ýмys4iÒ;wÆìÙ³áççWäö¸ººÂÎÎÆ C^^V¯^=z aÆèÝ»w¹·«4233±nÝ: :-Z´@ƒ кukŒ3;vì{1*}ðÁbÝœ9sFœîìì\dþúŒŒ lذ#FŒ@Ë–-Ñ A¼òÊ+6lÖ­[‡ÌÌL­ë*¾ïÒ¥K‘˜˜ˆ?ümÛ¶…½½=æÏŸøøx±Ì AƒÄe·lÙ¢57«jÎÖÏ>ûLgû¼ñÆ€€€Ìš5 íÛ·G£FкukLš4I-u’.þþþxçwЦM4jÔ®®®ðööÆ… nnn°³³ƒ——W¹ÚñÆâ6=ºÈ²={ö„4h Ö˹¼û¶¿¿¿¸ß~û­ÎrGËmÛ¶­LÛ›M›6aäÈ‘puuEÆ ѪU+xyya÷îÝÈÏÏ/rùÈÈH|õÕWâ t 6„««+^ýu>|X-(¨j×®]âºß¹sÏž=ÃÆáîî.ÖUïÞ½±lÙ²rå„–Ëå8|ø0&L˜WWW4hÐÍ›7‡››–-[†¤¤¤bß#11+W®ÄÀѬY34kÖ }ûöÅ¢E‹ðôéÓ _^×~÷¿ÿýOœ¶páB±>{ö쩳­7nÜOOO´nÝZ<ÿMœ8ûöí+rðñÒžk_´zõjqýV®\©³ÜÓ§OÅrýû÷×z?zô(¼½½Ñ¶m[4jÔ­ZµÂ°aÃðÃ?y]›0a‚øÞÏž=+¶~[µjUîz(íu¡¢¯Yü1ìììàìì,N;sæŒÚ ô‰‰e„/77›6m‚‡Ôó¯ò IDAT‡Z´hGGGôèÑ .Ô8β³³Ñ¬Y3ØÙÙ¡iÓ¦bî|m>úè#qÝN:Uêõò÷÷Çûï¿nݺ¡iÓ¦âzÍŸ?aaaeÚÖ-ZÀÎÎ}ûö­°s«.·nÝBÓ¦Magg'''µŽE]“Uï6nÜðõõÅøñãѺuk4lØ:tÀ{gÇ»G…——Zµj…Æ£S§Nxÿý÷™L&~Öš5kÊ´å9Ö+êúRÚ{$mŽ?^æ:×÷µ¤8•¹?iSXXˆ·ß~[üœ7ß|³ÈëÔËHš\ˆ7§àõ·c1`D‰Â;<Á±S™xñöiÜ›±bþó¬lEǨ°ˆÎ+v{î=ÈÅ×+’0fj úˆÄÀQQ˜ðV,¾ûAаˆ<í |²(GEaéi Î Àogßu†»[C×+'N+Êtl[öº”~œ‹…ß%aĤô{-ž£ñé׉¸q+0íÝxô‰÷>Ó<Æ”cLž'Nûn­T¬k¿ϯmã¢K”¿>è‘¢Gy+ÖgØ„h|´0<Ó¹þÊ÷Ý´#Uçûž¿’%–;|"£È:NN-ĺ-)˜øvŒŒÂ`¯(¼õ^<öÉ@/]ë¼l­ãߌŠQQ02 ¯¿‹•’[ü$$bÃÖxÏŠÃ`¯( ¯©±øæû$ܾ«ûþ.ôñóãàÀ± äå Ø{$ï|ðCÆFcÀˆ(Œ3?nN4åù¹&5MŽ->©˜<#n££0pT&ψÃÏ;S‘žÁ±èåÄ®:DULDD„øºI“&ZËÈd2Ì™3§OŸÖø’pþüyœ?GÅ–-[ÊÝ#oÏž=øüóÏ5'111ˆ‰‰ÁáÇ1zôh¬]»¶È^l999˜4i’˜ƒ€Æy¹]ÁÁÁ˜4iâââÔ¦§¤¤àÚµk¸ví|||°oß>H$’2××­[·ðæ›o"!!A#€ïïïlÛ¶ {÷îÕhRŠŽŽÆàÁƒÕ¾ÜU䀂ÙÙÙX¿~=–,Y¢öäEJJ .\¸€ .`áÂ…: Ö¶¬T*ÅÙ³gqöìYL:UoƒüuíÚ7Ftt4®_¿Ž„„­möèÑ#ñ hß¾}akk[!ûvE ÆÄ‰¯þÅ-55~~~ðóóï¿þ Ô«WOcy|ñÅÈËSÿ&•JqéÒ%\ºt >>>øå—_P³fMë†9sæhÎBCCñÃ?àØ±cøí·ß4ê¸8™™™˜:u*®]»¦q. D`` |||°mÛ6ôèÑCë{œ={³gÏÖøìÑ£Gxôè~ýõWìܹ½zõªåõåÎ;˜:uªF@'11/^ÄÅ‹±uëVüòË/°··/×¹V///¬X±B V}ôÑGZËýþûïâës$'''cêÔ©O…¥¦¦Šç¿Ÿþ[·nÕÙžúR’z(ïu¡2¯Åå•””www«MÇæÍ›±ÿ~ìÛ·íÛ·XZZbøðáØ¿?²³³qöìYŒ9Rã}år¹øcvÍš51pàÀR­×W_}…ŸþYczxx8ÂÃñgÏ,Y²ÞÞÞUêÜZTðtâĉÈÎΆ™™vìØÎ;—zýÒÓÓ1mÚ4?âãã±ÿ~øúúbÏž=c @~~>¦OŸ®v¬Š§÷îÝ‹ƒâ“O>)WýéóX¯¨ëKiåææÂÛÛgÏž-uW¥k‰¾÷'ÝY~ø!Nœ8!ÞgmÚ´ &&&•¾}iii°±±Ñû}ò_·s°r½Ù9ÏïmóòÌÁ¹¸ñw–~YÆ•Ôý1QZ€¿JƒÔϧâÌÅ,œ¿œ…OæÚbØ`k-í¬ßš‚ýG_  ˆ/@l¼ ¿Ÿ“aö[u0n¤úý`ph.þüKñ™§ÎÉðÖäÚ¨o«»î=Cl|ŒanÚ{Ìgç¸ð‡b`YÏ!º{Õï>˜ŽŸv¦BåëRÓäð»™ ¿›Ù5¬dY•ŒÝµ/[Q_Ÿô 9nÜÊÁ[9˜õfmLS±ã¤=Ãò¤jÛ—‡æ!84g.ÈðÃ2;ØÔ,ÛŽ¹n‹¶ýˆ‰+@L\&NžÉļu1r¨öv;yV†Õ“‘—'¨MšX€§‰8{) ƒû[á³yõŠ|ê!<2SfÇ!&®@mzÜ“8–³—dX·Üié…øri"ÒÒÕ÷ƒˆè|DD§ãÌE6­r€¤^埛ˆÊƒÁz¢*$..?üðƒøEyìØ±e 1qâDüõ×_€>}ú`òäɰ³³CLL ¶oߎ[·ná÷ßÇâÅ‹ñõ×_P ¸¦ \.^¼;wîT\POžƒÆ/>Œ>ø`ee…éÓ§£{÷î077Gpp0¶mÛ†ÐÐP9r¹¹¹Eö T«V ½{÷†D"Q –u»JB&“©})7n† ‚:uê ** [·nE`` >|ˆ)S¦àÔ©S066Ʋe˰xñbÀŒ3pîÜ9ÅMh@€¸îVVVjÁ…qãÆ!;;æææðöö†››êÖ­‹øøxìÙ³§OŸÆÓ§O1eÊ\½zÕªUÓºÎÇŽ HÔ½{wÔ¬YmÚ´½½½ØŽ>ÄðáÃS§N{‹•åqhüù矨_¿>¦NŠÖ­[#-- §OŸQß~û-† ¦ñ#Ò‰'ÄÞ寯Æxýõ×ѧOT«V !!!ðññ÷7}022ÂØ±c±jÕ*‚___¼ýöÛ¥ *êsß®(ÉÉÉðòòŸpwwÇÈ‘#aoo¨¨(üúë¯øûï¿€I“&áÔ©SjÇðÑ£GÅ€Œ­­-fΜ‰Ž;¢zõêxüø16lØ€   ܼyóçÏǦM›t®Ë‡~ˆÜÜ\ <Æ ƒ =z„Í›7#99QQQX¼x±xþ*©wß}W ÔwéÒS§N…ƒƒ’’’àëë‹'N 55ÞÞÞ¸zõªFúâÅ‹b¯fÍš˜9s&ºu놂‚øùùá矆L&ÃÔ©S+dy]Î;ApöìYÌœ9ðÅ_ˆ=í_ („††b̘1ÈÊR|q0a<<|èÑ£&Mš„F!-- çÎÃîÝ»‘’’‚ &À××íÚµ«°ã§¸z(ëu¡¢¯Yß~û--Z„ŒŒ 1pîææ†Ÿ~úI,ciYúAøNž<)®çˆ#P¿~}$&&âðáÃøóÏ?‘žžŽ7Þx~~~¨]»¶X'û÷ï øG[°þÖ­[b¯|OOO×4mV¯^-êmmm1cÆ ¸ºº¢°°ÿý7~þùgäääà“O>­­-†Z%έE'L˜€ŒŒ ã§Ÿ~B¿~ýÊ´Ž?ýôrssáêꊉ'¢aƈ‡‚‚‚““ƒyóæáúõëjû% xŠGyý³±±Á´iÓжm[äææâöíÛøõ×_±téÒ2ן¾u}^_Ês´oß>Èåò2ÕyE]Kô¥<û“._~ù%öíÛèܹ3vìØa°Ž ß|ó ±sçN½þ0úíª$˜šaôðhëZFæâèo((ünfãÌE<)‚ã>ˆ½íGMŽFV¶€¦Žføi•ˆ9ÙKZNã^ýŸÉ.-«aÈ@kHê™"-½þÈÂMÿÊï~±±\ZªŸ‹Ï°võM1ÑËŽÌð,WÀÀg8蛎ü|àÇÍ)p°7E¯®Ï¯3šÁ¶Ž ¤)…pjl†ºµ‹z*óÐwíhz:‚úç¯ÈóL@ kcôé¡ýšvÉ/[ì‰nl u³F—ö033BdL>ŽÊÀÑß2Kݮ̮‹¹ïÔ,Zž(þqÔ§¬¬•oi¡ùÃOTl>¶ø¤¢nmŒV̑͜)“ãêl\½®è¡ÿÓŽTôëaUä“åuàXLL€aƒ­Ñ¡¬­Œ—ã§2_€°ˆ<|¹,?.³+õ{ïÜ“&î'µkcÂ(´hf¹\ñ#Á¾£ÈͰr}2j×2AßÚîì¥,|·V*Öḑ6hëZæfFÊÃ!ß DÅäãì¥,äæ X² ¾îû–³2˜˜(Ú½S; XZ!*&GNf !©iér|¹4‰Òdg Üß Û[ÀÊÊQ1ù8ö›¢\¢´«7J±ü+ ˆ^*YYYÿø÷â_xx¸@ú³bÅ A"‘‰DX¼x±àçç'þ]½zU8|ø°ðÅ_NNN‚D"6l(œ:uJë{­ZµJ|¯O?ýTc~~~¾àáá!H$ÁÁÁAˆŒŒÔ(óÅ_ˆï¨õs„¦M› ‰DpvvBCC5Ê<{öL=z´ø^Ð(ãââ"Î>|¸””TaÛ¥ËîÝ»Å÷^¸p¡Æü‚‚aĈb™ .h”ñööç§¥¥iýœ÷Þ{O,sòäI­ef̘!–ùý÷ßÕæ…„„ˆó$‰ðÙgŸ ¹¹¹:·+00P,ûÅ_[F[½ª¶§§§ÖmSÝ_Ö­[§6///OhÛ¶­ ‘H;;;áÌ™3Ëgffªí'cÆŒ)÷1)¾ßСCµ–qss$‰àèè(deeéuß¾uë–Ú1­Ë‘#GÄr[·n-Õ6Λ7O\vÓ¦Móår¹0wî\±ŒÚüÎ; ‰DhÚ´©¥±|VV–еkWA"‘öööBJJŠÚü;wŠïmoo/9rDã=âããÅó–“““PPPP¦62dˆÖe—.]ª³ž“““…Ö­[ÙŽgΜ—Ÿ7ož^—/‰S§N‰ËÿüóÏ:˹»»‹åŽ;¦µŒj]h[—’žkKz®\²d‰ÆüÔÔTÁÁÁAH$ÂÈ‘#Õæ-Z´¨Ès Âùóç{{{A"‘Ý»w×hóñãNj“£s={ôè!H$¡eË–e®‡ò^Ê{ÍúùçŸÅå}}}5–OKKç{{{—é<ùðáCµkÊúõëµ–ûðÃÅ2_~ù¥Ú9¦cÇŽ‚D"7n,dddh,ûÕW_‰Ëúùù•xÝ"""„†  ‰DèÒ¥‹Övzøð¡àèè(H$¡]»vjûKqõ×¼ysA"‘}úôÑû¹U¹õèÑCœ%´k×N\fß¾}¥¾&¿xðùçŸ ………ûÕàÁƒÅ2þþþufgg'H$ÁÅÅEë¹?44T¼nK$aõêÕ¥Ú¯ôq¬Wôõ¥¤÷Hú¨óо–¨ÞJ¥ÒJÝŸTÛIµT¯GÒÓÓ ú=ëܹs‚D"¦OŸ.äåå•ë½¾\–(ôôˆzzDž£…°Í÷ûãÏ,±Ì‡_>Õú>ƒÇD =="„)³âŠü¼’”ó%~Þú-É‚\®Yf‹OªXfúûñóGMŽzzDn£#…$©æ±tãV¶¸üÛóâµÜ3Ê…àÐ\!7W^äödd ý_SlÓ•?³t–{ë½8¡§G„°ö§d­óóóaÄŠuî54B𻑭uÞÿD\﹟>ÑY¿o¼«õsæ .Ÿ‘Y¨µÌðן×ÿÌãµ–ûáçd±Ì¯Ô¿KÝøLœ·q{Šîýø²L,wÈWý˜:ä›.Î02R¸}Oó);G.L'–»z=«Tû~l|¾Ð×S±ìØi1Bjšæv>ŽÈŒTÔéÈÉÑBJiJà6Z1oÈØ(!*FóØÉÍSo³ßÏgªŸ·ÂrÅy½‡EhngV¶\xýíX±\OáÔ ï#‚)+÷û¢Ú—¨,ÂÃÃKc}pç–š,-ñsÖU²õë×c̘1⟗—fÍš…-[¶ ;;Í›7ǹsçàáᡱl^^ž˜o¾aÆZ{ꙚšŠ=† Å^/¥µmÛ6±—ç‚ Ôré+U«V ?þø£Ø“fíÚµ:ßÏÊÊ Û¶mÓúsEoWTT”øZ[ŽeÌ;WÌ/úâcñ%åîîŽåË—cÅŠZÛ€Z¾veÏOmÚ·o%K–TZ/¥5j`ëÖ­°±Ñ|tsÒ¤IâkeO:¥ .ˆi;ÜÜÜ0xð`å­­­‹ìµ]Mš4A—.]ħbbbÔæÇÅÅáÞ½{€!C†¨õDÕ÷¾]¤R):hÛ¶-f̘¡õ ƒeË–¡zõê –[.—cΜ9X¾|96lØ€Æk,oii‰aƉå=z¤s}fÍš¥Ö‹Zµã€(R)½ØE‰ŒŒ_÷îÝ[ë£ó3fÌ@óæÍѬY3¤¦ªçùÜ¿?’““‹lÇÁƒ‹½“;&¶»>–×—+W®àÎ;bOõ#Fh-7þ|´lÙRÑ«êÀÔ-%9×çµ×^ƒ………¸½ÚžPæ#V}Z%==»ví4jÔHg/òнOÃÃÃË=IQŠ«‡ò\*óZ¬/ýû÷WÀ^Õ‚ ÄsÝÁƒÅ6622¯Y¹¹¹iU€çO0ÙÛÛ—*…ƶmÛÄœðß~û­ÖvjÙ²¥ødÊ“'Oàïïoðs«6 ;v,ž€˜V®N:j¾hĈ˜Ñš–­´Ú´i£³>KrM633+òÕsiTı^חʬóªr-©ˆm{ÑÞ½{Å´‡ 6ÄÁƒ+|,’022Â÷ßsss\¿~ýúõÞ={ÔÆQ*‹–-t§õªgkúÏ9 òò¥[T7Ò™ߨ®’«þÎýçã1™šBLGž§s Úï¿–`Ï–ص±A™×ñä?)p<YC×ð¾¿+Ê´v®†¦ŽÚÓRݾ÷|ýGxèþ1¨VÍÊËC^ßÖTg Õt?E N« ìu§;íÚÉB\Ç»÷Ÿ•ê}¯ÝTœÛmj£{g åö±ÂáQC-eÓ*–·´0ÒD™n-ZTâÖÒR½q.É Xªe”Í•FEo—••Nœ8 À××X½z5V¯^ ssstïÞ£F¨Q£J58ž6'OžÄüùóÅG¢ÿí222Ä}¸¬½y˪fÍš2dŽ?ŽÀÀ@DDDÀÉÉ ÉÉɸqãE¯LÕÞ˜•½o—•jÊ—²ö€+V¬ÀúõëÅž¤UÍúõëáèèˆÍ›7#-- ;wî#~õÕWáé鉉'jôÜKIIAn®âÑÛÇùô€¶óFy—×'å —¶¶¶Åö®Œý±OŸ>H$HHH€¯¯/-Z###\ºt 99ŠAØ^ ̪žïJr\ÙÙÙA*•Vê1¥ÏëBe]‹+“jÐMy^W7nüýýQPP€S§N‰©Ñ~ûí7Š€º‹‹K‰?Kµ‡tYÏo†<·ŠÁ¤ÈHµt^üñ ‘f»œœñ\ß Aƒ ùŒ—ñX¯HUéZRÑ|||Ä×r¹GŽÁüùóËõžÍ›7×8ß”GXX˜Ú5úO}Ÿ´Uéõ-ËRïEV:ßK&SDVMMQ쀶¤®~=õÞä% Ög¨­Ð´†`è§TS4(slŸ9sFLiQšÞž±oÒÒ¥K±fÍäçç£S§Nضm#î .4è:š™™á³Ï>Ã;wðý÷ßÃÝÝ]L™ˆ¥K—¢K—.ضm[¹ÏÄ@Vy—7Õý±¢Òd‹yÊŸç™ ö”ö,¢Çü‰úûZÁÒ¨ˆócÿ•}Õ˜I"­Ø³ž¨ rvvFtt4är9bbbÄ/‚ª8;w¯¾új…|¾j~qÕ„º¨äT–Ü䕵]€b`ÒyóæaÞ¼yÈÏÏÇ;wpøðaøøø ..'NÄ… ´Vœ%K–ˆÛsêÔ)ƒõ®«LÊTùùùHJJªôÞõýúõC½zõ””„cÇŽ_T IDATáý÷ßSà4nÜ:u2è¾]Vªé RRRÔÒa•„T*ÅÆ:uÂñãǵàZUØØØˆy©EŠ€S§NaÓ¦MHKK `mm-æ`VyðàÁj=þJúyåY^ŸêÖ­‹èèhH¥RÙNªûcEöH7n6lØ@ñ#XÇŽÅãÇ×Hóâq¥mPKmÛQ™Ç”>¯ •yͪ,ª¿8Ðx­Zµ0xð`œ6¾Š<꺖¿þ“¯¼ HI+dïúRHH,(v?ЬïçåÒÒKÿƒs­šÏ——&ß9A*}¾¯ÚÔdÛiÃß±ˆªúAªòsó+¯¼"¾.*GnyYXXˆ¹¹ðìYÑÔ\¿~]|]–¼å¹]‚ ==éééâ hJfffèܹ3¾ûî;|ýõ×€ÜÜ\ìÝ»·ÔŸ“‘‘   @ïÞ½ÿz@ñÃ’REåÐ.Љ‰‰(zôènß¾-öôÒ@Ò×¾­š{¶"zÈ)óEê9‚µ‰ŒŒÄýû÷Õ…¼uë–˜ßwÔ¨QU2P/“Éžž®u`Û-Zà½÷ÞÃÁƒÅž™Êô8€¢wŸàîÝ»¥~£¼Ëë“r¿ÊÍÍ-vÐÁòžkKs\+Ð'NœÀÕ«WÅ´ ÚžVQ]ÕuÔ&,,LLýóâÀ’ªƒUVdOôò^*ëZ\™TÏ3ªÛ§¤|ŠI.—ãĉb°¾K—.¥N5aaa!Éïß¿_dÙììlÜ¿÷ïßWKac¨s«*{{{lÚ´ fffذaƒxÝ_³f ®^½jÐkrttt… Ȫ¯cýߢ*]K*Ú¢E‹Ð¹sgôèÑü1EÇ€™3gìi¥'NàñãÇðööƆ þ“zxœ+¾vjüüzš›+ S&G¦LŽ›ªnm lÍ« ©§¸W<{Q†¬ìÒíËÊ8ƒû[éÌW~âŸÁgš˜Á¥eÑiGš<¿Ï Ë{©ÛÅÔÔHåÞ¦bÏ……@x”¢¾jÙ—(T«f„†Š~¼¡á¹E–Íy& ô±b beúœjՌļóA!¹ÈË+z;•?Ú€óK0&‘!0XOTÅdggãï¿ÿþçÂWM-'hÿþýÅàýöíÛ‹l«¸@dQ<<<(j‡ÒY.>>^ìÉܬY3­_ò‹S‘Û•›› ggg8;;‹½r‹Ú^@½÷ªRq”Ëd2ñuQ¹H‹ ”FUx̽OŸ>âë¢z”i«S}Qm×>ø@Ì«+Ž>ömÕÞ™ñññ:ߣ$½÷uÕ«òƒê,'<==1hÐ Ì›7OëþXT>X}î¥5nÜ88;;£eË–:éW_}U ¾¸ 4 ŒYšsFy—×ÕsÏ‹é~TÉårñ “r§¢)Iû(ƒ1Ê µD"AÏž=5ÊöíÛW ŽìÞ½[-}Û‹¶oß®uÛ_<®tõ ÎÉÉ)w¾çò^*óZ¬/ÊGµILLÄÙ³gõë××:ö€ı#víÚ…[·nyž-Žrÿ•J¥âÀÅÚ8pƒ  Aƒpûöm½\³ÊsnUeii)Ž3akk‹M›6ÁØØ‚ `æÌ™HLL4Ø59??ûöíÓû5Y_Çze¨¬{¤ªr-©h5j<ï ýÞ{ï¡oß¾ >MbHþù'Þ~ûm¬X±¢Ê¥€Òç~š[DzAN{Þù¡}›çOÀíØ“qÑð ÿ»ÏtœÏŒÐ± P¤¦•‚)î½uõ˜/,~?/+²ŒªÎí-Ä×ÇNé¾MJ.(g;Uü¾`£Òë<1© ˆm)YGEë>ï^½žÔ4E½C‹R­g.Šs{jšÝÖâëôþ÷n<þ÷n¼Øîħ5²³œ¾(Ó}Ï!-ÄÕ늎˜•kœ¢3뉪ÂÂB,X°@ì åææ¦–nÀÁÁAÌ%üðáC,X°@k/žüü||ñÅø{÷Eµ·üÙÝd7Énz#¡W‘¢€ ÅPC ½ƒ(MáUŠbA.\E¼(R­T/‚4¥z@"„" (A$„Ò“Í–l?,™dÙMH#ÉÕç÷ ²3›™3gf³ÏœùŸÐÐPa´wiMž=óÉœ—5œ„À>ê’iéö¿çÆ_:lÜZ²§Ç¾ßžó¿9nµÿ-xAaö7EÔ îÆöá=ððR†åßf8,‡“’jÂ÷Û¬}ÐÓCŒ6…n ì!´çª Y¸wß¾³è ügYš0/¸1ž €ˆŠÀšõD•,::'Ož´ûB÷î]ìØ±C˜°ÍÝÝ]¨¿XØ‚ pþüyÜ»w›6mÂï¿ÿŽ—_~5‚Á`@tt4~øáá±í+W®Ø<ö]RX²d ¦OŸŽììlôéÓ“'OF‡ “ÉpëÖ-lذA:ÃÂÂl&û,­'¹_óçÏÇàÁƒa00|øp <={öD`` 233qêÔ)¡Ä››ÆŒc÷…˽¼û8q" ú÷ï899aܸqXµjL&Œ—^z O=õ²³³qúôi»/2å}¤¿V­Zpuu…V«Å¡C‡°bÅ 4hÐÞÞÞ6#ÞŸô¶Ï>û cÇŽ…ÅbÁ„ 0fÌtîÜR©7oÞÄ–-[Š}¾{÷n!Ì_·n]™¾Ô=Ú&4Ècždß9r$Ö¬YFƒ^½zaÊ”)hÒ¤ ²²²‰ýû÷—«DÎûï¿cÇŽ!==óæÍÃÙ³g1pà@"11Û·o&¾|öÙgñꫯ ë¶nÝ­ZµÂÕ«Wqÿþ}tíÚ/¾ø"‚ƒƒ‘””„={öàÎ;ÚKkêԩرc±hÑ"œ9sC† Aݺu¡ÑhpíÚ5lܸQ» ï`½!ñÑGáƒ>@ff&ÂÂÂ0nÜ8téÒžžžHKKÉ'°}ûvF>|Ó§Oê—wýŠôõ×_£oß¾P«Õxíµ×pìØ1ôë×ÞÞÞHNNÆöíÛqúôiÖ¹òGº?I¾¾¾èÑ£‡0âúqçÕìÙ³qêÔ)DGGcãÆˆŽŽÆ‹/¾ˆ:uê@©TâØ±cغu+Ìf3¤R)¾ýö[!àÊ7xð`,\¸yyyX»v-âãã1`ÀÈd2ܽ{;wîÄíÛ·+dÿÊû¹PYŸÅiÙ²eˆŒŒÄСCQ£F ¤¤¤`ûöíˆõ   ̘1£ÈõGen÷èѣ̵ÈëÕ«‡·ß~Ÿþ9bccÑ­[7L™2Í›7‡ÅbÁo¿ý†ï¾ûNx2hñâÅvs%TŵõqfΜ‰¨¨(¡~ý²eË„¿2Ô¯_Ó¦MÃW_}…ôôtôêÕ 'NDË–-¡×ëqñâElÛ¶Í®üSiTĹ^*ëo¤êôYR™üüü°zõj¡~ý믿^-ê×Wõë8#=Äì3-OGÇv®0š¬ebʲ\¾õ?dã÷?óЧ‡5œ£4ãĵ0¹«D ̘b{]~îY„´wCäy Î]ÔbÂôDôë©@£RˆÄ'±ç ÷­7möu‡L&² ÇMMDz† J±þ‹`HÄáëá*a½¢ì ·ú];Émê£ýýxgš/f}˜‹˜³ ýz*жµ+œD¸{Oý‡s‘š^¾€½^)kÛ-þ"Cû{Àh´ ë nPÈ+n\kßP¶ïVB›gÁ¤71zˆ'êÖq†2׌˿kqòŒ%­þg0ïÍOAÏ®r´må w…÷ Ø}@‰”4k{„´wCÛV¶Ÿ™©é&L˜–ˆ\•íÚ¸bÅ'¶%[k9aâ/¬ÿ! IFŒŸ–ˆ‘ƒ=и‹µÌÒ®}J¨ÔÖ¿ËgÍð³)yäë-Á{oøaÁ’4äªÌ˜<3 #yàÙ.JEˆ‹7à§ýJ!ÄïÒÑ a%¸qCôOŰž¨’­Y³kÖ¬)v™:uê`õêÕGx{yyaÏž=˜4i®^½Š+W®8¬sìââ‚E‹aìØ±eÞÖáÇC§ÓaîܹÐh4øòË/ñå—_Ú-7tèPaô[Y=ÉýjÓ¦ Ö®]‹3f@­Vc×®]ËŸxzzbݺuëïŽ9_ý5rssqéÒ%¡À /¼ |áš3gnܸӧOC«ÕbýúõvÛ>oÞ<á&LyGZ:;;cüøñX³f L&/^,lke…õùÍ¢E‹ðÁÀl6cë֭غu«Í2'N´©9^ц † Àd2A$aÈ!O¼oÏž=[xŠ"==Ÿ~ú©ÍëùÛ±gÏž2ÞµkÆŽ+”äÉ/ËSXHHÖ­[gSï[$aíÚµ6l””d7Ê¿fÍš=z4–/_^!ý±´<<<°mÛ6Œ?±±±8sæŒÃ:Ïb±sçÎÅ€ì^›*ó³¸"L:8þ<Ο?o÷º¯¯/¶lÙ">`²Ž8îÑ£RSS±|ùrtìØ!!!•v¬çÌ™ƒ„„ìÞ½ÙÙÙvŸaNNNx饗>½Rq®W†Êü©º|–T¶ü§I/^ŒôôtL›6 ;vìpøtÎ?Íð¸xÅ:R=ü„ á'Tô—Ø…ð%]‚P3È ¯ä ë&‘ï¿ã& í¯YÎöLJŸ¦"ê’qñ|»Áñn!n˜þª·ÍÏbïþ°DKÌ=²s &|=ý«¹*3\d"ôêêøó#-Ý$”U).ÐT‡¶®x{ª/¾X“³8pT…GmË« íïŽÝsË|œú†*°eg6Ô þˆÖáhëHýÖÏԪаþÕ—½qõzþº­GvŽk¾Ïzä;ÚEŽoºgæk>X¿9 G#Ô8a¿|ÓÆR|0Ë~‚à›1:䪬Aû¥+Z˜ÌnºßׯzA©2cÇ%2³LX³É¾Ÿ¸ÈD˜ý¦º‡ØÏ Ñ»»zƒ˿ɀ6Ï‚Í;r°y‡}éž]åøw)'1&ú§aXOT 8;;ÃÇÇ-Z´@XX†W×¢ëÌáСCØ»w/öìÙƒ«W¯"33 …AAA ÅøñãK=é›#cÇŽE×®]±~ýzDDDàþýû0 ð÷÷ÇóÏ?±cÇ¢sçÎÒOr¿Â‰M›6áÔ©S¸{÷.Ôj5är95j„ÐÐPLœ8Q¨Éû¨àà`:t‹-Âùóç¡R©P»vmÈd$Éd2üøãغu+¶oߎèèhèõzÔ¨Q={öÄÔ©SQ»vmܸq)))‰DÐh4åšëÃ?D­Zµ°yófÄÅÅA.—£^½z•Þ‡_yå´iÓ«V­Â¹sç™™ ///´iÓ¯¼ò :uê$„õް+<‘¤\./Óï÷÷÷GóæÍqíÚ5„„„”h‚ßòöm¹\Ž}ûöaݺuÂHu‹Å‚ÀÀ@tìØÿ÷ÿ‡¼¼¼2‡õдiSDFFâûï¿Gxx8nß¾œœxzz¢U«V=z4 ä°æi:upâÄ ¬^½ááህD"A½zõ0xð`L™2EÁž2U¶ÆãĉøñÇŽèèhdggC*•¢V­ZèÔ©&Mš„¦M›Û÷zõê… 6àÔ©SÂq D“&M0fÌ„……9Ényׯ(­ZµÂ¹sç„cƒÜÜ\xyy¡E‹4hF]©“wëÖ­ P(A0ëëë‹}ûöaïÞ½øù矅k¸\.Gƒ лwo¼òÊ+ÅÞl1b6lˆo¿ýçÎCVV š6mŠbܸq˜0aB¹ÃúŠø\¨ÌÏâòjÒ¤ æÌ™ƒ7bïÞ½¸}û6ôz=‚ƒƒÑ§O̘1£Èý|´Oܼyr¹½{÷.÷v-\¸C† ÁæÍ›qöìY¤¥¥Áb± víÚ ÅäÉ“Q«V­ oò\[§ªGK$¬Zµ }ûöÅæÍ›qýúuh4¢K—.˜6m„°¾,×”Š8×+CeþT]>K*ÛÌ™3qîÜ9üòË/ˆŒŒ¬ô§Iª«nXº ›~ÌÆXk™Áúu¥e^.?$]þI P!ü¸ 1wõPkÌðö’ Í3.;Âê;^×ÍU„%âL”GN¨}K‡¬kïã-Aó§\Я—ÚÚÿlÚDж­\p톡åBPLÛ£‹nnޝ—æÂl‚k8Ù”M)‰áÝѼ© [ÊÁï×ó­4Á]!F‹¦.6Э[º a½DRúëu€ŸkWcͦ,üþg4Z3‚œ‹œ$·¬Ü\EXµ4;ö*qü´ñ ÀøúHЪ¥ Fñ€No)QXÿB{7ôè"ÇÖ]98wA‹iF8I€:µœÑ«›Â¦œMaÏ=ëŠæMe¸«Ç°þîvA}¾7ÿÏ¡]äØž‹«×ó‘e‚Åb½YÔ±+FòD`@Ñ×±½h×Ú»öæàüe-¤a0Zàã%AËf.ÐÇÝnÔ?Ù©Õj ›•’’âpT7QY$%%¡M›6¬£ÕW­Z%¼¶téRar² .5ðK#-- ­Zµ‚ÉdÂÊ•+–2"¢ÒÙ¿?¦L™R®s“þ^òÃúQ£F9|‰þ7ìÚµK(y´téR¼üòËl¢jªßèx(sͨ_Ç›W׬6Û•”lĨW­ó ­Z„–ÍdvËX,ÀÈI xjÄÿMðÆøÑ{/5Ý„aã­ssôê&ÇüÙþì0DôÄÅÆÆ–hp`aq1Ñ®]¯ÄËó5""*·øøøb_/®=!”ay÷ÝwËôûãââ„ڰLJ»»; Q9:tH˜{âĉl8­V‹ °N¨YQåï¨âÍ™3ÇŽÖ-[мys»×#""°{÷n@£Fìn ý…ô‹«–Ûy¨^µßÖ¸xÃc·Él†Œ»_ªý>vJE+Ò0÷-‡5üSRMX¿ÙZSÝÉ B õêz,©úžSDÕÃz""*—mÛ¶A¯×cÚ´iضmFŒzõê!//QQQذa²³³o½õ–Mýæü ~ìØ±èÛ·o‰çõë×ñÇàÎ;غu«Pç|æÌ™< De„„\¾|Y˜lµQ£F:t(ç(%%§OŸÆƒ°sçNÄÄÄf͚Š$«©ÌÌL=z)))èÓ§Fމ^½z! 8zô(¶mۓɉD‚O?ý´Luù‰þnþ—¼JØxè¸ °`IÂç¢wj9C§³à÷?óðÓ>¥0aê„1^¨àôj"ú{cÍz*ò kÖQI¨ÕjLŸ>‡.v¹™3gbîܹv?¿~ý:š7o^ªð§pû|_~ù%FÅBTFÆ ÃÙ³g…ÿ+ 8p Ø ~éïëìÙ³vOK½øâ‹X±b§‹‰‰Á”)S„’EŽ( |ñÅ,Gô? ºÖ¬Ò4Z .MÙsšb—7Ú¯MðfG!¢JS5ë9²žˆˆÊE.—cÓ¦MÂhܳgÏ">>‹AAAèÔ©^yå4kÖÌáúe©—¨T*´nݳfÍbY¢rª_¿>®^½ '''téÒóæÍCݺuÙ0ÿPžžž¨Y³&’““ѤIŒ?“&MbÃTs7FDD<ˆC‡áÒ¥KHNN†L&Cƒ ŠI“&! €EDÕ–›«ŸÎ À¿t8rR…+×ó”l„@€Ÿ­[ºbØ@w4ª/ecÑßGÖ“CYODDDDDDDDDdU#ëYp’ˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*ưžˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*ưžˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*ưžˆˆˆˆˆˆˆˆˆˆ¨Š1¬'""""""""""ªb 뉈ˆˆˆˆˆˆˆˆˆªÃz""""""""""¢*æÄ& ¢ÿ5s¤"2J8ðcxyò¾#ýocÂET…Lf`èøûé‡í»•lB>ü, ¡CïáÓ•é¥Z/;ÇŒ‰Ó“Ð{Ä=ì;œË†,¥øBúÅ!¤_nÝÑ ?¿ö§ƒ^ºaãï#ú–ž EDDDDDDDTÁÖU¡ó—´HK7ÁÉ èÓCñØç˜;z! þbM¦ÃeÒ3M8ù‹:ª«2—øý/^Ñâv¬?ïgX_ZûÞàhÒPŠ& ¥ÂÏŸP!3Ë„ÔtŽF¨ØPÕøü![;ö(…6û圆 BDDDDDDÕÃz¢*´ÿˆ5íÒQÎR.…øxIж• ¤½Ü%o›V-\è/X ôî.gc–‚Ñ„Ÿ°ñûºÛ¼Ö¥“d2ÜÜDèÜÑEDDDDDDDTÁX³ž¨Šdd™pö¼u”çÀ> 6H!b1°rQ  €³séÖõ÷“à§ïkÃhœx…+•3Qdç˜!“‰Ð«›íŽm]qô§º=<>DDDDDDDDT±eU‘CÇT0™NhÛÚ• â@iƒz›‹¯n¥–_§{ˆ ¹}"/aHODDDDDDDôÄ0Î"ª pð¨5ÐG‘Èöõ{”ør­µõƯ‚áí%Á?çàüoZ©² ë7ïÈFí4;]_(7”"¤½>Zœ†ã§ÕHz`ÄùKZ!sdø@w̘ìk7òÙÍՌɤ™““HøyeY¸4Mê-KѲ™ ½ºÉ±æû,lÞžƒ¤F|µ.sßòsø^zƒÏ4“añGpW¤¾ýz)ðåÚLìØ£„Ù DDªñÒHÛÑñ —¥!Gi J?þ—ív<ÛB†ÎÝ0îõ¨5|µ./´w³±¼íç¡]W/ ²)›ÒéyW<×Êïγ†ÂÿÝ–SlXᲩé&H$@X¨{©Û41ÙˆMÛ²ÁANX»<^žíÑ¡­+B»(0åí$èt¬\nB™¡Œ,–~m êÝb¬YdS.çÙ2ôï­À¬y)¸|-§Õàð ú†*Š<.ÃZËÂãõuÇkï$áfŒIÉF܌ѡÙS¥{Š <힣4ã“eiEîgÛV.hÖT†9§B£±`ýY˜û–D¢Š?VmÌ‚ú“}l® ϶¡o¨‹V¤#ü¸ ÝÖãÀÑ\ sÜ7Z6“áÓy6Ç\¸¾lË‚úGËRµl&Ch9¦ÎJÆ¿tصW‰á_'Ì|ÝGØ·­»Šîƒ£‡x2¨'"""""¢RãÈz¢Jvàa œ°ž ‡e%åá^txZ8¼jÛÚµÈåü}%ˆ¹c ³4Z³MY—.ÃÀ˳`CÕš¢ƒß§›ÈìêUW'§ ÕÌ>°èb10¬¿–~““8wAƒ!ýíGø9Á·ˆZÞ…ËåªlÛìhDA 9 OÑ#Ù{t‘cëOÖ@ðʵ<<÷°†¹““õýÓÒMˆ¹«G̽pC¦°%>¶M²²ÍøõÂÃ'=ú¸—©]=o]ßÓCŒŽíŠî‡¡]äÈʲ†Ý…'ïýåamy7WQ±g ¿;Êqò5â ¸w߀ºµíï§I‹,oPè¸(U7abîèa*¢k× v‚B..w»çäRgzw/z?»w–#ú–µ\Oô-pÜK"1Ùh×ßòùxKà'Á…ËZáæJßbÚÛÕE„W_òBÒ£Ã0ÞzLŠ>¢.i ÌµnKߊ"oâuhë W´y\¾¦à%œ‡EÍo`{}—èúTÜ9ðG´õæQÛV.¨W§è»Ý^ÃÏ'é™&Dž×`6O`ýôS2•Ãz¢Jtã/î<Í; ·{¹ßO,.HÆ]e¢-—Ò=J£±àä5¢~Ó .Þe®z½‹Åf4¾å¸ýoÝ.¨¯ý¸ò'…'½y[À½ÌÇÆôÈÀü¸ø‚Ñ¿ „Ñþ*<Ñê½û¶ËLí…¥ßX'còv:wpC§önhÕÂÅáä¢:– “É„~R£¤t: “­ªI£âoÖÔ¯ãŒ÷Þðµ[?‚ݧ›È„‘ÜEiÝÒ'Îð×m½Ã°¾,ÇeÆ¿’í&|Í·x~ ^hïZîv¸Ÿ5œì&¶ù`–ˆ wC©Âú¯Öe"2Jãðµ1Ã<0c²Í“M ¨6‡ª,ûüèS(k6eá‡ÖRP-ž–áÅažhö” Þ^8=ü fëO9øö»¬Êë‚…û DDDDDDD†a=Q%9ñp²Hw…Ý^p«6Ûµz£5äRÈÅX³"~>ßQ¢žb$=°Ö¨6™më¦?ªðèw/Š‹;Î77Ž–"$vxw²Î;?÷@F– ç.j±íçÄŰÿp.ŒF ÞÇÏnÝýŸôx¾+ýËvÜ Ï©P–'3 ·má‘ØEIO7:žU×WKÛîî…æ‰iï†ÏæTáyPÐn9Jj?™? ϱá«`4qPß¿8Ù9füøSAPÿÍ’ bÏÙ²*ütAzæãŸÖHË(Ô=9ªžˆˆˆˆˆˆ*Ž˜M@T9òKàôî.l]îÊ¢R›q;ÖZGú¹V.ë žzXŸ[o° ú/]±Ë^¹žg·^EÉ/‘¢ÑXŸh(õú:¹*3rUf›ùÀ×[‚½X»Eþ(høi¿²ÈåÌf`ÏAë͉èô|Å> ѱ]ÁûíÜ£,vY½ÁbìnÜš°Qñß~w.º¹‰ð\+뤨&³}Ýý£*èõxyŠÒ¡|û—ß>YÙf\¸¬-r¹Ã'T˜ôF&½‘$œ…‹FcÁᓪ"×OM7áÌ9ë †:5[¿¢•·Ý;=<îé™&DDª‹?îEÜ´¨ˆóçù6®B ™Ã'Šno‹˜:+“ÞH¢åi¥þ=íÛº ¥Š~Þ¯‚÷’îsáëSqµûó'Ž.+o š7µÞûíª¶ØÉ9«AúÑõ;ÈùáFDDDDDDŠa=Q%ÈUß´±H«ÍvùzKàæfMÿ®^ÏÃ_B¯È( ¾Z[09¤ÁP¾!Á..¥+{R‘žo㊦­íì”Z˜CàQë7g Oô U”¹DLQzt–£f5-Ý}0ÇO;ÞŽì3Þú÷üë㛉\Ûµqþ½cOŽ]oÀ:Šýú k ,uÙLÌ ûXCÚ~=݅ඬ†ôÞcù·Ëᤤšðý¶lÖrDmžq^1Ø®.Ö~¸jC–ðTo°à?ËÒ„IZÇñ¬ôó¥¼íþâpOabãeßd öžãP8掣^MÀÚï³ìîŠ8¼<ÅèÓCøó¦;÷*‹<ò'ñíÑEQêßà'AŸîÖõîİrU†Ã' ŒF`åêLLœž$œwl&á>pÄþé³XÿC¶Íùãèú”ß·¬mæ¸ÌÍ„1^Â{~², Ú<û÷yjÄÊÕ¬e^î """"""¢ŠÄšõDO˜Þ`F¯V§‰e@"÷uÇ?[G½N{/û¸£~]g䪬£¤/?2‚8Gi.×ï¬à™L΂_Îj°éÇlÔ©é ww Úµvyâûµxº ôOÏ0aé7Öß?÷-?!¬€÷Þðƒ““{æ"é_z¢(ŸDb½Ñ1r°ˆˆˆˆˆˆˆ*Ãz¢'lÿk0Ú£‹\(9SHEX¶ Žæ"ü¸ wâô0,ð÷uBÇv®xq¸'j8!æ®™&ˆDÖR…KK”Ö´W}P#À {Ãs‘˜l€«‹X( Sš6–âÇõµ°çP.ΜU#î¾jî 1š4”¡G9Âz*žØ„–ùži.Ãöïjcox."£Ôˆ‹7@¥6ÃÛS‚NèÙUްžî;è7n®",ù8g¢48rB…è[:dåXGûxKÐü)ôë¥@‡¶®6ëió,8þË“yÒãÍÿóAh9ö†çâêõÔ«ãŒþ½Üѹ“[‘ý¯¢ÎŸúu±u]-ì>h=î% R™¡PˆñtúõT {gy¹ëäûûI°vE0NžQãøi5nÞÒ![i‚›«~NèÐÖCú»£F€ý>×p¦¯kbûn%NŸU#1ɱ¨ìŒÐ.rŒì΂¿b¬s ˆl¬H¬øO |÷C6ÎD©‘ža‚·—>Þ¶}Q"fM÷EX¨{ôa±ðwB»Ö®>Èuj:ƒˆˆˆˆˆˆèI©Õj ›•’’‚úõë³!Ê))ÙˆQ¯&V- BËf26 U©GUøle:än"ìÛRǦL 9‹ÀÀÀR­àÚõJ¼<'˜%z‚òGÕ׫ãÌ žªGŸ|X§Wwƒz"""""""¢j„#ëÉ!ެ¯!ýâØDDˆ If there are merge commits, there may be multiple paths. In this case, only one path needs to be authenticated: when the parent authenticates the merge commit, it implicitly authenticates the changes added by the other parents. The `--trust-root` argument specifies the start of the path. By using `HEAD^`, Bob is asking if the current commit is allowed by the parent commit's policy.
`sq-git` authenticates a range of commits. The **trust root** is the start of the range. We call it the trust root, because this is what the user trusts; the authentication status of the target commit is derived from the trust root.
`sq-git` requires each user to select their own trust root; for security reasons, this cannot be delegated to the project. Consider Dave. When deciding whether to use a project, he first does some due diligence. He looks at the code, researches the project and its maintainers, and examines the most recent commit's signing policy. If he is happy, he uses that commit as his trust root for that project. Alternatively, if the project has been audited, he might decide to rely on the auditors, and use the commit that they reviewed as his trust root. Or, Dave might [*yolo*] it, and set the trust root to the current commit. This is like trust on first use ([TOFU]): `sq-git log` will alert him to future changes that violate the singing policy, which is less secure, but still helpful. [*yolo*]: https://en.wikipedia.org/wiki/YOLO_(aphorism) [TOFU]: https://en.wikipedia.org/wiki/Trust_on_first_use Dave records the trust root in his local checkout by setting git's `sequoia.trustRoot` configuration key to the hash of the commit that he audited: ```shell {{#include ../examples/frob-60-dave-sets-a-trust-root.txt}} ``` It's important to use a hash and not use a branch or a tag, as these may be changed by a third party when you pull from an upstream repository. When Dave fetches updates from the upstream repository, he can use `sq-git` to check that there is an authenticated path from his trust root to the latest commit. To illustrate, let's say that Bob adds a few commits: ```shell {{#include ../examples/frob-70-bob-adds-a-commit.txt}} ``` Later, Dave updates his local repository, and authenticates the changes: ```shell {{#include ../examples/frob-80-dave-checks.txt}} ``` Since Dave set the trust root in his `git` configuration to `{{#include ../examples/frob-55-dave-trust-root.txt}}`, he doesn't have to pass the `--trust-root` argument. In this case, `sq-git` didn't complain, which means that it found a path from the trust root to the current commit. Let's say that Carol adds a commit: ```shell {{#include ../examples/frob-90-carol-adds-a-commit.txt}} ``` If Dave were to pull her changes and try to authenticate them, he would see that he can't authenticate Carol's commit: ```shell {{#include ../examples/frob-100-dave-checks-carols-commit.txt}} ``` `sq-git` correctly identify that the commit was not authorized. The missing key error message means that the certificate used to sign the commit was not found in the parent commit's policy file. This is exactly what we expect and want: the parent commit does not authorize Carol to add commits. There are two main reasons for unauthorized commits. First, it may be that the maintainers made a mistake. For instance, Alice accidentally merged Carol's commit without first verifying that the commit is authorized by the policy. Second, an attacker added a commit. This could happen if an the attacker compromised the upstream repository by gaining access to the server, or by convincing the operator of the forge to give them access to the repository. The latter is sometimes reasonable if the original maintainer has abandoned the project. `sq-git` is not able to distinguish these different cases. So, it is up to the user to investigate what happened, and decide what to do. Let's imagine that Carol sees that `sq-git log` is unhappy with her commit, and she tries to fix it by adding herself to the signing policy. ```shell {{#include ../examples/frob-110-carol-adds-herself-to-the-policy.txt}} ``` Now, `sq-git log` can authenticate Carol's commit! So, she pushes her branch, and thinks that everything is okay. When Dave tries to authenticate it, however, he still sees an error: ```shell {{#include ../examples/frob-120-dave-checks-carols-new-commits.txt}} ``` This is because although `sq-git log` can authenticate the commit with Carol's functional change, it correctly rejects the commit where she adds herself to the signing policy: the parent commit doesn't authorize that, and Dave's trust root comes earlier. If Bob is happy with Carol's functional change, he can merge it: ```shell {{#include ../examples/frob-130-bob-merges-carols-commit.txt}} ``` Notice that Bob uses the `--no-ff` switch to force a merge commit. This results in the following history: ```shell {{#include ../examples/frob-140-git-log.txt}} ``` The merge commit has two parent's: Carol's commit, and Bob's commit. Although Bob's commit can still not authenticate Carol's commit, it can authenticate Bob's merge commit. Therefore there is an unbroken path from Dave's trust root to Bob's merge commit. Now, when Dave runs `sq-git` with his trust root, he can again authenticate the changes: ```shell {{#include ../examples/frob-150-dave-checks-merge-commit.txt}} ``` Note that the Carol's commit, `{{#include ../examples/frob-95-carol-commit-cherry-picked.txt}}`, still can't be authenticated. But because there is an alternate path to the trust root, `sq-git` is happy. Instead of using an empty merge commit, Bob could have re-signed Carol's commit using his certificate: ```shell {{#include ../examples/frob-160-bob-signs-carols-commit.txt}} ``` This preserves the Carol's authorship information, but replaces the signature, and updates the committer. Now there is an authenticated path from Dave's trust root to the branch's tip: ```shell {{#include ../examples/frob-170-dave-checks-resign.txt}} ``` sequoia-git-0.5.0/book/src/getting-start.md000064400000000000000000000000221046102023000167060ustar 00000000000000# Getting Started sequoia-git-0.5.0/book/src/introduction.md000064400000000000000000000105411046102023000166420ustar 00000000000000# Introduction A version control system like `git` doesn't just track changes, it also provides a record of who made those changes. This information can be used to check that commits are authorized, which can improve software supply chain security. In particular, checking a change's provenance can be used to remove intermediaries like forges, and package registries from a user's trusted computing base. But, [authorship information can easily be forged](https://dev.to/martiliones/how-i-got-linus-torvalds-in-my-contributors-on-github-3k4g). ![Screenshot of a blog post about impersonating Linus Torvalds](assets/github-impersonation.jpg) An obvious solution to prevent forgeries is to require commits to be digitally signed. But, by itself a digital signature doesn't prevent forgeries. Anyone can generate a certificate with any user ID, and use it to sign commits: ```shell {{#include ../examples/intro-10-neal-cert.txt}} {{#include ../examples/intro-20-neal-commit.txt}} ``` When someone like Alice verifies the signature, they see that the commit is correctly signed, which it is: ```shell {{#include ../examples/intro-30-git-log.txt}} ``` But as the warning points out, the certificate may not actually belong to the stated owner. And, as the prompt suggests, it isn't. What is needed is not only a list of entities that are allowed to modify the repository, *but also* the certificates they use to sign the commits. In other words, to authenticate a commit we need a signing policy, which says what certificates are authorized to make changes. Creating a policy isn't complicated. But, for an end user it is time consuming, and requires diligently tracking the project to identify when maintainers come and go. That's too much work. Instead, a project's maintainers could curate a list of entities that are allowed to add commits and update the signing policy, and enumerate the certificates they use to sign them. The tricky part is applying the policy. There are a number of edge cases that need to be handled like how to merge changes from external contributions, who is allowed to change the policy, and how to deal with compromised keys. The [Sequoia git](https://gitlab.com/sequoia-pgp/sequoia-git) project [specifies a set of semantics](https://sequoia-pgp.gitlab.io/sequoia-git/), defines a policy language and file format, and provides a set of tools to manage a policy file, and authenticate commits. Using `sq-git` is relatively straightforward. You start by adding a policy file, `openpgp-policy.toml`, to your project's repository. (As shown in the following chapters, `sq-git` helps you do that.) The policy is maintained in-band to allow it to evolve, just like the rest of the project. The `openpgp-policy.toml` file is basically a list of entities, the type of changes they are authorized to make, and their respective OpenPGP certificates. Before you merge a pull request, you check that commits are authorized by the policy. Locally, this can be done by running `sq-git log` on the range of commits that you want to check. If your project uses CI, you add a job that automatically checks that all new commits are authorized. Downstream users can use `sq-git` to check that there is a chain of trust from an older, known-good version of the software to a new version. This helps prevent the use of versions that include modifications that weren't authorized by the project's maintainers. `sq-git` has a relatively simple two-step authentication rule. First, a commit is considered authorized if one of its parent's policies can authenticate it. A commit is considered authorized with respect to a trust root if there is a path from the trust root to the commit where every commit is authenticated by the parent commit on the path. The following shows that there are multiple paths from the first commit to the last commit: ```shell {{#include ../examples/frob-140-git-log.txt}} ``` Only one of those paths needs to be authenticated, because when the parent authenticates the merge commit, it implicitly authenticates the changes added by the other parents. In a certain sense, the fact that the other parents are recorded in the git history is purely decorative. `sq-git` distinguishes itself from projects like [sigstore](https://www.sigstore.dev/) in that all of the information required to authenticate commits is available locally, and no third-party authorities are required. sequoia-git-0.5.0/book/src/signing-commits.md000064400000000000000000000016131046102023000172300ustar 00000000000000# Signing Commits Signing a commit means adding a digital signature to your commits. This allows someone who has your certificate to verify that you made the signature. Signing commits is a prerequisite to using `sq-git`. If you are using Sequoia, you can create a certificate as follows: ```shell $ sq key generate --name "Iliana" --email iliana@example.org --own-key Please enter the password to protect key (press enter to not use a password): Please repeat the password: - ┌ 5D4142463C04ADCF7372231DC06A1E7BD5E115DC └ Iliana - certification created - ┌ 5D4142463C04ADCF7372231DC06A1E7BD5E115DC └ - certification created ... ``` Then you need to configure `git` to use it: ```shell $ git config --global gpg.gpgsign true $ git config --global user.signingKey 5D4142463C04ADCF7372231DC06A1E7BD5E115DC ``` sequoia-git-0.5.0/build.rs000064400000000000000000000026611046102023000135270ustar 00000000000000use anyhow::Result; use clap::ValueEnum; use clap_complete::Shell; use sequoia_man::asset_out_dir; pub mod cli { include!("src/cli/mod.rs"); } // To avoid adding a build dependency on sequoia-openpgp, we mock the // bits of openpgp that the CLI module uses. pub mod openpgp { #[derive(Clone, Debug)] pub struct KeyHandle { } impl From<&str> for KeyHandle { fn from(_: &str) -> KeyHandle { KeyHandle {} } } } fn main() { let mut cli = cli::build(false); generate_shell_completions(&mut cli).unwrap(); generate_man_pages(&mut cli).expect("can generate man pages"); } /// Generates shell completions. fn generate_shell_completions(cli: &mut clap::Command) -> Result<()> { let path = asset_out_dir("shell-completions")?; for shell in Shell::value_variants() { clap_complete::generate_to(*shell, cli, "sq-git", &path)?; } println!("cargo:warning=shell completions written to {}", path.display()); Ok(()) } /// Generates man pages. fn generate_man_pages(cli: &mut clap::Command) -> Result<()> { let version = env!("CARGO_PKG_VERSION"); let mut builder = sequoia_man::man::Builder::new(cli, version, None); builder.see_also( &[ "For the full documentation see ." ]); let man_pages = asset_out_dir("man-pages")?; sequoia_man::generate_man_pages(&man_pages, &builder).unwrap(); Ok(()) } sequoia-git-0.5.0/openpgp-policy.toml000064400000000000000000003656341046102023000157400ustar 00000000000000version = 0 commit_goodlist = [] [authorization."Justus Winter "] sign_commit = true sign_tag = true sign_archive = true add_user = true retire_user = true audit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: CBCD 8F03 0588 653E EDD7 E265 9B7D D433 F254 904A Comment: Comment: Justus Winter Comment: Justus Winter Comment: Justus Winter Comment: Justus Winter Comment: Justus Winter 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 GNLnNS2c13ota/HZo1jjyOOIhJ3wkyUY5s8ugtxIwO4gE34rgdxXe1w7w2dy3DKq zWOHKs7wca8m6ufk75MQGk7TPL6nXZM+1F6OBo+moEaW/X8hn4meXikLE/6p4PxG wclL3/+FbwlJpMjPunedyDa+CVL5yCf7vww8mW52YiIWHNvmSJ5szWgc276uMk0T 1+ckzQ1KdXN0dXMgV2ludGVywsHhBBMBCgCZBYJofiMXBYkQ8B+PAwsJBwkQm33U M/JUkEpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jndceh oMOXCdcGEK5NieaTCfHICdd30Ek4k7Ypxe002Z0FFQoOCAwCFgACF4ACGwECHgkW IQTLzY8DBYhlPu3X4mWbfdQz8lSQSg0nCQIJAQkDBwIHAQcDAABY9g/gnj/02oHg NDdYg7P3fWZAkABu8Gj0uH68dpFCIL8wCc5AL9l6WVSBmdxFmoNMD7TsKfiBRVg1 9IUWitxb0bcmm/OzzkvGgk1SG8gcJE46oA4sumfNh/7CnHUAvKL4ALIPMMXUDkz3 KhmUaqnZdzpQYsGRvujgOaKCia0xVNCSh2t1wGPPyIP0QLCrC6Ntcm/HD0tEQlU7 0GxLMNAzsD6ag4iqZI8X1/qilbbtiIYdoiT+bU9CWuv/fBx/nK43O4+t/G168vfh mseTAhI/q8ObbrQJB9aJJW7gbF2Qs2wC6yrtb8BYaKpfSzNXAlKH+YQbFdouq8m1 NPNoUbU27dMEG9KPeQXAiv74N4upkNpUju1IieJ80fat4QWx3pstlbCU2dfS7/8n FqbW74QFjy6eR/Mt81exw1+rxW4CMRVLnGeTxvMYWVJvj34F/dHOjGk/CNkeMvDK T+PggTHT1O/54wEgdURUKD9L0VOaBlVFIawmqfmKdXd3qks2mtakPv29vR6CnKPQ M59DSU3hE7XjWXndgjjT70d2GYcDEybBB37sy6h4dh0kc8+BWTwJztMDn2ffhUD7 XwKlTpFBhHwPcS3q+SbDApKxrOhYoSmdzez92lwG7748Cu/WZIB2u65kvzm+l4ov vuUuGcyOf7rSalLjGz+J4n7IywWz/cLB4QQTAQoAmQWCZ9gwBgWJDwBWzQMLCQcJ EJt91DPyVJBKRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y 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 tHKhU4JgfYfj3/ZkxE7B8rTAgDZ/l7ax+ppDmWU17OqhIVx7RFBxLEEg90569zT4 cvYROmoHhr7CweEEEwEKAJkFgmfYMAoFiQ8AVs0DCwkHCRCbfdQz8lSQSkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdVuzGVhHnLLB+JWAgd MQStKDJtRcLwGgcPL1i8xDel+QUVCg4IDAIWAAIXgAIbAQIeCRYhBMvNjwMFiGU+ 7dfiZZt91DPyVJBKDScJAgkBCQMHAgcBBwMAANgKD90amXbCcheJIIlYxu6w+CI8 u+fBK5wzvAsBus+lPiiHIMwwcOiWM5cSY1zHWmrHT7UvIJ64TEJbyyIYtvy5/LPV O0b+m95MeVHWTEyqY0TylIqyjKBJeQdUmZiJERWXOCOhqOCxT+VSZ15k3KYP/jIH byldOvjpsWRcTwaJq2lvTPBUbJ9hzPNkuTdIFrmqPMJypgfBm+HwsIbH1XAEUKEq GpofsAh5NSGDZVWOT8ZHtpHiA8fAN1iTsM8hjd6EQ9UzR2BuRv964e+5cVFLmSnU kCHxUM1vyjciFq6pv6Zxhzdb8DEBvcABBwtyihFvKdNd8sKUyjKvB7Fo3Qaz/8xC dEJSHdqCJGJCO1DWHP3L+L59D4g2MKu3YAlOQDx2izEafJfRVQhwYLvlswzaeV93 aaM5gNEHRIayHaOOOR2xcZR27Vc/iL7z6vHUSw8GTUcQjm9uA5VWegR1dHIDC4ok is43nNBinP1lp1o4jNe5cQSpOalRrgprr8ow7YuEe07MmqvC1q6udYGNf3YZVgfW KiBWSU2N0JEVCCjD4Ae2+0d6qph6BWwjbKQtTQ8Rv5OMFJtlKKHVMXLBYfkI2gMy YPgTT0Vc0D3wqrqeSHPxwGIeWF83e5dMIE3Wnme9NOChQkFCWAH40YMhNutrG3dR AJM8WExkMyAL0gmzwsGNBBMBCgA7AhsBCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEE y82PAwWIZT7t1+Jlm33UM/JUkEoFAmaOrBwFCQ8AVs0ACgkQm33UM/JUkEr2rA/g sXbm0JtEbE/gzxoLlI71WhZFvXWwZehWpNnxWuBgnxHyCAiB6Ulf0wqlfTyRUirI o6pcL9Gadj6y4V5sxa8NLH6Zvv2KeLelNjMTSx3VPAbSprhzLQXvO25wubmfI8wP 5xvt/HMDPtyF4RJzn584PBVtjVjc+eQm+l9oMG8YYk2HxR2QrYANDbA4KymZ7TKS S3r32rlnYLVXZAfX2RjJWisX+t+N8dVt23AcaFpkMWs6jc5aT+o1cZ/MuTdh6eAf DhF55+DdgIcRyKrKBratNx7UgotF/+hkKcjy1jRug7fFv/IVfgGZFYspMtj4fzOe aluw+gUvzuAPWn75GQTcghsW953gaOxvgTRYrUYx81slyRhy8fS5evV86VkYAwBU xYUD/DLHxNC7k8pz2ZLd6T/muOrg/aQySI/FjpkVVvRV1NmUrYSBfcODOoFWpRfx au+uUmT1hPKq3F41nur3CjDmX1jTrDdgZjMH3saaOcsg6BdvEM5I9/m5ONxcaba0 Mj/po7n0dHgNU+PdRhlbddgsDCdD0eS/Do8NTFeXUlSxuPOwyK0VAVMCcFDsPkLL k65Wts9+eKrdoM2Lp/3TKbN4tG1sa+vRjmYULRFnNAEWnCioaXe/HKEr4EnP6GlD Dih4I8ZjLmIlTWY8OCrH2C6J6EuF92BrMErPMMLBjQQTAQoAOwIbAQgLCQgHDQwL CgUVCgkICwIeAQIXgBYhBMvNjwMFiGU+7dfiZZt91DPyVJBKBQJkuATCBQkNKa9y AAoJEJt91DPyVJBKW+YP4JMPTH493g6xH8q8/pr9aj0ImFU2ArADDyeuF6eIuj/F /Gf82slDzIzd3HQcG4y/V0BeUNBMWykxm66sRwTaS/wHKAom5omxe+SSLk/XNyUg +1inLfZGQmJNbN83wSDy3rXKeXQKu9N+7YCpOax+iQOT/hVCvdeINP0ygLiSJAZo /sgPm16ZaTzXWJqOtbLCHndL2mIkbory5RU9jb8hI62lgrnNGP4yLt3kZx5agnq8 NpKRqEyUaUyl0dtupiFyapkCW7+1QZ2Mg9gfpD36loun+9j+5r3yojl95EKbuwEY z0euezRmr31zOANmY6X69jBDo8oHOEiqeqavm/aZ2TftLC4eqXCJEdPTSLoX9KGQ VDybsBfaLduLvmRPkAPEsILGju4WmBdMeQpdzqZzuMpV9vdq2ZSyrCbcg+Qz1fvP oZfs8f+Shu/eTX4S8IEZiJb5U+tYxf+LpUFd8bE/s9n7Kejkfvwrbe7z1USxVWrF 8RKWmMI6sQfuLp1aQJ8R2AHIdnaedKBDlX3VTHM3XyPL2hY7+LG3VLpqxEnSbrcT A7OhlUWYXEd0luWRUQM9xMiwAnToEs/2eHx3rqKvlllXH6v8xhNAXQl3gdiuSZij NjutX1b6WmlNd/vxfg5VLPw5Dc7jbE/IBY/ZvNlsUQnJOtEMZ048/tcVDBXCwY0E EwEKADsCGwEICwkIBw0MCwoFFQoJCAsCHgECF4AWIQTLzY8DBYhlPu3X4mWbfdQz 8lSQSgUCYtU/TwUJC0bp/AAKCRCbfdQz8lSQSkJ7D+CY83Lyw+DhNU0Eo2FoZkAh 64WJxByD9lrr/ZKWpo6bj4AQjjziJpbHzlwgwTokoFoEmy7J5GA4ZJW3v7MSqJry 30RFDDmVTLcxoi9von0QeV/TnPIUFip1M0PiFciZGWcuSD4ydtGN5h+FsT+gsEzV k/h/hdaO//nEmrGIPsQmy5d3XEjTbWkiXgM682ilMen7aAwKS8vGR/QueQFk2Rtl AlXC3d5SqNrEAVK5tGo2hQReuGyXaXioZv5C2JOeWbnWaFHkK/RhpHizoycDIeuN f1Faz+i/b0zMJQ046L9nv6LfzOCMO/yzjIOw14v3YN23WN6n9Q0vfU5LdzdHMG1j 8Mne8u+vlQH6p9jS0Eph225XsixEshs6YX573LfenoNfSRGZHcPD6HJ10GmQOzfV IYZoh0YPmPS6n/gVu5gl0ujCjjZPxO8x64RLSvHvB2MPSQ/kPl8XgQi1yPF1DSo1 y0JiI3+93luXJwaHYqZEt92wyrT2pmA4jlry7K/rM9wpz1KQirEByCqI66Kg0V47 6kLt6BPVKzOmC4WFLXV9wZ9/qvVV26MbzO4fqPgX+Hh40SI75qAXNxNjZGfItLCC Cix0ac4Ce9IxAz6fWVcVA+dtJbHGFj00kaUb5ogFYEyP9FpjSFeI7us5HcH48gvd j+F3zn3SI8pgOc40wsGNBBMBCgA7FiEEy82PAwWIZT7t1+Jlm33UM/JUkEoFAllv iMcCGwEFCQlmAYAICwkIBw0MCwoFFQoJCAsCHgECF4AACgkQm33UM/JUkEqWgA/g jI3WCLlU9DB8XMnNGuhoYWdM9DxT2mr0kbZrEMXs/1BNfmWXP8c6YxkzlJK+cKDv hHdESqwOOhr+EPFGX/zrin+vIJbE90fBTmoxksUqZrrmDTbBe+BeGEHux9z3BhRf fRfG+aEPLVVplu0QokROGo4SGonnpfVFFTMkTWZw0filACoJhuZBGaZGdTgsWPOT stqL+B8Nuoq3b7BLaVnSklq7xSwB9YC6hv89fLBbYlhuPYMc03Mp/HGPT2VaN0Lg 0GTELuNrWC0u0w9cR3lLTKYJNwB9QjFNvZ3NwzeOsk62J0a9dOYFY19orHEgEOAU v89CbSURPKVtb7IqdmgWLobqHACq/vMi4XYbPv0V4L8Gw6q/dTsNhXkSnNj5OZZ3 Ot8Bl8bdQQOOaudBw2tq8GLbNyQQw1jorr/EOQCpJaW9vhztslwH4tJAGd/zCi7u wjREqikCXcWolVs4N1OtNeC0o4kdE1uOrelTks9AGGIIksVymERzebJ7KTeaY/a5 1sfn6RSsjQgJ/P7WA9RbElbjbaH7+MWocTB/RiyznGY/7LrE73GPbZwjMBZhSUje c941hDzC15nT8XSZmWKo+Ufm+R93eMt1SlMw5kOi/D2MU0j2F53VAeU5j5OJtgyO Hw9NNtG138ukbVNngWveSNQIsJK+WXDLJmbdec0rSnVzdHVzIFdpbnRlciA8dGV5 dGhvb25AYXZpb3IudWJlcnNwYWNlLmRlPsLBcgQwAQoAIBYhBMvNjwMFiGU+7dfi ZZt91DPyVJBKBQJiDRNYAh0gAAoJEJt91DPyVJBKTi8P31dRj1Y8p63YCZpJXqEv SfIYomhGGV/ysnqwUypKF/iU83FDJflsHcy/aaXpjxUS6UFDmRedeHTShu4zW3Zm fMkaZSwOtW3QBCvkoU+Xu36BTbRMkLOQfbMIplnFBL6AK+NSXUmue4gK+KZoMHPQ HmJSvAiUtZ/CKtl9Pn2eWOBf3qDzw0XMT+f6SSyrOBrSpGWLGxuQ9/7/6mcjmfeJ gHoaEWqH1waHuuDzDzbtCmIgfm0L3qi+4Cmy4x+MfiWuc6CBFFXY2l5bWVquWztD R3mS7MdXU+XfVnnPF6a4SuyG33NCAoxR1P38duREYo1iQBdRW0XU9l8MT/nF0VGa YfihCZbJRQayqigJY0UEJyt2/2CO7xh8Z5TW7t4LR893USAuQGvADAMttN/lnxFJ rnRA+EZCxc5Rn7Fq22sdHJw54lIE2RntDZHvLUUE9nra27W89msBWBRA87HiRWyX 3dUt4VfxTV10acQDYjg6Y/hfpBM/yRvT1It3iDMXZdU2pgiCXSaO4U+srWTlp2Ch aJE78es6o2hogc9Dzj7gfZP+77XHGRfAEkC8nvdyttT+xMK24OMyR/egpDiY2q2a QQj1I7uFvJGrJ3FDY+7G8fHkxEz9RRE5N2gvQyJy7Z7DlNoc2v+zHNieTvmpHKCr AZznAv4XDo6wGN5yFn7CwY0EEwEKADsWIQTLzY8DBYhlPu3X4mWbfdQz8lSQSgUC WW+JjAIbAQUJCWYBgAgLCQgHDQwLCgUVCgkICwIeAQIXgAAKCRCbfdQz8lSQSgEs D99r02O3ryn+KGDaXBD5AkMM9ZJcfz/6rRKIg/+WlolqbGQX4khdAWxhLOxqzcBU RbXW62x9NsE7a6QUfhKxAHHKxDzybCTuQtyMB4KeVEjqaZa6kesxIE7h51lT9aIw I8eU+iCsQzct8AwZ4iNsxJLf/GNwMMpw8A/lKyUUs4LLtHLNjonXfsYOoZ3G41Fm 8CfjWg1WoPO6yyGqcSAaSlQJeHlAhO/GVm+ZCMqohbAFDgbRaOjJUDkZ0MY4mIpw ZuLhBN8hYjPB9q1usWZ5deg8QfdIzelqNij7P19qCwMKPkN/dub1g6I4buNHPV7H AdAG5eTVxoV/6ov8IJYHIRKCLFo8NcmrpSpTNEzgbyBjHQx9971GGkSxVK4Blei6 VBFBdxoYaBYSF8Mr/BiVcOVxS51935+UYQkqvB8L1plawoDmnXy6Ooaw9xRXlsq/ /8nM4FcPvSo7U65M3BddR7BubpU1e5qxdiG/2TYFyPBwE2+PheNLT38TfWRdKH5w rgZuYiDvDntOMmQ9RvlAq+R68VDmwiuLy8Uwl1SX6xLyRDaHFx6iXAwEpMcgnAnS TeifnEYCdVvEABNGYnd1g4w7erK5EGkvShgbOatv+UgG+5Rbr89NuT/FUY6Eg/Ld WkmOoIwJWEzBwexLCSXEqgTrunkoLDzcwZrg8ZyZzRN0ZXl0aG9vbkB1YmVyLnNw YWNlwsFyBDABCgAgFiEEy82PAwWIZT7t1+Jlm33UM/JUkEoFAmINFCwCHQAACgkQ m33UM/JUkEro6g/gjQZEgj3rfndc6NWAXn5Gwd56Vm4t9HE7o9u+umSLK2omNh8P BbJTB7MsnANgrCIAESFQQLFyyCtpYpfsjPpEs9Q0irERT7rmVygX4h0eI2/M7Pi/ weIE7HYFhpvLvBy1zm5jP8XT2BwMj08HkvThsls3vbHQk+HgLLmkasByGbpF2Bul qSvk3Q5QIguMYApjMLZ62yw5lVy0FTnZPREnztB8c25Eo/h1oJt/MsohQ44hJkyf TWtvOO4ejtNaiM5WOE91bvh4Xq8NdLobpJrVfIf4eC+lFcpqMT99QTVDeFB0/ZAM PwT594lg+JIBfwu5n8IfJuOOTNhPWdUhm7bGmQtliTDW/Gw05o5RERvvlcogKzSo siFY5h2Ly3Wgs3+ffdMwAHnYEVvoPlD0AG7ZFsvo4LeGWnzh3OeBXSnOAevWsL1g dpBmdxf8PmdBlz6vLBgt617eSXeED4PDEH6hCrZtGpITJHi5OztVV6vtCU8+SkXU 6kViGQ6mAiS4z6BiOIFnkPbVWL2UirqdeSU67r5cdZk99U3NBlJrsHv1ygDHBwef LFZezaNZJXALILS/tR/WzkF3ZbY3HHa8l7hUdLoXMS9NHJOT/gtGnOLIDhj9Cefq 9p6FskRYveuAeq8S6lJmdBtFQzX90eLRQ93DdRtNAV+zAJ3mw/8Ol8LBjQQTAQoA OxYhBMvNjwMFiGU+7dfiZZt91DPyVJBKBQJiDRPsAhsBBQkJZgGACAsJCAcNDAsK BRUKCQgLAh4BAheAAAoJEJt91DPyVJBKdmkP3jSDBTisP3hHeNGmxL33Iyvjzhbd T+qi/3Y/5y4VvrcZ6GViWQTZXSJrdSgNk7+UK+ieFH8NHq0xsnCLwi6YaePrywyo ltZFbIZzaF1+2K0xm2UJcJl8evQCYIh2iJgE3o/kRKep9MvODwXLTuhSTQj4kars tOf/TMbY3g28Ml3DCHAPVihH6+mb/2lZkN4ZfHZpxHYWo44MdOtieHnreYNhifwt ZCukjSOpudSImI/jrwT5mcVtUXngBQUNyO0dz84jWTD/hUCTpB991SgDibHHUOnJ FjTTkczYMJtGVZy+a1YGxqFfim0WRc/mjCgER613eOFnOR3ualQuE1Pg9dAoVPAe eJ899gd37J2skvEztp4m++60hlYv9Kn43ALAc5FqCKGrCRZWYp6Kuthjsf68v1or P25q2uCTrbR+vWh4VTTvEAkaR0UCDVzhVXDuU/rUlMu3CKX4pQFJ6V9IzWX4uiAN MsfLK/ZX0WSn6vO3wuZKyV6le394IlToXRBfB1ifZ73pPSIbFYclCcsrQpdko4Or FqN2EM/h1uEdmwSdNIDbAMyLIDpalGpJNK/jMsAuv9Pkj2jkq8y3/I5m+oy5mlGF /k3G0w3/nkPMp9jUU8Y9McXgdAjOWpc0Q2irUIEBX8VgmBaky297hrs5BpI0mIQu wocIA3yDQ/POwE0EWW+JnwEIALljGLPt+4QNsRcqLgzAVXsgTpDeYQmtdZh3otmM vMU76/cM+Ez9iBA50jvD7x5imuwVpQ+1gAsXLhtH/lQUaP0zTRGTe2CVXd0LTlCI cbNpEaAbVbTgfmFxC4bUOJNcyuABfOVklTBceRplK0iWRs1zXf/K8Qrz/Ujv7W5p w+WckeFKH30Pg8wlMt/yLZZTHTsxUhGh4gP35oXvfmFxb2si7obPUfSywmSzVk/U 8WVhx7IMJPMb9iJnPCIB/AecM+mUC8rIyhjHQsZB22/5akyiGFpJ10ve92MOKrzU fessmj4YK1rjY1wDSsMFf9bPt4sNZ8o96ajZWma+zMn9lhcAEQEAAcLC9gQYAQoA eAWCaH4jlwWJEPAfNwkQm33UM/JUkEpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnw2NNWQrZUBaUYYLV8LDmEeEG76wn6pJcMlxZVZw5Y7oC GwIWIQTLzY8DBYhlPu3X4mWbfdQz8lSQSgE2wHQgBBkBCgAdFiEEJWpOVeSnLZet JGjniNx+MzhfeR0FAllviZ8ACgkQiNx+MzhfeR3XZgf/ViFPa4G4HdY7X9GrinjD /GYvQnHeQl/NsY4lIEzR5/8GptxbeMTF0kjGGX6snU+oCshPSUibcd09eBIWZ+B1 KJcUosvxvvEIuegA+t8Yb61QWzj+GDzc8az/+atr8fM4a6Y6Y3KQojCCy2+ouZ9D LZRHLNHpZx5uwBN6/zzr+CuNCkLIY5XWZYIKPaoscRCuXqxEYCkO9zZFvvHSZatt s8sBZJkpgVlT7GdGwpqw55phJGZi/qSFXi3U52BCli5t/r4jJ2KfpO/lnCkfupSQ 5nIJA8+TlsOksz0DY3Mlti9PtLV9YbgNkOO2eSOcl3mmrgJXy2jh+0qOGG28WpkE AJSnD+CKo2jppMFmS0YmIT6UVVsoYvWnUmDJ5SCSnJR/GMBwSfKD/SfWxQAPLWzn 5onVRlyFCpBEaEqj3xb6d8Dr/3K0EZ6kdF89SW4spO/a3VDlfAJQ5oYNtlg+FW+k hUb6q4sEYp1tNUGfWwqDCjuSugqLfgpqZaO1nq55bMl3nEL3BndDp97GrSZx6I/P Cfzmwsuny/61tjCAY+NQBGAtc8zgiEM1xoIDJgBF27DDFRPpR9pwQLjlKro0AVhW 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 =N5EW -----END PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: D2F2 C5D4 5BE9 FDE6 A4EE 0AAF 3185 5247 6038 31FD Comment: Justus Winter (Code Signing Key) "] sign_commit = true sign_tag = true sign_archive = true add_user = true retire_user = true audit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: F717 3B3C 7C68 5CD9 ECC4 191B 74E4 45BA 0E15 C957 Comment: Neal H. Walfield (Code Signing Key) Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield xsEhBFUjmukBDqCpmVI7Ve+2xTFSTG+mXMFHml63/Yai2nqxBk9gBfQfRFIjMt74 whGG3LA1ccH2vtsUMbm+F9d+hmzfiErloOVeamfSTCXVPHl4vuVRGXoH5tL09bbm LE7cidDj49GelOxbfqHKVw3+Fd2zLlQdiaWYJ7CdRDZOT22zEx+6n59/gO5WNnym aib+nXWAbXJ+pU7fzHU4PlhDXT/FfV2mzyQg6AiToColG5/CfOBp+WP6pAU4eNIx IlKYxzLnyAPUy+nuqojTJ+Ni16Jve/hpKM7G1TGAzjzdC5zSVMELi/5kdldCD9Hg 7sqw6RPlxbH52bryenYfLyfIaInHCHKmqWRAu3fxMcZ65qo8khYrzZngYewVAafR i/GSZmKxzntmP0GYziceGsbF8dEFF1scfebGKuDqtBhQ0MMuxTbTLg1+KKN8rhqW Teikrt0JPbD1viaVX7Z7G12fZ8lBU4sjd3HGO5EK+3Cs8bjLXbzb8UIz7u28u7Dq VQB4jhgh+IXyZzaeELV9KPr5IVNjT9K9gX6JJlVSi5BnxUVY0pEhtKiiLO6PCC2N PenWkWpp3UEZ5ILnLhlmPe7ICiBCK1IQtNHEAfDalKO1t/gWKi0JlOqv2j9ER68A EQEAAc0jTmVhbCBILiBXYWxmaWVsZCA8bmVhbEBnMTBjb2RlLmNvbT7CwUoEMAEK ACAWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCWc01BwIdIAAKCRCqyzJDYwBS2R08 DqCVcQ7mbbsFgEX/0SpcrWIYznMFqrRwIYuYysJxmhUYTHqV1FJiECjVBPOLabov /DSHlCHi2GrpImI4ReKgLDdYAMlAL5zca21lDHGwtghYAXkWMqyQa2SIL5+6+cNB A1tlEPcVAknLqg7At92VHOQMBKaQLR46Dt0BowhnrKbPC/ICnquO7g5nhXMfwN0+ tA+3QDp6nbAjEXDF94zKgG1PXgHTgB3F3oMUipJo5xMfzXJZ0EgsDJiXRjRAu7Lp 44nv6eKJdUw1mVKmo+BfbChC99LuqSNQornEinXUVv/ecjIuWqK10w18BLFFZCnX S+WsPFWSQ4Bl0LIfA+g/TACBsq8gBybkxm0GE/YQw1oSP9VLPEQUaJspeIp1jIW6 wEOLIbPB3KWj/RGvZddDhXz5y1rSOUhg3ObAcC9ytWmpAHr4Q/4onOThL3e7VFNi SK7rEX19TD2dGLMfOiD+lsDrbcmYQL+1bzpQPjO1WlzA8/rBMe/EDjWTV9p7xiC2 Y/BIbph6WgaFX+9VioJ5CIbFssOfkl9VOOStdhsG55+cbv+1xkJ5kUEKm9sjpDO/ GUK9+kI6Yge2I9W3+DeT1PAzwyu0Cj2ePRYEJkp703KXggNfiIjCwWUEEwEKACQF AlUjpZACGwMFCRLMAwAICwkIBw0MCwoFFQoJCAsCHgECF4AAIQkQqssyQ2MAUtkW IQSPF3dxGKM92pukjmKqyzJDYwBS2RZGDpsEbOO6HrU2F5SK4Kc03ndtXi0jpCci Z+nDjfm6TOEBDbYx5YUOsYwnfXt7aWSSNikRTyEZHWA3BExE2J7ddNG8OGIhAnAH +USj4cTmEwlwTdAMyXSVL1Hp82Vsr9CcdJNU6jAxi0QDJk9d8EvDksbQUy8fuDbs dgKb16QjL2nsEZ2Gd7fKluK3I8pTU81cbEA7s/4d3sQzGCLomHQ+75436gypcglN q84TWtpeMAUYku7pl8Do1oj8lryQBqnjKJTRXic3gtN4f7YoRkrCIcRXbeCCdc2k bQbcp8CEjI/NPNTezyXn8Sk6RsJitf+L5Op3yPmcagay2ycjRdfMdPA6V4VC+e8H MAFzSWigdBPrCP6e/7Wo94sMy4lrQtjxHaY7uAqk025KrXMti9KvK5yL0xzww1yh WAHEB6Oso2DS3/FRBAKhn+n7gp8HwjyDAieXP1leL1RToO2a0jJ+MNfWOmWRnGbr U5op9nLaseW4PopTO9G4m+gSJxuTgxiP7Ovo/eD8dicaoEtgvLEi0mSGpZUgdZXd pB8Eo/wiD6wFD1NkMRWYRSlS0b3ataC91z0DmPpoEZ+5F36ZzPgLmvxqN/FCFwb0 bMmDyHo5pAH+niuAi1rNIU5lYWwgSC4gV2FsZmllbGQgPG5lYWxAZ251cGcub3Jn PsLBZQQTAQoAOwIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgBYhBI8Xd3EYoz3am6SO YqrLMkNjAFLZBQJoPu+wBQkU/IguAAoJEKrLMkNjAFLZwg0On0fD2wlUllFPdsRf auqi2e23/JdQIQ0VQNA/r92xXEbfpxO9D03FqzQI0wLgCSJs0yxOC8rmOdCcMnLd 6iwAFb/YJLpDi9BLEfsAJ+0g2oQMMbuSrUPqm7kXEEVhiffLlEl/1PEE5jSGFa1D KTciFL7admDuUjdwXJ5Kat9thQXhO8HZ3SoBoLqodCFT2sC7pmRJj7TOGSOIDtY5 lvd7ESece7eQxp1ow3HiUaLjHGBWYLdpTNzQ8Y7Kw5kY0APeSwgDO85z8ZzceQWS 33Mxb8Um4UZ+0vlIlnPR48D4H5HYuGjUj2qOWo3uyvyBTisfT+TYSrtIb+kalKfr vpXyiRSq8lQorTWc1ikWQvX3rh+mqACbL8l8BCK1Id3CzkE0mAEKiQFPUXU8GkJu 9JjiwUyjqhhOd1yqfvNc5rOx+qe3r+wdYP8FLVny2HtoSRFnSxgs1entWp3FI196 p84tidugy5KkZ6HosH5dickEV1labKKoIwtX/IpFPdR4pUBlzVYH0OojWYCNAXBt d8pFpe0NTkaN1GMSBZhp/Iwo0vPFOaQT/QyU7sNaimZz9OwPb2dvEQ6Llo+RVY5t TUtGZUIEFW7V2yjVLHzhuns4vjERhmHzCcLBZQQTAQoAOwIbAwgLCQgHDQwLCgUV CgkICwIeAQIXgBYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJmzCnUBQkTDIO7AAoJ EKrLMkNjAFLZErAOn0fLiphDTNzyRbZeSRL96PjRNU/RfnpWRF4OucqUY5SfwVg1 MaEUi3N079l33YGQjo1X/ylgc55DRQcw1o+sQEEfjn9vjqV6fjm2xY8rNUMd4/Cg WfLik7tOwF/Mb4tdNubFeEAPIMz8UKhBedq0oHqW/EhaAhoST82PGRl+TDqcbMQ7 ZwhEHjok5tbY5bOZYpHOkaj/HuJg9ZzZS7YJgPksjFctm9aHN5406M+N9Cxz5MP0 Ci/uQmam2je+/nIH9Q3ASmtNKEKxsPzm3FdDUt4Ogmuvf/42kExJFtQSmPDFCUEt M4IW3ShzUOfkIeS/hamWcNm7AT7VgOnccp/HkddROX5Fz10vc5gqzbW18pU99BF1 2URLm/O7RCqMfKgp66BCuTpj8Y+fJ9bkIBp/zHdzpV5FytAtpTiygODcVUdUH8SS 3ip3fM2ozbNXf0V/KdXvtrh1Ug1Rp5fwEYMan705XZetOO8HmcST3hQL/xivWBHa 4zdS6tMy+wzxgynmBP/ievURbwHCHduEWm3DDuInuRa8sL5gg6+lHxh7FahJsd4V unl7N96w25Jv/u46Dpkiar8mTnwszuzfY5cL519ttjpPF7Yw55fFOqdauS6e18c/ EcLBZQQTAQoAOwIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgBYhBI8Xd3EYoz3am6SO YqrLMkNjAFLZBQJl3aSvBQkRp1e1AAoJEKrLMkNjAFLZMocOmgPUi5hvcTR/7a/F 2vXpiJAPW20qWBMJHmEJTgSaFL2wPlAY/1LbrwyLyWsY2MjmOnOjVR00cvLHz8bV 9kncRUqLp+ERqO+GVe5pPT0jAaNI7F4zcmKyh9lEAy+kqOtEZAcVnmJDjqVYyfmw 53m8lGCcbFgEYHVwtJR+/xDq6KTZjRAuzPuKzF5Ztl/9n7I8513UV0XO/EPekMw4 CNew4IE0n08nQVAiGknag4CHQMzSosXpetrzk3LhRjZiOgsmEU3aLe6dOFY/Bips U1iq+/gF8Dv2UQliR85+SN4Y0M9G8V1qpO3yWvfDwdSYHhK0uMpO6JfKvVWi/fju ZOjuVOrrhdBfscPxSGJrWpfRwgFGNrvSANYh53AsLr9Q+KlpTqpiy1xYN+Qsy/6q JfyPnEfAJOCMXTJBZzOR90qi4CsSGhyTNRBXUqrRSlgYxT+SSRprsyCjWS8qvNd/ JzsfIYVoX67EEUZ2rEv25/pgxOvgFpIzNaxDlnxOxZkq9rSS/rhh2+awMXLo49AJ TyaOOspwKf5MZJ5IgcV6MTFpSlWY8aj9L0n72PprL5fCmRao9lEVOJiJDKXGv+H+ MMvj2Y9VEH15LiUSVZc98oEkPgm4YqxJssLBZQQTAQoAOwIbAwgLCQgHDQwLCgUV CgkICwIeAQIXgBYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJkJqswBQkQ5EO1AAoJ EKrLMkNjAFLZaOgOoJzDpLGAckDlQGnwBwx9532kVg+L6quv8PQx3y7Bgo6w2B17 3qxyJed3efVAJxGf8qgEqArGyMJU36aw84vYTat4u41KWNw+0eI8QYoJchd/KqqQ w0sg2AvnuRbK1Wdhe6BB2Cn76eFO4krMu4EiIV9MltgxnyCuGnEDd7s8R6382N94 safhysAVfDXs38HYdo4A+FzDBWn5FLqenEuJtWcNBVWgZHyAU8zjaOeGPUfnHun8 gNpSMNoqcGSoAIf670i3wO6n51HJfGR3ifaGeIaEkLMn4DyYjxz2pAoroe1QB98K AOoMuRbd1yJJKpUlfiTeH9BRLwQ7EqsmZgiQlyHZxfkukZHKLzd1qnng/AiScck0 LyuyKqTw6BiRs8GmsBpSNHvuvRGUqYs/ORVb/BgM4O7GzcTwjszvzxcTgJI9SaIf YtwLxDUQrqKDRgcHRmSdG6I3uLyJRQmUV3BO8iXw4o+UmtPbr7cvNuQFVlGfc+TF 8M8h1QnuErKuV7kAtl0zMFagWKLDFUZP5vJmQkIuPozv72zXIhV+K9cP3LYcEzVp mbx66PGAgbsbv5OeU9gJfbJyWB6DGZ90aHLBwCHJhrxZSBVIRdquaiQplpMkRvR+ icLBZQQTAQoAOwIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgBYhBI8Xd3EYoz3am6SO YqrLMkNjAFLZBQJjN4MHBQkPDROeAAoJEKrLMkNjAFLZvz8OnjpkQjNx0gzlYtqT IBOUQWJNCZpsALYGol/Wpx33mb4i77mjtCoOJ7BNhxBFUxxJnSCzER0BLYzV7a7N yeZJ2mNnQGtr1o7W3l9UrqlRsmbabLnA2TnGROurkrVXgCvKKqIelHdGRMHO6Aoy iSE6/Cn6NGf59FbqyEoaX1A+y9e2qlz912bFjMrdIZCjLPd46d+kGZcZ4nJ3YxfR YW+AdoQ7ZfBepgs0BpxGtIhYDXWwclZxscKhODYzT/D6qVdwZlA5tyA9ZJw6FC8u VHupNZD32wpQW2l7bf8YsWatANI1N6wDOb7WvRMoX00psTGLTub87lJGF8FOjxM4 fCEO6kf4Ykj2eJf5Rnc9bpd9xsvlXhjzqxjK36FiU8JxqKR1oCb/WSe8WQQ074XQ 3H1lA0LWNLyghyWE4H9Jwv5yw/EFhFDkcBiZbXrFRohLZwf/vcIKqbxtyA46POA3 olcBUUPrDpfcBqJUaBNP/jrsJzYCTgdi/EpLNTwe/4ab7C1SZLcWm6WQ1IK2stL1 6TFpOJqGjcH/iEAqRTYbYa6bkchW+jh95TqxySuwcOLPvCRTO7Cn9BMRgiP1A9jU Tz4ICn/uFOTBniIZ0fdrryf9vyLKaQbN28LBZQQTAQoAOwIbAwgLCQgHDQwLCgUV CgkICwIeAQIXgBYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJiRkCQBQkOG9EnAAoJ EKrLMkNjAFLZp48On2IBKfNa8enyuLzxkxa+1cFFtxX3h0Viji2YF0piuSyTWLWK vtP1vfAlrXSDEYW35KVKZSiZaj1Rb7FfZXSwoL5Lhlxn49IQzBYoID3lpmgEXifd 4n0ExzOYJibJhAUKVtyO5oV6ffb++8ilu8VBXLQ1RMAraoEFboXXz27lXQi4zaAE vCOo1zNGrcRqkzS3wzl5f0BScNBq39wZDqm+6DkUHQB/FkIRQQCs95ai9qL3JsGP /5On2c8aJKf2HLeTT1Yo1GYcjiYwQDn8B591mh7SKQgVLRIed3F6Iyz+/Viv+8rX 9zW01KEDhhVMyIv6omefRN6XN9CN/rK5KRg9ZzXzV9wp/0Jeb2RxE6J67BY93AV1 D5PjbeT3wbWTYOaBqxn2yKofQhjS5pWwwKngGhvwrli1f8Db+R0yuloV+PsEWWAW oCmBsIykKAk4jHY5v/3OmIvtdOh08dhGm5VcbZ7s+J0d0t+iG0n2rTgOsTDVlTWv h/wr72hqOcZjhkHTc0At2KvFCRjlfSlD7ZhDhm3CQSFvyIVN/jqmQkA0x7gHlW1q EA9MyzYV9X4mqtQ5B1iKQB25IQorvMUli6FVVSh7rwUs6OlSMOnxDrFUu76XNaPC 58LBZQQTAQoAOwIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgBYhBI8Xd3EYoz3am6SO YqrLMkNjAFLZBQJhVk+2BQkNK+BNAAoJEKrLMkNjAFLZc1gOn0apoz0XikdVwpsL 3+qRJRJi14x7MHctS/p7ZyUviYmX7NkeQEicRKuE5K+xu0yMmpmsICvZrnmIi1cB 7EP6pGDZgYo1iqYaIyAmv0yvunm4ghhUS6atwJN+cfAKrUXh+ogZkaV4j5vuvlDt Gifawo2HL0dnidcR5C5PParIr3A7r5m0gI+8bUc1+wlXxOP1Iyv3hYo11qPq/Qu2 okN7hLhDmBhmXuZnwqJ8ymUY/bn7uk34PhAgbHlpBcls3LB0zSvNpPXmPSPf7Kl0 088ldRSiMmTAM6ZuEc/osB6gP4Ejj/cYA1ej7i3K/0zSGIRLZ+l9LstSLnH1Nd6m w+gAzMFoObdGBkUoKGGvArzYT8O8mgSmeg+fXd4KuV0Vyw1zD66IfoEfihMvEwDe DhchrWc9ZkS/10Se1uJ8mmKT+sm7j6KK3DgWfZnr8/CwThARfGtQn6bGcglf1Y0r X2wMG4NF76hoLJknaQ1JE5aYyS/PPeBXNQAX+wTt6wJuyDyx3APUbCNQu6V4eKH0 SgX/lgIHxyqqK6xqH/F/Wbdf/gTfD879kxEWSbg5NZk8Pk/aw9CgBI/XQg35EcL0 RD4ZIfqSAGAftFvSHqrXVOmwdDYVsMfTV8LBZQQTAQoAOwIbAwgLCQgHDQwLCgUV CgkICwIeAQIXgBYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJgZQ1FBQkMOp2dAAoJ EKrLMkNjAFLZHLcOoIlk/Q48vLf2P1aV4eAHLSbXwbQb9YUAw16ZkmH0MtKoBNTe +Ka/xv6joxKHL8jgjsUWBsCtVk04HzucJzCdQHHVfuFSFrqQV+AZv5lUeuoGVP7q c+drwgS54pjHKl9qRXknlumODA5K9zq2a12QLedCXU3UrGq7gOBEukaQeJvJVWKa JRFl1Se02mx2goFTkUmyTdVMMukI6OP1woPA5NZgApiIwD5LvGbx6GgiwXoN2K3F VgmNKWgDDdLYQyDhKmVakzLasdwLSBCwXvH5Ynss9iShaAQHvnpy4pjobzV+hL69 ecBUDjc6jBHRrx2IOwFGiaP6aD4FDREtz47Yx+XAxxom+1kOkXhb83RSaHc9Wv5b F1TSwmZ/bX/AMBxc2LHvSDKl1cTuDdPHnKnCM389rQLsU67edDiRgITILpOia9IV 2JROLKv52fW4Ee3oLAxHMDDVFsAQLCPnM6hp0Iyz7AewZMOPyKXVcAj8tkBjumT9 HA/EWwNPFc175C5QeiSvOV7PJk6Z2b3+dGzGM8PMv0vFDnc/naXk70Hf87sXLFXk IlgIGO2tltqL8oY+EOClC8eBi6+NdawBzUVfC5VIxYSxUOQDLtolS11K7aRpkBkH DMLBZQQTAQoAOwIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgBYhBI8Xd3EYoz3am6SO YqrLMkNjAFLZBQJcsIjNBQkLT1TRAAoJEKrLMkNjAFLZYqsOn1VikcHnN61UQhS/ /27thmZwxReWKHzI2upRrwitWp85/mKxV8c2B6iBoWKgPi6KQibtjEqFQr0Vw+Yt 7v/rJBm6gnOPAzWNxNAOoiTdVm2mLK+95raAGi7oGEt7tpwWnAGOzBJQzR5b+j2r CWxfDmmr8Yi7lBtkqXKwM4XGAOQJ6x/JgNozs2nZ/aTXmsZH550RnMA6KRZmHVPo lKet9VMljnVHLIGmj7ynYe5I+gY7SvAJQ0ezd7696v3PQZy2QuODjCBGxPf7Wi2a xYr0D7b0GabUatQYIa1mnbchVKx62suEk+Svc97VxXryZiLPMk2Zua/QJ4iVuBRO J50CQO82bfzgw0cdKuEl9ZaL8hsw4C1i283euoIVLqiZB1sjPZuy2PzbRDuueUts BmTIRbc4CL3/9Lnn1lbUj7m7L3bBJ6y54giRKLA+VVgEFXmBBywgpbCewn3B+DG6 oR23OSv9PHznGhzvXhvZbSRhA8WbNlf4atRlrEicryq0U3InJKNi0mVQwgUL3ra/ Lc1Pvml/gE8nkdMfbD3pRy3HVxkEqb89hFy0WS9PUoWIfEzFHFIW1fbty62wBBsI KxE/mUhWAYKmtrz5MLvT4EDTWbzqad+3LMLBZQQTAQoAOwIbAwgLCQgHDQwLCgUV CgkICwIeAQIXgBYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJZzTZ7BQkHhUwSAAoJ EKrLMkNjAFLZty0On3ABjKfIvxqMZLE0XKo8ybBl1AqJI6/jxtx+NWeKuLQsak/u BvssYe4twK6odXpDszxb2adRO+s+RzX6YUfh+yl4MSqKyP/4XbmfVI3He8MRU7yB Ah3LJt7j9GsENC3htnpKPfK1ci6lGPSkVeWKGFZ0Kv3eYaBvnGazLZUXwZ0QL1hH FgNPgI6DaaZHytPWhtgcuIgYwFAFfVhr0m1UgVfMlePoBvSLuDFyrpjVS3G6SKp3 d16NdfP49nnP9aef96xJSgmedMfi/5lduL+8d0/yXAb+Xyo7v0s6e+v6ggNl25ac vhckkZV6iAyVmzuKx5sG24D/g93kIPx9HkEXehu5SYWpJLtz8wXRY4q05bC9jRQb JrbKheELm6XPwHiGSwG1wQTwvn9f+N0RwogZRsbyB3J1UVbO015/T3mnJxoapk8w +zsS+OyxkMr44cJ61frShruojiWbMi/qUp4VQNVjgMS7ysBLvtMM/6I4VCsz0e7G DJuvJATopxEVg8VleY8fRZeOGGArWvM08jns6RyavY9NhrYutf43XhvtZRg+EnE8 Cqw8giVKE4yKjH84w98Z/e0mz9+V4pZrvKa7ELv8Uxqx8H36U3dNQVtdpPTJ04y+ oMLBZQQTAQoAJAUCVSOlbwIbAwUJEswDAAgLCQgHDQwLCgUVCgkICwIeAQIXgAAh CRCqyzJDYwBS2RYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZgDoOoKdOLLX7qC39jMzB mQvigcmt9WQzhTMhbeMcn9wHdydt0HEOI1zCsCzsUPaW8Q6tSTb8Ce8sbEg7kM87 skn4fzShipd0FtFaopoXMfl9wigSk/y3rgs84bytMJTrkx+kBtCAP/OUnvAwEDU0 noCFdoqajNQrKfA+OntoKqiOXHLv4ydYosPItEiC1g+qxDuZwQ4cr8Zd+Qd6REjf VPRFmnXCX0szc4cQ+5iEAlbOkTCnE1ZLuF7F4WGOTEFZgkd6p6pXWONF9MlPo+Na AUWhPAXu9x+6H5UcKUWkun9wLKZDVBpl938MrAlmk1fwOzP2QSfZGuDQFND3V87K 77ALpXtlJMh+RVZ7oyeEfSlWzTmlGCDQ+VfO2pyas7xFY0SlnxaaIEKajSVBX9QV 190NK10ENGllrA6OxEjXjov92L5MjIgbqIZKQW/fTokikLz09boUdluCljjRtBAA 7UF1VJRU8xKnLVb7siizngPRVaUsc4hghJYm/VcUAVBBY9GJDHYvSHzMUbk6tnsc sZZJAQ6PL0KBjE7Luji+Rewg6iPckngfm+5kjozpY4/PV6pHKtQ94uz31iiNx81U nkgNk9dR/LP6o73l2ecGostEACq2CEwN3c0nTmVhbCBILiBXYWxmaWVsZCA8bmVh bEBwZXAtcHJvamVjdC5vcmc+wsFlBBMBCgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4B AheAFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmg+77AFCRT8iC4ACgkQqssyQ2MA UtnOnQ6fT+xr8vULDc1RvLw+cEeBgNbKFK/8HgBn4HBmqEMrftLHEyUwAot+Fq+o GLrcJm1nL5berVUfv6c4Br3NR3eRA8TnkSWIgRSellpCR7GL2JenisT4ZMFCxubD sRn+GFBQACFmagsY/zrw5GicvvJR4vTUNUwnPyTvc6PTVvvaUrgA5fUATiZx2VF1 4V8TwGxLPUZk0Gfv1OIl9CZjLF7LcKw5bfIhcUgF17YmN+vqkDeKQc0DtGuTXGgH +u76hSNHLN2hj/zcTCdiu0C2kjt5UwC9H5Lz1kzN0+RAoOem2FYXoi3o2XWr92mI olrDaB1sDMMCGou1K92weMrJPwrZzT4gGvp2NQiN74mKMm7VQ/rR1Kt2q9MOx3En MDUVUxxWKyNLxvjcMWhDP2h0BH6XWPNlZHyGigaGJvVVMwufvQ1ZYxJtTWssHJPv NqZxa/wf1gtvejgm1qp5tAze0xwD6IWmk58iGbXwnFDWB127PErjJcQo0ajjUBmQ vEdaTkj5vh7XlmAuO3ztLa36OmdwOKGR+GFTgl77Ku0YOyoSlyLvvKNu+aAZWLd5 rY5bpza/jLQziztGtJYpSnq00+vAcmQBz/h68TUa2HRwwAM06/8Wch0mwsFkBBMB CgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEEjxd3cRijPdqbpI5iqssyQ2MA UtkFAmbMKdQFCRMMg7sACgkQqssyQ2MAUtmNpA6VG0q6QsCl+Vs/XLcPVfuNdrw9 j2Nc4UeORdvbnQMBuNj/geXAeDgBghqxEw/vV+Fue/K/Vg1oby1AzzXrT9ikl01k eusV0H022kNeC/DJ1opxFyekElIsrvYJ5ZoXCZRPjIpAGNU1uVKlT6Gqrj2YrNU9 IAFApjEiuXmQHW6ynIsnMv4iccazm/1wLuhmsy+bqfKUrkeVlMaOtNDA/A3k+Uor 7iM/QvzXAVlN1+2nJwGDJZmltQeltSupKxr23Vhi9CrkHhE0Jl5266u4J1pMs4gU ZK3eqIESJjkhgmmFdnu5rp7lcl6elx+N12JMmvrdYgRmonxvX9cGr8PRtRBX/vFT lgIi+S7vFn/3W48NXCt6cs60aOk16OgzsXHwb6NXHMoI9Gn9R4CoxY9hdGm1cU4Q QcqLbqmfBnS9rS6sryBJ5xMYj6KLhsqaAnfH9MQyGNFFkSXkAlnX9vLgwfY8vY2X zGalyf5wnxf2mO1T1E87NIVUJqmRTbKaQ2LVOFHseMQ3Pv6v/vqX82dw0SCrzNuU eJurcxe1p+NCasO6g4mnjUpYjz+xPV0TiJPuHr9TqEE7+DeuAd5vnigfODGMCYsV Ad31QFm61AAEUlXz10NaUrHCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgEC F4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCZd2ksAUJEadXtQAKCRCqyzJDYwBS 2RiHDp9PcAdNAk8Azn1JOrghBBbfaAzTfbHBulu6bHE0N8SxtiT2MzdseYttE+c1 iDclJlE0cBf70yEPbep0GXTixcTV4rWcRiUyoooRXgFXOXJ2kp/1fRY/AoGVMsqE ZEE7S/75yQzYfUE8DfoR+yYPbLVM6fRs/7Pq8+Iwq+gAyoFgQae15/NRkgHiZ72l iUQaRveVSQNqSv8EAkt9PBmB/IVo29kTPyPpWkWM7VeGL1nEuvu4ML6ROSp/j/19 JGr6WApBl/IYos40kO5T8H7B6HbysZm0Keb3lZDEUCrUFjdzDwNM9lyK7q1Niskr CqeL0CjMxl+YcDld99qcbQ/Iba90N+1TuN761TxA2nFHQT+AbPHiRvVkz48el6UO joQBj7dWBHC0iuyVvxMBWzWPudUiwuJXmHEtsW1W4hoiAZRL01omUExd4f3leQN/ T7PX6ikE9H6+PGOoeMew3gF/GjAr0oozdsO5f79wU1iu+n+n7Z77zjidzPBv01dq SrAEE89HyEZBaxEsy+mzg1qCM7NT/CRWGZ5mzBwdrWJ6CkTAjD1Zd8BRiVfLUtvs j5yiYpE8Opw7kr1P2GfOURUGL5YZgLW0Lj/dckFnxaGQHtq9LZasplDCwWUEEwEK ADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS 2QUCZCarMQUJEORDtQAKCRCqyzJDYwBS2YZkDqCSv2CzWtn0wsrqdrFAU3jPiVeh o85rlG9tRlD6iLCAihUxNiRAm219ynKd0aThEDEbLY+ZNSSCHRkWPcG8Ejblcq3+ BtiLrZTNoTj1rCVi7lRSmsYKpKEVUjQTk3zBWUwWxpiqo8sodOq681AH//JJRJ6c p5IKS9MWDKuE0wQpk399uYdqWBshlhyhUTrpdIbLa6Bl2uyoV3An8ER1QHfbuwGo oKpA2UE5YsssDtQt/XTuKgJzZiYlESQaf4oHBtoYr4ZCcBPJ8QUbiOk6RXrTJwrD Xi5ork7e0VVlsV4slAMaviw9tsGCgv42k9xvzEOF24td9hq5JaeoWkVJLAvwwaSd sCXWt1MZBTSV02UsesxZfJsELo9QSmKnjvUM/hGqX4LW24LBVuMc0GYZE9CkJaPQ 3NEuJO5hvAavLECE7ioyTq5FoneBUHdE264R0UNl7THIYKqqBCxs9M3cNCghU+yT lNTqPglm10ls6j0qNdQEAkm0sZlykeRCbqJ7YyH0haa8ATO4HFDQ04CvsR7pV135 xo5uKLuKzO5HYZLNg/ilLfSCStVda4LH4p+010/+MvVIOvfXZuWSU61WYLoVM/5E sY3yhnVXalcsDg9Q258IDUfCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgEC F4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCYzeDBwUJDw0TngAKCRCqyzJDYwBS 2aS2Dp9UO7I8U8+iJrNOBRcT4w80scB38uJl938EGuF68jdFdvZcgTLgKctqVG9w KsKwuCDzDhW+bVUweblfnkSKRq1V+6hX2fhrAgUOZVdelB1cwEE2qy4sdILUHqGA XefDtvKrWn2UNyqw5k6TfTFgz38ZroJXL1Q3t0rfEGgQgdqzcq6mS0xpwyAuyH+x h4PnHpjlfuOMzmjyfA9hRPisawQwf6tzcO2YFF9SCvK5c0EauhRoHH/mW/AHwSMK dlH9nLV1ELvBC4bn+77bGfou3pXiEHHIIB40bY7CMtOYsHegGwJ4BSI+oj+zerWk oKKmx3Pt2pdcbhcbl/QkhELUAs90UbbWiUekVY/K6xMI2hphU/zOETIDlSYaeZAH N52B1WNA7cCL/M+kUgyTWtGrTkFaCEiEGNJPqUjJXn57Xmus9fYxSWbP+l1jQr++ qaqYJxzUYMlxdfSIs2ElDRmU0TZ7x9GlNTudZHPt2O1f7vvNvGX10KfSzPBgMKYV XCXPrOkJHpa+fFRSTXYMg2FO54ZCVi+TvR6F+oHVh3tA2Zv7a6HZ1zNEn3RbOwxC aRvNPfdj1PInuoo4+UQXeAdXQkivqzgJvbjSBscuYa04FWNH81dl0wLCwWUEEwEK ADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS 2QUCYkZAkAUJDhvRJwAKCRCqyzJDYwBS2RhSDqCQg6j1nrEbGybYr1dvWagOcwy0 p1/oKzDBiQ0vPwYpiA4d7Wfx1JD5gnS2YOYhgBNjvoNQZQAh9WzjIEYmCA77zyT9 WnaXZvDJtMvqgIqT/Lvxqoxh5pZwbmMiGnT8ZPXi5mxlCKgFCUaoEr24DpVHtv83 q6u0YE/w3HS2w4Qmtfgnc+7i5Fjj3ZZf98zaDxRzGRaavnh+G+M1Pg4z4pEP8vPz LI7+Wwmd71FIMqEVzVB8ra5uJAOwo7+g5yzGr0E9AASpI4Nkh8vb9NopLPEVofad lyM7egj1qmbgyEx6Jowcj07a31wSrToEU3R7DD2+1cwMyzNIVEEqccmRuH7lnjgz RmnceF6U3ge2kYhRyvJwPmhASVuAhore9DRNjyljK6laGayxp4YAW7TDm9G3rpGU GmTgAhcf5Nyrztuboz7Gq5Z+OORzhL2id3zQIMkV1upIleeJ7eppEr7IPU/69T6f 2GCcUKydClgghqOhip0nVrvlMUkvmO6dsDeMqL88VTycvJJW55ugO7TOvnwI7LDE UkUvKAf83fSlmpSsNJsSdOBXZrekPReweEqz3kc2FWJyLx2w7fLQbYlkMNSx2DoS ibsqjGPlvYwW8sMsJ88CRXXCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgEC F4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCYVZPtgUJDSvgTQAKCRCqyzJDYwBS 2avkDp0RxVxnyVT16JF9qe2CYaerV/tvJM427Dg/rKhmknpDlUW5zCU0sRG22RFf x3oU9x9uNb9F0qK5zQLI84d7YFTqQMLX1SkUCYiDhp0c5mF20dXrKoyOZmqpajet DfUkNCqAB1FQnraetNBtDo8subJW6GdilegjM3LaGyluvftJiZ9T3CJ1Dn5nE7h0 7GoIg6OivmdlsV3EOXFZzymmzc9rEA5IHVKQlXSAkXTdC+G9E65Rzcoj85TB2Q0l 6n9Bfr08UMQhR8itYQrQ7E2kthmP0Vt+pqahwDZfeBWFjkAJ2eXVKXhUGEFR11RS WL7TZxma6AZdLWkyRhbHA6h1rvQK+jUSI09PCsJ6RxiF67I4x1wfvqofqyRXeRBu VV42O2xWnxrGo1szJ3iwICyAbw1SLa/9YhIDezq2OkXMwyJa8Sq5IUzJXA05r7q7 qXmebveBe7kT/tLyUVgZ0wuttMglINNrEWFGwjbcGYzrykoldaRUPYUE8a9CaNR9 n1LLP36UrXRKBvbo3s+q3Dv8gGUpqVWN4lqCBRkzLaILZUhcwF49IoZ5vb8RuP/a cJbJjRFRH0/rsp3V735coYTt2+7NgoQxRg4kX9yE796G3vxd2Pu+xEnCwWUEEwEK ADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS 2QUCYGUNRQUJDDqdnQAKCRCqyzJDYwBS2fVSDp90hsk4Fx/BOJ6qMZUaV6047viP xR5PHC7YhMYodpUlKkYZ7FeEmBRT9Jufa18ZFvvKw7Loy8/YECWT5yfWG3Sb4kq8 2gcWuMnf696vLa2gRxl051xc58drmdUevFcmPMT4OAIH2hG3Xp/ZD5eLsyn1KMS7 2OQcq29DlcFWzzGSSOEnzlEdFPPBfY6GIvRTtXZZGBgEJwTI7Hro82NIwzslQcdu VYTkJO8TKpqWD3H/8jHNXFIe7u/UwZVqpC1zb1VCQ+9B8ou1+yFSMYte+E0o4PyJ Lfx17ZabeC83l/hHPjzCe4lcMAPJijPaJI+xTWAUN4/p8Y44wRoNwrBMgPeXwys0 qCO9o1lbiR1QSynZZpmR3quNfMWDSa/Dg6V6/u9mv8VVCm5da03WtsLDs9TQZ2WU zFdeDxR4hsac3KN/jbmFPVw7XKj0y69xFMIEAc438KX9X0+490onWB7fLrBn1OtR DCF7W/PkJORCCIKc1EtSErN8ADevv7lh5icmQ3/2sYrGiyhrTNjQpPdDgan6daS6 yumuMdEw/r2tW71VPaMhdyQOgEGEMh/olByB3pmODUvKP8kvNkcvQG7du0wZFTEC 4CqY5fT9EJq+vF9kP90A1NjCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgEC F4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCXLCIzQUJC09U0QAKCRCqyzJDYwBS 2Us/Dp4rVKtUORqUbcD6+yW6iwvi7al6GPr52rUohCZILVuqcTCpY8g92u7+HTMw U0VWJBV2mxPtfkkYMsaKkZTnznhCSqN9Y/1fTZdBNtmZkvx5DyGxq158KNciwM6l cAw99FrIxSHRB1SHcaz2sR2LOWQNZKGhA4wdcVZsIBL0Kjr3lr6CgAg98bF2Yg5f yI7BsHvLuFil7EGAa9+3ngqWV5gny3EllJeMOH9fcJ5Kh2uSJHU9kfkyTuYQY8Hy 7lToY+z4jmGQNsae9iD2OfeQa3qERNTxT6mxFxdlDD+1BksrQiz1FiQHmrUl882z oJe7ug3liFVvhiUjik/2cm9nHUdxB0e5ynzGCqYHgvi2G2WHSR2MDqHn5LQcEcTd 9hokqh280ejYa4LWsBQqeYpSgE9FLO5rJRX/+ETOfk68BNKlGltMakAL4L4vJhKd Fkzyniq9RwwgD0R4aUfjD8UX9sqAnZ35ibyskMmIu1aAPX+nMQXhr+kHDuGv7ga4 RPZIMaVhvibWaiL/W3CsEakJeMVxsdJrWsCBdpYm2k7ASwiKzHkn7Zl9W89tOoYW A+UluDJOhCWNfvafLodQRojqqx3boZutV+uz27JmVP5r4k3pReKLLDHCwWUEEwEK ADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS 2QUCWc02fAUJB4VMEgAKCRCqyzJDYwBS2X+GDp9Iyh19ICgmKigudHjrhhmBYzoV 1O/W4L6qIdG0TF3G8Ty//rjvHbYuIEGdYQC9lmq0BdN8xLN3RXmn6pOl+wempC98 +CyZhohtY4MTELl3vfcqYX7X3nY9hQh43Bz9d6KfzTqnZ+kKhF2OpQZqEnUSZBHz SG6tddPwjehYu5OwuwDr9ZKTs60DMZj/lHS4gL2zD2we38epEk2zMPGyNpuElHoo nWwpEKsDknREZ8+xZKI82CCQz+QK3EGZzoGSQifMF9R3hXGcV5Z56K591dpc/cWF Z1k1+0U7Kj1/UheiSbtG2tfNcD0RLvEpjEyjAHl/evYX9zQlnQXL5SbcAmbp3PpP MW54s0Z1tAYUvzt7czA668HcjFt6x6pITwLTLvHr3x8qJTguKv6PK4pKdOMa4K9x QQ7IE3W4XYlldH+LI74F67yKOQ2fkxfSCDTdApL6i7AsC7PBv7oFFhMrDoWiFDWQ wQ8W6egSW4PUcvvF4wJ0y5nATxY5fEz4Ei5q/YnwxzWju9chQoBDpw6ns4QP1zw6 4GaVZe2eDpliDhExlNysFPWFq9R+L9mdn8ePrHqr1WnuyGGhLc27QhgnhHwgCHDZ 5SusBTnHPRUsbSydTIJSHWTNJk5lYWwgSC4gV2FsZmllbGQgPG5lYWxAcGVwLmZv dW5kYXRpb24+wsFKBDABCgAgFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmbMKm4C HSAACgkQqssyQ2MAUtnVpA6ePYwta9SIyXHT7YqcU19NrbcNzcGiJBG+XF0OHNfP G8f0v0GrBIhPkyn4jwMeqyR5f8JxNX0goVQC3soIKTb3v4bRTw+4dQkfP+3zqE38 wYwR1dclyPaUEfOKTD9uEvD15c9seWyyvsMu0EdBytlXvoUNeOLOSIT24WiSq4mX BfwTHGUojbGK0KpWB+VDO/JWBbz7kBKuzV9SZvCWQJoQDYNdCK/mbiavF/UjzIrw UeZKECljZAzrxRfhSdqtmxS+yw3c3gdYCi//ROlGwK+F3BehLt/hQbK+ypLKBdUx L7y3VJMbt71n9HkkvbkS+9UW4JhmgFbrVne9DH229/rVtoWzkQxwsDQA17+jW2u/ Q3By5QqMb9QwRcKqdDNRqmLwFiTq1K0lQMl8O1dvDPYQcPQ7ZbJVsbY/lymdL1wu t/sorROFDtmvF1r17eXikzeykeItSKYyoaJOBd5+LGJWxixBWvo/bkZDi5F9naio +4V5sFcDHxPYwwb8u9b2EIcBEuwd5ijeuPKsFKtyJSErBMqGls7c3C2tHUSdheKR NpztplRvQrMKClz7Rovm96YVyuWy8SbFNl3vPD6u7zfGWArd2AATdCMSlZVIsXtP 2zqIp0tkwsFlBBMBCgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEEjxd3cRij PdqbpI5iqssyQ2MAUtkFAmg+77AFCRT8iC4ACgkQqssyQ2MAUtkcng6glbMumXd9 iyq6URE7MZGiYT/7gCcWyOefzzYyWv00Ae6prz8ePaR3I6HYZUeg0WomFYxVU8HX 8oldWg6gakF7oYm8m+AknseK8/tA8qGxUimPLvBKwLKoRHVnUXab4PR/nMBQ3lw/ DZMf7qQwYU93ZNVsNRJTHhGnFilYQ0VsaQj2s32j0s3oRNrJOC/JIpZJKlwxYvN1 0dsM1J1SKxgqrHwX6o81q+60xn9PupGE6+3rFMXkUz2ChluRji45xe4kuvD2JnKo cxdWw/Y1XMcks2KLVR1ErST5fsAnuaRJEsHjqmfA5Dc2iDyzR7bHOcr6vKcv4hFJ KXJi3DRuNdm9Y2WWRS+04v+Zk4Yj6VLIP5A5e+fIg5K3d029Rcml2BhpS1+GPbbD B05E3mIxzDhCKwxpf+Nnw9dbY1jiNOfEiOLm2UMZMYxdGg450RyMm4+RbBWBBO+K Uvm9dVWwtseHMnjYoDe8tbbJC/D6o5Sgaw4ZgTIhdvZaop0yFYTwtOKXlP3lSM3T bVdMK5m4EhQIhkxTredeX20N3nWW29pR/BeFR9IyU9r9k+ZcS30YI8SqUv1VlSBw vLUcqJ4KTNc+wjneK+Z9RuKNZ2PRCG2bqYG/n0jcwsFlBBMBCgA7AhsDCAsJCAcN DAsKBRUKCQgLAh4BAheAFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmbMKdQFCRMM g7sACgkQqssyQ2MAUtl6dg6fW1qd9tl2tbyVq3fndwx8ndcBgynyV4CLjH1KHqsB WMcnduKFg+2DxrPb2HldMnRroBi/0pQYGH99aHrfZOxtKoHglBcfdKO8MJm1g1X/ RHz1hn1C12h/9SEnhvkUzs4Eazi2hEvlAHwXnZn1iaZ5dc41AHJlNf3ufXXPXjay sB9765AphjpCIagJkqahliHCtf+kFe+hhQ0etjKrQ+isJZ8tZ6MVTrTsDsY1lRwk G9le+IeUvZle1lwUnc90+YQ4ib02y191ep9i8hvvnRROC9bTDYfNHc49aO8zuAxc 7eVAaL0/hrS+cCtoUHaQMAZZ0kAQOvvdSeWxI2APfaM0rkfJxTW1gqZbnTtEEvTm yzo4c9KfJCIU1RRAZlHmpVSYUkGbiLFYznrd3dCIxW9+7MHrytJKOnWp2LSYEbeJ yZTcc5mOD61spIb6Sf25MZNUZtngW4j5Nz5FQ4mriyipPjetllSXxfptgkvqtF3a qhfi761591ygtyDWOYLfTgfkVRhfChThUXI/Ai0non20SDkRk3MhcbyKKrS6PDBe /g0dm2IWAIIO8QKT7dHo+Y+yvNpGq7JgCc08wYttg7X4hF2gHTzgOBcRjbQx4+6/ 8wJ7OOrDwsFlBBMBCgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEEjxd3cRij PdqbpI5iqssyQ2MAUtkFAmXdpLAFCRGnV7UACgkQqssyQ2MAUtktqA6eORgm8s2d /zw02a/myc2hvBtRZVnNe6ElYYUTYMGW4DWj9dZWRHtuloA/ayMwNM+vtD4kBTuM K7iyhk1FbFt5j9rmSpNcxaGNJr2nBrQmcxsdIjUqmyJYPJ5kTmF5TlyY8ZR4KtR2 9LByNkSa8m05ArbbVcQjvYxVvj3ZN3/DCdeKVSqhqO76dEtkBev09ik6tIUGiy0d mXzN1Jpm1MF4gW+YHfcFfawAx5Cn9kKs52fpum5hgDMrzt8JZuEBRlK6dN21QN6y YrX3omxsIo72xEbD8rxUbbiCtj3GQZ4DAE56crVLuiSvM2q3IePCq+pNuH9zH+lF +8mP6RwC/sNhPv+wM4kI5rx1c8m/tT9PWLrjQ+LMWx6NoMUWLyhxlF0KIE9W1qLz 68VUGFlC28qznUeYR1ddUWHTTSibyRZM2Xt5c5e8hRW674KebQ/iZP+OQixSfRLE JeeYKYSR2PqV9srZ9JXUy5X8Sl+K35sH8KyXxuzEgJOxkZzdtWSTdlzI/wenHtoT Pap0vAzDlL5CbMAptjquv9hI8dMTL/vDhKhcWc8mwLXz0FAxFf5x788Qw7+0S7dU 6dGQfDbAJe1PLKrbe46r7jcjLvIVpjG7AgnTVou8wsFlBBMBCgA7AhsDCAsJCAcN DAsKBRUKCQgLAh4BAheAFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmQmqzAFCRDk Q7UACgkQqssyQ2MAUtkoqA6fdTSXxiMZ7Iv8u8zEvkrziH3vZXpEv2L8BY/vlMvQ KaVZKgvNg0kVdx8aY532FH4bo8VfwqsEamXr9YPN4AUiyQR1qko1mjavMx0HOTcf uPtDQkIBX9hDyecVcHfqZCkrKRDzOsYjPJ5c2gZbBNROBRq4rDaePAZ6M8i4inCX DvgN8iirf+MPVH1VSTDWVAClAbxYl3fCAvZzkdpkIjL/6xtExQmXe7Gs9jWS3mSJ bo+MccS/c8Rsu5ZDpRjYquQbeemnbGdoBoLtd5VZvxPWdLJJtzl4AOL+79aDWmJa 9tJRD+L0sGv8/7dkqzU2fZfIcYmgSdSnxuXUlPdOue5apJeTziqNSYUUOyB4aoJm HBCWyRbmmZ4nwcvYFrBOimIz9MOvzAxjTlDbrwo89wnR/BzYFtDVGJD20nzXt1zK yR81OnZUAdAr6hm4Gxdehz4Y9biTMYrXgh5WzasCB2PYnBodPazoTM6VNFIEpnAY Y83v64/C9EhhpdfVeopfCtdcZQiAiSohfAePsb1tfo7FAPGRjqhvXJUlpzmi027J w970oW4z2KzsNQ+JP6aylmR8+yhvbNWwgjq1eZRzNOnoNgD3+dPqcNupMr1jmHj0 mlVju6O2wsFlBBMBCgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEEjxd3cRij PdqbpI5iqssyQ2MAUtkFAmM3gwcFCQ8NE54ACgkQqssyQ2MAUtkJug6fRRPS65tf 2Q6ZPEhm+Qmsk5YSquPKm6xrB17hycoNeekD0K6szV5rnTrTjOPe7J8I5jmsdfql UPvkclM4yY7odWxW7js7sVZH4GlE3hPqySMpvr6DLMwmTS9vAL0kUip4HCDofYLG q2Fp0uqlfeHPTnZytINA9Y2aqbR7G7AMrLaYpPsZZ1ivQu/Ud4PEWXEaDoSiyicH UXq/DsYTkk6J7oKG2oK8wtnYcSyQlCglZbAlxHg7H+1HtDZCuSYzateZDV8iq0q+ LM5xN4Ro2fHuz5+RBRu2VXqpPlW1DyHzoGDDp9e2trpSCAN2SzkIxwfPkH9tPw+Y bJHDB7RUb+/JXkew9Y3abrIrowKvaSfO40rNBnNiEhhh+spVyrRzGjKeNfcidI7k o+JDq+F0xVHG/rM2WjoMfnDzzPoviBYZDpvtM1T8rXHliAuTiAA+KX/LAvqMHYyO GwpEH5+CoAgVjCy+J4gvHRPdtBTLaKz18IkrqxNFEM7BOrJZHlU4n/twZz1sR+Fp yeHsYv++eqebLnn89Gj0zAJL9WtfHutUTkj+lDjETFnSrQ6bsk/wvTU0ST0MY9CY R81oSa6DcQp4DocDolBxSJB5djjsues7FYVZ40O0wsFlBBMBCgA7AhsDCAsJCAcN DAsKBRUKCQgLAh4BAheAFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmJGQJAFCQ4b 0ScACgkQqssyQ2MAUtk62g6eInZSjfcHlR2SHaStzxU/wYi4qzgNIz+FcSmPp2c1 G3+iE8MQgDVMnsN3E0x6MKq07tzWpEZumoP2DSRRE0Lxt/RX5NHwjhRqljM7x5ub ebYvHh/3tYYuzwtU3hRR+3Hmtu5UL/MYwOg+k2DXs45i31s115PvXfxjDjW/Cv6i fILUDwdTt1/iiXmxMbRXnkLax5nQL2ZChns0YcoU8vHLNonU5Pu0MBoBgCM22Urg DQ5uIyGjFV89Na6KdXvZK/DVj21JTpcF1gOqnA4hnoWxB3CPFOSjsq5yZCLl6btg 7U6fwii/UAYv50ZQghD3lqLDY2NgQ1D0viD2X5zLuLp0qFW+IdeC/a8cSXpNW1Ce H+gptoY2WcuQLtoSL0/+x6tHttzJxRLEbnEWiqFqrCe7KTLdn4XgVUz1ZxAmxzjJ bXhQXDR6nTON+LBoW+UVwTxR1ppPtG3cNvge15wYZAOdyaAyAlbHC8F6cctTQIPw lflmM8+AJFrl2sEsd3ZwBR/dP7ZAhNW3y6OqI2iL914LKEJu1cC6+LXsWqheh8G0 e8H6MtFDwBBhl5qFtdzbW4KmflwK99hFhYEA4HSxSz0BEYm3O9S8mknKx9Nh8R4y UV+FLbldwsFlBBMBCgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEEjxd3cRij PdqbpI5iqssyQ2MAUtkFAmFWT7YFCQ0r4E0ACgkQqssyQ2MAUtnn+g6gpLWZ9IIJ QN+tbHAo6IlVGaRtpqtRY/4ED0+w5AdbFyyA/9eMUjGl5J7v734rW+1TKBBl/oRT 4VM4K0XcIKKypk0IaEVBfX10c/66KEnt/lt6IBGc51+pvs29oOqFMm2rtfYyt36E kBIkaSAEVVOEbLlWkpqi1eQTpq8ZT19ydkyAzn2kJy4cLQXitiIo/wzW6k22oAtZ /qwuG9WCgp+GIOZI+ZOOFydLbj/79o4i7hZGxINjLCR3+GWOl/ao6n1AAy3xlxWf w7lwZfC9NtyDsPbBH5nJ/Gy8UA9i/lWRhF0Z4GFplqeg8q0L0ktIXTGjq7EKku0j T3257tj3f/yzB/NvoDRoWD11fCVZ1Q+Isg85rU70s8UJdOXd+NfIpJwKNCqLI6wH JWmTlWLV9ijsMq1C5IZ7BljpHkO6mAvZccQJHYEA6Jq36G0muymXf0+HcAg4ktPB 7D48B5fJ+eFnCy3HHIfEGI0DafgozXJN8TuYWgEvM4tS5FPjLiFmDUzn0qn7roZF U1kRsYqX8V9TJ0MVr+yvnjTLOUjoUetxSgqkayRYN5KJ/Qz1vcGOTttO+RC/10Vs ixTCAJevNnFT0OwkWEwNuciyAl/NVxRA5VMwRLllwsFlBBMBCgA7AhsDCAsJCAcN DAsKBRUKCQgLAh4BAheAFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmBlDUUFCQw6 nZ0ACgkQqssyQ2MAUtm1fA6gnRkLxzwLQY+crxelY4ch23Tmg7M0k5qA9PduGXVI PfGCmWShO5+KzPWby81M7yscomgKQ2UeK3XFEC/xwpcvXLi6M/3yiZBn7sk6lcXG RlJqgbzTkqy9L25gyA2jE7AT/dZDdsYB3opLiu+blf1vHJZmjBGU0wCBT7Uja2b6 coDDN/bJvwn3lartt61p/EVx4N8DWnQBtPy6rN2J1mQgFJubUp92Ngs7vt4dbKxn C05pkdrVGNcWqXnbLDoR8/33CGz4VO+Dmkrq4mWT5GA8Z5LMa/S++NL1hkyWWCkb SDYw2sqc9Oi3s17iXR843w1+qoczD9hVjCGi/RT3so8EgKZIiGhPSqSn4cUSM9Jq GmU/wnX/wh2e+1Iiz/hJHy/DmG/Rva8+CM9+xidIdCPKtb6OxElZ1wFGj2YR0fa1 8IzkuvBB/H1sh04+XKPQ9E3JNmZJ01s61fqirvw8cx8q9iMglYmUOQXYZJUR9d44 xixIl54j3G75nFVN52wte5R1sAIVl7kZ8aHGbC7lB+UOcL2IDjuKS31T6xeSa03C HALeUhxKkVghyvCuK4L3jFZxuolYTe/Grb7/k6nkjFlg3+1PaYjdCkHfIFwloS+x onnR8aI4wsFlBBMBCgA7AhsDCAsJCAcNDAsKBRUKCQgLAh4BAheAFiEEjxd3cRij PdqbpI5iqssyQ2MAUtkFAlywiM0FCQtPVNEACgkQqssyQ2MAUtlazA6fXmah+zPr Uo6egmrrn5XIch6V2GXlavrJazgoiTbxiWWDdrgvoSdWVZ9iMBR1MxK6aBRaaPD4 3r4Kk2L3q/P5ZFyZXdmRZ3Ko6e+DyBz382ff5HplhgtJfgpdAKRXx/wJLyQwKMYz cxyQVqNOwMzRPZNojk/aCAWvngbMmsAi47St008NtAiXkp26oa7ZGbtF96ln3NDj SUamSIiBqNA8dfCV7OWU9rkgZoRnw/5mCDyr0uwVNDtWcx/3qvaODuEoZhnyqI+a PWPPYANeQyeLi6YFL/KircJlRXzvdekuQSuEP1pOpkOT+0av6078GmVN2LMQvGHM pjfe27Ru/q/GQZFXzbJTtWr1LLEcTF6tr82ebufDq3YcbZQwRJ0H7+7ZI/KqQ+GX NcbcZBAhWTHkqu9IVjESublbBSm+So6xKNIRETdRY73m+vSG88P8ylGEXH3RqXk6 LsPEbbTybGygxIzweqwIcoE5UAJ38uyUh5B3T+WHnQxzPj5IqkSJE58LEl9KHS6V J6WMU7wuX555VN6rvGjK4XjD/M6cD20q2eH6nSZ2c1xYORCMBul+labW0xfLOsXz j79k24GniOBdZou3D34vfq/SdXYPOnyMvzGho/HhwsFlBBMBCgA7AhsDCAsJCAcN DAsKBRUKCQgLAh4BAheAFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAlnNNnsFCQeF TBIACgkQqssyQ2MAUtn46g6eJDQNUOuAgVcJGdVNO+A4HUx0kejBrFcc3eyuLbX7 AiqultvSuRYsq1bSv7xzqYGgzTC5447szBiqK1GDGjPUl99MG5aRn3Ni5bzRj5HP 37LVwKsMHcZu3qlbhHctfnBKslpcKQubz/kSIygTeYSwN+50PfJ3S0v1a+sJzVrz +X0cGDlBQqKCI3Sb1FJCEUQh4qj1OBXEe+89dydVNQ8RizjceqMhmlvEqwBYkp2B nm//FnD7jn48hf0fQD+aOYkvF8oB+QI2/Uu0+qyYPE+v7uDuBXSjhHRscZMLPHe1 SFF3Tzh0oWLVejZybnqVA4MFwEFs3zfmbOxy7EQSApRmWaiBIDRwTo2ASx4TdCqW UIQvFo85RcYCDMgwlrVYW0YlRfa4RJey4y85OBRtd/UJ/eOjBqGJY9PViUfMGghD 75qHob4+UkocqU8koOcH0z/WqqXS7GMWKUk0bVF74/lUYSWjLGeiFLvgVkxf4eue ZlrZSxDOPA3k6fttjZbtWGNOWWoBZZlnVhhL2tLc34p/7+BNdeWl6DcEPNTDBXYX T+nc7hTVhWzqZbsIfB+lOzueofZM8yZNDIZq0Lf1RE9Gf1Lw7Hdo0TWttXhun0w1 mx19OsFOzSdOZWFsIEguIFdhbGZpZWxkIDxuZWFsQHNlcXVvaWEtcGdwLm9yZz7C wWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKq yzJDYwBS2QUCaD7vsAUJFPyILgAKCRCqyzJDYwBS2X4oDp9xT9O+VhkAZ+5YJiLz loi33XZnfMItOrMyVnn+Fntf8DmurNbq5J/U2lGY8bjEotNN25z3inpx1SMHs+A+ CrvwiIAQUv+1FpWnJDJ6vMdT7QPcsObVL4KQv18gYlu7c8vKwiXTdm+tsEsFGUPL Wm9NlTvbJ1llk3sp/3pGQp7wPWVogPxOZsL6cCt3NI8IV8iIQrmAfwuKzLPizVPq 3cWwsrnyWAPtRsif8CuEyWN+2Z00VDthqGLJz/f4Hvblg1bgnMHWlAnQ1r/f7CzT Y73Goy4EMmZmISQA/SNCMsc3j3Qp37nDT/igz3iY+5R5O0a2uRHMk140p68LfUvG kzYAqF0uGsQIXmk8ogEXXsuF8TDR+0T5cfnF67aETQ9hUPr+I3s/VKE2DWkDs94W lO6U+qYV7GL/4RpsP9uyuOdsepRCPNLV+REBkgefr4W0BktsbXszWKKWk/aU+jCx nLkIURGyw/6otAHeItDQoqivTm84P0/TR4LlTjW2gqFuXw75rj9ppWX5P/jqUjER PAYFX4KgS9R6y2gq5pJwem50GONmToY6QXq4uthO17kNy4UqEjFGurdTFQNGi4p/ 1P+XSdzNh5vYRqcf+mCNNeYHu8EqcurCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJ CAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCZswp1AUJEwyDuwAKCRCq yzJDYwBS2QfMDp9KBBMNNagHPSDfpfAB/JKcH0SbxFifAzK2ag7Jk6rWCKjAlpCH prR6Ah4sXvUZO8aQ9sdPHkvyjkK59CUIy1TQzP8hnI4Wg37sZRcJbW510K+FA7uk ljMuiXi/LTlDHpw0D/8Bjqz+oU+r2E+986fWf3rbb7ojy3GS4aWJDs5kbiaRzn1e CYeKaoQHGUmQbZ7sRyDzxjeNryZKaR2Ux3d1NnhPWdYZKvY1KGeDwXwZS9cMQVBC 1n27sCOfuUgEu9vnbNsBJs5W9ZdWQ1lk50uwjQu5BzI6Jic7YjbPSV9c8yDnYuIy 1mw8H0RCY9QNhsUryJBT3K3XIUlgtzCSm0JLdDw6mPJSdQRl+ilVpF2gj5ehiugh Q958XT6Kizgtwq0N6gMey+ILEGuSser08Mxw1MbrGQSXG2voLlLcam+NIMVMvuKB Va1OebL8LorCw+GyujwhD71lpGCZT3VO1Npvom7dqtp8NktoEyqTqzOsZCtkyQyj LJYiHbIN8nxHOvSBSlNIu8sbRaxkSf3v+GrB4EUD93y1pHq6S0Ji9GGRFQP92MQ1 bpHqojXtmv4mZmVqCKpbjWLTarCfRxe1rrWiRzEfXLolH55l//l3mwbLzGDrXIzC wWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKq yzJDYwBS2QUCZd2ksAUJEadXtQAKCRCqyzJDYwBS2amyDp9nyo9hWHCA+MELnlAe G1X+tiY3CHZ49wddrlY03pR7C6E0DW9Mmld7aTvs/Uctt0TrmCniHjLWMwC6vI0Y c4V1HUjIDBq0cirg+ymX2NYI2dIhbzCGnZFiEevKlh0SbZVtCvsycNUiX2jOujJF 7h7X9mFW1HCqKp76Q/WgXMVUORLeceGE6RXK09Jew531fJrXwK169GNZQsYqqMVf T0KSyG3V/rE8Zlcx1U2DrjJb30/PRp1hATD5KgQtyhwLpYKj12Suvqu/TCVEoCWq Hd+6El7sA9xAKwlwe+QiUeH/B4ZMd08o7LhRQKbBRVR65dHBG6QAVkbo7PLcxtBy v71iEqk6NixsWoUtbu9KIfP5WyyqEBlY6rZ5qIuQZHZmVpcO131bXYq0CjKeLt17 I6SATqm4W3HRxJwHPhIwGJ/4S+taA6agGd4qMBSevGsBhGAYTznWAhtRp7MasMOy ZlXS/lLkrSswJVpY+by4mLUWQOdmdqRtdT1EFly20DIPHyOioPFcit93XAPAk5QS T9qrdXm8VUiugTvd5ZAW9L1vdrZI2rvuouXng8HQFstpwiydmtFFU8RUpNRnj22S p5cAhSdMCxZrbkanprczP1iBnyrBfevCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJ CAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCZCarMQUJEORDtQAKCRCq yzJDYwBS2dWaDp4wru9j9e55BR8R+XLl7NS/2OxTehXhnZdVHws498buEX1/Naee yAgcPAQZs/BlI+59w9VXSyoxmTG9ZwEZZ9jQZTKWuVEa+MAXasKmrZyvmPxNS7Bx CIBhxEbJMU4ZtcpuF5b5vH0Npsxgi8axHOcKlESa5zCcO+6uoSCLbsC6QNjIbrvJ tMBQ/fFPnHoBrZuuK656GbKdbkpLrztgBqOONCfjgtSgMg9CTJ4gdsty3c0gr5lz x1gfr0qLyg8U1vMvhwdz0JtoHZnUmNO5Xgfrui2cxGVhOsrwb5fPuql0GJqQuf3Y fIXATBYaAtcMH8PHc4ZzEc7Qs3wGOA0RfMWGPuvy0vGOUql+dkVLwutOvsEgYxae YZ0H8DtiWiIoEpW7bldPy186b68D9ivvnbv8fUXUtmQ+BTFj+nqxzuadTaNm6xki x7ISLfYbUeVZM7CpMTH3GNc9Pm7V1DXZ4p69lW6Cdn08e5HRkVhN2l3doz0qV05L MqJf7EExEgGfrkU+Gp6SG29jQcFkumZoJskafCfvfyi3Abp7kF6yiB3LxzmB1Uvo voghmDYbf037vWqIKwmWZbH382OBpBCAg1zmn3LKhPIIqkqboQ5mvEBE8xQjUPXC wWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKq yzJDYwBS2QUCYzeDBwUJDw0TngAKCRCqyzJDYwBS2e+1DqCYo9mV9ZkbTyDVr2h3 W5DNmwq9Xre88ItDXJ1DQbxnJ5ikwB0M6O2e6EV60xUmsagePZbrQ6t5eFQHOTvE IMTvibHAG2bzndIQ/fzHwjigq/gHacxN7XKeTkZUcx07mPGM/6CkQFV770p8qaQq nPjHNy8YajHMUns/wQT5uDCORlLI96DFiWCbnxP4jPsoOg5pupuG04i9pMxtRdin fgzo4UiiCx9neptD/XbFzuGnC+6Ffb+YKurkJR2LBrJArb33okskd0LgftJva62I D0Kvy49xAcnq5/HiMP6SfIZU1IbNsXcmoS7eRGGREl0Sj7qSDsAtPDXkpNiOGt1c wBGlgEdayuD+C6+7m77u17hR/cAj/2bp2k5YTQae7BfIIyTvOVGSZluINhOljXmh BA9qz3x7eWgRY+UnWOxaj55TQANqZUUlfvju3GRe5dgewKYd8Bk7rOuJYBLibw/j phbX5TA4RKyfUPyEUNxyZl07ajlgcFGhM93hLKO+TlJAuvgoH/MFSiUK5OzI3wy6 R9pH6NYKm805dvj5tT2LZaINriVpaiWPCfRdq43Hxe6ceIUbbLxfH4tAQ/rAuwX/ elAW5peXC556zEyhBxNcJ3gOW/bo55jCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJ CAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCYkZAkAUJDhvRJwAKCRCq yzJDYwBS2UKJDp4u+gHgK6Ygso4vMHWVwmAAhLZz9dRrec4w9bD1t8b7DPfhCnlD Ia02mqI6Gbk5VLe5a5NIJp0DuXMB2OdhZg4OMR5iqA+sWdo4E+m27OhQv4P6myni gNbujkot9RIFGjb3lBfmHaEYtd+GYVyDrpxv4C5Z+LXfTvsuUZ8+vKUbNYtX9oIg X3jGKLgAyHEfjm5oCn7PyAnGi8IVYS4pbJZ11qyQoiv2mlKMs6kHZNE/ECOleI4U n+OWwwOHLNL0vcW0otSlt9awTeLn6PBnz0e428FihdXspVGXpSH/ulnU7CcINd/i WrGljw7FRV4WbkBRt7TMONqLOYMDYdMF5K68LGbjw9tR9Fw4f2coAHhJNCPtOFDX mO04IkEbLh5nbPDi/B/g/C9C2w86ubID3nuHEX1NixjGrgrtAZOwDl6Wy7MzMJ3y 7Z4GD9SXce+qS8XIXYIwWK95qoBKEiBI2b8dw2qWjZyI6wIQBIqi01w10f9d21An TzXpns4Zjux53X0FH4+V2uQJayadKJ29eKvcI5DkNYp02Zg0F5gKSdAtLw1p3TJK jGkKY9wuwKU2pAt0whdkWKKuLuJd+kuFql7uAyyveOqVNyhRCDhdxHA3BBeq2hnC wWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKq yzJDYwBS2QUCYVZPtwUJDSvgTQAKCRCqyzJDYwBS2X/ADp97MQxWRug+QzY94Yuu XI9q8RTzep0hZBuljoFAFiToL4SzOA95epUxsXsxRCp+KN5yAgL5RN1Om2x8RULZ iIEYlFXaUi8Zof958+fyLBHYAiBIYvqMPL7pKmRLgrL9wpI91gNU9BrrtWuBabp+ T+/1PdEgFP4wQ+tkl0nN9RS49KEraHExE1lDNiKeayaYHVL/Q9MQ98ds6X0mN/jC 2p+NEX/JD9VZzwhukzIG+pXbf/XXJSF35jWnaE79nTH3pzY1cRxTx8bjuQNr4xEn Xl6t2qKyTxsgre45JjQ6pAwzyDFi1jON3wceGGIVUU2+/bD29jEJnQQ9He018m+U 99J1h/HHemuj8dgD4sDFQm0t/TRM/ll5BwOKfX4vsptoUSFxaMFaKqGr+nilS4Wf LvZevX8o7lKn2YKN5v6i14aBMgMG/giycTqXyOpc5r0SShRhl/nv7wQuZRw6Eq2+ WJjAHTv1z6k6Xws1H5M4ZzDzUvaD+KD5AppuhSN4b6xyGa/Uh/lKCe7UFRb4GWRO fpWwdl7aSEK4/9JmHn3wxh3wHba4rM3Lm19cpfmfufD+bTjrj9hkmcoKLg7DRRJQ /uJ5L1aCYPlPDXSZLB3OG/Hl3GiaOFXCwWUEEwEKADsCGwMICwkIBw0MCwoFFQoJ CAsCHgECF4AWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCYGUNRQUJDDqdnQAKCRCq yzJDYwBS2RPgDpkBfLeL6EOQuR54r4KokmwVkppUPhTnSvD2vYHD9JVWlhtMWCQl pHxLSe8bIY9DLJl6rihvevf6tK0NeLQtog9ZVhKOrAlmQjx/Hzzw25GeTdJQhoIE xKzZ+AtxpAjn7I2V3F4Gk39RALswvBTlJryjWjS9oVOSiwiYTCyVrT3br9ftVOog j21/D+KRmRI9r3x+V4A2fLIV651iL5bXrwmXHNFscCvG9MCiftTZiK3AGk81U5yV o27MylQk6ujAhcMmGvWYToKVi55+SYWG1+EjCjSTPFckqaw0U7/Cl6sI419e9ssO 8GaxEGkQam6PpS6C+KK7UfeNLWYMCe1kqnDLZ0Wcd+wJD2NNN9WCs11+EZXIykDn Jrg4SLnHrTbLAZ+k8Iomym8jgV3e7ylM+HFXugk39/rSzguhIE00gBUb+b8Zo+i2 5RSIgeiTwT7rqRy6rlpYVm874AogUXqjrWueJcnzqoJDqHsxrD/OSFMzmp4UAW3P BWcPI3DGekxTu3iICcuUO8AuH/GbjgjUu/YV0A5S373L2O05NWwqoSP2QDwkGe+U b8hzp+ENsJe/x1mpN6N+GaCmg5lBsIypAmwdgW4refw5NFNdAIWbv984H8JEJbvC wWUEEwEKADsCGwMICwkIBw0MCwoFFQoJCAsCHgECF4AWIQSPF3dxGKM92pukjmKq yzJDYwBS2QUCXLCIzQUJC09U0QAKCRCqyzJDYwBS2W5NDp0Uzc7YDw0nP1HWoa+x Z/cJXKJmsDmiTf6G9WwF93tL5rFYiPJqPly0prBpWL5CwcRh1aRFhbweAe22SSPw NFh5EpjmuW9lonQUbCPnKSNPNMFjiOtB6VHkXYbuIGfWfWy9XQfEku1uX8DxvY37 T8L9ebvNo9sRPK56XlabeHzRdBfxbNVGomY7kPpcPX9pknsI/K6OyHavKvZV7382 gmBSgJQE7B272/qfOXEmi9xDaZahA9uHGrorv+h31WJ4dTZI2sdRW/W0hjks8bwg AoyG8DbDTDRcLkffPE0euc99M5zc13DhyLYmjFgxJwqdF3DZ+DDtv338FyLgV1Ml Y+DkLY+3TBYyI7TsnH+Gbz4Asc76KvLlzgAiMjxWjWImiQ8wiLDdz6MQ44hCMRco LkNXX+aqKMIfxjDx6IxiGK9h94pjfLwS9m883CsIvcmQzZ+Z2357dV3sc6gUn158 OmM5bbTI1oMjHEkkvyp3Z/hYPoGygaNf27IamBrG9tcITDM9i1AgfACHlPr7Ot5q Iu/WDPcD/9znKEqWBvXsh6r5Qij4b62mVLPfaHelmM25QizNMzQPTXNA0tTA2eU8 AvQurwBN6/J1TVuJO5n3xuBhpmBn91HCwWUEEwEKADsWIQSPF3dxGKM92pukjmKq yzJDYwBS2QUCWjzjIAIbAwUJB4VMEggLCQgHDQwLCgUVCgkICwIeAQIXgAAKCRCq yzJDYwBS2XkUDp9QLXbWzqYIvZYm0Mq+HEgHr0VpRmRuNp9tWqhFEw8jSAccIv4A UzDti1LCpPZPFstg9z/ttT6lYB7VhPqmTQ4tmG5HPIbdS5loxUUdynbqws+sZE6B 2jhHv0xRQMwtiS5gpFxOt2Lhtx5mWYikl5S35JjzNwA/ebh6l4Q67e+skRHXGCUW Z40MRyMPfaJMkeWQZzIfD41aGXqXwu8Wi/hlXJbileJiOeNs4ery6Rs8gM95p8yS KyEbXx6QQsaga4ukOqc9gb0BheLLTcPpnB24sjvvRsyQbnOErMOSwgZDzHQlQ++2 uhKWA1DB7U8WUNLtzZsizcmrAKm4kKUQSoqS+DuxqYpdY0I7be+X25yY7CTEybbD i/T1aigWUbbyFKwf4Uv5E4RTY/HUwltRqFF5NuyGjzbw2y2pnjpRaZxZ72r1gPCc cGPawoTLjt/aZndmhHXByFEjHN7t1w8tRM8ygTKMAUrOyijOkT4CH+FTAiM9IQrS R89pDHiNH1AoLBOcysc2zXqdVQz3OFcs2XBvat0bpjR0DIGWUu8ThQcAXzHca//o 7fEL89TousBSK0fSZWJX4YcefeNZXug7c2ZXbvH5XDUOpk71dkw+qaBGhHMwRBfN JE5lYWwgSC4gV2FsZmllbGQgPG5lYWxAd2FsZmllbGQub3JnPsLBaAQTAQoAPgIb AwgLCQgHDQwLCgUVCgkICwIeAQIXgAIZARYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZ BQJoPu+XBQkU/IguAAoJEKrLMkNjAFLZ86MOn0bYAE/UQDl1qMoz2QxC4Q0LSNkx MawPl9LAgrYRagrlQhHzCvuyKdETrEuNHjFWWkKZvy7q9TeqOWI4d2wbxdUfgcV5 dQ2x2OyzqAqReWKSMv4sB8p0oquFxbWgMqWuAq0e+bhF9lfK7pshTclzMhasv/zm UCDSHG8ZApSxYgV5NMbfSPd5DiY7jXDcX2/sJRoxs8QGYGaOtMraRqao9/JEb7yO BiyUcfYcv3WYIuDekIQ1g6AngfEvS9RNDtJ3jpPgQYGu9x6lYDA5O1n57QZIMKu0 nVJFAOWI9+OAc4nRkD9rED9Hox8yQXdjXweyqPkLh74kHOVvGuTdFE0GzWIpAQuf 878/Sd5BpKyYW7jSMNym7CgR/t+1bVyoh7HPEY7lRF4ctBw0xu0tu1h21bLfZqLL wet2cGa1wqxb6Wd0Lq4JpYeU3gYdtWCpvYR1y1g/45A/26/TyVDliN4PV8cy8cRe GCeo+lORGOkc+QQupeLQIJZm2VyvfFZ4s1YkscK26qcF8ozlUCw1nZZhu2jn4+Nz ybkM9lrhY9Qw357evxrUEuxuV4SQK8JcXV3L7g/ZVhGt3cZBzKBfs3nwZQGesSuw sgFU+BKoGP5EUI1/Psknv8LBaAQTAQoAPgIbAwgLCQgHDQwLCgUVCgkICwIeAQIX gAIZARYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJmzCmkBQkTDIO7AAoJEKrLMkNj AFLZ9HkOn1p4xeT4g8+FswnDWuz+kgqkw79X3xxim0VWW74bNy36K9bPoZ5+Dm0I U9BeHbZJ6OtNkbdbpbWhZcJZ3Hj2f5vpZiZqGYG91aUkrLys40AbX824IawAVVrA u7/neEFKgC/Nh76aILZglI2183O/U3GOZir+JhVmnDJ7VzLXLu2i/lb/I7mhNFiD ZUrSTH4/Ri+ByPsWFNcBNifwTDoIKoFBqTmHRAOSmJBe9GNZ6sQNOpVddNMORVhr IX0BOUDPoP//0GnMZjvkNVz+22PhpXdsnpfqJbKqTuYYQZqt3J2Njt0tmeTDMoMy +0Zm8t8ILGEhafZyacWZ8r5UUQq+wlXVhXAdCiIgUfy3euKP7rWSEDSoZvv7CwsR mwxRv2Zg8tu4kXFl9CDKKk6m4aZXOLNU758SDnNxZT5SzLL8Cul426CwP1XsfrFT Dx25gWoUT547AV0HP0Ag0qPejxW/l1WH/Q0kXk99EOyHOdsTqyJY+Tl8c+G+lpvv 4/1It1fEok0CxZnLaFFqaUz5CH3RRP48HcYV7tV68zsfEs3Pfn/xu4LnIBnIBQea FSuil6GOL+8yUQMYCDczfKQZBxMChCyqekG75hbihxdhjKG18Z1oF2OpoMLBaAQT AQoAPgIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgAIZARYhBI8Xd3EYoz3am6SOYqrL MkNjAFLZBQJl3aSeBQkRp1e1AAoJEKrLMkNjAFLZP+EOnAw9drSqLDdY2Ik7fFl6 JqT7l+YyZJR77MNnM/dyjxwmqmqU1tkDgrSZe8T4Vf9cnDrHXh7kxyXh3BMigfbQ HJPRra4nRth9ZFdXQ6G2UdmZ1afGlTzndNjmaIaDqW9aotWinivr9P0aMyFaCYBf /gF7dc9rQ46AWXjJrJS8eYU5rLs7wh4Lokx+CLU9nJ/UHHc14nhQ//TYLMCEirSM 0EI82D3FAtSrp2j9T1RH07jTTTHlOwKX/rIEF8dhSGHAk9EDVVujRiHECi7lRUiH 94/rZCpHaSvExMoWMgSVBomwq0zvbuC8wa+nornr+67YsOs4VF7k3j57gT78UH52 VAx6cR+BBMx9QuX8FjcjzNZ9zQaUZ5lVICnSEdD/8044Cm1G3u3+ZN2hCMLFxbOG YDWMZynxt/zKvVkS34do+nMPAApH4udlPbxm6UDopmub/oWqUaIS74mj/FI065xH 4RuQAUWi7wt58XaYVRVhEZbafbcTFz7oIFfv+iRuF5C+R7BeJpwnRJYitIyxmX4X Xg/NvbdmI3f2ySLsfyd12my6HOYb18d1r0QGqjI7Uoz8SRXlUDyCTKHFRmEcuxtq 59wZ01jiCa0dQwlVRlCBQqbsNu30tcLBaAQTAQoAPgIbAwgLCQgHDQwLCgUVCgkI CwIeAQIXgAIZARYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJkJqseBQkQ5EO1AAoJ EKrLMkNjAFLZgtoOnR8xmvB8saoLwsmJF8j4fBX7b0TsRZomY4XpLbix7CvW3//Z XPiZzjUTpsOmsewe17gkSbPIKdedeU9qhvI41ZQhthyczzvbebImaXQO7gS++8k9 SJ4yLAVbNF2YXFz95D7pp5NNSSc0kpWFjXz+qwCm9hMiS+aV4+AtBUa+mdipDUSW Ax/vrwonj6VUyYhPb58eUt7lHIlGVlyNWvJXkf187L5NCqEsuhMWHECIkEAJghQK CUaCNNB6OK9ddFeOG8ym+UHNLHAj2JkZlQvgUTWSMr316miJy032K/U7ldNlhOqR 0F/U8Pv0aJwcBsboijwXTvFH8KKNmXbuXqstvnn3/fcizCLoxryZ2eZ5MnV36Kj1 du0AaE9morEzZe0ptU7y4mWLpgKp4SlU/79bLZyDhFKPjZvnKumVupW+dt13Hxlg KblJcPo9v9mutSYqVrK4zZScyz36ycgYb9IxFS9vHY6rp6qv1Dvha79YtrcPITRR TiuITvgwfk4uLNZLa1ZMec3GWpStO1avMrGdMLZuslkq1Z50XhItWljV+SpSgHyY zZsA8C5QA/BgHWNCZUYLtUtz9/Zr0pkDeFCIIDFKfr1q6T0VkY9C0FYubklFtnbF ocLBaAQTAQoAPgIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgAIZARYhBI8Xd3EYoz3a m6SOYqrLMkNjAFLZBQJjN4MHBQkPDROeAAoJEKrLMkNjAFLZxKsOn0R9ommmBh85 jdn2+05r0oDthUZpRQAEAV6mzkGzPWERJA210Hy5ierwYzQypAscmqVeL4hW331W xu16a8UUF9lR/KPp2pS0wey+9TrDLYpGRb27iTKml3wEKzOOt9RdgN/CcTVGnsTZ ukNMEJKV+gBaBVPd7r3V28De7GDf2m5tgv++Cyg0G08JxXV8omGbIjk/ZGQsNyBS i3OfQppA9XWx75WmcBSjI9S9iGL+NxpTq4EP6unaDWir9mCryMBLHVdG5RhrwVB1 CCwDxaQ7RyaFbo/Ws/GpLjbJuGnGJtTUoEzcpy5g6ohi7Fia3b4rIXJIRkHe1q/j qJ2CAA7+RIAg/RjKNaAbjJCpZP4XnRwEW9stIOPOcCdu1HG9NAkK0rdEjoByDtvi kaWqi1bneHC2CJbRuFDIrBTxnhV19+U7p2RSM3xZ1T4pW5jk9SnBh3EYOf114S4n rRVsuwr9j35eupAWNf1l28P6+fTRomuU2cAoOgX30P8LjmmuznTer0avTg4JEpJm eCBDNs8edrhYm5kZ5ph1SPMNftPMlWHMnSK1Aldn5QzNTK4lSMXB1DATJAMyFMDD suS2GfQ5DwiVDVEdMPi4WciAce36SpC2tJzZeMLBaAQTAQoAPgIbAwgLCQgHDQwL CgUVCgkICwIeAQIXgAIZARYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJiRkCQBQkO G9EnAAoJEKrLMkNjAFLZYZ0On2UvYdjhAsLQZcb0K9EWVrEIp7kUS0u0C2LTioCI kb32ye9aRYMoauJgil13975W9TL7/AEXSc5Qg/QgFua187ELqCsCslckS4OQLdub lOrpVX0kKAhM+W7rxJuobDOTSHGBloW56OU9tGxSkwpm/ESTR7Zv7gJDJC/GlBCe 2bl6rw8ykWwQiIhfvIOsgfE5ojp8JjktgvpB7IUyzstvC65ejr16PsoDeGdju0OT oDGagxlplIZ5r6MlcmPc4e7cTCh62ZT4o5FR52afcTx9MqR8TEc1Ij5MyQurQtqw /zS7qMAjeu8xaVCcFmQHvr/Z2ZjepL36O4cN1Up3boByGTH+oHpaL9WdTsM4n5Zr 2sMwhevI308UYwt2/ROEOHpbLv7uc45X775BUQAmNSgcLUhteqddIILz0lVBbmsV 1CIeZiEO+Pz6se434EKaUGIIlYqE7Oqf1tLOYm9knpyYtB/CqK+dyzz2od7QKez8 B7e8yx7Ps1yj9KzeAQb5nHnpEekkwG/5TpLMWGqN33fgeJcZtR1PM3atN/6UIOU8 j4z47S5dC/hsCVGmsSxysARY119AqUZYUz/f+97+yD51eP3nknfyPn789A1JkcXg Iktl1scMkMLBaAQTAQoAPgIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgAIZARYhBI8X d3EYoz3am6SOYqrLMkNjAFLZBQJhVk+2BQkNK+BNAAoJEKrLMkNjAFLZKOcOnRG6 kdoBqmizCtc6UmEtzBIHSjS0TyM36pYbVdOggGKYsV95pEDXDDsXcrHCzIY9ZM++ ToTAKcx3Y53SZTFC57YtJbVwV/Vc1xZJV7R816BPOxXaPTtegu+3Yd94ckmck9SS 8rLtyJxn7sK/EDeDyG8upg4PIi73o23Tl/ZwITu8Rhfyz2AY01Ub2CbRyI6ePPM3 Lj/o7tGocYNCaF52kMUOvA2jCNel3lXaEfpBx2Qbt1POlCEdLa/+pJGrB/e3QpmN 7ozc3ysVs3fTPhvL5FOwUf9fspceTwNICAI8J/ZLObOeuNv8LAd146lP/GMLYzOY 7oivcFeJenE1GQubZVq1KpBrKKbkpnOJeF8bi48a2MlyGTYKU7KNPFgxVDc9dBI6 GauG3XZEN6dI4HVIkIDK2phsu8ENsNEE6Ze0F7I9EAbQPA0ytvYqRWRNjVeEA1XJ 58y1mjLoM8EWv8r9SjGWLyc1I/AX6F37uZptlo1EsiAYOLjgWt42/Q1tUTJFX7Dk hIazgaATrv3DnoencvJy81FGfgrcvaulkQBCsl3Zt1SyxorKd+xfTglRr6m5sHX1 bKqicEX03fjavkkowOeOAZGmLJVhpUYMFgLYNCwW2AW30MLBaAQTAQoAPgIbAwgL CQgHDQwLCgUVCgkICwIeAQIXgAIZARYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJg ZQ0GBQkMOp2dAAoJEKrLMkNjAFLZwBoOn1QierIhr15SUjmIttoxEe7EOaXd7WHy JVfnkpbggwbfHyl9/DiElK//ZAPmYqp7E1EnFbGal6qusf47Vqv0B4zKm5YjKadc 6B7rIUrAaXeenqqrsWgTw+gAGA0YgITLHEtH5Doy8TBxlOOveVz3EqjgvjGTLk2Z U+kcRjAfOSpo+xi6cJ7KJjdvMSU4Q7trFknF9TNDFkQzUG6rZblXB6rAivvFYgCK jy2MGqxWqAFzZ8N++jC/cyDaaTBlQgvDF+dxHfMuof8p5UKp8zfa/4SuBVLKue1j D+f9LJzpPwHBtqa/EtBUx1etbAjqflBUKdrHZ+vmNO35bb6swqJg5crDwIddXEaI nw+JOPFhPHSRRl76KHvU/yAHCW2LrUyGmmYrgGEIW/s7wVP/V+WCLUaT4WF4Hizx eibRaQUcnXbc2Stuwmm32YEHW2upa3H7+TH148EAx2KORyVaOgYtS8heFFpiqUGw GLD/CAPRP3MvcySSCZpFulsYWs4uvO6lsnjEZ5g1ZxEbxpaJ4cxMeIx1OyZieYHv eAQx/PWx/4t64UcK6jHpMs4zYsPFG3xzhLRJCCm4FJPeyGCGq+nhqrCAyTQJpBeQ adyCmXQKsb/ICx1jUsLBaAQTAQoAPgIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgAIZ ARYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJcsIi6BQkLT1TRAAoJEKrLMkNjAFLZ 76YOnA5g0BjPqLGeKhfEdntDVCs6Yt2bubYvXnnt11JlCmH8A+DKdcabnPpphrHP OrdBGlstm/+KhVJ2otV0y7LpZ0mid+foX/nc1YVjqLCTeIDKO+ES6Yt7/08e/vnQ KPgBxlF6qGsUsH6ckdBSzRJIInrFNziBbiHqdKJFw93vYVTJ9m5IGP8bRJ3lsS7l Oy63DEHMJDXqk9q6+Y7yVqz2+wH4lhgJ0KJllYqQGT/0Vv2od47cjRSimCbLIb3W JnbGdSufXtUKKriz272eNGC9RNQ7mYxqvm+XWiMUzXeDEaegaUP5BGPsTGu6hRjZ YHKjbcAyApYmk/8OUvK2f0FJaZHRsIpDsv2WBQAKXwkgap1nm3PiYfSS0daP9Kob TzP2m+lr/r4d5uixDLryiWnUK2jCAxONuy2gNwd0rRJxMesOS/1kV9Kop4xIpGdx /wzTh86fq2bDRmZKpv2NdZkNR+gOPd7VwZyJmVNoAINKP/MN48o2w+j8xVRhVkJU /SpqOXL7pyR8dUcnL9lyS4Z8rxeuk+uHXypa2TGlsWn0judK0PkLSLfdZdmXqWHP dmfFK8sHMt72+I4RtaD0Xrd+2f2U5j5EnQjQRjbFhsPVnPZYjyCnR8LBaAQTAQoA PgIbAwgLCQgHDQwLCgUVCgkICwIeAQIXgAIZARYhBI8Xd3EYoz3am6SOYqrLMkNj AFLZBQJZzTZ7BQkHhUwSAAoJEKrLMkNjAFLZg9gOoJauK/dNNH+tyzxaiExoDTQ8 QW77GrVx3XQMwqxg3iOZ2T7ekh09gQeX/4j+Lv/XI9Co1Aj3dw8zfLnVt+f2pvHi QbnWCTTRIuNv4ymcEZUTV2xZ1m7U8iEKbsddYBHHdHHYgPATs8U/S2pUU6/WSx6b hI1jtjq4WI4fFDj1TCf+OkCQ6ygAYSc8tqPlIaIJr6yFa7v3T+9Dh/+/S+GpWnoI lcFbAqFvNOYp9VNnrlvL1YZ2BXGKQNIAD1CJ+1ZtUgHb5RtiSphsoGVX8kegOY9x pGRFVJQ17pqODE7VEh8QbNgcPPAb15xAKYdz3fj0sfMVe+r6fl3lWzQCrRLvwZ8R 0MtS1cmS0pjS4d4MC71kkH4qSUwjhWA9FzEvP8tsH5mnHaPFBsi0J4/XN+JBuVEN 7zD+wRLrHhSRB/+3SGHdkrN2JqFlWNqYNoOiSng7/vAfdLq6L4WEaawuT4dYv69Y oyDtIrMtAnDz8TeBrmzteTApqCaTuC3/YT68QGoKUVzd5asJMa+0kwBe0L5lrVOd PIwO+3T2nDmBgOFZyCFRrwZpCvdvH8volakM/dtwP591ZYhvg235h8lewnstynZN 4pAmmJj1uNXhSERM2X6z5/CqT8LBaAQTAQoAJwIbAwUJEswDAAgLCQgHDQwLCgUV CgkICwIeAQIXgAUCVSOlpAIZAQAhCRCqyzJDYwBS2RYhBI8Xd3EYoz3am6SOYqrL MkNjAFLZ9PcOn0Hm3hibYknfxnru43LdXA0osBOBevQp7jHa2eXlubj736z73goN 5x2lfDuL3+VT8dUpfsVkwBxVczih7JB42GeNQVe9IvIODdgsj4zpguVlhkBVIen9 SzDl9l/tmbTbF6KA9Ja1B0LDs3YmzTmJg+B0QTBSxZrbwOuu3xyMCxDJNklHwNJn Z8CM/pu1Pi229rjTWOWSTrc7SYgrsmlqGUauwbyPrR2bYPoMZhOSEn1NGJYTh1L9 4M59ZuY5GTmDTab2jTCwIE15gcmMl3XHCikCQHgZgVGkxpcu5qtsL0KeUIEKc+h1 ifL0nwmt/FPpjryOrgMQmFk8cv0JWzGSa5GPBZ9A8ava4ZdtFTSv2c00oOKGhjk6 LhE5DbDroGdGf4N3XSs2k0IjBD7NxiQeAxvAdPSkaPZAwINOLWD6INzGZ0Jy+2On t3cupETR6JZLhUl+k9LTYdp9vJDSyDcxRQQMeR4rD44MclJcxikTlJ9Aq8v6t7E4 vgY/gAxDYo5slzc8g/GUM4+xsuD300voX82t4kiw2VqZ2PEFc4IUpRaJlAO1ROpe MnG76XqbqfloQ1gxCpDaaf31DeXECr5EC3iu0P0NJ91rUY039IOHjRTX9UQJCsLB ZQQTAQoAJAUCVSOa6QIbAwUJEswDAAgLCQgHDQwLCgUVCgkICwIeAQIXgAAhCRCq yzJDYwBS2RYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZvZsOoKjvoLatMgPVKXFFLZis 08PVqEruJkUFY7RVR8Dsf7exCDt9t5IEwqoi66aC3gkaDRwCNq1sBLCI8vxklE0u bU5fqvpjN5Az903U+xwYTFupqQASh8ARybHpAB6UBn2Q+aHUZoJGq76drO8HVMcJ lC+R5KsQDN8YSTAdc7uST6PXYi5KW1BgKh+owr3B2KmacxG7GPDog9SPIvp/MJrc SnR2+SX5oO+oUCFpUDU73Mkqp8dxhoczm1176T8I82S4yJGJlIqGGSlaRM5l+ttw 0llZRNlORb1GXqMo13Ka7cYLeLA39SIOAPCh7c17Z06SSG2VhzaUTeqidE9Jz96Y 9vaW++v6tW03qC9hqu7ThFN1PRQCoOpqzKpepdeLBUdnW1TWOmGhxKN4M3K1ZmI4 EG/bytBNhrRTfni3eg3ak2i3dYuOHtMzLaSLAF7EFflmik1OVeNCRTCYJ46sYBnp fQCeRNgTViiMJ+mCFcTxf6IHyl3uKPDOFQExnvjINxgP3ouaEPNQiA2EYBoi+xYe XYM9KXZ55RC1Z1PZCfdmaDTcvMJ4qLP1OVrzwj8RwhrL4ZUpILx84T54PaJquj6B jgEPd0To5ILPR+zc8Qmx4iWcTUR5f87ATQRVI6aWAQgApzVRJF/utO+M73xwoHzr okN49VSBcxkBHh7G6GxzX6N5DvBBhkh4mGVZ81q4dlMFMtpq1xBb17Hgw5iWmjv4 Px/2rAeCfOzk1zSC4OMl5Lby36/CmiDjcJGqgR0tqXiJif4B82MBgJINibabiGG+ +iHQm9kmkWSVquAMsq7YIyTdgAdbuSd5BVih1hjqzBrB7AMyfRzDSCaIDM/ztKjb qDnsD/c9tFvMQFMMSYzGfkcdUD3HTLBxye1XD5Iav9AGP5KNMuYko2M/cnKemxl3 KIZlpcZR+aErj5U5XaOhOt+kuAUwC6RcLtPK4YhOA5tCTe9lHODdbk/k7BGXXeSQ VQARAQABwsJvBBgBCgAmAhsCFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmg+78gF CRT8fLIBKQkQqssyQ2MAUtnAXSAEGQEKAAYFAlUjppYACgkQciO1ZnjgJSimlAf/ eQTOhj7aSKAgiMYK3JaMXd5Xa8YHPi1OJKzeYLWEJDQ4/2LW6Ke2r0a36bTkuVJM W4q73VDRjcCsIMA0BtqAOZLtFVKFsg2E9lfsjcIX87z1NvcMoNMJ1oOG546uZOkp fonb1zajlMNtUiMZyNUyy9BDIz+jr/LsNc/wF2TIj97B2wS3y6T1PhWllMFXWKDj 33zRjNFrKSlgWg6fQv4xdx//yiQCmO0x6FEjM1F6NhPfTfDVHxd9AgoNZFEYPBBc 715VJqLD5nYRsTihE6RjkiZqUP6wrgViezGcrjDc7vh8aVgJ3dDZwCNJJ/JUSpyP K5SiDpaByZZ4ozEJMtmk7/ySDp4yKg+YTwmnkwW2cwYyX6bjqStiXq9j1+Vt4a5S 8t1hseJuKKi2eI0uypOaP+viBZukbYt4VWcMJ84zPRSAtdeBO4/4fdinHzVij98G v6b/4KVs9IE0aj3Ow/QakE/sf4nye7PWRFMH4hCVafkFnsYTZqMz62EZlLxAd2nE YfxtVoMM3MtP7AFy3U21AyUnoiddrfw8AkYVp3PEQajvEB4aXM+YaADmwncVLu/F Bn9EGCCTejFD12WyTTidiXcCnTDwQ7+K2jTs7kqLEVxga5M3Wbrgp3TwXSs2nbeu +vAuVSMuZ3mdSQI4LWnPpmc9kjbVCrtfAfZFJOZspLgUqTij2DKlxjbCVbjInyFA feBiX5YP6IZeY+wySLBoBZoEH5eMdf93FnV9OXARzotjVrE2r2eSYN++bJk6PA8y PJXtLC9CgycrnWHOqpmpM7Wo6fmvb32C83TbkUah1qWN+Wkc1hOiY48f1nCPvRU3 8y1KcqSlkLyebbWLOWrHEKMjVitBWiA4OFL+YG67OykFTqEUkutK1oUcNwV5QsXY lEsroiRbd4YvGCNzcUAALzvZsptvm44QiVD9iYgeGxpItXjVzDIcqmnoGWiBkHu4 a6NMulCEs4/CwmkEGAEKACACGwIWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCZswq CgEpCRCqyzJDYwBS2cBdIAQZAQoABgUCVSOmlgAKCRByI7VmeOAlKKaUB/95BM6G PtpIoCCIxgrcloxd3ldrxgc+LU4krN5gtYQkNDj/Ytbop7avRrfptOS5Ukxbirvd UNGNwKwgwDQG2oA5ku0VUoWyDYT2V+yNwhfzvPU29wyg0wnWg4bnjq5k6Sl+idvX NqOUw21SIxnI1TLL0EMjP6Ov8uw1z/AXZMiP3sHbBLfLpPU+FaWUwVdYoOPffNGM 0WspKWBaDp9C/jF3H//KJAKY7THoUSMzUXo2E99N8NUfF30CCg1kURg8EFzvXlUm osPmdhGxOKETpGOSJmpQ/rCuBWJ7MZyuMNzu+HxpWAnd0NnAI0kn8lRKnI8rlKIO loHJlnijMQky2aTvdkkOoJ80A3rZBsdstzkg4/OsXzzxQrI82QoUs1BPWa20UJRi sxHiiyXBAQ5OyHi2xEl5ZBV6KPTQrfTLHle84p+k3RCErKoFSu5iOWaKJIvZEDM6 d3jCyDfyheLKWWEy4f06uDtGjDmPSM2jivnGz2IHJ09VwwC/VQAbr3Y1jAFKeO12 ILBx+OzzZvMHz2aaFF7zJZbPuNZQ2rr2Falq40aMt07Fn8vTDCMUAjcKBOdlDgkA vKX+QCu0s/eXBK0SRpyHMR8LgSjoVhcLK1Q11wKf3SUWiP0+nBzbZ7WA5cltw7ip EvhNbgTWl5/LhVgrHfC/8UBF6qmHz/C3Wo5Uc/9ynFZQGR0BlfwNxU25IQFdeHvV 06cIxKYI/pM7fw8vy7cJaeQ0SRPYE6YUdGlidQzf8YhbO87FNqd+AgplBSJ5isZA rYpDJNAfcSgH5EhoGCYVk1z//6BZUedFOhOit17LzRrdEZ7B0x5A2cv3nb1KVpRg qPj6viF6uCt3YxAPLpExhWMonO5SePSF3i2GxpvQZ/h9vV/XxGpivj2KvhaWrOmU GDJzxxof14Ns5j4X7yhd5YoveB3P7CeYfQWCMTieI3Zh5wHwOXx5os1mbWTeAaqm nnO6xsLCbwQYAQoAJgIbAhYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJl3aS+BQkR p0woASkJEKrLMkNjAFLZwF0gBBkBCgAGBQJVI6aWAAoJEHIjtWZ44CUoppQH/3kE zoY+2kigIIjGCtyWjF3eV2vGBz4tTiSs3mC1hCQ0OP9i1uintq9Gt+m05LlSTFuK u91Q0Y3ArCDANAbagDmS7RVShbINhPZX7I3CF/O89Tb3DKDTCdaDhueOrmTpKX6J 29c2o5TDbVIjGcjVMsvQQyM/o6/y7DXP8BdkyI/ewdsEt8uk9T4VpZTBV1ig4998 0YzRaykpYFoOn0L+MXcf/8okApjtMehRIzNRejYT303w1R8XfQIKDWRRGDwQXO9e VSaiw+Z2EbE4oROkY5ImalD+sK4FYnsxnK4w3O74fGlYCd3Q2cAjSSfyVEqcjyuU og6WgcmWeKMxCTLZpO+0cA6ff+ngQvCXy5w7chZDslpe6843hSZIpFm4wOS2rpj/ TJBDwAa5FLOSdpNUx9GkwPUBWe6w6yHkEZDtGEDv/LNEy0+XPNK9WSv1NJJ1qZnc S696cBYS0DWe93+79/OUXI08bPv0glZB1yoilfWCL/LYCL6rtTte0IjQn9py63gg PmgCuoLcVDzkSGKmog78cJIBRJSDUApL8dzOxJWTiX3WC3GLmXHJ7/vFg7AJBE97 0LIkZDESDfJ4uDA5SGYJPGnhup8IjNZuO3HyD/FQV19IqtcrJLUBEWjtaPTF6lLO dQtMQT5fd58jGyI7vt9Ehi7znYfEE0NEIFQCcXMg6+PRANqnLBxvMhtQESZNhXHG XxPkRv7BP0wUzvZqJbl2Ap66vq0NrasdsEiUzPBhKri+NNFSAI3ZWrRL4e6rJ1yg HRm8KqU1XUVRKZXl64MS9xGQpsWsWSwOWr5oBiG1m0gj25R0fmj52pZwxdI4DYF6 f8g0cxQmDOENeXO1daLx23Y8A9H9Zvdbb63uzxZcvCsJIutcygTGqic96aJGejXF cG9icp1gK2nPXIDIz9m9BteNNuBIDLczknLjBwB3Ert9hG49ww2bTZ8mzDPwLDPZ RWYwNQyYwsJvBBgBCgAmAhsCFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkFAmQmqz0F CRDkOCcBKQkQqssyQ2MAUtnAXSAEGQEKAAYFAlUjppYACgkQciO1ZnjgJSimlAf/ eQTOhj7aSKAgiMYK3JaMXd5Xa8YHPi1OJKzeYLWEJDQ4/2LW6Ke2r0a36bTkuVJM W4q73VDRjcCsIMA0BtqAOZLtFVKFsg2E9lfsjcIX87z1NvcMoNMJ1oOG546uZOkp fonb1zajlMNtUiMZyNUyy9BDIz+jr/LsNc/wF2TIj97B2wS3y6T1PhWllMFXWKDj 33zRjNFrKSlgWg6fQv4xdx//yiQCmO0x6FEjM1F6NhPfTfDVHxd9AgoNZFEYPBBc 715VJqLD5nYRsTihE6RjkiZqUP6wrgViezGcrjDc7vh8aVgJ3dDZwCNJJ/JUSpyP K5SiDpaByZZ4ozEJMtmk74O7DqCf//4bVzrgfhCMmTXoYi9SlNhZI1WuEKYjXW9A fvjs3d0KFxKTA+synu9PUfVt6Y7LJkNjd58omZoxYBBsRWKKWYb+mnA7Cm6EEaor qWQWIQ2iwgVyvHF6kh7EG7jbDruTr/oQp25ZhezByoVlIh6Ytr5qR8/5/zFBoNZ5 PfLycaQUwsqpWeQ244CVd0qfnfrSXgW/nkFctNIKMFsm6qjft5Av26ZJRWRLnnFE NcBhzBXXdEnq5G2rbwAT83oLx3p63I/fp0TTcbKtlFhE16Ppm2nRWdHKbb9ZD7pk a9p8ubGUYai9OmZv3RaA10eOialWRY1tkBbWA6N955N3JJoSAv7vaBe7pP3qPHOZ giSYQWWfneST4b1HpZeHi+2NWBu9BmbbBQG4Itg9VtImlAGHJHVhC4h2XKzWWIIA nmoeL1yWl+CxcTCmipWRPk1lFOUS8QW5VBIO+u9BGh5FPvVVNYSa0tK9GF5DrNtF kL/NhzQXA6Uf+2aej/QKp0d4HkG17SXvfykEqLTobHA3vxWpMFnZZhI4/SVfhM3+ KafactySTrJWt3ZuOnfxv3Gfek7QEimOCV7+ylIu/xLZlbBlRw6UHurMKZXpRoYO dl0qOUig0EfCwm8EGAEKACYCGwIWIQSPF3dxGKM92pukjmKqyzJDYwBS2QUCYzeD FwUJDw0IAQEpCRCqyzJDYwBS2cBdIAQZAQoABgUCVSOmlgAKCRByI7VmeOAlKKaU B/95BM6GPtpIoCCIxgrcloxd3ldrxgc+LU4krN5gtYQkNDj/Ytbop7avRrfptOS5 UkxbirvdUNGNwKwgwDQG2oA5ku0VUoWyDYT2V+yNwhfzvPU29wyg0wnWg4bnjq5k 6Sl+idvXNqOUw21SIxnI1TLL0EMjP6Ov8uw1z/AXZMiP3sHbBLfLpPU+FaWUwVdY oOPffNGM0WspKWBaDp9C/jF3H//KJAKY7THoUSMzUXo2E99N8NUfF30CCg1kURg8 EFzvXlUmosPmdhGxOKETpGOSJmpQ/rCuBWJ7MZyuMNzu+HxpWAnd0NnAI0kn8lRK nI8rlKIOloHJlnijMQky2aTvoqkOniNhCrQ9vugGyHKRWrTK8NWAIrEGQeN22IQN EVBlmfEV/O6miL1byeTEH701sbHEYhCjDvda18V8wQlG8+RBnx+BZpqjGyOWbC/8 1JJoYVB4+w0wCzp+6Vg3f6Hl7xN/6k/ebo49F/CxFeGLeyGPYieeytibWtO0jj9U jZXqHliaXQsW++tQfnHfqFcm0qCBaviZKWg+rdIDs6tOdy9OV/r0PQCnp6T2K/ni dNoANbvQ6u7hsH5A9bwSPVm8bPrJZ5827wb3jeJb2LxR6AjjyiGfuAcnvPX2a88c CCMdjalWJ4fIzPblULpNRVzGt2SlAZRfCs/PKxDbGTkbe4aWbxtukrbFu4fJCbyZ 6FDqRQ8qnlsc/n4t6bP4jRixBZl8IWXwl/mDwBVzZvr4S0/IbMc2HXwuuwqXk8dS F72cejETD0q1rf+odld69MSGrZ2UvkjgSiSlJOC8yJU+blECdcuyqSDgTPn6bVU8 OAbFDaGFWZ2cLT3pBiCOpiKd1sgJclZO6sknUmejVnOH8YPqwQMS2BcfxR6jkjGn V8dq0VYwFFq4K13x4Yy3rEmmy5gj8RWWm8UO+jrQCJ0VUSLeBUk9iyLlxL7qTA/X pfwgXPuyEIl6PMLCbwQYAQoAJgIbAhYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZBQJi RkCmBQkOG8WQASkJEKrLMkNjAFLZwF0gBBkBCgAGBQJVI6aWAAoJEHIjtWZ44CUo ppQH/3kEzoY+2kigIIjGCtyWjF3eV2vGBz4tTiSs3mC1hCQ0OP9i1uintq9Gt+m0 5LlSTFuKu91Q0Y3ArCDANAbagDmS7RVShbINhPZX7I3CF/O89Tb3DKDTCdaDhueO rmTpKX6J29c2o5TDbVIjGcjVMsvQQyM/o6/y7DXP8BdkyI/ewdsEt8uk9T4VpZTB V1ig49980YzRaykpYFoOn0L+MXcf/8okApjtMehRIzNRejYT303w1R8XfQIKDWRR GDwQXO9eVSaiw+Z2EbE4oROkY5ImalD+sK4FYnsxnK4w3O74fGlYCd3Q2cAjSSfy VEqcjyuUog6WgcmWeKMxCTLZpO9qHw6dES2t2FRWeltMIX5M8iynSZwSlwm4Q0yq z3wW/xmTeFxSsUEzjc5BQ1HKCfCOR7ERI30FejEU0kPnaXoA4mqykuzqYS+CFTm3 EOmDkRay8aAJgoMg4bSWskceH+PtTluIXz4/ynSMQW/zDPdURLJdVafYj0fgTVKZ dbbRL5Mk+xBQhaMs/LinJSLhIlIgSBEOcKRyee9cAlyfe1hl4kOTrcrM+JqumM24 Z9KtNFy7c900i7hHOiCiBnZElquoBakIOgujACmwLvGtETbX8EYyUQUZ994MWuMU 6RH2dHlRMrK7XuaFajJMXRq7sx9qOZ63ioc8tVWvCJi9p9G4mIiKY2KWjNXsQlR0 C1n1d/eRMJ3wRZiyBNIovo54lxIXHLUwrxbUsDqKRsoX4ivUBi5bCW4ZEy71tp9b PTWj7L42xRNlgAp/wQo/0Cqt2lOj/TKFQ0xTd8BsmRXL3N0LTEntlivpMhdzc1zb Nf/QnAz3+NOUn2ab/Q2IJ9aqzGPdmEaEyQ0QP0/AMeruJp4Oindd6e+qClJFzw7T mADrMXs4imU+zuoszYnxFchbW9sG0sOUZpNyZ9AKVtON/LkS/ATIHXn3kinqPXcl JGOHrNuELTYqkOMbwsJvBBgBCgAmAhsCFiEEjxd3cRijPdqbpI5iqssyQ2MAUtkF AmFWT50FCQ0r1IcBKQkQqssyQ2MAUtnAXSAEGQEKAAYFAlUjppYACgkQciO1Znjg JSimlAf/eQTOhj7aSKAgiMYK3JaMXd5Xa8YHPi1OJKzeYLWEJDQ4/2LW6Ke2r0a3 6bTkuVJMW4q73VDRjcCsIMA0BtqAOZLtFVKFsg2E9lfsjcIX87z1NvcMoNMJ1oOG 546uZOkpfonb1zajlMNtUiMZyNUyy9BDIz+jr/LsNc/wF2TIj97B2wS3y6T1PhWl lMFXWKDj33zRjNFrKSlgWg6fQv4xdx//yiQCmO0x6FEjM1F6NhPfTfDVHxd9AgoN ZFEYPBBc715VJqLD5nYRsTihE6RjkiZqUP6wrgViezGcrjDc7vh8aVgJ3dDZwCNJ J/JUSpyPK5SiDpaByZZ4ozEJMtmk76sZDp9LZ+GWUteIVNsX401MyWU6WI5CDZ+s 3m7xkDqgLH8LiBoyVrbPDJGltQPvlvu/ML+KPQbQ+VUQIY/eczhSJU0gsHPX16A/ lYaAgqvs3Mm30V03Jax/ZApffrACiz7zTXEkhj9ckSAjJ71EYbAr1SDhktmobZnt 6mYMFHR6VuiUSL5Qo6HdxJi3b6tAzzsAJY5HtX9ZjuUuym5LVwIaMDBhIOmwXbfC iviAL/MY2R0BfSZHNA/vfFqs2XyIzl2RpCLLTHtHT/gxcnQ04e5kcXHLNGgblcaD oUyfkuUsGKN+ZasVBG2vu3UEGeN9mJ+WWlyNE9W7vvBlgUS7ufA6feT4CGXC4UL4 OIVb8po73oMq99oaiSuNoTuUWux6qtnv0oah7ga+zqlm7+msIkGTQoea94EJ9CMu 3KMJbLlPJgd8ObRdmc0eZw+GnJU6qNvtP8zg53W5s76bMJNL3u2AsGx114pkTjkh YRGIRJngT0rWzbE4fa3bh3QDFA9b4ddocqNNEwE0+k/5GwgPDqH5lX6X/7wDEVNo haQrlWjB/VqYxqToIHJqvoxDVZcDRpBN9D4Hw/06qmVX/VkVFKmcx4dXMuy5ADye opA0A8JYxy6Vmae0IKvCwm8EGAEKACYCGwIWIQSPF3dxGKM92pukjmKqyzJDYwBS 2QUCYGUNFAUJDDqR/gEpCRCqyzJDYwBS2cBdIAQZAQoABgUCVSOmlgAKCRByI7Vm eOAlKKaUB/95BM6GPtpIoCCIxgrcloxd3ldrxgc+LU4krN5gtYQkNDj/Ytbop7av RrfptOS5UkxbirvdUNGNwKwgwDQG2oA5ku0VUoWyDYT2V+yNwhfzvPU29wyg0wnW g4bnjq5k6Sl+idvXNqOUw21SIxnI1TLL0EMjP6Ov8uw1z/AXZMiP3sHbBLfLpPU+ FaWUwVdYoOPffNGM0WspKWBaDp9C/jF3H//KJAKY7THoUSMzUXo2E99N8NUfF30C Cg1kURg8EFzvXlUmosPmdhGxOKETpGOSJmpQ/rCuBWJ7MZyuMNzu+HxpWAnd0NnA I0kn8lRKnI8rlKIOloHJlnijMQky2aTvBD4On1znhsMFzW3PpQ7Nq2JcjXC4waki +gj60K3EnwTCvJeJ2u4RTea3wm0lHUT9m0r33S3tDlRZmRrwJARL4LyujR5ZkKEu 4FrLfTMleqP79TazSB6ajrG4lmTPP6/J9K3gZCqG31DT7kelDONe0nZPhmKdU1NO +G0wlwx3CufXfmhK8XJsC+b3gGtGTkI4nQ6HtU6hTmFvKuTpsFw8I6CPBBHvUq29 0tjfp2WHD1nSMUmyxe519rViPuvWrtsludZ0TyjLiQ6b5j/zapiaen+IOrnsdJBJ QPKF8755OneenmCIRYYLrW4HS7YYAr9TeN243X4UbzMa9NuH5v/EX8QBAky2/0ng EgHSX/NkHu0q9kQn5YsL/qQKuLE79lMsThXCq5eo50r+j0uoguXkGSRPaFcSFImM XHTBnMK1iWJHPsY8/K5sidRRa1vE+qYqIrtf/cTpMCEcQkDlU/8xdWknTwYDgxIE NAzrVqTcze0coBgdhEC6vnAPM7eylDYBg18Xrj/Mfd2xwjDC5RiH8PjFdLx6Zqui qsa7K8SFqdJj7TXmXyqNLKD40igup9WdG0aTpXc9qrUJ14Nx6DaOpxG75E1loY/l m8WsXD5CuNIqjZaH5aG4AMLCbwQYAQoAJgIbAhYhBI8Xd3EYoz3am6SOYqrLMkNj AFLZBQJcsIjcBQkLT0lGASkJEKrLMkNjAFLZwF0gBBkBCgAGBQJVI6aWAAoJEHIj tWZ44CUoppQH/3kEzoY+2kigIIjGCtyWjF3eV2vGBz4tTiSs3mC1hCQ0OP9i1uin tq9Gt+m05LlSTFuKu91Q0Y3ArCDANAbagDmS7RVShbINhPZX7I3CF/O89Tb3DKDT CdaDhueOrmTpKX6J29c2o5TDbVIjGcjVMsvQQyM/o6/y7DXP8BdkyI/ewdsEt8uk 9T4VpZTBV1ig49980YzRaykpYFoOn0L+MXcf/8okApjtMehRIzNRejYT303w1R8X fQIKDWRRGDwQXO9eVSaiw+Z2EbE4oROkY5ImalD+sK4FYnsxnK4w3O74fGlYCd3Q 2cAjSSfyVEqcjyuUog6WgcmWeKMxCTLZpO9lmg6eKqb7zs4QukYeDf8OBpeJtn3U 4D8WtbgmeI55rHZ5nCgWJoxb3x6fW7uEDq4Uo4oEaIEg5k7ERIU5NI1/cBAZrBQl EiZns7j6nSybuDfunm9VUtulyNk1n7cw+1SRf+y5kiqIwnSSGajrHkJ7RDCN6Apd EO7XFdPLCdWXNvvs4ZyI/rcnSOqlTJ/WFoRvSubj44QPIHXw+Mb/xFKpRccqyDbo eU+a9h57JGFwUAp/XKr07NrDQUZn5QhRvrfQ8D0O17BSyqcpxGjZOliXruzFz7t5 G+CyUrvpm++KHmVrtJAGBItUHJGFwghXFWe8NfRy+g7Xod/EsJmVOXNOLSenjjK+ qVH5KbMGry+Aleu8CRWkeUZyR26kUMqsD0DDL1pZg7hZKlfyct0CR/xW8d576vFh L5EE6zqPggbg+IfJ29NZqw1RyelXGxDT8YpHM2Q+DZV1bYitTqEWCe3RTl2Kr7cq oVXNMeCdg6d7XYUNNqxiTUDBp1VkmSSBcE/LB7scxjwjcc4i5ePxSTj23wbrvH/w wEbHRpsfFn742cwDMrCUwguQSu/7bzSTkU+/5WvyqTou5m1i1323BfbWPaGbuaT7 eUoIAFRjuBrovU8kY/SJ02MywsJvBBgBCgAPAhsCBQJY5iO2BQkHhOQgAUAJEKrL MkNjAFLZwF0gBBkBCgAGBQJVI6aWAAoJEHIjtWZ44CUoppQH/3kEzoY+2kigIIjG CtyWjF3eV2vGBz4tTiSs3mC1hCQ0OP9i1uintq9Gt+m05LlSTFuKu91Q0Y3ArCDA NAbagDmS7RVShbINhPZX7I3CF/O89Tb3DKDTCdaDhueOrmTpKX6J29c2o5TDbVIj GcjVMsvQQyM/o6/y7DXP8BdkyI/ewdsEt8uk9T4VpZTBV1ig49980YzRaykpYFoO n0L+MXcf/8okApjtMehRIzNRejYT303w1R8XfQIKDWRRGDwQXO9eVSaiw+Z2EbE4 oROkY5ImalD+sK4FYnsxnK4w3O74fGlYCd3Q2cAjSSfyVEqcjyuUog6WgcmWeKMx CTLZpO8WIQSPF3dxGKM92pukjmKqyzJDYwBS2R+5Dp4woT/lj4uJl4664XLdybPt fsMFUOtGYhBK66fyPXbPai+XbvXZSSAOe74QPO1coAQrfTnZmhWk2y8aSLYwwHHa StSa0XCgCGTowSCmqUZFx+GzkGvl948cL+fK0KalU80axs7MMTBblxVbjh2D3L7Y ib65wLTyei/HgMT3inbUp/2XgsrO1AUfd5JLKM0oVhnyLmx3BB7IZBEDytQEBXSH g7+xhru3wBpOyXLb+CXNb0PeL+rubdh2YH4zkq4KqkhWEitWetDBMaf9bcSA0h/D Y+AC+cBXCQ0QhWlQz5Xkyj2yHkX25jgRDlry3nrTTmTtbPxraDyLTyRBt0UhtyYi Ey7XdIP3yLvssieUKnwfP+32iumVYbiVGDUvmzYeEM5A3892WIR6cKBQCs6H2LD6 wyiTl1Z41u5AhfaAAhPd7mzb4GM5U3dwx+7iCCWyp07l2DcOjJ/p6Lx6iYAzAERV wzM/4e9jcsQ1tZXUHgti/pnpdFm7l39xkN4VrQB/RNGBqKSYf3/iU3EveDe7vLCQ tBUp0n6Ch/++Vv1oeGlwC8IaRIXpHAqelPEo99RqPFaI5C+0VBqFarGr6zk4o07u j2UBP1AeJOarz9WV1/8nlucFjLTCwm8EGAEKAA8FAlUjppYCGwIFCQPCZwABQAkQ qssyQ2MAUtnAXSAEGQEKAAYFAlUjppYACgkQciO1ZnjgJSimlAf/eQTOhj7aSKAg iMYK3JaMXd5Xa8YHPi1OJKzeYLWEJDQ4/2LW6Ke2r0a36bTkuVJMW4q73VDRjcCs IMA0BtqAOZLtFVKFsg2E9lfsjcIX87z1NvcMoNMJ1oOG546uZOkpfonb1zajlMNt UiMZyNUyy9BDIz+jr/LsNc/wF2TIj97B2wS3y6T1PhWllMFXWKDj33zRjNFrKSlg Wg6fQv4xdx//yiQCmO0x6FEjM1F6NhPfTfDVHxd9AgoNZFEYPBBc715VJqLD5nYR sTihE6RjkiZqUP6wrgViezGcrjDc7vh8aVgJ3dDZwCNJJ/JUSpyPK5SiDpaByZZ4 ozEJMtmk7xYhBI8Xd3EYoz3am6SOYqrLMkNjAFLZJ0UOoJCGTE+1TxtIIPTfhdM1 +2NGwoBk1OVR/3xHfy81E0UC9KjM/jC8fzF1t4nGkBftbD3jIkigwFNcbrmLfJ96 VeYKZtcw9PrggRDM6sMMURg6Iw2kbNtQiIEburwkUNzAxaYiSo2KmuhF7ZIm3k1i OsqPcPXVB/josNLJDSxfzCcRsLxO+CdQa9qbwbEzrjwi9DXZNN9tO7hYUY1suKJ6 mxCeMwPi+u/2Ecwgm7Vm7qDrrJ/a6kMIq9FR2wXJuxSL8FvFN/WpcViSJc6d/+bE Rti6uMZmCMtKMR0DWh658NSjo+e3fBRFnOK2HmY0zmJJMjnnnc/WoLpes+spGtTj y9O0Cm/pWeSJXNMvmDkrTRunyH4l6LSQXCUAXcjsXcYKv2g1TqS/RAac2OKtdaG/ PXPHqrKJ5s/EIKOz4oWkzMl6WRP36TwdoRxBvyMRrF9znOX/fXHCR/yuf4Eilp8J 6P4B8UMmy6WlPsva4QWFhmc+5c8n2SBdUCAV2mkgwqCpDTR5Cs9jYal1UcxmFZBV OIXakAhe6468IOtyFEyNVYF9taIMDL9YFukl6ZoX7UgdwfnKbQQWBRjjFpcigaNF XuwkEDh4MBNicSOdhoItEg89lEbzxQ== =VIUO -----END PGP PUBLIC KEY BLOCK----- """ [authorization.dvn] sign_commit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 0CC0 11A7 C3DC 6EB4 7567 9BC9 AC0A BA31 866A 7E76 Comment: Devan Carpenter Comment: dvn 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 =2GFA -----END PGP PUBLIC KEY BLOCK----- """ sequoia-git-0.5.0/scripts/gitlab.sh000075500000000000000000000031551046102023000153510ustar 00000000000000#!/bin/bash set -exuo pipefail if test x$CI_DEFAULT_BRANCH = x then : Environment variable CI_DEFAULT_BRANCH not set. exit 1 fi : HEAD is $(git rev-parse HEAD). MAIN=refs/remotes/origin/$CI_DEFAULT_BRANCH : Default branch is $CI_DEFAULT_BRANCH, $(git rev-parse $MAIN). if git merge-base --is-ancestor $MAIN HEAD then : $CI_DEFAULT_BRANCH can be fast-forwarded. : : Commits since $CI_DEFAULT_BRANCH: git log --format=oneline $MAIN..HEAD : : Authenticating commits: sq-git log --keep-going --trust-root `git rev-parse $MAIN` else FORK=`git merge-base $MAIN HEAD || true` if test x$FORK = x then : Failing. HEAD does not appear to have a common fork point : with $MAIN. : : If HEAD and $MAIN have a common fork point, then you : probably did a shallow clone. : git rev-parse --is-shallow-repository : : If so, go to: : : Project / Settings / CI/CD / General pipelines / Git strategy : : And make sure "git shallow clone" is set to "0". This causes : gitlab to fetch all of the history. : : Alternatively, you can use the GIT_DEPTH variable to set this on : a per-job basis. exit 1 else : MR needs to be merged or rebased. Fork point is $FORK. : : Authenticating commits: git log --format=oneline $FORK..HEAD : : Authenticating commits, using fork point $FORK as trust root: sq-git log --keep-going --trust-root $FORK : Failing. Cannot fast-forward $MAIN. exit 1 fi fi sequoia-git-0.5.0/spec/Makefile000064400000000000000000000010001046102023000144360ustar 00000000000000#!/usr/bin/make -f # dependencies: # apt install weasyprint xml2rfc ruby-kramdown-rfc2629 draft = draft-sequoia-git OUTPUT = $(draft).txt $(draft).html $(draft).xml $(draft).pdf all: $(OUTPUT) %.xmlv2: sequoia-git.md kramdown-rfc2629 < $< > $@.tmp mv $@.tmp $@ %.xml: %.xmlv2 xml2rfc --v2v3 $< -o $@ %.html: %.xml xml2rfc $< --html -o $@ %.txt: %.xml xml2rfc $< --text -o $@ %.pdf: %.xml xml2rfc $< --pdf -o $@ clean: -rm -rf $(OUTPUT) $(draft).xmlv2 .PRECIOUS: $(draft).xmlv2 .PHONY: clean all sequoia-git-0.5.0/spec/sequoia-git.md000064400000000000000000001101401046102023000155550ustar 00000000000000--- title: Supply Chain Security for Version Control Systems abbrev: Supply Chain Security for VCSs docname: draft-nhw-openpgp-supply-chain-security-vcs-00 date: 2023-06-20 category: info submissiontype: independent ipr: trust200902 area: int workgroup: openpgp keyword: Internet-Draft stand_alone: yes pi: [toc, sortrefs, symrefs] venue: group: "OpenPGP" type: "Working Group" mail: "openpgp@ietf.org" arch: "https://mailarchive.ietf.org/arch/browse/openpgp/" repo: "https://gitlab.com/sequoia-pgp/sequoia-git" latest: "https://sequoia-pgp.gitlab.io/sequoia-git/" author: - ins: N.H. Walfield name: Neal H. Walfield org: Sequoia PGP email: neal@sequoia-pgp.org - ins: J. Winter name: Justus Winter org: Sequoia PGP email: justus@sequoia-pgp.org normative: RFC2119: RFC4880: RFC8174: toml: author: - ins: T. Preston Werner name: Tom Preston-Werner - ins: P. Gedam name: Pradyun Gedam title: TOML v1.0.0 date: 2021-01-12 target: https://toml.io/en/v1.0.0 informative: event-stream: author: - ins: T. Hunter name: Thomas Hunter II title: "Compromised npm Package: event-stream" date: 2018-11-27 target: https://medium.com/intrinsic-blog/compromised-npm-package-event-stream-d47d08605502 dependency-confusion: author: - ins: A. Birsan name: Alex Birsan title: "Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies" date: 2021-02-09 target: https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610 reflections-on-trusting-trust: DOI.10.1145/358198.358210 guix: author: - ins: L. Courtès name: Ludovic Courtès title: Building a Secure Software Supply Chain with GNU Guix date: 2022-06 doi: 10.48550/arXiv.2206.14606 target: https://arxiv.org/abs/2206.14606 --- abstract In a software supply chain attack, an attacker injects malicious code into some software, which they then leverage to compromise systems that depend on that software. A simple example of a supply chain attack is when SourceForge, a once popular open source software forge, injected advertising into the binaries that they delivered on behalf of the projects that they hosted. Software supply chain attacks are different from normal bugs in that the intent of the perpetrator is different: in the former case, bugs are added with the intent to harm, and in the latter they are added inadvertently, or due to negligence. Software supply chain security starts on a developer's machine. By signing a commit or a tag, a developer can assert that they wrote or approved the change. This allows users of a code base to determine whether a version has been approved, and by whom, and then make a policy decision based on that information. For instance, a packager may require that software releases be signed with a particular certificate. Version control systems such as git have long included support for signed commits and tags. Most developers don't sign their commits, and in the cases where they do, it is usually unclear what the semantics are. This document describes a set of semantics for signed commits and tags, and a framework to work with them in a version control system, in particular, in a git repository. The framework is designed to be self contained. That is, given a repository, it is possible to add changes, or authenticate a version without consulting any third parties; all of the relevant information is stored in the repository itself. By publishing this draft we hope to clarify and enrich the semantics of signing in version control system repositories thereby enabling a new tooling ecosystem, which can strengthen software supply chain security. --- middle # Introduction ## Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 {{RFC2119}} {{RFC8174}} when, and only when, they appear in all capitals, as shown here. ## Terminology - "Maintainer" is a software developer, who is responsible for a software project in the sense that they act as a gatekeeper, and decide with other maintainers what changes are acceptable, and should be added to the software. - "Contributor" is someone who contributes changes to a software project. Unlike a maintainer, a contributor cannot add their changes to a project on their own accord. - "Software supply chain" is the collection of software that something depends on. For instance, a software package depends on libraries, it is built by a compiler, it is distributed by a package registry, etc. - "Software supply chain attack" is an attack in which an attacker compromises a software supply chain. For instance, a maintainer or a contributor may stealthily insert malicious code into a software project in order to compromise the security of a system that depends on that software. - "Version control system" is a database, which contains versions of a software project. Each version includes links to preceding versions. - "git" is a popular version control system. Although "git" is distributed and does not rely on a central authority, it is often used with one to simplify collaboration. Examples of centralized authorities include gitea, GitHub, and Gitlab. - "Commit" is a version that is added to the "version control system". In git, commits are identified by their message digest. - "Branch" is a typically human readable name given to a particular commit. When a commit is superseded, the branch is updated to point to the new commit. Repositories normally have at least one branch called "main" or "master" where most work is done. - "Tag" is a name given to a particular commit. Tags are usually only added for significant versions like releases and are normally not changed once published. - "Change" is a commit or a tag. - "Forge" is a service which hosts software repositories, and often provides additional services like a bug tracker. Examples of forges are codeberg, GitHub, and GitLab. - "Registry" or "Package Registry" is a service that provides an index of software packages. Maintainers register their software there under a well-known name. Build tools like `cargo` fetch dependencies by looking up the software by its name. - "Authentication" is the process of determining whether something should be considered authentic. - "Trust model" is a process for determining what evidence to consider, and how to weigh it when doing authentication. - "OpenPGP certificate" or just "certificate" is the data structure that section 11.2 of {{RFC4880}} defines as a "Transferable Public Key". A certificate is sometimes called a key, but this is confusing, because a certificate contains components that are also called keys. - "Liveness" is a property of a certificate, a signature, etc. An object is considered live with respect to some reference time if, as of the reference time, its creation time is in the past, and it has not expired. # Problem Statement Consider the following scenario. Alice and Bob are developers. They are the primary maintainers of the Xyzzy project, which is a free and open source project. Although they do most of the work on the project, they also have occasional collaborators like Carol, and drive-by contributions from people like Dave. Paul packages their software for an operating system distribution. Ted from Ty Coon Corporation integrates it into his company's software. And, Mallory is an adversary who is trying to subvert the project. When someone updates their local copy of Xyzzy's source code repository, they want to authentic any changes before they use them. That is, they want to know that each change was made or approved by someone whom they consider authorized to make that change. In the Xyzzy project, Alice is willing to rely on Bob to check-in changes he makes, and to approve contributions from third parties without auditing the code herself. But, she doesn't want to rely on anyone else without checking their proposed changes manually. Bob feels the same way about Alice. In version control systems like `git`, the meta-data for a commit or tag includes `author` and `committer` fields. By themselves, these fields cannot be used to reliably determine who a change's author and committer are, because these fields are set by the committer and unauthenticated. That is, Mallory could author a commit, set both of these fields to "Bob," and push the malicious commit. No one would be able to tell that they came from Mallory and not Bob. There are two main ways to authenticate changes. First, changes to a repository or branch can be mediated by a trusted third party, which enforces a policy at the time a change is added to the repository. Second, individual changes can be signed, and a policy can be evaluated at any time. These two approaches can be mixed. ## Repositories Protected by a Trusted Third Party When using a trusted third party, only certain users are allowed to change the repository. This is often realized using access control lists: the trusted third party has a list of users who are allowed to do certain types of modifications. Before the trusted third party allows a user to modify the repository, the user has to authenticate themselves. When they attempt to make a change, the trusted third party checks that they are authorized. If they are, the third party allows the modification. If not, it is rejected. A user of this repository can now conclude that if they can authenticate the trusted third party, then the changes were approved. A drawback of using a trusted third party is that it relies on centralized infrastructure. This means the only way for a user to determine if a version of Xyzzy is authentic is to fetch it from the trusted third party; the repository is not self authenticating. If the third party ever disappears, users will no longer be able to authenticate the project's source code. Another disadvantage is that this approach doesn't expose the project's policy to its users. This means that both first-parties like Alice and third-parties like Paul are not able to audit the trusted third party. This is the case even if the set of users that are currently authorized to make changes are exposed via a separate API end point: because the set of authorized users changes with time, all updates to the ACLs would need to be exposed along with information about what user authorized each change. ## Self-Authenticating Repositories An alternative approach is to have authors and committers sign their changes. Users then check that the changes are signed correctly, and authenticate the signers. For instance, for the Xyzzy project, Paul might decide that Alice or Bob are allowed to make changes. So when Paul fetches changes, he checks whether Alice or Bob signed the new changes, and flags changes made by anyone else. If Alice and Bob later decide that Carol should also be allowed to directly commit her changes, Paul needs to update his policy. If Bob leaves the team, Paul needs to pay enough attention to notice, and then disallow changes made by Bob after a certain date. For projects that sign their commits today, this is more or less the status quo. Most users, however, do not want to maintain their own policy, and aren't even in a good position to do so. Since users are willing to rely on the maintainers to make changes to the project, they can just as well delegate the policy to them. Now, a user like Paul just needs to designate an initial policy. If he knows when the policy changes, and can authenticate changes to the policy based on the existing policy, then he is able to authenticate any subsequent changes to the repository. An easy way to manage the policy is to include it in the repository itself. Then changes to the policy can be authenticated in the same way as normal changes. This also makes the repository self authenticating, because it is self contained. One issue is how users should handle forks to a project. A fork in a project may occur due to a social or technical conflict, or because the project dies, and is later revived by a different party. In both cases, it may not be possible for there to be a clean hand off to the new maintainer. That is, Alice or Bob may not be willing or able to change the policy file to allow Dave to seamlessly continue the development of Xyzzy. Forks are straightforward to handle, but require user intervention: from the system's perspective, Dave is not authorized, so his changes are rejected. And that's good, as Dave may be an attacker; the system can't tell. Users opt in to a fork by changing their trust root to designate a version in which Dave is authorized to make changes. # Threat Model Consider an attacker, Mallory, who is trying to compromise a user, Ursula, by injecting a vulnerability into the software supply chain of a piece of software, Super Frob, that she uses. There are several different ways that Mallory could accomplish this. These include: - Mallory could pose as a contributor, and convince a develop to authorize a malicious change to one of Super Frob's dependencies, such as a library. - Mallory could take over an abandoned package that Super Frob depends on, and publish a new version with malicious code. - Mallory could use typo squatting to opportunistically or through social engineering inject malicious software into Super Frob's supply chain. For instance, Mallory could publish a library called `libevent`, which is a copy of `libevents`, but includes a malicious change, and Super Frob accidentally includes `libevent` as a dependency instead of `libevents`. - Mallory could publish a malicious package that has the same name as a package on another registry in order to confuse Super Frob's build tools. This type of attack is called a dependency confusion attack, {{dependency-confusion}}. It can be launched when an organization uses an internal registry and a public registry to find dependencies. As dependencies are often referenced by name, and that name does not include the registry, an attacker may trick the organization into using their malicious version of the package. - Mallory could sneak a change into one of Super Frob's build dependencies, like the compiler. Whereas software maintainers have a large degree of control over their direct dependencies, they have more limited control over the tools downstream users use to build their software. In the extreme, a software project may include a copy of a dependency in their version control system, or depend on a specific version of a dependency by cryptographic hash, but only specify a standard that the compiler needs, like C99. This attack is most well-known from Ken Thompson's Reflections on Trusting Trust Turning award lecture, {{reflections-on-trusting-trust}}. - Mallory could compromise the tools that a developer uses, e.g., by publishing a useful, but malicious plug-in for an editor, which detects certain code patterns, and quietly modifies them to insert malicious code. - Mallory could compromise the systems that the developers use, and modify their source code repositories. For instance, if Mallory gets access to a developer's machine, he could stealthy modify code before it is signed and committed. Or, he could exfiltrate the developer's signing key, or login credentials and imitate her. Similarly, if a software project uses a forge and Mallory is able to compromise the forge, he could modify the source code. - Mallory could compromise Super Frob or one of its dependencies as it is being downloaded. For instance, if a package registry like `crates.io` depends on a content delivery network (CDN) to distribute packages, a compromised node in the CDN may return a modified version of the software to the user. The setting is as follows. To protect herself from Mallory, Ursula has to make sure that versions of the software she obtains do not contain malicious code. Ursula cannot afford to audit every version of the software, but she is willing to rely on the maintainers of the project to not add malicious code, and to review contributions from third parties. The framework presented in this specification allows Ursula to audit a dependency and its developers once, and then to delegate decisions of what code and dependencies to include to the developers. Assuming the developers are reliable, this can protect Ursula from attacks where Mallory is not explicitly authorized to make a change. For instance, if the developers of an abandoned software package do not authorize a new maintainer, Ursula will be warned when a package has a new maintainer, as she can no longer authenticate it. She can then reaudit it. Similarly, when the software is modified in transit by a machine in the middle, Ursula will not be able to authenticate it. This can also stop dependency confusion attacks, because the software cannot be authenticated. It won't however, stop a downgrade attack, as older versions can still be authenticated. This framework cannot protect Ursula from mistakes that she or a developer of the software that she depends on makes. For instance, if Mallory is able to convince a developer to authorize a malicious change to their software, this framework consider the change to be legitimate. This framework can facilitate forensic analysis in these case by making it easier to identify changes approved by the same person (potentially across different projects) and thereby conduct a targeted audit. # Authentication This framework helps users authenticate three types of artifacts: commits, tags, and tarballs or other archives. ## Policy Every commit has an associated policy. If a commit contains the file `openpgp-policy.toml` in the root directory, then that file describes the commit's policy. If the commit does not contain that file, the void policy is used. The void policy rejects everything. `openpgp-policy.toml` is a TOML v1.0.0 file {{toml}}. Version 0 defines the following three top-level keys: `version`, `authorization`, and `commit_goodlist`. If a parser recognizes the version, but encounters keys that it does not know, then it must ignore the unknown keys. This allows a degree of forwards compatibility. ### version The value of the `version` key is an integer and must be `0`: version = 0 If the value of `version` is not recognized, the implementation SHOULD error out. It MAY instead treat the policy as the void policy. ### authorization `authorization` is a table of authorization entries. Each key in the `authorization` table is a free-form identifier, which is chosen by the user of the system. The identifier SHOULD be a UTF-8 encoded, human-readable string that identifies an entity. Examples of identifiers are `alice`, `Bob `, `Boty McBotface `. The value of each authorization entry is another table. The table has the following entries: - `keyring` - `sign_commit` - `sign_tag` - `sign_archive` - `audit` - `add_user` - `retire_user` #### keyring The value of `keyring` is a string. It contains one or more OpenPGP certificates. The OpenPGP certificates MUST be ASCII-armored. An ASCII-armored block MAY contain more than one OpenPGP certificate. The string MAY contain multiple ASCII-armored blocks. An implementation SHOULD ignore valid OpenPGP certificates that is does not support, and MAY emit a warning that a certificate, or component is not supported. An implementation SHOULD return an error if it encounters something other than an OpenPGP certificate encoded with ASCII armor. When adding a certificate, an implementation SHOULD only add components that are needed to validate the signatures. That is, an implementation SHOULD strip subkeys that are not signing capable, and third-party signatures. For components that are kept, an implementation SHOULD include all known self signatures, and not just the newest self signature. #### sign_commit The value of `sign_commit` is a boolean. If `true`, then the entity is authorized to sign commits. #### sign_tag The value of `sign_tag` is a boolean. If `true`, then the entity is authorized to sign tags. #### sign_archive The value of `sign_archive` is a boolean. If `true`, then the entity is authorized to sign tarballs or other archives. #### audit The value of `audit` is a boolean. If `true`, then the entity is authorized to add commits to the top-level `commit_goodlist` array. #### add_user The value of `add_user` is a boolean. If `true`, then the entity is authorized to add new entities to the authorization table, to grant them any capabilities that they have, and to add new certificates to any entity's keyring. Note: no special capability is required to extend an existing certificate. For instance, an entity that has the `sign_commit` capability can add new user IDs, new subkeys, and new signatures to any existing certificate. Adding new certificates requires the `add_user` capability, and removing most packets from an existing certificate requires the `retire_user` capability. #### retire_user The value of `retire_user` is a boolean. If `true`, then the entity is authorized to retire capabilities from any entity. This includes capabilities that they do not have. The entity is also authorized to remove certificates, and to strip components and signatures from existing certificates. If an entity does not have the `retire_user` capability, it is still possible for the entity remove some packets. The following algorithm determines whether a change is allowed: - Ignore marker packets. - Ignore third-party certifications. A third-party certification is a signature packet where none of the issuer packets and none of the issuer fingerprint packets alias the certificate's fingerprint. - Consider all of the remaining non-signature packets to be components. - Iterate over the packets in the certificate in the parent commit's policy in order. For each signature create a tuple consisting of the signature and the preceding component. Call the set of tuples `P`. - Repeat the previous step for the version of the certificate in the child commit's policy, but call the set of tuples `C`. - If `P`, the set of tuples derived from the version of the certificate in the parent policy, minus `C`, the set of tuples derived from the version of the certificate in the child policy, is not empty, then the update requires the `retire_user` right. Note: This algorithm does not check signatures for cryptographic validity. This means it is possible to handle signatures that use signature versions, and cryptographyic algorithms that the implementation does not support. Changing a signature's associated component is only allowed if the entity has the `retire_user` right. An entity can always add new signatures. Components are only considered in the context of a signature. Consider the following certificate: - Primary Key - Signature - User ID A - User ID B - Signature Since the algorithm above would not create any tuples consisting of user ID `A` and a signature, removing the user ID `A` packet does not require the `retire_user` right. #### Example The following is an example of an authorization entry. The user has been granted all the capabilities. The user is identified by two different OpenPGP certificates. The certificates are contained in two concatenated ASCII armored blocks. [authorization."Neal H. Walfield "] sign_commit = true sign_tag = true sign_archive = true add_user = true retire_user = true audit = true keyring = """ -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: F717 3B3C 7C68 5CD9 ECC4 191B 74E4 45BA 0E15 C957 Comment: Neal H. Walfield (Code Signing Key) Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield Comment: Neal H. Walfield xsEhBFUjmukBDqCpmVI7Ve+2xTFSTG+mXMFHml63/Yai2nqxBk9gBfQfRFIjMt74 =MESu -----END PGP PUBLIC KEY BLOCK----- """ ### commit_goodlist The value of `commit_goodlist` is an array of strings where each string contains a commit identifier. The commit identifier MUST be a full hash. The commit identifier MUST NOT be a branch name, a tag name, or a truncated hash. Commits listed in the `commit_goodlist` are commits that have retroactively been marked as valid. This may be useful when a certificate's private key material has been compromised. ## Authenticating Commits Each commit in a `git` repository is part of a directed acyclic graph (DAG) where a node is a commit, and a directed edge shows how two commits are related. Specifically, the head of a directed edge is a commit that is derived from the tail. Except for the root commits, each commit has one or more parents. A commit that has multiple parents is derived from multiple commits. Conceptually, it merges multiple paths, and as such is called a merge commit. A commit is consider authenticated if at least one of its parent commits considers the commit to be authenticated. This rule is different from Guix's *authorization invariant* as described in {{guix}}, which states that all parent commits must consider the commit to be authenticated. The semantics described here allow a developer to add commits from unauthorized third-parties as-is using a merge commit. Using Guix's authorization invariant, the third party's commit would have to be resigned, which loses the third-party's signature, and consequently complicates forensic analysis. A commit's parent authenticates it as follows. First, the implementation looks up the signer's certificate in the parent commit's policy file. If the implementation finds a certificate, it scans the commit's policy file for any updates to that certificate (and only that certificate) except for revocations. That is, the implementation iterates over all of the certificates in the commit's policy file, and looks for certificates with the same fingerprint. If it finds any, it merges them into the original certificate with the exception of any revocation signatures. In this way, it is straightforward for a user to recover if the certificate in the parent commit's policy file is no longer usable, e.g., because it has expired, or the signing subkey has been replaced. Consider a parent commit whose policy file that contains a certificate that expires at time `t`. After `t`, the certificate is unusable; it can't be used to authenticate any commits made at or after `t`. This mechanism allows the user to easily add new commits by extending their certificate's expiration, and adding the update to a new commit. Revocation certificates are skipped so that it is possible for a user to add a commit that revokes their own certificate, or a component thereof. The implementation SHOULD then canonicalize the certificate so that the active self signatures are those that were active when the signature was made. A self signature is valid, if it is not revoked, and not expired. A self signature is active, if it is the most recent, valid self signature prior to a reference time. That is, if a new commit was made on June 9, 2023, then each component's most recent signature as of June 9, 2023, which is also not revoked, and not expired, is considered that component's active self signature. If the canonicalized certificate is valid as of the signature's time, not expired as of that time, not soft revoked as of that time, not hard revoked at any time, and the signature is correct, then the signature is considered verified. The implementation MAY consider certificate updates from other sources. If it does, it SHOULD only consider hard revocations. The implementation MUST then check that the type of change is authorized by the policy. The following capabilities allow the specified types of changes: - `sign_commit`: Needed for any change. - `add_user`: Needed to delegate a capability to another user. Updating `keyring` does not require this capability if a certificate is only updated, and not added. - `retire_user`: Needed to rescind a capability from another user. - `audit`: Needed to modify the `version` field, and the `commit_goodlist` list. If the signature is considered verified, and the signer is authorized to make the type of change that was made, then the commit is considered authenticated. If the commit is not considered authenticated, because the signer's certificate has been hard revoked, but the commit is included in a later commit's `commit_goodlist`, then the commit is considered to be authenticated. A commit is considered to occur later if when authenticating a range of commits, a commit is a direct descendant of the commit in question, and it is in the commit range. Consider the three commits `a`, `b`, and `c` where `a` is `b`'s parent, `b` is `c`'s parent, the certificate used to sign `b` has been hard revoked, and `c` includes `b` in its `commit_goodlist`. In this case, the hard revocation for the certificate to use `b` is ignored. All other criteria including the fact that the signature on `b` is valid are still checked. ## Authenticating Tags A tag is a special type of commit in `git`, which has no content, but assigns a name to a specific commit. A tag is usually used to mark release points. A tag is authenticated in the same way as a commit, as described in the previous section, with the following exceptions. First, the tagged commit is considered a parent commit, and the tag is considered its child commit. The entity that signed the tag needs the `sign_tag` capability, and only the `sign_tag` capability. ## Authenticating Archives Archives like tarballs are often generated as part of a software's release process. These may be signed. To authenticate an archive with respect to a signature, and a trust root, the trust root's policy is used to authenticate the tarball's signature. The entity that signed the tarball must have the `sign_archive` capability. Unlike a commit, an archive does not have a pointer to the commit that it was derived from. Thus, if an archive is derived from commit `c`, it may be possible to authenticate commit `c`, as well as tags referring to commit `c` using a given trust root, but to not authenticate an archive derived from commit `c` using the same trust root, because the policy changed in the meantime. If the signature includes the notation `commit@notations.sequoia-pgp.org`, then the value of the notation is interpreted as the commit that the archive is derived from. The value of the notation is a hexadecimal value corresponding to the commit's full hash. Truncated hashes MUST be considered erroneous. The commit identifier MUST NOT be a branch name, a tag name, or a truncated hash. Since archives are often verified outside of a repository, one or more repositories may be specified using the `repository@notations.sequoia-pgp.org` notation. In that case, each notation indicates a git repository. For example, the main repository of the reference implementation, `sq-git`, is `https://gitlab.com/sequoia-pgp/sequoia-git.git`. So, archives SHOULD include the `repository@notations.sequoia-pgp.org` notation with `https://gitlab.com/sequoia-pgp/sequoia-git.git` as the value. When `commit@notations.sequoia-pgp.org` is present in the signature, the implementation MUST use that commit's policy to authenticate the archive, and then authenticate that commit by chaining back to the trust root, as described above; in this case, it MUST NOT use the trust root's policy directly unless the specified commit is also the trust root. # Reference implementation A Rust implementation of this specification is part of Sequoia. See https://gitlab.com/sequoia-pgp/sequoia-git for the source code. # Security Concerns ## Malicious vs. Buggy Changes The scheme presented here can help mitigate malicious attacks on a code base, but it does nothing to prevent design flaws or code errors. That is, this scheme does not and cannot provide any protections from normal bugs. ## Trusted Developers The protections outlined in this document are mainly designed to stop third-parties from adding malicious code to a project. This system provides no protection from a developer who is authorized to make changes and turns out to be malicious. That said, because commits are signed, when malicious code is discovered, an audit is required to restore trust in the code base. Using this system, it is easier to identify other code added by the same person, and focus an audit on that code. ## Judging Code vs. Judging Humans The approach described in this document relies on transitive trust. The basic idea is that if a user is willing to run a developer's code, then they can reasonably rely on that developer to modify the code, and to delegate that capability to a third party. Yet, writing and reviewing code is fundamentally different from evaluating another person's intents. This is demonstrated quite well by the events surrounding the popular `event-stream` npm package, {{event-stream}}. In 2018, a new developer gained the trust of the package's maintainer by contributing a number of high-quality changes. The original developer eventually made the new developer the maintainer, and the new maintainer introduced malicious code to steal user's credentials. ## Operational Security Signing commits relies on each developer having a long-term identity key, which they keep safe. If the key is compromised, the attacker is able to impersonate the developer. It is possible to limit the damage by revoking the compromised key, or having another authorized user retire the developer's access. In this regard, sigstore appears to be better as it relies on ephemeral signing keys, which are issued by a central authority. However, in order to obtain a signing key, the user needs to log in. If they use a password, then if an attacker gets access to the password, an attacker can impersonate the developer. If the developer uses a second factor like a hardware token, then they are again using private key cryptography, and may as well put their private keys on a hardware token, and forego the centralized infrastructure. ## Dependencies This specification has concentrated on enabling a user of a software project to authenticate new versions. But most software has its own dependencies, and those also need to be authenticated. A user could identify all software that they are willing to rely on, but this is more work than most users are willing and able to do. But, just as developers are usually in a better position to evaluate who should be allowed to contribute to their project, they are also in a better position to designate a trust root for their dependencies. Enabling this functionality requires ecosystem-specific tooling. The developer needs to be able to specifying a trust root for each dependency, and the build infrastructure needs to authenticate the dependencies. For instance, the Rust ecosystem uses Cargo for building and dependency management. Currently, to add `sequoia-openpgp` as a dependency to a project, a developer would modify their `Cargo.toml` file as follows: [dependencies] sequoia-openpgp = { version = "1" } Instead, they would also specify a trust root, which they've presumably audited: [dependencies] sequoia-openpgp = { version = "1", trust-root = "HASH" } When downloading the dependency, `cargo` would make sure that the dependency can be authenticated from the specified trust root, and if not throw an error. ## Document History This is a first draft that has not been published. # Acknowledgments My thanks go---in particular, but not only---to the Sequoia PGP team for many fruitful discussions. Funding for this project was provided by the Sovereign Tech Fund. sequoia-git-0.5.0/src/cli/mod.rs000064400000000000000000000744501046102023000145520ustar 00000000000000use std::fmt::Write; use std::path::{ PathBuf, }; use clap::{ ArgGroup, Command, CommandFactory, Parser, builder::StyledStr, }; // Note: this file is used both from main.rs and from build.rs. This // means that we can only use what is under the cli module! // // We also try to minimize the number of build dependencies to reduce // the build time. This includes not depending on sequoia-openpgp. // Since we do need a couple of types from sequoia-openpgp, we mock // them in build.rs. If you import another type here, you'll need to // mock that too. use crate::openpgp; use openpgp::{ KeyHandle, // Mock additional imports in build.rs! }; pub mod paths; use paths::StateDirectory; use paths::StateDirectoryValueParser; pub const GLOBAL_OPTIONS_HEADER: &str = "Global Options"; /// Builds the top-level Clap command. pub fn build(globals_hidden: bool) -> clap::Command { let mut command = Cli::command() // To improve readability limit the width of the text columns. .max_term_width(100); // Change the globals to be hidden. if globals_hidden { fn add_after_help(command: &mut Command) { // We want to append to after_long_help. let mut after_long_help = if let Some(s) = command.get_after_long_help() { let mut s = s.clone(); s.write_char('\n').expect("Can write to string"); s.write_char('\n').expect("Can write to string"); s } else if let Some(s) = command.get_after_help() { // If after_long_help is not explicitly set, it // falls back to after_help. If we set // after_long_help, the fallback no longer happens // so we need to do it manually. let mut s = s.clone(); s.write_char('\n').expect("Can write to string"); s.write_char('\n').expect("Can write to string"); s } else { StyledStr::new() }; after_long_help.write_str(&format!("\ {}:\n See `sq-git --help` for a description of the global options.", GLOBAL_OPTIONS_HEADER)) .expect("Can write to string"); *command = command.clone() .after_long_help(after_long_help); for sc in command.get_subcommands_mut() { add_after_help(sc); } } command = command .mut_args(|mut a| { if a.is_global_set() { a = a.hide(true); } a }); add_after_help(&mut command); }; command } #[derive(Parser)] #[command( author, name = "sq-git", version = format!("{}", clap::crate_version!()), about = "A tool to help protect a project's supply chain.", long_about = "\ `sq-git` is a tool that can help improve a project's supply chain \ security. To use `sq-git`, you add a policy file (`openpgp-policy.toml`) to \ the root of a `git` repository. The policy file includes a list of \ OpenPGP certificates, and the types of changes they are authorized to \ make. The capabilities include adding a commit, and authorizing a new \ certificate. See the `sq-git init` and `sq-git policy` \ subcommands for more details. A commit is considered authorized if the commit is signed, and at \ least one immediate parent commit's policy authorizes the signer's \ certificate to make that type of change. A downstream user authenticates a version of the project using the \ `sq-git log` subcommand. They specify a trust root (a commit), \ which they've presumably audited, and `sq-git log` looks for an \ authenticated path from the trust root to the current `HEAD`. If \ there is an authenticated path, then there is evidence that the \ project's maintainers authorized all of the intermediate changes. To find an authenticated path, `sq-git` starts with the current \ commit, and tries to authenticate it using each of its parent commits. \ It repeats this process for each parent commit that authenticated it. \ If the trust root is reached, then the version is considered \ authenticated.", subcommand_required = true, arg_required_else_help = true, disable_colored_help = true, disable_version_flag = true, // We want a top-level `help` subcommand, but we don't want // subcommands groups (like `sq pki`) to have a `help` subcommand. // Users get used to being able to use `help` instead of `--help`, // and then are confused when `sq pki authenticate help` (i.e., // using the `help` subcommand on an action) doesn't work. // // Note: this option is recursive. So if we disable it here, then // we have to enable it for all of the top-level subcommands. disable_help_subcommand = false, )] pub struct Cli { #[clap( long = "home", value_name = "PATH", env = "SEQUOIA_HOME", global = true, help_heading = GLOBAL_OPTIONS_HEADER, help = "Set the home directory", long_help = format!("\ Set the home directory Sequoia's default home directory is `{}`. When using the default \ location, files are placed according to the local standard, \ e.g., the XDG Base Directory Specification. When an alternate \ location is specified, the user data, configuration files, and \ cache data are placed under a single, unified directory. This is \ a lightweight way to partially isolate Sequoia programs. Use `default` to explicitly use the default location, use `none` to \ not use a home directory.", sequoia_directories::Home::default_location() .map(|p| { let p = p.display().to_string(); if let Some(home) = dirs::home_dir() { let home = home.display().to_string(); if let Some(rest) = p.strip_prefix(&home) { return format!("$HOME{}", rest); } } p }) .unwrap_or("".to_string())), value_parser = StateDirectoryValueParser::default(), )] pub home: Option, #[clap( long = "cert-store", value_name = "PATH", env = "SEQUOIA_CERT_STORE", global = true, help_heading = GLOBAL_OPTIONS_HEADER, help = "Specify the location of the certificate store", long_help = format!("\ Specify the location of the certificate store By default, `sq-git` uses \ the OpenPGP certificate directory in Sequoia's home directory (see `--home`), \ {}. This can be overridden by using this options, or setting the either \ the `SEQUOIA_CERT_STORE` or the `PGP_CERT_D` environment variable. Use `default` to explicitly use the default cert store, use `none` to \ not use a cert store.", sequoia_directories::Home::default() .map(|home| { let p = home.data_dir(sequoia_directories::Component::CertD); let p = p.display().to_string(); if let Some(home) = dirs::home_dir() { let home = home.display().to_string(); if let Some(rest) = p.strip_prefix(&home) { return format!("$HOME{}", rest); } } p }) .unwrap_or("".to_string())), value_parser = StateDirectoryValueParser::default(), )] pub cert_store: Option, #[arg( global = true, long = "output-format", value_name = "FORMAT", value_parser = ["human-readable", "json"], default_value = "human-readable", help_heading = GLOBAL_OPTIONS_HEADER, help = "Produces output in the specified format, if possible", )] pub output_format: String, #[arg( global = true, long = "quiet", short = 'q', help_heading = GLOBAL_OPTIONS_HEADER, help = "Shows less information", )] pub quiet: bool, #[clap( global = true, long = "verbose", short = 'v', help_heading = GLOBAL_OPTIONS_HEADER, help = "Shows more information", conflicts_with = "quiet", )] pub verbose: bool, #[command(subcommand)] pub subcommand: Subcommand, } #[derive(Parser, Debug)] #[clap( name = "init", about = "Suggests how to create a policy", long_about = "\ Suggests how to create a policy Suggests how to create a policy by analyzing recent commits. The \ heuristic considers signed commits on the current branch that were \ made over the past half year, and suggests that the most frequent \ committer be made the project maintainer, and other committers be made \ committers. Note: This is a *simple* heuristic; its recommendations should be \ viewed as a starting point. In particular, you still need to do some \ due diligance. It is essential that you review the suggested roles, \ and check that people actually control the certificates. Ideally, you \ should ask each person for their OpenPGP fingerprint in person. But \ in the very least you should ask them via email.", after_help = "\ Examples: # Inspects the current branch and suggests how to create a policy. $ sq-git init ", )] pub struct InitSubcommand { } /// Describe, update, and change the OpenPGP policy. #[derive(Parser)] #[clap( name = "policy", subcommand_required = true, arg_required_else_help = true, disable_help_subcommand = true, )] pub enum PolicySubcommand { /// Describes the policy. /// /// This reads in the policy and dumps it in a more descriptive /// format on stdout. /// /// By default the policy in the root of the repository's working /// tree is described. Describe { #[command(flatten)] policy_file: PolicyFileArg, /// Describe the policy from the specified commit. #[arg(long, conflicts_with="path")] commit: Option, }, /// Shows changes between two policies. /// /// If no arguments are given, compares `HEAD`'s policy, and the /// working tree's policy file (`openpgp-policy.toml`). If one /// argument is given, the policy in the corresponding commit or /// file is compared with the working tree's policy file. /// Otherwise, the policies of the two commits or files are /// compared. /// /// Exit status: /// /// The exit code is 0 if the policies are the same, and 1 if they /// are different. #[clap(group(ArgGroup::new("cert-ref").args(&["old", "old_commit", "old_file"])))] #[clap(group(ArgGroup::new("new-ref").args(&["new", "new_commit", "new_file"])))] Diff { /// The old policy. /// /// This is first interpreted as a commit. If there is no /// such commit, it is interpreted as a filename. /// /// When using this command from a script, you should prefer /// `--old-commit` or `--old-file` instead as they are /// explicit. old: Option, /// The old policy as taken from the specified commit. #[arg(long)] old_commit: Option, /// The old policy as taken from the specified file. #[arg(long)] old_file: Option, /// The new policy. /// /// This is first interpreted as a commit. If there is no /// such commit, it is interpreted as a filename. /// /// When using this command from a script, you should prefer /// `--new-commit` or `--new-file` instead as they are /// explicit. new: Option, /// The new policy as taken from the specified commit. #[arg(long)] new_commit: Option, /// The new policy as taken from the specified file. #[arg(long)] new_file: Option, }, /// Changes the authorizations. /// /// A certificate can delegate any of its capabilities to another /// certificate without breaking an authentication chain. /// /// To fork a project, you create a new policy file. Authorize { #[command(flatten)] policy_file: PolicyFileArg, name: String, #[command(flatten)] cert: CertArg, /// Grant the certificate the sign-commit capability. /// /// This capability allows the certificate to sign commits. /// That is, when authenticating a version of the repository, /// a commit is considered authenticated if it is signed by a /// certificate with this capability. #[arg(long, overrides_with = "no_sign_commit", default_value_ifs( [("committer", "true", Some("true")), ("release_manager", "true", Some("true")), ("project_maintainer", "true", Some("true"))])) ] sign_commit: bool, /// Rescind the sign-commit capability from a certificate. /// /// Removes the sign-commit capability for the certificate. /// Note: this operation is not retroactive; commits signed /// with the certificate prior to the policy change are still /// considered authenticated. #[clap(long)] no_sign_commit: bool, /// Grant the certificate the sign-tag capability. /// /// This capability allows the certificate to sign tags. That /// is, when authenticating a tag, a tag is considered /// authenticated if it is signed by a certificate with this /// capability. #[arg(long, overrides_with = "no_sign_tag", default_value_ifs( [("release_manager", "true", Some("true")), ("project_maintainer", "true", Some("true"))])) ] sign_tag: bool, /// Rescind the sign-tag capability from a certificate. /// /// Removes the sign-tag capability for the certificate. /// Note: this operation is not retroactive; tags signed with /// the certificate prior to the policy change are still /// considered authenticated. #[clap(long)] no_sign_tag: bool, /// Grant the certificate the sign-archive capability. /// /// This capability allows the certificate to sign tarballs or /// other archives. That is, when authenticating an archive, /// an archive is considered authenticated if it is signed by /// a certificate with this capability. #[arg(long, overrides_with = "no_sign_archive", default_value_ifs( [("release_manager", "true", Some("true")), ("project_maintainer", "true", Some("true"))])) ] sign_archive: bool, /// Rescind the sign-archive capability from a certificate. /// /// Removes the sign-archive capability for the certificate. /// Note: this operation is not retroactive; archives signed /// with the certificate prior to the policy change are still /// considered authenticated. #[clap(long)] no_sign_archive: bool, /// Grant the certificate the add-user capability. /// /// This capability allows the certificate add users to the /// policy file, and to grant them capabilities. A /// certificate that has this capability is only allowed to /// grant capabilities that it has. That is, if Alice has the /// `sign-commit` and `add-user` capability, she can grant Bob /// either of those capabilities, but she is can't grant him /// the `sign-tag` capability, because she does not have that /// capability. #[arg(long, overrides_with = "no_add_user", default_value_ifs( [("project_maintainer", "true", Some("true"))])) ] add_user: bool, /// Rescind the add-user capability from a certificate. /// /// Removes the add-user capability for the certificate. /// Note: this operation is not retroactive; operations that /// rely on this grant prior to the policy change are still /// considered authenticated. /// /// Rescinding the add-user capability from a certificate does /// not rescind any grants that that certificate made. That /// is, if Alice grants Bob the can-sign and add-user /// capability, Bob grants Carol the can-sign capability, and /// then Alice rescinds Bob's can-sign and add-user /// capabilities, Carol still has the can-sign capability. In /// this way, a grant is a copy of a capability. #[clap(long)] no_add_user: bool, /// Grants the certificate the retire-user capability. /// /// This capability allows the certificate to rescind /// arbitrary capabilities. That is, if Alice has the /// retire-user capability, she can rescind Bob's can-sign /// capability even if she didn't grant him that capability. #[arg(long, overrides_with = "no_retire_user", default_value_ifs( [("project_maintainer", "true", Some("true"))])) ] retire_user: bool, /// Rescind the retire-user capability from a certificate. /// /// Removes the retire-user capability from a certificate. /// The specified certificate cannot no longer rescind /// capabilities even those that they granted. #[clap(long)] no_retire_user: bool, /// Grants the certificate the audit capability. /// /// This capability allows the certificate to audit commits. /// If Alice has the audit capability, Bob has the can-sign /// capability, and then Bob revokes his key, because it was /// compromised, then all commits that Bob signed are /// considered invalid. Alice can recover from this situation /// by auditing Bob's commit. After auditing each commit, she /// marks it as good using `sq-git policy goodlist`. #[arg(long, overrides_with = "no_audit", default_value_ifs( [("project_maintainer", "true", Some("true"))])) ] audit: bool, /// Rescind the audit capability from a certificate. /// /// Removes the audit capability from a certificate. The /// specified certificate cannot no longer mark arbitrary /// commits as good. #[clap(long)] no_audit: bool, /// Grants all capabilities relevant to a project maintainer. /// /// A project maintainer is a person who is responsible for /// maintaining the project. This options grants the /// certificate all capabilities. #[arg(long)] project_maintainer: bool, /// Grants all capabilities relevant to a release manager. /// /// A release manager is authorized to commit changes, and /// make releases. This options grants the certificate the /// `sign-tag`, `sign-archive`, and `sign-commit` /// capabilities. #[arg(long)] release_manager: bool, /// Grants all capabilities relevant to a committer. /// /// A committer is authorized to commit changes to the code. /// This options grants the certificate the `sign-commit` /// capability. #[arg(long)] committer: bool, }, /// Exports the certificates associated with an entity. #[clap(group(ArgGroup::new("some-entity").args(&["name", "all"]).required(true)))] Export { #[command(flatten)] policy_file: PolicyFileArg, /// Use the policy in the specified commit. #[arg(long, value_name = "COMMIT", conflicts_with="path")] commit: Option, /// The name of the entity whose certificates should be /// exported. #[arg(long, value_name = "NAME")] name: Option, /// Exports all of the certificates. #[arg(long)] all: bool, }, /// Updates the OpenPGP certificates in the policy. /// /// `sq-git` looks for updates to the certificates listed in the /// policy file in the user's certificate store, and on /// the main public keyservers. /// /// Examples: /// /// # Look for certificates updates. /// /// $ sq-git policy sync Sync { #[command(flatten)] policy_file: PolicyFileArg, /// Looks for updates on the specified keyservers. /// /// In addition to looking in the local certificate store, /// also looks for updates in the specified keyserver. #[clap( long, short='s', default_values_t = [ "hkps://keys.openpgp.org".to_string(), "hkps://mail-api.proton.me".to_string(), "hkps://keys.mailvelope.com".to_string(), "hkps://keyserver.ubuntu.com".to_string(), "hkps://sks.pod01.fleetstreetops.com".to_string(), ], )] keyserver: Vec, /// Don't look for updates on any keyservers. /// /// Updates are still looked for in the user's certificate /// store. #[arg(long)] disable_keyservers: bool, }, /// Adds the given commit to the commit goodlist. /// /// This requires the audit capability to not break an /// authentication chain. Goodlist { #[command(flatten)] policy_file: PolicyFileArg, commit: String, }, } #[derive(clap::Subcommand)] pub enum Subcommand { Init(InitSubcommand), Policy { #[command(subcommand)] command: PolicySubcommand, }, /// Lists and verifies commits. /// /// Lists and verifies that the commits from the given trust root /// to the target commit adhere to the policy. /// /// A version is considered authenticated if there is a path from /// the trust root to the target commit on which each commit can /// be authenticated by its parent. /// /// If the key used to sign a commit is hard revoked, then the /// commit is considered bad. `sq-git` looks for hard revocations /// in all of the commits that it examines. Thus, if a project /// maintainer adds a hard revocation to a commit's policy file, /// it will cause later *and* earlier commits signed with that key /// to be considered invalid. This is useful when a key has been /// compromised. /// /// When a key has been hard revoked, downstream users either need /// to start using a more recent trust root, or the upstream /// project maintainers need to audit the relevant commits. If /// the commits are considered benign, they can be added to a /// goodlist using `sq-git policy goodlist`. When a commit is /// considered authenticated, but the certificate has been hard /// revoked, `sq-git` looks to see whether the commit has been /// goodlisted by a commit that is on an authenticated path from /// the commit in question to the target. If so, the commit is /// considered to be authenticated. Log { #[command(flatten)] policy_file: PolicyFileArg, /// Specifies the trust root. /// /// If no policy is specified, then the value of the git /// repository's `sequoia.trustRoot` configuration key is /// used as the trust root. #[arg(long, value_name = "COMMIT")] trust_root: Option, /// Continues to check commits even when it is clear that the /// target commit cannot be authenticated. /// /// Causes `sq-git log` to continue to check commits rather /// than stopping as soon as it is clear that the version /// can't be authenticated. #[arg(long)] keep_going: bool, /// After authenticating the current version, prunes the /// certificates. /// /// After authenticating the current version, prunes unused /// components of the certificates. In particular, subkeys /// that were not used to verify a signature, and user IDs /// that were never considered primary are removed. /// /// This does not remove unused certificates from the policy /// file; this just minimizes them. /// /// This requires the `retire-user` capability. #[arg(long)] prune_certs: bool, /// The commits to check. /// /// If not specified, HEAD is authenticated with respect to /// the trust root. /// /// If a single commit ID is specified, the specified commit /// is authenticated with respect to the trust root. /// /// If a commit range like `3895a3a..3b388ae` is specified, /// the end of the range is authenticated with respect to the /// trust root, and there must be an authenticated path from /// the trust root via the start of the range to the end of /// the range. commit_range: Option, }, /// Verifies signatures on archives like release tarballs. Verify { #[command(flatten)] policy_file: PolicyFileArg, /// Read the policy from this commit. /// /// Falls back to using the value of the git repository's /// `sequoia.trustRoot` configuration key. Can be overridden /// using `--policy-file`. #[arg(long, value_name = "COMMIT")] trust_root: Option, /// The signature to verify. #[arg(long, value_name = "FILENAME")] signature: PathBuf, /// The archive that the signature protects. #[arg(long, value_name = "FILENAME")] archive: PathBuf, }, /// A `git update hook` that enforces the policy. /// /// Insert the following line into `hooks/update` on the shared /// git server to make it enforce the policy embedded in the /// repository starting at the trust root `COMMIT`. /// /// sq-git update-hook --trust-root= "$@" /// /// When a branch is pushed that is not previously known to the /// server, `sq-git update-hook` checks that all commits starting /// from the trust root to the pushed commit adhere to the policy. /// /// When a branch is pushed that is previously known to the /// server, i.e. the branch is updated, `sq-git update-hook` /// checks that all new commits starting from the commit /// previously known to the server to the pushed commit adhere to /// the policy. If there is no path from the previously known /// commit to the new one, the branch has been rebased. Then, we /// fall back to searching for a path from the trust root. UpdateHook { #[command(flatten)] policy_file: PolicyFileArg, /// The commit to use as a trust root. #[arg(long, value_name = "COMMIT", required = true)] trust_root: String, /// The name of the ref being updated /// /// Supplied as the first argument to the update hook, see /// `githooks(5)`. ref_name: String, /// The old object name stored in the ref /// /// Supplied as the second argument to the update hook, see /// `githooks(5)`. old_object: String, /// The new object name stored in the ref /// /// Supplied as third argument to the update hook, see /// `githooks(5)`. new_object: String, }, /// Detailed version and output version information /// /// With no further options, this command lists the version of /// `sq-git`, the version of the underlying OpenPGP implementation /// `sequoia-openpgp`, and which cryptographic library it uses. Version, } #[derive(clap::Args, Debug)] #[clap(group(ArgGroup::new("cert") .args(&["value", "cert_handle", "cert_file"]) .required(true)))] pub struct CertArg { /// The filename, fingerprint or Key ID of the certificate to /// authenticate /// /// This is first interpreted as a filename. If that file does /// not exist, then it is interpreted as a fingerprint or Key ID, /// and read from the certificate store. To avoid ambiguity, use /// `--cert` or `--cert-file` instead. /// /// See the top-level option `--home` for more information about /// the certificate store. #[arg(value_name="FILE|FINGERPRINT|KEYID")] pub value: Option, /// The fingerprint or Key ID of the certificate to use /// /// This is read from the user's default certificate /// directory. /// /// See the top-level option `--home` for more information about /// the certificate store. #[arg(long="cert", value_name="FINGERPRINT|KEYID")] pub cert_handle: Option, /// The file containing the certificate to authorize. /// /// The file must contain exactly one certificate. #[arg(long, value_name="FILE")] pub cert_file: Option, } #[derive(clap::Args, Debug)] pub struct PolicyFileArg { /// Use an alternate policy. /// /// The default policy is the `openpgp-policy.toml` file in the /// root of the repository's working tree. #[arg(long="policy-file", value_name = "POLICY", )] pub path: Option, } /// The verbosity setting. #[derive(Clone, Debug)] pub enum Verbosity { /// Only shows errors. Quiet, Normal, /// Shows extra information that users who are not developers can /// understand. Verbose, } #[allow(unused)] impl Verbosity { /// If both `quiet` and `verbose` are set, returns /// `Verbosity::quiet`. pub fn new(quiet: bool, verbose: bool) -> Verbosity { match (quiet, verbose) { (true, _) => Verbosity::Quiet, (_, true) => Verbosity::Verbose, _ => Verbosity::Normal, } } /// Whether the verbosity is set to `Verbository::Quiet`. pub fn quiet(&self) -> bool { matches!(self, Verbosity::Quiet) } /// Whether the verbosity is set to `Verbository::Normal`. pub fn normal(&self) -> bool { matches!(self, Verbosity::Normal) } /// Whether the verbosity is set to `Verbository::Verbose`. pub fn verbose(&self) -> bool { matches!(self, Verbosity::Verbose) } } sequoia-git-0.5.0/src/cli/paths.rs000064400000000000000000000110031046102023000150730ustar 00000000000000// This is a copy of // https://gitlab.com/sequoia-pgp/sequoia-sq/-/blob/main/src/cli/types/paths.rs #![allow(dead_code)] //! A type for absolute paths or default paths, and a clap parser. use std::path::PathBuf; use anyhow::{Result, anyhow}; /// Either an absolute path, or a default path. /// /// Even though this type is homomorphic to [`Option`], we /// need a new type for this, because clap handles [`Option`]s /// differently, and we cannot return [`Option`] from /// `TypedValueParser::parse_ref`. #[derive(Clone, Debug)] pub enum StateDirectory { /// An absolute path. Absolute(PathBuf), /// The default path. Default, /// Explicitly disable this state. None, } impl StateDirectory { /// Returns whether this state has been disabled. #[allow(dead_code)] pub fn is_none(&self) -> bool { matches!(self, StateDirectory::None) } /// Returns the absolute path, or `None` if the default path is to /// be used. pub fn path(&self) -> Result> { match self { StateDirectory::Absolute(p) => Ok(Some(p.clone())), StateDirectory::Default => Ok(None), StateDirectory::None => Err(anyhow!("state is disabled")), } } } /// A value parser for absolute directories with explicit default. /// /// If `default` is given, this parses to `StateDirectory::Default`. /// If `none` is given, this parses to `StateDirectory::None`. If an /// empty path is given, a hint is displayed to give `default` /// instead. /// /// If a relative path is given, a hint is displayed to use an /// absolute path instead. #[derive(Clone, Default)] pub struct StateDirectoryValueParser {} impl clap::builder::TypedValueParser for StateDirectoryValueParser { type Value = StateDirectory; fn parse_ref( &self, cmd: &clap::Command, arg: Option<&clap::Arg>, value: &std::ffi::OsStr, ) -> Result { use clap::error::*; if value == "default" { return Ok(StateDirectory::Default); } if value == "none" { return Ok(StateDirectory::None); } if value.is_empty() { let mut err = Error::new(ErrorKind::InvalidValue) .with_cmd(cmd); if let Some(arg) = arg { err.insert(ContextKind::InvalidArg, ContextValue::String(arg.to_string())); } err.insert(ContextKind::InvalidValue, ContextValue::String("".into())); err.insert(ContextKind::SuggestedValue, ContextValue::String("default".into())); err.insert(ContextKind::Suggested, ContextValue::StyledStrs(vec![ "to use the default directory, use 'default'".into(), ])); return Err(err); } let p = PathBuf::from(value); // Expand `~/foo` to `/home/user/foo`. let p = expand_tilde(p)?; if ! p.is_absolute() { let mut err = Error::new(ErrorKind::InvalidValue) .with_cmd(cmd); if let Some(arg) = arg { err.insert(ContextKind::InvalidArg, ContextValue::String(arg.to_string())); } err.insert(ContextKind::InvalidValue, ContextValue::String(p.display().to_string())); err.insert(ContextKind::Suggested, ContextValue::StyledStrs(vec![ "must be an absolute path".into(), ])); return Err(err); } Ok(StateDirectory::Absolute(p)) } } /// Expands tilde in paths. /// /// There are at least two crates that do this, shellexpand and /// tilde-expand, but both operate on strings, which is the wrong data /// type. /// /// Currently, we only handle `~`, not `~user`. At least shellexpand /// doesn't either. fn expand_tilde(p: PathBuf) -> clap::error::Result { if p.components().next().map(|c| c.as_os_str() == "~").unwrap_or(false) { Ok(dirs::home_dir().ok_or_else( || { use clap::error; // Not great, but we cannot return a rich error here. eprintln!("Error: no home directory known for this platform"); error::Error::new(error::ErrorKind::Io) })? .join(p.components().skip(1).collect::())) } else { Ok(p) } } sequoia-git-0.5.0/src/commands/init.rs000064400000000000000000000211621046102023000157600ustar 00000000000000use std::{ collections::{ btree_map::Entry, BTreeMap, BTreeSet, }, time::{ Duration, SystemTime, UNIX_EPOCH, }, }; use anyhow::Context; use sequoia_openpgp as openpgp; use openpgp::{ KeyID, Packet, parse::{ PacketParser, PacketParserResult, Parse, }, }; use crate::Config; use crate::Result; use crate::cli::InitSubcommand; use crate::git_repo; // How far in the past to look to find active contributors. const HORIZON: Duration = Duration::new(183 * 24 * 60 * 60, 0); // The minimum number of commits to examine. const MIN_COMMITS: usize = 10; pub fn dispatch(config: &Config, _c: InitSubcommand) -> Result<()> { let git = git_repo()?; let head_id = git.head().context("Looking up HEAD")? .resolve().context("Resolving HEAD to a commit")? .target().expect("resolved to direct reference"); // We do a breath-first search and examine the commits since // CUTOFF, but at least MIN_COMMITS. let now = SystemTime::now(); let cutoff = now - HORIZON; // Set to true if there aren't enough commits after the cutoff. let mut cutoff_exceeded = false; // Whether we've already processed a commit. let mut processed: BTreeSet = Default::default(); // The last commit that we processed. let mut last_processed = None; // Commits that we still need to process. let mut pending: BTreeSet = Default::default(); pending.insert(head_id.clone()); let mut unsigned: Vec = Vec::new(); struct Committer { commit_count: usize, // Keys used by this commit and the number of commits they // signed. signing_keys: BTreeMap, } let mut committers: BTreeMap = Default::default(); while let Some(commit_id) = pending.pop_first() { processed.insert(commit_id.clone()); last_processed = Some(commit_id.clone()); let commit = git.find_commit(commit_id) .with_context(|| { format!("Getting commit data for {}", commit_id) })?; if config.verbose() { println!("{}: {}", commit_id, commit.summary().unwrap_or("")); } // See who signed it. let mut signing_keys: BTreeSet = Default::default(); let mut have_sig = false; if let Ok((sig, _data)) = git.extract_signature(&commit_id, None) { // We expect signature packets. Anything else is not ok. let mut ok = true; if let Ok(mut ppr) = PacketParser::from_bytes(&sig[..]) { while let PacketParserResult::Some(pp) = ppr { match pp.next() { Ok((packet, next_ppr)) => { ppr = next_ppr; if let Packet::Signature(sig) = packet { have_sig = true; let issuers = sig.get_issuers(); if config.verbose() { for issuer in issuers.iter() { println!(" Allegedly signed by {}", issuer); } } signing_keys.extend( issuers.into_iter().map(KeyID::from)); } else { ok = false; break; } } Err(err) => { eprintln!("Warning: {} contains an invalid \ signature: {}", commit_id, err); ok = false; break; } } } } if ! ok { have_sig = false; signing_keys.clear(); } } if ! have_sig { unsigned.push( commit.as_object() .short_id().ok() .and_then(|id| id.as_str().map(|id| id.to_string())) .unwrap_or_else(|| commit.id().to_string())); } let committer = commit.committer(); let committer = format!( "{}{}{}", committer.name().unwrap_or(""), if committer.name().is_some() && committer.email().is_some() { " " } else { "" }, committer .email() .map(|e| format!("<{}>", e)) .unwrap_or("".to_string())); match committers.entry(committer) { Entry::Occupied(mut oe) => { let e = oe.get_mut(); e.commit_count += 1; for signing_key in signing_keys.into_iter() { e.signing_keys.entry(signing_key) .and_modify(|e| { *e += 1; }) .or_insert(1); } } Entry::Vacant(e) => { let mut info = Committer { commit_count: 1, signing_keys: BTreeMap::new(), }; for signing_key in signing_keys.into_iter() { info.signing_keys.insert(signing_key, 1); } e.insert(info); } } for parent in commit.parents() { let parent_id = parent.id(); if processed.contains(&parent_id) || pending.contains(&parent_id) { continue; } let commit_time = parent.time(); let commit_time = UNIX_EPOCH + Duration::new(commit_time.seconds() as u64, 0); if commit_time < cutoff { if processed.len() + pending.len() > MIN_COMMITS { continue; } else { cutoff_exceeded = true; } } pending.insert(parent_id.clone()); } } if cutoff_exceeded { println!("# Examined {} recent commits.", processed.len()); } else { println!("# Examined the {} commits in the last {} days.", processed.len(), HORIZON.as_secs() / 24 / 60 / 60); } if let Some(commit_id) = last_processed { println!("# Stopped at commit {}.", commit_id); } println!(); print!("# Encountered {} unsigned commits", unsigned.len()); if ! unsigned.is_empty() { print!(" ("); for (i, id) in unsigned.iter().enumerate() { if i == 3 && ! config.verbose() { print!("..."); break; } if i > 0 { print!(" "); } print!("{}", id); } print!(")"); } println!(); let mut committers: Vec<(String, Committer)> = committers.into_iter().collect(); committers.sort_by_key(|(committer, info)| { (usize::MAX - info.commit_count, committer.clone()) }); for (i, (committer, info)) in committers.iter().enumerate() { println!(); println!("\ # {} added {} commits ({}%). #", committer, info.commit_count, (100 * info.commit_count) / processed.len()); if info.signing_keys.is_empty() { println!("\ # Never signed any commits. To authorize them, you'll need their OpenPGP # certificate."); continue; } println!("\ # After checking that they really control the following OpenPGP keys: # # {} #", info .signing_keys.iter() .map(|(keyid, count)| { format!("{} ({} commits)", keyid, count) }) .collect::>() .join("# ")); if i == 0 { println!("\ # You can make them a project maintainer (someone who can add and # remove committers) by running:"); } else { println!("\ # You can make them a committer by running:"); } for (keyid, _count) in info.signing_keys.iter() { println!("sq-git policy authorize {} {:?} {}", if i == 0 { " --project-maintainer" } else { "--committer" }, committer, keyid); } } Ok(()) } sequoia-git-0.5.0/src/commands/policy.rs000064400000000000000000000445461046102023000163270ustar 00000000000000use std::{ collections::{BTreeMap, btree_map::Entry}, io, path::{Path, PathBuf}, sync::OnceLock, }; use anyhow::Context; use git2::Repository; use sequoia_openpgp as openpgp; use openpgp::{ Cert, Fingerprint, KeyHandle, armor, serialize::Marshal, }; use sequoia_cert_store as cert_store; use cert_store::Store; use crate::Config; use crate::Error; use crate::Policy; use crate::Result; use crate::cli::PolicySubcommand; use crate::git_repo; use crate::output; const TRACE: bool = false; pub fn dispatch(config: &Config, command: PolicySubcommand) -> Result<()> { let git_ = OnceLock::new(); let git = || -> Result<&Repository, Error> { if let Some(repo) = git_.get() { return Ok(repo); } let repo = git_repo()?; let _ = git_.set(repo); Ok(git_.get().unwrap()) }; let git_policy = |git: &Repository, name: &str| -> Result { let (object, reference) = git.revparse_ext(name) .with_context(|| { format!("Looking up {:?}.", name) })?; // We won't get a reference if we are passed an OID. let commit = if let Some(reference) = reference { let commit = reference.peel_to_commit() .with_context(|| { format!("{:?} is not a commit", name) })?; commit.id() } else { if let Ok(commit) = object.into_commit() { commit.id() } else { return Err(anyhow::anyhow!("{:?} is not a commit", name)); } }; match Policy::read_from_commit(git, &commit) { Ok(policy) => Ok(policy), Err(err) => { if let Error::MissingPolicy(_) = err { eprintln!("Warning {} does not have a policy file. \ Defaulting to an empty policy.", name); Ok(Policy::default()) } else { Err(err.into()) } } } }; match command { PolicySubcommand::Describe { policy_file, commit, } => { let p = if let Some(commit) = commit { git_policy(git()?, &commit)? } else { config.read_policy(&policy_file)? }; match config.output_format { output::Format::HumanReadable => { output::describe_policy(&p)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &p)?, } }, PolicySubcommand::Diff { old, old_commit, old_file, new, new_commit, new_file } => { tracer!(TRACE, "sq-git policy diff"); let r = |commit: Option<&str>, file: Option<&Path>| -> Result<_> { let mut policy = None; let mut err_commit = None; if let Some(commit) = commit { match git().and_then(|git| Ok(git_policy(git, &commit)?)) { Ok(p) => { t!("Read policy from commit {:?}", commit); policy = Some(p) }, Err(err) => { t!("Error reading policy from commit {:?}: {}", commit, err); err_commit = Some(err); } } } let mut err_file = None; if policy.is_none() { if let Some(file) = file { match Policy::read_file(&file) { Ok(p) => { t!("Read policy from file {}", file.display()); policy = Some(p); } Err(err) => { t!("Error reading policy from file {:?}: {}", file.display(), err); err_file = Some(err) } } } } match policy { Some(policy) => Ok(policy), None => { if let (Some(commit), Some(err_commit)) = (commit, err_commit) { eprintln!("Reading commit {}: {}", commit, err_commit); } if let (Some(file), Some(err_file)) = (file, err_file) { eprintln!("Reading file {}: {}", file.display(), err_file); } Err(anyhow::anyhow!("Failed to read policy")) } } }; let old_commit = old_commit.as_deref().or(old.as_deref()); let old_as_path = old.as_deref().map(|p| PathBuf::from(p)); let old_file = old_file.as_deref().or(old_as_path.as_deref()); let old_policy = if old_commit.is_some() || old_file.is_some() { r(old_commit, old_file)? } else { // Default to HEAD's policy. t!("Reading old policy from HEAD"); git_policy(git()?, "HEAD")? }; let new_commit = new_commit.as_deref().or(new.as_deref()); let new_as_path = new.as_deref().map(|p| PathBuf::from(p)); let new_file = new_file.as_deref().or(new_as_path.as_deref()); let new_policy = if new_commit.is_some() || new_file.is_some() { r(new_commit, new_file)? } else { // Default to the policy in the working tree. t!("Reading new policy from git working tree"); Policy::read_from_working_dir()? }; let diff = old_policy.diff(&new_policy)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } if ! diff.changes.is_empty() { // Don't return an error: sq-git prints it, which is // annoying. std::process::exit(1); } }, PolicySubcommand::Export { policy_file, commit, name, all, } => { let p = if let Some(commit) = commit { git_policy(git()?, &commit)? } else { config.read_policy(&policy_file)? }; let mut certs: BTreeMap = BTreeMap::new(); let mut merge = |cert: Cert| -> Result<()> { match certs.entry(cert.fingerprint()) { Entry::Occupied(oe) => { let oe = oe.into_mut(); *oe = (*oe).clone().merge_public_and_secret(cert) .context("Merging certificates")?; } Entry::Vacant(ve) => { ve.insert(cert); } } Ok(()) }; if all { // Serialize all certificates. for (entity, a) in p.authorization().iter() { for cert in a.certs()? { let cert = cert.with_context(|| { format!("Parsing {}'s keyring", entity) })?; let fpr = cert.fingerprint(); merge(Cert::try_from(cert).with_context(|| { format!("Parsing {}'s keyring: {} is corrupted", entity, fpr) })?)?; } } } else if let Some(name) = name { if let Some(auth) = p.authorization().get(&name) { // Only serialize the certificates for the specified // entity. for cert in auth.certs()? { let cert = cert.with_context(|| { format!("Parsing {}'s keyring", name) })?; let fpr = cert.fingerprint(); merge(Cert::try_from(cert).with_context(|| { format!("Parsing {}'s keyring: {} is corrupted", name, fpr) })?)?; } } else { eprintln!("Entity {:?} is not known.", name); eprintln!("Known entities"); for name in p.authorization().keys() { eprintln!(" - {}", name); } return Err(anyhow::anyhow!("Unknown entity")); } } else { unreachable!("enforced by clap"); } let stdout = std::io::stdout(); let mut output = armor::Writer::new(stdout, armor::Kind::PublicKey)?; for cert in certs.into_values() { cert.serialize(&mut output)?; } output.finalize()?; }, PolicySubcommand::Authorize { policy_file, name, cert, sign_commit, no_sign_commit, sign_tag, no_sign_tag, sign_archive, no_sign_archive, add_user, no_add_user, retire_user, no_retire_user, audit, no_audit, project_maintainer: _, release_manager: _, committer: _, } => { let cert = cert.get(&config)?; let fp = cert.fingerprint(); let old_policy = config.read_policy_or_default(&policy_file)?; let mut p = old_policy.clone(); let (new_entry, a) = match p.authorization_mut().entry(name) { Entry::Occupied(oe) => (false, oe.into_mut()), Entry::Vacant(ve) => (true, ve.insert(Default::default())), }; if new_entry && (! sign_commit && ! sign_tag && ! sign_archive && ! add_user && ! retire_user && ! audit) { eprintln!("Warning: Adding new entry with no capabilities. \ You probably want to add some capabilities by \ running the command again, and specifying \ \"--committer\", \"--release-manager\", \ or \"--project-maintainer\". Refer to the \ help for details.\""); } let mut merged = false; let mut updated = Vec::new(); for c in a.certs()? { let mut c = Cert::try_from(c?)?; if c.fingerprint() == fp { c = c.merge_public(cert.clone())?; merged = true; } updated.push(c); } if ! merged { updated.push(cert); } a.set_certs(updated)?; a.sign_commit = (a.sign_commit | sign_commit) & !no_sign_commit; a.sign_tag = (a.sign_tag | sign_tag) & !no_sign_tag; a.sign_archive = (a.sign_archive | sign_archive) & !no_sign_archive; a.add_user = (a.add_user | add_user) & !no_add_user; a.retire_user = (a.retire_user | retire_user) & !no_retire_user; a.audit = (a.audit | audit) & !no_audit; let diff = old_policy.diff(&p)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } config.write_policy(&p, &policy_file)?; }, PolicySubcommand::Sync { policy_file, keyserver: keyservers, disable_keyservers, } => { let old_policy = config.read_policy(&policy_file)?; let mut p = old_policy.clone(); let mut keyserver = keyservers .into_iter() .map(|keyserver| { sequoia_net::KeyServer::new(&keyserver) .map(|instance| { (keyserver, instance) }) }) .collect::>>()?; let cert_update = |cert: Cert, update: Cert| -> (Cert, bool) { if cert.fingerprint() != update.fingerprint() { eprintln!("bad server response, \ wrong certificate ({}).", update.fingerprint()); (cert, false) } else { match cert.clone().insert_packets(update.into_packets()) { Ok((cert, changed)) => { if changed { eprintln!("updated."); } else { eprintln!("unchanged."); } (cert, changed) } Err(err) => { eprintln!("{}", err); (cert, false) } } } }; // XXX: We should do this in parallel. tokio::runtime::Builder::new_multi_thread() .enable_all() .build() .unwrap() .block_on(async { let mut any_changed = false; for (id, a) in p.authorization_mut().iter_mut() { let mut changed = false; let mut updated = Vec::new(); for cert in a.certs()? { let mut cert = Cert::try_from(cert?)?; let fp = cert.fingerprint(); eprint!("Updating {} ({}) from the local \ certificate store... ", fp, id); if let Ok(c) = config.cert_store()? .lookup_by_cert_fpr(&fp) .and_then(|lc| lc.to_cert().cloned()) { let did_change; (cert, did_change) = cert_update(cert, c); changed |= did_change; } else { eprintln!("not found."); }; if ! disable_keyservers { let kh = KeyHandle::from(fp); for (uri, keyserver) in keyserver.iter_mut() { eprint!("Updating {} ({}) from {}... ", kh, id, uri); match keyserver.get(kh.clone()).await { Ok(certs) => { for c in certs { if let Ok(c) = c { let did_change; (cert, did_change) = cert_update(cert, c); changed |= did_change; } } } Err(err) => { eprintln!("{}.", err); } } } } updated.push(cert); } if changed { a.set_certs(updated)?; any_changed = true; } } if any_changed { eprintln!("Note: certificates are stripped so not \ all certificate updates may be relevant."); } Ok::<(), anyhow::Error>(()) })?; let diff = old_policy.diff(&p)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } config.write_policy(&p, &policy_file)?; }, PolicySubcommand::Goodlist { policy_file, commit, } => { let git = git()?; let object = git.revparse_single(&commit) .with_context(|| { format!("Looking up \"{}\"", commit) })?; let commit = object.peel_to_commit() .with_context(|| { format!("\"{}\" does not refer to a commit", commit) })?; let old_policy = config.read_policy(&policy_file)?; let mut p = old_policy.clone(); p.commit_goodlist_mut().insert(commit.id().to_string()); let diff = old_policy.diff(&p)?; match config.output_format { output::Format::HumanReadable => { output::describe_diff(&diff)?; }, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &diff)?, } config.write_policy(&p, &policy_file)?; }, } Ok(()) } sequoia-git-0.5.0/src/commands.rs000064400000000000000000000000361046102023000150120ustar 00000000000000pub mod init; pub mod policy; sequoia-git-0.5.0/src/git.rs000064400000000000000000000141501046102023000137760ustar 00000000000000use std::{ collections::{ BTreeSet }, }; use anyhow::Result; use git2::{ Repository, Oid, }; use crate::{ Error, }; const TRACE: bool = false; /// Returns whether `ancestor` is an ancestor of `target`. /// /// A commit is considered to be an ancestor of another commit if /// there is a path from the first commit to the target commit. Note: /// this does not authenticate the path, or even check whether the /// commits are signed. Commits are considered their own ancestors. /// /// Returns `Ok(())` if there is a path. If there is no path, returns /// `Err(Error::NoPathConnecting)`. pub fn git_is_ancestor(git: &Repository, ancestor: Oid, target: Oid) -> Result<()> { tracer!(TRACE, "is_ancestor"); t!("Looking for {}..{}", ancestor, target); if ancestor.is_zero() { return Err(Error::NoPathConnecting(ancestor, target).into()); } if ancestor == target { return Ok(()); } // Whether we've already processed a commit. let mut processed: BTreeSet = Default::default(); // Commits that we still need to process. let mut pending: BTreeSet = Default::default(); pending.insert(target.clone()); while let Some(commit_id) = pending.pop_first() { t!("Visiting commit {:?}", commit_id); processed.insert(commit_id.clone()); let commit = git.find_commit(commit_id)?; for parent in commit.parents() { let parent_id = parent.id(); if processed.contains(&parent_id) || pending.contains(&parent_id) { // There is a valid path from PARENT to TARGET, which // is not via COMMIT. There is no need to find a // second path. continue; } if parent_id == ancestor { t!("Reached ancestor!"); return Ok(()); } pending.insert(parent_id.clone()); } } Err(Error::NoPathConnecting(ancestor, target).into()) } #[cfg(test)] mod test { use super::*; use std::path::Path; use tempfile::TempDir; use git2::Commit; use git2::Repository; fn commit_file<'repo, P>(repo: &'repo Repository, filename: P, content: &[u8], commit_message: &str, parents: &[&Commit<'repo>]) -> Commit<'repo> where P: AsRef { let filename = filename.as_ref(); let filename_abs = repo.workdir().unwrap().join(&filename); std::fs::write(&filename_abs, content).unwrap(); let mut index = repo.index().unwrap(); index.add_path(&filename).unwrap(); let oid = index.write_tree().unwrap(); let tree = repo.find_tree(oid).unwrap(); let sig = repo.signature().unwrap(); let commit_oid = repo.commit( None, &sig, &sig, commit_message, &tree, parents) .unwrap(); let commit = repo.find_commit(commit_oid).unwrap(); commit } #[test] fn ancestor() -> Result<()> { let dir = TempDir::new()?; let repo = Repository::init(&dir) .expect("Initialize git repository"); let mut config = repo.config().unwrap(); config.set_str("user.name", "name").unwrap(); config.set_str("user.email", "email").unwrap(); // root // / \ // l.0 r.0 // | | // l.1 r.1 // \ / // merge // | // c.0 // | // c.1 let root = commit_file( &repo, "root", b"root", "root", &[]); let l_0 = commit_file( &repo, "l", b"0", "commit l.0", &[ &root ]); let l_1 = commit_file( &repo, "l", b"1", "commit l.1", &[ &l_0 ]); let r_0 = commit_file( &repo, "r", b"0", "commit r.0", &[ &root ]); let r_1 = commit_file( &repo, "r", b"1", "commit r.1", &[ &r_0 ]); let m = commit_file( &repo, "m", b"merge!", "commit merge", &[ &l_1, &r_1 ]); let c_0 = commit_file( &repo, "c", b"0", "commit c.0", &[ &m ]); let c_1 = commit_file( &repo, "c", b"1", "commit c.1", &[ &c_0 ]); let all_commits = &[&root, &l_0, &l_1, &r_0, &r_1, &m, &c_0, &c_1 ]; // All the commits in a topological order. let paths = &[ // Via l. &[&root, &l_0, &l_1, &m, &c_0, &c_1 ], // Via r. &[&root, &r_0, &r_1, &m, &c_0, &c_1 ], ]; let t = |ancestor: &Commit, commit: &Commit, expect: bool| { match (expect, git_is_ancestor(&repo, ancestor.id(), commit.id()).is_ok()) { (true, true) => (), (false, false) => (), (true, false) => { panic!("Expected {} ({}) to be an ancestor of {} ({})", ancestor.summary().unwrap_or(""), ancestor.id(), commit.summary().unwrap_or(""), commit.id()); } (false, true) => { panic!("Expected {} ({}) to NOT be an ancestor of {} ({})", ancestor.summary().unwrap_or(""), ancestor.id(), commit.summary().unwrap_or(""), commit.id()); } } }; // Commits are their own ancestors. for c in all_commits.iter() { t(c, c, true); } for path in paths.iter() { for i in 0..(path.len() - 1) { for j in (i + 1)..path.len() { t(&path[i], &path[j], true); t(&path[j], &path[i], false); } } } t(&l_0, &r_0, false); t(&l_0, &r_1, false); t(&l_1, &r_0, false); t(&l_1, &r_1, false); t(&r_0, &l_0, false); t(&r_0, &l_1, false); t(&r_1, &l_0, false); t(&r_1, &l_1, false); Ok(()) } } sequoia-git-0.5.0/src/lib.rs000064400000000000000000000025371046102023000137670ustar 00000000000000use git2::Oid; use sequoia_openpgp::{ self as openpgp, }; #[macro_use] mod macros; mod policy; pub use policy::*; mod verify; pub use verify::*; mod git; pub use git::*; pub mod persistent_set; pub(crate) mod utils; /// Errors for this crate. #[derive(thiserror::Error, Debug)] pub enum Error { #[error("Invalid operation: {0}")] InvalidOperation(String), #[error("Storage error: {0}")] StorageError(String), #[error("Commit {0} is not signed")] MissingSignature(Oid), #[error("{0} is not signed")] MissingDataSignature(String), #[error("Commit {0} has no policy")] MissingPolicy(Oid), #[error("The given range contains no commits")] EmptyCommitRange, #[error("There is no path from {0} to {1}")] NoPathConnecting(Oid, Oid), #[error("Could not find a certificate with {0} in the policy file")] MissingKey(openpgp::KeyHandle), #[error("Key `{0}` is bad: {1}")] BadKey(openpgp::KeyHandle, String), #[error("Bad signature: {0}")] BadSignature(String), #[error("Unauthorized: {0}")] Unauthorized(String), #[error("Io error")] Io(#[from] std::io::Error), #[error("Libgit2 error")] Git2(#[from] git2::Error), #[error("Other error: {0}")] Other(#[from] anyhow::Error), } /// Crate result specialization. pub type Result = ::std::result::Result; sequoia-git-0.5.0/src/macros.rs000064400000000000000000000142761046102023000145100ustar 00000000000000use std::cmp; #[allow(unused_macros)] macro_rules! trace { ( $TRACE:expr, $fmt:expr, $($pargs:expr),* ) => { if $TRACE { eprintln!($fmt, $($pargs),*); } }; ( $TRACE:expr, $fmt:expr ) => { trace!($TRACE, $fmt, ); }; } // Converts an indentation level to whitespace. #[allow(dead_code)] pub(crate) fn indent(i: isize) -> &'static str { let s = " "; &s[0..cmp::min(usize::try_from(i).unwrap_or(0), s.len())] } #[allow(unused_macros)] macro_rules! tracer { ( $TRACE:expr, $func:expr ) => { tracer!($TRACE, $func, 0) }; ( $TRACE:expr, $func:expr, $indent:expr ) => { // Currently, Rust doesn't support $( ... ) in a nested // macro's definition. See: // https://users.rust-lang.org/t/nested-macros-issue/8348/2 #[allow(unused_macros)] macro_rules! t { ( $fmt:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, $fmt) }; ( $fmt:expr, $a:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a)) }; ( $fmt:expr, $a:expr, $b:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr, $k:expr ) => { trace!($TRACE, "{}{}: {}", crate::macros::indent($indent), $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k)) }; } } } /// A very simple profiling tool. /// /// Note: don't ever profile code that has not been compiled in /// release mode. There can be orders of magnitude difference in /// execution time between it and debug mode! /// /// This macro measures the wall time it takes to execute the block. /// If the time is at least $ms_threshold (in milli-seconds), then it /// displays the output on stderr. The output is prefixed with label, /// if it is provided. /// /// ```ignore /// let result = time_it!("Some code", 10, { /// // Some code. /// 5 /// }); /// assert_eq!(result, 5); /// ``` // Note: We cannot test the macro in doctests, because the macro is // not public. We test the cases in the test module below, instead. // If you change the examples here, propagate the changes to the // module below. #[allow(unused_macros)] macro_rules! time_it { ( $label:expr, $ms_threshold:expr, $body:expr ) => {{ use std::time::{SystemTime, Duration}; // We use drop so that code that uses non-local exits (e.g., // using break 'label) still works. struct Timer { start: SystemTime, } impl Drop for Timer { fn drop(&mut self) { let elapsed = self.start.elapsed(); if elapsed.clone().unwrap_or(Duration::from_millis($ms_threshold)) >= Duration::from_millis($ms_threshold) { if $label.len() > 0 { eprint!("{}:", $label); } eprintln!("{}:{}: {:?}", file!(), line!(), elapsed); } } } let _start = Timer { start: SystemTime::now() }; $body }}; ( $label:expr, $body:expr ) => { time_it!($label, 0, $body) }; ( $body:expr ) => { time_it!("", $body) }; } /// We cannot test the macro in doctests, because the macro is not /// public. We test the cases here, instead. If you change the /// examples here, propagate the changes to the docstring above. #[cfg(test)] mod test_time_it { /// This macro measures the wall time it takes to execute the /// block. If the time is at least $ms_threshold (in /// milli-seconds), then it displays the output on stderr. The /// output is prefixed with label, if it is provided. #[test] fn time_it() { let result = time_it!("Some code", 10, { // Some code. 5 }); assert_eq!(result, 5); } } #[allow(unused_macros)] macro_rules! platform { { unix => { $($unix:tt)* }, windows => { $($windows:tt)* }, } => { if cfg!(unix) { #[cfg(unix)] { $($unix)* } #[cfg(not(unix))] { unreachable!() } } else if cfg!(windows) { #[cfg(windows)] { $($windows)* } #[cfg(not(windows))] { unreachable!() } } else { #[cfg(not(any(unix, windows)))] compile_error!("Unsupported platform"); unreachable!() } } } sequoia-git-0.5.0/src/main.rs000064400000000000000000000676521046102023000141560ustar 00000000000000use std::{ env, io, path::{ Path, PathBuf, } }; use anyhow::{anyhow, Context, Result}; use clap::FromArgMatches; use once_cell::sync::OnceCell; use sequoia_openpgp::{ self as openpgp, Cert, KeyHandle, parse::Parse, }; use sequoia_cert_store::{ CertStore, Store, }; use sequoia_git::*; #[macro_use] mod macros; mod cli; use cli::CertArg; use cli::PolicyFileArg; use cli::Verbosity; use cli::paths::StateDirectory; mod commands; mod output; #[allow(dead_code)] mod utils; impl CertArg { fn get(&self, config: &Config) -> Result { let filename; let r: Result<(&Path, Vec), KeyHandle> = if let Some(value) = &self.value { // First try to open as a file. Only if the file does not // exist, interpret the value as a key handle. filename = PathBuf::from(value); match std::fs::read(&filename) { Ok(contents) => { Ok((&filename, contents)) } Err(err) => { if err.kind() == std::io::ErrorKind::NotFound { match value.parse::() { Ok(kh) => Err(kh), Err(err) => return Err( err.context( format!("File {} does not exist, \ and is not a valid fingerprint \ or Key ID", filename.display()))), } } else { return Err(anyhow::Error::from(err).context( format!("Opening {}", filename.display()))); } } } } else if let Some(kh) = &self.cert_handle { Err(kh.clone()) } else if let Some(filename) = &self.cert_file { let content = std::fs::read(&filename) .with_context(|| { format!("Opening {}", filename.display()) })?; Ok((filename, content)) } else { unreachable!("clap ensures that one argument is set") }; match r { Ok((filename, content)) => { // Parse content as a Cert and make sure content only // contains a single certificate. Cert::from_bytes(&content) .with_context(|| { format!("Parsing {}", filename.display()) }) } Err(kh) => { let certs = config.cert_store()?.lookup_by_cert_or_subkey(&kh)?; let cert = match certs.len() { 0 => return Err(anyhow!("Key {} not found", kh)), 1 => certs[0].to_cert()?.clone(), n => return Err(anyhow!( "Key {} is part of {} certs, use cert \ fingerprint to resolve", kh, n)), }; Ok(cert) } } } } pub struct Config<'a> { output_format: output::Format, home: Option, cert_store_path: Option, cert_store: OnceCell>, verbosity: Verbosity, } impl<'a> Config<'a> { /// Returns the cert store's base directory, if it is enabled. fn cert_store_base(&self) -> Option { let default = || if let Ok(path) = std::env::var("PGP_CERT_D") { Some(PathBuf::from(path)) } else { self.home.as_ref() .map(|h| h.data_dir(sequoia_directories::Component::CertD)) }; if let Some(state) = self.cert_store_path.as_ref() { match state { StateDirectory::Absolute(p) => Some(p.clone()), StateDirectory::Default => default(), StateDirectory::None => None, } } else { default() } } // Returns the cert store. // // If it is not yet open, opens it. // // If it does not exist, issues a warning and returns an empty // cert store. fn cert_store(&self) -> Result<&CertStore<'a>> { if let Some(cert_store) = self.cert_store.get() { // The cert store is already initialized, return it. return Ok(cert_store); } let create_dirs = |path: &Path| -> Result<()> { use std::fs::DirBuilder; let mut b = DirBuilder::new(); b.recursive(true); // Create the parent with the normal umask. if let Some(parent) = path.parent() { // Note: since recursive is turned on, it is not an // error if the directory exists, which is exactly // what we want. b.create(parent) .with_context(|| { format!("Creating the directory {:?}", parent) })?; } // Create path with more restrictive permissions. platform!{ unix => { use std::os::unix::fs::DirBuilderExt; b.mode(0o700); }, windows => { }, } b.create(path) .with_context(|| { format!("Creating the directory {:?}", path) })?; Ok(()) }; // We need to initialize the cert store. // Open the cert-d. let path = self.cert_store_base() .expect("just checked that it is configured"); let cert_store = create_dirs(&path) .and_then(|_| CertStore::open(&path)) .with_context(|| { format!("While opening the certificate store at {:?}", &path) })?; let _ = self.cert_store.set(cert_store); Ok(self.cert_store.get().expect("just configured")) } /// Whether the verbosity is set to verbose. pub fn verbose(&self) -> bool { self.verbosity.verbose() } /// Whether the verbosity is set to quiet. pub fn quiet(&self) -> bool { self.verbosity.quiet() } fn read_policy<'f, F>(&self, policy_file: F) -> Result where F: Into>, { let policy_file = policy_file.into(); let policy_file = if let Some(policy_file) = policy_file.as_ref() { policy_file.path.as_ref() } else { None }; if let Some(path) = policy_file { Policy::read_file(path) .with_context(|| { format!("Reading specified policy file: {}", path.display()) }) } else { Policy::read_from_working_dir() .with_context(|| { format!("Reading default policy file") }) } } fn read_policy_or_default<'f, F>(&self, policy_file: F) -> Result where F: Into>, { let policy_file = policy_file.into(); let policy_file = if let Some(policy_file) = policy_file.as_ref() { policy_file.path.as_ref() } else { None }; if let Some(path) = policy_file { Policy::read_file_or_default(path) .with_context(|| { format!("Reading specified policy file: {}", path.display()) }) } else { Policy::read_from_working_dir() .with_context(|| { format!("Reading default policy file") }) } } fn write_policy<'f, F>(&self, p: &Policy, policy_file: F) -> Result<()> where F: Into>, { let policy_file = policy_file.into(); let policy_file = if let Some(policy_file) = policy_file.as_ref() { policy_file.path.as_ref() } else { None }; if let Some(path) = policy_file { p.write(path) .with_context(|| { format!("Updating the specified policy file: {}", path.display()) }) } else { p.write_to_working_dir() .with_context(|| { format!("Updating default policy file") }) } } } // Returns the current git repository. fn git_repo() -> Result { let cwd = env::current_dir() .context("Getting current working directory")?; let repo = git2::Repository::discover(&cwd) .with_context(|| { format!("Looking for git repository under {}", cwd.display()) })?; Ok(repo) } fn main() -> anyhow::Result<()> { let policy = openpgp::policy::StandardPolicy::new(); // XXX let mut cli = cli::build(true); let matches = cli.clone().try_get_matches(); let mut matches = match matches { Ok(matches) => matches, Err(mut err) => { // Warning: hack ahead! // // We want to hide global options in the help output for // subcommands, and we want to include values from the // configuration file in the help output. // // If we are showing the help output, we only want to // display the global options at the top-level; for // subcommands we hide the global options to not overwhelm // the user. // // Ideally, clap would provide a mechanism to only show // the help output for global options at the level they // are defined at. That's not the case. // // We can use `err` to figure out if we are showing the // help output, but it doesn't tell us what subcommand we // are showing the help for. Instead (and here's the // hack!), we compare the output. If it is the output for // the top-level `--help` or `-h`, then we are showing the // help for the top-level. If not, then we are showing // the help for a subcommand. In the former case, we // unhide the global options. use clap::error::ErrorKind; if err.kind() == ErrorKind::DisplayHelp || err.kind() == ErrorKind::DisplayHelpOnMissingArgumentOrSubcommand { let output = err.render(); let output = if output == cli.render_long_help() { Some(cli::build(false).render_long_help()) } else if output == cli.render_help() { Some(cli::build(false).render_help()) } else { // Redo the parse so that the help message will // include any augmentations. err = cli::build(true).try_get_matches().unwrap_err(); None }; if let Some(output) = output { if err.use_stderr() { eprint!("{}", output); } else { print!("{}", output); } std::process::exit(err.exit_code()); } } // Print the error message. err.print()?; // Then, figure out if this is a usage message, and // extract the usage string. if let Some(usage) = err.context() .find_map(|(kind, value)| (kind == clap::error::ContextKind::Usage) .then_some(value)) { print_examples(&cli, usage)?; } // Finally, exit with an error code. std::process::exit(err.exit_code()); } }; let cli = cli::Cli::from_arg_matches_mut(&mut matches)?; let home = match &cli.home { Some(StateDirectory::Absolute(p)) => Some(sequoia_directories::Home::new(p.clone())?), None | Some(StateDirectory::Default) => Some(sequoia_directories::Home::default() .ok_or(anyhow::anyhow!("no default SEQUOIA_HOME \ on this platform"))? .clone()), Some(StateDirectory::None) => None, }; let config = Config { output_format: cli.output_format.parse()?, home, cert_store_path: cli.cert_store, cert_store: Default::default(), verbosity: Verbosity::new(cli.quiet, cli.verbose), }; let commit_by_symbolic_name = |git: &git2::Repository, name: &str, trust_root: bool| -> Result { // Allow the zero oid. if let Ok(oid) = git2::Oid::from_str(name) { if oid.is_zero() { return Ok(oid); } } let (object, reference) = git.revparse_ext(name) .with_context(|| { format!("Looking up {:?}.", name) })?; // We won't get a reference if we are passed an OID. if let Some(reference) = reference { if trust_root { if reference.is_tag() { eprintln!("Warning: using a tag as the trust root \ could allow the remote repository to \ manipulate your trust root."); } else if reference.is_remote() { eprintln!("Warning: using a remote branch as the \ trust root could allow the remote repository \ to manipulate your trust root."); } } let commit = reference.peel_to_commit() .with_context(|| { format!("{:?} is not a commit", name) })?; Ok(commit.id()) } else { if let Ok(commit) = object.into_commit() { Ok(commit.id()) } else { Err(anyhow::anyhow!("{:?} is not a commit", name)) } } }; let lookup_trust_root = |git: &git2::Repository, trust_root: Option<&str>| -> Result { if let Some(trust_root) = trust_root { return commit_by_symbolic_name(git, trust_root, true); } // We only look in the repository's configuration file. let config = git.config()? .open_level(git2::ConfigLevel::Local)? .snapshot()?; let trust_root = match config.get_str("sequoia.trustRoot") { Ok(trust_root) => trust_root, Err(err) => { if err.code() == git2::ErrorCode::NotFound { eprintln!("Warning: no trust root specified. Either \ pass the '--trust-root' option, or set \ the 'sequoia.trustRoot' configuration \ key in your repository's local git config \ to reference a commit."); if config.get_str("sequoia.trust-root").is_ok() { eprintln!("Warning: you seem to have set the \ `sequoia.trust-root` key. This key \ has been deprecated."); } } return Err(anyhow::Error::from(err).context( "Reading 'sequoia.trustRoot' from the repository's \ git config.")); } }; commit_by_symbolic_name(git, trust_root, true) }; match cli.subcommand { cli::Subcommand::Init(command) => { commands::init::dispatch(&config, command)?; } cli::Subcommand::Policy { command } => { commands::policy::dispatch(&config, command)?; } cli::Subcommand::Log { policy_file, trust_root, keep_going, prune_certs, commit_range, } => { if prune_certs && commit_range.is_some() && policy_file.path.is_none() { return Err(anyhow!("--prune-certs can only modify \ HEAD or a shadow policy")); } let git = git_repo()?; let trust_root = lookup_trust_root(&git, trust_root.as_deref())?; let shadow_p = if let Some(s) = &policy_file.path { Some(std::fs::read(s)?) } else { None }; let shadow_p = shadow_p.as_deref(); let head = git.head()?.target().unwrap(); let (start, target) = if let Some(commit_range) = commit_range { let mut s = commit_range.splitn(2, ".."); let first = s.next().expect("always one component"); if let Some(second) = s.next() { if second.is_empty() { (commit_by_symbolic_name(&git, first, false)?, head) } else { (commit_by_symbolic_name(&git, first, false)?, commit_by_symbolic_name(&git, second, false)?) } } else { (trust_root, commit_by_symbolic_name(&git, first, false)?) } } else { (trust_root, head) }; let mut cache = VerificationCache::new()?; let mut vresults = VerificationResult::default(); let result = match config.output_format { output::Format::HumanReadable => { verify(&git, trust_root, shadow_p, (start, target), &mut vresults, keep_going, |oid, parent_oid, result| { output::Commit::new( &git, oid, parent_oid, &policy_file.path, result)? .describe(&mut io::stdout(), &config.verbosity)?; Ok(()) }, &mut cache, config.quiet(), config.verbose(), ) }, output::Format::Json => { use serde::ser::{Serializer, SerializeSeq}; let mut serializer = serde_json::ser::Serializer::pretty( std::io::stdout()); let mut seq = serializer.serialize_seq(None)?; let r = verify(&git, trust_root, shadow_p, (start, target), &mut vresults, keep_going, |oid, parent_oid, result| { seq.serialize_element( &output::Commit::new( &git, oid, parent_oid, &policy_file.path, result)? ).map_err(anyhow::Error::from)?; Ok(()) }, &mut cache, // Be quiet. true, false, ); seq.end()?; r }, }; if prune_certs { let mut p = config.read_policy(&policy_file)?; for a in p.authorization_mut().values_mut() { let certs = a.certs()? .map(|r| r.and_then(Cert::try_from)) .collect::>>()?; a.set_certs_filter( certs, // Keep all subkeys that made a signature, and // those that are alive now. |sk| { let fp = sk.key().fingerprint(); vresults.signer_keys.contains(&fp) || { // Slightly awkward, because we // cannot use sk.with_policy. let c = sk.cert(); c.with_policy(&policy, None) .map(|vka| vka.keys().key_handle(fp) .next().is_some()) .unwrap_or(false) } }, // Keep all user IDs that were primary user // IDs when a signature was made, and the ones // that are the primary userid now. |uid| vresults.primary_uids.contains(uid.userid()) || { // Slightly awkward, because we // cannot use sk.with_policy. let c = uid.cert(); c.with_policy(&policy, None) .and_then(|vka| vka.primary_userid()) .map(|u| u.userid() == uid.userid()) .unwrap_or(false) } )?; } config.write_policy(&p, &policy_file)?; } let _ = cache.persist(); result?; }, cli::Subcommand::Verify { policy_file, trust_root, signature, archive, } => { let git = git_repo()?; let policy = if let Some(s) = policy_file.path.as_ref() { Policy::read_file(s) .with_context(|| { format!("Reading specified policy file: {}", s.display()) })? } else { let trust_root = lookup_trust_root( &git, trust_root.as_deref())?; Policy::read_from_commit(&git, &trust_root) .with_context(|| { format!("Reading policy from commit {}", trust_root) })? }; // XXX: In the future, mmap the data. let signature = std::fs::read(&signature) .with_context(|| { format!("Reading signature data from {}", signature.display()) })?; let archive = std::fs::read(&archive) .with_context(|| { format!("Reading archive data from {}", archive.display()) })?; let r = policy.verify_archive(signature, archive); let o = output::Archive::new(r)?; match config.output_format { output::Format::HumanReadable => o.describe(&mut io::stdout())?, output::Format::Json => serde_json::to_writer_pretty(io::stdout(), &o)?, } }, cli::Subcommand::UpdateHook { policy_file, trust_root, ref_name: _, old_object, new_object, } => { let git = git_repo()?; let trust_root = commit_by_symbolic_name(&git, &trust_root, true) .with_context(|| { format!("Looking up specified trust root ({})", trust_root) })?; let new_object = commit_by_symbolic_name(&git, &new_object, false) .with_context(|| { format!("Looking up new object ({})", new_object) })?; let old_object = commit_by_symbolic_name(&git, &old_object, false) .with_context(|| { format!("Looking up old object ({})", old_object) })?; // Fall back to the trust root if this is a new branch. let start = if let Err(err) = git_is_ancestor(&git, old_object, new_object) { if let Some(e) = err.downcast_ref::() { if matches!(e, Error::NoPathConnecting(_, _)) { // There's no path from old object to new // object. Use the trust root. trust_root } else { // Some other error: abort. return Err(err); } } else { // There's a path from old object to new object. old_object } } else { trust_root }; let mut cache = VerificationCache::new()?; let mut vresults = VerificationResult::default(); let shadow_policy = if let Some(file) = policy_file.path.as_ref() { let policy = std::fs::read(file) .with_context(|| { format!("Reading policy file {}", file.display()) })?; Some(policy) } else { None }; eprintln!("Policy file: {:?}", policy_file.path); let result = verify(&git, trust_root, shadow_policy.as_deref(), (start, new_object), &mut vresults, false, |oid, parent_oid, result| { output::Commit::new( &git, oid, parent_oid, &policy_file.path, result)? .describe(&mut io::stdout(), &config.verbosity)?; Ok(()) }, &mut cache, config.quiet(), config.verbose(), ); let _ = cache.persist(); result?; }, cli::Subcommand::Version=> { eprintln!("sq-git {}", env!("CARGO_PKG_VERSION")); eprintln!("using sequoia-openpgp {}", sequoia_openpgp::VERSION); eprintln!("with cryptographic backend {}", sequoia_openpgp::crypto::backend()); } } Ok(()) } /// Given a `clap::Command` and a usage string, try to augment the /// usage message with relevant examples. fn print_examples(cli: &clap::Command, usage: impl ToString) -> Result<()> { // First, find the invoked subcommand. let binary = "sq-git"; let usage = usage.to_string(); let prefix = usage.find(&format!("{} ", binary)); let subcommands = if let Some(i) = prefix { usage[i + binary.len() + 1..].split(" ") // Split, but only take the parts that do not denote options // or flags. .take_while(|p| p.chars().all(|c| c.is_alphabetic())) } else { // Odd... return Ok(()); }; // Now traverse the CLI tree to find the subcommand. let mut cmd = cli; for sub in subcommands { cmd = if let Some(c) = cmd.get_subcommands() .find(|c| c.get_name() == sub) { c } else { // Very odd... return Ok(()); }; } // And print the examples, if any. if let Some(examples) = cmd.get_after_help() { eprintln!("\n{}", examples); } Ok(()) } #[cfg(test)] mod test { use super::*; // Run some clap tests. #[test] fn verify_app() { let cli = cli::build(true); cli.debug_assert(); } } sequoia-git-0.5.0/src/output.rs000064400000000000000000000315421046102023000145570ustar 00000000000000use std::borrow::Cow; use std::io; use std::sync::Mutex; use git2::{Oid, Repository}; use serde::Serialize; use openpgp::{ Cert, Fingerprint, Packet, packet::Signature, }; use super::*; /// What output format to prefer, when there's an option? #[derive(Clone)] pub enum Format { /// Output that is meant to be read by humans, instead of programs. /// /// This type of output has no version, and is not meant to be /// parsed by programs. HumanReadable, /// Output as JSON. Json, } impl std::str::FromStr for Format { type Err = anyhow::Error; fn from_str(s: &str) -> Result { match s { "human-readable" => Ok(Self::HumanReadable), "json" => Ok(Self::Json), _ => Err(anyhow!("unknown output format {:?}", s)), } } } /// Emits a human-readable description of the policy to stdout. pub fn describe_policy(p: &Policy) -> Result<()> { println!("# OpenPGP policy file for git, version {}", p.version()); println!(); println!("## Commit Goodlist"); println!(); for commit in p.commit_goodlist() { println!(" - {}", commit); } println!(); println!("## Authorizations"); println!(); for (i, (name, auth)) in p.authorization().iter().enumerate() { println!("{}. {}", i, name); let ident = vec![' '; i.to_string().len() + 2] .into_iter().collect::(); if auth.sign_commit { println!("{}- may sign commits", ident); } if auth.sign_tag { println!("{}- may sign tags", ident); } if auth.sign_archive { println!("{}- may sign archives", ident); } if auth.add_user { println!("{}- may add users", ident); } if auth.retire_user { println!("{}- may retire users", ident); } if auth.audit { println!("{}- may goodlist commits", ident); } for cert in auth.certs()? { println!("{}- has OpenPGP cert: {}", ident, cert?.fingerprint()); } } Ok(()) } /// Emits a human-readable description of a difference between two /// policies to stdout. pub fn describe_diff(p: &Diff) -> Result<()> { fn quote<'a>(s: &'a str) -> Cow<'a, str> { if s.chars().any(|c| { ! (c.is_alphanumeric() || ['-', '_', '.', '+'].contains(&c)) }) { format!("{:?}", s).into() } else { s.into() } } let quote_component = |c: &Packet| -> String { match c { Packet::PublicSubkey(k) => { format!("subkey {}", k.fingerprint()) } Packet::SecretSubkey(k) => { format!("subkey (with secret key material) {}", k.fingerprint()) } Packet::UserID(u) => { format!("user ID {}", quote(&String::from_utf8_lossy(u.value()))) } c => { format!("{} ({:?})", c.tag(), c) } } }; let is_self_signed = |cert: &Fingerprint, sig: &Signature| -> bool { let cert = KeyHandle::from(cert); sig.get_issuers().into_iter().any(|kh| kh.aliases(&cert)) }; for change in &p.changes { use Change::*; match change { VersionChange { from, to } => println!(" - Version changed from {} to {}.", from, to), GoodlistCommit(oid) => println!(" - Commit {} was added to the goodlist.", oid), UngoodlistCommit(oid) => println!(" - Commit {} was removed from the goodlist.", oid), AddUser(name) => println!(" - User {} was added.", quote(name)), RetireUser(name) => println!(" - User {} was retired.", quote(name)), AddRight(name, right) => println!(" - User {} was granted the right {}.", quote(name), right), RemoveRight(name, right) => println!(" - User {}'s {} right was revoked.", quote(name), right), AddCert(name, fpr) => println!(" - User {}: new certificate {}.", quote(name), fpr), RemoveCert(name, fpr) => println!(" - User {}: removed certificate {}.", quote(name), fpr), AddPacket(name, fpr, component, sig) => println!(" - User {}'s certificate {} has a new {} signature {:02x}{:02x} on {}.", quote(name), fpr, if is_self_signed(fpr, sig) { "self-signed" } else { "third-party" }, sig.digest_prefix()[0], sig.digest_prefix()[1], quote_component(component)), RemovePacket(name, fpr, component, sig) => println!(" - User {}'s certificate {} lost the {} signature {:02x}{:02x} on {}.", quote(name), fpr, if is_self_signed(fpr, sig) { "self-signed" } else { "third-party" }, sig.digest_prefix()[0], sig.digest_prefix()[1], quote_component(component)), } } Ok(()) } // The version of the commit output. This follows semantic // versioning. static COMMIT_JSON_VERSION: &'static str = "1.0.0"; #[derive(Serialize)] pub struct Commit<'a> { version: &'static str, #[serde(serialize_with = "crate::utils::serialize_oid")] id: &'a Oid, // The commit's summary (if any). summary: Option, #[serde(serialize_with = "crate::utils::serialize_optional_oid")] parent_id: Option<&'a Oid>, results: Vec)>>, } static MISSING_SIGNATURE_HINT: Mutex = Mutex::new(false); static MISSING_KEY_HINT: Mutex = Mutex::new(false); static MALFORMED_MESSAGE_HINT: Mutex = Mutex::new(false); impl<'a> Commit<'a> { pub fn new(git: &Repository, id: &'a Oid, parent_id: Option<&'a Oid>, shadow_policy: &Option, result: &'a sequoia_git::Result>>) -> Result { let hint = |e: &Error| -> Option { match (shadow_policy, e) { (None, _) => None, (Some(p), Error::MissingSignature(commit)) => { let mut shown = MISSING_SIGNATURE_HINT.lock().unwrap(); if ! *shown { *shown = true; Some(format!("when using an external policy, do\n\n\ git show {1} \n\ \n and verify that the commit is good. \ If satisfied, do\n\n\ sq-git policy goodlist --policy-file {0} {1}", p.display(), commit)) } else { None } } (Some(p), Error::MissingKey(handle)) => { let mut shown = MISSING_KEY_HINT.lock().unwrap(); if ! *shown { *shown = true; Some(format!("when using an external policy, do\n\n\ sq keyserver get {1} \n\ \n and verify that the cert belongs to the \ committer. If satisfied, do\n\n\ sq-git policy authorize --policy-file {} \ {} --sign-commit", p.display(), handle)) } else { None } } (_, Error::Other(e)) => { if let Some(e) = e.downcast_ref::() { if let openpgp::Error::MalformedMessage(_) = e { let mut shown = MALFORMED_MESSAGE_HINT.lock().unwrap(); if ! *shown { *shown = true; Some(format!("\ a signature is malformed. It was probably created by GitHub, which\n\ is known to created invalid signatures. See the following discussion for\n\ more information:\n\ \n\ https://github.com/orgs/community/discussions/27607")) } else { None } } else { None } } else { None } } _ => None, } }; let mut r = Vec::new(); match result { Ok(results) => { for e in results.iter() .filter_map(|r| r.as_ref().err()) { r.push(Err((e.to_string(), hint(e)))); } for (name, _s, c, _signer_fpr) in results.iter() .filter_map(|r| r.as_ref().ok()) { r.push(Ok(format!("{} [{}]", name, c.fingerprint()))); } }, Err(e) => { r.push(Err((e.to_string(), hint(e)))); }, } let mut summary = None; match git.find_commit(id.clone()) { Ok(commit) => { summary = commit.summary().map(String::from); } Err(err) => { eprintln!("Error looking up commit: {}", err); } } Ok(Commit { version: COMMIT_JSON_VERSION, id, summary, parent_id, results: r, }) } pub fn describe(&self, sink: &mut dyn io::Write, verbosity: &Verbosity) -> Result<()> { for r in &self.results { let id = if let Some(parent_id) = self.parent_id { format!("Authenticating {} with {}", self.id, parent_id) } else { self.id.to_string() }; match r { Err((e, hint)) => { if ! verbosity.quiet() { writeln!(sink, "{}:\n Error: {}", id, e)?; if let Some(summary) = self.summary.as_ref() { writeln!(sink, " {}", summary)?; } if let Some(h) = hint { writeln!(sink, "\n Hint: {}", h)?; } } }, Ok(fp) => { if verbosity.verbose() { writeln!(sink, "{}:\n Signer: {}", id, fp)?; if let Some(summary) = self.summary.as_ref() { writeln!(sink, " {}", summary)?; } } }, } } Ok(()) } } // The version of the commit output. This follows semantic // versioning. static ARCHIVE_JSON_VERSION: &'static str = "1.0.0"; #[derive(Serialize)] pub struct Archive { version: &'static str, results: Vec>, } impl Archive { pub fn new(result: sequoia_git::Result>>) -> Result { let mut r = Vec::new(); match result { Ok(results) => { for e in results.iter() .filter_map(|r| r.as_ref().err()) { r.push(Err(e.to_string())); } for (name, _s, c, _signer_fpr) in results.iter() .filter_map(|r| r.as_ref().ok()) { r.push(Ok(format!("{} [{}]", name, c.fingerprint()))); } }, Err(e) => { r.push(Err(e.to_string())); }, } Ok(Self { version: ARCHIVE_JSON_VERSION, results: r, }) } pub fn describe(&self, sink: &mut dyn io::Write) -> Result<()> { for r in &self.results { match r { Err(e) => { writeln!(sink, "{}", e)?; }, Ok(fp) => { writeln!(sink, "{}", fp)?; }, } } Ok(()) } } sequoia-git-0.5.0/src/persistent_set.rs000064400000000000000000000175171046102023000163000ustar 00000000000000//! A set of uniformly distributed 32-byte values that can be //! persisted. //! //! The version 0 file format is: //! //! | Offset | Description | //! | -----: | ----------- | //! | | Header //! | 0 | 15-byte magic value `b"StoredSortedSet"` //! | 15 | Version (`0`) //! | 16 | Context, 12 bytes of application-specific, opaque data //! | | Content //! | 28 | Entry count - big endian 32-bit unsigned integer //! | 32 | Entry 0 - big endian 32-byte unsigned integer //! | 48 | Entry 1 //! | ... | ... //! //! The entries are sorted, which allows doing an in-place binary //! search. They are interpreted as big endian 32-byte unsigned //! integers. use std::{ collections::BTreeSet, io::{ Seek, SeekFrom, Write, }, path::Path, }; use buffered_reader::{BufferedReader}; const VALUE_BYTES: usize = 32; pub type Value = [u8; VALUE_BYTES]; type File = buffered_reader::File<'static, ()>; pub struct Set { header: Header, store: File, scratch: BTreeSet, } /// A set data type with 32-byte keys, which can be easily persisted. /// /// The entire data structure is `mmap`ed or read into memory. /// /// Currently, there is no way to remove entries. impl Set { /// Returns the number of entries. #[allow(dead_code)] fn len(&self) -> usize { usize::try_from(self.header.entries).expect("representable") + self.scratch.len() // XXX: overestimate b/c of how insert is implemented } /// Returns `true` if the set contains an element equal to the value. pub fn contains(&mut self, value: &Value) -> Result { Ok(self.stored_values()?.binary_search(value).is_ok() || self.scratch.contains(value)) } /// Adds a value to the set. pub fn insert(&mut self, value: Value) { // We insert it into our overlay without checking whether it // exists in the stored set to avoid the lookup overhead. We // sort this out when persisting any changes to disk. self.scratch.insert(value); } fn stored_values(&mut self) -> Result<&[Value]> { let entries = self.header.entries as usize; let bytes = self.store.data_hard(entries * VALUE_BYTES)?; unsafe { Ok(std::slice::from_raw_parts(bytes.as_ptr() as *const Value, entries)) } } pub fn read>(path: P, context: &str) -> Result { // We are going to read an array of values into memory, and // use them as is. Check that layout matches (i.e., that Rust // doesn't expect any padding). assert_eq!(VALUE_BYTES, std::mem::size_of::()); assert_eq!(std::mem::size_of::<[Value; 2]>(), 2 * VALUE_BYTES, "values are unpadded"); let context: [u8; CONTEXT_BYTES] = context.as_bytes() .try_into() .map_err(|_| Error::BadContext)?; let (header, reader) = match File::open(path) { Ok(mut f) => { let header = Header::read(&mut f, context)?; (header, f) }, Err(e) if e.kind() == std::io::ErrorKind::NotFound => { let t = tempfile::NamedTempFile::new()?; // XXX: Rather, we should be using t.reopen() here and // constructing a File from that: let f = File::open(t.path())?; (Header::new(context), f) }, Err(e) => return Err(e.into()), }; // XXX: check here if the number of entries is plausible by // looking at the file metadata. This is currently not // possible to do in a race free manner. Ok(Set { header, store: reader, scratch: Default::default(), }) } pub fn write>(&mut self, path: P) -> Result<()> { // If we didn't change anything, we're done. if self.scratch.is_empty() { return Ok(()); } let mut sink = tempfile::NamedTempFile::new_in( path.as_ref().parent().ok_or(Error::BadPath)?)?; // First update and write the header. let mut h = self.header.clone(); h.entries = 0; // Fill be fixed later. h.write(&mut sink)?; // Then, merge the two sets while writing them out. let mut entries = 0; let scratch = std::mem::replace(&mut self.scratch, Default::default()); let mut stored = self.stored_values()?; for new in scratch.iter() { let p = stored.partition_point(|v| v < new); let before = &stored[..p]; let before_bytes = unsafe { std::slice::from_raw_parts(before.as_ptr() as *const u8, before.len() * VALUE_BYTES) }; sink.write_all(before_bytes)?; entries += p; // See if this is actually new. if before.is_empty() || &before[p - 1] != new { sink.write_all(new)?; entries += 1; } // Now advance the stored "iterator". stored = &stored[p..]; } // Now write out the final chunk. { let stored_bytes = unsafe { std::slice::from_raw_parts(stored.as_ptr() as *const u8, stored.len() * VALUE_BYTES) }; sink.write_all(stored_bytes)?; entries += stored.len(); } // And put scratch back. self.scratch = scratch; // Finally, write the header again, this time with the correct // number of values. sink.as_file_mut().seek(SeekFrom::Start(0))?; h.entries = entries.try_into().map_err(|_| Error::TooManyEntries)?; h.write(&mut sink)?; sink.flush()?; sink.persist(path).map_err(|pe| pe.error)?; Ok(()) } } const CONTEXT_BYTES: usize = 12; #[derive(Debug, Clone)] struct Header { version: u8, context: [u8; CONTEXT_BYTES], entries: u32, } impl Header { const MAGIC: &'static [u8; 15] = b"StoredSortedSet"; fn new(context: [u8; CONTEXT_BYTES]) -> Self { Header { version: 1, context, entries: 0, } } fn read(reader: &mut File, context: [u8; CONTEXT_BYTES]) -> Result { let m = reader.data_consume_hard(Self::MAGIC.len())?; if &m[..Self::MAGIC.len()] != &Self::MAGIC[..] { return Err(Error::BadMagic); } let v = reader.data_consume_hard(1)?; let version = v[0]; if version != 1 { return Err(Error::UnsupportedVersion(version)); } let c = &reader.data_consume_hard(context.len())?[..context.len()]; if &c[..] != &context[..] { return Err(Error::BadContext); } let e = &reader.data_consume_hard(4)?[..4]; let entries = u32::from_be_bytes(e.try_into().expect("we read 4 bytes")); Ok(Header { version, context, entries, }) } fn write(&self, sink: &mut dyn Write) -> Result<()> { sink.write_all(Self::MAGIC)?; sink.write_all(&[self.version])?; sink.write_all(&self.context)?; sink.write_all(&self.entries.to_be_bytes())?; Ok(()) } } /// Errors for this crate. #[derive(thiserror::Error, Debug)] pub enum Error { #[error("Bad magic read from file")] BadMagic, #[error("Unsupported version: {0}")] UnsupportedVersion(u8), #[error("Bad context read from file")] BadContext, #[error("Too many entries")] TooManyEntries, #[error("Bad path")] BadPath, #[error("Io error")] Io(#[from] std::io::Error), } /// Result specialization. pub type Result = ::std::result::Result; sequoia-git-0.5.0/src/policy.rs000064400000000000000000001156331046102023000145220ustar 00000000000000use std::{ collections::{BTreeMap, BTreeSet, btree_map::Entry, HashSet}, env, fmt, fs, io::{self, Read, Write}, path::{Path, PathBuf}, time::SystemTime, }; use git2::{ Repository, Oid, }; use serde::{Deserialize, Serialize}; use sequoia_openpgp::{ self as openpgp, Cert, Fingerprint, KeyHandle, Packet, cert::{ amalgamation::ValidAmalgamation, prelude::{SubordinateKeyAmalgamation, UserIDAmalgamation}, raw::{RawCert, RawCertParser}, }, packet::{ Signature, UserID, key::PublicParts, }, parse::Parse, parse::{stream::*}, policy::StandardPolicy, serialize::Serialize as _, types::SignatureType, }; use crate::{ Error, Result, utils::prune_cert, utils::serialize_packet, utils::serialize_signature, }; /// Whether to trace execution by default (on stderr). const TRACE: bool = false; /// A policy for OpenPGP signatures in git. /// /// A `Policy` governs state changes in git repositories. A state /// change is a change from one git commit with a policy embedded into /// it to the next commit, which may change the policy, the source, or /// both. #[derive(Default, Clone, Deserialize, Serialize, PartialEq, Eq)] pub struct Policy { /// Policy version. /// /// We provide backwards-compatibility but not /// forward-compatibility, so that we can evolve the policy /// language. #[serde(default)] version: usize, /// Set of commits that is assumed to be good. /// /// The commits will pass verification even if it would fail for /// whatever reason. /// /// To change this set, you need the `audit` right. #[serde(default)] commit_goodlist: BTreeSet, /// Set of authorizations. /// /// The key is a free-form, human-readable identifier for the /// authorization. #[serde(default)] authorization: BTreeMap, } impl Policy { /// Returns the path to the policy file in the current git /// repository. fn working_dir_policy_file() -> Result { let git = git2::Repository::discover(env::current_dir()?)?; if let Some(wd) = git.workdir() { Ok(wd.join("openpgp-policy.toml")) } else { Err(Error::InvalidOperation("doesn't work on bare repos".into())) } } pub fn parse_bytes>(bytes: D) -> Result { let bytes = bytes.as_ref(); let s = std::str::from_utf8(bytes) .map_err(|e| Error::StorageError(e.to_string()))?; let policy = toml::from_str(s) .map_err(|e| Error::StorageError(e.to_string()))?; Ok(policy) } /// Reads the policy from the given path. pub fn read_file>(path: P) -> Result { let path = path.as_ref(); let mut f = fs::File::open(path)?; let mut s = String::new(); f.read_to_string(&mut s)?; let p: Policy = toml::from_str(&s).map_err(|e| Error::StorageError(e.to_string()))?; Ok(p) } /// Reads the policy from the given path. pub fn read_file_or_default>(path: P) -> Result { let path = path.as_ref(); let mut f = match fs::File::open(path) { Ok(f) => f, Err(e) => if e.kind() == io::ErrorKind::NotFound { return Ok(Policy::default()); } else { return Err(e.into()); }, }; let mut s = String::new(); f.read_to_string(&mut s)?; let p: Policy = toml::from_str(&s).map_err(|e| Error::StorageError(e.to_string()))?; Ok(p) } /// Reads the policy from the current git working directory. /// /// Default to the empty policy if the work directory doesn't /// contain a policy. pub fn read_from_working_dir() -> Result { Self::read_file_or_default(&Self::working_dir_policy_file()?) } /// Reads the policy from the given git commit. pub fn read_bytes_from_commit(git: &Repository, commit: &Oid) -> Result> { tracer!(TRACE, "Policy::read_bytes_from_commit"); t!("(_, {})", commit); let commit = git.find_commit(commit.clone())?; let tree = commit.tree()?; let result = if let Some(entry) = tree.get_name("openpgp-policy.toml") { Ok(entry.to_object(&git)?.peel_to_blob()?.content().to_vec()) } else { Err(Error::MissingPolicy(commit.id())) }; result } /// Reads the policy from the given git commit. pub fn read_from_commit(git: &Repository, commit: &Oid) -> Result { Self::parse_bytes(Self::read_bytes_from_commit(git, commit)?) } /// Writes the policy into a file with the given path. pub fn write>(&self, path: P) -> Result<()> { let path = path.as_ref(); let mut new = tempfile::NamedTempFile::new_in(path.parent().unwrap())?; new.write_all(toml::to_string_pretty(&self) .map_err(|e| Error::StorageError(e.to_string()))? .as_bytes())?; new.persist(path).map_err(|e| Error::StorageError(e.to_string()))?; Ok(()) } /// Writes the policy to the current git working directory. pub fn write_to_working_dir(&self) -> Result<()> { self.write(&Self::working_dir_policy_file()?) } /// The policy version. pub fn version(&self) -> usize { self.version } /// Set of commits that is assumed to be good. /// /// The commits will pass verification even if it would fail for /// whatever reason. /// /// To change this set, you need the `audit` right. pub fn commit_goodlist(&self) -> &BTreeSet { &self.commit_goodlist } /// Set of commits that is assumed to be good. /// /// The commits will pass verification even if it would fail for /// whatever reason. /// /// To change this set, you need the `audit` right. pub fn commit_goodlist_mut(&mut self) -> &mut BTreeSet { &mut self.commit_goodlist } /// Set of authorizations. /// /// The key is a free-form, human-readable identifier for the /// authorization. pub fn authorization(&self) -> &BTreeMap { &self.authorization } /// Set of authorizations. /// /// The key is a free-form, human-readable identifier for the /// authorization. pub fn authorization_mut(&mut self) -> &mut BTreeMap { &mut self.authorization } /// Computes the difference between this policy and `other`. pub fn diff<'f, 't>(&'f self, other: &'t Policy) -> Result> { let mut changes = Vec::new(); // First, the version. if self.version != other.version { changes.push(Change::VersionChange { from: self.version, to: other.version, }); } // Then, the commit goodlist. for c in self.commit_goodlist.difference(&other.commit_goodlist) { changes.push(Change::UngoodlistCommit(c.parse()?)); } for c in other.commit_goodlist.difference(&self.commit_goodlist) { changes.push(Change::GoodlistCommit(c.parse()?)); } // This null authorization comes in handy when introducing // new users and removing users. let null_auth = Authorization::default(); // Now for the authorizations. First, see if some vanished. for (k, from) in self.authorization.iter() .filter(|(k, _)| ! other.authorization.contains_key(k.as_str())) { // First, remove all the rights and certs. from.diff(&null_auth, k.into(), &mut changes); // Finally, remove the user. changes.push(Change::RetireUser(k.into())); } // Then, compare the common ones. for (k, from, to) in self.authorization.iter() .filter_map(|(k, from)| other.authorization.get(k) .map(|to| (k, from, to))) { from.diff(to, k.into(), &mut changes); } // See if new users were introduced. for (k, to) in other.authorization.iter() .filter(|(k, _)| ! self.authorization.contains_key(k.as_str())) { // First introduce the new user. changes.push(Change::AddUser(k.into())); // Then, all the new rights and certs. null_auth.diff(to, k.into(), &mut changes); } Ok(Diff { version: DIFF_JSON_VERSION, from: self, changes, to: other, }) } /// Verifies that the given commit adheres to this policy. /// /// During verification, the key(s) used are stored in /// `signer_keys`, and the primary user id of the issuing cert at /// the time of the signing is stored in `primary_uids`. This /// information can be used to prune certs in a policy. /// /// If the commit is goodlisted, this function returns Ok with an /// empty vector of verification results. pub fn verify(&self, git: &Repository, commit_id: &Oid, commit_policy: &Policy, signer_keys: &mut BTreeSet, primary_uids: &mut BTreeSet) -> Result>> { tracer!(TRACE, "Policy::verify"); t!("verify(_, {})", commit_id); if self.commit_goodlist.contains(&commit_id.to_string()) { Ok(vec![]) } else { let Ok((sig, data)) = git.extract_signature(commit_id, None) else { return Ok(vec![Err(Error::MissingSignature(commit_id.clone()))]); }; t!("{} bytes of signature", sig.len()); //let commit = git.find_commit(commit_id.clone())?; //let commit_time = commit.time(); //let commit_time = std::time::UNIX_EPOCH // + std::time::Duration::new(commit_time.seconds() as u64, 0); // Note the commit time and the signature time will often // diverge. This is because the signature is created // after the commit is made (the signature is over the // commit, including the creation time). If we use the // commit's time as the reference time, then the signature // will appear to have been made in the future. Note: it // is not enough to allow a few seconds of divergence, // because commits can be resigned without changing the // commit's time. self.verify_(&sig[..], &data[..], commit_policy, None, signer_keys, primary_uids, Error::MissingSignature(commit_id.clone()), Right::SignCommit) } } pub fn verify_archive(&self, signature: S, archive: T) -> Result>> where T: AsRef<[u8]>, S: AsRef<[u8]>, { let mut signer_keys = Default::default(); let mut primary_uids = Default::default(); self.verify_(signature.as_ref(), archive.as_ref(), self, None, &mut signer_keys, &mut primary_uids, Error::MissingDataSignature("Tarball".into()), Right::SignArchive) } fn verify_(&self, signature: &[u8], data: &[u8], commit_policy: &Policy, commit_time: Option, signer_keys: &mut BTreeSet, primary_uids: &mut BTreeSet, missing_signature_error: Error, require_right: Right) -> Result>> { tracer!(TRACE, "Policy::verify_"); t!("verify_({} bytes, {} bytes, _, {:?}, _, _, {}, {})", signature.len(), data.len(), commit_time, missing_signature_error, require_right); let p = &StandardPolicy::new(); let h = Helper { parent_policy: self, child_policy: commit_policy, signer_keys, primary_uids, results: Default::default(), }; let mut v = DetachedVerifierBuilder::from_bytes(signature)? .with_policy(p, commit_time, h)?; v.verify_bytes(data)?; let h = v.into_helper(); let signature_results = h.results; if signature_results.is_empty() { t!("no signatures found!"); return Ok(vec![Err(missing_signature_error)]); } if signature_results.iter().all(|r| r.is_err()) { let e = signature_results.into_iter().find(|r| r.is_err()) .expect("not empty and not all were ok"); return Err(e.unwrap_err()); } // If we are here, there is at least one valid OpenPGP // signature. Compute the diff between the policies, and // check whether the authorization invariant is intact. let diff = self.diff(commit_policy)?; let mut results: Vec> = Vec::new(); for r in signature_results { match r { Ok((sig, cert, signer_fpr)) => { // Find all authorizations that contain a // certificate that did issue a valid signature. let cert_fp = cert.fingerprint(); for (name, a) in self.authorization.iter() .filter(|(_, a)| a.certs().into_iter() .flat_map(|r| r.into_iter()) .flat_map(|r| r.into_iter()) .any(|c| c.fingerprint() == cert_fp)) { t!("{}: valid signature", name); let r = a.rights(); t!("{}: {:?}", name, r); if let Err(e) = r.assert(require_right) .and_then(|_| diff.assert(&r)) { results.push(Err(e)); } else { results.push( Ok((name.into(), sig.clone(), cert.clone(), signer_fpr.clone()))); } } }, Err(e) => results.push(Err(e)), } } Ok(results) } } // This fetches keys and computes the validity of the verification. struct Helper<'p> { parent_policy: &'p Policy, child_policy: &'p Policy, //signer_userids: &'p mut BTreeSet, signer_keys: &'p mut BTreeSet, primary_uids: &'p mut BTreeSet, results: Vec>, } impl Helper<'_> { fn handle_result(&mut self, r: VerificationResult) { tracer!(TRACE, "VerificationHelper::handle_result"); match r { Ok(sig) => { self.signer_keys.insert(sig.ka.key().fingerprint()); if let Ok(userid) = sig.ka.valid_cert().primary_userid() { let u = userid.userid(); if ! self.primary_uids.contains(u) { self.primary_uids.insert(u.clone()); } } self.results.push( Ok((sig.sig.clone(), sig.ka.cert().clone(), sig.ka.key().fingerprint().clone()))); }, Err(e) => { t!("Signature verification failed: {}", e); use VerificationError::*; self.results.push(Err(match e { MalformedSignature { error, .. } => Error::BadSignature(error.to_string()), MissingKey { sig } => { let mut issuers = sig.get_issuers(); if issuers.is_empty() { Error::BadSignature( "No issuer information".into()) } else { Error::MissingKey(issuers.remove(0)) } }, UnboundKey { cert, error, .. } => Error::BadKey(cert.key_handle(), error.to_string()), BadKey { ka, error, .. } => Error::BadKey(ka.cert().key_handle(), error.to_string()), BadSignature { error, .. } => Error::BadSignature(error.to_string()), UnknownSignature { sig, .. } => Error::BadSignature(sig.error().to_string()), u => Error::BadSignature(u.to_string()), })); }, } } } impl VerificationHelper for Helper<'_> { fn get_certs(&mut self, ids: &[KeyHandle]) -> openpgp::Result> { tracer!(TRACE, "VerificationHelper::get_certs"); t!("get_certs({:?})", ids); let mut matches: BTreeMap = BTreeMap::new(); let mut parent: BTreeMap> = BTreeMap::new(); for (name, auth) in self.parent_policy.authorization.iter() { for cert in auth.certs()? { let cert = cert?; // parent contains all of the certificates. let entry = parent.entry(cert.fingerprint()); match entry { Entry::Occupied(mut oe) => { oe.get_mut().push(cert.clone()); } Entry::Vacant(ve) => { ve.insert(vec![ cert.clone() ]); } } if cert.keys().any( |k| ids.iter().any(|i| i.aliases(&k.key_handle()))) { t!("Signature could be from {}", name); let cert = Cert::try_from(cert)?; let entry = matches.entry(cert.fingerprint()); match entry { Entry::Occupied(mut oe) => { let c: &mut Cert = oe.get_mut(); *c = c.clone().merge_public(cert)?; } Entry::Vacant(ve) => { ve.insert(cert); } } } } } // We now merge in certificate updates from the child. That // is, we *don't* add new certificates. // Optimize the typical case: the policies are the same and // thus the child has no updates. if self.parent_policy != self.child_policy { // Merge child into parent stripping any revocation // certificates from the child. let merge = |parent: Cert, child: Cert| -> Result { let child = child.into_packets().filter(|p| { if let Packet::Signature(sig) = p { ! matches!(sig.typ(), SignatureType::KeyRevocation | SignatureType::SubkeyRevocation | SignatureType::CertificationRevocation) } else { true } }); Ok(parent.insert_packets(child)?.0) }; for (name, auth) in self.child_policy.authorization.iter() { let child_certs = if let Ok(certs) = auth.certs() { certs } else { // Silently ignore any parse errors. continue; }; for child_cert in child_certs { let child_cert = if let Ok(cert) = child_cert { cert } else { // Silently ignore any parse errors. continue; }; let fpr = child_cert.fingerprint(); if let Some(cert) = matches.get_mut(&fpr) { t!("Updating {}", fpr); let child_cert = if let Ok(cert) = Cert::try_from(child_cert) { cert } else { // Silently ignore any parse errors. continue; }; if let Ok(merged) = merge(cert.clone(), child_cert) { *cert = merged; } } else { if child_cert.keys().any( |k| ids.iter().any(|i| i.aliases(&k.key_handle()))) { t!("Signature could be from {}", name); // cert is not in matches, but it is // present in the parent policy. This // happens if the certificate gains a // subkey in the child policy, and the // commit is signed by that subkey. if let Some(certs) = parent.get(&child_cert.fingerprint()) { if let Ok(child_cert) = Cert::try_from(child_cert) { let mut parent: Option = None; for c in certs.into_iter() { let c = if let Ok(c) = Cert::try_from(c) { c } else { continue; }; if let Some(parent) = parent.as_mut() { if let Ok(merged) = parent.clone().merge_public(c) { *parent = merged; } } else { parent = Some(c); } } let parent = if let Some(parent) = parent { parent } else { continue; }; // Merge in the child. if let Ok(merged) = merge(parent, child_cert) { matches.insert( merged.fingerprint(), merged); } } } } } } } } Ok(matches.into_values().collect()) } fn check(&mut self, structure: MessageStructure) -> openpgp::Result<()> { tracer!(TRACE, "VerificationHelper::get_certs"); if false { t!("check({:?})", structure); } for (i, layer) in structure.into_iter().enumerate() { match layer { MessageLayer::SignatureGroup { results } if i == 0 => { for r in results { self.handle_result(r); } }, _ => return Err(Error::BadSignature( "Unexpected signature structure".into()).into()), } } Ok(()) } } #[derive(Default, Clone, Deserialize, Serialize, PartialEq, Eq)] pub struct Authorization { #[serde(default, skip_serializing_if = "bool_is_false")] pub sign_commit: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub sign_tag: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub sign_archive: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub add_user: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub retire_user: bool, #[serde(default, skip_serializing_if = "bool_is_false")] pub audit: bool, pub keyring: String, } fn bool_is_false(b: &bool) -> bool { *b == false } impl Authorization { pub fn rights(&self) -> Rights { use Right::*; let mut r = BTreeSet::default(); if self.sign_commit { r.insert(SignCommit); } if self.sign_tag { r.insert(SignTag); } if self.sign_archive { r.insert(SignArchive); } if self.add_user { r.insert(AddUser); } if self.retire_user { r.insert(RetireUser); } if self.audit { r.insert(Audit); } Rights(r) } pub fn certs(&self) -> Result>> { Ok(RawCertParser::from_bytes(self.keyring.as_bytes())?) } pub fn set_certs(&mut self, certs: Vec) -> Result<()> { self.set_certs_filter(certs, |_| true, |_| true) } pub fn set_certs_filter(&mut self, certs: Vec, mut subkeys: S, mut userids: U) -> Result<()> where S: FnMut(&SubordinateKeyAmalgamation) -> bool, U: FnMut(&UserIDAmalgamation) -> bool, { let mut keyring = Vec::new(); for c in certs { let c = prune_cert(c, &mut subkeys, &mut userids)?; c.armored().export(&mut keyring)?; } self.keyring = String::from_utf8(keyring) .map_err(|e| Error::StorageError(e.to_string()))?; Ok(()) } /// Computes the difference between this authorization and `other` /// recording the changes in `changes`. fn diff(&self, other: &Authorization, name: String, changes: &mut Vec) { let (from, to) = (self, other); // First, see if rights were removed. if from.sign_commit && ! to.sign_commit { changes.push(Change::RemoveRight(name.clone(), Right::SignCommit)); } if from.sign_tag && ! to.sign_tag { changes.push(Change::RemoveRight(name.clone(), Right::SignTag)); } if from.sign_archive && ! to.sign_archive { changes.push(Change::RemoveRight(name.clone(), Right::SignArchive)); } if from.add_user && ! to.add_user { changes.push(Change::RemoveRight(name.clone(), Right::AddUser)); } if from.retire_user && ! to.retire_user { changes.push(Change::RemoveRight(name.clone(), Right::RetireUser)); } if from.audit && ! to.audit { changes.push(Change::RemoveRight(name.clone(), Right::Audit)); } // Then, see if rights were added. if ! from.sign_commit && to.sign_commit { changes.push(Change::AddRight(name.clone(), Right::SignCommit)); } if ! from.sign_tag && to.sign_tag { changes.push(Change::AddRight(name.clone(), Right::SignTag)); } if ! from.sign_archive && to.sign_archive { changes.push(Change::AddRight(name.clone(), Right::SignArchive)); } if ! from.add_user && to.add_user { changes.push(Change::AddRight(name.clone(), Right::AddUser)); } if ! from.retire_user && to.retire_user { changes.push(Change::AddRight(name.clone(), Right::RetireUser)); } if ! from.audit && to.audit { changes.push(Change::AddRight(name.clone(), Right::Audit)); } // Check for changes to the certificates. if self.keyring != other.keyring { // Parse the keyring. // // XXX: We silently ignore certificates that we are unable // to parse. We should perhaps reject any changes that we // don't understand. fn parse_keyring<'a>(name: &str, keyring: &'a str) -> BTreeMap>> { match RawCertParser::from_bytes(keyring) { Err(err) => { eprintln!("Parsing {}'s keyring: {}", name, err); Default::default() } Ok(certs) => { let certs = certs.into_iter() .filter_map(|cert| { match cert { Err(err) => { eprintln!("Parsing certificate from {}'s keyring: {}", name, err); None } Ok(cert) => Some(cert), } }); let mut map: BTreeMap> = BTreeMap::new(); for cert in certs { let entry = map.entry(cert.fingerprint()); match entry { Entry::Occupied(mut oe) => { let oe: &mut Vec = oe.get_mut(); oe.push(cert); } Entry::Vacant(ve) => { ve.insert(vec![ cert ]); } } } map } } } let old = parse_keyring(&name, &self.keyring); let new = parse_keyring(&name, &other.keyring); // Identify certificates have been added or removed. let old_certs: BTreeSet<&Fingerprint> = old.keys().collect(); let new_certs: BTreeSet<&Fingerprint> = new.keys().collect(); for &removed in old_certs.difference(&new_certs) { changes.push(Change::RemoveCert(name.clone(), removed.clone())); } for &added in new_certs.difference(&old_certs) { changes.push(Change::AddCert(name.clone(), added.clone())); } // For certificates that the two keyrings have in common, // identify the packets that have been added or removed. for &fpr in old_certs.intersection(&new_certs) { let old = old.get(fpr).expect("have it"); let new = new.get(fpr).expect("have it"); if old == new { continue; } // Convert each signature into a tuple consisting of a // signature and its associated component. let into_packets = |certs: Vec| -> HashSet<(Packet, Signature)> { let mut pairs: HashSet<(Packet, Signature)> = HashSet::new(); for cert in certs.into_iter() { let mut packets = cert.packets(); let primary_key = packets.next().expect("have a primary key"); let primary_key = match Packet::try_from(primary_key) { Ok(p) => p, Err(err) => { eprintln!( "Warning: {} has a corrupted primary key \ packet (skipped): {}", cert.fingerprint(), err); continue; } }; packets.fold( primary_key, |component, packet| { let packet = match Packet::try_from(packet) { Ok(p) => p, Err(err) => { eprintln!( "Warning: {} has a corrupted packet \ (skipped): {}", cert.fingerprint(), err); return component; } }; match packet { Packet::Signature(sig) => { pairs.insert( (component.clone(), sig.clone())); component } Packet::Marker(_) => { // Silently skip marker packets. component } _ => { // New component. packet.clone() } } }); } pairs }; let old_packets = into_packets(old.clone()); let new_packets = into_packets(new.clone()); for (component, sig) in old_packets.difference(&new_packets) { changes.push(Change::RemovePacket(name.clone(), fpr.clone(), component.clone(), sig.clone())); } for (component, sig) in new_packets.difference(&old_packets) { changes.push(Change::AddPacket(name.clone(), fpr.clone(), component.clone(), sig.clone())); } } } } } // The version of the commit output. This follows semantic // versioning. static DIFF_JSON_VERSION: &'static str = "1.0.0"; /// The difference between two [`Policy`]s. #[derive(Serialize)] pub struct Diff<'f, 't> { version: &'static str, pub from: &'f Policy, pub changes: Vec, pub to: &'t Policy, } impl Diff<'_, '_> { fn assert(&self, r: &Rights) -> Result<()> { for c in &self.changes { c.assert(r)?; } Ok(()) } } use crate::utils::{serialize_fp, serialize_oid}; #[derive(Clone, Serialize)] pub enum Change { VersionChange { from: usize, to: usize, }, GoodlistCommit( #[serde(serialize_with = "serialize_oid")] Oid), UngoodlistCommit( #[serde(serialize_with = "serialize_oid")] Oid), AddUser(String), RetireUser(String), AddRight(String, Right), RemoveRight(String, Right), AddCert(String, #[serde(serialize_with = "serialize_fp")] Fingerprint), RemoveCert(String, #[serde(serialize_with = "serialize_fp")] Fingerprint), AddPacket(String, // The certificate. #[serde(serialize_with = "serialize_fp")] Fingerprint, // The component that the packet is associated with. #[serde(serialize_with = "serialize_packet")] Packet, // The signature that was added. #[serde(serialize_with = "serialize_signature")] Signature), RemovePacket(String, // The certificate. #[serde(serialize_with = "serialize_fp")] Fingerprint, // The component that the packet is associated with. #[serde(serialize_with = "serialize_packet")] Packet, // The signature that was removed. #[serde(serialize_with = "serialize_signature")] Signature), } impl Change { fn assert(&self, r: &Rights) -> Result<()> { use Change::*; match self { VersionChange { .. } => r.assert(Right::Audit), GoodlistCommit(_) => r.assert(Right::Audit), UngoodlistCommit(_) => r.assert(Right::Audit), // Rights management. AddUser(_) => r.assert(Right::AddUser), RetireUser(_) => r.assert(Right::RetireUser), AddRight(_, right) => r.assert(Right::AddUser).and_then(|_| r.assert(*right)), RemoveRight(_, right) => r.assert(Right::RetireUser).and_then(|_| r.assert(*right)), // Cert management. AddCert(_, _) => r.assert(Right::AddUser), RemoveCert(_, _) => r.assert(Right::RetireUser), // Lenient cert updates. AddPacket(_, _, _, _) => Ok(()), // Strict cert trimmings. RemovePacket(_, fpr, _component, sig) => { if sig.get_issuers().into_iter() .any(|kh| kh.aliases(KeyHandle::from(fpr))) { // First party signatures can only be removed by // authorized users. r.assert(Right::RetireUser) } else { Ok(()) } } } } } #[derive(Debug)] pub struct Rights(BTreeSet); impl Rights { fn assert(&self, r: Right) -> Result<()> { if ! self.0.contains(&r) { Err(Error::Unauthorized(format!("Right {} is missing", r))) } else { Ok(()) } } } #[derive(Debug, Clone, Copy, Serialize, PartialEq, Eq, PartialOrd, Ord)] pub enum Right { SignCommit, SignTag, SignArchive, AddUser, RetireUser, Audit, } impl fmt::Display for Right { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use Right::*; match self { SignCommit => f.write_str("sign-commit"), SignTag => f.write_str("sign-tag"), SignArchive => f.write_str("sign-archive"), AddUser => f.write_str("add-user"), RetireUser => f.write_str("retire-user"), Audit => f.write_str("audit"), } } } sequoia-git-0.5.0/src/utils.rs000064400000000000000000000070711046102023000143570ustar 00000000000000use git2::Oid; use serde::ser::Error; use sequoia_openpgp::{ Cert, Fingerprint, Packet, armor::{ Kind, Writer, }, cert::{ prelude::{SubordinateKeyAmalgamation, UserIDAmalgamation}, }, packet::{ key::PublicParts, Signature, }, serialize::Serialize, }; use crate::{ Result, }; pub fn prune_cert(c: Cert, subkeys: S, userids: U) -> Result where S: FnMut(&SubordinateKeyAmalgamation) -> bool, U: FnMut(&UserIDAmalgamation) -> bool, { // Remove all user attributes, keep only the subkeys that // are plausible signing subkeys. let c = c.retain_user_attributes(|_| false) .retain_subkeys(|s| s.self_signatures().any( |s| s.key_flags().map(|f| f.for_signing()) .unwrap_or(false))); // Filter out any third-party certifications. let mut acc = Vec::new(); // The primary key and related signatures. let pk_bundle = c.primary_key().bundle(); acc.push(pk_bundle.key().clone().into()); for s in pk_bundle.self_signatures() { acc.push(s.clone().into()) } for s in pk_bundle.self_revocations() { acc.push(s.clone().into()) } // The subkeys and related signatures. for skb in c.keys().subkeys().filter(subkeys) { acc.push(skb.key().clone().into()); for s in skb.self_signatures() { acc.push(s.clone().into()) } for s in skb.self_revocations() { acc.push(s.clone().into()) } } // The UserIDs. for uidb in c.userids().filter(userids) { acc.push(uidb.userid().clone().into()); for s in uidb.self_signatures() { acc.push(s.clone().into()) } for s in uidb.self_revocations() { acc.push(s.clone().into()) } } Ok(Cert::from_packets(acc.into_iter())?) } #[allow(dead_code)] pub fn deserialize_oid<'de, D>(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { use serde::de::{Deserialize, Error}; String::deserialize(deserializer) .and_then(|s| s.parse().map_err(|e| Error::custom(e))) } pub fn serialize_oid(v: &Oid, serializer: S) -> std::result::Result where S: serde::Serializer, { serializer.serialize_str(&v.to_string()) } #[allow(dead_code)] pub fn serialize_optional_oid(v: &Option<&Oid>, serializer: S) -> std::result::Result where S: serde::Serializer, { if let Some(v) = v { serializer.serialize_str(&v.to_string()) } else { serializer.serialize_none() } } pub fn serialize_fp(v: &Fingerprint, serializer: S) -> std::result::Result where S: serde::Serializer, { serializer.serialize_str(&format!("{}", v)) } pub fn serialize_packet(p: &Packet, serializer: S) -> std::result::Result where S: serde::Serializer, { let mut writer = Writer::new(Vec::new(), Kind::File).map_err(Error::custom)?; p.serialize(&mut writer).map_err(Error::custom)?; let buffer = writer.finalize().map_err(Error::custom)?; serializer.serialize_str(&String::from_utf8_lossy(&buffer)) } pub fn serialize_signature(s: &Signature, serializer: S) -> std::result::Result where S: serde::Serializer, { serialize_packet(&Packet::from(s.clone()), serializer) } sequoia-git-0.5.0/src/verify.rs000064400000000000000000000677651046102023000145430ustar 00000000000000//! Commit-tree traversal and verification. use std::{ borrow::Cow, path::{Path, PathBuf}, collections::{ BTreeMap, BTreeSet, }, }; use anyhow::{anyhow, Context, Result}; use git2::{ Repository, Oid, }; use sequoia_openpgp::{ self as openpgp, Cert, cert::{ amalgamation::ValidAmalgamation, CertParser, }, Fingerprint, packet::{Signature, UserID}, parse::Parse, policy::StandardPolicy, types::{ HashAlgorithm, RevocationStatus, RevocationType, }, }; use crate::{ Error, Policy, persistent_set, }; /// Whether to trace execution by default (on stderr). const TRACE: bool = false; #[derive(Default, Debug)] pub struct VerificationResult { pub signer_keys: BTreeSet, pub primary_uids: BTreeSet, } pub fn verify(git: &Repository, trust_root: Oid, shadow_policy: Option<&[u8]>, commit_range: (Oid, Oid), results: &mut VerificationResult, keep_going: bool, mut verify_cb: impl FnMut(&Oid, Option<&Oid>, &crate::Result>>) -> crate::Result<()>, cache: &mut VerificationCache, quiet: bool, verbose: bool) -> Result<()> { tracer!(TRACE, "verify"); t!("verify(_, {}, {}..{})", trust_root, commit_range.0, commit_range.1); if shadow_policy.is_some() { t!("Using a shadow policy to verify commits."); } else { t!("Using in-band policies to verify commits."); } // XXX: These should be passed in as arguments. let p: &StandardPolicy = &StandardPolicy::new(); let now = std::time::SystemTime::now(); // STRATEGY // // We want to determine if we can authenticate the target commit // starting from the trust root. A simple approach is to try each // possible path. Unfortunately, this is exponential in the // number of merges. Consider a project where development is done // on feature branches, and then merged using a merge commit. The // commit graph will look like: // // ``` // o <- Merge commit // | \ // | o <- Feature branch // | / // o <- Merge commit // | \ // | o <- Feature branch // | / // o <- Merge commit // | \ // ... // ``` // // After 100 such merges, there are 2**100 different paths. // That's intractable. // // Happily, we can do better. We can determine if there is an // authenticated path as a byproduct of a topological walk. This // approach limits both the work we have to do, and the space we // require to O(N), where N is the number of commits preceding the // target commit in the commit graph. (If the trust root is a // dominator, which is usually the case, then N is the number of // commits that precede target, and follow the trust root, which // is often very small.) // // Recall the following facts: // // - A commit is authenticated if it is the trust root, or at // least one parent's policy authenticates the commit. // - Unless the signer's certificate is hard revoked. // - Unless there is an authenticated suffix that // immediately follows the commit, and a commit on that // authenticated suffix goodlists commit. // // In order to check the last condition, we need to know the // goodlists of all the following, authenticated commits when we // process the commit. When we do a topological walk, we know // that when we visit a commit, we've already visited all of its // ancestors. This means that we can easily collect the goodlists // of all of the commits on authenticated paths from the commit to // the target during the walk by propagating good lists from // authenticated commits to their parents. Then, when we are // examining a commit, and we discover that it has been revoked, // we can immediately check if it is on a relevant goodlist. // // To do the topological walk, we first have to do a bit of // preparation. Since we don't know a commit's children by // looking at the commit (and not all children lead to the // target), we have to extract that information from the graph. // We do this by visiting all commits on paths from the target to // the trust root, which we can do in O(N) space and time by doing // a breath first search. When we visit a commit, we increment // the number of children each of its parents has. We also use // this opportunity to discover any certificates that have been // hard revoked. // // Then we do the topological walk. For each commit, we consider // the number of unprocessed children to be the number of recorded // children. We then visit commits that have no unprocessed // children. // // When we visit a commit, and there is an authenticated path from // it to the target, we try to authenticate the commit. That is, // for each parent, we check if the parent can authenticate the // commit. If a parent authenticates the commit, but the signer's // certificate has been revoked, we can immediately check whether // the commit is on a goodlist. For each parent that // authenticated the commit, we merge the commit's *aggregate* // goodlist into the parent's goodlist. Finally, for each parent, // we decrement the number of unprocessed children. If there are // no unprocessed children left, it is added to a pending queue, // so that it can be processed. // Return the policy associated with the commit. let read_policy = |commit: &Oid| -> Result> { if let Some(p) = &shadow_policy { Ok(Cow::Borrowed(p)) } else { match Policy::read_bytes_from_commit(git, commit) { Ok(policy) => Ok(Cow::Owned(policy)), Err(err) => { if let Error::MissingPolicy(_) = err { Ok(Cow::Borrowed(b"")) } else { Err(err.into()) } } } } }; // Whether we've seen the policy file before. The key is the // SHA512 digest of the policy file. let mut policy_files: BTreeSet> = Default::default(); // Any hard revoked certificates. let mut hard_revoked: BTreeSet = Default::default(); // Scans the specified commit's policy for hard revocations, and // adds them to hard_revoked. let mut scan_policy = |commit_id| -> Result<()> { let policy_bytes = read_policy(&commit_id)?; let policy_hash = sha512sum(&policy_bytes)?; if policy_files.contains(&policy_hash) { t!("Already scanned an identical copy of {}'s policy, skipping.", commit_id); return Ok(()); } t!("Scanning {}'s policy for hard revocations", commit_id); let policy = Policy::parse_bytes(&policy_bytes)?; policy_files.insert(policy_hash); // Scan for revoked certificates. for authorization in policy.authorization().values() { for cert in CertParser::from_bytes(&authorization.keyring)? { let cert = if let Ok(cert) = cert { cert } else { continue; }; let vc = if let Ok(vc) = cert.with_policy(p, Some(now)) { vc } else { continue; }; let is_hard_revoked = |rs| { if let RevocationStatus::Revoked(revs) = rs { revs.iter().any(|rev| { if let Some((reason, _)) = rev.reason_for_revocation() { reason.revocation_type() == RevocationType::Hard } else { true } }) } else { false } }; // Check if the certificate is hard revoked. if is_hard_revoked(vc.revocation_status()) { t!("Certificate {} is hard revoked, bad listing", cert.fingerprint()); hard_revoked.insert(vc.fingerprint()); for k in vc.keys().subkeys().for_signing() { hard_revoked.insert(k.key().fingerprint()); t!(" Badlisting signing key {}", k.key().fingerprint()); } continue; } // Check if any of the signing keys are hard revoked. for k in vc.keys().subkeys().for_signing() { if is_hard_revoked(k.revocation_status()) { hard_revoked.insert(k.key().fingerprint()); t!(" Signing key {} hard revoked, bad listing", k.key().fingerprint()); } } } } Ok(()) }; let middle = if trust_root == commit_range.0 { None } else { Some(commit_range.0) }; struct Commit { // Number of unprocessed children (commits following this // one). unprocessed_children: usize, // Whether there is an authenticated path from this node to // the target. authenticated_suffix: bool, // Whether we still need to go via MIDDLE. traversed_middle: bool, } impl Default for Commit { fn default() -> Self { Commit { unprocessed_children: 0, authenticated_suffix: false, traversed_middle: false, } } } let mut commits: BTreeMap = Default::default(); if trust_root != commit_range.1 { commits.insert( commit_range.1.clone(), Commit { unprocessed_children: 0, authenticated_suffix: true, traversed_middle: middle.is_none(), }); } // We walk the tree from the target to the trust root (using a // breath first search, but it doesn't matter), and fill in // COMMITS. { // Commits that we haven't processed yet. let mut pending: BTreeSet = Default::default(); pending.insert(commit_range.1.clone()); // Commits that we've processed. let mut processed: BTreeSet = Default::default(); while let Some(commit_id) = pending.pop_first() { processed.insert(commit_id); let commit = git.find_commit(commit_id)?; // Don't fail if we can't parse the policy file. let _ = scan_policy(commit_id); if commit_id == trust_root { // This is the trust root. There is no need to go // further. continue; } for parent in commit.parents() { let parent_id = parent.id(); // Add an entry for the parent commit (if we haven't // yet done so). let info = commits.entry(parent_id).or_default(); info.unprocessed_children += 1; if ! processed.contains(&parent_id) && ! pending.contains(&parent_id) { pending.insert(parent_id); } } } } // The union of the commit goodlists of commits on an // authenticated suffix (not including this commit). We build // this up as we authenticate commits. Since we do a topological // walk, this will be complete for a given commit when we process // that commit. let mut descendant_goodlist: BTreeMap> = Default::default(); let mut errors = Vec::new(); let mut unauthenticated_commits: BTreeSet = Default::default(); let mut authenticated_commits: BTreeSet = Default::default(); // Authenticate the commit using the specified parent. // // NOTE: This must only be called on a commit, if the commit is on // an authenticated suffix!!! let mut authenticate_commit = |commit_id, parent_id| -> Result { let parent_policy = read_policy(&parent_id)?; let parent_id = if commit_id == parent_id { // This is only the case when verifying the trust root // using the shadow policy. assert_eq!(commit_id, trust_root); assert!(shadow_policy.is_some()); None } else { Some(&parent_id) }; // The current commit's good list. let mut commit_goodlist = BTreeSet::new(); // XXX: If we have some certificates that are hard revoked, // then we can't use the cache. This is because the cache // doesn't tell us what certificate was used to sign the // commit, which means we can't figure out if the signer's // certificate was revoked when the result is cached. let (vresult, cache_hit) = if hard_revoked.is_empty() && cache.contains(&parent_policy, commit_id)? { (Ok(vec![]), true) } else { let parent_policy = Policy::parse_bytes(&parent_policy)?; let commit_policy = Policy::parse_bytes(read_policy(&commit_id)?)?; commit_goodlist = commit_policy.commit_goodlist().clone(); (parent_policy.verify(git, &commit_id, &commit_policy, &mut results.signer_keys, &mut results.primary_uids), false) }; if let Err(err) = verify_cb(&commit_id, parent_id, &vresult) { t!("verify_cb -> {}", err); return Err(err.into()); } if cache_hit { // XXX: communicate this to the caller // instead of println. let id = if let Some(parent_id) = parent_id { format!("{}..{}", parent_id, commit_id) } else { commit_id.to_string() }; if verbose { println!("{}:\n Cached positive verification", id); } } match vresult { Ok(results) => { // Whether the parent authenticated the commit. let mut good = false; // Whether the commit was goodlisted by a later // commit. let mut goodlisted = false; // Whether the commit was goodlisted by the parent's // policy. (Because commits form a Merkle tree, this // is only possible when we are using a shadow // policy.) if ! cache_hit && results.is_empty() { // XXX: communicate this to the caller // instead of eprintln. if verbose { println!("{}: Explicitly goodlisted", commit_id); } good = true; } for r in results { match r { Ok((_, _sig, cert, signer_fpr)) => { // It looks good, but make sure the // certificate was not revoked. if hard_revoked.contains(&signer_fpr) { t!("Cert {}{} used to sign {} is revoked.", cert.fingerprint(), if cert.fingerprint() != signer_fpr { format!(", key {}", signer_fpr) } else { "".to_string() }, commit_id); // It was revoked, but perhaps the // commit was goodlisted. if descendant_goodlist.get(&commit_id) .map(|goodlist| { t!(" Goodlist contains: {}", goodlist .iter().cloned() .collect::>() .join(", ")); goodlist.contains(&commit_id.to_string()) }) .unwrap_or(false) { t!("But the commit was goodlisted, \ so all is good."); goodlisted = true; } } else { t!("{} has a good signature from {}", commit_id, cert.fingerprint()); good = true; } } Err(e) => errors.push( anyhow::Error::from(e).context( format!("While verifying commit {}", commit_id))), } } // We do NOT insert into the cache if the commit was // goodlisted. The cache is a function of the parent // policy and the children policy; goodlisting is a // function of commit range. if ! cache_hit && good && ! goodlisted { cache.insert(&parent_policy, commit_id)?; } if cache_hit || good || goodlisted { // Merge the commit's goodlist into the parent's // goodlist. if let Some(descendant_goodlist) = descendant_goodlist.get(&commit_id) { commit_goodlist.extend(descendant_goodlist.iter().cloned()); }; if let Some(parent_id) = parent_id { if let Some(p_goodlist) = descendant_goodlist.get_mut(&parent_id) { p_goodlist.extend(commit_goodlist.into_iter()); } else if ! commit_goodlist.is_empty() { descendant_goodlist.insert( parent_id.clone(), commit_goodlist); } } } let authenticated = cache_hit || good || goodlisted; if authenticated { authenticated_commits.insert(commit_id); } else { unauthenticated_commits.insert(commit_id); } Ok(authenticated) }, Err(e) => { unauthenticated_commits.insert(commit_id); errors.push(anyhow::Error::from(e).context( format!("While verifying commit {}", commit_id))); Ok(false) }, } }; // We now do a topological walk from the target to the trust root. // Assume there is no path until we prove otherwise. (A // zero-length path is already valid.) let mut valid_path = trust_root == commit_range.0 && commit_range.0 == commit_range.1; // Commits that we haven't processed yet and have no unprocessed // children. let mut pending: BTreeSet = Default::default(); if trust_root != commit_range.1 { pending.insert(commit_range.1.clone()); } 'authentication: while let Some(commit_id) = pending.pop_first() { let commit = git.find_commit(commit_id)?; t!("Processing {}: {}", commit_id, commit.summary().unwrap_or("")); let commit_info = commits.get(&commit_id).expect("added"); assert_eq!(commit_info.unprocessed_children, 0); let authenticated_suffix = commit_info.authenticated_suffix; let traversed_middle = commit_info.traversed_middle; for (parent_i, parent) in commit.parents().enumerate() { let parent_id = parent.id(); t!("Considering {} -> {} (parent #{} of {})", commit_id, parent_id, parent_i + 1, commit.parents().len()); let parent_is_trust_root = parent_id == trust_root; let parent_info = commits.get_mut(&parent_id) .with_context(|| format!("Looking up {}", parent_id)) .expect("added"); t!(" Parent has {} unprocessed children", parent_info.unprocessed_children); assert!(parent_info.unprocessed_children > 0); parent_info.unprocessed_children -= 1; if parent_info.unprocessed_children == 0 && ! parent_is_trust_root { t!(" Adding parent to pending queue for processing"); pending.insert(parent_id); } if authenticated_suffix { t!(" Child IS on an authenticated suffix"); } else { t!(" Child IS NOT on an authenticated suffix."); } let authenticated = if keep_going || authenticated_suffix { authenticate_commit(commit_id, parent_id) .with_context(|| { format!("Authenticating {} with {}", commit_id, parent_id) })? } else { false }; t!(" Could {}authenticate commit.", if authenticated { "" } else { "not " }); if authenticated_suffix && authenticated { t!(" Parent authenticates child"); if ! parent_info.authenticated_suffix { t!(" Parent is now part of an authenticated suffix."); } parent_info.authenticated_suffix = true; if traversed_middle { parent_info.traversed_middle = true; } else if middle == Some(commit_id) { t!(" Traversed {} on way to trust root.", commit_id); parent_info.traversed_middle = true; } if parent_is_trust_root { t!(" Parent is the trust root."); if ! parent_info.traversed_middle { t!(" but path was not via {}", middle.unwrap()); } else { // This is the trust root and we traversed the // middle commit. There is no need to go // further. valid_path = true; if ! keep_going { break 'authentication; } } } } } } t!("No commits pending."); // When using a shadow policy, we also authenticate the trust // root with it. if (keep_going || valid_path) && shadow_policy.is_some() { t!("Verifying trust root ({}) using the shadow policy", trust_root); // We verify the trust root using itself? Not quite. We know // that authenticate_commit prefers the shadow policy, and we // know that a shadow policy is set. So this will actually // check that the shadow policy verifies the trust root. if ! authenticate_commit(trust_root, trust_root)? { valid_path = false; if let Some(e) = errors.pop() { errors.push( e.context(format!("Could not verify trust root {} \ using the specified policy", trust_root))); } } } if valid_path { if trust_root == commit_range.0 { if ! quiet { println!( "Verified that there is an authenticated path from the trust root\n\ {} to {}.", trust_root, commit_range.1); } } else { if ! quiet { println!( "Verified that there is an authenticated path from the trust root\n\ {} via {}\n\ to {}.", trust_root, commit_range.0, commit_range.1); } } Ok(()) } else { if errors.is_empty() { Err(anyhow!("Could not verify commits {}..{}{}", trust_root, if let Some(middle) = middle { format!("{}..", middle) } else { "".to_string() }, commit_range.1)) } else { let mut e = errors.swap_remove(0) .context(format!("Could not verify commits {}..{}{}", commit_range.0, if let Some(middle) = middle { format!("{}..", middle) } else { "".to_string() }, commit_range.1)); if ! errors.is_empty() { e = e.context( format!("{} errors occurred while verifying the commits. \ {} commits couldn't be authenticated. \ Note: not all errors are fatal. \ The first error is shown:", errors.len() + 1, unauthenticated_commits.difference( &authenticated_commits).count())); } Err(e) } } } // Returns the SHA512 digest of the provided bytes. fn sha512sum(bytes: &[u8]) -> Result> { let mut digest = HashAlgorithm::SHA512.context()?.for_digest(); digest.update(bytes); let mut key = Vec::with_capacity(32); digest.digest(&mut key)?; Ok(key) } pub struct VerificationCache { path: PathBuf, set: persistent_set::Set, } impl VerificationCache { const CONTEXT: &'static str = "SqGitVerify0"; pub fn new() -> Result { let p = dirs::cache_dir().ok_or(anyhow::anyhow!("No cache dir"))? .join("sq-git.verification.cache"); Self::open(p) } pub fn open>(path: P) -> Result { let path = path.as_ref(); Ok(VerificationCache { path: path.into(), set: persistent_set::Set::read(&path, Self::CONTEXT)?, }) } fn key(&self, policy: &[u8], commit: Oid) -> Result { let mut digest = HashAlgorithm::SHA512.context()?.for_digest(); digest.update(policy); digest.update(commit.as_bytes()); let mut key = [0; 32]; digest.digest(&mut key)?; Ok(key) } /// Returns whether (policy, commit id) is in the cache. /// /// If (policy, commit id) is in the cache, then it was previously /// determined that the policy authenticated the commit. pub fn contains(&mut self, policy: &[u8], commit: Oid) -> Result { Ok(self.set.contains(&self.key(policy, commit)?)?) } /// Add (policy, commit id) to the cache. /// /// If (policy, commit id) is in the cache, this means that the /// policy considers the commit to be authenticated. Normally, /// the policy comes from the parent commit, but it may be a /// shadow policy. pub fn insert(&mut self, policy: &[u8], commit: Oid) -> Result<()> { self.set.insert(self.key(policy, commit)?); Ok(()) } pub fn persist(&mut self) -> Result<()> { self.set.write(&self.path)?; Ok(()) } } sequoia-git-0.5.0/tests/basics.rs000064400000000000000000000514051046102023000150360ustar 00000000000000use std::fs; mod common; use common::Environment; #[test] fn create_environment() -> anyhow::Result<()> { let e = Environment::new()?; assert!(e.gnupg_state().exists()); assert!(e.git_state().exists()); Ok(()) } #[test] fn make_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Initial commit.", ])?; Ok(()) } #[test] fn sign_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow.fingerprint), ])?; Ok(()) } #[test] fn verify_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); e.sq_git(&[ "policy", "authorize", e.willow.petname, &e.willow.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow.fingerprint), ])?; let root = e.git_current_commit()?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "Und es bleibt schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Second change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; Ok(()) } #[test] fn shadow_verify_commit() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); e.sq_git(&[ "policy", "authorize", "--policy-file", "shadow-policy.toml", e.willow.petname, &e.willow.fingerprint.to_string(), "--sign-commit" ])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", e.willow.fingerprint), ])?; let root = e.git_current_commit()?; e.sq_git(&[ "log", "--trust-root", &root, "--policy-file", "shadow-policy.toml", ])?; fs::write(p.join("a"), "Und es bleibt schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Second change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&[ "log", "--trust-root", &root, "--policy-file", "shadow-policy.toml", ])?; Ok(()) } #[test] fn commit_with_no_policy() -> anyhow::Result<()> { // Test that we can process a commit that doesn't have a policy. // // E <- Merge commit (authorized by C) // / \ // Policy -> C D <- No policy. // \ / // B // | // A <- Trust root. // let (e, root) = Environment::scooby_gang_bootstrap(None)?; e.git(&["checkout", "-b", "main"]) .expect("can create branch"); // Create a commit before the fork. e.git_commit( &[("pre-fork", Some(b"xxx"))], "pre-fork commit (willow)", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); // Create the no-policy branch. e.git(&["checkout", "-b", "no-policy"]) .expect("can create no-policy branch"); e.git(&["rm", "openpgp-policy.toml"]) .expect("can remove openpgp-policy.toml"); e.git_commit( &[("no-policy", Some(b"xxx"))], "no-policy commit", None).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_err()); // Add a few commits to the main branch. e.git(&["switch", "main"]).expect("can switch to main"); for i in 0..3 { e.git_commit( &[(&format!("main-{}", i), Some(b"xxx"))], &format!("main commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); } // Then merge the branches. e.git_merge_no_ff(&[&"no-policy", "main"], "Merge (willow)", Some(&e.willow_release), &[]).unwrap(); eprintln!("Graph:\n{}", e.git_log_graph().unwrap()); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } fn merge(pre_fork_commits: usize, feature_commits: (bool, usize), main_commits: usize) -> anyhow::Result<()> { // Test merging feature branches that are and are not part of the // authentication path. We first add 0 or more commits, then we // create a feature branch with 1 or more commits, add 0 or more // commits to the main branch, and finally we merge the feature // branch into main. // // K <- Post-merge commits (authorized) // | // J <- Merge commit (authorized) // / \ // -> I F <- // Main ' | | ` // commits ---> H E <--- Feature branch commits (maybe authorized) // (authed) ` | | ' // -> G D <- // \ / // C <-. // | Pre-fork commits (authorized) // B <-' // | // A <- Trust root. // eprintln!("========================================================"); eprintln!("Testing configuration: {} pre-fork commits, \ {} {} authorized feature commits, {} main commits", pre_fork_commits, feature_commits.1, if feature_commits.0 { "" } else { "not " }, main_commits); let (e, root) = Environment::scooby_gang_bootstrap(None)?; e.git(&["checkout", "-b", "main"]) .expect("can create branch"); // Create some commits before the fork. for i in 0..pre_fork_commits { // Willow adds a few commits. e.git_commit( &[(&format!("pre-fork-{}", i), Some(b"xxx"))], &format!("pre-fork commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); } // Create the feature branch. These have the unauthorized // commits. e.git(&["checkout", "-b", "feature"]) .expect("can create feature branch"); let mut feature_head = "feature".to_string(); let feature_commits_authorized = feature_commits.0; let feature_commit_signer = if feature_commits_authorized { &e.willow_release } else { &e.xander }; for i in 0..feature_commits.1 { feature_head = e.git_commit( &[(&format!("feature-{}", i), Some(b"xxx"))], &format!("feature commit #{} ({})", i + 1, feature_commit_signer.petname), Some(&feature_commit_signer)).unwrap(); assert_eq!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok(), feature_commits_authorized); } // Add commits to the main branch. e.git(&["switch", "main"]).expect("can switch to main"); for i in 0..main_commits { // Willow adds a few commits. e.git_commit( &[(&format!("main-{}", i), Some(b"xxx"))], &format!("main commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); if i == 0 { e.git(&["checkout", "-b", "main-continued"]) .expect("can create feature branch"); } } // Merge feature branch. e.git_merge_no_ff(&[&feature_head, "main"], "Merge (willow)", Some(&e.willow_release), &[]).unwrap(); eprintln!("Graph:\n{}", e.git_log_graph().unwrap()); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Add a few more commits after the merge. for i in 0..2 { e.git_commit( &[(&format!("post-merge-{}", i), Some(b"xxx"))], &format!("post-merge commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); } // Make sure that we can authenticate a path that includes a // particular commit. if main_commits > 0 { assert!(e.sq_git(&["log", "--trust-root", &root, &format!("main-continued..")]) .is_ok()); } assert_eq!(e.sq_git(&["log", "--trust-root", &root, &format!("feature..")]) .is_ok(), feature_commits_authorized); Ok(()) } fn merge_cross_product(pre_fork: &[usize], feature: &[(bool, usize)], main: &[usize]) { for (&pre_fork_commits, &feature_commits, &main_commits) in pre_fork.into_iter().flat_map(|pre| { feature.into_iter().flat_map(move |feature| { main.into_iter().map(move |main| { (pre, feature, main) }) }) }) { merge(pre_fork_commits, feature_commits, main_commits) .expect(&format!("Test pre-fork commits: {}, \ feature commits: {:?}, \ main commits: {} \ failed", pre_fork_commits, feature_commits, main_commits)); } } // Manually unroll: // // let pre_fork = [ 0, 1, 2 ]; // let feature = [ (false, 1), (false, 4), (true, 1), (true, 4) ]; // let main = [ 0, 1, 4 ]; #[test] fn merge_0_1_unauthorized_0() { merge_cross_product(&[0], &[(false, 1)], &[0]) } #[test] fn merge_0_1_unauthorized_1() { merge_cross_product(&[0], &[(false, 1)], &[1]) } #[test] fn merge_0_1_unauthorized_4() { merge_cross_product(&[0], &[(false, 1)], &[4]) } #[test] fn merge_0_4_unauthorized_0() { merge_cross_product(&[0], &[(false, 4)], &[0]) } #[test] fn merge_0_4_unauthorized_1() { merge_cross_product(&[0], &[(false, 4)], &[1]) } #[test] fn merge_0_4_unauthorized_4() { merge_cross_product(&[0], &[(false, 4)], &[4]) } #[test] fn merge_1_1_unauthorized_0() { merge_cross_product(&[1], &[(false, 1)], &[0]) } #[test] fn merge_1_1_unauthorized_1() { merge_cross_product(&[1], &[(false, 1)], &[1]) } #[test] fn merge_1_1_unauthorized_4() { merge_cross_product(&[1], &[(false, 1)], &[4]) } #[test] fn merge_1_4_unauthorized_0() { merge_cross_product(&[1], &[(false, 4)], &[0]) } #[test] fn merge_1_4_unauthorized_1() { merge_cross_product(&[1], &[(false, 4)], &[1]) } #[test] fn merge_1_4_unauthorized_4() { merge_cross_product(&[1], &[(false, 4)], &[4]) } #[test] fn merge_2_1_unauthorized_0() { merge_cross_product(&[2], &[(false, 1)], &[0]) } #[test] fn merge_2_1_unauthorized_1() { merge_cross_product(&[2], &[(false, 1)], &[1]) } #[test] fn merge_2_1_unauthorized_4() { merge_cross_product(&[2], &[(false, 1)], &[4]) } #[test] fn merge_2_4_unauthorized_0() { merge_cross_product(&[2], &[(false, 4)], &[0]) } #[test] fn merge_2_4_unauthorized_1() { merge_cross_product(&[2], &[(false, 4)], &[1]) } #[test] fn merge_2_4_unauthorized_4() { merge_cross_product(&[2], &[(false, 4)], &[4]) } #[test] fn merge_0_1_authorized_0() { merge_cross_product(&[0], &[(true, 1)], &[0]) } #[test] fn merge_0_1_authorized_1() { merge_cross_product(&[0], &[(true, 1)], &[1]) } #[test] fn merge_0_1_authorized_4() { merge_cross_product(&[0], &[(true, 1)], &[4]) } #[test] fn merge_0_4_authorized_0() { merge_cross_product(&[0], &[(true, 4)], &[0]) } #[test] fn merge_0_4_authorized_1() { merge_cross_product(&[0], &[(true, 4)], &[1]) } #[test] fn merge_0_4_authorized_4() { merge_cross_product(&[0], &[(true, 4)], &[4]) } #[test] fn merge_1_1_authorized_0() { merge_cross_product(&[1], &[(true, 1)], &[0]) } #[test] fn merge_1_1_authorized_1() { merge_cross_product(&[1], &[(true, 1)], &[1]) } #[test] fn merge_1_1_authorized_4() { merge_cross_product(&[1], &[(true, 1)], &[4]) } #[test] fn merge_1_4_authorized_0() { merge_cross_product(&[1], &[(true, 4)], &[0]) } #[test] fn merge_1_4_authorized_1() { merge_cross_product(&[1], &[(true, 4)], &[1]) } #[test] fn merge_1_4_authorized_4() { merge_cross_product(&[1], &[(true, 4)], &[4]) } #[test] fn merge_2_1_authorized_0() { merge_cross_product(&[2], &[(true, 1)], &[0]) } #[test] fn merge_2_1_authorized_1() { merge_cross_product(&[2], &[(true, 1)], &[1]) } #[test] fn merge_2_1_authorized_4() { merge_cross_product(&[2], &[(true, 1)], &[4]) } #[test] fn merge_2_4_authorized_0() { merge_cross_product(&[2], &[(true, 4)], &[0]) } #[test] fn merge_2_4_authorized_1() { merge_cross_product(&[2], &[(true, 4)], &[1]) } #[test] fn merge_2_4_authorized_4() { merge_cross_product(&[2], &[(true, 4)], &[4]) } #[test] fn via_commit() -> anyhow::Result<()> { // There are multiple authenticated paths from the trust root to // the target. We want to know whether there is an authenticated // path via a particular commit. This is tricky, because the // commit we are interested in is only on one of the authenticated // paths and there is an unauthenticated path. // // Consider the following, where the middle branch has an // unauthenticated commit: // // target // o \ // | Post-merge // o / // | // o // ' | ` // / | \ // o bad o 5 // | | | // | | o // | | | ` // o o o | 4 // | | | | // | o | | // | / | \ | | // a ' C ` b | 3 // | --+----+-' // A ' o B 2 // | | | // o o o 1 // \ | / // ` o ' \ // | \ // o Pre-fork // | / // o / // | // Trust root // // We want to make sure that we can authenticate from the trust // root to the target via (e.g.) A and B, but not C. // // The fact that a and b each have a parent along the // unauthenticated path complicates things, because we will // normally stop exploring the path when we reach the bad commit. let (e, root) = Environment::scooby_gang_bootstrap(None)?; e.git(&["checkout", "-b", "main"]) .expect("can create branch"); // Create some commits before the fork. let mut pre_fork_commits = Vec::new(); for i in 0..3 { // Willow adds a few commits. let commit = e.git_commit( &[(&format!("pre-fork-{}", i), Some(b"xxx"))], &format!("pre-fork commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); pre_fork_commits.push(commit); } // Create the first good branch. e.git(&["switch", "main"]).expect("can switch to main"); e.git(&["checkout", "-b", "good-a"]) .expect("can create good-a branch"); let mut good_a = Vec::new(); for i in 0..5 { // Willow adds a few commits. let commit = e.git_commit( &[(&format!("good-a-{}", i), Some(b"xxx"))], &format!("good-a commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); good_a.push(commit); } // Create the second good branch. e.git(&["switch", "main"]).expect("can switch to main"); e.git(&["checkout", "-b", "good-b"]) .expect("can create good-b branch"); let mut good_b = Vec::new(); for i in 0..5 { // Willow adds a few commits. let commit = e.git_commit( &[(&format!("good-b-{}", i), Some(b"xxx"))], &format!("good-b commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); if i == 3 { e.git_merge_no_ff( &[ &good_a[0], &commit, ], "b merge: good a #1, good b #4 merge (willow)", Some(&e.willow_release), &[]).unwrap(); } good_b.push(commit); } // Create the bad branch with the unauthorized commits. e.git(&["switch", "main"]).expect("can switch to main"); e.git(&["checkout", "-b", "bad"]) .expect("can create bad branch"); let mut bad = Vec::new(); for i in 0..5 { let commit = e.git_commit( &[(&format!("bad-{}", i), Some(b"xxx"))], &format!("feature commit #{} (xander)", i + 1), Some(&e.xander)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_err()); if i == 2 { e.git_merge_no_ff( &[ &good_a[2], &good_b[2], &commit, ], "bad merge: good a #3, good b #3, bad #3 merge (willow)", Some(&e.willow_release), &[]).unwrap(); } bad.push(commit); } // Merge the tips of the three branches. e.git_merge_no_ff( &[ &good_a.last().expect("have one"), &good_b.last().expect("have one"), &bad.last().expect("have one"), ], "Merge (willow)", Some(&e.willow_release), &[]).unwrap(); eprintln!("Graph:\n{}", e.git_log_graph().unwrap()); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Add a few more commits after the merge. let mut post_merge = Vec::new(); for i in 0..2 { let commit = e.git_commit( &[(&format!("post-merge-{}", i), Some(b"xxx"))], &format!("post-merge commit #{} (willow)", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); post_merge.push(commit); } // Make sure that we can authenticate a path that includes a // particular commit. for (i, commit) in pre_fork_commits.iter().enumerate() { eprintln!("Checking via pre-fork-{}", i + 1); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", commit)]) .is_ok()); } for (i, commit) in good_a.iter().enumerate() { eprintln!("Checking via good-a-{}", i + 1); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", commit)]) .is_ok()); } for (i, commit) in good_b.iter().enumerate() { eprintln!("Checking via good-b-{}", i + 1); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", commit)]) .is_ok()); } // And that we fail when it must go via a commit that isn't on an // authenticated commit. for (i, commit) in bad.iter().enumerate() { eprintln!("Checking via bad-{}", i + 1); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", commit)]) .is_err()); } for (i, commit) in post_merge.iter().enumerate() { eprintln!("Checking via post-merge-{}", i + 1); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", commit)]) .is_ok()); } Ok(()) } sequoia-git-0.5.0/tests/common.rs000064400000000000000000000727001046102023000150630ustar 00000000000000#![allow(unused)] use std::{ collections::{BTreeMap, BTreeSet}, ffi::OsString, fs::File, io::Write, process::{Child, Command, Output, Stdio}, path::Path, path::PathBuf, sync::{Arc, OnceLock}, time::{Duration, SystemTime}, }; use anyhow::anyhow; use sequoia_openpgp::{ Fingerprint, Packet, cert::{ Cert, CertBuilder, CertParser, CertRevocationBuilder, KeyBuilder, SubkeyRevocationBuilder, amalgamation::ValidAmalgamation, }, packet::Signature, parse::Parse, policy::StandardPolicy, serialize::Serialize, types::{ KeyFlags, ReasonForRevocation, RevocationStatus, } }; use sequoia_cert_store::{ StoreUpdate, store::certd::CertD, }; pub type Result = std::result::Result; const P: &StandardPolicy = &StandardPolicy::new(); pub struct Identity { pub email: &'static str, pub petname: &'static str, pub fingerprint: Fingerprint, pub cert: Cert, pub rev: Signature, } impl Identity { fn new(email: &'static str, petname: &'static str) -> Result { let (cert, rev) = CertBuilder::general_purpose(Some(format!("<{}>", email))) .set_creation_time(SystemTime::now() - Duration::new(24 * 3600, 0)) .generate()?; Ok(Identity { email, petname, fingerprint: cert.fingerprint(), cert, rev, }) } /// Returns the certificate with the pregenerated hard revocation. #[allow(dead_code)] pub fn hard_revoke(&self) -> Cert { self.cert.clone().insert_packets(self.rev.clone()) .expect("ok").0 } } /// Rotate a certificate's signing subkey. /// /// Retires all of the certificate's signing capable subkeys. /// Adds a new signing-capable subkey. pub fn rotate_subkeys(cert: &Cert) -> Cert { let vc = cert.with_policy(P, None).expect("valid cert"); // Revoke the old subkeys. let mut signer = cert.primary_key().key().clone() .parts_into_secret().unwrap() .into_keypair().unwrap(); let mut packets = Vec::new(); for sk in vc.keys().subkeys().for_signing() { if let RevocationStatus::Revoked(_) = sk.revocation_status() { // Already revoked. continue; } let sig = SubkeyRevocationBuilder::new() .set_reason_for_revocation(ReasonForRevocation::KeyRetired, b"Retired").unwrap() .build(&mut signer, &cert, sk.key(), None).unwrap(); packets.push(Packet::from(sk.key().clone())); packets.push(Packet::from(sig)); } // Add a new signing subkey. let cert2 = KeyBuilder::new(KeyFlags::signing()) .subkey(vc.clone()).unwrap() .attach_cert().unwrap(); // Merge everything if packets.is_empty() { cert2 } else { cert2.insert_packets(packets).expect("can insert packets").0 } } /// Revokes the certificate. pub fn revoke_cert(cert: &Cert, reason: ReasonForRevocation) -> Cert { let vc = cert.with_policy(P, None).expect("valid cert"); // Revoke the old subkeys. let mut signer = cert.primary_key().key().clone() .parts_into_secret().unwrap() .into_keypair().unwrap(); let sig = CertRevocationBuilder::new() .set_reason_for_revocation(reason, b"revoked").unwrap() .build(&mut signer, &cert, None).unwrap(); let cert = cert.clone().insert_packets(sig.clone()) .expect("can insert revocation certificate").0; // Now it's revoked. assert_eq!(RevocationStatus::Revoked(vec![&sig]), cert.revocation_status(P, None)); cert } pub enum TempDir { TempDir(tempfile::TempDir), PathBuf(PathBuf), } impl TempDir { fn new() -> Result { Ok(TempDir::TempDir(tempfile::TempDir::new()?)) } fn path(&self) -> &Path { match self { TempDir::TempDir(d) => d.path(), TempDir::PathBuf(p) => p.as_path(), } } fn persist(&mut self) { let d = std::mem::replace(self, TempDir::PathBuf(PathBuf::new())); match d { TempDir::TempDir(d) => *self = TempDir::PathBuf(d.into_path()), TempDir::PathBuf(p) => *self = TempDir::PathBuf(p), } } } pub struct Environment { // If not None, then faketime is used. pub time: Option, pub wd: TempDir, pub willow: Identity, pub willow_release: Identity, pub buffy: Identity, pub xander: Identity, pub riley: Identity, } // Whether we have faketime. // // Ok(true): yes // Ok(false): skip faketime tests // Err(err): no static HAVE_FAKETIME: OnceLock> = OnceLock::new(); impl Environment { /// Before using `at`, `time`, or `tick`, we need to check for /// faketime. /// /// If this returns `Ok(false)`, the test should be silently /// skipped. pub fn check_for_faketime() -> std::result::Result { let r = HAVE_FAKETIME.get_or_init(|| { if let Ok(val) = std::env::var("NO_FAKETIME") { return Ok(false); } let mut cmd = Command::new("faketime"); cmd.env("TZ", "UTC"); let t = chrono::DateTime::::from(SystemTime::now()) .format("%Y-%m-%d %H:%M:%S") .to_string(); cmd.arg("-f").arg(t); // We rely on being able to run git. cmd.arg("git").arg("--version"); let output = cmd .stdout(Stdio::piped()) .stderr(Stdio::piped()) .spawn().map_err(anyhow::Error::from)? .wait_with_output().map_err(anyhow::Error::from)?; eprintln!("stdout:{}\nstderr:{}\n", String::from_utf8_lossy(&output.stdout), String::from_utf8_lossy(&output.stderr)); if output.status.success() { Ok(true) } else { Err(Error::NoFaketime(output)) } }); // Convert &Result to Result. match r { Ok(b) => Ok(*b), Err(err) => Err(err) } } /// Be sure to call `Self::check_for_faketime` to make sure using /// a fake time is supported. pub fn at(t: T) -> Result where T: Into> { let t = t.into(); if t.is_some() { assert!(HAVE_FAKETIME.get().is_some(), "You forgot to call Environment::check_for_faketime \ before calling Environment::at"); eprintln!("Using faketime."); } else { eprintln!("Using wall clock."); } let e = Environment { time: t, wd: TempDir::new()?, willow: Identity::new("willow@scoobies.example", "Willow Rosenberg Code Signing")?, willow_release: Identity::new("willow@scoobies.example", "Willow Rosenberg Release Signing")?, buffy: Identity::new("buffy@scoobies.example", "Buffy Summers")?, xander: Identity::new("xander@scoobies.example", "Xander Harris")?, riley: Identity::new("riley@scoobies.example", "Riley Finn")?, }; let create_dir = |path: &Path| { eprintln!("Creating {}", path.display()); std::fs::create_dir(path) }; create_dir(&e.gnupg_state())?; create_dir(&e.git_state())?; create_dir(&e.certd_state())?; create_dir(&e.xdg_cache_home())?; create_dir(&e.scratch_state())?; let mut c = e.command("gpg"); c.arg("--version"); e.run(c); e.import(&e.willow.cert)?; e.import(&e.willow_release.cert)?; e.import(&e.buffy.cert)?; e.import(&e.xander.cert)?; e.import(&e.riley.cert)?; e.init_repo(e.git_state().as_path())?; Ok(e) } pub fn new() -> Result { Self::at(None) } /// Persists the directory so that it can be examined after this run. #[allow(dead_code)] pub fn persist(&mut self) { self.wd.persist(); eprintln!("Persisting temporary directory: {}", self.wd.path().display()); } pub fn init_repo<'a, P: Into>>(&self, wd: P) -> Result<()> { let git_state = self.git_state(); let wd = wd.into().unwrap_or(git_state.as_path()); self.git(&["version"])?; eprintln!("Creating {}", wd.display()); std::fs::create_dir(wd) .or_else(|err| { if err.kind() == std::io::ErrorKind::AlreadyExists { // If it already exists, don't fail. Ok(()) } else { Err(err) } }) .expect(&format!("Can create {}", wd.display())); self.git(&["init", &wd.display().to_string()])?; self.git_in(wd, &["config", "--local", "user.email", "you@example.org"])?; self.git_in(wd, &["config", "--local", "user.name", "Your Name"])?; // git's default is to not sign. But, the user might have // overridden this in their ~/.gitconfig, and be using an old // version of git (<2.32). In that case, GIT_CONFIG_GLOBAL // won't suppress this setting. Setting it unconditionally in // the local configuration file is a sufficient workaround. self.git_in(wd, &["config", "--local", "user.signingkey", "0xDEADBEEF"])?; self.git_in(wd, &["config", "--local", "commit.gpgsign", "false"])?; // Make sure sq-git works. self.sq_git_in(wd, &["version"])?; Ok(()) } /// Returns the environment and the root commit. /// /// The initial commit is signed by the specified identity /// (default: "Willow Rosenberg Release Signing"). pub fn scooby_gang_bootstrap(signer: Option<&str>) -> Result<(Environment, String)> { let e = Environment::new()?; e.scooby_gang_bootstrap_in(None, signer) .map(|root| (e, root)) } #[allow(dead_code)] pub fn scooby_gang_bootstrap_in<'a, P: Into>>( &self, wd: P, signer: Option<&str>) -> Result { let git_state = self.git_state(); let wd = wd.into().unwrap_or(git_state.as_path()); self.scooby_gang_bootstrap_policy(wd.join("openpgp-policy.toml").as_path()); let signer = if let Some(signer) = signer { if self.willow.petname == signer { &self.willow.fingerprint } else if self.willow_release.petname == signer { &self.willow_release.fingerprint } else if self.buffy.petname == signer { &self.buffy.fingerprint } else if self.xander.petname == signer { &self.xander.fingerprint } else if self.riley.petname == signer { &self.riley.fingerprint } else { panic!("Unknown signer: {}", signer); } } else { &self.willow_release.fingerprint }; self.git_in(wd, &["add", "openpgp-policy.toml"])?; self.git_in( wd, &[ "commit", "-m", "Initial commit.", &format!("-S{}", signer), ])?; let root = self.git_current_commit_in(wd)?; Ok(root) } // Write the policy to the specified file. pub fn scooby_gang_bootstrap_policy( &self, external_policy_file: &Path) -> Result<()> { let external_policy_file = external_policy_file.display().to_string(); // Willow has a code-signing key. self.sq_git( &[ "policy", "authorize", "--policy-file", &external_policy_file, self.willow.petname, &self.willow.fingerprint.to_string(), "--sign-commit" ])?; // Additionally, Willow also has a release key on her security // token. self.sq_git( &[ "policy", "authorize", "--policy-file", &external_policy_file, self.willow_release.petname, &self.willow_release.fingerprint.to_string(), "--sign-commit", "--sign-tag", "--sign-archive", "--add-user", "--retire-user", "--audit", ])?; Ok(()) } pub fn gnupg_state(&self) -> PathBuf { self.wd.path().join("gnupg") } pub fn git_state(&self) -> PathBuf { self.wd.path().join("git") } pub fn certd_state(&self) -> PathBuf { self.wd.path().join("certd") } pub fn xdg_cache_home(&self) -> PathBuf { self.wd.path().join("xdg_cache_home") } #[allow(dead_code)] pub fn scratch_state(&self) -> PathBuf { self.wd.path().join("scratch") } pub fn import(&self, cert: &Cert) -> Result<()> { let certd = CertD::open(self.certd_state())?; certd.update(Arc::new(cert.clone().into()))?; let mut c = self.command("gpg"); c.arg("--status-fd=2"); c.arg("--import").stdin(Stdio::piped()); eprintln!("$ {:?} {}", c, cert.fingerprint()); let mut child = self.spawn(c)?; // Write in a separate thread to avoid deadlocks. let mut stdin = child.stdin.take().expect("failed to get stdin"); let cert = cert.clone(); let thread_handle = std::thread::spawn(move || -> Result<()> { cert.as_tsk().serialize(&mut stdin)?; Ok(stdin.flush()?) }); let output = child.wait_with_output()?; thread_handle.join().unwrap()?; if output.status.success() { eprintln!(" -> success"); Ok(()) } else { eprintln!(" -> failure"); eprintln!("stdout:\n{}", String::from_utf8_lossy(&output.stdout)); eprintln!("stderr:\n{}", String::from_utf8_lossy(&output.stderr)); Err(Error::CliError("gpg --import".into(), output)) } } /// Sets the time for subsequent commands. /// /// This causes commands to be run with `faketime`. /// /// Be sure to call `Self::check_for_faketime` to make sure using /// a fake time is supported. pub fn time(&mut self, t: SystemTime) { assert!(HAVE_FAKETIME.get().is_some(), "You forgot to call Environment::check_for_faketime \ before calling Environment::time"); self.time = Some(t); } /// Advance the time. /// /// If you haven't called `time`, then this sets time to the /// current time plus `secs` seconds. /// /// Be sure to call `Self::check_for_faketime` to make sure using /// a fake time is supported. pub fn tick(&mut self, secs: u64) { assert!(HAVE_FAKETIME.get().is_some(), "You forgot to call Environment::check_for_faketime \ before calling Environment::tick"); if let Some(t) = self.time { self.time = Some(t + Duration::new(secs, 0)); } else { self.time = Some(SystemTime::now() + Duration::new(secs, 0)); } } /// Returns a command. /// /// If `self.time` is `Some`, uses `faketime` to set the time. fn command

(&self, cmd: P) -> Command where P: Into { let cmd = cmd.into(); if let Some(t) = self.time.as_ref() { // Freeze clock at absolute timestamp: "YYYY-MM-DD hh:mm:ss" // // Note: we need to set the timezone to UTC. This is // critical as faketime interprets the timestamp in the // current time zone. We set TZ=UTC when calling spawn. let mut c = Command::new("faketime"); c.env("TZ", "UTC"); let t = chrono::DateTime::::from(t.clone()) .format("%Y-%m-%d %H:%M:%S") .to_string(); c.arg("-f").arg(&t); c.arg(&cmd); c } else { Command::new(&cmd) } } pub fn git>(&self, args: &[A]) -> Result { self.git_in(None, args) } pub fn git_in<'a, P: Into>, A: AsRef>( &self, wd: P, args: &[A]) -> Result { let mut c = self.command("git"); for a in args { c.arg(a.as_ref()); } self.run_in(wd, c) } // A convenience function to optionally modify and commit a few // files. // // Returns the new commit id. #[allow(dead_code)] pub fn git_commit(&self, files: &[(&str, Option<&[u8]>)], commit_msg: &str, signer: Option<&Identity>) -> Result { self.git_commit_in(None, files, commit_msg, signer) } pub fn git_commit_in<'a, P: Into>>( &self, wd: P, files: &[(&str, Option<&[u8]>)], commit_msg: &str, signer: Option<&Identity>) -> Result { let git_state = self.git_state(); let wd = wd.into().unwrap_or(git_state.as_path()); for (filename, content) in files.iter() { if let Some(content) = content { std::fs::write(wd.join(filename), content).unwrap(); } self.git_in(wd, &["add", filename])?; } let mut git_args = vec!["commit", "-m", commit_msg]; let signer_; if let Some(signer) = signer { signer_ = format!("-S{}", signer.fingerprint); git_args.push(&signer_); } self.git_in(wd, &git_args)?; Ok(self.git_current_commit_in(wd)?) } // A convenience function to optionally modify and commit a few // files. // // Runs git merge --no-ff #[allow(dead_code)] pub fn git_merge_no_ff(&self, commits: &[&str], commit_msg: &str, signer: Option<&Identity>, args: &[&str]) -> Result { let p = self.git_state(); let mut git_args = vec!["merge", "--no-ff", "-m", commit_msg]; git_args.extend_from_slice(args); let signer_; if let Some(signer) = signer { signer_ = format!("-S{}", signer.fingerprint); git_args.push(&signer_); } git_args.extend_from_slice(commits); let output = self.git(&git_args)?; assert!(!output.stdout.starts_with(&b"Already up to date."[..]), "Failed to create merge commit. Perhaps you are merging \ commits that are already merged."); Ok(self.git_current_commit()?) } pub fn git_current_commit(&self) -> Result { self.git_current_commit_in(None) } pub fn git_current_commit_in<'a, P: Into>>(&self, wd: P) -> Result { Ok(String::from_utf8(self.git_in(wd, &["rev-parse", "HEAD"])?.stdout)? .trim().to_string()) } pub fn git_log_graph(&self) -> Result { Ok(String::from_utf8(self.git(&["log", "--graph", "--show-signature"])?.stdout)? .trim().to_string()) } pub fn sq_git_path() -> Result { Ok(env!("CARGO_BIN_EXE_sq-git").into()) } pub fn sq_git>(&self, args: &[A]) -> std::result::Result { self.sq_git_in(None, args) } pub fn sq_git_in<'a, P: Into>, A: AsRef>( &self, wd: P, args: &[A]) -> std::result::Result { let mut c = self.command(Self::sq_git_path()?); // We are a machine, request machine-readable output. c.arg("--output-format=json"); for a in args { c.arg(a.as_ref()); } self.run_in(wd, c) } pub fn spawn(&self, mut c: Command) -> Result { self.spawn_in(None, c) } pub fn spawn_in<'a, P: Into>>(&self, wd: P, mut c: Command) -> Result { let git_state = self.git_state(); let wd = wd.into().unwrap_or(git_state.as_path()); // Preserve any environment variables the caller explicitly // set (env_clear clears those and prevents the process from // inheriting any environment variables, but we only want the // latter). let env: Vec<_> = c.get_envs() .filter_map(|(k, v)| { if let Some(v) = v { Some((k.to_os_string(), v.to_os_string())) } else { None } }) .collect::>(); let c = c.current_dir(wd) .env_clear() // Filter out all git-related environment variables. .envs(std::env::vars() .filter(|(k, _)| ! k.starts_with("GIT_")) .collect::>()) .env("SEQUOIA_CERT_STORE", self.certd_state()) .env("GNUPGHOME", self.gnupg_state()) .env("GIT_CONFIG_GLOBAL", "/dev/null") .env("GIT_CONFIG_NOSYSTEM", "1") .env("XDG_CACHE_HOME", self.xdg_cache_home()) .envs(env); Ok(c .stdout(Stdio::piped()) .stderr(Stdio::piped()) .spawn()?) } pub fn run(&self, c: Command) -> Result { self.run_in(None, c) } pub fn run_in<'a, P: Into>>(&self, wd: P, c: Command) -> Result { let cmd = format!("{:?}", c); eprintln!("$ {}", cmd); let output = self.spawn_in(wd, c) .map_err(|err| { eprintln!(" -> failed to spawn command: {}", err); err })? .wait_with_output() .map_err(|err| { eprintln!(" -> waiting for command to complete: {}", err); err })?; if output.status.success() { eprintln!(" -> success"); } else { eprintln!(" -> failure"); } eprintln!("stdout:\n{}", String::from_utf8_lossy(&output.stdout)); eprintln!("stderr:\n{}", String::from_utf8_lossy(&output.stderr)); if output.status.success() { Ok(output) } else { Err(Error::CliError(cmd, output)) } } /// Serializes a certificate to a file. pub fn serialize_cert(&self, name: &str, cert: &Cert) -> String { let mut bytes = Vec::new(); cert.as_tsk().serialize(&mut bytes) .expect("serializing to a vec is infallible"); let cert_pgp = self.scratch_state().join(format!("{}.pgp", name)); let mut f = File::create_new(&cert_pgp).expect("can create file"); f.write_all(&bytes).expect("can write"); drop(f); format!("{}", cert_pgp.display()) } /// Generates a certificate with the user ID /// . Writes it into the scratch /// directory, and imports it into the certificate stores. /// /// Returns the certificate and the path to a file containing it. pub fn gen(&self, localpart: &str, creation_time: C, validity: V) -> (Cert, String) where C: Into>, V: Into>, { // Be careful to create a certificate that won't be stripped on // import. let mut builder = CertBuilder::new() .add_userid(&format!("<{}@example.org>", localpart)[..]) .add_signing_subkey(); if let Some(t) = creation_time.into() { builder = builder.set_creation_time(t); } if let Some(v) = validity.into() { builder = builder.set_validity_period(v); } let (cert, _rev) = builder .generate() .expect("can generate a key"); let filename = self.serialize_cert(localpart, &cert); self.import(&cert).expect("can import"); (cert, filename) } /// Export the given entity's keyring, and make sure that it /// contains the specified certificates. The certificates must /// match exactly. Recall that adding a certificates prunes some /// components. /// /// It's okay if the entity does not exist. pub fn check_export<'a, E, C>(&self, entity: E, commit: C, expected: &[ &Cert ]) where E: Into>, C: Into>, { let entity = entity.into(); let commit = commit.into(); let mut args = vec![ "policy", "export" ]; if let Some(entity) = entity { args.push("--name"); args.push(entity); } else { args.push("--all"); } if let Some(commit) = commit { args.extend(&[ "--commit", commit]); } let got = if let Ok(output) = self.sq_git(&args[..]) { CertParser::from_bytes(&output.stdout) .expect("can parse keyring") .map(|r| r.map_err(Into::into)) .collect::>>() .expect("can parse all certificates") } else { // entity does not exist. eprintln!("Warning: sq-git policy export failed: entity \ appears to not exist"); Vec::new() }; let got: BTreeMap = BTreeMap::from_iter(got.into_iter().map(|c| (c.fingerprint(), c))); let got_fprs = BTreeSet::from_iter(got.keys()); let expected: BTreeMap = BTreeMap::from_iter(expected.iter().map(|&c| { (c.fingerprint(), c.clone().strip_secret_key_material()) })); let expected_fprs = BTreeSet::from_iter(expected.keys()); let mut die = false; for unexpected in got_fprs.difference(&expected_fprs) { let c = got.get(unexpected).unwrap(); eprintln!("Unexpectedly got {} ({})", unexpected, c.userids().next().map(|ua| { String::from_utf8_lossy(ua.userid().value()) }) .unwrap_or("".into())); die = true; } for missing in expected_fprs.difference(&got_fprs) { let c = expected.get(missing).unwrap(); eprintln!("Missing {} ({})", missing, c.userids().next().map(|ua| { String::from_utf8_lossy(ua.userid().value()) }) .unwrap_or("".into())); die = true; } for fpr in expected_fprs.intersection(&got_fprs) { let expected = expected.get(fpr).unwrap(); let got = got.get(fpr).unwrap(); if expected != got { // Is this failing unexpectedly? Perhaps you created a // certificate with encryption or authentication capable // subkeys. Recall: sq-git strips those on import. eprintln!("{} ({}) differs", fpr, expected.userids().next().map(|ua| { String::from_utf8_lossy(ua.userid().value()) }) .unwrap_or("".into())); eprintln!("Got ({} packets):", got.clone().into_packets().count()); let mut bytes = Vec::new(); got.as_tsk().armored().serialize(&mut bytes) .expect("serializing to a vec is infallible"); eprintln!("{}", String::from_utf8_lossy(&bytes)); eprintln!("Expected ({} packets):", expected.clone().into_packets().count()); let mut bytes = Vec::new(); expected.as_tsk().armored().serialize(&mut bytes) .expect("serializing to a vec is infallible"); eprintln!("{}", String::from_utf8_lossy(&bytes)); die = true; } } if die { panic!("{}'s certificates are unexpected", entity.unwrap_or("--all")); } } } /// Errors for this crate. #[derive(thiserror::Error, Debug)] pub enum Error { #[error("command failed\n$ {}\nstdout:\n{}\n\nstderr:\n{}", .0, String::from_utf8_lossy(&.1.stdout), String::from_utf8_lossy(&.1.stderr))] CliError(String, std::process::Output), #[error("`faketime` not available (to skip tests that need `faketime`, \ set the NO_FAKETIME environment variable)\n\ \nstdout:\n{}\n\ \nstderr:\n{}", String::from_utf8_lossy(&.0.stdout), String::from_utf8_lossy(&.0.stderr))] NoFaketime(std::process::Output), #[error(transparent)] Other(#[from] anyhow::Error), #[error(transparent)] Io(#[from] std::io::Error), #[error(transparent)] Utf8(#[from] std::string::FromUtf8Error), } fn sh_quote<'s, S: AsRef + 's>(s: S) -> String { let s = s.as_ref(); if s.contains(char::is_whitespace) { format!("{:?}", s) } else { s.to_string() } } sequoia-git-0.5.0/tests/diff.rs000064400000000000000000000234521046102023000145030ustar 00000000000000use std::fs; mod common; use common::Environment; use common::Error; #[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd)] enum Change<'a> { AddUser(&'a str), RetireUser(&'a str), } fn assert_changes<'a>(json: &[u8], expected: &[Change]) { let json = String::from_utf8_lossy(json); let output: serde_json::Value = serde_json::from_str(&json) .expect(&format!("valid json: got {} bytes:\n{}", json.len(), json)); // At the top-level we have a map that contains an entry // "changes". let changes = &output["changes"]; let changes = if let serde_json::Value::Array(changes) = changes { changes } else { panic!("Expected an array of changes, got: {:?}", changes); }; // The changes entry is an array of maps. let mut got = Vec::new(); for change in changes { // A map is corresponds to a single change, and looks looks // like this: // // { // "AddUser": "alice" // }, let change = if let serde_json::Value::Object(change) = change { change } else { panic!("Expected a map, got: {:?}", change); }; if let Some(user) = change.get("AddUser") { if let serde_json::Value::String(user) = user { got.push(Change::AddUser(user)); } else { panic!("Unknown change: {:?}", change); } } else if let Some(user) = change.get("RetireUser") { if let serde_json::Value::String(user) = user { got.push(Change::RetireUser(user)); } else { panic!("Unknown change: {:?}", change); } } else if let Some(_) = change.get("AddRight") { // We don't check for this yet. } else if let Some(_) = change.get("RemoveRight") { // We don't check for this yet. } else if let Some(_) = change.get("AddCert") { // We don't check for this yet. } else if let Some(_) = change.get("RemoveCert") { // We don't check for this yet. } else { panic!("Unknown change: {:?}", change); } } got.sort(); let mut expected = expected.to_vec(); expected.sort(); eprintln!("Expected changes: {:?}", expected); eprintln!(" Got changes: {:?}", got); assert_eq!(expected, got); } #[test] fn policy_diff() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let alice_fpr = &alice.fingerprint().to_string(); let (bob, bob_pgp) = e.gen("bob", None, None); let bob_fpr = &bob.fingerprint().to_string(); let (_carol, carol_pgp) = e.gen("carol", None, None); let (_dave, dave_pgp) = e.gen("dave", None, None); // Add an initial commit without a policy. fs::write(p.join("0"), "0.")?; e.git(&["add", "0"])?; e.git(&[ "commit", "-m", "Initial commit. No policy yet" ])?; let c0 = e.git_current_commit()?; // Alice adds herself as the project maintainer. e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Alice to the policy file.", &format!("-S{}", alice_fpr), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Check that she can add commits. fs::write(p.join("2"), "2.")?; e.git(&["add", "2"])?; e.git(&[ "commit", "-m", "Alice adds a commit.", &format!("-S{}", alice_fpr), ])?; let c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice authorizes Bob. e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice authorizes Bob.", &format!("-S{}", alice_fpr), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Check that he can add commits. fs::write(p.join("4"), "4.")?; e.git(&["add", "4"])?; e.git(&[ "commit", "-m", "Bob adds a commit.", &format!("-S{}", bob_fpr), ])?; let c4 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; let check = |args: &[&str], expected: &[Change]| { let mut a = vec!["policy", "diff"]; a.extend(args); let output = match e.sq_git(&a) { Ok(output) => { assert!(expected.is_empty()); output } Err(err) => { match err { Error::CliError(_, output) => { output } err => { panic!("Unexpected failure: {}", err); } } } }; assert_changes(&output.stdout, expected) }; // The status quo: // // c0: No policy. // root: Alice added to policy // c2: Policy unchanged. // c3: Bob added to policy. // c4 / HEAD: Policy unchanged. // HEAD -> working directory check(&[], &[]); // Commit with itself. check(&[&root, &root], &[]); // Commits without a policy check(&[&c0, &c0], &[]); // The commit where Alice is added. check(&[&c0, &root], &[ Change::AddUser("alice") ]); check(&[&root, &c0], &[ Change::RetireUser("alice") ]); check(&[&root, &c2], &[]); check(&[&c2, &root], &[]); // The commit where Bob is added. check(&[&c2, &c3], &[ Change::AddUser("bob") ]); check(&[&c3, &c2], &[ Change::RetireUser("bob") ]); // Two commits, no policy change. check(&[&c3, &c4], &[]); check(&[&c4, &c3], &[]); check(&["--old-commit", &c0, "--new-commit", &c4], &[Change::AddUser("alice"), Change::AddUser("bob")]); check(&["--new-commit", &c4, "--old-commit", &c0], &[Change::AddUser("alice"), Change::AddUser("bob")]); // From the first commit without a policy to HEAD. check(&[&c0, &c4], &[Change::AddUser("alice"), Change::AddUser("bob")]); check(&[&c4, &c0], &[Change::RetireUser("alice"), Change::RetireUser("bob")]); // With a symbolic name. check(&[&c0, "HEAD"], &[Change::AddUser("alice"), Change::AddUser("bob")]); check(&["HEAD", &c0], &[Change::RetireUser("alice"), Change::RetireUser("bob")]); // Replace the policy file, but don't check it in. let policy_toml = p.join("openpgp-policy.toml"); std::fs::remove_file(&policy_toml).expect("can remove"); let policy_toml = &policy_toml.display().to_string()[..]; e.sq_git(&[ "policy", "authorize", "carol", "--cert-file", &carol_pgp, "--project-maintainer" // All capabilities. ])?; check(&[&c4, policy_toml], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // If the second argument is not provided we use the policy in the // working directory. check(&[&c4], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // If no argumens are provided we compare HEAD, i.e., c4 to the // current file. check(&[], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // Relative to itself. check(&[policy_toml, policy_toml], &[]); // If the second argument is not provided we use the policy in the // working directory. check(&[policy_toml], &[]); // Don't use the DWIM interface. check(&["--old-commit", &c4, "--new-file", policy_toml], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); check(&["--new-file", policy_toml, "--old-commit", &c4], &[ Change::RetireUser("alice"), Change::RetireUser("bob"), Change::AddUser("carol") ]); // Create a second policy file. let carol_policy_toml = p.join("carol-policy.toml"); std::fs::rename(&policy_toml, &carol_policy_toml).expect("can rename"); let carol_policy_toml = &carol_policy_toml.display().to_string()[..]; e.sq_git(&[ "policy", "authorize", "dave", "--cert-file", &dave_pgp, "--project-maintainer" // All capabilities. ])?; check(&["--old-file", policy_toml, "--new-file", carol_policy_toml], &[ Change::RetireUser("dave"), Change::AddUser("carol") ]); check(&["--new-file", policy_toml, "--old-file", carol_policy_toml], &[ Change::AddUser("dave"), Change::RetireUser("carol") ]); Ok(()) } #[test] fn non_existant() -> anyhow::Result<()> { let e = Environment::new()?; let p = e.git_state(); // Check that accessing a non-existant file returns in an error. let non_existent = p.join("non_existent"); assert!(! non_existent.exists()); let non_existent = &non_existent.display().to_string(); assert!(e.sq_git(&[ non_existent, non_existent ]).is_err()); assert!(e.sq_git(&[ "--old-commit", non_existent, "--new-commit", non_existent ]).is_err()); assert!(e.sq_git(&[ "--old-file", non_existent, "--new-file", non_existent ]).is_err()); Ok(()) } sequoia-git-0.5.0/tests/expired-cert.rs000064400000000000000000000120731046102023000161630ustar 00000000000000use std::fs; use std::time::Duration; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::Packet; use openpgp::policy::StandardPolicy; const P: &StandardPolicy = &StandardPolicy::new(); mod common; use common::Environment; #[test] fn expired_certificate() -> anyhow::Result<()> { if ! Environment::check_for_faketime()? { // faketime tests are disabled. return Ok(()); } // Consider: // // Alice is authorized to add commits at time t0. let t0 = SystemTime::now() - Duration::new(80 * 60, 0); // // At t1, she adds a commit (c1). let t1 = t0 + Duration::new(30 * 60, 0); // At t2, her certificate expires. // // Note: This corresponds to the current time, because // set_expiration_time doesn't let us override the signature // creation time. See: // // https://gitlab.com/sequoia-pgp/sequoia/-/issues/1154 let t2 = t1 + Duration::new(50 * 60, 0); // // At t3, she adds a commit (c2) that updates her certificate. let t3 = t2 + Duration::new(70 * 60, 0); let future = t3 + Duration::new(110 * 60, 0); // // The policy in c1 is used to authenticate c2, but the // certificate in c1's policy is expired. In this case, the // certificates from c2's policy should be used to update the // certificates in c1's policy. let mut e = Environment::at(t0.clone())?; let p = e.git_state(); let (alice, alice_pgp) = e.gen( "alice", t0.clone(), t2.duration_since(t1.clone()).expect("valid")); let alice_fpr = &alice.fingerprint().to_string()[..]; e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit (@ t0).", ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Add another commit at t1. e.time(t1); fs::write(p.join("2"), "2.")?; e.git(&["add", "2"])?; e.git(&[ "commit", "-m", "@ t1", &format!("-S{}", alice_fpr), ])?; let c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root, &c2])?; // Try adding a commit after her certificate expires. This should fail. e.time(t3); fs::write(p.join("3"), "3.")?; e.git(&["add", "3"])?; assert!(e.git(&[ "commit", "-m", "@ t3.", &format!("-S{}", alice_fpr), ]).is_err()); // Extend Alice's expiration. let (alice2, _) = { let vc = alice.with_policy(P, e.time.clone()).expect("valid cert"); let mut primary_signer = alice.primary_key().key().clone() .parts_into_secret()?.into_keypair()?; // We really want to set the new signatures' creation time to t2 let mut packets = Vec::new(); for ka in vc.keys() { let mut subkey_signer = if ka.for_signing() { Some(ka.key().clone().parts_into_secret()?.into_keypair()?) } else { None }; let sigs = ka.set_expiration_time( &mut primary_signer, if let Some(subkey_signer) = subkey_signer.as_mut() { Some(subkey_signer) } else { None }, Some(future.clone())) .expect(&format!("can update expiration of {}", ka.key().fingerprint())); if ka.key().fingerprint() == alice.fingerprint() { packets.push(Packet::from(alice.primary_key().key().clone())); } else { packets.push(Packet::from(ka.key().clone().role_into_subordinate())); } packets.extend(sigs.into_iter().map(|sig| Packet::from(sig))); } alice.clone().insert_packets(packets).expect("can insert packets") }; e.import(&alice2).expect("can import"); // Now we should be able to create the commit. assert!(e.git(&[ "commit", "-m", "@ t3.", &format!("-S{}", alice_fpr), ]).is_ok()); let c3_1 = e.git_current_commit()?; // But we can't verify it, because the certificate in the policy // is expired! e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root, &c3_1]).is_err()); // Reset to c2. e.git(&["reset", "--hard", &c2])?; assert_eq!(c2, e.git_current_commit()?); // Update the policy (by looking in the local certificate store). assert!(e.sq_git(&["policy", "sync", "--disable-keyservers"]).is_ok()); e.git(&["add", "openpgp-policy.toml"])?; // Now we should be able to create the commit. assert!(e.git(&[ "commit", "-m", "@ t3 (try two).", &format!("-S{}", alice_fpr), ]).is_ok()); let c3_2 = e.git_current_commit()?; // And we can verify it, because the updated certificate is in the // new commit's policy file. e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root, &c3_2]).is_ok()); Ok(()) } sequoia-git-0.5.0/tests/export.rs000064400000000000000000000030131046102023000151030ustar 00000000000000mod common; use common::Environment; #[test] fn export() -> anyhow::Result<()> { let e = Environment::new()?; let (alice, _alice_pgp) = e.gen("alice", None, None); let (bob, _bob_pgp) = e.gen("bob", None, None); // Add alice. e.sq_git(&[ "policy", "authorize", "alice", &alice.fingerprint().to_string(), "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.sq_git(&["log", "--trust-root", &root])?; e.check_export("alice", None, &[ &alice ]); e.check_export(None, None, &[ &alice ]); e.check_export("bob", None, &[ ]); // Add alice. e.sq_git(&[ "policy", "authorize", "bob", &bob.fingerprint().to_string(), "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Bob as co-maintainer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.sq_git(&["log", "--trust-root", &root])?; e.check_export("alice", None, &[ &alice ]); e.check_export(None, None, &[ &alice, &bob ]); e.check_export("bob", None, &[ &bob ]); // Make sure using a commit works. e.check_export("alice", &root[..], &[ &alice ]); e.check_export(None, &root[..], &[ &alice ]); e.check_export("bob", &root[..], &[ ]); Ok(()) } sequoia-git-0.5.0/tests/git-update-hook.rs000064400000000000000000000231741046102023000165750ustar 00000000000000use std::borrow::Cow; use std::fs; use std::io::Write; use std::path::PathBuf; mod common; use common::Environment; /// Initializes a "local" respository and a "remote" respository, and /// adds the remote repository as a remote named "origin". /// /// Returns the envirnment, the root, and the location of the external /// policy file (if enabled). /// /// If `use_external_policy` is true, the update hook is configured to /// use the external policy otherwise it is configured to use the /// internal policy. /// /// If `create_interanl_policy` is false, no policy is added to the /// initial (root) commit. The initial commit is still signed with /// the willow release key. fn create_environment(use_external_policy: bool, create_internal_policy: bool, signer: Option<&str>) -> anyhow::Result<(Environment, String, Option)> { let (e, root) = if create_internal_policy { Environment::scooby_gang_bootstrap(signer)? } else { let e = Environment::new()?; e.init_repo(None)?; let root = e.git_commit(&[("initial-commit", Some(b"xxx"))], "Initial commit (no signing policy)", Some(&e.willow_release)) .expect("can commit"); (e, root) }; // Create a bare repository under our scratch directory. let repo = e.scratch_state().join("repo"); e.git(&["init", "--bare", &repo.display().to_string()])?; // Add as origin. e.git(&["remote", "add", "origin", &repo.display().to_string()])?; e.git(&["checkout", "-b", "main"])?; e.git(&["push", "origin", "main"])?; // Create the external policy file. let external_policy_file = if use_external_policy { let external_policy_file = e.scratch_state().join("policy.toml"); e.scooby_gang_bootstrap_policy(&external_policy_file)?; Some(external_policy_file) } else { None }; // Set us as update hook. let update_hook = repo.join("hooks").join("update"); let mut update = fs::File::create(&update_hook)?; writeln!(update, "#!/bin/sh")?; writeln!(update)?; writeln!(update, "{} update-hook --trust-root={} {}{} \"$@\"", Environment::sq_git_path()?.display(), root, if external_policy_file.is_some() { "--policy-file=" } else { "" }, if let Some(file) = external_policy_file.as_ref() { Cow::Owned(file.display().to_string()) } else { Cow::Borrowed("") })?; eprintln!("Update hook {}:\n{}", update_hook.display(), String::from_utf8_lossy( &std::fs::read(&update_hook) .expect("Can read update hook file"))); #[cfg(unix)] { // Make file executable. use std::os::unix::fs::PermissionsExt; let metadata = update.metadata()?; let mut permissions = metadata.permissions(); permissions.set_mode(0o755); update.set_permissions(permissions)?; } Ok((e, root, external_policy_file)) } #[test] fn update_hook_internal_policy() -> anyhow::Result<()> { // Test that the update hook works using an internal policy. let (e, _root, _) = create_environment(false, true, None)?; let p = e.git_state(); // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code-signing key can change the source code, as she // has the sign-commit right. e.git(&["checkout", "-b", "test-willow"])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change.", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "test-willow"])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Her release key also has that right, because she needs it in // order to give it to new users. e.git(&["checkout", "-b", "test-willow-release"])?; fs::write(p.join("a"), "Aller Anfang ist schwer. -- Schiller")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Someone is not quite correct on the internet.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.git(&["push", "origin", "test-willow-release"])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Buffy's cert was not yet added, so she may not sign commits. e.git(&["checkout", "-b", "test-buffy"])?; fs::write(p.join("a"), "Aller Anfang ist schwer, unless you are super strong!1")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Well, actually...", &format!("-S{}", e.buffy.fingerprint), ])?; if let Ok(output) = e.git(&["push", "origin", "test-buffy"]) { eprintln!("stderr: {}", String::from_utf8_lossy(&output.stderr)); } assert!(e.git(&["push", "origin", "test-buffy"]).is_err()); Ok(()) } #[test] fn update_hook_external_policy() -> anyhow::Result<()> { // Check that the update hook can use an external policy. // // The repository does NOT contain a policy. let (e, _root, _policy_file) = create_environment(true, false, None)?; // Willow is allowed by the external policy. We can push. e.git(&["checkout", "-b", "willow"])?; e.git_commit(&[("xxx", Some(b"2"))], "commit-1", Some(&e.willow_release)) .expect("can commit"); assert!(e.git(&["push", "origin", "willow"]).is_ok()); // Xander is not allowed by the external policy. We won't be able // to push. e.git(&["checkout", "-b", "xander"])?; e.git_commit(&[("xxx", Some(b"3"))], "commit-2", Some(&e.xander)) .expect("can commit"); assert!(e.git(&["push", "origin", "xander"]).is_err()); Ok(()) } #[test] fn update_hook_ignore_internal_policy() -> anyhow::Result<()> { // Check that the update hook can use an external policy. // // The repository contains a policy, but it has different // permissions. let (e, _root, external_policy_file) = create_environment(true, true, Some("Riley Finn"))?; let external_policy_file = external_policy_file .expect("have external policy"); // Change the external policy, which the update hook does NOT use. // Make riley the project manager. std::fs::remove_file(&external_policy_file).expect("Can remove file"); e.sq_git( &[ "policy", "authorize", "--policy-file", &external_policy_file.display().to_string(), e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", "--sign-tag", "--sign-archive", "--add-user", "--retire-user", "--audit", ])?; // Xander is not allowed by the external policy or the internal // policy. We won't be able to push. e.git(&["checkout", "-b", "xander", "main"])?; e.git_commit(&[("xxx", Some(b"xander"))], "xander commit", Some(&e.xander)) .expect("can commit"); e.git_log_graph().expect("can display graph"); assert!(e.git(&["push", "origin", "xander"]).is_err()); // Willow is not allowed by the external policy, but she is // allowed by the internal one. We shouldn't be able to push // since the update hook uses the external policy. e.git(&["checkout", "-b", "willow", "main"])?; e.git_commit(&[("xxx", Some(b"willow"))], "willow commit", Some(&e.willow_release)) .expect("can commit"); e.git_log_graph().expect("can display graph"); assert!(e.git(&["push", "origin", "willow"]).is_err()); // Riley is allowed by the external policy, and is not allowed by // the internal policy. This should work. e.git(&["checkout", "-b", "riley", "main"])?; e.git_commit(&[("xxx", Some(b"riley"))], "riley commit", Some(&e.riley)) .expect("can commit"); e.git_log_graph().expect("can display graph"); assert!(e.git(&["push", "origin", "riley"]).is_ok()); Ok(()) } #[test] fn rebase() -> anyhow::Result<()> { let (e, _root, _policy_file) = create_environment(false, true, None)?; let p = e.git_state(); // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // There are two threads of development. Let's start the first // one. e.git(&["checkout", "-b", "feature-one"])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change of the first feature.", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "feature-one"])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // There are two threads of development. Let's start the second // one. e.git(&["checkout", "-b", "feature-two"])?; fs::write(p.join("b"), "And now for something completely different.")?; e.git(&["add", "b"])?; e.git(&[ "commit", "-m", "First change of the second feature.", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "feature-two"])?; // Now we rebase feature-two on top of feature-one and push it to // update the remote feature-two branch. e.git(&[ "rebase", "feature-one", &format!("-S{}", e.willow.fingerprint), ])?; e.git(&["push", "origin", "--force", "feature-two"])?; Ok(()) } sequoia-git-0.5.0/tests/keyring-update.rs000064400000000000000000000323051046102023000165200ustar 00000000000000use std::fs; use sequoia_openpgp as openpgp; use openpgp::cert::KeyBuilder; use openpgp::policy::StandardPolicy; use openpgp::types::KeyFlags; mod common; use common::Environment; use common::rotate_subkeys; const P: &StandardPolicy = &StandardPolicy::new(); #[test] fn keyring_update_add_certificate() -> anyhow::Result<()> { // Consider: Alice is the project maintainer. She gives Bob // commit rights. Bob modifies Alice's keyring to include another // certificate that he presumably controls. That's not allowed. // Make sure we reject it. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); let (alice_bob, alice_bob_pgp) = e.gen("alice-bob", None, None); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer. ])?; e.git(&["add", "openpgp-policy.toml"])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Bob tries to add a certificate to Alice's keyring. This should // fail. e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_bob_pgp, "--project-maintainer" // Committer ])?; e.check_export("alice", None, &[ &alice, &alice_bob ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob adds a certificate to Alice's keyring.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset to c3. Make sure Alice can add a certificate to an // existing entity. e.git(&["reset", "--soft", &c3])?; e.check_export("alice", None, &[ &alice, &alice_bob ]); e.check_export("bob", None, &[ &bob ]); assert_eq!(c3, e.git_current_commit()?); e.git(&[ "commit", "-m", "Alice adds the certificate to her keyring.", &format!("-S{}", alice.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); // And make sure the new certificate can add commits. fs::write(p.join("b"), "bbb.")?; e.git(&["add", "b"])?; e.git(&[ "commit", "-m", "Alice makes a commit signed with the new certificate.", &format!("-S{}", alice_bob.fingerprint()), ])?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; Ok(()) } #[test] fn keyring_update_remove_certificate() -> anyhow::Result<()> { // Consider: // // Alice is the project maintainer. She gives Bob commit rights. // Bob modifies Alice's keyring to remove her certificate. // That's not allowed. Make sure we catch it. let e = Environment::new()?; let p = e.git_state(); let (alice1, alice1_pgp) = e.gen("alice1", None, None); let (alice2, alice2_pgp) = e.gen("alice2", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice1_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice1 ]); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice2_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice1, &alice2 ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice1.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice1, &alice2 ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice2.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; std::fs::remove_file(p.join("openpgp-policy.toml")).expect("can remove"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice1_pgp, "--project-maintainer" // All capabilities. ])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice1 ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob removes one of Alice's certificates.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset to c3. Make sure alice can remove the certificate. e.git(&["reset", "--soft", &c3])?; e.check_export("alice", None, &[ &alice1 ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice removes one of her certificates.", &format!("-S{}", alice2.fingerprint()), ])?; Ok(()) } #[test] fn keyring_update_add_packet() -> anyhow::Result<()> { // It's always safe to add to an existing certificate. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer. ])?; e.git(&["add", "openpgp-policy.toml"])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let _c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Bob updates his certificate. let bob2 = rotate_subkeys(&bob); assert!(bob.keys().count() < bob2.keys().count()); let bob2_pgp = e.serialize_cert("bob2", &bob2); e.import(&bob2).expect("can import"); e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob2_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob2 ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob updates his certificate.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); // Bob updates Alice's certificate. let alice_vc = alice.with_policy(P, None).expect("valid cert"); let alice2 = KeyBuilder::new(KeyFlags::signing()) .subkey(alice_vc).unwrap() .attach_cert().unwrap(); assert!(alice.keys().count() < alice2.keys().count()); let alice2_pgp = e.serialize_cert("alice2", &alice2); e.import(&alice2).expect("can import"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice2_pgp, ])?; e.check_export("alice", None, &[ &alice2 ]); e.check_export("bob", None, &[ &bob2 ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob updates Alice's certificate.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); Ok(()) } #[test] fn keyring_update_remove_packet() -> anyhow::Result<()> { // Removing a packet requires authorization. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let (bob, bob_pgp) = e.gen("bob", None, None); let bob_vc = bob.with_policy(P, None).expect("valid cert"); let bob2 = KeyBuilder::new(KeyFlags::signing()) .subkey(bob_vc).unwrap() .attach_cert().unwrap(); assert!(bob.keys().count() < bob2.keys().count()); let bob2_pgp = e.serialize_cert("bob2", &bob2); e.import(&bob2).expect("can import"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice makes herself a release manager.", &format!("-S{}", alice.fingerprint()), ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob2_pgp, "--committer" // Committer. ])?; e.git(&["add", "openpgp-policy.toml"])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob2 ]); e.git(&[ "commit", "-m", "Alice makes Bob a committer.", &format!("-S{}", alice.fingerprint()), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; fs::write(p.join("a"), "aaa.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Bob makes a commit.", &format!("-S{}", bob.fingerprint()), ])?; let c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Bob tries to strip a User ID from his certificate. This should // fail. std::fs::remove_file(p.join("openpgp-policy.toml")).expect("can remove"); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" // All capabilities. ])?; e.sq_git(&[ "policy", "authorize", "bob", "--cert-file", &bob_pgp, "--committer" // Committer ])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Bob strips a user ID from his certificate.", &format!("-S{}", bob.fingerprint()), ])?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset to c3. Make sure alice can remove the user ID. e.git(&["reset", "--soft", &c3])?; e.check_export("alice", None, &[ &alice ]); e.check_export("bob", None, &[ &bob ]); e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Alice strips a user ID from Bob's certificate.", &format!("-S{}", alice.fingerprint()), ])?; Ok(()) } sequoia-git-0.5.0/tests/policy-authorize.rs000064400000000000000000000113311046102023000170730ustar 00000000000000use std::collections::BTreeSet; mod common; use common::Environment; use common::Result; fn create_environment() -> Result<(Environment, String)> { Environment::scooby_gang_bootstrap(None) } // The keys for the different authorizations in the JSON file. const SIGN_COMMIT: &str = "sign_commit"; const SIGN_TAG: &str = "sign_tag"; const SIGN_ARCHIVE: &str = "sign_archive"; const ADD_USER: &str = "add_user"; const RETIRE_USER: &str = "retire_user"; const AUDIT: &str = "audit"; const CAPS: &[&str] = &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE, ADD_USER, RETIRE_USER, AUDIT ]; fn check(e: &Environment, args: &[&str], expected_caps: &[&str]) { let petname = e.buffy.petname; let fpr = e.buffy.fingerprint.to_string(); let openpgp_policy_toml = e.git_state().join("openpgp-policy.toml"); if let Err(err) = std::fs::remove_file(&openpgp_policy_toml) { if std::io::ErrorKind::NotFound != err.kind() { panic!("Removing {}", openpgp_policy_toml.display()); } } let mut sq_git: Vec<&str> = [ "policy", "authorize", &petname, &fpr, ].to_vec(); sq_git.extend(args); eprintln!("Running: sq-git {}", sq_git.join(" ")); e.sq_git(&sq_git).unwrap(); let output = e.sq_git(&[ "policy", "describe", "--output-format", "json" ]).unwrap(); eprintln!("Output:\n{}", String::from_utf8_lossy(&output.stdout)); let status: serde_json::Value = serde_json::from_slice(&output.stdout) .expect("\"sq policy describe\" emits valid json output"); // eprintln!("JSON:\n{:?}", status); let auths = &status["authorization"]; // eprintln!("JSON[\"authorization\"]:\n{:?}", auths); let user = &auths[petname]; eprintln!("JSON[\"authorization\"][\"{}\"]:\n{:?}", petname, user); let caps = BTreeSet::from_iter(CAPS.iter()); let expected_caps_present = BTreeSet::from_iter(expected_caps.iter()); for cap in expected_caps_present.iter() { eprintln!("Checking that {} is true", cap); match &user[cap] { serde_json::Value::Bool(true) => (), v => { panic!("expected {} to be true, but it is: {:?}", cap, v); } } } let expected_caps_missing = caps.difference(&expected_caps_present); for cap in expected_caps_missing { eprintln!("Checking that {} is not set or false", cap); match &user[cap] { serde_json::Value::Null => (), serde_json::Value::Bool(false) => (), v => { panic!("expected {} to be false, but it is: {:?}", cap, v); } } } } #[test] fn check_flags() -> anyhow::Result<()> { let (e, _root) = create_environment()?; // One at a time. check(&e, &["--sign-commit"], &[ SIGN_COMMIT ]); check(&e, &["--sign-archive"], &[ SIGN_ARCHIVE ]); check(&e, &["--sign-tag"], &[ SIGN_TAG ]); check(&e, &["--add-user"], &[ ADD_USER ]); check(&e, &["--retire-user"], &[ RETIRE_USER ]); check(&e, &["--audit"], &[ AUDIT ]); // Mix and match. check(&e, &["--sign-commit", "--sign-archive"], &[ SIGN_COMMIT, SIGN_ARCHIVE ]); check(&e, &["--sign-tag", "--add-user", "--retire-user"], &[ SIGN_TAG, ADD_USER, RETIRE_USER ]); // Add some negatives. The last positive or negative wins. check(&e, &["--no-sign-commit", "--sign-archive"], &[ SIGN_ARCHIVE ]); check(&e, &["--sign-commit", "--no-sign-commit", "--sign-archive"], &[ SIGN_ARCHIVE ]); check(&e, &["--no-sign-commit", "--sign-commit", "--sign-archive"], &[ SIGN_COMMIT, SIGN_ARCHIVE ]); // The meta-capabilities. check(&e, &["--committer"], &[ SIGN_COMMIT ]); check(&e, &["--release-manager"], &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE ]); check(&e, &["--project-maintainer"], &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE, ADD_USER, RETIRE_USER, AUDIT ]); // Union. check(&e, &["--project-maintainer", "--committer"], &[ SIGN_COMMIT, SIGN_TAG, SIGN_ARCHIVE, ADD_USER, RETIRE_USER, AUDIT ]); check(&e, &["--project-maintainer", "--no-sign-archive"], &[ SIGN_COMMIT, SIGN_TAG, ADD_USER, RETIRE_USER, AUDIT ]); // A meta-capability does not trump a negative capability. check(&e, &["--no-sign-archive", "--project-maintainer"], &[ SIGN_COMMIT, SIGN_TAG, ADD_USER, RETIRE_USER, AUDIT ]); Ok(()) } sequoia-git-0.5.0/tests/policy.rs000064400000000000000000001161431046102023000150720ustar 00000000000000use std::fs; use sequoia_openpgp as openpgp; use openpgp::serialize::Serialize; mod common; use common::Environment; use common::Result; fn create_environment() -> Result<(Environment, String)> { Environment::scooby_gang_bootstrap(None) } #[test] fn sign_commit() -> anyhow::Result<()> { let (e, root) = create_environment()?; let p = e.git_state(); // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code-signing key can change the source code, as she // has the sign-commit right. e.git(&["checkout", "-b", "test-willow"])?; fs::write(p.join("a"), "Aller Anfang ist schwer.")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "First change.", &format!("-S{}", e.willow.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Her release key also has that right, because she needs it in // order to give it to new users. e.git(&["checkout", "-b", "test-willow-release"])?; fs::write(p.join("a"), "Aller Anfang ist schwer. -- Schiller")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Someone is not quite correct on the internet.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Buffy's cert was not yet added, so she may not sign commits. e.git(&["checkout", "-b", "test-buffy"])?; fs::write(p.join("a"), "Aller Anfang ist schwer, unless you are super strong!1")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "Well, actually...", &format!("-S{}", e.buffy.fingerprint), ])?; let commit_2 = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); let commit_3 = e.git_commit(&[("workwork.txt", Some(b"Hiho, hiho"))], "Off to work we go...", Some(&e.willow_release)).unwrap(); // commit 2 is still bad. assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // But if we use the bad commit as the trust root, it should work, // because we don't check that the trust root is authenticated by // its parent, and commit 2 authenticates commit 3. assert!(e.sq_git(&["log", "--trust-root", &commit_2]).is_ok()); // Let's check the range commit_2..commit_3, but use the root as // our trust root instead of commit_2. This should again fail. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_2, commit_3)]).is_err()); // commit_2..commit_2 is empty. But, we should still check for a // path from the trust root to commit_2. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_2, commit_2)]).is_err()); // commit_3..commit_3 is empty. But, we should still check for a // path from the commit_2 to commit_3. assert!(e.sq_git(&["log", "--trust-root", &commit_2, &format!("{}..{}", commit_3, commit_3)]).is_ok()); Ok(()) } #[test] fn add_user() -> anyhow::Result<()> { let (e, root) = create_environment()?; // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code-signing key can change the source code, but she // can not add users. e.git(&["checkout", "-b", "test-willow"])?; // Try to add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // However, her release key does have that right. e.git(&["checkout", "-b", "test-willow-release"])?; // Try to add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Xander's cert was not yet added, so he definitely may not add // users either. e.git(&["checkout", "-b", "test-xander"])?; // Try to add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); Ok(()) } #[test] fn retire_user() -> anyhow::Result<()> { let (e, root) = create_environment()?; // Add Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Willow's code signing key may not retire Buffy. e.git(&["checkout", "-b", "test-willow"])?; // Try to retire Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--no-sign-commit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // However, her release key does have that right. e.git(&["checkout", "-b", "test-willow-release"])?; // Try to retire Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--no-sign-commit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.willow_release.fingerprint), ])?; e.sq_git(&["log", "--trust-root", &root])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Xander's cert was not yet added, so he definitely may not // retire users either. e.git(&["checkout", "-b", "test-xander"])?; // Try to retire Buffy. e.sq_git(&[ "policy", "authorize", e.buffy.petname, &e.buffy.fingerprint.to_string(), "--no-sign-commit", ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Add Buffy.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); Ok(()) } #[test] fn audit() -> anyhow::Result<()> { // Introduce some bad commits, and try to recover. // // When we use in-band policies, then only a certificate with the // audit capability can goodlist commits, and can it can only // recover from hard revocations. // // When we use an external policy (using --policy-file), we can't // see who added a goodlist entry. But that doesn't matter // because the policy is fully trusted. An external policy can // recover from any type of veritifcation failure include the // complete absence of a signature. let (e, root) = create_environment()?; let p = e.git_state(); // Add a commit from Willow, which is allowed. This makes sure // the trust root's policy is not applied to the first dodgy commit. fs::write(p.join("superpowers"), "Willow can break encryption.")?; e.git(&["add", "superpowers"])?; e.git(&[ "commit", "-m", "Willow data commit.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); // Add a commit signed by Xander, who is not authorized to do // that. fs::write(p.join("a"), "Aller Anfang ist schwer, I'll go fetch the hammer!")?; e.git(&["add", "a"])?; e.git(&[ "commit", "-m", "No problem, we'll get you up and running in no time.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_err()); let bad_commit = e.git_current_commit()?; // Bookmark. e.git(&["checkout", "-b", "test-base"])?; // Now we try to recover by good-listing the bad commit. // Willow's code signing key may not goodlist commits. e.git(&["checkout", "-b", "test-willow"])?; // Try to goodlist the commit. e.sq_git(&["policy", "goodlist", &bad_commit])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Goodlist the bad commit.", &format!("-S{}", e.willow.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // When specified via an external policy, this is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_ok()); // But, if we look further back, the commit is now goodlisted, but // the signer that got the commit goodlisted does not have the // audit right. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // When specified via an external policy, this is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml", &format!("{}..", root)]).is_ok()); // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Willow's release key may goodlist commits. e.git(&["checkout", "-b", "test-willow-release"])?; // Try to goodlist the commit. e.sq_git(&["policy", "goodlist", &bad_commit])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Goodlist the bad commit.", &format!("-S{}", e.willow_release.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // When specified via an external policy, this is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_ok()); // But, if we look further back, the commit is now goodlisted, but // it is still considered bad, because in-band goodlisting can // only be used to recover from signing keys that have been hard // revoked. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Goodlisting this commit from an external policy is enough. e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml", &format!("{}..", root)])?; // Reset. e.git(&["checkout", "test-base"])?; e.git(&["clean", "-fdx"])?; // Xander's cert was not yet added, so he definitely may not // goodlist his own commit. e.git(&["checkout", "-b", "test-xander"])?; // Try to goodlist the commit. e.sq_git(&["policy", "goodlist", &bad_commit])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Goodlist the bad commit.", &format!("-S{}", e.xander.fingerprint), ])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml"]).is_err()); // But, if we look further back, the commit is now goodlisted, but // the signer that got the commit goodlisted does not have the // audit right. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Goodlisting this commit from an external policy is enough. assert!(e.sq_git(&["log", "--trust-root", &root, "--policy-file", "openpgp-policy.toml", &format!("{}..", root)]).is_err()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_1() -> anyhow::Result<()> { let (e, root) = create_environment()?; // G <- target // | // F <- Good list B // | // E // | // D <- Add revocation for Riley // | // C // | // B <- Signature by Riley // | // A <- Trust root. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"1"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_e = e.git_commit(&[("workwork.txt", Some(b"e"))], "E: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "F: willow good lists riley's commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_g = e.git_commit(&[("workwork.txt", Some(b"g"))], "G: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_2() -> anyhow::Result<()> { let (e, root) = create_environment()?; // K <- target // / \ // | I <- Good list B // | | // | H // | | // J G // | | // | F // | | // | E // \ / // D <- Add revocation for Riley // | // C // | // B <- Signature by Riley // | // A <- Trust root. // // By inspection, we see that there is an authenticated path from // A to K via I, because I goodlists B. That path is longer than // the path via J. If we do a breath-first walk from K to A, then // we'll visit the nodes in the following order: K, J, I, D, H, C, // G, B... We'll reject B, because the good list hasn't // propagated to B. And the goodlist will never propagate to B, // because we'd have to visit D, C, and B a second time. // // We avoid this problem by doing a topographical walk. That is, // we don't visit D until we've visit all of its children (J and // E). Then, all good lists have propagated to D and when we // visit B, B is on the goodlist. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"1"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_e = e.git_commit(&[("workwork.txt", Some(b"e"))], "E: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_f = e.git_commit(&[("workwork.txt", Some(b"f"))], "F: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_g = e.git_commit(&[("workwork.txt", Some(b"g"))], "G: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_h = e.git_commit(&[("workwork.txt", Some(b"h"))], "H: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_i = e.git_commit(&[("openpgp-policy.toml", None)], "I: willow good lists riley's commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Reset to d. e.git(&["checkout", &commit_d])?; e.git(&["clean", "-fdx"])?; let commit_j = e.git_commit(&[("workwork.md", Some(b"1"))], "J: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Merge I and J. e.git(&[ "merge", "-m", "K: Merge I and J", &format!("-S{}", e.willow_release.fingerprint), &commit_j, &commit_i])?; let commit_k = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_3() -> anyhow::Result<()> { let (e, root) = create_environment()?; // F <- target // / \ // | D // | | // E | <- Add revocation for Riley // | | // | C // \ / // B <- Signature by Riley // | // A <- Trust root. // // // We shouldn't be able to verify F, because even though A - B - C // - D - F taken alone is an authentic path, we should notice the // revocation certificate added in E and reject B. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"c"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_d = e.git_commit(&[("workwork.txt", Some(b"d"))], "D: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Reset to b. e.git(&["checkout", &commit_b])?; e.git(&["clean", "-fdx"])?; // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_e = e.git_commit(&[("openpgp-policy.toml", None)], "E: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", root, commit_d)]).is_ok()); // Merge D and E. e.git(&[ "merge", "-m", "F: Merge D and E", &format!("-S{}", e.willow_release.fingerprint), &commit_d, &commit_e])?; let commit_k = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_4() -> anyhow::Result<()> { let (e, root) = create_environment()?; // G <- target // / \ // F | <- Good list C // | | // | E <- Good list B // \ / // D <- Add revocation for Riley. // | // C <- Signature by Riley // | // B <- Signature by Riley // | // A <- Trust root. // // // Along, neither A-B-C-D-E-G or A-B-C-D-F-G is valid. But taken // together, when visiting C, there is an authenticated suffix // that goodlists C, and when visiting B, there is also an // authenticates suffix that authenticates B. So, G is // authenticated! // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("riley.txt", Some(b"riley was here, again"))], "C: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_e = e.git_commit(&[("openpgp-policy.toml", None)], "E: willow good lists riley's commit (B)", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Reset to d. e.git(&["checkout", &commit_d])?; e.git(&["clean", "-fdx"])?; e.sq_git(&[ "policy", "goodlist", &commit_c, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "F: willow good lists riley's commit (C)", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Merge E and F. // // This is a bit complicated, because the two good list entries // are going to conflict. Create a merge commit (but don't commit // it) using the content of F. Then manually merge in E (which // goodlisted B). e.git(&[ "merge", "-m", "G: Merge E and F", "-s", "ours", "--no-commit", &commit_e, &commit_f])?; e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "G: Merge E and F", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); Ok(()) } #[test] #[allow(unused_variables)] fn goodlist_5() -> anyhow::Result<()> { let (e, root) = create_environment()?; // G <- target // | // F <- Xander goodlists B, but that's not allowed // | // E // | // D <- Add revocation for Riley // | // C // | // B <- Signature by Riley // | // A <- Trust root. // // Make sure that goodlisting that is not allowed is, in fact, // ignored. // Add Riley as a committer. e.sq_git(&[ "policy", "authorize", e.riley.petname, &e.riley.fingerprint.to_string(), "--sign-commit", ])?; let commit_a = e.git_commit(&[("openpgp-policy.toml", None)], "A: willow authorizes riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("riley.txt", Some(b"riley was here"))], "B: riley signs a commit", Some(&e.riley)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"1"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Willow adds a hard revocation for Riley, but does not goodlist // his commit. let riley_revocation_pgp = e.scratch_state().join("riley-revocation.pgp"); let mut f = std::fs::File::create(&riley_revocation_pgp).unwrap(); e.riley.hard_revoke().serialize(&mut f).unwrap(); drop(f); e.sq_git(&[ "policy", "authorize", "--cert-file", &riley_revocation_pgp.to_str().unwrap(), e.riley.petname, ])?; let commit_d = e.git_commit(&[("openpgp-policy.toml", None)], "D: willow imports hard revocation for riley", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_e = e.git_commit(&[("workwork.txt", Some(b"e"))], "E: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); e.sq_git(&[ "policy", "goodlist", &commit_b, ])?; let commit_f = e.git_commit(&[("openpgp-policy.toml", None)], "F: xander good lists riley's commit", Some(&e.xander)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); let commit_g = e.git_commit(&[("workwork.txt", Some(b"g"))], "G: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); Ok(()) } #[test] #[allow(unused_variables)] fn via() -> anyhow::Result<()> { let (e, root) = create_environment()?; // F <- target // / \ // E D <- unauthorized // | | // | C // \ / // B // | // A // // When we do: sq-git log --trust-root A E..F, this means we want // a valid path from A to F via E. Since E is unauthorized, this // should fail. let commit_a = e.git_commit(&[("workwork.txt", Some(b"1"))], "A: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_b = e.git_commit(&[("workwork.txt", Some(b"2"))], "B: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_c = e.git_commit(&[("workwork.txt", Some(b"3"))], "C: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); let commit_d = e.git_commit(&[("workwork.txt", Some(b"4"))], "D: willow signs a commit", Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Reset to b. e.git(&["checkout", &commit_b])?; e.git(&["clean", "-fdx"])?; // Unauthorized. let commit_e = e.git_commit(&[("busybusy.txt", Some(b"1"))], "E: xander signs a commit", Some(&e.xander)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_err()); // Merge D and E. e.git(&[ "merge", "-m", "F: Merge D and E", &format!("-S{}", e.willow_release.fingerprint), &commit_d, &commit_e])?; let commit_f = e.git_current_commit()?; assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]).is_ok()); // Make sure that we can go via D. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_d, commit_f)]).is_ok()); // But not via E. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_e, commit_f)]).is_err()); // We can't authenticate E via F, as F comes later. assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..{}", commit_f, commit_e)]).is_err()); Ok(()) } #[test] fn external_policy_authenticates_trust_root() -> anyhow::Result<()> { // Normally the trust root is implicitly trusted. When we use an // external policy, we also use it to check the trust root. Make // sure that works. let (e, root) = create_environment()?; // Xander is not allowed to sign a commit. let commit_a = e.git_commit(&[("workwork.txt", Some(b"1"))], "A: xander signs a commit", Some(&e.xander)).unwrap(); // Willow is. let _commit_b = e.git_commit(&[("workwork.txt", Some(b"2"))], "B: willow signs a commit", Some(&e.willow)).unwrap(); // A is bad: Xander is not allowed to make a commit. assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); // When A is the trust root, it is implicitly trusted, and the // rest of the commits are good. assert!(e.sq_git(&["log", "--trust-root", &commit_a]).is_ok()); // But when we use an external policy, we also use the policy to // check A. So, it is bad again. assert!(e.sq_git(&["log", "--trust-root", &commit_a, "--policy-file", "openpgp-policy.toml"]).is_err()); // Authorize Xander. e.sq_git(&[ "policy", "authorize", e.xander.petname, &e.xander.fingerprint.to_string(), "--sign-commit", ])?; // When we use an external policy that says that Xander is // authorized, we're good again. assert!(e.sq_git(&["log", "--trust-root", &commit_a, "--policy-file", "openpgp-policy.toml"]).is_ok()); Ok(()) } #[test] fn symbolic_names() -> anyhow::Result<()> { // Make sure that symbolic names resolve. let (e, root) = create_environment()?; // Willow signs a commit. e.git(&["checkout", "-b", "commit-a"])?; let commit_a = e.git_commit(&[("workwork.txt", Some(b"1"))], "A: willow signs a commit", Some(&e.willow)).unwrap(); e.git(&["checkout", "-b", "commit-b"])?; let commit_b = e.git_commit(&[("workwork.txt", Some(b"2"))], "B: willow signs a commit", Some(&e.willow)).unwrap(); e.git(&["checkout", "-b", "commit-c"])?; let commit_c = e.git_commit(&[("workwork.txt", Some(b"3"))], "C: willow signs a commit", Some(&e.willow)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", &commit_a]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a"]).is_ok()); // Name doesn't exist... assert!(e.sq_git(&["log", "--trust-root", "commit_a"]).is_err()); // Symbolic names in different places. assert!(e.sq_git(&["log", "--trust-root", "commit-a", &commit_b]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a", &format!("{}..{}", commit_b, commit_c)]).is_ok()); // Mix of hashes and symbolic names. assert!(e.sq_git(&["log", "--trust-root", "commit-a", &format!("commit-b..{}", commit_c)]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a", &format!("{}..commit-c", commit_b)]).is_ok()); assert!(e.sq_git(&["log", "--trust-root", "commit-a", "commit-b..commit-c"]).is_ok()); Ok(()) } sequoia-git-0.5.0/tests/refs.rs000064400000000000000000000116271046102023000145330ustar 00000000000000mod common; use common::Environment; use common::Result; fn create_environment() -> Result<(Environment, String)> { Environment::scooby_gang_bootstrap(None) } #[test] #[allow(unused)] fn git_refs() -> anyhow::Result<()> { // The commits: // // commit-2-1 commit-3-1 // | good | good // commit-2-0 commit-3-0 // bad \ / good // commit-2 // | good // commit-1 // | good // commit-0 let (e, commit_0) = create_environment()?; let p = e.git_state(); e.git(&["branch", "commit-0"])?; let commit_1 = e.git_commit(&[("a", Some(b"1"))], "1", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-1"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); let commit_2 = e.git_commit(&[("a", Some(b"2"))], "2", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-2"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); // The bad commit. let commit_2_0 = e.git_commit(&[("a", Some(b"2-0"))], "2-0", Some(&e.xander)).unwrap(); e.git(&["branch", "commit-2-0"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_err()); let commit_2_1 = e.git_commit(&[("a", Some(b"2-1"))], "2-1", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-2-1"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_err()); // Move back to commit-2. e.git(&["checkout", "commit-2"])?; e.git(&["clean", "-fdx"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); let commit_3_0 = e.git_commit(&[("a", Some(b"3-0"))], "3-0", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-3-0"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); let commit_3_1 = e.git_commit(&[("a", Some(b"3-1"))], "3-1", Some(&e.willow)).unwrap(); e.git(&["branch", "commit-3-1"])?; assert!(e.sq_git(&["log", "--trust-root", &commit_0]).is_ok()); // Debugging. let output = e.git( &["log", "--pretty=oneline", "--graph", "commit-2-1", "commit-3-1"]) .unwrap(); eprintln!("{}", String::from_utf8_lossy(&output.stdout)); assert!(e.git(&["tag", "v1", "commit-1"]).is_ok()); assert!(e.git(&["tag", "v2", "commit-2"]).is_ok()); assert!(e.git(&["tag", "v2.1", "commit-2-1"]).is_ok()); let paths = &[ // Trust root / commit to check / ok / ok with trust root's parent. (&commit_1[..], "commit-1", &commit_2[..], "commit-2", true, true), (&commit_1[..], "commit-1", &commit_3_1[..], "commit-3-0", true, true), (&commit_1[..], "commit-1", &commit_3_1[..], "commit-3-1", true, true), (&commit_1[..], "commit-1", &commit_2_1[..], "commit-2-1", false, false), (&commit_2_0[..], "commit-2-0", &commit_2_1[..], "commit-2-1", true, false), // Use tags instead of branches. (&commit_1[..], "v1", &commit_2[..], "v2", true, true), (&commit_1[..], "v1", &commit_2_1[..], "v2.1", false, false), ]; for (trust_root_hash, trust_root, commit_hash, commit, good, p_good) in paths.iter() { eprintln!("Testing: {} ({}) .. {} ({}) ({}, {})", trust_root_hash, trust_root, commit_hash, commit, good, p_good); // Commit id. assert_eq!( e.sq_git(&["log", "--trust-root", trust_root_hash, commit_hash]) .is_ok(), *good); // Short commit id. assert_eq!( e.sq_git(&["log", "--trust-root", &trust_root_hash[0..7], &commit_hash[..]]) .is_ok(), *good); // Using branches. assert_eq!( e.sq_git(&["log", "--trust-root", trust_root, commit]) .is_ok(), *good); // Trust root's parent. assert_eq!( e.sq_git(&["log", "--trust-root", &format!("{}^", trust_root_hash), commit_hash]) .is_ok(), *p_good); // Trust root's parent, with branches assert_eq!( e.sq_git(&["log", "--trust-root", &format!("{}^", trust_root), commit]) .is_ok(), *p_good); // Make sure we can use the configuration file to set a trust // root. assert!(e.git(&["config", "sequoia.trustRoot", trust_root_hash]).is_ok()); assert_eq!( e.sq_git(&["log", commit_hash]) .is_ok(), *good); assert!(e.git(&["config", "sequoia.trustRoot", trust_root]).is_ok()); assert_eq!( e.sq_git(&["log", commit_hash]) .is_ok(), *good); } Ok(()) } sequoia-git-0.5.0/tests/revoked-cert.rs000064400000000000000000000064701046102023000161660ustar 00000000000000use std::fs; use sequoia_openpgp::types::ReasonForRevocation; mod common; use common::Environment; use common::rotate_subkeys; use common::revoke_cert; #[test] fn revoked_certificate() -> anyhow::Result<()> { // Consider: // // Alice is authorized to add commits at time t0. Then she // rotates her signing subkey. let e = Environment::new()?; let p = e.git_state(); let (alice, alice_pgp) = e.gen("alice", None, None); let alice_fpr = &alice.fingerprint().to_string(); // Alice adds herself as the project maintainer. e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_pgp, "--project-maintainer" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Initial commit.", ])?; let root = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Check that she can add commits. fs::write(p.join("2"), "2.")?; e.git(&["add", "2"])?; e.git(&[ "commit", "-m", "Alice adds a commit.", &format!("-S{}", alice_fpr), ])?; let _c2 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice rotates her signing subkey. let alice_rotated = rotate_subkeys(&alice); assert!(alice_rotated.keys().count() > alice.keys().count()); e.import(&alice_rotated).expect("can import"); e.sq_git(&[ "policy", "authorize", "alice", "--cert", &alice.fingerprint().to_string(), "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Adding rotated key.", &format!("-S{}", alice_fpr), ])?; let _c3 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; e.check_export("alice", None, &[ &alice_rotated ]); // Check that she can still add commits. fs::write(p.join("4"), "4.")?; e.git(&["add", "4"])?; e.git(&[ "commit", "-m", "Alice adds a commit.", &format!("-S{}", alice_fpr), ])?; let _c4 = e.git_current_commit()?; e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice revokes her certificate. let alice_revoked = revoke_cert(&alice_rotated, ReasonForRevocation::KeyRetired); let alice_revoked_pgp = e.serialize_cert("alice-revoked", &alice_revoked); e.sq_git(&[ "policy", "authorize", "alice", "--cert-file", &alice_revoked_pgp, "--sign-commit" ])?; e.git(&["add", "openpgp-policy.toml"])?; e.git(&[ "commit", "-m", "Adding revoked key.", &format!("-S{}", alice_fpr), ])?; let _c5 = e.git_current_commit()?; e.check_export("alice", None, &[ &alice_revoked ]); e.git(&["log"])?; e.sq_git(&["log", "--trust-root", &root])?; // Alice shouldn't be able to add any more commits. fs::write(p.join("6"), "6.")?; e.git(&["add", "6"])?; e.git(&[ "commit", "-m", "Alice adds a commit with her revoked key.", &format!("-S{}", alice_fpr), ])?; let _c6 = e.git_current_commit()?; e.git(&["log"])?; assert!(e.sq_git(&["log", "--trust-root", &root]).is_err()); Ok(()) } sequoia-git-0.5.0/tests/unrelated-repo.rs000064400000000000000000000061411046102023000165150ustar 00000000000000mod common; use common::Environment; #[test] fn create_environment() -> anyhow::Result<()> { let e = Environment::new()?; assert!(e.gnupg_state().exists()); assert!(e.git_state().exists()); Ok(()) } fn merge_unrelated_repo(signed: bool) -> anyhow::Result<()> { // Test if we can merge two unrelated repos. // // If `signed` is true, then we only test the case that there are // multiple roots; both repos use the same policy and all commits // are signed. // // If `signed` is false, then we sign the commits in one // repository, and in the other not only do we not sign the // commits, we don't even have a policy. let (e, root) = Environment::scooby_gang_bootstrap(None)?; e.git(&["checkout", "-b", "main"]) .expect("can create branch"); // Create some commits in the first repo. for i in 0..3 { e.git_commit( &[(&format!("repo-1-commit-{}", i + 1), Some(b"xxx"))], &format!("repo-1 commit #{}", i + 1), Some(&e.willow_release)).unwrap(); assert!(e.sq_git(&["log", "--trust-root", &root, &format!("{}..", root)]) .is_ok()); } let repo2 = e.scratch_state().join("repo2"); let repo2 = repo2.as_path(); e.init_repo(repo2).expect("Can init repo"); let root2 = if signed { e.scooby_gang_bootstrap_in(repo2, None).expect("Can bootstrap repo") } else { e.git_commit_in( repo2, &[(&format!("repo-2-commit-0"), Some(b"xxx"))], "repo-2 commit #0", None).unwrap() }; e.git_in(repo2, &["checkout", "-b", "main"]) .expect("can create branch"); // Create some commits in the second repo. for i in 0..3 { e.git_commit_in( repo2, &[(&format!("repo-2-commit-{}", i + 1), Some(b"xxx"))], &format!("repo-2 commit #{}", i + 1), if signed { Some(&e.willow_release) } else { None }).unwrap(); assert_eq!( e.sq_git_in(repo2, &["log", "--trust-root", &root2, &format!("{}..", root2)]) .is_ok(), signed); } // Add the second repo as a remote. e.git(&["remote", "add", "repo2", &repo2.display().to_string()]) .expect("can add remote"); e.git(&["fetch"]).expect("can fetch"); // Merge the two repositories' main branches. e.git_merge_no_ff(&["main", "repo2/main"], "Merging the two repositories", Some(&e.willow_release), &["--allow-unrelated-histories"]) .expect("can merge"); e.git_log_graph().expect("can run git log"); assert!(e.sq_git(&["log", "--trust-root", &root]) .is_ok()); assert_eq!( e.sq_git(&["log", "--trust-root", &root2]) .is_ok(), signed); Ok(()) } #[test] fn merge_unrelated_repo_signed_signed() -> anyhow::Result<()> { merge_unrelated_repo(true) } #[test] fn merge_unrelated_repo_signed_unsigned() -> anyhow::Result<()> { merge_unrelated_repo(false) }